Code:
#include<conio.h>
#include<stdio.h>
#include<alloc.h>
#include<string.h>
typedef struct DMon1{
char MaMon1[10];
char TenMon1[20];
int SoTiet1;
};
typedef struct DMon2{
char MaMon2[10];
char TenMon2[20];
int SoTiet2;
};
typedef struct DMon3{
char MaMon3[10];
char TenMon3[20];
int SoTiet3;
};
typedef struct SinhVien{
char MSSV[20];
char HoTen[50];
DMon1 *dm1;
DMon2 *dm2;
DMon3 *dm3;
};
typedef struct Node{
SinhVien info;
Node*Next;
};
typedef Node*Nodeptr;
void MakeNull(Nodeptr &First){
First=NULL;
}
int Empty(Nodeptr First){
return First==NULL;
}
Nodeptr Getnode(){
Nodeptr p;
p=(Node*)malloc(sizeof(Node));
return p;
}
void Del_Node(Nodeptr p){
free(p);
}
Nodeptr First_Node(Nodeptr First){
return First;
}
void Insert(Nodeptr &First,Nodeptr q){
Nodeptr p=First_Node(First);
while(p!=NULL){
p=p->Next;
}
p->Next=q;
q->Next=NULL;
}
SinhVien Init_SinhVien(){
SinhVien *SV=(SinhVien*)malloc(sizeof(SinhVien));
printf("\n");
printf("MSSV: ");
flushall();
gets(SV->MSSV);
printf("Ho Ten: ");
gets(SV->HoTen);
printf("\n\nDanh muc mon 1: ");
printf("\n\tMa Mon 1:");flushall();
gets(SV->dm1->MaMon1);
printf("\tTen Mon 1:");
gets(SV->dm1->TenMon1);
printf("\tSo Tiet 1:");
scanf("%d",SV->dm1->SoTiet1);
printf("\n\nDanh muc mon 2: ");
printf("\n\tMa Mon 2:");flushall();
gets(SV->dm2->MaMon2);
printf("\tTen Mon 2:");
gets(SV->dm2->TenMon2);
printf("\tSo Tiet 2:");
scanf("%d",SV->dm2->SoTiet2);
printf("\n\nDanh muc mon 3: ");
printf("\n\tMa Mon 3:");flushall();
gets(SV->dm3->MaMon3);
printf("\tTen Mon 3:");
gets(SV->dm3->TenMon3);
printf("\tSo Tiet 3:");
scanf("%d",SV->dm3->SoTiet3);
return (*SV);
}
Nodeptr Init_Node(SinhVien sv){
Nodeptr p;
p=Getnode();
p->info=sv;
p->Next=p;
return p;
}
void Push(Nodeptr *First){
Nodeptr p=First_Node(*First);
p=Init_Node(Init_SinhVien());
Insert(*First,p);
}
void Print_SinhVien(SinhVien *SV){
printf("-----------------");
printf("MSSV: %s\n",SV->MSSV);
printf("Ho ten sinh vien: %s\n",SV->HoTen);
printf("Mon 1");
printf("\n\tMa mon 1: %s",SV->dm1->MaMon1);
printf("\n\tTen mon 1: %s",SV->dm1->TenMon1);
printf("\n\tSo tiet 1: %d",SV->dm1->SoTiet1);
printf("Mon 2");
printf("\n\tMa mon 2: %s",SV->dm2->MaMon2);
printf("\n\tTen mon 2: %s",SV->dm2->TenMon2);
printf("\n\tSo tiet 2: %d",SV->dm2->SoTiet2);
printf("Mon 3");
printf("\n\tMa mon 3: %s",SV->dm3->MaMon3);
printf("\n\tTen mon 3: %s",SV->dm3->TenMon3);
printf("\n\tSo tiet 3: %d",SV->dm3->SoTiet3);
}
void Print_Node(Nodeptr First){
Nodeptr p;
p=First_Node(First);
while(p!=NULL){
Print_SinhVien(&(p->info));
p=p->Next;
}
};
void Search(Nodeptr First){
Nodeptr p;
char *mssv;
p=First;
printf("Nhap MSSV:"); flushall();
gets(mssv);
while(p!=NULL){
if(strcmp(p->info.MSSV,"mssv")==0)
Print_SinhVien(&(p->info));
else
p=p->Next;
}
}
void SapXep(Nodeptr First){
Nodeptr i,j,temp;
i=First_Node(First);
j=i->Next;
while(i!=NULL){
while(j!=NULL){
if(i->info.MSSV>j->info.MSSV){
temp=i;
i=j;
j=temp;
}
j=j->Next;
}
i-i->Next;
}
}
void main(){
clrscr();
Nodeptr First;
int n;
MakeNull(First);
:shock: :shock: :shock: :shock: printf("Nhap vao so sinh vien: ");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("Nhap sinh vien thu %d",i+1);
Push(&First);
}
Search(First);
printf("Sap xep theo thu tu tang dan");
SapXep(First);
Print_Node(First);
getch();
}