YÊU CẦU:
Tổ chức danh sách liên kết đơn để người dùng lưu trữ danh sách lớp gồm nhiều sinh viên. Mỗi sinh viên sẽ được lưu thông tin: MSSV (gồm chuỗi không quá 9 kí tự), họ và tên sinh viên, ngày sinh, địa chỉ. Sau đó thực hiện các yêu cầu sau:
1. Nhập danh sách sinh viên vào từ bàn phím (quá trình nhập kết thúc khi người dùng nhập số 0);
2. Xuất ra màn hình thông tin của các sinh viên vừa nhập vào;
3. Nhập vào MSSV bất kì, hãy xuất hết thông tin của sinh viên trong danh sách có MSSV đó, nếu không có MSSV cần tìm trong danh sách thì thông báo "Không tìm thấy";
4. Nhập vào họ tên sinh viên bất kì, hãy xóa tất cả những sinh viên có họ tên đó (như giá trị họ tên nhận vào) ra khỏi danh sách lớp.
Code cài đặt :
#includeDownload code tại đây
#include
#include
using namespace std;
struct sinhvien
{
char *hoten = new char[256];
char *mssv = new char [10]; // 9 ki tu + ki tu /0
int namsinh;
char *diachi = new char[10] ;
};
struct node
{
sinhvien data;
struct node *pNext;
};
typedef struct node NODE;
struct list
{
NODE *pHead;
NODE *pTail;
};
typedef struct list LIST;
void creatLIST(LIST &l);
NODE *creatNODE(sinhvien sv);
void addHead(list &l, NODE *p);
void addTail(list &l, NODE *p);
void nhap_thong_tin_sinh_vien(sinhvien &sv);
void xuat_thong_tin_sinh_vien(sinhvien sv);
NODE *searchINFO(LIST l, char *MSSV);
void nhap_danh_sach(LIST &l);
void xuat_danh_sach(LIST l);
int main()
{
int chucnang=-1;
LIST danhsach1;
creatLIST(danhsach1);
do
{
cout<>chucnang;
system("cls"); // xoa man hinh
switch(chucnang)
{
case(1):
{
nhap_danh_sach(danhsach1); break;
}
case(2):
{
xuat_danh_sach(danhsach1); break;
}
case(3):
{
char *maso = new char[10];
cout<<"Nhap mssv can tim :";
cin.ignore(); // xoa vung dem
cin.getline(maso,10);
NODE *k = searchINFO(danhsach1,maso);
sinhvien a = k->data;
xuat_thong_tin_sinh_vien(a);
}
}
}
while(chucnang!=0);
return 0;
}
void creatLIST(LIST &l)
{
l.pHead = NULL;
l.pTail = NULL;
}
NODE *creatNODE(sinhvien sv)
{
NODE *p = new NODE;
p->data = sv;
p->pNext = NULL;
}
void nhap_thong_tin_sinh_vien(sinhvien &sv)
{
cout<<"Nhap ten sinh vien : ";
cin.getline(sv.hoten,256);
cout<<"Nhap MSSV : ";
fflush(stdin);
cin.getline(sv.mssv,10);
cout<<"Nhap nam sinh : ";
cin>>sv.namsinh;
fflush(stdin);
cout<<"Nhap dia chi : ";
cin.getline(sv.diachi,256);
}
void xuat_thong_tin_sinh_vien(sinhvien sv)
{
cout<>kt;
system("cls");
cin.ignore();
switch(kt)
{
case(1):
{
cout<<"=============================Nhap data cho NODE sv============================ \n";
// tao 1 sinh vien & nhap thong tin cho sinh vien
sinhvien a;
nhap_thong_tin_sinh_vien(a);
NODE *p = creatNODE(a); // them sinhvien a vao NODE p
addTail(l,p); // them NODE p vao danh sach
cout<<"Da them thanh cong ! "<pNext)
{
xuat_thong_tin_sinh_vien(i->data);
cout<pNext = l.pHead; // do chen vao dau LIST, nen con tro pNext cua p se tro vao NODE dau tien
l.pHead = p; // cap nhat lai NODE dau tien chinh la p
}
}
void addTail(LIST &l, NODE *p)
{
if(l.pHead == NULL) // neu NODE dau tien bang NULL, co nghia la LIST chua co NODE nao het
{
l.pHead = l.pTail = p; // thi NODE cuoi cung la NODE cuoi va bang p ( NODE dau = NODE cuoi = p )
}
else // nguoc lai, neu lIST da co NODE
{
l.pTail->pNext = p;
l.pTail = p;
}
}
NODE *searchINFO(LIST l, char* MSSV)
{
for(NODE *i = l.pHead; i->pNext != NULL; i = i->pNext)
{
int kt = stricmp(i->data.mssv,MSSV);
if(kt == 0)
{
return i;
}
}
return NULL;
}