vì vậy tôi chọn đề tài “xây dựng chương trình quản lý điểm của sinh viên bằng ngôn ngữ lập trình C++” làm đề tài nghiên cứu của tôi.. Mục tiêu của đề tài Xây dựng chương trình quản lí si
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC KINH DOANH VÀ CÔNG NGHỆ HÀ NỘI
BÁO CÁO ĐỒ ÁN
ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH QUẢN LÝ SINH
VIÊN BẰNG NGÔN NGỮ LẬP TRÌNH C++
Họ và tên: Vũ Duy Hải
Mã sinh viên: 2722215714 Lớp: TH27.01
Trang 2MỤC LỤC
CHƯƠNG I PHẦN MỞ ĐẦU 2
1 Lí do chọn đề tài 2
2 Mục tiêu của đề tài 2
3 Phạm vi nghiên cứu 2
4 Phương pháp nghiên cứu 2
CHƯƠNG II GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH C++………… …… 3
CHƯƠNG III XÂY DỰNG ỨNG DỤNG QUẢN LÝ SINH VIÊN……… 5
CHUONG IV CÀI ĐẶT CHƯƠNG TRÌNH 9
CHƯƠNG V KẾT LUẬN 17
Trang 3CHƯƠNG I PHẦN MỞ ĐẦU
1 Lí do chọn đề tài
Trong sự phát triển của khoa học cuối thế kỷ 20 đầu thế kỷ 21, công nghệ thông tin hiện nay là ngành có tốc độ phát triển nhanh nhất Công nghệ thông tin
ở nước ta còn mới, song tốc độ phát triển của nó rất nhanh và mạnh, chiếm một
vị trí quan trọng trong các ngành khoa học công nghệ. Một trong những lĩnh vực đang được ứng dụng tin học hóa rất phổ biến ở nước ta là lĩnh vực quản lý Tin học hóa trong quản lý đã giúp cho các nhà quản lý điều hành công việc một cách khoa học, chính xác và hiệu quả Việc ứng dụng công nghệ thông tin vào công
tác quản lý sinh viên là cần thiết vì vậy tôi chọn đề tài “xây dựng chương trình quản lý điểm của sinh viên bằng ngôn ngữ lập trình C++” làm đề tài nghiên
cứu của tôi
2 Mục tiêu của đề tài
Xây dựng chương trình quản lí sinh viên bằng ngôn ngữ lập trình C++.
3 Phạm vi nghiên cứu
Phân tích thiết kế hệ thống quản lí sinh viên bằng ngôn ngữ lập trình C++.
4 Phương pháp nghiên cứu
- Đọc tham khảo một số tài liệu về phương pháp lập trình C++, trên cơ sở
đó tiến hành phân tích thiết kế hệ thống quản lí sinh viên.
- Tham khảo, quan sát các phần mềm quản lí sinh viên trong thực tế.
Trang 4CHƯƠNG II GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH C++
-Ngôn ngữ lập trình C++ là một ngôn ngữ lập trình hướng đối tượng được phát triển bởi Bjarne Stroustrup.
-C++ là ngôn ngữ lập trình được phát triển trên nên tảng của ngôn ngữ lập trình C Do đó, C++ có song song cả 2 phong cách lập trình hướng cấu trúc giống C và có thêm phong cách hướng đối tượng Trong nhiều trường hợp, C++ sử dụng kết hợp cả 2 style trên Do đó, nó được xem là một ngôn ngữ
“lai tạo”.
-Ngôn ngữ C++ là một ngôn ngữ lập trình cấp trung Bởi vì nó có các tính chất của cả ngôn ngữ lập trình bậc thấp(Pascal, C…) và ngôn ngữ lập trình bậc cao(C#, Java, Python…).
-Ngôn ngữ lập trình C++ có đuôi mở rộng là cpp
-C++ chạy trên nhiều nền tảng khác nhau, chẳng hạn như Windows, Mac OS
và các phiên bản khác nhau của UNIX.
-Ngôn ngữ lập trình C++ có nhiều tính năng như:
+) Lập trình tổng quát
+) Lập trình hướng đối tượng
+) Lập trình thủ tục
+) Ngôn ngữ đa mẫu hình tự do có kiểu tĩnh
+) Dữ liệu trừu tượng
+) Lập trình đa hình
-Mã nguồn của lập trình C++ được phát triển từ ngôn ngữ lập trình C
Trang 5-C++ hỗ trợ kiểu dữ liệu String và Boolean
-C++ cho phép sử dụng tính năng nạp chồng hàm
-C++ cho phép bạn khai báo các biến ở bất kỳ đâu trong hàm
Trang 6CHƯƠNG III XÂY DỰNG ỨNG DỤNG QUẢN LÝ SINH VIÊN
1 Giới thiệu bài toán
a) Mô tả các bước thực hiện để xây dựng chương trình quản lý sinh viên
- Để quản lý sinh viên trước hết ta phải có một danh dách sinh viên và có thể thao tác với danh sách sinh viên đó Cụ thể yêu cầu của quản lý sinh viên như sau:
- Trước tiên phải tạo 1 mảng sinh viên chứa 100 người (SV[100]), số người cần nhập “n” Sau đó thực hiện :
+ Nhập (thêm) một sinh viên vào danh sách (mảng).
+ Tìm một sinh viên.
+ Xóa 1 sinh viên khỏi danh sách(mảng).
+ Sửa sinh viên trong danh sách (mảng)
b) Sơ đồ các chức năng chính
c) Các modul chính của chương trình
1 Hàm nhập danh sách sinh viên
Hàm này được sử dụng để thêm mới sinh viên vào danh sách sinh viên Với hàm này chúng ta sẽ tách ra thành 2 hàm sau:
Trang 7 void nhapThongTinSV(SV &sv, int id).
void nhapSV(SV a[], int id, int n).
Tham số:
&sv: nhập thông tin sinh viên sv Sử dụng tham chiếu &, tức là thông tin sẽ được thay đổi cả bên trong và bên ngoài hàm.
a[]: là danh sách sinh viên.
id: là id (tự động tăng) của sinh viên.
n: là số lượng sinh viên có trong danh sách
Hàm nhập thông tin sinh viên
Hàm nhập sinh viên
Trang 82 Hàm cập nhật sinh viên
Hàm này được sử dụng để cập nhật thông tin sinh viên theo ID Với hàm này chúng ta sẽ tách ra thành 2 hàm sau:
void capNhatThongTinSV(SV &sv).
void capNhatSV(SV a[], int id, int n).
Tham số:
&sv: nhập thông tin sinh viên sv Sử dụng tham chiếu &, tức là thông tin sẽ được thay đổi cả bên trong và bên ngoài hàm.
a[]: là danh sách sinh viên.
id: là id (tự động tăng) của sinh viên.
n: là số lượng sinh viên có trong danh sách.
Thân hàm capNhatThongTinSV():
Trang 9Thân hàm capNhatSV():
3.Hàm xóa sinh viên theo ID
Hàm này được sử dụng để xóa sinh viên khỏi danh sách theo ID Tình sinh viên
có ID đã cho trong danh sách, nếu tồn tại thì thực hiện xóa sinh viên.
Tham số:
a[]: là danh sách sinh viên.
id: là id của sinh viên sẽ bị xóa.
n: là số lượng sinh viên có trong danh sách.
Thân hàm xoaTheoID():
Trang 10CHƯƠNG IV CÀI ĐẶT CHƯƠNG TRÌNH
#include<conio.h>
#include<stdio.h>
#include <iostream>
#include <string.h>
#define MAX 100
using namespace std;
struct SinhVien {
int id;
char ten[30];
char gioiTinh[5];
int tuoi;
float diemToan;
float diemLy;
float diemHoa;
float diemTB = 0;
char hocluc[10] = "-";
};
typedef SinhVien SV;
void printLine(int n);
void nhapThongTinSV(SV &sv, int id);
void nhapSV(SV a[], int id, int n);
void capNhatThongTinSV(SV &sv);
void capNhatSV(SV a[], int id, int n);
int xoaTheoID(SV a[], int id, int n);
void timKiemTheoTen(SV a[], char ten[], int n);
void tinhDTB(SV &sv);
void xeploai(SV &sv);
int idLonNhat(SV a[], int n);
void sapxepTheoDTB(SV a[], int n);
void sapXepTheoTen(SV a[], int n);
void showStudent(SV a[], int n);
int docFile(SV a[], char fileName[]);
void ghiFile(SV a[], int n, char fileName[]);
void pressAnyKey();
int main() {
int key;
char fileName[] = "QLSINHVIEN";
SV arraySV[MAX];
int soluongSV = 0;
int idCount = 0;
// nhap danh sach sinh vien tu file
soluongSV = docFile(arraySV, fileName);
idCount = idLonNhat (arraySV, soluongSV);
Trang 11while(true) {
cout << "CHUONG TRINH QUAN LY SINH VIEN C/C++\n";
cout << " 1 Them sinh vien \ n";
cout << " 2 Cap nhat thong tin sinh vien boi
ID \n";
cout << " 3 Xoa sinh vien boi ID \ n";
cout << " 4 Tim kiem sinh vien theo ten \ n";
cout << " 5 Sap xep sinh vien theo diem trung binh (GPA)
\n";
cout << " 6 Sap xep sinh vien theo ten \ n";
cout << " 7 Hien thi danh sach sinh vien \ n";
cout << " 8 Ghi danh sach sinh vien vao
file \n";
cout << "Nhap tuy chon: ";
cin >> key;
switch(key){
case 1:
cout << "\n1 Them sinh vien.";
idCount++;
nhapSV(arraySV, idCount, soluongSV);
printf("\nThem sinh vien thanh cong!");
soluongSV++;
pressAnyKey();
break;
case 2:
if(soluongSV > 0) {
int id;
cout << "\n2 Cap nhat thong tin sinh vien "; cout << "\n Nhap ID: "; cin >> id;
capNhatSV(arraySV, id, soluongSV);
}else{
cout << "\nSanh sach sinh vien trong!";
}
pressAnyKey();
break;
case 3:
if(soluongSV > 0) {
int id;
cout << "\n3 Xoa sinh vien.";
cout << "\n Nhap ID: "; cin >> id;
if (xoaTheoID(arraySV, id, soluongSV) == 1) { printf("\nSinh vien co id = %d da bi xoa.",
&id);
soluongSV ;
}
}else{
cout << "\nSanh sach sinh vien trong!";
Trang 12}
pressAnyKey();
break;
case 4:
if(soluongSV > 0) {
cout << "\n4 Tim kiem sinh vien theo ten.";
char strTen[30];
cout << "\nNhap ten de tim kiem: "; fflush(stdin); gets(strTen);
timKiemTheoTen(arraySV, strTen, soluongSV);
}else{
cout << "\nSanh sach sinh vien trong!";
}
pressAnyKey();
break;
case 5:
if(soluongSV > 0) {
cout << "\n5 Sap xep sinh vien theo diem trung binh (GPA).";
sapxepTheoDTB(arraySV, soluongSV);
showStudent(arraySV, soluongSV);
}else{
cout << "\nSanh sach sinh vien trong!";
}
pressAnyKey();
break;
case 6:
if(soluongSV > 0) {
cout << "\n6 Sap xep sinh vien theo ten.";
sapXepTheoTen(arraySV, soluongSV);
showStudent(arraySV, soluongSV);
} else {
cout << "\nSanh sach sinh vien trong!";
}
pressAnyKey();
break;
case 7:
if(soluongSV > 0){
cout << "\n7 Hien thi danh sach sinh vien."; showStudent(arraySV, soluongSV);
}else{
cout << "\nSanh sach sinh vien trong!";
}
pressAnyKey();
break;
case 8:
if(soluongSV > 0){
cout << "\n8 Ghi danh sach sinh vien vao file."; ghiFile(arraySV, soluongSV, fileName);
}else{
cout << "\nSanh sach sinh vien trong!";
}
Trang 13printf("\nGhi danh sach sinh vien vao file %s thanh cong!", fileName);
pressAnyKey();
break;
case 0:
cout << "\nBan da chon thoat chuong trinh!";
getch();
return 0;
default:
cout << "\nKhong co chuc nang nay!";
cout << "\nHay chon chuc nang trong hop menu."; pressAnyKey();
break;
}
}
}
void tinhDTB(SV &sv) {
sv.diemTB = (sv.diemToan + sv.diemLy + sv.diemHoa) / 3; }
void xeploai(SV &sv) {
if(sv.diemTB >= 8) strcpy(sv.hocluc, "Gioi");
else if(sv.diemTB >= 6.5) strcpy(sv.hocluc, "Kha");
else if(sv.diemTB >= 5) strcpy(sv.hocluc, "Trung binh");
else strcpy(sv.hocluc, "Yeu");
}
void nhapThongTinSV(SV &sv, int id) {
cout << "\n Nhap ten: "; fflush(stdin); gets(sv.ten);
cout << " Nhap gioi tinh: "; gets(sv.gioiTinh);
cout << " Nhap tuoi: "; cin >> sv.tuoi;
cout << " Nhap diem Toan: "; cin >> sv.diemToan;
cout << " Nhap diem Ly: "; cin >> sv.diemLy;
cout << " Nhap diem Hoa: "; cin >> sv.diemHoa;
sv.id = id;
tinhDTB(sv);
xeploai(sv);
}
void nhapSV(SV a[], int id, int n) {
printLine(40);
printf("\n Nhap sinh vien thu %d:", n + 1);
nhapThongTinSV(a[n], id);
printLine(40);
}
void capNhatThongTinSV(SV &sv) {
cout << "\n Nhap ten: "; fflush(stdin); gets(sv.ten);
cout << " Nhap gioi tinh: "; gets(sv.gioiTinh);
cout << " Nhap tuoi: "; cin >> sv.tuoi;
cout << " Nhap diem Toan: "; cin >> sv.diemToan;
Trang 14cout << " Nhap diem Ly: "; cin >> sv.diemLy;
cout << " Nhap diem Hoa: "; cin >> sv.diemHoa;
tinhDTB(sv);
xeploai(sv);
}
void capNhatSV(SV a[], int id, int n) {
int found = 0;
for(int i = 0; i < n; i++) {
if (a[i].id == id) {
found = 1;
printLine(40);
cout << "\n Cap nhat thong tin sinh vien co ID = " << id; capNhatThongTinSV(a[i]);
printLine(40);
break;
}
}
if (found == 0) {
printf("\n Sinh vien co ID = %d khong ton tai.", id);
}
}
int xoaTheoID(SV a[], int id, int n) {
int found = 0;
for(int i = 0; i < n; i++) {
if (a[i].id == id) {
found = 1;
printLine(40);
for (int j = i; j < n; j++) {
a[j] = a[j+1];
}
cout << "\n Da xoa SV co ID = " << id;
printLine(40);
break;
}
}
if (found == 0) {
printf("\n Sinh vien co ID = %d khong ton tai.", id);
return 0;
} else {
return 1;
}
}
void timKiemTheoTen(SV a[], char ten[], int n) {
SV arrayFound[MAX];
char tenSV[30];
int found = 0;
for(int i = 0; i < n; i++) {
strcpy(tenSV, a[i].ten);
if(strstr(strupr(tenSV), strupr(ten))) {
Trang 15arrayFound[found] = a[i];
found++;
}
}
showStudent(arrayFound, found);
}
void showStudent(SV a[], int n) {
printLine(100);
cout <<"\n\STT\tID\tHo va ten\tGioi tinh\tTuoi\tToan\tLy\tHoa\ tDiem TB\tHoc luc";
for(int i = 0; i < n; i++) {
// in sinh vien thu i ra man hinh
printf("\n %d", i + 1);
printf("\t%d", a[i].id);
printf("\t%s", a[i].ten);
printf("\t\t%s", a[i].gioiTinh);
printf("\t\t%d", a[i].tuoi);
printf("\t%.2f\t%.2f\t%.2f", a[i].diemToan, a[i].diemLy, a[i].diemHoa);
printf("\t%.2f", a[i].diemTB);
printf("\t%s", a[i].hocluc);
}
printLine(100);
}
void sapxepTheoDTB(SV a[], int n) {
//Sap xep theo DTB tang dan
SV tmp;
for(int i = 0;i < n;i++) {
for(int j = i+1; j < n;j++) {
if(a[i].diemTB > a[j].diemTB) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
}
void sapXepTheoTen(SV a[], int n) {
//Sap xep sinh vien theo ten theo thu tu tang dan
SV tmp;
char tenSV1[30];
char tenSV2[30];
for(int i = 0;i < n; i++) {
strcpy(tenSV1, a[i].ten);
for(int j = i+1; j < n; j++) {
strcpy(tenSV2, a[j].ten);
if(strcmp(strupr(tenSV1), strupr(tenSV2)) > 0) {
tmp = a[i];
a[i] = a[j];
Trang 16a[j] = tmp;
}
}
}
}
int idLonNhat (SV a[], int n) {
int idMax = 0;
if (n > 0) {
idMax = a[0].id;
for(int i = 0;i < n; i++) {
if (a[i].id > idMax) {
idMax = a[i].id;
}
}
}
return idMax;
}
int docFile(SV a[], char fileName[]) {
FILE * fp;
int i = 0;
fp = fopen (fileName, "r");
cout << "Chuan bi doc file: "; puts(fileName);
// doc thong tin sinh vien
while (fscanf(fp, "%5d%30s%5s%5d%10f%10f%10f%10f%10s\n", &a[i].id,
&a[i].ten,
&a[i].gioiTinh, &a[i].tuoi, &a[i].diemToan, &a[i].diemLy,
&a[i].diemHoa,
&a[i].diemTB, &a[i].hocluc) != EOF) {
i++;
cout << " Doc ban ghi thu: " << i << endl;
}
cout << " So luong sinh vien co san trong file la: " << i << endl; cout << endl;
fclose (fp);
// tra ve so luong sinh vien duoc doc tu file
return i;
}
void ghiFile(SV a[], int n, char fileName[]) {
FILE * fp;
fp = fopen (fileName,"w");
for(int i = 0;i < n;i++){
fprintf(fp, "%5d%30s%5s%5d%10f%10f%10f%10f%10s\n", a[i].id, a[i].ten,a[i].gioiTinh,
a[i].tuoi, a[i].diemToan, a[i].diemLy, a[i].diemHoa, a[i].diemTB, a[i].hocluc);
}
fclose (fp);
}