#include
#include
#include
#define LEN sizeof(struct scorenode)
#define DEBUG
#include
struct scorenode
{int number;/*學(xué)號(hào)*/
char name[10];/*姓名*/
float xiaofei;/*消費(fèi)情況*/
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k為全局變量,本程序中的函數(shù)均可以使用它*/
/*===========================================*/
score *creat2311(void)
/*函數(shù)creat2311,功能:創(chuàng)建鏈表,此函數(shù)帶回一個(gè)指向鏈表頭的指針*/
{
score*head;
score *p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; /*開辟一個(gè)新單元*/
printf("請(qǐng)輸入學(xué)生資料,輸0退出!\n");
repeat1: printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
scanf("%d",&p1->number);
while(p1->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&p1->number);}
/*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/
if(p1->number==0)
goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表*/
else
{
p3=head;
if(n>0)
{for(i=0;i {if(p1->number!=p3->number)
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat1;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",&p1->name);/*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");/*輸入消費(fèi)情況;
head=NULL;
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN);
printf("請(qǐng)輸入學(xué)生資料,輸0退出!\n");
repeat2:printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");
scanf("%d",&p1->number);/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
while(p1->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&p1->number);}
/*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/
if(p1->number==0)
goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表*/
else
{
p3=head;
if(n>0)
{for(i=0;i {if(p1->number!=p3->number)
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat2;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",&p1->name);/*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");
scanf("%f",&p1->xiaofei);/*輸入消費(fèi)情況;
}
end: p1=head;
p3=p1;
for(i=1;i {
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/
/*交換前后結(jié)點(diǎn)中的消費(fèi)情況,使之與學(xué)號(hào)相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
p2->next=NULL;/*鏈表結(jié)尾*/
printf("輸入的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=====================================*/
/*=====================================*/
score *load2311(score *head)
/*函數(shù)load2311,功能:從文件讀入學(xué)生記錄*/
{ score *p1,*p2;
int m=0;
char filepn[10];
FILE *fp;
printf("請(qǐng)輸入文件路徑及文件名:");
scanf("%s",filepn);/*輸入文件路徑及名稱*/
if((fp=fopen(filepn,"r+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}
{
p1=(score *)malloc(LEN); /*開辟一個(gè)新單元*/
fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件讀入與顯示*/
head=NULL;
do
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN); /*開辟一個(gè)新單元*/
fscanf(fp,"%d%s%f%f%f\n",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件讀入與顯示*/
}while(!feof(fp));
p2->next=p1;
p1->next=NULL;
n=n+1;
}printf("-----------------------------------------\n");/*表格下線*/
fclose(fp);/*結(jié)束讀入,關(guān)閉文件*/
return (head);
}
/*=====================================*/
/*=====================================*/
score *add2311(score *head,score *stu)
/*函數(shù)add2311,功能:追加學(xué)生資料,并且將所有學(xué)生資料按學(xué)號(hào)排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*開辟一個(gè)新單元*/
printf("\n輸入要增加的學(xué)生的資料!");
repeat4: printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");
scanf("%d",&stu->number);
/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
while(stu->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&stu->number);}/*輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/
/******************************************************/
if(stu->number==0)
goto end2;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/
else
{
p3=head;
if(n>0)
{for(i=0;i {if(stu->number!=p3->number)
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat4;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
/********************************/
printf("輸入學(xué)生姓名:");
scanf("%s",stu->name); /*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");
scanf("%f",&stu->xiaofei); /*輸入消費(fèi)情況,成績(jī)應(yīng)在0-100*/
p1=head;
p0=stu;
if(head==NULL)
{head=p0;p0->next=NULL;}/*當(dāng)原來(lái)鏈表為空時(shí),從首結(jié)點(diǎn)開始存放資料*/
else/*原來(lái)鏈表不為空*/
{
if(p1->next==NULL)/*找到原來(lái)鏈表的末尾*/
{
p1->next=p0;
p0->next=NULL;/*將它與新開單元相連接*/
}
else
{
while(p1->next!=NULL)/*還沒(méi)找到末尾,繼續(xù)找*/
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
p1=head;
p0=stu;
for(i=1;i {
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/
/*交換前后結(jié)點(diǎn)中的消費(fèi)情況,使之與學(xué)號(hào)相匹配*/
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
} end2:
printf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=========================================*/
/*=======================================*/
score *search2311(score *head)
/*函數(shù)search2311,功能:查詢學(xué)生消費(fèi)情況*/
{int number;
score *p1,*p2;
printf("輸入要查詢的學(xué)生的學(xué)號(hào),");
scanf("%d",&number);
while(number!=0)
{
if(head==NULL)
{printf("\n沒(méi)有任何學(xué)生資料!\n");return(head);}
printf("-----------------------------------------\n");
printf("|學(xué)號(hào)\t|姓名\t|消費(fèi)情況\t \n");
printf("-----------------------------------------\n");/*打印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
printf("-----------------------------------------\n");}/*打印表格域*/
else
printf("%d不存在此學(xué)生!\n",number);
printf("輸入要查詢的學(xué)生的學(xué)號(hào),");
scanf("%d",&number);
}
printf("已經(jīng)退出了!\n");
return(head);}
/*=====================================================*/
/*=====================================================*/
score *del2311(score *head)/*函數(shù)del2311,功能:刪除學(xué)生資料*/
{
score *p1,*p2;
int number;
printf("輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào)(輸入0時(shí)退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*輸入學(xué)號(hào)為0時(shí)退出*/
{
if(head==NULL)
{
printf("\n沒(méi)有任何學(xué)生資料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/
{
p2=p1;p1=p1->next;
} /*p1后移一個(gè)結(jié)點(diǎn)*/
if(number==p1->number)
/*找到了*/
{
if(p1==head)
head=p1->next;
/*若p1指向的是首結(jié)點(diǎn),把地二個(gè)結(jié)點(diǎn)地址賦予head*/
else
p2->next=p1->next;
/*否則將下一個(gè)結(jié)點(diǎn)地址 賦給前一結(jié)點(diǎn)地址*/
printf("刪除:%d\n",number);n=n-1;
}
else
printf("%d不存在此學(xué)生!\n",number);
/*找不到該結(jié)點(diǎn)*/
printf("輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):");
scanf("%d",&number);
getchar();
}
#ifdef DEBUG
printf("已經(jīng)退出了!\n");
#endif
printf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=============================================*/
/*==============================================*/
void print2311(score *head)
/*函數(shù)print2311,功能:顯示學(xué)生成績(jī)*/
{
score *p;
if(head==NULL)
{printf("\n沒(méi)有任何學(xué)生資料!\n");}
else
{printf("%d\n",n);
printf("-----------------------------------------\n");
printf("|學(xué)號(hào)\t|姓名\t|消費(fèi)情況\t |\n");
printf("-----------------------------------------\n");/*打印表格域*/
p=head;
do
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);
printf("-----------------------------------------\n");/*打印表格域*/
p=p->next;}while (p!=NULL);/*打印完成了*/
}
}
save2311(score *p1)
/*函數(shù)save2311,功能:保存學(xué)生的資料*/
{
FILE *fp;
char filepn[20];/*用來(lái)存放文件保存路徑以及文件名*/
printf("請(qǐng)輸入文件路徑及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}
main() /*主函數(shù)main,功能:通過(guò)調(diào)用creat,search,del,add,print,ststistics,save,taxis等函數(shù),實(shí)現(xiàn)學(xué)生消費(fèi)情況查詢系統(tǒng)功能*/
{score *head=0,*stu=0;
while(1)
{k=menu2311(k);
switch(k)/*用switch語(yǔ)句實(shí)現(xiàn)功能選擇*/
{case 1: head=creat2311();break;/*調(diào)用創(chuàng)建鏈表函數(shù)*/
case 2: head=load2311(head);break;/*從文件調(diào)入記錄函數(shù)*/
case 3: head=search2311(head);break;/*調(diào)用成績(jī)查詢函數(shù)*/
case 4: head=del2311(head); break;/*調(diào)用刪除學(xué)生資料函數(shù)*/
case 5: head=add2311(head,stu);break;/*調(diào)用追加學(xué)生資料函數(shù)*/
case 6: print2311(head); break;/*調(diào)用顯示學(xué)生資料函數(shù)*/
case 7: statistics2311(head); break;/*調(diào)用統(tǒng)計(jì)函數(shù)*/
case 8: save2311(head);break;/*調(diào)用保存函數(shù)*/
case 9: taxis2311(head);break;/*調(diào)用排序函數(shù)*/
case 0: exit(0);/*退出系統(tǒng),返回主界面*/
default: printf("輸入錯(cuò)誤,請(qǐng)重試!\n"); }
}
}
#include
#include
#define LEN sizeof(struct scorenode)
#define DEBUG
#include
struct scorenode
{int number;/*學(xué)號(hào)*/
char name[10];/*姓名*/
float xiaofei;/*消費(fèi)情況*/
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k為全局變量,本程序中的函數(shù)均可以使用它*/
/*===========================================*/
score *creat2311(void)
/*函數(shù)creat2311,功能:創(chuàng)建鏈表,此函數(shù)帶回一個(gè)指向鏈表頭的指針*/
{
score*head;
score *p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; /*開辟一個(gè)新單元*/
printf("請(qǐng)輸入學(xué)生資料,輸0退出!\n");
repeat1: printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
scanf("%d",&p1->number);
while(p1->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&p1->number);}
/*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/
if(p1->number==0)
goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表*/
else
{
p3=head;
if(n>0)
{for(i=0;i
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat1;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",&p1->name);/*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");/*輸入消費(fèi)情況;
head=NULL;
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN);
printf("請(qǐng)輸入學(xué)生資料,輸0退出!\n");
repeat2:printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");
scanf("%d",&p1->number);/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
while(p1->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&p1->number);}
/*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/
if(p1->number==0)
goto end;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表*/
else
{
p3=head;
if(n>0)
{for(i=0;i
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat2;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
printf("請(qǐng)輸入學(xué)生姓名:");
scanf("%s",&p1->name);/*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");
scanf("%f",&p1->xiaofei);/*輸入消費(fèi)情況;
}
end: p1=head;
p3=p1;
for(i=1;i
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/
/*交換前后結(jié)點(diǎn)中的消費(fèi)情況,使之與學(xué)號(hào)相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
p2->next=NULL;/*鏈表結(jié)尾*/
printf("輸入的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=====================================*/
/*=====================================*/
score *load2311(score *head)
/*函數(shù)load2311,功能:從文件讀入學(xué)生記錄*/
{ score *p1,*p2;
int m=0;
char filepn[10];
FILE *fp;
printf("請(qǐng)輸入文件路徑及文件名:");
scanf("%s",filepn);/*輸入文件路徑及名稱*/
if((fp=fopen(filepn,"r+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}
{
p1=(score *)malloc(LEN); /*開辟一個(gè)新單元*/
fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件讀入與顯示*/
head=NULL;
do
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN); /*開辟一個(gè)新單元*/
fscanf(fp,"%d%s%f%f%f\n",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件讀入與顯示*/
}while(!feof(fp));
p2->next=p1;
p1->next=NULL;
n=n+1;
}printf("-----------------------------------------\n");/*表格下線*/
fclose(fp);/*結(jié)束讀入,關(guān)閉文件*/
return (head);
}
/*=====================================*/
/*=====================================*/
score *add2311(score *head,score *stu)
/*函數(shù)add2311,功能:追加學(xué)生資料,并且將所有學(xué)生資料按學(xué)號(hào)排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*開辟一個(gè)新單元*/
printf("\n輸入要增加的學(xué)生的資料!");
repeat4: printf("請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):");
scanf("%d",&stu->number);
/*輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于0*/
while(stu->number<0)
{getchar();
printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");
scanf("%d",&stu->number);}/*輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/
/******************************************************/
if(stu->number==0)
goto end2;/*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/
else
{
p3=head;
if(n>0)
{for(i=0;i
p3=p3->next;
else
{printf("學(xué)號(hào)重復(fù),請(qǐng)重輸!\n");
goto repeat4;
/*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/
}
}
}
}
/********************************/
printf("輸入學(xué)生姓名:");
scanf("%s",stu->name); /*輸入學(xué)生姓名*/
printf("請(qǐng)輸入消費(fèi)情況:");
scanf("%f",&stu->xiaofei); /*輸入消費(fèi)情況,成績(jī)應(yīng)在0-100*/
p1=head;
p0=stu;
if(head==NULL)
{head=p0;p0->next=NULL;}/*當(dāng)原來(lái)鏈表為空時(shí),從首結(jié)點(diǎn)開始存放資料*/
else/*原來(lái)鏈表不為空*/
{
if(p1->next==NULL)/*找到原來(lái)鏈表的末尾*/
{
p1->next=p0;
p0->next=NULL;/*將它與新開單元相連接*/
}
else
{
while(p1->next!=NULL)/*還沒(méi)找到末尾,繼續(xù)找*/
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
p1=head;
p0=stu;
for(i=1;i
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/
/*交換前后結(jié)點(diǎn)中的消費(fèi)情況,使之與學(xué)號(hào)相匹配*/
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
} end2:
printf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=========================================*/
/*=======================================*/
score *search2311(score *head)
/*函數(shù)search2311,功能:查詢學(xué)生消費(fèi)情況*/
{int number;
score *p1,*p2;
printf("輸入要查詢的學(xué)生的學(xué)號(hào),");
scanf("%d",&number);
while(number!=0)
{
if(head==NULL)
{printf("\n沒(méi)有任何學(xué)生資料!\n");return(head);}
printf("-----------------------------------------\n");
printf("|學(xué)號(hào)\t|姓名\t|消費(fèi)情況\t \n");
printf("-----------------------------------------\n");/*打印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
printf("-----------------------------------------\n");}/*打印表格域*/
else
printf("%d不存在此學(xué)生!\n",number);
printf("輸入要查詢的學(xué)生的學(xué)號(hào),");
scanf("%d",&number);
}
printf("已經(jīng)退出了!\n");
return(head);}
/*=====================================================*/
/*=====================================================*/
score *del2311(score *head)/*函數(shù)del2311,功能:刪除學(xué)生資料*/
{
score *p1,*p2;
int number;
printf("輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào)(輸入0時(shí)退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*輸入學(xué)號(hào)為0時(shí)退出*/
{
if(head==NULL)
{
printf("\n沒(méi)有任何學(xué)生資料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/
{
p2=p1;p1=p1->next;
} /*p1后移一個(gè)結(jié)點(diǎn)*/
if(number==p1->number)
/*找到了*/
{
if(p1==head)
head=p1->next;
/*若p1指向的是首結(jié)點(diǎn),把地二個(gè)結(jié)點(diǎn)地址賦予head*/
else
p2->next=p1->next;
/*否則將下一個(gè)結(jié)點(diǎn)地址 賦給前一結(jié)點(diǎn)地址*/
printf("刪除:%d\n",number);n=n-1;
}
else
printf("%d不存在此學(xué)生!\n",number);
/*找不到該結(jié)點(diǎn)*/
printf("輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):");
scanf("%d",&number);
getchar();
}
#ifdef DEBUG
printf("已經(jīng)退出了!\n");
#endif
printf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!\n",n);
return(head);
}
/*=============================================*/
/*==============================================*/
void print2311(score *head)
/*函數(shù)print2311,功能:顯示學(xué)生成績(jī)*/
{
score *p;
if(head==NULL)
{printf("\n沒(méi)有任何學(xué)生資料!\n");}
else
{printf("%d\n",n);
printf("-----------------------------------------\n");
printf("|學(xué)號(hào)\t|姓名\t|消費(fèi)情況\t |\n");
printf("-----------------------------------------\n");/*打印表格域*/
p=head;
do
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);
printf("-----------------------------------------\n");/*打印表格域*/
p=p->next;}while (p!=NULL);/*打印完成了*/
}
}
save2311(score *p1)
/*函數(shù)save2311,功能:保存學(xué)生的資料*/
{
FILE *fp;
char filepn[20];/*用來(lái)存放文件保存路徑以及文件名*/
printf("請(qǐng)輸入文件路徑及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}
main() /*主函數(shù)main,功能:通過(guò)調(diào)用creat,search,del,add,print,ststistics,save,taxis等函數(shù),實(shí)現(xiàn)學(xué)生消費(fèi)情況查詢系統(tǒng)功能*/
{score *head=0,*stu=0;
while(1)
{k=menu2311(k);
switch(k)/*用switch語(yǔ)句實(shí)現(xiàn)功能選擇*/
{case 1: head=creat2311();break;/*調(diào)用創(chuàng)建鏈表函數(shù)*/
case 2: head=load2311(head);break;/*從文件調(diào)入記錄函數(shù)*/
case 3: head=search2311(head);break;/*調(diào)用成績(jī)查詢函數(shù)*/
case 4: head=del2311(head); break;/*調(diào)用刪除學(xué)生資料函數(shù)*/
case 5: head=add2311(head,stu);break;/*調(diào)用追加學(xué)生資料函數(shù)*/
case 6: print2311(head); break;/*調(diào)用顯示學(xué)生資料函數(shù)*/
case 7: statistics2311(head); break;/*調(diào)用統(tǒng)計(jì)函數(shù)*/
case 8: save2311(head);break;/*調(diào)用保存函數(shù)*/
case 9: taxis2311(head);break;/*調(diào)用排序函數(shù)*/
case 0: exit(0);/*退出系統(tǒng),返回主界面*/
default: printf("輸入錯(cuò)誤,請(qǐng)重試!\n"); }
}
}