Chương I :Tổng quan về lập trình C++ môn Cơ sở dữ liệu và giải thuật | Trường đại học Kinh Doanh và Công Nghệ Hà Nội

C++ chính là một ngôn ngữ lập trình phổ biến và mạnh mẽ, nócó kiểu dữ liệu tĩnh và hỗ trợ gần như tất cả các phương pháp lập trình như: lập trình hướng thủ tục, lập trình hướng module và lập trình hướng đối tượng. Vào năm 1990 thì C++ đã trở thành một ngôn ngữ thương mại phổ biến tại thời điểm này. Tài liệu giúp bạn tham  khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!

lOMoARcPSD| 48704538
Mc Lc
Chương I :Tổng quan v lp trình C++
1. Các kiu d liu trong C++, khung chương trình và cách khai báo biến
2.Khung chương trình và các cách khai báo biến
3.Các câu lnh nhp xut và cu trúc các câu lệnh điều khin
4.Lp trình hàm
5.X lý các xâu trong C++
Chương II :
Phân tích và thiết kế
1.Các Chức Năng Của Chương Trình Quản Lý Sinh Viên
1.1 Thêm Thông Tin Sinh
1.2 Sa Thông Tin Sinh Viên
1.3 Xóa Sinh Viên
1.4 Tìm Kiếm sinh viên thêo tên
1.5sp xếp sinh viên theo điểm trung bình
1.6 sp xếp sinh viên theo tên
1.7 Hin Th Danh Sách Sinh Viên
2 .Phân Tích
Chương III: Chương Trình Th Nghim
1.Giao Din Và Cách s dng
lOMoARcPSD| 48704538
Chương I :Tổng quan v lp trình C++
C++ chính là mt ngôn ng lp trình ph biến và mnh m, nó có kiu d liệu tĩnh và hỗ
tr gần như tất c các phương pháp lập trình như: lập trình hướng th tc, lp trình
ng module và lập trình hướng đối tượng. Vào năm 1990 thì C++ đã trở thành mt
ngôn ng thương mại ph biến ti thời điểm này.
Ngôn ng C++ được ra đời vào năm 1983 do Bjarne phát triển da trên nguyên tắc cơ
bn ca ngôn ng m C. Vì dựa trên C để phát trin nên ngôn ng C++ gần như mang
những đặc tính ca C, có thêm s nâng cp và b sung cn thiết mt vài chức năng
riêng bit.
Ưu điểm ca lp trình C++
Tính ph biến: Đầu tiên thì ngôn ng C++ là mt trong nhng ngôn ng lp
trình ph biết nht trên thế gii
Tính thc thi nhanh: Nếu ta đã quen về C++ thì có th thao tác mt cách
nhanh chóng. Mt trong nhng mc tiêu chung ca lp trình C++ là kh năng
thc thi. Nếu chúng ta cần thêm các tính năng cho chương trình, thì C++ cho
phép chúng ta dùng ngôn ng Assembly (là hp ng) Mt ngôn ng lp
trình bc thp nht đ có th giao tiếp trc tiếp vi phn cng ca máy tính
Thư viện đầy đủ: Có rt nhiều tài nguyên cho người lp trình vi C++, nó
còn bao gm c đồ ho: API, 2D, 3D, vt lý các thiết b âm thanh h tr giúp
cho các lp trình viên d dàng thc hành
Đa mô hình: Thêm na C++ cho phép chúng ta lp trình theo cu trúc tuyến
nh, hướng chức năng và hướng đối tượng đa dạng tu vào yêu cu ca mi
ngưi lp trình
1. Các kiu d liệu trong C++, khung chương trình và cách khai báo
biến
Một chương trình C++ bản thường được bắt đu bởi dòng include khai báo thư
viện, sau đó là hàm main. Tt c mi th của chương trình đều s chy dc theo hàm
main t trên xuống dưới, nghĩa nếu bn viết mt hàm ngoài main trong main
không gọi đến hàm đấy nghĩa hàm đy s không chạy trong chương trình, mt
hàm luôn luôn phi kết thúc bi du chm phy (;) . Dưới đây là bộ khung cơ bản ca
chương trình Hello world bng C++.
#include < iostream > using
namespace std;
lOMoARcPSD| 48704538
int main() { cout << "Hello world !"; return
0;
}
rt nhiu kiu d liệu trong C++, đối vi các bn mi bắt đầu và để làm các bài tp
bản thì nên tìm hiểu trước v int, long, long long, float, double, long double, char, string,
v cách biu din và khong ca mi kiu d liệu. Sau khi đã làm các bài tp và hiu
rõ ri thì có th tìm hiu thêm các kiu d liệu khác. Dưới đâymột vài d v cách
khai báo biến trong C++.
#include < iostream > using
namespace std; int main() {
int a = 10; // Khai báo biến a kiu int có giá tr nguyên là 10
float b = 1.5; // Khai báo biến b kiu float có giá tr thc là 1.5
char c; // khai báo biến c có kiu d liu là ký t char c = 'a'; // gán giá tr cho biến c
là ký t 'a'
string d; // khai báo biến d có kiu d liu là xâu string d = "ok" // gán giá tr
cho biến d là xâu "ok"
return 0;
}
Bảng dưới đây thống kê phm vi lưu trữ cũng như bộ nh tiêu tn ca các kiu d
liu dng s trong C++ kèm theo modi 昀椀 er
lOMoARcPSD| 48704538
Ngoài ra, C++ cung cp mt s t khóa để đưa ra giá trị nh nht và ln nht lưu
tr đưc ca mt kiu d liu, th hin trong bảng dưới đây:
Riêng vi kiu d liu char, kiu này có th lưu được c s ln kí tự. Đối vi kí t,
kiu char lưu trữ đưc toàn b 256256 t thuc bngASCII - là bng kí t
và mã kí t s dng trong tin hc và mt s lĩnh vực khác.
lOMoARcPSD| 48704538
2 .Khung chương trình và các cách khai báo biến
Mỗi chương trình C++ cơ bản đều được bt đu bởi dòng include khai báo thư viện, tiếp
theo s là hàm main. Tt c thành phn của chương trình đều s chy dc theo hàm
main này t trên xuống dưới, nghĩa là nếu ta viết mt hàm ngoài main và trong main
thì có nghĩa là hàm đấy s không chạy trong chương trình, kết thúc mi luôn là du
chm phy (;).
Trên thc tế có rt nhiu kiu d liu trong C+, vi những người mi bt đu mun làm
các bài tập cơ bản thì nên tìm hiểu trước về: int, long, float, double, char, string đồng
thi vch biu din và khong ca mi kiu d liu. Vic tìm hiu d liu này s giúp
các bn trong quá trình thc hin d dàng hơn
.
lOMoARcPSD| 48704538
3.Các câu lnh nhp xut và cu trúc các câu lnh điu
khin
Câu lnh nhp xut
Đối vi ngôn ng C++ các bn có th thc hin một các đơn giản đó là nhập
lnh cin còn nếu xut đ s dng thì dùng lnh cout.
Câu lnh r nhánh
lOMoARcPSD| 48704538
Đầu tiên bn có th s dng vi lnh if slse
Cách 2: Bn có th s dng swith case
4 .Lp trình hàm
Trong quá trình viết các chương trình, nếu các thao tác được thc hin mt cách tun
t trong hàm main thì s khó để theo dõi. Khi viết chương trình, nếu như tất c mi th
đều được viết tun t trong hàm main thì rất khó để theo dõi. Do đó nếu một hàm được
lOMoARcPSD| 48704538
s dng nhiu ln thì nên viết một hàm con ra ngoài. Điều này s giúp cho code ca
bn tr nên gn gàng và d theo dõi cũng như code đơn giản hơn.
5 .X lý các xâu trong C ++
Vi ngôn ng lp trình C++, các xâu s đưc biu din bi kiu d liu là string. Mi
string là mt xâu gm các ký t (được biu din bng kiu char) ni tiếp nhau. Khác vi
xâu trong C là mt mảng các char và được kết thúc mng bi ký t NULL. Thông
thường các phép x lý trong xâu s khác so vi các phép toán x lý logic. Vic s dng
kiu string trong C++ làm cho vic x lý xâu tr nên d dàng hơn so với kiu mng các
ký t char khác trong C. Bn có th s dng cách nhp xâu c th như sau:
Chương II :
Phân tích và thiết kế
lOMoARcPSD| 48704538
1.Các Chức Năng Của Chương Trình Qun
Sinh Viên
1.1 Thêm Thông Tin Sinh
- Khi thêm thông tin sinh viên người dùng cũng có thể chn nhp s sinh viên
cn thêm vào danh sách
Hình Minh Ha
1.2 Sa Thông Tin Sinh Viên
Thêm Thông
Tin Sinh
Viên
Nhp
Tên
Nhp Gii
Tính
Nhp
Tui
Nhập Điểm
Nhập Điểm
Lý
Nhập Điểm
a
lOMoARcPSD| 48704538
1.3 Xóa Sinh Viên
Xóa Sinh Viên
Nhp ID Sinh Viên
Cn Xóa
Xóa Sinh Viên Có ID
Va Nhp Trong
Danh Sách H Thng
Hình Minh Ha
Sa Thông Tin
Sinh Viên
Nhp Tên
Nhp Gii
Tính
Nhp Tui
Nhập Điểm
Toán
Nhập Điểm Lý
Nhập Điểm
Hóa
Nhp ID
lOMoARcPSD| 48704538
Hình Minh Ha
1.4 Tìm Kiếm sinh viên thêo tên
lOMoARcPSD| 48704538
1.5 sp xếp sinh viên theo điểm trung bình
- sp xếp sinh viên theo điểm trung bình Được Sp Xếp Theo Th
T Tăng Dần T thấp đến cao
Hình Minh Ha
1.6 sp xếp sinh viên theo tên -Khi chn sp xếp sinh viên
theo tên h thng s sp xếp th t tên ca sinh viên theo bng
ch cái abc
Hình Minh Ha
Tìm Kiếm Sinh
Viên Theo
Tên
ST
T
I
D
Hin Th
Danh
Sách Tên Va
Nhp
gm
H
Tên
gii
Tu
i
Đim
Toán
Đim
Đim
a
Đim Trung
Bình
Hc
Lc
Nhp Tên Cn
Tìm
lOMoARcPSD| 48704538
Hình Minh Ha
1.7 Hin Th Danh Sách Sinh Viên
-Hin Th danh sách sinh viên chức năng sẽ giúp người s dụng xem được tt c danh
sách sinh viên đã lưu trong hệ thng bao gm điểm và hc lc ca sinh viên
1.8 Lưu danh sách sinh viên
-Chức năng Lưu danh sách sinh viên giúp người dùng lưu tt c sinh viên mình va nhp
vào một file tên sinhvien.txt do đó nó s lưu chữ tt c d liệu để tránh b mt 2 .
Phân Tích
Chúng ta s to mt cấu trúc sinh viên như sau, diemTB s đưc tính bng trung bình ca các môn
toán, lý và hóa. hocluc s đưc tính toán da vào diemTB như yêu cầu ca bài toán.
struct SinhVien {
int id; char
ten[30]; char
gioiTinh[5]; int
tuoi; float
diemToan; float
diemLy; float
diemHoa; float
diemTB = 0; char
hocluc[10] = "-";
}
Bây gi chúng ta th s dng struct SinhVien với đơn giản hơn bng SV vi t khóa typedef, như
sau
typedef SinhVien SV;
Sau đây danh sách các hàm chúng ta sẽ s dụng trong chương trình quản sinh viên, c
hàm này s đưc cung cấp thân hàm sau đó:
void printLine(int n); int idLonNhat(SV a[], int
n); void nhapThongTinSV(SV &sv, int id); void
nhapSV(SV a[], int id, int n); void
lOMoARcPSD| 48704538
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); 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();
Hàm printLine(int n)
Hàm này in ra mt dòng có n ký t "_".
Tham s:
n: là s ký t "_" s đưc in ra màn hình.
Thân hàm printLine():
void printLine(int n) {
cout << endl;
for (int i = 0; i < n; i++) {
cout << "_";
}
cout << endl;
}
Hàm idLonNhat(SV a[], int n)
Yêu cu ca bài toán là id ca sinh viên t động tăng.
Nên chúng ta s to hàm này để ly ra id ln nht ca danh sách sinh viên a[].
Tham s:
a[]: là danh sách sinh viên.
n: là s ng sinh viên có trong danh sách.
Thân hàm idLonNhat():
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;
}
Hàm nhp thông tin sinh viên
Hàm này được s dụng để thêm mi sinh viên vào danh sách sinh viên. Vi hàm này chúng ta s tách
ra thành 2 hàm sau:
lOMoARcPSD| 48704538
void nhapThongTinSV(SV &sv, int id). void nhapSV(SV a[], int id, int n).
Tham s:
&sv: nhp thông tin sinh viên sv. S dng tham chiếu &, tc 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) ca sinh viên.
n: là s ng sinh viên có trong danh sách.
Thân hàm nhapThongTinSV():
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); }
Thân hàm nhapSV():
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);
}
Hàm cp nht thông tin sinh viên
Hàm này được s dụng để cp nht thông tin sinh viên theo ID. Vi 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: nhp thông tin sinh viên sv. S dng tham chiếu &, tc 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 ng sinh viên có trong danh sách.
Thân hàm capNhatThongTinSV():
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; cout << " Nhap diem
Ly: "; cin >> sv.diemLy; cout << " Nhap diem Hoa: ";
cin >> sv.diemHoa; tinhDTB(sv); xeploai(sv); }
Thân hàm capNhatSV():
lOMoARcPSD| 48704538
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);
}
}
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 ID đã cho trong
danh sách, nếu tn ti thì thc hin xóa sinh viên.
Tham s:
a[]: là danh sách sinh viên.
id: là id ca sinh viên s b xóa.
n: là s ng sinh viên có trong danh sách.
Thân hàm xoaTheoID
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 ;
}
}
Hàm tìm kiếm sinh viên theo tên
Hàm này được s dụng để tìm kiếm sinh viên trong danh sách theo tên. Không phân bit ch hoa, ch
thường.
Tham s:
a[]: là danh sách sinh viên.
ten[]: t khóa để so sánh vi tên sinh viên.
n: s ng sinh viên trong danh
sách.
Thân hàm timKiemTheoTen():
lOMoARcPSD| 48704538
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))) {
arrayFound[found] = a[i];
found++;
}
}
showStudent(arrayFound, found);
}
Hàm tính điểm trung bình và xếp loi hc lc
Thân hàm tinhDTB():
void tinhDTB(SV &sv) {
sv.diemTB = (sv.diemToan + sv.diemLy + sv.diemHoa) / 3; }
Thân hàm xeploai():
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"); }
Hàm sp xếp danh sách sinh viên theo điểm trung bình
Hàm này được s dụng để sp xếp sinh viên theo điểm trung bình theo th t tăng dần.
Tham s:
a[]: là danh sách sinh viên.
n: là s ng sinh viên có trong danh sách.
Thân hàm sapxepTheoDTB():
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;
}
}
}
}
Hàm sp xếp danh sách sinh viên theo tên
Hàm này được s dụng để sp xếp sinh viên theo tên theo th t tăng dần và không phân bit ch
hoa, ch thường.
Tham s:
a[]: là danh sách sinh viên.
lOMoARcPSD| 48704538
n: là s ng sinh viên có trong danh sách.
Thân hàm sapXepTheoTen():
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];
a[j] = tmp;
}
}
}
}
Hàm hin th danh sách sinh viên ra màn hình
Hàm này được s dụng để hin th danh sách sinh viên ra màn hình.
Tham s:
a[]: là danh sách sinh viên.
n: là s ng sinh viên có trong danh sách.
Thân hàm showStudent():
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);
}
Hàm đọc danh sách sinh viên t file
Hàm này được s dụng để đọc danh sách sinh viên t file.
lOMoARcPSD| 48704538
Tham s:
a[]: là danh sách sinh viên s được đọc ra t file.
fileName[]: là tên của file lưu trữ danh sách sinh viên.
Giá tr tr v ca hàm là s ng sinh viên có trong file và danh sách sinh viên.
Thân hàm docFile():
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;
// tra ve so luong sinh vien duoc doc tu file
return i; fclose ( fp); }
Hàm ghi danh sách sinh viên t file
Hàm này được s dụng để đọc danh sách sinh viên t file.
Tham s:
a[]: là danh sách sinh viên s đưc ghi vào file.
n: là s ng sinh viên.
fileName[]: là tên của file lưu trữ danh sách sinh viên.
Giá tr tr v ca hàm là s ng sinh viên có trong file và danh sách sinh viên.
Thân hàm ghiFile():
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);
}
Hàm main của chương trình quản lý sinh vien trong C++
Hàm main ca chúng ta được s dụng để khi tạo menu và điều khiển chương trình quản lý sinh viên.
Giải thích ý nghĩa của các biến:
lOMoARcPSD| 48704538
key: là giá tr bn nhập để chn tùy chn trong menu.
fileName: tên của file lưu trữ danh sách sinh viên.
arraySV[]: lưu trữ mt mng các struct sinh viên.
soluongSV: s ng sinh viên hin ti ca mng arraySV. idCount: biến đếm id t
động tăng của sinh viên.
Khi khi tạo chương trình chúng ta s đọc danh sách sinh viên có sn trong file sinhvien.txt, đồng thi
lấy ra được s ng sinh viên và id ln nht hin ti ca danh sách sinh viên.
Chương III: Chương Trình Th Nghim
1-Giao Din Và Cách s dng
Khi Chạy chương Trình Ta sẽ có giao diện như sau:
Trong giao din ta s có s ng sinh viên có trong danh sách h thng và
các chức năng
Khi ta cn s dng các chức năng nào chỉ cn nhp s tương ứng trong
chương trình
| 1/21

