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 << "\nNhap ma so lop hoc:";
fflush(stdin);
cin.getline(lh.malophoc, 6);
cout << "\nNhap ho ten giao vien:";
fflush(stdin);
cin.getline(lh.hotengiaovien, 31);
cout << "\nNhap chu de cua lop hoc:";
fflush(stdin);
cin.getline(lh.chude, 31);
cout << "\nNhap si so:";
cin >> lh.siso;
cout << "\nNhap ngay bat dau:";
cin >> lh.ngaybatdau.ngay >> lh.ngaybatdau.thang >> lh.ngaybatdau.nam;
cout << "\nNhap ngay ket thuc:";
cin >> lh.ngayketthuc.ngay >> lh.ngayketthuc.thang >> lh.ngayketthuc.nam;
}
void xuatthongtin(thongtinlophoc lh){
cout << "\nMa lop hoc: " << lh.malophoc;
cout << "\nHo ten giao vien :" << lh.hotengiaovien;
cout << "\nChu de: " << lh.chude;
cout << "\nSi so: " << lh.siso;
cout << "\nNgay bat dau: " << lh.ngaybatdau.nam << "/" << lh.ngaybatdau.thang << "/" << lh.ngaybatdau.nam;
cout << "\nNgay ket thuc: " << lh.ngayketthuc.thang << "/" << lh.ngayketthuc.thang << "/" << lh.ngayketthuc.nam;
}
void nhaplophoc(danhsach &list){
cout << "\nNhap so luong lop hoc: ";
cin >> list.solophoc;
for (int i = 0; i < list.solophoc; i++)
{
cout << "\nNhap lop hoc thu: " << i + 1;
nhapthongtin(list.danhsachlophoc[i]);
}
}
void xuatlophoc(danhsach list)
{
for (int i = 0; i < list.solophoc; i++){
cout << "\nLop hoc thu: " << i + 1<<"\n";
xuatthongtin(list.danhsachlophoc[i]);
}
}
void themlophoc(danhsach &list){
int n;
cout << "\nNhap so lop hoc can them: " ;
cin >> n;
int t = list.solophoc;
list.solophoc += n;
for (int i = t; i < list.solophoc; i++){
cout << "\nNhap lop hoc thu: " << i + 1;
nhapthongtin(list.danhsachlophoc[i]);
}
}
void timkiemlophoc(danhsach list){
int n,kq;
do{
cout << "\n0. Thoat";
cout << "\n1. Tim kiem theo ma lop hoc.";
cout << "\n2. Tim kiem theo chu de.";
cout << "\n3. Tim kiem theo ho ten giao vien.";
cout << "\n4. Tim kiem theo si so.";
cout << "\n5. Tim kiem theo ngay bat dau.";
cout << "\n6. Tim kiem theo ngay ket thuc.";
do{
cout << "\nNhap lua chon: ";
cin >> n;
} while (!(n >= 0 && n <= 7));
switch (n)
{
case 1:
kq = 0;
char h[5];
cout << "\nNhap 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 << "\nKhong co ma lop hoc nay trong danh sach.";
break;
}
else break;
case 2:
kq = 0;
char chude[30];
cout << "\nNhap 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 << "\nKhong co chu de can tim kiem trong danh sach.";
break;
}
else
break;
case 3:
kq = 0;
char tengiaovien[30];
cout << "\nNhap 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 << "\nKhong co ten giao vien trong danh sach.";
break;
}
else break;
case 4:
kq = 0;
int siso;
cout << "\nNhap 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 << "\nKhong co si so nay trong danh sach.";
break;
}
else break;
case 5:
kq = 0;
int a, b, c;
cout << "\nNhap 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 << "\nKhong co thoi gian nam trong danh sach.";
break;
}
else break;
case 6:
kq = 0;
int n, m, d;
cout << "\nNhap 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 << "\nThoi gian nay khong co trong danh sach.";
break;
}
else break;
}
} while (n != 0);
}
void xoalophoc(danhsach &list){
int flag = 0;
char malophoc[30];
cout << "\nNhap 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 << "\nKhong co ma lop hoc nay trong danh sach.";
}
void capnhaplophoc(danhsach &list)
{
int a, u;
cout << "\nCap nhap lop hoc thu: ";
cin >> u;
u -= 1;
do{
cout << "\n0. Thoat.";
cout << "\n1. Cap nhap lai ma so lop hoc.";
cout << "\n2. Cap nhap lai chu de.";
cout << "\n3. Cap nhap lai si so.";
cout << "\n4. Cap nhao lai ten giao vien.";
cout << "\n5. Cap nhap lai thoi gian bat dau.";
cout << "\n6. Cap nhap lai thoi gian ket thuc.";
cout << "\nNhap lua chon: ";
do{
cin >> a;
} while (!(a >= 0 && a <= 6));
switch (a)
{
case 1:
cout << "\nNhap ma lop hoc moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].malophoc, 6);
break;
case 2:
cout << "\nNhap lai chu de moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].chude, 31);
break;
case 3:
cout << "\nNhap lai si so moi: ";
cin >> list.danhsachlophoc[u].siso;
break;
case 4:
cout << "\nNhap lai ten giao vien moi: ";
fflush(stdin);
cin.getline(list.danhsachlophoc[u].hotengiaovien, 31);
break;
case 5:
cout << "\nNhap 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 << "\nNhap 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 << "\nLop hoc co si so dong nhat la: \n";
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 << "\nChu 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 << "\n0. Thoat.";
cout << "\n1. Nhap lop hoc.";
cout << "\n2. Xuat lop hoc.";
cout << "\n3. Them lop hoc.";
cout << "\n4. Tim kiem lop hoc.";
cout << "\n5. Xoa lop hoc.";
cout << "\n6. Cap nhap lai thong tin lop hoc.";
cout << "\n7. Lop hoc co si so dong nhat la.";
cout << "\n8. Sap xep lai hoc giam dan.";
cout << "\n9. Thong ke cac lop hoc co cung chu de.";
cout << "\nNhap lua chon: ";
cin >> luachon;
switch (luachon)
{
case 0:
exit(0);
case 1:
nhaplophoc(list);
break;
case 2:
if (list.solophoc == 0)
cout << "\nKhong co lop hoc nao ca.";
else
xuatlophoc(list);
break;
case 3:
if (list.solophoc == 0)
cout << "\nPhai nhap lop hoc truoc khi them.";
else
themlophoc(list);
break;
case 4:
if (list.solophoc == 0)
cout << "\nKhong co lop hoc nao trong danh sach de tim kiem.";
else
timkiemlophoc(list);
break;
case 5:
if (list.solophoc == 0)
cout << "\nKhong co lop hoc nao trong danh sach.";
else xoalophoc(list);
break;
case 6:
if (list.solophoc == 0)
cout << "\nKhong co lop hoc nao de cap nhap.";
else capnhaplophoc(list);
break;
case 7:
if (list.solophoc == 0){
cout << "\nKhong co lop hoc nao trong danh sach.";
break;
}
else
dongnhat(list);
break;
case 8:
if (list.solophoc == 0){
cout<<"\nKhong co lop hoc nao trong danh sach.";
break;
}
else
sapxep(list);
break;
case 9:
if (list.solophoc == 0){
cout << "\nKhong co lop hoc nao trong danh sach.";
break;
}
else thongke(list);
break;
}
} while (true);
}