Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

Quản lý sinh viên của mô ̣t trường đại học dùng danh sách liên kết đơn.

Mỗi sinh
viên có nhiều thông tin cần quản lý, tuy nhiên, trong bài tập này, để cho đơn giản
ta chỉ quản lý các thông tin sau: Mã sinh viên, họ tên, giới tính, ngày tháng năm
sinh, địa chỉ, lớp và khoa. Viết chương trình cài đặt thực hiện các yêu cầu sau:
1. Khai báo cấu trúc dữ liệu cho bài toán.
2. Nhập vào Danh sách sinh viên ListSV, và in ra Danh sách sinh viên được
sắp xếp tăng dần theo mã sinh viên. Hãy viết hàm thêm một sinh viên mới
vào danh sách ListSV đã sắp xếp và SV được sắp xếp theo đúng thứ tự ở
DS mới.
3. In ra các sinh viên có cùng ngày sinh, nếu không tìm thấy sinh viên có cùng
ngày sinh thì in thông báo “không tìm thấy sinh viên cùng ngày sinh”
4. Loại bỏ các sinh viên có cùng ngày sinh ra khỏi danh sách ListSV

Bài làm
#include <iostream>

using namespace std;

struct Ngay{
int ngay, thang , nam;
};
struct SinhVien{
char maSV[10];
char hoTen[50];
int gioiTinh;
Ngay ngaySinh;
char diaChi[100];
char lop[12];
char khoa[7];
};
struct Node{
SinhVien* data;
Node *next;
};
struct List{
Node *phead,*ptail;

1
};
void nhapNgaySinh(Ngay &ns){
cout<<"****NHAP NGAY THANG NAM SINH***"<<endl;
cout<<"nhap ngay sinh:"<<endl;
cin>>ns.ngay;
cout<<"nhap thang sinh:"<<endl;
cin>>ns.thang;
cout<<"nhap nam sinh:"<<endl;
cin>>ns.nam;
cout<<"******************************"<<endl;
}
void inNgaySinh(Ngay ns){
cout<<"NS: "<<ns.ngay<<"/"<<ns.thang<<"/"<<ns.nam<<endl;
}
void nhapthongtinSV(SinhVien *sv){
cout<<"hay nhap ten sv:"<<endl;
fflush(stdin);
cin.getline(sv->hoTen,50);
cout<<"hay nhap mssv:"<<endl;
fflush(stdin);
cin.getline(sv->maSV,10);
cout<<"nhap dia chi:"<<endl;
fflush(stdin);
cin.getline(sv->diaChi,100);
cout<<"nhap lop:"<<endl;
fflush(stdin);
cin.getline(sv->lop,12);
cout<<"nhap khoa:"<<endl;
fflush(stdin);
cin.getline(sv->khoa,7);
nhapNgaySinh(sv->ngaySinh);
cout<<"nhap gioi tinh:"<<endl;
cin>>sv->gioiTinh;
fflush(stdin);
}
void inthongtinSV(SinhVien *sv){
cout<<"Ho ten: " <<sv->hoTen<<"\t "<<"MSSV: "<<sv->maSV<<endl;

2
inNgaySinh(sv->ngaySinh);
cout<<"lop: "<<sv->lop << " khoa: "<<sv->khoa<<endl;
cout<<"----------------------------------------------------"<<endl;
}
void initList(List *list){
list->phead = NULL;
list->ptail = NULL;
}
Node* creatNode(SinhVien *sv){

Node *node;
node = new Node;
node->data = sv;
node->next = NULL;
return node;
}
void addHead(List *list,Node *node){
if(list->phead == NULL){
node->next = list->phead;
list->phead = node;
list->ptail = node;
}
else{
node->next = list->phead;
list->phead = node;
}

}
void addTail(List *list,Node *node){
if (list->phead == NULL){
addHead(list,node);
}
else{
Node *p;
p = new Node;
p = list->phead;
while(p->next != NULL){

3
p = p->next;
}
p->next = node;
node->next = NULL;
list->ptail = node;
}
}
void nhapSVList(List *ds,SinhVien *sv){
Node *newnode;
newnode = new Node;
newnode = creatNode(sv);
addTail(ds,newnode);
}
void nhapDanhSach(List *ds){
while(true){
SinhVien *sv;
sv = new SinhVien;
nhapthongtinSV(sv);
nhapSVList(ds,sv);
cout<<"Thanh Cong, nhap tiep hay khong? y/n ";
if(getchar()=='n'){
break;
}
}
}
void inDanhSach(List *ds){
Node *p;
p = new Node;
p = ds->phead;
while(p !=NULL){
inthongtinSV(p->data);
p = p->next;
}

}
void swap(Node *a,Node *b)
{

4
SinhVien *temp;
temp = new SinhVien;
temp = a->data;
a->data = b->data;
b->data = temp;
}
void sortList(List *ds){
Node *p;
p = new Node;
p = ds->phead;
Node *q;
q = new Node;
while(p->next != NULL){
q = p;
while(q->next != NULL){
if(stoi(p->data->maSV)>stoi(q->data->maSV)){
swap(p,q);
}
q = q->next;
}
p = p->next;
}
}
int checkCungNgaySinh(Ngay ns1, Ngay ns2){
if((ns1.nam == ns2.nam) && (ns1.ngay == ns2.ngay) && (ns1.thang ==
ns2.thang)){
return 1;
}
return 0;
}
void inCungNgaysinh(List *ds,SinhVien *sv){
int flag = 1;
Node *p;
p = new Node;
p = ds->phead;
while (p->next !=NULL){
if(checkCungNgaySinh(sv->ngaySinh,p->data->ngaySinh)){

5
if(sv->maSV != p->data->maSV){
inthongtinSV(p->data);
flag = 0;
}
}
p = p->next;
}
if (flag) {
cout<<"khong co sinh vien cung ngay sinh"<<endl;
}
}
void xoaCungNgaySinh(List *ds){
Node *p;
Node *q;
p = new Node;
q = new Node;
p = ds->phead;
while( p->next != NULL){
q = p;
while(q->next != NULL){
if(checkCungNgaySinh(q->next->data->ngaySinh,p->data-
>ngaySinh)){
Node *temp;
temp = new Node;
temp = q->next;
q->next = temp->next;
delete temp;
}
else{
q = q->next;
}

}
p = p->next;
}
}

6
int main(){

cout<<"================================================"
<<endl;

cout<<"================================================"
<<endl;
List *danhsach;
danhsach = new List;
initList(danhsach);
nhapDanhSach(danhsach);
inDanhSach(danhsach);
cout<<"******************************"<<endl;
sortList(danhsach);
inDanhSach(danhsach);
cout<<"******************************"<<endl;
xoaCungNgaySinh(danhsach);
inDanhSach(danhsach);

You might also like