30/09/2018, 19:26
Góp ý về đồ án nhỏ mình tự viết
Em có chương trình nhỏ mất gần 2 tháng mới viết xong. Dù đã hết hạn nộp bài nhưng cảm giác khá là sung sướng khi tự mình viết hết tất cả. Mấy anh chị chạy rồi cho em xin lời gốp ý với ạ. Có sai sót ở thiếu ở một số kiều kiện nhập ạ.
#include<iostream>
#include<iomanip>
using namespace std;
struct date{
int ngay;
int thang;
int nam;
};
struct thongtinlophoc{
char malophoc[5];
char hotengiaovien[30];
int siso;
char chude[30];
date ngaybatdau;
date ngayketthuc;
};
struct danhsach{
int solophoc;
thongtinlophoc danhsachlophoc[50];
};
void nhapthongtin(thongtinlophoc &lh){
cout << "
Nhap ma so lop hoc:";
fflush(stdin);
cin.getline(lh.malophoc, 6);
cout << "
Nhap ho ten giao vien:";
fflush(stdin);
cin.getline(lh.hotengiaovien, 31);
cout << "
Nhap chu de cua lop hoc:";
fflush(stdin);
cin.getline(lh.chude, 31);
cout << "
Nhap si so:";
cin >> lh.siso;
cout << "
Nhap ngay bat dau:";
cin >> lh.ngaybatdau.ngay >> lh.ngaybatdau.thang >> lh.ngaybatdau.nam;
cout << "
Nhap ngay ket thuc:";
cin >> lh.ngayketthuc.ngay >> lh.ngayketthuc.thang >> lh.ngayketthuc.nam;
}
void xuatthongtin(thongtinlophoc lh){
cout << "
Ma lop hoc: " << lh.malophoc;
cout << "
Ho ten giao vien :" << lh.hotengiaovien;
cout << "
Chu de: " << lh.chude;
cout << "
Si so: " << lh.siso;
cout << "
Ngay bat dau: " << lh.ngaybatdau.nam << "/" << lh.ngaybatdau.thang << "/" << lh.ngaybatdau.nam;
cout << "
Ngay ket thuc: " << lh.ngayketthuc.thang << "/" << lh.ngayketthuc.thang << "/" << lh.ngayketthuc.nam;
}
void nhaplophoc(danhsach &list){
cout << "
Nhap so luong lop hoc: ";
cin >> list.solophoc;
for (int i = 0; i < list.solophoc; i++)
{
cout << "
Nhap lop hoc thu: " << i + 1;
nhapthongtin(list.danhsachlophoc[i]);
}
}
void xuatlophoc(danhsach list)
{
for (int i = 0; i < list.solophoc; i++){
cout << "
Lop hoc thu: " << i + 1<<"
";
xuatthongtin(list.danhsachlophoc[i]);
}
}
void themlophoc(danhsach &list){
int n;
cout << "
Nhap so lop hoc can them: " ;
cin >> n;
int t = list.solophoc;
list.solophoc += n;
for (int i = t; i < list.solophoc; i++){
cout << "
Nhap lop hoc thu: " << i + 1;
nhapthongtin(list.danhsachlophoc[i]);
}
}
void timkiemlophoc(danhsach list){
int n,kq;
do{
cout << "
0. Thoat";
cout << "
1. Tim kiem theo ma lop hoc.";
cout << "
2. Tim kiem theo chu de.";
cout << "
3. Tim kiem theo ho ten giao vien.";
cout << "
4. Tim kiem theo si so.";
cout << "
5. Tim kiem theo ngay bat dau.";
cout << "
6. Tim kiem theo ngay ket thuc.";
do{
cout << "
Nhap lua chon: ";
cin >> n;
} while (!(n >= 0 && n <= 7));
switch (n)
{
case 1:
kq = 0;
char h[5];
cout << "
Nhap ma lop hoc can tim kiem: ";
fflush(stdin);
cin.getline(h, 6);
for (int i = 0; i < list.solophoc; i++)
{
if (strcmp(h,list.danhsachlophoc[i].malophoc) == 0)
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq = 0){
cout << "
Khong co ma lop hoc nay trong danh sach.";
break;
}
else break;
case 2:
kq = 0;
char chude[30];
cout << "
Nhap chu de can tim kiem: ";
fflush(stdin);
cin.getline(chude, 31);
for (int i = 0; i < list.solophoc; i++)
{
if (strcmp(chude, list.danhsachlophoc[i].chude) == 0)
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq == 0)
{
cout << "
Khong co chu de can tim kiem trong danh sach.";
break;
}
else
break;
case 3:
kq = 0;
char tengiaovien[30];
cout << "
Nhap ten giao vien can tim kiem: ";
fflush(stdin);
cin.getline(tengiaovien, 31);
for (int i = 0; i < list.solophoc; i++){
if (strcmp(tengiaovien, list.danhsachlophoc[i].chude) == 0)
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq == 0){
cout << "
Khong co ten giao vien trong danh sach.";
break;
}
else break;
case 4:
kq = 0;
int siso;
cout << "
Nhap si so can tim kiem: ";
cin >> siso;
for (int i = 0; i < list.solophoc; i++)
{
if (siso == list.danhsachlophoc[i].siso)
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq == 0){
cout << "
Khong co si so nay trong danh sach.";
break;
}
else break;
case 5:
kq = 0;
int a, b, c;
cout << "
Nhap ngay thang nam bat dau: ";
cin >> a;
cin >> b;
cin >> c;
for (int i = 0; i < list.solophoc; i++)
{
if ((list.danhsachlophoc[i].ngaybatdau.nam == a) && (list.danhsachlophoc[i].ngaybatdau.thang == b) && (list.danhsachlophoc[i].ngaybatdau.nam == c))
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq == 0){
cout << "
Khong co thoi gian nam trong danh sach.";
break;
}
else break;
case 6:
kq = 0;
int n, m, d;
cout << "
Nhap ngay thang nam ket thuc: ";
cin >> n;
cin >> m;
cin >> d;
for (int i = 0; i < list.solophoc; i++)
{
if ((list.danhsachlophoc[i].ngayketthuc.ngay == n )&& (list.danhsachlophoc[i].ngayketthuc.thang == m)&&(list.danhsachlophoc[i].ngayketthuc.nam == d))
{
xuatthongtin(list.danhsachlophoc[i]);
kq++;
}
}
if (kq == 0){
cout << "
Thoi gian nay khong co trong danh sach.";
break;
}
else break;
}
} while (n != 0);
}
void xoalophoc(danhsach &list){
int flag = 0;
char malophoc[30];
cout << "
Nhap ma so lop hoc can xoa: ";
fflush(stdin);
cin.getline(malophoc, 31);
for (int n = 0; n < list.solophoc; n++)
{
if (strcmp(malophoc, list.danhsachlophoc[n].malophoc) == 0)
flag = 1;
}
if (flag == 1)
{
for (int i = 0; i < list.solophoc; i++)
{
if (strcmp(malophoc, list.danhsachlophoc[i].malophoc) == 0)
{
list.danhsachlophoc[i] = list.danhsachlophoc[i + 1];
for (int n = i + 1; n < list.solophoc; n++)
{
list.danhsachlophoc[n] = list.danhsachlophoc[n + 1];
}
list.solophoc--;
}
}
}
else cout << "
Khong co ma lop hoc nay trong danh sach.";
}
void capnhaplophoc(danhsach &list)
{
int a, u;
cout << "
Cap nhap lop hoc thu: ";
cin >> u;
u -= 1;
do{
cout << "
0. Thoat.";
cout << "
1. Cap nhap lai ma so lop hoc.";
cout << "
2. Cap nhap lai chu de.";
cout << "
3. Cap nhap lai si so.";
cout << "
4. Cap nhao lai ten giao vien.";
cout << "
5. Cap nhap lai thoi gian bat dau.";
cout << "
6. Cap nhap lai thoi gian ket thuc.";
cout << "
Nhap lua chon: ";
do{
cin >> a;
} while (!(a >= 0 && a <= 6));
switch (a)
{
case 1:
cout << "
Nhap ma lop hoc moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].malophoc, 6);
break;
case 2:
cout << "
Nhap lai chu de moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].chude, 31);
break;
case 3:
cout << "
Nhap lai si so moi: ";
cin >> list.danhsachlophoc[u].siso;
break;
case 4:
cout << "
Nhap lai ten giao vien moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].hotengiaovien, 31);
break;
case 5:
cout << "
Nhap lai thoi gian bat dau moi: ";
cin >> list.danhsachlophoc[u].ngaybatdau.ngay;
cin >> list.danhsachlophoc[u].ngaybatdau.thang;
cin >> list.danhsachlophoc[u].ngaybatdau.nam;
break;
case 6:
cout << "
Nhap lai thoi gian ket thuc moi: ";
cin >> list.danhsachlophoc[u].ngayketthuc.ngay;
cin >> list.danhsachlophoc[u].ngayketthuc.thang;
cin >> list.danhsachlophoc[u].ngayketthuc.nam;
break;
}
} while (a != 0);
}
void dongnhat(danhsach list){
int max = list.danhsachlophoc[0].siso;
for (int i = 0; i < list.solophoc; i++)
{
if (max < list.danhsachlophoc[i].siso)
max = list.danhsachlophoc[i].siso;
}
cout << "
Lop hoc co si so dong nhat la:
";
for (int i = 0; i < list.solophoc; i++)
{
if (max == list.danhsachlophoc[i].siso)
xuatthongtin(list.danhsachlophoc[i]);
}
}
void thongke(danhsach list){
int i = 0; int j = 0;
while (i < list.solophoc){
int dem = 1;
j = i;
while (j < list.solophoc){
if (strcmp(list.danhsachlophoc[j + 1].chude, list.danhsachlophoc[j].chude) == 0){
j++;
dem++;
}
else break;
}
cout << "
Chu de " << list.danhsachlophoc[i].chude << "xuat hien " << dem << " lan";
i = i + dem;
}
}
void sapxep(danhsach list){
int temp;
for (int i = 0; i < list.solophoc-1; i++){
for (int n = i + 1; n>0; n--){
if (list.danhsachlophoc[n].siso > list.danhsachlophoc[n + 1].siso)
{
temp = list.danhsachlophoc[n].siso;
list.danhsachlophoc[n].siso = list.danhsachlophoc[n + 1].siso;
list.danhsachlophoc[n + 1].siso = temp;
}
}
}
}
void main(){
danhsach list;
list.solophoc = 0;
int luachon;
do{
cout << "
0. Thoat.";
cout << "
1. Nhap lop hoc.";
cout << "
2. Xuat lop hoc.";
cout << "
3. Them lop hoc.";
cout << "
4. Tim kiem lop hoc.";
cout << "
5. Xoa lop hoc.";
cout << "
6. Cap nhap lai thong tin lop hoc.";
cout << "
7. Lop hoc co si so dong nhat la.";
cout << "
8. Sap xep lai hoc giam dan.";
cout << "
9. Thong ke cac lop hoc co cung chu de.";
cout << "
Nhap lua chon: ";
cin >> luachon;
switch (luachon)
{
case 0:
exit(0);
case 1:
nhaplophoc(list);
break;
case 2:
if (list.solophoc == 0)
cout << "
Khong co lop hoc nao ca.";
else
xuatlophoc(list);
break;
case 3:
if (list.solophoc == 0)
cout << "
Phai nhap lop hoc truoc khi them.";
else
themlophoc(list);
break;
case 4:
if (list.solophoc == 0)
cout << "
Khong co lop hoc nao trong danh sach de tim kiem.";
else
timkiemlophoc(list);
break;
case 5:
if (list.solophoc == 0)
cout << "
Khong co lop hoc nao trong danh sach.";
else xoalophoc(list);
break;
case 6:
if (list.solophoc == 0)
cout << "
Khong co lop hoc nao de cap nhap.";
else capnhaplophoc(list);
break;
case 7:
if (list.solophoc == 0){
cout << "
Khong co lop hoc nao trong danh sach.";
break;
}
else
dongnhat(list);
break;
case 8:
if (list.solophoc == 0){
cout<<"
Khong co lop hoc nao trong danh sach.";
break;
}
else
sapxep(list);
break;
case 9:
if (list.solophoc == 0){
cout << "
Khong co lop hoc nao trong danh sach.";
break;
}
else thongke(list);
break;
}
} while (true);
}
Bài liên quan
Bên mình đồ án quản lí thư viện không cho xài struct làm trong 20 ngày (2k5 dòng)
thêm cái ghi thông tin ra tếp. khi bạn chạy lại chương trình thì có sẵn thông tin nạp vào danh sách nữa!!!
2 tháng nói thật là quá lâu cho một bài tập có thể clone lại trong chưa đầy 1 buổi chiều.
Về logic thì mình không nói vì không đọc kĩ được code, còn bổ sung cho bạn là lên có CSDL tức file txt lưu lại tất cả thông tin, và load ngược lại lên ct, chạy xong rồi tắt di mất hết tiêu rồi
Nghe từ đồ án mình tưởng n phải hoành tráng
Hồi xưa đề này mình làm là bài tập lớn lấy điểm thực hành của môn Kỹ Thuật lt thôi. Cũng struct lồng ntn mình viết mất 2 ngày và khoảng 1 ngày để fix mấy lỗi lặt vặt. Thật sự bạn viết 2 tháng thì thật lâu quá rồi.
Các bạn trên bình tĩnh, bạn ấy sinh năm 1997 tức là chỉ mới học xong HKI năm nhất thôi mà ;)…
Mới 97 mà vậy là tốt lắm rồi
Ủa, nếu không xài struct thì làm thế nào dc bn???
sẽ có struct cho bạn làm
ngày xưa thì ai mà chả như ai , cũng viết mấy chương trình consol , nhưng mà 2 tháng thì quá lâu thì phải , phân tích xong bài toán thì , viết code chắc trong 1 ngày là xong
Về thuật toán thì … mình lười đọc quá.
Mình chỉ nhận xét về cách tổ chức chương trình
Mình lười đọc code quá, ahihi. Hai tháng thì hơi lâu, nhưng không sao, quan trọng là hai tháng đó học được gì thôi
nghiên cứu về OOP đi em. nó sẽ giúp em thay 2 tháng = 2 giờ đó.
thì xài mảng 2 chiều bạn nhá,cứ mỗi 1 thông tin là một cái mảng 2 chiều
Mỗi một hàm thì bạn phải cho một đống mảng thông tin vào viết muốn nhũng não
@Phong_Tran @stormitlv
Em cảm ơn mấy anh góp ý, sẽ cố gắng để đuổi kịp mấy anh
cứ học từ từ đi bạn , cố lên
ý mình là bạn có thể sẽ có 1 đa gần tương tự và dùng struct