# include & ltstdlib.h & gt
# include & ltconio.h & gt
# include & ltdos.h & gt
# include & ltstring.h & gt
#定義?萊恩。sizeof(struct?學生)
#定義?格式?“%-8d %-15s %-12.1lf %-12.1lf %-12.12.1lf %-12。1lf \ n“
#定義?數據?斯圖【我】。數字,斯圖【我】。姓名,斯圖【我】。elec,斯圖【I】。expe,stu【I】熱區,斯圖【我】。總和
結構?Student/*定義學生成績的結構*/
{?int?num/*學生ID */
夏爾。名稱【15】;/*姓名*/
雙份?elec/*選修課*/
雙份?expe/*實驗班*/
雙份?熱區;/*必修課*/
雙份?總和;/*總分*/
};
結構?學生?stu【50】;/*定義結構數組*/
虛空?in();/*輸入學生成績信息*/
虛空?show();/*顯示學生信息*/
虛空?order();/*按總分排序*/
虛空?del();/*刪除學生成績信息*/
虛空?modify();/*修改學生成績信息*/
虛空?menu();/*主菜單*/
虛空?insert();/*插入學生信息*/
虛空?total();/*計算總人數*/
虛空?search();/*查找學生信息*/
虛空?main()/*主函數*/
{?int?n;
menu();
scanf(“% d“,& ampn);/*輸入所選功能的編號*/
當
{?開關(n)
{?案子?1:?in();打破;
案子?2:?search();打破;
案子?3:?del();打破;
案子?4:?modify();打破;
案子?5:?insert();打破;
案子?6:?order();打破;
案子?7:?total();打破;
?案子?8:?show();打破;
默認值:break
}
getch();
menu();/*執行該功能後再次顯示菜單界面*/
scanf(“% d“,& ampn);
}
}
虛空?in()/*輸入學生信息*/
{?int?I,m = 0;/*m是記錄的數量*/
夏爾。ch【2】;
文件?* fp/*定義文件指針*/
if((FP = fopen(“data。txt““,“a+““)= null)/*打開指定的文件*/
{?
printf(“可以嗎?不是嗎?open \ n“);
返回;
}
而(!feof(FP))
{
if(fread(& amp;斯圖【m】?,LEN,1,FP)= = 1)
m++;/*計算當前記錄的數量*/
}
fclose(FP);
如果(m==0)
printf(“沒有?記錄!\ n ");
其他
{
系統(“cls”);
show();/*調用show函數顯示原始信息*/
}
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{
printf(“可以嗎?不是嗎?open \ n“);
返回;
}
for(I = 0;我& ltm;i++)
fwrite(& amp;斯圖【我】?,LEN,1,FP);/*將信息寫入指定的磁盤文件*/
printf(“拜托?輸入(是/否):“;
scanf(“% s“,ch);
while(strcmp(ch,“y“)= = 0 | | strcmp(ch,“y“)= = 0)/*判斷是否輸入新信息*/
{
printf(“number:“);
scanf(“% d“,& amp斯圖【m】。num);/*輸入學生ID */
for(I = 0;我& ltm;i++)
if(stu【I】。num = =斯圖【m】。num)
{
printf(“the?號碼?是嗎?現有的,按?有嗎?去哪?繼續!”);
getch();
fclose(FP);
返回;
}
printf(“name:“);
?scanf(“% s“,stu【m】。姓名);/*輸入學生姓名*/
printf(“elective:“);
scanf(“% lf“,& amp斯圖【m】。elec);/*輸入選修課的分數*/
printf(“實驗:“);
?scanf(“% lf“,& amp斯圖【m】。expe);/*輸入實驗課的結果*/
printf(“必需?課程:“);
?scanf(“% lf“,& amp斯圖【m】。熱區);/*輸入必修課程分數*/
斯圖【m】。sum = stu【m】。電子+學生【m】。expe+stu。熱區;/*計算總分*/
if(fwrite(& amp;斯圖【m】,LEN,1,fp)!= 1)/*將新輸入的信息寫入指定的磁盤文件*/
{
?printf(“可以嗎?不是嗎?救人啊!”);
?getch();
?}
其他
?{
?printf(“% s?得救了!\n“,斯圖【m】。姓名);
?m++;
?}
printf(“繼續嗎?(是/否):);/*詢問是否繼續*/
scanf(“% s“,ch);
}
fclose(FP);
printf(“好!\ n ");
}
虛空?顯示()
{?文件?* fp
int?I,m = 0;
FP = fopen(“data . txt“,“Rb“);
而(!feof(FP))
{
if(fread(& amp;斯圖【m】?,LEN,1,FP)= 1)?
m++;
}
fclose(FP);
printf(“number name?electiveexperimentrequiredsum \ t \ n“);
for(I = 0;我& ltm;i++)
{?
?printf(格式,數據);/*以指定格式打印信息*/
}
}
虛空?menu()/*自定義函數實現菜單功能*/
{
系統(“cls”);
printf(“\ n \ n \ n \ n“);
printf(“\ t \ t |-STUDENT-| \ n“);
printf(“\ t \ t | \ t?0.?退出| \ n“);
printf(“\ t \ t | \ t?1.?輸入?記錄| \ n“);
printf(“\ t \ t | \ t?2.?搜索?記錄?| \ n“);
printf(“\ t \ t | \ t?3.?刪除?記錄?| \ n“);
printf(“\ t \ t | \ t?4.?修改?記錄?| \ n“);
printf(“\ t \ t | \ t?5.?插入?記錄?| \ n“);
printf(“\ t \ t | \ t?6.?訂單?| \ n“);
printf(“\ t \ t | \ t?7.?number | \ n“);
printf(“\ t \ t | \ t?8.?顯示| \ n“);
printf(“\ t \ t |-| \ n \ n“);
printf(“\ t \ t \ t choose(0-8):“);
}
虛空?order()/*自定義排序函數*/
{?文件?* fp
結構?學生?t;
int?i=0,j=0,m = 0;
if((FP = fopen(“data . txt“,“r+“)= = NULL)
{?
printf(“可以嗎?不是嗎?打開!\ n ");
返回;
}
而(!feof(FP))?
if(fread(& amp;斯圖【m】?,LEN,1,FP)= 1)?
m++;
fclose(FP);
if(m = = 0)?
{
printf(“沒有?記錄!\ n ");
返回;
}
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{
printf(“可以嗎?不是嗎?open \ n“);
返回;}
for(I = 0;我& ltm-1;i++)
for(j = I+1;j & ltm;j++)/*雙循環成就比較和交換*/
if(stu【I】。sum<斯圖【j】。總和)
{?t = stu【I】;斯圖【I】=斯圖【j】;stu【j】= t;}
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
for(I = 0;我& ltm;i++)/*將重新排列的內容重寫到指定的磁盤文件中*/
if(fwrite(& amp;斯圖【我】?,LEN,1,fp)!=1)
{?
printf(“% s?可以嗎?不是嗎?保存!\ n ");?
getch();
}
fclose(FP);
printf(“保存?成功地\ n“);
}
虛空?del()/*自定義刪除函數*/
{文件?* fp
int?snum,I,j,m = 0;
夏爾。ch【2】;
if((FP = fopen(“data . txt“,“r+“)= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
而(!feof(FP))if(fread(& amp;stu【m】,LEN,1,FP)= = 1)?m++;
fclose(FP);
if(m = = 0)?
{
printf(“沒有?記錄!\ n ");
返回;
}
printf(“拜托?輸入?那個?編號:“);
scanf(“% d“,& ampsnum);
for(I = 0;我& ltm;i++)
if(snum = = stu【I】。num)
?打破;
printf(“find?那個?學生,刪除?(是/否“);
scanf(“% s“,ch);
if(strcmp(ch,“y“)= = 0 | | strcmp(ch,“y“)= = 0)/*判斷是否刪除*/
for(j = I;j & ltm;j++)
stu【j】= stu【j+1】;/*將最後壹條記錄移動到前壹條記錄的位置*/
m-;/*記錄總數減去1*/
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
for(j = 0;j & ltm;j++)/*將更改的記錄重寫到指定的磁盤文件*/
if(fwrite(& amp;斯圖【j】?,LEN,1,fp)!=1)
{?printf(“可以嗎?不是嗎?保存!\ n ");
getch();}
fclose(FP);
printf(“刪除?成功了!\ n ");
}
虛空?search()/*自定義查找函數*/
{?文件?* fp
int?snum,I,m = 0;
夏爾。ch【2】;
if((FP = fopen(“data . txt“,“Rb“))= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
而(!feof(FP))if(fread(& amp;stu【m】,LEN,1,FP)= = 1)?m++;
fclose(FP);
if(m = = 0)?{ printf(“no?記錄!\ n ");返回;}
printf(“拜托?輸入?那個?編號:“);
scanf(“% d“,& ampsnum);
for(I = 0;我& ltm;i++)
if(snum = = stu【I】。num)/*查找輸入的學生編號是否在記錄中*/
{?printf(“find?那個?學生,表演?(是/否“);
scanf(“% s“,ch);
if(strcmp(ch,“Y“)= = 0 | | strcmp(ch,“Y“)= = 0)?
{
printf(“number name?electiveexperimentrequiredsum \ t \ n“);
printf(格式,數據);/*以指定格式輸出找到的結果*/
打破;
}
}?
if(I = = m)?printf(“可以嗎?不是嗎?找到嗎?那個?學生!\ n ");/*未找到任何信息*/
}
虛空?modify()/*用戶定義的修改函數*/
{?文件?* fp
int?I,j,m=0,snum
if((FP = fopen(“data . txt“,“r+“)= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
而(!feof(FP))
if(fread(& amp;stu【m】,LEN,1,FP)= = 1)?m++;
if(m = = 0)?{ printf(“no?記錄!\ n ");
fclose(FP);
返回;
}
show();
printf(“拜托?輸入?那個?號碼?的?那個?學生?哪個?做什麽?妳呢。想要嗎?去哪?修改!\ n ");
printf(“修改?編號:“);
scanf(“% d“,& ampsnum);
for(I = 0;我& ltm;i++)
if(snum = = stu【I】。num)/*檢索記錄中是否有需要修改的信息*/
打破;
printf(“find?那個?學生!妳呢。可以嗎?修改!\ n ");
?
printf(“name:“);
scanf(“% s“,stu【I】。姓名);/*輸入姓名*/
printf(“elective:“);
scanf(“% lf“,& amp斯圖【我】。elec);/*輸入選修課的分數*/
printf(“實驗:“);
scanf(“% lf“,& amp斯圖【我】。expe);/*輸入實驗課的結果*/
printf(“必需?課程:“);
scanf(“% lf“,& amp斯圖【我】。熱區);/*輸入必修課程分數*/
printf(“修改?成功了!”);
斯圖【我】。sum = stu【I】。elec+stu【I】expe+stu【I】。熱區;
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
for(j = 0;j & ltm;j++)/*將新修改的信息寫入指定的磁盤文件*/
if(fwrite(& amp;斯圖【j】?,LEN,1,fp)!=1)
{?printf(“可以嗎?不是嗎?救人啊!”);?getch();?}
fclose(FP);
}
虛空?insert()/*自定義插入函數*/
{?文件?* fp
int?I,j,k,m=0,snum
if((FP = fopen(“data . txt“,“r+“)= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
而(!feof(FP))
if(fread(& amp;stu【m】,LEN,1,FP)= = 1)?m++;
if(m = = 0)?{ printf(“no?記錄!\ n ");
fclose(FP);
返回;
}
printf(“拜托?輸入?位置?在哪裏?做什麽?妳呢。想要嗎?去哪?插入!(輸入?那個?number)\ n“);
scanf(“% d“,& ampsnum);/*輸入要插入的位置*/
for(I = 0;我& ltm;i++)
if(snum = = stu【I】。num)
打破;
for(j = m-1;j & gt我;j -)
斯圖【j+1】=斯圖【j】;/*從最後壹條記錄向後移動壹位*/
printf(“現在?拜托了。輸入?那個?新的?信息。\ n ");
printf(“number:“);
scanf(“% d“,& amp斯圖【i+1】。num);
for(k = 0;k & ltm;k++)
if(stu【k】。num = = stu【I+1】。num)
{
printf(“the?號碼?是嗎?現有的,按?有嗎?去哪?繼續!”);
getch();
fclose(FP);
返回;
}
printf(“name:“);
scanf(“% s“,stu【I+1】。姓名);
printf(“elective:“);
scanf(“% lf“,& amp斯圖【i+1】。elec);
printf(“實驗:“);
scanf(“% lf“,& amp斯圖【i+1】。expe);
printf(“必需?課程:“);
scanf(“% lf“,& amp斯圖【i+1】。熱區);
斯圖【i+1】。sum = stu【I+1】。elec+stu【I+1】。expe+stu【I+1】。熱區;
if((FP = fopen(“data . txt“,“WB“))= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
for(k = 0;k & lt= m;k++)
if(fwrite(& amp;斯圖【k】?,LEN,1,fp)!= 1)/*將修改後的記錄寫入磁盤文件*/
{?printf(“可以嗎?不是嗎?救人啊!”);?getch();?}
fclose(FP);
}
虛空?總計()
{?文件?* fp
int?m = 0;
if((FP = fopen(“data . txt“,“r+“)= = NULL)
{?printf(“可以嗎?不是嗎?open \ n“);返回;}
而(!feof(FP))
if(fread(& amp;stu【m】,LEN,1,FP)= = 1)?
m++;/*統計記錄的數量表示學生數量*/
if(m = = 0)?{ printf(“no?記錄!\ n ");fclose(FP);返回;}
printf(“the?班級?是嗎?%d?同學們!\n“,m);/*輸出統計數據*/
fclose(FP);
}