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);
}
Lê Tuấn Anh viết 21:30 ngày 30/09/2018

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)

Cong Nguyen viết 21:36 ngày 30/09/2018

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!!!

Khôi Trần viết 21:33 ngày 30/09/2018

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

Phan Lương Quân viết 21:38 ngày 30/09/2018

Nghe từ đồ án mình tưởng n phải hoành tráng

Quang Nguyen viết 21:31 ngày 30/09/2018

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.

huy vo viết 21:33 ngày 30/09/2018

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à ;)…

Lê Anh Tuấn viết 21:27 ngày 30/09/2018

Mới 97 mà vậy là tốt lắm rồi

Lương Vũ viết 21:34 ngày 30/09/2018

Ủa, nếu không xài struct thì làm thế nào dc bn???

Trần Hồng Phong viết 21:30 ngày 30/09/2018

sẽ có struct cho bạn làm

Reoteu Ray viết 21:32 ngày 30/09/2018

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

Trần Hồng Phong viết 21:27 ngày 30/09/2018

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

  • Bạn bỏ hết trong 1 file .cpp à? - Không nên, tách ra để quản lí nhé
  • Có hàm quá dài - nên tách ra nhiều hàm
  • Các cách đặt tên (Biến, Hàm, Struct,…), một số điểm khác - nên tham khảo tài liệu Phong cách lập trình. Có thể tham khảo cơ bản tại đây hoặc tại đây

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

Hoàng Phi Hồng viết 21:41 ngày 30/09/2018

nghiên cứu về OOP đi em. nó sẽ giúp em thay 2 tháng = 2 giờ đó.

Lê Tuấn Anh viết 21:30 ngày 30/09/2018

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

thanh viết 21:29 ngày 30/09/2018

Em cảm ơn mấy anh góp ý, sẽ cố gắng để đuổi kịp mấy anh

Le Van Tuan viết 21:43 ngày 30/09/2018

cứ học từ từ đi bạn , cố lên

Trần Hồng Phong viết 21:30 ngày 30/09/2018

ý mình là bạn có thể sẽ có 1 đa gần tương tự và dùng struct

Bài liên quan
0