N/x: Dài................................
code
#include<stdio.h>
#include<stdlib.h>
FILE *in,*out;
typedef struct student_data
{
/* data */
int id;
char ten [50];
int lop;
} student_data;
typedef struct student_element
{
student_data data;
struct student_element *next;
} student;
student *root=NULL;
student *cur=NULL;
student *prev=NULL;
student* sap_xep(student *root)
{
student *i,*j,*temp,*swap=NULL;
int min;
for(i=root;i!=NULL;i=i->next)
{
min=i->data.id;
temp=i;
for(j=i->next;j!=NULL;j=j->next)
{
if(j->data.id<min)
{
min=j->data.id;
temp=j;
}
}
swap=(student*)malloc(sizeof(struct student_element));
if(swap==NULL)
{
printf("Khong cap phat duoc SWAP\n");
exit(3);
}
swap->data=i->data;
i->data=temp->data;
temp->data=swap->data;
free(swap);
}
return(root);
}
student* nhap(student *root,student *cur,FILE *in)
{
int dk=0;
student *tmp;
if ((in=fopen("input.txt","r+"))==NULL)
{
printf("Doc file loi\n");
exit(2);
}
do
{
if((tmp=(student*)malloc(sizeof( struct student_element)))==NULL)
{
printf("khong cap phat duoc bo nho\n");
exit(1);
}
tmp->next=NULL;
if((fscanf(in,"%d--%[^-]--%d",&tmp->data.id,&tmp->data.ten,&tmp->data.lop))!=EOF)
{
if(root==NULL)
{
root=tmp;
cur=tmp;
}
else
{
cur->next=tmp;
cur=tmp;
}
dk=1;
}
else dk=0;
}while(dk);
free(tmp);
sap_xep(root);
fclose(in);
return(root);
}
int hien_list(student *root)
{
student *i;
int dem=0;
for(i=root;i!=NULL;i=i->next)
{
printf("%d--%s--%d\n",i->data.id,i->data.ten,i->data.lop);
dem++;
}
printf("So phan tu:%d\n",dem);
return(0);
}
int phan_tu(student *root,student *cur)
{
int dem=0,vitri;
printf("Nhap vi tri:");
scanf("%d",&vitri);
for(cur=root;dem<vitri-1;cur=cur->next)
{
dem++;
if(cur->next==NULL)
{
printf("Khong co vi tri do");
return(0);
}
}
printf("%d>>%s>>%d\n",cur->data.id,cur->data.ten,cur->data.lop);
return(0);
}
student* del(student *root)
{
student *prev,*tmp;
int dem=0,vitri;
printf("Nhap vi tri");
scanf("%d",&vitri);
if(vitri==1)
{
tmp=root;
root=root->next;
free(tmp);
}
else
{
for(prev=root;dem<vitri-2;prev=prev->next)
{
dem++;
if((prev->next->next==NULL)||(prev->next==NULL))
{
printf("Khong co vi tri do");
return(0);
}
}
tmp=prev->next;
prev->next=(prev->next)->next;
free(tmp);
}
return(root);
}
student* insert(student *root)
{
student *add;
student *cur;
if((add=(student*)malloc(sizeof( struct student_element)))==NULL)
{
printf("khong cap phat duoc bo nho\n");
exit(1);
}
add->next=NULL;
printf("Nhap du lieu :%%d--%%s--%%d:");
scanf("%d%*c%s%*c%d",&add->data.id,&add->data.ten,&add->data.lop);
if(add->data.id<=root->data.id)
{
add->next=root;
root=add;
}
else
{
cur=root;
while(add->data.id>cur->data.id&&cur->next->next!=NULL)
{
cur=cur->next;
}
add->next=cur->next;
cur->next=add;
}
return(root);
}
student* search(student*root)
{
student *cur;
int a;
printf("Nhap id can tim:");
scanf("%d",&a);
for(cur=root;cur!=NULL;cur=cur->next)
if(a==cur->data.id)
{
printf("%d--%s--%d",cur->data.id,cur->data.ten,cur->data.lop);
return (cur);
}
}
student* free_list(student *root)
{
student *cur=root;
while(cur!=NULL)
{
root=root->next;
free(cur);
cur=root;
}
return(root);
}
int save(student*root,FILE *out)
{
student *cur;
out=fopen("output.txt","w+");
for(cur=root;cur!=NULL;cur=cur->next)
{
fprintf(out, "%d--%s--%d\n",cur->data.id,cur->data.ten,cur->data.lop);
}
fclose(out);
return (0);
}
int main()
{
int d=1,chon;
root=nhap(root,cur,in);
do
{
printf("\n\n******************************\n");
printf("CHUONG TRINH QUAN LI SV\n");
printf("1. Hien thi danh sach\n");
printf("2. Xem sv thu ??\n");
printf("3. Tin sv theo id\n");
printf("4. Xoa sv thu ??\n");
printf("5. Them sv \n");
printf("6. Xoa toan bo danh sach\n");
printf("7. Luu\n");
printf("8. Sap xep\n");
printf("9. Thoat\n");
printf("\n\n******************************\n");
printf("Nhap lua chon:");
scanf("%d%*c",&chon);
switch(chon)
{
case 1: hien_list(root); break;
case 2: phan_tu(root,cur); break;
case 3: search(root); break;
case 4: root=del(root); break;
case 5: root=insert(root); break;
case 6: root=free_list(root); break;
case 7: save(root,out); break;
case 8: sap_xep(root); break;
case 9: d=0; break;
}
}while(d);
return(0);
}