TRƯỜNG ĐẠI HỌC MỞ HÀ NỘIKHOA CÔNG NGHỆ THÔNG TINĐề 6 Bài Toán Quản Lý Học Tập Của Học Sinh Phổ Thông:Giảng viên hướng dẫn : Ths Trịnh Thị XuânSinh viên thực hiện: Nguyễn Huy Hải -2010A01
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Đề 6 Bài Toán Quản Lý Học Tập Của Học Sinh Phổ Thông:
Giảng viên hướng dẫn : Ths Trịnh Thị Xuân Sinh viên thực hiện: Nguyễn Huy Hải -2010A01
Nguyễn Quốc Hiếu -2010A04 Đặng Quang Huy -2010A04 Hoàng Trọng Mạnh -2010A03
BÁO CÁO BÀI TẬP LỚN
MÔN:CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Nhóm 6
Trang 2Mục lục:
I.Xác định bài toán……….trang 3II.Tìm cấu trúc dữ liệu biểu diễn bài toán……… trang 3III Thuật toán……… trang 3Các chức năng cần đạt được của bài toán là:……… trang 4IV.Lập trình –cài đặt……… trang 6Liên kết đơn……….trang 6Liên kết đôi……… trang 30Ngăn xếp Stack……… trang 54V.Lập bộ test……….trang 79
1
Trang 3PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN
HỌ VÀ TÊN CÔNG VIỆC THỜI GIAN
THỰC HIỆN
GHI CHÚ
Trang 4I Xác định bài toán.
Quản lý điểm học sinh trung học là công việc quản lý thông tin điểm của tất cả các môn học của một học sinh Công tác quản lý điểm phục vụ cho học sinh là chủ yếu Từ đó, học sinh có thể biết được kết quả mình đạt đưuọc sau mỗi kì học Ngoài ra, quản lý điểm học sinh còn giúp nhà trường theo dõi được tình hình học tập của từng học sinh trong trường.
Từ đó, có thể đưa ra hình thức khen thưởng hay cảnh cáo đối với từng học sinh.
II Xác định CSDL biểu diễn bài toán.
Đối tượng được quản lý bài toán bao gồm: Học sinh,Môn
học, Bảng điểm
- HỌC SINH : Mã học sinh, tên học sinh, giới tính, ngày
sinh, địa chỉ
- MÔN HỌC: Mã môn, tên môn, số buổi, số tiết.
- BẢNG ĐIỂM : Mã điểm, mã học sinh, mã môn học, điểm
miệng, điểm 15 phút, điểm 1 tiết, điểm trung bình.
III.Thuật toán
Chương trình khi chạy ban đầu xuất xuất hiện danh
sách lựa chọn chức năng:
1 Quản lý danh sách học sinh
2 Quản lý danh sách môn học
3
Trang 53 Quản lý danh sách bảng điểm
Mời bạn chọn:
Nếu chọn số 1, gồm các chức năng sau:
1.1 Nhập danh sách học sinh từ bàn phím
1.2 In danh sách học sinh lên màn hình
1.3 Lưu danh sách học sinh vào file
1.4 Đọc danh sách học sinh từ file
1.5 Tìm kiếm học sinh theo mã học sinh
1.6 Tìm kiếm học sinh theo lớp
1.7 Sắp xếp danh sách học sinh tăng dần theo mã họcsinh
1.8 Thêm một học sinh mới
2.3 In tên môn học có số tiết > x
2.4 Sắp xếp danh sách theo thứ tự giảm dần số buổihọc
Trang 62.5 Đếm số môn học.
2.6 Hiện những môn có số buổi >10
2.7 Tính tổng số buổi trong danh sách
3.1 Nhập danh sách điểm và ghi dữ liệu
3.2 Hiện danh sách điểm lên màn hình
3.3 Tìm kiếm bảng điểm theo mã học sinh
3.4 Hiện bảng điểm có điểm trung bình cao nhất.3.5 Xóa thông tin bảng điểm ở đầu
3.6 Sắp xếp danh sách bảng điểm theo thứ tự tăng dầncủa điểm trung bình
3.7 Hiện thông tin bảng điểm có điểm trung bình lớnhơn x
3.8 Sửa thông tin bảng điểm theo mã học sinh.3.9 Đọc dữ liệu từ file
………
………
Mời bạn chọn:
5
Trang 8struct NodeHocSinh *next;
Trang 10cout<<"Nhap ma hoc sinh: ";cin>>x.maHs; cout<<"Nhap ten hoc sinh: ";
cin.ignore();
getline(cin,x.hoTen);
cout<<"Nhap gioi tinh: ";cin>>x.gioiTinh; cout<<"Nhap ngay sinh: ";cin>>x.ngaySinh; cout<<"Nhap dia chi: ";cin>>x.diaChi;}
Trang 11cout<<" =====Danh sach hoc sinh====== "<<endl;
cout<<setw(7)<<" Ma "<<setw(12)<<" Ho ten "<<setw(12)<<" Gioi tinh
"<<setw(12)<<" Ngay sinh "<<setw(12)<<" Dia chi "<<endl;
Trang 12//DANH SACH LIEN KET DON MON HOCstruct Monhoc
Trang 15cout<<setw(7)<<" Ma mon hoc "<<setw(10)<<" Ten mon hoc "<<setw(10)<<"
So tiet "<<setw(8)<<" So buoi "<<endl;
Trang 16float diemMieng,diem15p,diem1tiet,diemTB; Monhoc dsmh[20];
Trang 18}
}
void nhapBang(BangDiem &x)
{
cout<<"Nhap ma bang diem: ";cin>>x.maDiem;
cout<<"Nhap ma hoc sinh: ";cin>>x.maHocSinh; cout<<"Nhap ma mon hoc: ";cin>>x.maMonHoc; cout<<"Nhap diem mieng: ";cin>>x.diemMieng; cout<<"Nhap diem 15p: ";cin>>x.diem15p;
cout<<"Nhap diem 1 tiet: ";cin>>x.diem1tiet;
x.diemTB=(x.diemMieng+x.diem15p*2+x.diem1tiet*3)/6;
Trang 22void bangMax(ListDiem &b)
Trang 23for(q=p->next;q!=NULL;q=q->next) {
if(p->info.diemTB>q->info.diemTB) {
tg=p->info;
p->info=q->info;
q->info=tg;
Trang 25int masua;
cout<<"Nhap ma hoc sinh can sua:";cin>>masua;
bool check = false;
Trang 26cout<<"\n 1.Nhap danh sach bang diem va ghi du lieu.";
cout<<"\n 2.Hien danh sach bang diem ";
cout<<"\n 3.Tim kiem bang diem theo ma hoc sinh.";
cout<<"\n 4.Hien bang diem co diem trung binh cao nhat."; cout<<"\n 5.Xoa thong tin bang diem o dau";
cout<<"\n 6.Sap xep danh sach theo thu tu tang dan cua diem TB"; cout<<"\n 7.Hien thong tin bang co diem TB >x";
cout<<"\n 8.Sua thong tin bang diem theo ma hoc sinh";
cout<<"\n 9.Doc du lieu tu file ";
cout<<"\n 0.Thoat!";
cout<<"\n Moi chon:";cin>>chon;
25
Trang 28case 7: hienTT(b); break;
case 8: suaBangDiem(b); break;
Trang 32NodeHocSinh *getNode(HOCSINH x){
Trang 33void in1(HOCSINH x)
{
// ma ten gioi tinh ngaysinh diachi cout<<"\n"<<setw(7)<<x.maHs;
Trang 35cout<<setw(7)<<" Ma "<<setw(10)<<" Ho ten "<<setw(15)<<" Gioi tinh
"<<setw(15)<<" Ngay sinh "<<setw(15)<<" Dia chi "<<endl;
struct NodeMonhoc *next;
struct NodeMonhoc *prev;
};
struct ListMonhoc
Trang 37cout<<"Nhap ma mon hoc: ";cin>>v.maMh;
cout<<"Nhap ten mon hoc: ";
cin.ignore();
Trang 38cout<<"Nhap so buoi hoc: ";cin>>v.soBuoi; cout<<"Nhap so tiet hoc: ";cin>>v.soTiet;}
}
}
void hienDsmh(ListMonhoc &m)
37
Trang 63cout<<setw(7)<<" Ma mon hoc "<<setw(10)<<" Ten mon hoc "<<setw(15)<<"
So tiet "<<setw(8)<<" So buoi "<<endl;
for(q=m.top;q!=NULL;q=q->next)
{
hienmonhoc(q->info);
Trang 65b.top=NULL;
}
StackNodeDiem *getNodeD(BangDiem x){
Trang 66cout<<"Nhap ma bang diem: ";cin>>x.maDiem;
cout<<"Nhap ma hoc sinh: ";cin>>x.maHocSinh; cout<<"Nhap ma mon hoc: ";cin>>x.maMonHoc; cout<<"Nhap diem mieng: ";cin>>x.diemMieng; cout<<"Nhap diem 15p: ";cin>>x.diem15p;
cout<<"Nhap diem 1 tiet: ";cin>>x.diem1tiet;
x.diemTB=(x.diemMieng+x.diem15p*2+x.diem1tiet*3)/6;}
65
Trang 67void hienBang(BangDiem x)
{
cout<<"\n"<<setw(7)<<x.maDiem; cout<<setw(15)<<x.maHocSinh; cout<<setw(15)<<x.maMonHoc; cout<<setw(12)<<x.diemMieng; cout<<setw(12)<<x.diem15p;
cout<<setw(12)<<x.diem1tiet; cout<<setw(12)<<x.diemTB;
Trang 68void hienDsBang(StackDiem &b)
{
StackNodeDiem *p;
cout<<setw(7)<<"Ma diem"<<setw(15)<<"Ma hoc sinh"<<setw(15)<<"Ma monhoc"<<setw(12)<<"Diem mieng"<<setw(12)<<"Diem 15p"<<setw(12)<<"Diem1tiet"<<setw(12)<<"Diem TB";
Trang 70if(max==p->info.diemTB)
{
69
Trang 71hienBang(p->info);
}
}
}
//Xoa thong tin bang diem o dau
void PopDiem(StackDiem &b)
Trang 72{
for(q=p->next;q!=NULL;q=q->next) {
if(p->info.diemTB>q->info.diemTB) {
if(p->info.diemTB>x)
71
Trang 74cout<<"\n 1.Nhap danh sach bang diem va ghi du lieu.";
cout<<"\n 2.Hien danh sach bang diem ";
73
Trang 75cout<<"\n 3.Tim kiem bang diem theo ma hoc sinh.";
cout<<"\n 4.Hien bang diem co diem trung binh cao nhat."; cout<<"\n 5.Xoa thong tin bang diem o dau";
cout<<"\n 6.Sap xep danh sach theo thu tu tang dan cua diem TB"; cout<<"\n 7.Hien thong tin bang co diem TB >x";
cout<<"\n 8.Sua thong tin bang diem theo ma hoc sinh";
cout<<"\n 9.Doc du lieu tu file ";
Trang 76cout<<"Khong tim thay";
exit(1);
}
else cout<<"Tim thay"<<endl;
cout<<setw(7)<<"Ma diem"<<setw(15)<<"Ma hoc sinh"<<setw(15)<<"Ma monhoc"<<setw(12)<<"Diem mieng"<<setw(12)<<"Diem 15p"<<setw(12)<<"Diem1tiet"<<setw(12)<<"Diem TB";
case 7: hienTT(b); break;
case 8: suaBangDiem(b); break;
case 9:
docFile2(b);
//hienDsBang(b);
75
Trang 78cout<<"\n 1.Nhap va hien danh sach hoc sinh"; cout<<"\n 2.Nhap va hien danh sach mon hoc"; cout<<"\n 3.Danh sach bang diem";
Trang 79V-Kiểm thử -Bộ test:
Nhập và hiện danh sách học sinh:
Trang 80Nhập và hiện danh sách môn học:
79
Trang 81Menu bảng điểm:
Nhập danh sách bảng điểm và ghi dữ liệu:
Hiện danh sách bảng điểm :
Trang 82Tìm kiếm bảng điểm theo mã học sinh:
Tìm bảng điểm có điểm trung bình cao nhất:
Xóa bảng điểm ở đầu danh sách:
Sắp xếp bảng điểm theo thứ tự tăng dần của bảng điểm:
81
Trang 83Hiện thông tin bảng điểm có điểm trung bình > x:
Đọc file: