GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viênLỜI MỞ ĐẦU Từ khi bắt đầu làm đề tài môn đồ án “Quản lí điểm sinh viên” đến nay, chúng em đãnhận được nhiều sự quan tâm giúp đỡ của cô Trần
Trang 1ĐẠI HỌC ĐÀ NẴNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CƠ SỞ
ĐỀ TÀI 704 XÂY DỰNG ỨNG DỤNG QUẢN LÝ ĐIỂM CỦA SINH VIÊN THEO TỪNG MÔN HỌC
SINH VIÊN THỰC HIỆN 1.LÊ HOÀNG NGỌC HÂN LỚP: 19TCLC_DT4 NHÓM: 19.10A 2.TRƯƠNG THỊ MỸ DUYÊN LỚP: 19TCLC_DT4 NHÓM: 19.10A
GIÁO VIÊN HƯỚNG DẪN TRẦN HỒ THỦY TIÊN
Đà Nẵng, 5-2020
Trang 3GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
LỜI MỞ ĐẦU
Từ khi bắt đầu làm đề tài môn đồ án “Quản lí điểm sinh viên” đến nay, chúng em đãnhận được nhiều sự quan tâm giúp đỡ của cô Trần Hồ Thủy Tiên Với lòng biết ơn sâu sắc nhất, chúng em xin gửi đến cô lời cảm ơn vì cô đã dành hết tâm huyết của mình để truyền đạt kiến thức cho em trong suốt thời gian làm đồ án Nhóm chúng em xin chân thành cảm ơn cô đã tận tình giảng dạy và hướng dẫn chúng em trong lúc làm đề tài Nếu không có những bài hướng dẫn chỉ dạy của cô thì bài báo cáo này của chúng em khó có thể hoàn thiện Dù đã kiểm tra nhiều lần nhưng trong báo cáo này khó tránh khỏi những sai sót, rất mong các thầy cô bỏ qua và nhóm chúng em hy vọng nhận được những đóng góp của thầy cô để giúp đồ án của chúng em được hoàn thiện hơn Chúng em xin chân thành cảm ơn
Sinh viên thực hiệnTRƯƠNG THỊ MỸ DUYÊN
LÊ HOÀNG NGỌC HÂN
Trang 4GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
MỤC LỤC
1
LỜI MỞ ĐẦU 2
MỤC LỤC 3
DANH MỤC HÌNH VẼ 4
1 GIỚI THIỆU ĐỀ TÀI 5
2 CƠ SỞ LÝ THUYẾT 5
2.1 Ý tưởng 5
2.2 Cơ sở lý thuyết 5
3 TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN 5
3.1 Phát biểu bài toán 5
3.2 Cấu trúc dữ liệu 5
3.3 Thuật toán 5
4 CHƯƠNG TRÌNH VÀ KẾT QUẢ 5
4.1 Tổ chức chương trình 5
4.2 Kết quả 5
4.2.1 Giao diện chính của chương trình 5
4.2.2 Kết quả thực thi của chương trình 5
4.2.3 Nhận xét 5
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5
a Kết luận 5
b Hướng phát triển 5
TÀI LIỆU THAM KHẢO 6
[1] Tên tác giả, Tên tài liệu, Tên nhà xuất bản, năm xuất bản 6
[2] Tên chủ sở hữu, Tên bài viết, url, ngày truy cập 6
Trang 5GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
DANH MỤC HÌNH VẼ
Hình ảnh mô tả chương trình
Hình vẽ thực hiện chức năng đăng nhập :
Trang 6GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
GIỚI THIỆU ĐỀ TÀI
Công nghệ đang ngày càng phát triển và lượng thông tin đang mỗi ngày một tăng lên với tốc độ cao Đồng thời, việc lưu giữ thông tin bằng giấy tờ là điều rất bất cập, tốn kém (về thời gian, vật chất) và hơn nữa, thông tin luôn luôn được sửa đổi, bổ sung và mở rộng theo thời gian Chính vì vậy, trong môi trường giáo dục, để tối ưu hóa việc ghi chép,tính toán và sửa đổi thông tin điểm, chúng ta sử dụng những phần mềm, chương trình quản lí điểm phù hợp với lượng dữ liệu và các chức năng cần thiết như Excel Báo cáo này sẽ trình bày chương trình quản lí điểm của sinh viên trong ngôn ngữ C
CƠ SỞ LÝ THUYẾT
Ý tưởng
Dùng ngôn ngữ C để thực hiện các chức năng quản lí sinh viên Quản lí tên , mã sinh viên , điểm , xếp loại , sắp xếp theo điểm trung bình , sửa điểm , … Quản lí nhiều môn học , mỗi môn học được lưu trữ trên một file, thực hiện các chức năng kể trên
+ Viết các hàm để xây dựng các chức năng
TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN
Phát biểu bài toán
3.1.1 Mô tả: Chương trình viết bằng ngôn ngữ C cho phép quản lí tài khoản của 40
sinh viên/ môn Gồm có Menu như sau:
- Mỗi môn học sẽ được lưu trên 1 file
- Chức năng nhập điểm: Nhập điểm cho toàn bộ sinh viên theo thứ tự các cột điểm sau: Laboratory (lab), Presentation (pres), Mid - Semester (mid), Final - Semester (final)
và chương trình sẽ tính toán thêm 1 cột điểm Average (avg) theo công thức sau:
Trang 7GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
avg = 0.1*lab + 0.2*pres + 0.2*mid + 0.5*final
- Chức năng xem điểm: Nhập vào mã sinh viên cần xem điểm Nếu tồn tại mã sinh viên thì hiển thị tất cả các cột điểm của sinh viên đó, ngược lại thì hiển thị thông báo mã sinh viên không tồn tại
- Chức năng sửa điểm: Nhập vào mã sinh viên cần sửa điểm Nếu tồn tại thì thực hiện:
+ Nhập cột điểm cần sửa theo menu sau:
+ Hiển thị ra điểm sau khi sửa
Ngược lại, hiển thị mã sinh viên không tồn tại
- Chức năng sắp xếp: Tính điểm trung bình, quy về điểm theo hệ A, B, C, D rồi sắp xếp theo thứ tự giảm dần In ra màn hình bảng xếp hạng gồm: Mã sinh viên, tên sinh viên, điểm cột avg và điểm hệ A, B, C, D được quy đổi từ avg
3.1.2 Đầu vào (Input): mã sinh viên, họ tên sinh viên, điểm các cột lab, pres, mid, final 3.1.3 Đầu ra (Output): điểm trung bình (avg), điểm theo thang A, B, C, D, danh sách
điểm của 1 hoặc nhiều sinh viên đã hoặc chưa được sắp xếp, điểm sinh viên được sửa
Cấu trúc dữ liệu:
Kiểu dữ liệu cơ bản:
char key[20], key1[20]; // Ki u kí tể ự
char (msv[100])[100]; // M ng ki u kí tả ể ự
char (ten[100])[100]; // M ng ki u kí tả ể ự
float diem[40][5], dtb[40]; // M ng ki u s th c (1-2 chi u)ả ể ố ự ề
Kiểu dữ liệu kết hợp: Sử dụng các mảng song song
Trang 8GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên};
typedef struct sinhvien diem;
void mangmsv(int n, char msv[][100],FILE *fmsv) {
fmsv=fopen("C:\\Users\\PC\\Desktop\\project\\msv.txt","r");for(int i=0;i<n;i++) fscanf(fmsv,"%s",&msv[i]);
fclose(fmsv);
}
void mangten(int n, char ten[][100],FILE *ften) {
ften=fopen("C:\\Users\\PC\\Desktop\\project\\ten.txt","r");for(int i=0;i<n;i++) {
Lưu trữ dữ liệu trong các file:
C:\\Users\\PC\\Desktop\\project\\msv.txt (File lưu mã sinh viên)
C:\\Users\\PC\\Desktop\\project\\ten.txt (File lưu tên)
C:\\Users\\PC\\Desktop\\project\\diem13.txt (File lưu điểm)
Thuật toán
Trình bày các thuật toán (sử dụng giả lệnh hoặc sơ đồ khối) và phân tích độ phức tạp của các thuật toán
Trang 9GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Mảng sinh viên : Nhập mã sinh viên vào mảng msv[]
- Chức năng : Lưu trữ mã sinh viên từ file vào mảng một chiều.Dùng để hiển thị mã sinh viên khi nhập điểm, xuất điểm, sắp xếp điểm, in file
- Thuật toán:
for(int i=0;i<n;i++){
fscanf(fmsv,"%s",&msv[i]);
}
Hàm xem điểm : Xem điểm của một sinh viên
- Chức năng: Dùng để hiển thị các cột điểm của một sinh viên sau khi nhập
void mangmsv(int n, char msv[]
[100],FILE *fmsv)
O(n)
void nhap(diem &sv,FILE *fd) O(n)
void nhapN(diem sv[],int n,char
char (ten[100])[100], int n,
float diem[][5],char key[])
Trang 10GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viênvoid traodoi(char a[],char b[]) O(1)
Tên Hàm Chức năng (Ghi chú)
1 void Title() // Hàm in thông tin đ ánồ
2 void Login() // Hàm đăng nh pậ
4 void mangmsv(int n, char msv[]
6 void mangdiem(int n, float
diem[][5],FILE *fd, float
dtb[])
// Hàm đ c đi m SV t file vào ọ ể ừ
m ng 2 chi uả ề
7 void DTB(diem &sv) // Hàm tính đi m trung bìnhể
8 void nhap(diem &sv,FILE *fd) // Hàm nh p đi m 1 SV vào fileậ ểể
9 void nhapN(diem sv[],int n,char
(msv[100])[100] ,char
(ten[100])[100],FILE *fd)
// Hàm nh p đi m n SV vào fileậ ểể
10 char xeploai(float x) // Hàm quy đ i đi m h 10 sang ổ ể ệ
A,B,C,D
11 void xem(char (msv[100])[100],
char (ten[100])[100], int n,
float diem[][5],char key[])
Trang 11GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên[100],int n, float diem[]
[5],char key1[])
13.void swap(float &a,float &b) // Hàm tráo đ i 2 s th cổ ố ự
14 void traodoi(char a[],char b[]) // Hàm tráo đ i 2 xâu kí tổ ự
15 void sapxep(char (msv[100])
[100],int n,char (ten[100])
[100],float dtb[])
// Hàm s p x p đi m trung bình ắ ế ểtheo th t gi m d nứ ự ả ầ
16.void xuat(int n, char(ten[100])
[100], char(msv[100])[100],
float diem[][5])
// Hàm in danh sách sinh viên
17 int main() // Hàm chương trình chính g i các ọ
Trang 12GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viênvoid Title() {
printf(" + -+\n");printf(" | CHUONG TRINH QUAN LI DIEM SINH VIEN |\n");printf(" | Supervisor: Tran Ho Thuy Tien |\n");
printf(" | Students: Le Hoang Ngoc Han |\n");printf(" | Truong Thi My Duyen |\n");printf(" | Class: 19TCLC - DT4 |\n");printf(" + -+\n");}
Void Login : Đăng nh p vào chậ ương trình
Trang 13GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
printf("\n\t\tNhap mat khau thanh cong!");
printf("\n
-+");
+ -printf("\n | CHUONG TRINH BAT DAU THUC HIEN! |");
printf("\n
-+");
+ -printf("\n | MENU CHUC NANG
|");
printf("\n +");
+ -printf("\n | 1 - NHAP DIEM
+ -}
Trang 14GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
void mangmsv : Chèn thông tin dãy mã sinh viên vào m t m ng ộ ả
Code :
void mangten(int n, char ten[][100],FILE *ften){
ften=fopen("C:\\Users\\PC\\Desktop\\project\\ten.txt","r"); for(int i=0;i<n;i++){
Trang 15GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Void nhap : Dùng đ nh p đi m c a m i sinh viên t bàn phím sau đó ể ậ ể ủ ỗ ừghi vào file đi m FILE *fd;ể
Code :
void nhap(diem &sv,FILE *fd) {
printf("\n Nhap diem cot Lab: ");
Void nhapN : Cho vòng l p for (i-> n) tặ ương ng n sinh viên , đ ứ ể
th c hi n l nh nh p đi m “void nhap”ự ệ ệ ậ ể
Code :
void nhapN(diem sv[],int n,char (msv[100])[100] ,char (ten[100])[100],FILE *fd){
fd=fopen("C:\\Users\\PC\\Desktop\\project\\diem13.txt","w");for(int i=0;i<n;i++){
printf("\n\tNhap diem cho msv %s : ",msv[i]);
nhap(sv[i],fd);
}
fclose(fd);
}
Trang 16GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Void xeploai : D a vào đi m trung bình đ x p lo i sinh viên đó ự ể ể ế ạ
+ -printf("\n Ket qua cua SV: %s ",ten[count]);
printf("\n
-+");
+ -printf("\n | Lab | Pres | Mid | Final
| Avg | Grade |");
printf("\n
-+");
+ -printf("\n | %.2f | %.2f | %.2f | %.2f
| %.2f | %c |",diem[count][0],diem[count]
Trang 17GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
[1],diem[count][2],diem[count][3],diem[count][4],xeploai(diem[count][4]));
printf("\n
-+");
+ -}
}
Void sua : Nh p mã sinh viên , sau đó màn hình hi n th đi m c a ậ ểể ị ểể ủểsinh viên , nh p c t đi m c n s a , nh p đi m s a đ thay đ i đi mậ ộ ểể ầầ ưể ậ ểể ưể ểể ổể ểểcho sinh viên
printf("\n\tDiem truoc khi sua:\n ");
printf("\tLab: %.2f\tPres: %.2f\tMid: %.2f\tFinal:
%.2f\tAvg: %.2f\tGrade: %c",diem[count][0], diem[count][1], diem[count][2], diem[count][3], diem[count][4], xeploai(diem[count][4]));
printf("\n\tNhap cot diem ban muon sua : ");
scanf("%d",&cot);
fd=fopen("C:\\Users\\PC\\Desktop\\project\\diem13.txt","w+");switch(cot){
case 0 :
printf("\n\tNhap diem ban muon sua : ");
scanf("%f",&diem[count][0]);
Trang 18GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
diem[count][4]=0.1*diem[count][0]+0.1*diem[count][1]+0.3*diem[count][2]+0.5*diem[count][3];
printf("\tLab: %.2f\tPres: %.2f\tMid:
%.2f\tFinal: %.2f\tAvg: %.2f\tGrade: %c",diem[count][0], diem[count][1], diem[count][2], diem[count][3], diem[count][4],
xeploai(diem[count][4]));
for(int i=0;i<n;i++) {for(int j=0;j<5;j++) {fprintf(fd,"%.2f\t",diem[i][j]);}
fprintf(fd,"\n");
}break;
case 1 :
printf("Nhap diem ban muon sua : ");
scanf("%f",&diem[count][1]);
diem[count][4]=0.1*diem[count][0]+0.1*diem[count][1]+0.3*diem[count][2]+0.5*diem[count][3];
printf("\tLab: %.2f\tPres: %.2f\tMid:
%.2f\tFinal: %.2f\tAvg: %.2f\tGrade: %c",diem[count][0], diem[count][1], diem[count][2], diem[count][3], diem[count][4],
xeploai(diem[count][4]));
for(int i=0;i<n;i++) {for(int j=0;j<5;j++) {fprintf(fd,"%.2f\t",diem[i][j]);}
fprintf(fd,"\n");
}break;
case 2 :
printf("Nhap diem ban muon sua : ");
scanf("%f",&diem[count][2]);
diem[count][4]=0.1*diem[count][0]+0.1*diem[count][1]+0.3*diem[count][2]+0.5*diem[count][3];
printf("\tLab: %.2f\tPres: %.2f\tMid:
%.2f\tFinal: %.2f\tAvg: %.2f\tGrade: %c",diem[count][0], diem[count]
Trang 19GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
[1], diem[count][2], diem[count][3], diem[count][4],
xeploai(diem[count][4]));
for(int i=0;i<n;i++) {for(int j=0;j<5;j++) {fprintf(fd,"%.2f\t",diem[i][j]);}
fprintf(fd,"\n");
}break;
case 3 :
printf("Nhap diem ban muon sua : ");
scanf("%f",&diem[count][3]);
diem[count][4]=0.1*diem[count][0]+0.1*diem[count][1]+0.3*diem[count][2]+0.5*diem[count][3];
printf("\tLab: %.2f\tPres: %.2f\tMid:
%.2f\tFinal: %.2f\tAvg: %.2f\tGrade: %c",diem[count][0], diem[count][1], diem[count][2], diem[count][3], diem[count][4],
xeploai(diem[count][4]));
for(int i=0;i<n;i++) {for(int j=0;j<5;j++) {fprintf(fd,"%.2f\t",diem[i][j]);}
fprintf(fd,"\n");
}break;
Trang 20GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Void traodoi : Dùng đ tráo đ i thành ph n c a sinh viên nh tên , ể ổ ầ ủ ư
mã sinh viên ( dùng cho hàm s p x p ) ắ ế
+ -printf("\n | Ma Sinh Vien | Diem trung binh
| Xep loai |\n");
Trang 21GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
printf("
-+");
printf("\n Ho va ten : %s",ten[i+1]);
printf(" Ma Sinh Vien : %s\n",msv[i]);
printf("Diem cot lab : %.2f\n ",diem[i][0]);
printf("Diem cot pres : %.2f\n ",diem[i][1]);
printf("Diem cot mid : %.2f \n",diem[i][2]);
printf("Diem cot final : %.2f\n ",diem[i][3]);
printf("Diem cot Avg : %.2f \n",diem[i][4]);
printf("Xep loai : %c\n",xeploai(diem[i][4]));
}
}
Trang 22GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Trang 23GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Khi đăng nhập thành công
Hình 3 Khi đăng nhập đúng tên và mật khẩu, thì màn hình hiển thị thông báo đăng nhập thành công Chương trình bắt đầu thực hiện Người dùng cần nhấn Enter để tiếp tục chạy chương trình
Hình 4 Sau khi nhấn Enter, màn hình sẽ hiển thị Menu như hình trên Người dùng nhập lựa chọn từ bàn phím
Trang 24GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên1.1.2 Kết quả thực thi chương trình
Nhập điểm
Hình 5 Giao diện chức năng nhập điểm
Xem điểm
Trang 25GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Hình 6 Giao diện chức năng xem điểm
Sửa điểm
Hình 7 Giao diện chức năng sửa điểm
Sắp xếp
Trang 26GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Hình 8 Giao diện chức năng sắp xếp
In danh sách
Trang 27GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
Hình 9 Giao diện chức năng in danh sách
+ Yêu cầu người dùng phải nhập thông tin cẩn thận
+ Giao diện, màu sắc chưa bắt mắt
+ Một số thuật toán (sắp xếp,…) chưa được tối ưu hóa
Trang 28GVHD : Trần Hồ Thủy Tiên Quản lí điểm sinh viên
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
1 Kết luận
1.1 Đối với mục tiêu đặt ra của đề án:
- Hiểu và áp dụng được mảng song song , cách lưu trữ dữ liệu trong file và đọc thông tin từ file
- Áp dụng được các thuật toán thao tác trên các mảng song song
- Hiểu và sử dụng các hàm xử lý chuỗi
- Chia nhỏ chương trình thành các hàm con để dễ dàng cho việc quan sát và chỉnh sửa
- Viết hàm menu và sửa điểm bằng cách sử dụng switch - case để nhập lựa chọn
- Biết cách căn chỉnh màn hình giao diện
1.2 Đối với chương trình quản lí điểm:
- Đáp ứng đầy đủ các chức năng của một chương trình quản lí điểm: Nhập điểm, xem điểm, sửa điểm, sắp xếp điểm, in danh sách
- Có khả năng bảo mật nhờ có hàm Login Tuy nhiên, hàm vẫn còn hạn chế về số lượng account và độ bảo mật thấp
- Áp dụng được nhiều thao tác trên mảng, file,… Tuy nhiên, một số thuật toán chưa được tối ưu hóa tối đa
- Tối ưu hóa thuật toán sắp xếp, sửa điểm và nâng cao bảo mật
- Thiết kế giao diện cho chương trình bằng các phần mềm đồ họa chuyên dụng khác