Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.16 MB, 73 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
structSinh_Vien{ MSSV;int
string Ho_dem; string Ten_sv; string Gioi_tinh; Ngay_Sinh *Ngay_sinh; void load_sv(stringline) {
ngay_sinh = newNgay_Sinh; string delimiter = ;";"
pos_of_delimiter = int line.find(delimiter); i = 0;int
do
{
pos_of_delimiter = line.find(delimiter); string info = line.substr(0, pos_of_delimiter); switch (i)
{
case 0: MSSV = stoi(info); break; case 1: Ho_dem info; = break; case 2: ten_sv info; = break; case 3: gioi_tinh info; = break; case 4:
{
case 0:ngay_sinh->day = stoi(info_date); break; case 1:ngay_sinh->month = stoi(info_date); break; case 2:ngay_sinh->year = stoi(info_date); break; }
line =line.substr(pos_of_delimiter + 1, line.length() - 1); } while (pos_of_delimiter != string::npos); }
void print() { cout << left;
cout <<"\t| "<< setw(15) << MSSV << "|"<< setw(25) << Ho_dem ten_sv +" "+ << "|"<< setw(13) << gioi_tinh
<<"|"<< setw(17) << ngay_sinh->ngay_sinh() <<"|\n"; }
struct sv_node
Sinh_Vien* sinh_vien; sv_node* next;};
sv_node* head = newsv_node;
SV_List() // hàm khởi tạo (constructor) {
head->sinh_vien = newSinh_Vien; head->sinh_vien->Ngay_sinh = newNgay_Sinh; head = NULL;
}
// hàm thêm thông tin từ 1 sinh viên có sẵn trong file
void add_sv(Sinh_Vien* new_sv) {
// truyền dữ liệu cho con trỏ temp_node sv_node* temp_node = newsv_node; temp_node->sinh_vien = newSinh_Vien; temp_node->sinh_vien->Ngay_sinh = newNgay_Sinh; temp_node->sinh_vien->MSSV = new_sv->MSSV; temp_node->sinh_vien->Gioi_tinh =new_sv->Gioi_tinh; chuan_hoa(new_sv->Ho_dem);
temp_node->sinh_vien->Ho_dem =new_sv->Ho_dem; chuan_hoa(new_sv->Ten_sv);
head = temp_node; temp_node->next = NULL; }
else
{
sv_node* p = head; while (p->next != NULL) {
p = p->next; }
p->next = temp_node; temp_node->next = NULL; }
}
// hàm kiểm tra xem 1 mã sinh viên có tồn tại trong danh sách
check_sv( int intip_MSSV) {
for (sv_node* p = head; p != NULL; p = p->next) {
(ifip_MSSV == p->sinh_vien->MSSV) {
return 1; }
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">temp_node->sinh_vien->Ngay_sinh = new_sv->Ngay_sinh;// thêm vào danh sách liên kết
(head == if NULL) {
} return 0; }
structHoc_Phan{ string Ma_hp; string Ten_hp; So_tc;int
void load_hp(stringline) {
{
case 0: Ma_hp info; = break;
case 1: Ten_hp info; = break; case 2: So_tc = stoi(info); break;
} i++;
line =line.substr(pos_of_delimiter + 1, line.length() - 1); } while (pos_of_delimiter != string::npos); }
void print() { cout << left;
cout <<"\t| "<< setw(15) << Ma_hp << "|"<< setw(45) << Ten_hp << "|"<< setw(13) << So_tc <<"|\n"; }
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">struct hp_node
Hoc_Phan* hoc_phan; hp_node* next;};
hp_node* head = newhp_node;
HP_List() {
head->hoc_phan = newHoc_Phan; head = NULL;
}
// hàm thêm 1 học phần từ 1 file ban đầu
void add_hp(Hoc_Phan *new_hp) {
hp_node* temp = newhp_node; temp->hoc_phan = newHoc_Phan; temp->hoc_phan->Ma_hp =new_hp->Ma_hp; for int ( i = 0; i < new_hp->Ten_hp.length(); i++) {
new_hp->Ten_hp i[ ] = toupper(new_hp->Ten_hp );[
head = temp;
temp->next = NULL; }
else
{
hp_node* p = head; while (p->next != NULL) {
p = p->next; } p->next = temp; temp->next = NULL; }
}
// hàm kiểm tra xem 1 mã học phần có tồn tại trong danh sách
check_hp(int stringma_hp) {
for (hp_node* p = head; p != NULL; p = p->next) {
(ifma_hp== p->hoc_phan->Ma_hp) {
return 1; } } return 0;
}};
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">structDiem_Thi{ string Ma_hp; MSSV;int
float Diem_hp; void load_dt(stringline) {
{
case 0: Ma_hp info; = break; case 1: MSSV = stoi(info); break; case 2: Diem_hp = stof(info); break; }
i++;
line =line.substr(pos_of_delimiter + 1, line.length() - 1); } while (pos_of_delimiter != string::npos); }
void print() { cout << left;
cout <<"\t| "<< setw(20) << Ma_hp << "|"<< setw(25) << MSSV << "|"<< setw(16) << Diem_hp <<"|\n"; }
dt_node* head = newdt_node;
DT_List() {
head->diem_thi = newDiem_Thi; head = NULL;
}
// hàm thêm 1 bản ghi điểm thi từ 1 con trỏ có sẵn (Nhập từ file ban đầu)
void add_dt(Diem_Thi * new_dt) {
dt_node* temp = newdt_node; temp->diem_thi = newDiem_Thi; temp->diem_thi->Ma_hp =new_dt->Ma_hp; temp->diem_thi->Diem_hp = new_dt->Diem_hp; temp->diem_thi->MSSV = new_dt->MSSV;
(head == if NULL) { head = temp; temp->next = NULL; }
else
{
dt_node* p = head; while (p->next != NULL) {
p = p->next; } p->next = temp; temp->next = NULL; }
}};
structNgay_Sinh{ day;int
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">// hàm thêm thơng tin sinh viên từ bàn phímvoid add_sv(SV_List *&sv){
program_exe +="[->] Da di vao ham them 1 sinh vien!\n"; sv_node* temp = newsv_node;
temp->sinh_vien = newSinh_Vien; temp->sinh_vien->Ngay_sinh = newNgay_Sinh; cout <<"[!] Them sinh vien \n"; while true ( )
{
// nhập vào ngày tháng năm sinh
cout <<"\n"; {
cout <<"\t(?) Nhap vao ngay sinh : "; cin >> temp->sinh_vien->Ngay_sinh->day; cout <<"\t(?) Nhap vao thang sinh : "; cin >> temp->sinh_vien->Ngay_sinh->month; cout <<"\t(?) Nhap vao nam sinh : "; cin >> temp->sinh_vien->Ngay_sinh->year;
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">while true ( ) {
cout <<"\t(?) Nhap vao ma so sinh vien : "; cin >> temp->sinh_vien->MSSV;
(cin.fail() || temp->sinh_vien->MSSV <= 0 || cin.get() != if'\n' // cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(temp->sinh_vien->MSSV == p->sinh_vien->MSSV)if
{ flag = 1; } } (flag == 1)if
program_exe +="[exe] Da nhap thanh cong 1 ma so sinh vien moi" nts(temp->sinh_vien->MSSV) + +" \n";
cout <<"\t(?) Nhap vao ho dem : "; getline(cin.ignore(), temp->sinh_vien->Ho_dem); chuan_hoa(temp->sinh_vien->Ho_dem);
program_exe +="[exe] Da nhap thanh cong 1 ho dem sinh vien moi " temp->sinh_vien->Ho_dem + +" \n";
cout <<"\t(?) Nhap vao ten sinh vien : "; fflush(stdin);
{
cout <<"\t(?) Ngay thang nam sinh khong hop le ! Nhap lai :\n";
} } while true ( );
program_exe +="[exe] Da nhap thanh cong 1 ngay sinh cua sinh vien moi " temp->sinh_vien->Ngay_sinh->ngay_sinh() + +" \n";cout <<"\n";
cout <<"\t(?) Lua chon gioi tinh : \n\n"; gioi_tinh = Options(int "Nam" "Nu" "" "" "" "", , , , , ); switch (gioi_tinh) {
case 0: temp->sinh_vien->Gioi_tinh ="Nam"; break; case 1: temp->sinh_vien->Gioi_tinh ="Nu"; break; }
cout << endl;
program_exe +="[exe] Da nhap thanh cong 1 gioi tinh cua sinh vien moi " temp->sinh_vien->Gioi_tinh + +" \n";
( ->head == ifsv NULL) {
->head = temp;sv temp->next = NULL; }
else
sv_node* p = sv->head; while (p->next != NULL) {
p = p->next; } p->next = temp; temp->next = NULL; }
cout <<"Da them 1 sinh vien moi !\n";
program_exe +="[exe] Da them 1 sinh vien : " nts(temp-+
// hàm thêm thơng tin học phần từ bàn phímvoid add_hp(HP_List *&hp){
program_exe +="[->] Da di vao ham them 1 hoc phan moi !\n"; hp_node* temp = newhp_node;
temp->hoc_phan = newHoc_Phan; // nhập vào mã học phần
{
while true ( ) {
cout <<"\t(?) Nhap vao so tin chi : "; cin >> temp->hoc_phan->So_tc;
(cin.fail() || temp->hoc_phan->So_tc <= 0 || cin.get() != if '\n')
// cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">cout <<"\t(?) Nhap vao ma hoc phan :"; getline(cin, temp->hoc_phan->Ma_hp); for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == temp->hoc_phan->Ma_hp) {
flag = 1; } } (flag == 0)if
{ break; } else
for int ( i = 0; i < temp->hoc_phan->Ten_hp.length(); i++) {
temp->hoc_phan->Ten_hp = toupper(temp->hoc_phan-[
>Ten_hp i );[ ]
}
program_exe +="[exe] Da nhap thanh cong ten cua 1 hoc phan moi " temp->hoc_phan->Ten_hp + +" \n";
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
program_exe +="[exe] Da nhap thanh cong so tin chi cua 1 hoc phan moi " nts(temp->hoc_phan->So_tc) + +" \n";
( ->head == ifhp NULL) {
->head = temp;hp temp->next = NULL; }
else
hp_node* p = hp->head; while (p->next != NULL) {
p = p->next; } p->next = temp; temp->next = NULL; }
program_exe +="[exe] Da them 1 sinh vien : " temp-+
// hàm thêm 1 điểm thi
void add_dt(DT_List*& dt, HP_List*& hp, SV_List*& sv){
program_exe +="[->] Di vao ham them 1 diem thi!\n"; // Nhập các thơng tin từ bàn phím
dt_node* temp = newdt_node; temp->diem_thi = newDiem_Thi;
program_exe +="[exe] Kiem tra xem ma hoc phan co ton tai hay khong.\n";
{ flag = 0;int
// kiểm tra xem mã học phần có tồn tại hay không
do
{ flag_hp = 0;int
cout <<"\t(?) Nhap vao ma hoc phan : "; getline(cin, temp->diem_thi->Ma_hp); UPPER(temp->diem_thi->Ma_hp);
for (hp_node* hp_ptr = ->head; hp_ptr != hp NULL; hp_ptr = hp_ptr->next)
{
(temp->diem_thi->Ma_hp if == hp_ptr->hoc_phan->Ma_hp) {
flag_hp = 1; break; }
{ break; } } while true ( );
program_exe +="[exe] Kiem tra xem ma sinh vien nay co diem cua hocphan do chua .\n";
// kiểm tra xem có bị trùng với 1 bộ điểm thi nào không
for (dt_node* p = ->head; p != dt NULL; p = p->next) {
(p->diem_thi->Ma_hp if == tem>diem_thi->Ma_hp && >diem_thi->MSSV == temp->diem_thi->MSSV)
{ flag = 1; break; } } (flag == 1)if
{
program_exe +="[exe] Da co diem cua sinh vien " nts(temp-+
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">{
program_exe +="[exe] Ma hoc phan " temp->diem_thi-+
>Ma_hp +" dung . Thoat vong lap kiem tra ma hoc phan .\n"; break;
} } while true ( );
program_exe +="[exe] Kiem tra xem ma sinh vien co ton tai hay khong.\n";
// kiểm tra xem mã sinh viên có tồn tại hay không
do
{ flag_sv = 0;int
// nhập vào mã số của sinh viên
while true ( ) {
cout <<"\t(?) Nhap vao ma so sinh vien : "; cin >> temp->diem_thi->MSSV;
(cin.fail() || temp->diem_thi->MSSV <= 0 || cin.get() != if'\n' // cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
for (sv_node* sv_ptr = ->head; sv_ptr != sv NULL; sv_ptr = sv_ptr->next)
{
(temp->diem_thi->MSSV == sv_ptr->sinh_vien->MSSV)if
{ flag_sv = 1; break; } }
>diem_thi->MSSV) +" voi hoc phan " temp->diem_thi->Ma_hp + +".\n"; cout <<"(*) Trung khop ! Sinh vien da co diem cua hoc phan nay ! Nhap lai : \n";
cin.ignore(); }
{ break; } } while true ( );
program_exe +="[exe] Nhap diem \n";
{ break; } } while true ( );
// thêm vào danh sách
( ->head == ifdt NULL) {
->head = temp;dt temp->next = NULL; }
else
dt_node* p = dt->head; while (p->next != NULL) {
p = p->next; } p->next = temp; temp->next = NULL; }
program_exe +="[exe] Da them diem cua sinh vien " nts(temp-+
>diem_thi->MSSV) +" voi hoc phan"
temp->diem_thi->Ma_hp + +" : "
convert_from_number_to_string(temp->diem_thi->Diem_hp, 2) + +" diem.\n";
cout <<"[V] Da them vao danh sach diem thi !\n";}
// hàm xóa thơng tin sinh viênvoid delete_sv(SV_List *&sv){
program_exe +="[->] Da di vao ham xoa 1 sinh vien! \n"; cout <<"[->] Xoa sinh vien theo\n";
se = Options(int "MSSV" "STT" "QUAY LAI", , , "", "", ""); switch (se)
{ case 0: {
program_exe +="[exe] Lua chon xoa 1 sinh vien theo ma so sinh
{
(p == if sv->head) { //continue;
} else
{
last = last->next; }
} }
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">vien. \n"; index;int
flag_all = 1;int
do
{ flag = 0;int
// nhập vào mã số của sinh viên cần sửa
while true ( ) {
cout <<"\t(?) Nhap vao ma so sinh vien muon sua : "; cin >> index;
(cin.fail() || index <= 0 || cin.get() != if '\n') // cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(p->sinh_vien->MSSV == index)if
{ flag = 1; break; } } (flag == 0)if
{
cout <<"(*) Khong ton tai ma so sinh vien nay ! \n"; select = Options(int "NHAP LAI", "THOAT" "" "" "" "", , , , ); switch (select)
{
sv_node* last = sv->head;
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(p->sinh_vien->MSSV == index)if
{
(p == if sv->head) {
->head = p->next;sv
program_exe +="[exe] Da xoa sinh vien co ma so sinh vien" nts(p->sinh_vien->MSSV)+
p->sinh_vien->Ho_dem p->sinh_vien-+" "+ +" "+
>Ten_sv +" trong danh sach\n";
cout <<"[V] Da xoa sinh vien co ma sinh vien "<< >sinh_vien->MSSV)
<< " " p->sinh_vien->Ho_dem +" "<< >Ten_sv <<" trong danh sach\n";
delete(p); break; } else
{
last->next = p->next;
program_exe +="[exe] Da xoa sinh vien co ma so sinh vien
flag_all = 0; }
} while (flag_all == 1);
break; } case 1: {
program_exe +="[exe] Lua chon xoa 1 sinh vien theo so thu tu trong danh sach sinh vien. \n";
index;int
// nhập vào số thứ tự
while true ( ) {
cout <<"\t(?) Nhap vao so thu tu cua sinh vien trong danh sach : "; cin >> index;
(cin.fail() || index <= 0 || cin.get() != if '\n') // cin.fail() trả về đúng vềnhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
sv_node* last = sv->head; count = 0;int
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(index - 1 == count)if
{
(p == if sv->head) {
->head = p->next;sv
cout <<"[V] Da xoa sinh vien co thu tu "<< nts(index) <<" : "
<< nts(p->sinh_vien->MSSV)
<< " " p->sinh_vien->Ho_dem << << >Ten_sv <<" trong danh sach\n";
program_exe +="[exe] Da xoa sinh vien co thu tu " nts(index) ++" : "+ nts(p->sinh_vien->MSSV)
p->sinh_vien->Ho_dem p->sinh_vien->Ten_sv +";"+ +";"++" trong danh sach\n";
delete(p); break; } else
program_exe +="[exe] Da xoa sinh vien co thu tu " nts(index) ++" : "+ nts(p->sinh_vien->MSSV)
p->sinh_vien->Ho_dem p->sinh_vien->Ten_sv +" "+ +" "++" trong danh sach\n";
p->next = p; delete(p); break; } } else
{
(p == if sv->head)
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">" nts(p->sinh_vien->MSSV)+
p->sinh_vien->Ho_dem p->sinh_vien-+" "+ +" "+
>Ten_sv +" trong danh sach\n";
cout <<"[V] Da xoa sinh vien co ma sinh vien "<< >sinh_vien->MSSV)
<< " " p->sinh_vien->Ho_dem +" "<< >sinh_vien->Ten_sv <<" trong danh sach\n";
p->next = p; delete(p); break; } } else
{ count++; } else
{ count++; last = last->next; }
} } break;
}
case 2: program_exe +="[exe] Lua chon quay lai. \n"; break; default:break;
}}
<b> program_exe += "[->] Da di vao ham xoa 1 hoc phan! \n"; int count = 0;</b>
<b> for (hp_node* p = hp->head; p != NULL; p = p->next) {</b>
<b> count++; }</b>
<b> if (hp->head != NULL) {</b>
<b> cout << "[->] Xoa theo thong tin : \n";</b>
<b> int se = Options("STT", "MA HOC PHAN", "TEN HOC PHAN", "QUAY LAI", "", "");</b>
<b> switch (se) { case 0: {</b>
<b> program_exe += "[exe] Xoa 1 hoc phan theo so thu tu trong danh sach. \n";</b>
<b> int index; do {</b>
<b> // nhập vào số thứ tự cửa học phần while (true)</b>
<b> cin.clear(); // Xóa trạng thái lỗi của cin cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin cout << "Vui long nhap mot so nguyen duong hop le.\n";</b>
<b> } else { break; } }</b>
<b> if (index <= 0 || index > count) {</b>
<b> cout << "(*) So thu tu khong ton tai trong danh sach ! Nhap lai : \n";</b>
<b> cout << "[V] Da xoa 1 hoc phan theo ma hoc phan : " << p->hoc_phan->Ma_hp + ";"</b>
<b> << p->hoc_phan->Ten_hp + ";" << >hoc_phan->So_tc) << " trong danh sach! \n";</b>
<b> p->next = p; delete(p); break; } } else {</b>
<b> if (p == hp->head) {</b>
<b> continue; // nếu p = head thì last không giữ nguyên</b>
<b> } else {</b>
<b> last = last->next; // nếu p != head thì last tiến 1 bước trong danh sách</b>
<b> }</b>
<b> // tất cả các if else để last luôn đi sau p ngoại trừ p = head;</b>
<b> } }</b>
<b> program_exe += "[exe] Da xoa hoc phan co ma hoc phan " + ma_hp + " \n";</b>
<b> flag_all = 0; break; }</b>
<b> } while (flag_all == 1); break; } case 2: {</b>
<b> string hp_char; string ma_hp; int flag_all = 1;</b>
<b> program_exe += "[exe] Xoa 1 hoc phan theo ten trong danh sach! \n";</b>
<b> int flag = 0;</b>
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28"><b> } else { break; } } while (true); hp_node* last = hp->head; int count = 0;</b>
<b> for (hp_node* p = hp->head; p != NULL; p = p->next) {</b>
<b> if (index - 1 == count) {</b>
<b> if (p == hp->head) {</b>
<b> hp->head = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo so thu tu " + nts(index) + " : "</b>
<b> + >Ma_hp + ";" + >Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b> cout << "[V]Da xoa 1 hoc phan theo so thu tu " <<nts(index) << " : "</b>
<b> << >hoc_phan->Ma_hp << ";" << >hoc_phan->Ten_hp << ";" << nts(p->hoc_phan->So_tc) << " trong danh sach! \n";</b>
<b> delete(p); break; } else {</b>
<b> last->next = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo so thu tu " + nts(index) + " : "</b>
<b> + >Ma_hp + ";" + >Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b> cout << "[V] Da xoa 1 hoc phan theo so thu tu " << nts(index) << " : "</b>
<b> << >hoc_phan->Ma_hp << ";" << >hoc_phan->Ten_hp << ";" << nts(p->hoc_phan->So_tc) << " trong danh sach! \n";</b>
<b> p->next = p; delete(p); break; } } else {</b>
<b> if (p == hp->head) {</b>
<b> count++; } else { count++; last = last->next; }</b>
<b> } } break; } case 1: {</b>
<b> program_exe += "[exe] Xoa 1 hoc phan theo ma hoc phan. \n";</b>
<b> string ma_hp; int flag_all = 1;</b>
<b> HP_List* replace = new HP_List;</b>
<b> cout << "\t(?) Nhap vao ten hoc phan hoac ki tu co trong ten hoc phan : ";</b>
<b> //cin.ignore(); // xóa kí tự còn tồn đọng trong bộ nhớ đệm getline(cin, hp_char);</b>
<b> replace->add_hp(p->hoc_phan); flag = 1;</b>
<b> } } if (flag == 0) {</b>
<b> cout << "(*) Khong ton tai hoc phan nao !\n"; break;</b>
<b> } else if (flag == 1) {</b>
<b> cout << "[->] Day la danh sach cac hoc phan co ki tu " << hp_char << " : \n";</b>
<b> show_hp(replace); do {</b>
<b> cout << "\t(?) Nhap vao ma hoc phan muon xoa :"; getline(cin, ma_hp);</b>
<b> UPPER(ma_hp); int flag = 0;</b>
<b> for (hp_node* p = h>head; p != NULL; p = >next)</b>
<b> {</b>
<b> if (ma_hp == p->hoc_phan->Ma_hp) {</b>
<b> flag = 1; break; } } if (flag == 0) {</b>
<b> cout << "(*) Khong ton tai ma hoc phan nay ! Nhap lai : \n";</b>
<b> int select = Options("NHAP LAI", "THOAT", "", "", "", "");</b>
<b> switch (select) {</b>
<b> case 0:flag_all = 1; break; case 1: flag_all = 0; break; }</b>
<b> } else {</b>
<b> hp_node* last = hp->head; // tạo ra 1 nút đi trước nút đang xét trong vòng lặp</b>
<b> for (hp_node* p = h>head; p != NULL; p = >next)</b>
<b> {</b>
<b> if (p->hoc_phan->Ma_hp == ma_hp) {</b>
<b> if (p == hp->head) {</b>
<b> hp->head = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo ki tu " + hp_char + " : "</b>
<b> + >hoc_phan->Ma_hp + ";" + </b>
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29"><b> for (hp_node* p = hp->head; p != NULL; p = p->next) {</b>
<b> if (ma_hp == p->hoc_phan->Ma_hp) {</b>
<b> flag = 1; break; } } if (flag == 0) {</b>
<b> cout << "(*) Khong ton tai ma hoc phan nay ! Nhap lai : \n";</b>
<b> int select = Options("NHAP LAI", "THOAT", "", "", "", "");</b>
<b> switch (select) {</b>
<b> case 0:flag_all = 1; break; case 1: flag_all = 0; break; }</b>
<b> } else {</b>
<b> hp_node* last = hp->head; // tạo ra 1 nút đi trước nút đang xét trong vòng lặp</b>
<b> for (hp_node* p = h>head; p != NULL; p = >next)</b>
<b> {</b>
<b> if (p->hoc_phan->Ma_hp == ma_hp) {</b>
<b> if (p == hp->head) {</b>
<b> hp->head = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo ma hoc phan : "</b>
<b> + >hoc_phan->Ma_hp + ";" + >hoc_phan->Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b> cout << "[V] Da xoa 1 hoc phan theo ma hoc phan : " << p->hoc_phan->Ma_hp + ";"</b>
<b> << p->hoc_phan->Ten_hp + ";" << >hoc_phan->So_tc) << " trong danh sach! \n"; delete(p);</b>
<b> break; } else {</b>
<b> last->next = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo ma hoc phan : "</b>
<b> + >hoc_phan->Ma_hp + ";" + >hoc_phan->Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b>p->hoc_phan->Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b> cout << "[V] Da xoa 1 hoc phan theo ki tu "<< hp_char << " : "</b>
<b> << >hoc_phan->Ma_hp << ";" + >hoc_phan->Ten_hp << ";" << nts(p->hoc_phan->So_tc) << " trong danh sach! \n";</b>
<b> delete(p); break; } else {</b>
<b> last->next = p->next;</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo ki tu " + hp_char + " : "</b>
<b> + >hoc_phan->Ma_hp + ";" + >hoc_phan->Ten_hp + ";" + nts(p->hoc_phan->So_tc) + " trong danh sach! \n";</b>
<b> cout << "[V] Da xoa 1 hoc phan theo ki tu "<< hp_char << " : "</b>
<b> << >hoc_phan->Ma_hp << ";" + >hoc_phan->Ten_hp << ";" << nts(p->hoc_phan->So_tc) << " trong danh sach! \n";</b>
<b> p->next = p; delete(p); break; } } else {</b>
<b> if (p == hp->head) {</b>
<b> continue; // nếu p = head thì last khơng giữ ngun</b>
<b> } else {</b>
<b> last = last->next; // nếu p != head thì last tiến 1 bước trong danh sách</b>
<b> }</b>
<b> // tất cả các if else để last luôn đi sau p ngoại trừ p = head;</b>
<b> } }</b>
<b> program_exe += "[exe] Da xoa 1 hoc phan theo ki tu ten " + hp_char + " trong danh sach! \n";</b>
<b> flag_all = 0; break; }</b>
<b> } while (flag_all == 1); break; } break; }</b>
<b> case 3:program_exe += "[exe] Lua chon thoat! \n"; return; default:break;</b>
<b> } } else {</b>
<b> cout << "(*) Khong the xoa hoc phan vi danh sach hoc phantrong !\n";</b>
<b> }}</b>
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">// Xóa 1 bản ghi điểm thi void delete_dt(DT_List*& dt){
// nhập vào mã số sinh viên và mã học phần
program_exe +="[->] Da di vao ham xoa 1 ban ghi diem thi ! \n"; DT_List* replace = newDT_List;
string ip_Ma_hp; ip_MSSV;int
replace->add_dt(p->diem_thi); }
}
(replace->head != if NULL) {
cout <<"[->] Day la cac sinh vien co diem cua hoc phan nay : \n";
show_dt(replace); cout <<"\n"; do
{ flag = 0;int
cout <<"\t(?) Nhap vao ma so sinh vien ma ban muon xoa : "; cin >> ip_MSSV;
for (dt_node* q = replace->head; q != NULL; q = q->next) {
(ip_MSSV == q->diem_thi->MSSV)if
{ flag = 1; break; } } (flag == 1)if
{ break; } else
{
cout <<"(*) Ma so sinh vien khong ton tai trong danh sach sinh vien co diem hoc phan nay !\n";
cout <<"\t(?) Lua chon : \n";
se = Options(int "NHAP LAI", "THOAT" "" "" "" "", , , , ); switch (se)
{ case break 0: ; case 1:flag_all = 0; }
cin.ignore();
}
} while (flag_all == 1); (flag_all == 1)if
{
// xóa ra khỏi danh sách điểm thi
dt_node* last = dt->head;
for (dt_node* p = ->head; p != dt NULL; p = p->next) {
(p->diem_thi->Ma_hp if == ip_Ma_hp && >MSSV == ip_MSSV)
{
(p == if dt->head) {
->head = p->next;dt delete(p); break; } else
{
last->next = p->next; p->next = p;
delete(p); // giải phóng bộ nhớ được cấp phát chop
break; } } else
{
(p == if dt->head) { continue; } else
{
last = last->next; }
} }
program_exe +="[exe] Da xoa diem cua sinh vien " +
nts(ip_MSSV) +" voi ma hoc phan " ip_Ma_hp + +" ra khoi danh sach.\n";
cout <<"[V] Da xoa diem cua sinh vien "<< ip_MSSV <<" voi ma hoc phan "<< ip_Ma_hp <<" khoi danh sach !\n"; }
} else
program_exe +="[exe] Khong co diem cua bat cu sinh vien nao voi hoc phan nay!\n";
cout <<"(*) Khong co diem cua bat cu sinh vien nao voi hoc phan nay !\n";
}};
cout <<"\t(?) Nhap vao ma so sinh vien muon sua : "; cin >> index;
(cin.fail() || index <= 0 || cin.get() != if '\n') // cin.fail() trả vềđúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } } count = 0;int
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(p->sinh_vien->MSSV == index)if
{ count++; } } (count != 1)if
{
cout <<"Sinh vien co ma so nay khong ton tai !\n"; se = Options(int "NHAP LAI", "THOAT" "" "" "" "", , , , ); switch (se)
{ case break 0: ; case 1:flag_all = 0; break; }
} else
{ break; }
cout <<"\t(!) Lua chon thong tin muon sua : \n";
se = Options(int "MSSV" "HO VA TEN DEM" "TEN SINH , ,
VIEN", "NGAY SINH" "GIOI TINH" "QUAY LAI", , ); program_exe +="[exe] Lua chon thong tin can sua : \n"; switch (se)
{ case 0: {
program_exe +="[exe] Da lua chon sua MSSV \n"; old_MSSV = index;int
replace;int
} case 1: {
program_exe +="[exe] Da lua chon sua HO VA TEN DEM\n";
string replace; flag = 0;int
cout <<"\t(?) Nhap vao Ho va ten dem cua sinh vien muon sua : ";
getline(cin, replace); chuan_hoa(replace);
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
p->sinh_vien->Ho_dem + +" -> " replace + +"\n"; break;
} } break; } case 2: {
program_exe +="[exe] Da lua chon sua TEN SINH VIEN\n";
string replace; count = 0;int
program_exe +="[exe] Da lua chon sua NGAY SINH\n"; Ngay_Sinh* new_date = newNgay_Sinh; do
{ break;
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">{ count = 0;int
flag = 0;int
// nhập vào mã số của sinh viên cần sửa
while true ( ) {
cout <<"\t(?) Nhap vao ma so sinh vien muon sua thanh: ";
cin >> replace;
(cin.fail() || replace <= 0 || cin.get() != if '\n') // cin.fail()trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n";
} else
{ break; } }
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(replace == p->sinh_vien->MSSV && replace != if
index) { count++; } } (count == 0)if
} } (flag == 1)if
{ break; } } else
}
cout <<"[V] Da thay doi ma so sinh vien cua sinh vien " <<
nts(old_MSSV) <<" -> "<< nts(replace) << " va cap nhat lai danh sach diem thi !\n";
break;
} else
{
cout <<"Dinh dang ngay thang nam sinh khong hop le ! Nhap lai : \n";
} } while true ( );
for (sv_node* p = ->head; p != sv NULL; p = p->next) {
} break; } case 4: {
program_exe +="[exe] Da lua chon sua MSSV \n"; cout <<"\n[?] Lua chon gioi tinh ban muon sua : \n"; se = Options(int "Nam" "Nu" "" "" "" "", , , , , ); for (sv_node* p = ->head; p != sv NULL; p = p->next) {
(index == p->sinh_vien->MSSV && se == 0)if
} } break; } case break 5: ; } }}
cout <<"\t(?) Nhap vao ma hoc phan muon sua : "; getline(cin, ma_hp);
UPPER(ma_hp);
for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(ma_hp if == p->hoc_phan->Ma_hp) {
flag = 1; break; } } (flag == 1)if
{ break; } else
TIN CHI" "QUAY LAI", , "", "");
program_exe +="[exe] Lua chon 1 thong tin ma ban muon sua .\n";
switch (se) { case 0: {
program_exe +="[exe] Lua chon sua MA HOC PHAN .\n"; string new_hp;
for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(new_hp if == p->hoc_phan->Ma_hp && new_hp !=
ma_hp) { flag = 1; break; } } (flag == 1)if
p->diem_thi->Ma_hp new_hp;=
} }
cout <<"[V] Da thay doi ma hoc phan "<< old_hp <<" -> "<<
new_hp <<" va cap nhat lai trong danh sach diem thi !\n"; break;
} case 1: {
program_exe +="[exe] Lua chon sua TEN HOC PHAN.\n"; string new_name;
cout <<"\t(?) Nhap vao ten hoc phan : "; getline(cin, new_name);
program_exe +="[exe] Nhap vao thanh cong ten hoc phan moi "+ new_name +".\n";
UPPER(new_name);
for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ma_hp) {
program_exe +="[exe] Thay doi ten hoc phan : " p-+
>hoc_phan->Ma_hp +" -> " new_name + +"\n"; p->hoc_phan->Ten_hp new_name;=
cout <<"[V] Da thay doi ten hoc phan : " p->hoc_phan-+
>Ma_hp +" -> " new_name + +"\n"; }
} break; } case 2: {
program_exe +="[exe] Lua chon sua SO TIN CHI.\n"; new_tc;int
// nhập vào mã số của sinh viên cần sửa
while true ( ) {
cout <<"\t(?) Nhap vao so tin chi muon sua : "; cin >> new_tc;
(cin.fail() || new_tc <= 0 || cin.get() != if '\n') // cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n"; }
else
{ break; } }
program_exe +="[exe] Nhap vao so tin chi moi thanh cong : "
+ nts(new_tc) +"\n"; flag = 0;int
for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ma_hp) {
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">} } while true ( );
program_exe +="[exe] Nhap vao thanh cong ma hoc phan moi " new_hp + +".\n";
program_exe +="[exe] Sua ma hoc phan .\n"; string old_hp = ma_hp;
for (hp_node* p = ->head; p != hp NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ma_hp) {
p->hoc_phan->Ma_hp new_hp;=
} }
program_exe +="[exe] Thay doi ma hoc phan " old_hp + +" ->"
program_exe +="[exe] Thay doi so tin chi cua hoc phan "
+ ma_hp +" tu "
nts(p->hoc_phan->So_tc) + +" -> " nts(new_tc) ++"\n";
cout <<"Da thay doi so tin chi cua hoc phan "<< ma_hp
<<" tu "
<< nts(p->hoc_phan->So_tc) <<" -> "<< nts(new_tc)
p->hoc_phan->So_tc = new_tc; break;
} } break; } case 3: {
program_exe +="[exe] Lua chon THOAT.\n"; break;
}}
// hàm sửa thông tin 1 học phầnvoid edit_dt(DT_List *&dt){
program_exe +="[->] Da di vao ham sua thong tin diem thi!\n"; // nhập vào mã số sinh viên và mã học phần
DT_List* replace = newDT_List; string ip_Ma_hp; ip_MSSV;int
float ip_diem;
cout <<"\nNhap vao ma hoc phan : "; getline(cin, ip_Ma_hp); UPPER(ip_Ma_hp);
for (dt_node* p = ->head; p != dt NULL; p = p->next) {
(ip_Ma_hp if == p->diem_thi->Ma_hp) {
replace->add_dt(p->diem_thi); }
}
cout <<"[->] Day la cac sinh vien co diem cua hoc phan nay : \n";
show_dt(replace); (replace->head == if NULL) {
cout <<"Khong co diem cua hoc phan nay cua sinh vien nao!\n";
} else
cout <<"\n"; do
{ flag = 0;int
// nhập vào mã số của sinh viên
while true ( ) {
cout <<"\t(?) Nhap vao ma so sinh vien muon sua diem: ";
{ break; } else
// sửa đổi nội dung
for (dt_node* p = ->head; p != dt NULL; p = p->next) {
(ip_Ma_hp if == >diem_thi->Ma_hp && ip_MSSV == >diem_thi->MSSV)
{
</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">cin.fail() trả về đúng về nhập sai kiểu dữ liệu
{
cin.clear(); // Xóa trạng thái lỗi của cin
cin.ignore(1000, '\n'); // Xóa bộ nhớ đệm của cin
cout <<"Vui long nhap mot so nguyen duong hop le.\n";
} else
{ break; } }
p->diem_thi->Diem_hp = ip_diem; break;
} }
program_exe +="[exe] Da sua doi diem cua sinh vien " +
nts(ip_MSSV) +" voi ma hoc phan " ip_Ma_hp + +" -> " +
convert_from_number_to_string(ip_diem, 2) +"\n"; cout <<"[V] Da sua doi diem cua sinh vien "<< nts(ip_MSSV)
<<" voi ma hoc phan "<< ip_Ma_hp
<<" -> "<< convert_from_number_to_string(ip_diem, 2)
<<"\n"; }}
program_exe +="[->] Di vao chuc nang TINH DIEM TICH LUY TRUNG BINH\n";
string data = ;""
cout <<"[->] Danh sach GPA cua toan bo sinh vien la :\n"; cout <<"\t+---+---+\n"; cout <<"\t| MA SO SINH VIEN | GPA |\n"; cout <<"\t+---+---+\n"; for (sv_node* p = sv_list->head; p != NULL; p = p->next) {
cout <<"\t+---+---+\n";
writeBinaryFile("GPA.bin", data);
cout <<"[!] Da luu GPA cua tat ca sinh vien vao file GPA.bin. \n";
program_exe +="[exe] Ket thuc chuc nang TINH DIEM TICH LUY TRUNG BINH va du lieu cua no :\n" data ;+
cin.ignore(); break;
program_exe +="[->] Di vao chuc nang TIM DIEM 1 HOC PHAN CUA TOAN BO SINH VIEN\n";
string ip, name; do
{ flag = 0;int
cout <<"\t(?) Nhap vao ma hoc phan can tra cuu diem : "; getline(cin, ip);
UPPER(ip);
for (hp_node* p = hp_list->head; p != NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ip) {
flag = 1; break; } } (flag = 0)if
{
cout <<"(*) Khong ton tai ma hoc phan nay ! Nhap lai : \n";
} else
{ break; } } while true ( );
{
cout <<"(!!) Ten cua hoc phan nay la : "<< name << endl; cout <<"[->] Day la danh sach diem cua cac sinh vien voi hocphan nay : \n";
cout <<"\t+---+---+---+\n"; cout <<"\t| Ma so sinh vien | Ho ten sinh vien | Diem |\n";
cout <<+---+\n";
for (dt_node* q = dt_list->head; q != NULL; q = q->next) {
(ip if == q->diem_thi->Ma_hp) {
cout << left;
cout <<"\t|"<< setw(21) << q->diem_thi->MSSV << "|"
<< setw(32) << find_name_sv(sv_list, q->diem_thi->MSSV) << "|"<< setw(10) << q->diem_thi->Diem_hp <<
"|\n"; } }
cout <<+---+\n";
program_exe +="[exe] Ket thuc chuc nang TIM DIEM 1 HOC PHAN CUA TOAN BO SINH VIEN\n";
cin.ignore(); }
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">for (hp_node* p = hp_list->head; p != NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ip) {
name p->hoc_phan->Ten_hp;=
flag = 1; } } (flag == 1)if
program_exe +="[->] Di vao chuc nang TIM SINH VIEN KHONG DAT 1 HOC PHAN\n";
string ip, name; do
{ flag = 0;int
cout <<"\t(?) Nhap vao ma hoc phan can tra cuu diem : ";
flag = 1; break; } } (flag = 0)if
{
cout <<"(*) Khong ton tai ma hoc phan nay ! Nhap lai : \n";
} else
{ break; } } while true ( ); UPPER(ip); flag = 0;int
for (hp_node* p = hp_list->head; p != NULL; p = p->next) {
(p->hoc_phan->Ma_hp if == ip) {
name p->hoc_phan->Ten_hp;=
flag = 1; } }
(flag == 1)if
{
cout <<"(!!) Ten cua hoc phan nay la : "<< name <<
endl;
cout <<"[->] Day la danh sach diem cua cac sinh vien khong dat hocphan nay : \n";
cout <<+---+---+\n";
cout <<"\t| Ma so sinh vien | Ho ten sinh vien | Diem |\n";
cout <<+---+---+\n";
for (dt_node* q = dt_list->head; q != NULL; q = >next)
{
(ip if == >Ma_hp && >Diem_hp < 4)
{ cout << left;
cout <<"\t|"<< setw(21) << q->diem_thi->MSSV
<<"|"<< setw(32) << find_name_sv(sv_list, q->diem_thi->MSSV) << "|"<< setw(10) << q->diem_thi->Diem_hp
<<"|\n"; } }
cout <<+---+---+\n";
program_exe +="[exe] Ket thuc chuc nang TIM SINH VIEN KHONG DAT 1 HOC PHAN \n";
cin.ignore(); } else
{
cout <<"(*) Hoc phan nay khong ton tai trong danh sachhoc phan !\n";
cin.ignore(); } break;