em có 1 bài dslk thuận về quản lí sinh viên. em đang vướng 1 chỗ đó là ở hàm hienThi1SinhVien ở mục 7 em muốn in ra cái số thứ tự của sinh viên đó, số thứ tự em dùng trong hàm inDanhSach ở mục 2 thì có cách nào in ra đc stt của sinh viên đó ạ, các bác giúp em với ạ.
em gửi đề và code ạ
Viết chương trình tạo ra một danh sách liên kết thuận để quản lý danh sách sinh viên.
Cấu trúc sách gồm các thành phần: mã sv, tên sv, tuổi, que quán, diemTB. Chương trình được tổ chức thành các chương trình con sau:
- Tạo danh sách sách
- Hiển thị danh sách ra màn hình theo dạng
- Sắp xếp sách giảm dần theo ma SV
- Xóa một sv nào đó với tên sv nhập vào từ bàn phím
- Thêm một sv vào sau một sv
- Sửa thông tin một sinh vien nhập từ bàn phím
- Hiển thị thông tin một sinh viên (tên được nhâp từ bàn phim)
- Hiển thị các sinh viên có điểm TB>= 1 điểm nhập từ bàn phím
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char maSV[10];
char ho_ten[15];
int tuoi;
char que_quan[15];
float diemTB;
}thongtin;
typedef struct node
{
thongtin data;
struct node *next;
}Node;
Node *first = NULL;
Node *last = NULL;
thongtin nhapThongTin()
{
thongtin tt;
printf("Nhap ma sinh vien: ");
fflush(stdin);
gets(tt.maSV);
printf("Nhap ho ten sinh vien: ");
fflush(stdin);
gets(tt.ho_ten);
printf("Nhap tuoi: ");
scanf("%d", &tt.tuoi);
printf("Nhap que quan: ");
fflush(stdin);
gets(tt.que_quan);
printf("Nhap diem trung binh: ");
scanf("%f",&tt.diemTB);
return tt;
}
Node *taoVaCapPhatNode()
{
Node *p = (Node*)malloc(sizeof(Node));
if(p==NULL)
{
printf("Cap phat that bai");
return NULL;
}
p->data = nhapThongTin();
p->next = NULL;
return p;
}
void chenNode(Node *p)
{
if(first == NULL)
{
first = p;
last = p;
}
else
{
last->next = p;
last = p;
}
return p;
}
Node *timNode()
{
char hoTenCanTim[15];
fflush(stdin);
gets(hoTenCanTim);
for(Node *p = first; p!=NULL; p=p->next)
{
if(strcmp(hoTenCanTim,p->data.ho_ten)==0)
return p;
}
printf("Khong tim thay sinh vien theo yeu cau!\n");
return NULL;
}
void xoaToanBoDanhSachCu()
{
if(first = NULL)
{
return;
}
for(Node* k=first;k!=NULL;k=k->next)
{
Node* p = first;
first = p->next;
free(p);
}
last=NULL;
}
void taoDanhSach()
{
int i=1;
while(1)
{
printf("\t\tNHAP THONG TIN SINH VIEN THU %d\n",i);
i++;
Node *p = taoVaCapPhatNode();
chenNode(p);
printf("\tBan co muon nhap tiep khong ?\n");
printf("\tYES(Y)\t NO(N)\n");
printf("Moi ban chon: ");
fflush(stdin);
char cs = getchar();
if(cs == 'N' || cs == 'n')
break;
printf("\n");
}
}
void sapXepSinhVienTheoDiem()
{
for(Node *i = first; i->next!=NULL; i=i->next)
{
for(Node *j = i->next; j!=NULL; j=j->next)
{
if(j->data.diemTB > i->data.diemTB)
{
thongtin tmp;
tmp=j->data;
j->data = i->data;
i->data = tmp;
}
}
}
printf("Da sap xep thanh cong!\n");
return;
}
void inDanhSach()
{
int stt=1;
Node *p = first;
printf("\tDANH SACH SINH VIEN\n");
printf("%5s%10s%25s%10s%15s%10s\n","STT","Ma SV","Ho ten","Tuoi","Que Quan" ,"Diem TB");
while(p!= NULL)
{
printf("%5d%10s%25s%10d%15s%8.2f\n",stt,p->data.maSV,p->data.ho_ten,p->data.tuoi,p->data.que_quan,p->data.diemTB);
stt++;
p=p->next;
}
}
void xoa1SinhVien()
{
printf("Nhap ten sinh vien can xoa: ");
Node* p = timNode();
if(p==NULL)
return;
if(p==first)
{
first = p->next;
free(p);
return;
}
if(p==last)
{
Node* k = first;
while(k->next!=last)
{
k=k->next;
}
free(last);
last = k;
k->next = NULL;
return;
}
Node *k = first;
while(k->next !=p)
{
k=k->next;
}
k->next = p->next;
free(p);
printf("\n\tDa xoa thanh cong !!");
}
void themMotSV()
{
printf("Ban muon them sinh vien dang sau sinh vien nao?\n ");
printf("Moi nhap ten sinh vien: ");
Node *p = timNode();
if(p == NULL)
{
return;
}
printf("Nhap thong tin sinh vien muon them: \n");
Node *k = taoVaCapPhatNode();
if(k== last)
{
last->next = k;
last =k;
}
else
{
k->next = p->next;
p->next = k;
}
printf("Da them sinh vien thanh cong !!\n");
}
void suaThongTinSV()
{
printf("Nhap ho ten SV can sua: ");
Node *p = timNode();
if(p== NULL)
return;
p->data = nhapThongTin();
printf("\n");
printf("Sua thong tin thanh cong!!\n");
}
void inSinhVienTheoDiem()
{
float diem;
printf("Moi nhap diem muon tim kiem: ");
scanf("%f",&diem);
printf("\tDANH SACH SINH VIEN\n");
printf("%5s%10s%25s%10s%15s%10s\n","STT","Ma SV","Ho ten","Tuoi","Que Quan" ,"Diem TB");
int stt=1;
for(Node* p = first;p!=NULL;p=p->next)
{
if(p->data.diemTB >= diem)
{
printf("%5d%10s%25s%10d%15s%8.2f\n",stt,p->data.maSV,p->data.ho_ten,p->data.tuoi,p->data.que_quan,p->data.diemTB);
stt++;
}
}
}
void hienThi1SinhVien()
{
Node *p = timNode();
if(p == NULL)
{
return;
}
printf("%5s%10s%25s%10s%15s%10s\n","STT","Ma SV","Ho ten","Tuoi","Que Quan" ,"Diem TB");
printf("\n");
// printf("%5d%10s%25s%10d%15s%8.2f\n",,p->data.maSV,p->data.ho_ten,p->data.tuoi,p->data.que_quan,p->data.diemTB);
}
void menu()
{
printf("\t\tMENU\n");
printf("\t1) Tao danh sach\n");
printf("\t2) Hien thi danh sach\n");
printf("\t3) Sap xep danh sach giam dan theo diem TB\n");
printf("\t4) Xoa sinh vien\n");
printf("\t5) Them sinh vien\n");
printf("\t6) Sua thong tin sinh vien\n");
printf("\t7) Hien thi thong tin mot sinh vien\n");
printf("\t8) Hien thi cac sinh vien co diem TB lon hon so nhap tu ban phim\n");
printf("\t0) Ket thuc\n");
}
int main()
{
while(1)
{
menu();
int choose;
printf("Moi ban chon: ");
scanf("%d",&choose);
switch(choose)
{
case 1:
xoaToanBoDanhSachCu();
taoDanhSach();
printf("Bam phim bat ki de tro ve menu: ");
getchar();
break;
case 2:
inDanhSach();
printf("\nBam phim bat ki de tro lai menu:");
getchar();
break;
case 3:
printf("Ban da chon sap xep diem giam dan!\n ");
sapXepSinhVienTheoDiem();
printf("\nBam phim bat ki de tro lai menu: ");
getchar();
break;
case 4:
printf("Ban da chon xoa 1 sinh vien!\n");
xoa1SinhVien();
printf("\nBam phim bat ki de tro lai menu: ");
getchar();
break;
case 5:
printf("Ban da chon them 1 sinh vien1!\n");
themMotSV();
printf("\nBam phim bat ki de tro lai menu: ");
getchar();
break;
case 6:
printf("Ban da chon sua sinh vien!\n");
suaThongTinSV();
printf("\nBam phim bat ki de tro lai menu: ");
getchar();
break;
case 8:
printf("Ban da chon in sinh vien co diem lon hon so nhap tu ban phim!\n");
inSinhVienTheoDiem();
printf("\nBam phim bat ki de tro lai menu: ");
getchar();
break;
case 0:
printf("Bye!");
return;
default:
printf("\n\tBan chi duoc chon tu 0 -> 8");
printf("\n\tBam phim bat ki de tro lai menu:");
break;
}
getchar();
system("cls");
}
}