#包含?“stdlib.h”?
#包含?“string.h”?
int?shoud save = 0;?/*?*/?
struct?學生?
{?
char()?num[10];/*?學號?*/?
char()?名稱[20];?
char()?性[4];?
int?cgrade?
int?mgrade?
int?egrade?
int?totle?
int?ave?
夏爾?near time[10];/*?最後壹次更新是什麽時候?*/?
};?
typedef?struct?節點?
{?
struct?學生?數據;?
struct?節點?*下壹個;?
}節點,*鏈接;?
作廢?menu()?
{?
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);?
Printf("\t1註冊學生數據\ t \ t \ t \ t2刪除學生數據\ n ");?
printf(" \ t 3查詢學生信息\ t \ t \ t \修改學生信息\ n ");?
Printf("\t5保存學生信息\ t \ t \ t \ t退出系統\ n ");?
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");?
}?
作廢?printstart()?
{?
printf("-\ n ");?
}?
作廢?不對()?
{?
printf(" \ n = = = = = & gt;提示:輸入錯誤!\ n ");?
}?
作廢?Nofind()?
{?
printf(" \ n = = = = = & gt;提示:找不到學生!\ n ");?
}?
作廢?printc()?/*?這個功能是用來輸出中文的?*/?
{?
printf("?學號\t?名字?性別?英語成績?數學成績?c語言成績?總分?平均分\ n”);?
}?
作廢?printe(節點?*p)/*?這個功能是用來輸出英文的?*/?
{?
printf(" %-12s % s \ t % s \ t % d \ t % d \ t % d \ t?%d\t?%d\n ",p-& gt;data.num,p-& gt;data.name,p-& gt;data.sex,p-& gt;data.egrade,p-& gt;data.mgrade,p-& gt;data.cgrade,p-& gt;data.totle,p-& gt;data . ave);?
}?
節點*?定位(鏈接?我,夏爾?findmess[],char?nameornum[])?/*?這個函數用來定位鏈表中符合條件的聯系人並返回指針?*/?
{?
節點?* r;?
if(strcmp(nameornum," num")==0)?/*?按學號查詢?*/?
{?
r = l-& gt;接下來;?
while(r!=NULL)?
{?
if(strcmp(r-& gt;data.num,findmess)==0)?
回歸?r;?
r = r-& gt;接下來;?
}?
}?
不然呢?if(strcmp(nameornum," name")==0)?/*?按姓名查詢?*/?
{?
r = l-& gt;接下來;?
while(r!=NULL)?
{?
if(strcmp(r-& gt;data.name,findmess)==0)?
回歸?r;?
r = r-& gt;接下來;?
}?
}?
回歸?0;?
}?
作廢?添加(鏈接?l)?/*?增加學生?*/?
{?
節點?*p,*r,* s;?
夏爾?num[10];?
r = l;?
s = l-& gt;接下來;?
while(r-& gt;下壹個!=NULL)?
r = r-& gt;接下來;?/*?把指針放在最後?*/?
而(1)?
{?
Printf("請輸入妳的學號(用' 0 ':)返回上壹個菜單);?
scanf("%s ",數字);?
if(strcmp(num," 0")==0)?
打破;?
while(s)?
{?
if(strcmp(s-& gt;data.num,num)==0)?
{?
printf(" = = = = = = & gt;提示:學號為“%s”的學生已經存在。請選擇' 4?修改!\n ",編號);?
printstart();?
printc();?
印刷品;?
printstart();?
printf(" \ n ");?
返回;?
}?
s = s-& gt;接下來;?
}?
p=(節點?*)malloc(sizeof(Node));?
strcpy(p-& gt;data.num,num);?
Printf("請輸入您的姓名:");?
scanf("%s ",p-& gt;data . name);?
getchar()();?
Printf("請輸入您的性別:");?
scanf("%s ",p-& gt;data . sex);?
getchar()();?
Printf("請輸入妳的C語言成績:");?
scanf("%d ",& ampp->;data . cgrade);?
getchar()();?
Printf("請輸入妳的數學成績:");?
scanf("%d ",& ampp->;data . m grade);?
getchar();?
Printf("請輸入妳的英語成績:");?
scanf("%d ",& ampp->;data . e grade);?
getchar();?
p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;?
p->;data . ave = p-& gt;data.totle?/?3;?
/*?信息輸入完成了嗎?*/?
p->;next = NULL?
r-& gt;next = p;?
r = p;?
shoudsave = 1;?
}?
}?
作廢?Qur(鏈接?l)?/*?打聽學生?*/?
{?
int?sel?
夏爾?find mess[20];?
節點?* p;?
如果(!l-& gt;下壹個)?
{?
printf(" \ n = = = = = & gt;提示:沒有可查詢的信息!\ n ");?
返回;?
}?
printf(" \ n = = = = = & gt;1按學號搜索\ n = = = = > 2按姓名搜索\ n ");?
scanf("%d ",& ampsel);?
if(sel==1)/*?學號?*/?
{?
Printf("請輸入要查找的學號:");?
scanf("%s ",find mess);?
p=Locate(l,findmess," num ");?
如果(p)?
{?
printf(" \ t \ t \ t \ t \ t findings \ n ");?
printstart();?
printc();?
printe(p);?
printstart();?
}?
不然呢?
nofind();?
}?
不然呢?if(sel==2)?/*?名字?*/?
{?
Printf("請輸入要查找的名稱:");?
scanf("%s ",find mess);?
p=Locate(l,findmess," name ");?
如果(p)?
{?
printf(" \ t \ t \ t \ t \ t findings \ n ");?
printstart();?
printc();?
printe(p);?
printstart();?
}?
不然呢?
nofind();?
}?
不然呢?
錯誤();?
}?
作廢?Del(鏈接?l)?/*?刪除?*/?
{?
int?sel?
節點?*p,* r;?
夏爾?find mess[20];?
如果(!l-& gt;下壹個)?
{?
printf(" \ n = = = = = & gt;提示:沒有數據可以刪除!\ n ");?
返回;?
}?
printf(" \ n = = = = = & gt;1按學號刪除\ n = = = = > 2按姓名刪除\ n ");?
scanf("%d ",& ampsel);?
if(sel==1)?
{?
Printf("請輸入要刪除的學號:");?
scanf("%s ",find mess);?
p=Locate(l,findmess," num ");?
如果(p)?
{?
r = l;?
while(r->;下壹個!=p)?
r = r-& gt;接下來;?
r-& gt;next = p-& gt;接下來;?
免費(p);?
printf(" \ n = = = = = & gt;提示:該學生已被成功刪除!\ n ");?
shoudsave = 1;?
}?
不然呢?
nofind();?
}?
不然呢?if(sel==2)?
{?
Printf("請輸入要刪除的名稱:");?
scanf("%s ",find mess);?
p=Locate(l,findmess," name ");?
如果(p)?
{?
r = l;?
while(r->;下壹個!=p)?
r = r-& gt;接下來;?
r-& gt;next = p-& gt;接下來;?
免費(p);?
printf(" \ n = = = = = & gt;提示:該學生已被成功刪除!\ n ");?
shoudsave = 1;?
}?
不然呢?
nofind();?
}?
不然呢?
錯誤();?
}?
作廢?修改(鏈接?l)?
{?
節點?* p;?
夏爾?find mess[20];?
如果(!l-& gt;下壹個)?
{?
printf(" \ n = = = = = & gt;提示:沒有數據可以修改!\ n ");?
返回;?
}?
Printf("請輸入要修改的學號:");?
scanf("%s ",find mess);?
p=Locate(l,findmess," num ");?
如果(p)?
{?
Printf("請輸入您的新學號(原來是%s):",p-& gt;data . num);?
scanf("%s ",p-& gt;data . num);?
Printf("請輸入您的新名字(原來是%s):",p-& gt;data . name);?
scanf("%s ",p-& gt;data . name);?
getchar();?
Printf("請輸入您的新性別(原來是%s):",p-& gt;data . sex);?
scanf("%s ",p-& gt;data . sex);?
Printf("請輸入您新的C語言分數(原來是%d):",p-& gt;data . cgrade);?
scanf("%d ",& ampp->;data . cgrade);?
getchar();?
Printf("請輸入您的新數學分數(原來是%d):",p-& gt;data . m grade);?
scanf("%d ",& ampp->;data . m grade);?
getchar();?
Printf("請輸入您的新英語成績(原來是%d):",p-& gt;data . e grade);?
scanf("%d ",& ampp->;data . e grade);?
p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;?
p->;data . ave = p-& gt;data.totle/3;?
printf(" \ n = = = = = & gt;提示:數據已修改成功!\ n ");?
shoudsave = 1;?
}?
不然呢?
nofind();?
}?
作廢?Disp(鏈接?l)?
{?
int?count = 0;?
節點?* p;?
p = l-& gt;接下來;?
如果(!p)?
{?
printf(" \ n = = = = = & gt;提示:沒有數據可顯示!\ n ");?
返回;?
}?
printf(" \ t \ t \ t \ t顯示結果\ n ");?
printstart();?
printc();?
printf(" \ n ");?
while(p)?
{?
printe(p);?
p = p-& gt;接下來;?
}?
printstart();?
printf(" \ n ");?
}?
作廢?同濟(鏈接?l)?
{?
節點?*pm、*pe、*pc、*pt、* pa?/*?用來指向得分最高的聯系人?*/?
節點?* r = l-& gt;接下來;?
如果(!r)?
{?
printf(" \ n = = = = = & gt;提示:沒有數據可以統計!\ n ");?
回歸?;?
}?
pm = PE = PC = pt = pa = r;?
while(r!=NULL)?
{?
if(r-& gt;data . c grade & gt;= PC->;data.cgrade)?
PC = r;?
if(r-& gt;data . m grade & gt;= pm->;data.mgrade)?
pm = r;?
if(r-& gt;data . e grade & gt;= PE-& gt;data.egrade)?
PE = r;?
if(r-& gt;data.totle & gt= pt-& gt;data.totle)?
pt = r;?
if(r-& gt;data.ave & gt= pa->;data.ave)?
pa = r;?
r = r-& gt;接下來;?
}?
Printf (" -統計結果。?
Printf("最高總分:\t%s?%d點\n ",pt-& gt;data.name,pt-& gt;data . totle);?
Printf("最高平均分:\t%s?%d分數\n ",pa-& gt;data.name,pa-& gt;data . ave);?
Printf("英語最高:\t%s?%d分數\n ",PE-& gt;data.name,PE-& gt;data . e grade);?
Printf("數學最高:\t%s?%d點\n ",pm-& gt;data.name,pm-& gt;data . m grade);?
Printf("最高C語言:\t%s?%d點\n ",PC-& gt;data.name,PC-& gt;data . cgrade);?
printstart();?
}?
作廢?排序(鏈接?l)?
{?
鏈接?ll;?
節點?*p,*rr,* s;?
ll =(Link)malloc(sizeof(Node));?/*?用來制作新的鏈接表?*/?
ll-& gt;next = NULL?
如果(l-& gt;next==NULL)?
{?
printf(" \ n = = = = = & gt;提示:沒有可排序的數據!\ n ");?
回歸?;?
}?
p = l-& gt;接下來;?
while(p)?
{?
s =(Node *)malloc(sizeof(Node));?/*?新聯系人是用來保存信息的?*/?
s-& gt;data = p-& gt;數據;?
s-& gt;next = NULL?
rr = ll?
while(RR->;下壹個!=NULL?& amp& amp?RR-& gt;下壹個-& gt;data.totle & gt= p->;data.totle)?
RR = RR-& gt;接下來;?
if(RR-& gt;next==NULL)?
RR-& gt;next = s;?
不然呢?
{?
s-& gt;next = RR-& gt;接下來;?
RR-& gt;next = s;?
}?
p = p-& gt;接下來;?
}?
免費(l);?
l-& gt;next = ll-& gt;接下來;?
printf(" \ n = = = = = & gt;提示:排序已完成!\ n ");?
}?
作廢?保存(鏈接?l)?
{?
文件*?FP;?
節點?* p;?
int?flag=1,count = 0;?
fp=fopen("c:\\student "," WB ");?
if(fp==NULL)?
{?
printf(" \ n = = = = = & gt;提示:重新打開文件時出錯!\ n ");?
退出(1);?
}?
p = l-& gt;接下來;?
while(p)?
{?
if(fwrite(p,sizeof(Node),1,fp)==1)?
{?
p = p-& gt;接下來;?
count++;?
}?
不然呢?
{?
flag = 0;?
打破;?
}?
}?
if(flag)?
{?
printf(" \ n = = = = = & gt;提示:文件保存成功。(%d條記錄已被保存。)\n”,計數);?
shoud save = 0;?
}?
fclose(FP);?
}?
作廢?main()?
{?
鏈接?l;/*?甚至桌子?*/?
文件?* fp?/*?文件指針?*/?
int?sel?
夏爾?ch;?
夏爾?簡;?
int?count = 0;?
節點?*p,* r;?
printf(" \ t \ t \ t \ t \ t學生成績管理系統\ n \ t \ t -黃歡(第32期)\ n ");?
l=(Node*)malloc(sizeof(Node))。?
l-& gt;next = NULL?
r = l;?
fp=fopen("C:\\student "," Rb ");?
if(fp==NULL)?
{?
printf(" \ n = = = = = & gt;提示:文件尚不存在。您想創建它嗎?(是/否)\ n ");?
scanf("%c ",& amp簡);?
if(jian=='y'||jian=='Y ')?
fp=fopen("C:\\student "," WB ");?
不然呢?
退出(0);?
}?
printf(" \ n = = = = = & gt;提示:文件已經打開,正在導入記錄......\ n ");?
而(!feof(fp))?
{?
p=(節點*)malloc(sizeof(節點));?
if(fread(p,sizeof(Node),1,fp))?/*?將文檔內容放入連接器?*/?
{?
p->;next = NULL?
r-& gt;next = p;?
r = p;?/*?將此聯系人掛在連接中?*/?
count++;?
}?
}?
fclose(FP);?/*?關閉文件?*/?
printf(" \ n = = = = = & gt;提示:導入記錄後,* * *導入了%d條記錄。\n ",計數);?
而(1)?
{?
menu();?
Printf("請選擇壹個操作:");?
scanf("%d ",& ampsel);?
if(sel==0)?
{?
if(shoudsave==1)?
{?getchar();?
printf(" \ n = = = = = & gt;提示:數據已被更改。是否要保存對文件的更改(y/n)?\ n ");?
scanf("%c ",& ampch);?
if(ch=='y'||ch=='Y ')?
保存(l);?
}?
printf(" \ n = = = = = & gt;提示:您已經退出系統。再見!\ n ");?
打破;?
}?
開關(sel)?
{?
案子?1:Add(l);打破;?/*?增加學生?*/?
案子?2:Del(l);打破;/*?刪除學生?*/?
案子?3:古蘭經(左);打破;/*?打聽學生?*/?
案子?4:修改(l);打破;/*?修改學生?*/?
案子?5:保存(l);打破;/*?救學生?*/?
案子?9: printf ("\ t \ t \ t = = = = = =幫助信息= = = = = = = = ");打破;?
默認:?錯誤();getchar();打破;?
}?
}?
}?
/*?*/