Preview text:

lOMoAR cPSD| 48704538 Mục Lục
Chương I :Tổng quan về lập trình C++ 1.
Các kiểu dữ liệu trong C++, khung chương trình và cách khai báo biến
2.Khung chương trình và các cách khai báo biến
3.Các câu lệnh nhập xuất và cấu trúc các câu lệnh điều khiển 4.Lập trình hàm
5.Xử lý các xâu trong C++
Chương II : Phân tích và thiết kế
1.Các Chức Năng Của Chương Trình Quản Lý Sinh Viên 1.1 Thêm Thông Tin Sinh
1.2 Sửa Thông Tin Sinh Viên 1.3 Xóa Sinh Viên
1.4 Tìm Kiếm sinh viên thêo tên
1.5sắp xếp sinh viên theo điểm trung bình
1.6 sắp xếp sinh viên theo tên
1.7 Hiển Thị Danh Sách Sinh Viên 2 .Phân Tích
Chương III: Chương Trình Thử Nghiệm
1.Giao Diện Và Cách sử dụng lOMoAR cPSD| 48704538
Chương I :Tổng quan về lập trình C++
C++ chính là một ngôn ngữ lập trình phổ biến và mạnh mẽ, nó có kiểu dữ liệu tĩnh và hỗ
trợ gần như tất cả các phương pháp lập trình như: lập trình hướng thủ tục, lập trình
hướng module và lập trình hướng đối tượng. Vào năm 1990 thì C++ đã trở thành một
ngôn ngữ thương mại phổ biến tại thời điểm này.
Ngôn ngữ C++ được ra đời vào năm 1983 do Bjarne phát triển dựa trên nguyên tắc cơ
bản của ngôn ngữ mẹ C. Vì dựa trên C để phát triển nên ngôn ngữ C++ gần như mang
những đặc tính của C, có thêm sự nâng cấp và bổ sung cần thiết một vài chức năng riêng biệt.
Ưu điểm của lập trình C++
Tính phổ biến: Đầu tiên thì ngôn ngữ C++ là một trong những ngôn ngữ lập
trình phổ biết nhất trên thế giới •
Tính thực thi nhanh: Nếu ta đã quen về C++ thì có thể thao tác một cách
nhanh chóng. Một trong những mục tiêu chung của lập trình C++ là khả năng
thực thi. Nếu chúng ta cần thêm các tính năng cho chương trình, thì C++ cho
phép chúng ta dùng ngôn ngữ Assembly (là hợp ngữ) – Một ngôn ngữ lập
trình bậc thấp nhất để có thể giao tiếp trực tiếp với phần cứng của máy tính •
Thư viện đầy đủ: Có rất nhiều tài nguyên cho người lập trình với C++, nó
còn bao gồm cả đồ hoạ: API, 2D, 3D, vật lý các thiết bị âm thanh hỗ trợ giúp
cho các lập trình viên dễ dàng thực hành •
Đa mô hình: Thêm nữa C++ cho phép chúng ta lập trình theo cấu trúc tuyến
tính, hướng chức năng và hướng đối tượng đa dạng tuỳ vào yêu cầu của mỗi người lập trình
1. Các kiểu dữ liệu trong C++, khung chương trình và cách khai báo biến
Một chương trình C++ cơ bản thường được bắt đầu bởi dòng include khai báo thư
viện, sau đó là hàm main. Tất cả mọi thứ của chương trình đều sẽ chạy dọc theo hàm
main từ trên xuống dưới, có nghĩa là nếu bạn viết một hàm ngoài main và trong main
không gọi đến hàm đấy có nghĩa là hàm đấy sẽ không chạy trong chương trình, một
hàm luôn luôn phải kết thúc bởi dấu chấm phẩy (;) . Dưới đây là bộ khung cơ bản của
chương trình Hello world bằng C++.
#include < iostream > using namespace std; lOMoAR cPSD| 48704538
int main() { cout << "Hello world !"; return 0; }
Có rất nhiều kiểu dữ liệu trong C++, đối với các bạn mới bắt đầu và để làm các bài tập
cơ bản thì nên tìm hiểu trước về int, long, long long, float, double, long double, char, string,
về cách biểu diễn và khoảng của mỗi kiểu dữ liệu. Sau khi đã làm các bài tập và hiểu
rõ rồi thì có thể tìm hiểu thêm các kiểu dữ liệu khác. Dưới đây là một vài ví dụ về cách khai báo biến trong C++.
#include < iostream > using namespace std; int main() {
int a = 10; // Khai báo biến a kiểu int có giá trị nguyên là 10
float b = 1.5; // Khai báo biến b kiểu float có giá trị thực là 1.5
char c; // khai báo biến c có kiểu dữ liệu là ký tự char c = 'a'; // gán giá trị cho biến c là ký tự 'a'
string d; // khai báo biến d có kiểu dữ liệu là xâu string d = "ok" // gán giá trị cho biến d là xâu "ok" return 0; }
Bảng dưới đây thống kê phạm vi lưu trữ cũng như bộ nhớ tiêu tốn của các kiểu dữ
liệu dạng số trong C++ kèm theo modi 昀椀 er lOMoAR cPSD| 48704538
Ngoài ra, C++ cung cấp một số từ khóa để đưa ra giá trị nhỏ nhất và lớn nhất lưu
trữ được của một kiểu dữ liệu, thể hiện trong bảng dưới đây:
Riêng với kiểu dữ liệu char, kiểu này có thể lưu được cả số lẫn kí tự. Đối với kí tự,
kiểu char lưu trữ được toàn bộ 256256 kí tự thuộc bảng mã ASCII - là bảng kí tự
và mã kí tự sử dụng trong tin học và một số lĩnh vực khác. lOMoAR cPSD| 48704538
2 .Khung chương trình và các cách khai báo biến
Mỗi chương trình C++ cơ bản đều được bắt đầu bởi dòng include khai báo thư viện, tiếp
theo sẽ là hàm main. Tất cả thành phần của chương trình đều sẽ chạy dọc theo hàm
main này từ trên xuống dưới, nghĩa là nếu ta viết một hàm ngoài main và trong main
thì có nghĩa là hàm đấy sẽ không chạy trong chương trình, kết thúc mỗi luôn là dấu chấm phẩy (;).
Trên thực tế có rất nhiều kiểu dữ liệu trong C+, với những người mới bắt đầu muốn làm
các bài tập cơ bản thì nên tìm hiểu trước về: int, long, float, double, char, string đồng
thời về cách biểu diễn và khoảng của mỗi kiểu dữ liệu. Việc tìm hiểu dữ liệu này sẽ giúp
các bạn trong quá trình thực hiện dễ dàng hơn . lOMoAR cPSD| 48704538
3.Các câu lệnh nhập xuất và cấu trúc các câu lệnh điều khiển
Câu lệnh nhập xuất
Đối với ngôn ngữ C++ các bạn có thể thực hiện một các đơn giản đó là nhập
lệnh cin còn nếu xuất để sử dụng thì dùng lệnh cout.
Câu lệnh rẽ nhánh lOMoAR cPSD| 48704538
Đầu tiên bạn có thể sử dụng với lệnh if slse
Cách 2: Bạn có thể sử dụng swith case 4 .Lập trình hàm
Trong quá trình viết các chương trình, nếu các thao tác được thực hiện một cách tuần
tự trong hàm main thì sẽ khó để theo dõi. Khi viết chương trình, nếu như tất cả mọi thứ
đều được viết tuần tự trong hàm main thì rất khó để theo dõi. Do đó nếu một hàm được lOMoAR cPSD| 48704538
sử dụng nhiều lần thì nên viết một hàm con ra ngoài. Điều này sẽ giúp cho code của
bạn trở nên gọn gàng và dễ theo dõi cũng như code đơn giản hơn.
5 .Xử lý các xâu trong C ++
Với ngôn ngữ lập trình C++, các xâu sẽ được biểu diễn bởi kiểu dữ liệu là string. Mỗi
string là một xâu gồm các ký tự (được biểu diễn bằng kiểu char) nối tiếp nhau. Khác với
xâu trong C là một mảng các char và được kết thúc mảng bới ký tự NULL. Thông
thường các phép xử lý trong xâu sẽ khác so với các phép toán xử lý logic. Việc sử dụng
kiểu string trong C++ làm cho việc xử lý xâu trở nên dễ dàng hơn so với kiểu mảng các
ký tự char khác trong C. Bạn có thể sử dụng cách nhập xâu cụ thể như sau:
Chương II : Phân tích và thiết kế lOMoAR cPSD| 48704538
1.Các Chức Năng Của Chương Trình Quản Lý Sinh Viên 1.1 Thêm Thông Tin Sinh Thêm Thông Tin Sinh Viên Nhập Giới Nhập Điểm Nhập Điểm Nhập Nhập Nhập Điểm Tính Toá Hó Tên Tuổi Lý n a
- Khi thêm thông tin sinh viên người dùng cũng có thể chọn nhập số sinh viên cần thêm vào danh sách Hình Minh Họa
1.2 Sửa Thông Tin Sinh Viên lOMoAR cPSD| 48704538 Sửa Thông Tin Sinh Viên Nhập ID Nhập Giới Nhập Điểm Nhập Điểm Nhập Tên Nhập Tuổi Nhập Điểm Lý Tính Toán Hóa Hình Minh Họa 1.3 Xóa Sinh Viên Xóa Sinh Viên Nhập ID Sinh Viên Cần Xóa Xóa Sinh Viên Có ID Vừa Nhập Trong Danh Sách Hệ Thống lOMoAR cPSD| 48704538 Hình Minh Họa
1.4 Tìm Kiếm sinh viên thêo tên lOMoAR cPSD| 48704538 Tìm Kiếm Sinh Viên Theo Tên Nhập Tên Cần Tìm Hiển Thị DSaán chh Tên Vừa Nhập gồm giới 琀 Điểm Điểm Điểm Trung ST I Họ Và Tuổ Điểm Toán Hóa Bình Học T D Tên i lý Lực Hình Minh Họa
1.5 sắp xếp sinh viên theo điểm trung bình
- sắp xếp sinh viên theo điểm trung bình Được Sắp Xếp Theo Thứ
Tự Tăng Dần Từ thấp đến cao Hình Minh Họa
1.6 sắp xếp sinh viên theo tên -Khi chọn sắp xếp sinh viên
theo tên hệ thống sẽ sắp xếp thứ tự tên của sinh viên theo bảng chữ cái abc lOMoAR cPSD| 48704538 Hình Minh Họa
1.7 Hiển Thị Danh Sách Sinh Viên
-Hiển Thị danh sách sinh viên là chức năng sẽ giúp người sử dụng xem được tất cả danh
sách sinh viên đã lưu trong hệ thống bao gồm điểm và học lực của sinh viên
1.8 Lưu danh sách sinh viên
-Chức năng Lưu danh sách sinh viên giúp người dùng lưu tất cả sinh viên mình vừa nhập
vào một file tên là sinhvien.txt do đó nó sẽ lưu chữ tất cả dữ liệu để tránh bị mất 2 . Phân Tích
Chúng ta sẽ tạo một cấu trúc sinh viên như sau, diemTB sẽ được tính bằng trung bình của các môn
toán, lý và hóa. hocluc sẽ được tính toán dựa vào diemTB như yêu cầu của bài toán. struct SinhVien { int id; char ten[30]; char gioiTinh[5]; int tuoi; float diemToan; float diemLy; float diemHoa; float diemTB = 0; char hocluc[10] = "-"; }
Bây giờ chúng ta có thể sử dụng struct SinhVien với đơn giản hơn bằng SV với từ khóa typedef, như sau typedef SinhVien SV;
Sau đây là danh sách các hàm mà chúng ta sẽ sử dụng trong chương trình quản lý sinh viên, các
hàm này sẽ được cung cấp thân hàm sau đó:
void printLine(int n); int idLonNhat(SV a[], int
n); void nhapThongTinSV(SV &sv, int id); void
nhapSV(SV a[], int id, int n); void lOMoAR cPSD| 48704538
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); 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(); Hàm printLine(int n)
Hàm này in ra một dòng có n ký tự "_". Tham số:
n: là số ký tự "_" sẽ được in ra màn hình. Thân hàm printLine(): void printLine(int n) { cout << endl;
for (int i = 0; i < n; i++) { cout << "_"; } cout << endl; } Hàm idLonNhat(SV a[], int n)
Yêu cầu của bài toán là id của sinh viên tự động tăng.
Nên chúng ta sẽ tạo hàm này để lấy ra id lớn nhất của danh sách sinh viên a[]. Tham số: •
a[]: là danh sách sinh viên. •
n: là số lượng sinh viên có trong danh sách. Thân hàm idLonNhat():
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; }
Hàm nhập thông tin 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: lOMoAR cPSD| 48704538 •
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. Thân hàm nhapThongTinSV():
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); } Thân hàm nhapSV():
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); }
Hàm cập nhật thông tin 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():
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; cout << " Nhap diem
Ly: "; cin >> sv.diemLy; cout << " Nhap diem Hoa: ";
cin >> sv.diemHoa; tinhDTB(sv); xeploai(sv); } Thân hàm capNhatSV(): lOMoAR cPSD| 48704538
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); } } 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
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 ; } }
Hàm tìm kiếm sinh viên theo tên
Hàm này được sử dụng để tìm kiếm sinh viên trong danh sách theo tên. Không phân biệt chữ hoa, chữ thường. Tham số: •
a[]: là danh sách sinh viên. •
ten[]: là từ khóa để so sánh với tên sinh viên.
n: là số lượng sinh viên có trong danh sách. Thân hàm timKiemTheoTen(): lOMoAR cPSD| 48704538
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))) { arrayFound[found] = a[i]; found++; } }
showStudent(arrayFound, found); }
Hàm tính điểm trung bình và xếp loại học lực Thân hàm tinhDTB(): void tinhDTB(SV &sv) {
sv.diemTB = (sv.diemToan + sv.diemLy + sv.diemHoa) / 3; } Thân hàm xeploai(): 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"); }
Hàm sắp xếp danh sách sinh viên theo điểm trung bình
Hàm này được sử dụng để sắp xếp sinh viên theo điểm trung bình theo thứ tự tăng dần. Tham số: •
a[]: là danh sách sinh viên. •
n: là số lượng sinh viên có trong danh sách. Thân hàm sapxepTheoDTB():
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; } } } }
Hàm sắp xếp danh sách sinh viên theo tên
Hàm này được sử dụng để sắp xếp sinh viên theo tên theo thứ tự tăng dần và không phân biệt chữ hoa, chữ thường. Tham số: •
a[]: là danh sách sinh viên. lOMoAR cPSD| 48704538 •
n: là số lượng sinh viên có trong danh sách. Thân hàm sapXepTheoTen():
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]; a[j] = tmp; } } } }
Hàm hiện thị danh sách sinh viên ra màn hình
Hàm này được sử dụng để hiện thị danh sách sinh viên ra màn hình. Tham số: •
a[]: là danh sách sinh viên. •
n: là số lượng sinh viên có trong danh sách. Thân hàm showStudent():
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); }
Hàm đọc danh sách sinh viên từ file
Hàm này được sử dụng để đọc danh sách sinh viên từ file. lOMoAR cPSD| 48704538 Tham số: •
a[]: là danh sách sinh viên sẽ được đọc ra từ file. •
fileName[]: là tên của file lưu trữ danh sách sinh viên.
Giá trị trả về của hàm là số lượng sinh viên có trong file và danh sách sinh viên. Thân hàm docFile():
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;
// tra ve so luong sinh vien duoc doc tu file return i; fclose ( fp); }
Hàm ghi danh sách sinh viên từ file
Hàm này được sử dụng để đọc danh sách sinh viên từ file. Tham số: •
a[]: là danh sách sinh viên sẽ được ghi vào file. •
n: là số lượng sinh viên. •
fileName[]: là tên của file lưu trữ danh sách sinh viên.
Giá trị trả về của hàm là số lượng sinh viên có trong file và danh sách sinh viên. Thân hàm ghiFile():
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); }
Hàm main của chương trình quản lý sinh vien trong C++
Hàm main của chúng ta được sử dụng để khởi tạo menu và điều khiển chương trình quản lý sinh viên.
Giải thích ý nghĩa của các biến: lOMoAR cPSD| 48704538 •
key: là giá trị bạn nhập để chọn tùy chọn trong menu. •
fileName: tên của file lưu trữ danh sách sinh viên. •
arraySV[]: lưu trữ một mảng các struct sinh viên. •
soluongSV: số lượng sinh viên hiện tại của mảng arraySV.
idCount: là biến đếm id tự
động tăng của sinh viên.
Khi khởi tạo chương trình chúng ta sẽ đọc danh sách sinh viên có sẵn trong file sinhvien.txt, đồng thời
lấy ra được số lượng sinh viên và id lớn nhất hiện tại của danh sách sinh viên.
Chương III: Chương Trình Thử Nghiệm
1-Giao Diện Và Cách sử dụng
Khi Chạy chương Trình Ta sẽ có giao diện như sau:
Trong giao diện ta sẽ có số lượng sinh viên có trong danh sách hệ thống và các chức năng
Khi ta cần sử dụng các chức năng nào chỉ cần nhập số tương ứng trong chương trình