




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一、課程設(shè)計的內(nèi)容
(1)信息維護(hù):
要求:學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實現(xiàn)學(xué)生信息數(shù)據(jù)
的維護(hù)。此模塊包括子模塊有:增加學(xué)生信息、、刪除學(xué)生信息、修改
學(xué)生信息
(2)信息查詢:
要求:查詢時可實現(xiàn)按姓名查詢、按學(xué)號查詢
(3)成果統(tǒng)計:
要求:A輸入隨意的一個課程名(如數(shù)學(xué))和一個分?jǐn)?shù)段(如
60-70),統(tǒng)計出在此分?jǐn)?shù)段的學(xué)生狀況。
(4)排序:能對用戶指定的隨意課程名,按成果升序或降序排列學(xué)生
數(shù)據(jù)并顯示排序結(jié)果(運用表格的形式顯示排序后的輸出結(jié)果)
(運用多種方法排序者,加分)
(二)其它要求:
(1)只能運用C/C++語言,源程序要有適當(dāng)?shù)淖⑨專钩绦蚝啙嶉?/p>
讀
(2)至少采納文本菜單界面(假如能采納圖形菜單界面更好)
(3)學(xué)生可自動增加新功能模塊(視狀況可另外加分)
(4)寫出課程設(shè)計報告,具體要求見相關(guān)說明文檔
一、課程設(shè)計的要求及數(shù)據(jù)
1、進(jìn)一步駕馭和利用C語言進(jìn)行程設(shè)計的實力;
2、進(jìn)一步理解和運用結(jié)構(gòu)化程序設(shè)計的思想和方法;
3、初步駕馭開發(fā)一個小型好用系統(tǒng)的基本方法;
4、學(xué)會調(diào)試一個較長程序的基本方法;
5、學(xué)會利用流程圖或N-S圖表示算法;
6、駕馭書寫程序設(shè)計開發(fā)文檔的實力。
三、課程設(shè)計應(yīng)完成的工作
1、編寫完成相應(yīng)題目的程序;
2、編寫課程設(shè)計報告,課程設(shè)計報告的內(nèi)容應(yīng)包括以下6個部分:
1)需求分析:包括設(shè)計題目、設(shè)計要求以及系統(tǒng)功能需求分
析;
2)總體設(shè)計:包括系統(tǒng)總體設(shè)計框架和系統(tǒng)功能模塊圖;
3)具體設(shè)計:包括主要功能模塊的算法設(shè)計思路以及對應(yīng)的
工作流程圖;
4)調(diào)試分析過程描述:包括測試數(shù)據(jù)、測試輸出結(jié)果,以及
對程序調(diào)試過程中存在問題的思索(列出主耍問題的出錯現(xiàn)
象、出錯緣由、解決方法及效果等,適當(dāng)?shù)陌Y(jié)果截圖);
5)總結(jié):課程設(shè)計完成了哪些功能,有沒有什么擴(kuò)展功能?
還有哪些地方須要改進(jìn)?課程設(shè)計過程中的學(xué)習(xí)體會及收
獲、對本次課程設(shè)計的相識以及自己的建議等內(nèi)容;
6)附錄:主要源程序代碼,含必要的注釋。
3、答辯:在試驗室建立程序運行的環(huán)境,并在指導(dǎo)老師的監(jiān)督
下,獨立解
決問題、運行程序和回答老師提出的問題。
目錄
1設(shè)計目的及要
求.................................................P4
2總體設(shè)
計.......................................................P4
3具體設(shè)
計.......................................................P5
3.1功能模塊設(shè)
計.................................................P5
XX功能模塊(可選).......................................
P5
YY功能模塊(可選).......................................
P6
ZZ功能模塊(可選).......................................
P7
3.2數(shù)據(jù)結(jié)構(gòu)設(shè)
計P8
4調(diào)試分
析......................................................P9
4.1結(jié)構(gòu)
體......................................................P9
4.2鏈
表........................................................PH
5遇到的問題及解決方法分
析P12
6總
結(jié)...........................................................
-P13
7源文
件
P13
7.1鏈
表...........................................................P13
7.2結(jié)構(gòu)
體.........................................................P28
1、目的及要求
一目的:編制一程序?qū)崿F(xiàn)對學(xué)生成果的管理,讓自己既動手又動腦,
獨立實踐,將課本上的理論學(xué)問和實際應(yīng)用問題進(jìn)行有機(jī)結(jié)合,熬煉
自己分析、解決實際問題的實力,提高自身項目開發(fā)及程序調(diào)試實力。
二要求:
1、整個系統(tǒng)均用C語言實現(xiàn);
2、利用指針、結(jié)構(gòu)體、鏈表來實現(xiàn)學(xué)生成果的數(shù)據(jù)結(jié)構(gòu)設(shè)計;
3、系統(tǒng)具有輸入、顯示、查詢(查詢時可實現(xiàn)按姓名查詢、按學(xué)號
查詢)、刪除、排序、插入,保存、讀取基本功能;
4、系統(tǒng)的各個功能模塊都用函數(shù)的形式來實現(xiàn);
5、學(xué)生信息數(shù)據(jù)要以文件的形式保存,能實現(xiàn)學(xué)生信息數(shù)據(jù)的維護(hù)。
此模塊包括子模塊有:增加學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息;
6、可以輸入隨意的一個課程名(如數(shù)學(xué))和一個分?jǐn)?shù)段(如60-70),
統(tǒng)計出在此分?jǐn)?shù)段的學(xué)生狀況;
7、能對用戶指定的隨意課程名,按成果升序或降序排列學(xué)生數(shù)據(jù)并
顯示排序結(jié)果;
8、可自動增加新功能模塊;
9、可以將學(xué)生信息從文件中讀取出來。
2總體設(shè)計
1、主函數(shù)main()
利用if-else,While循環(huán)語句和switch。實現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)
依據(jù)輸入的數(shù)字選項來調(diào)用相應(yīng)的函數(shù)。
2、菜單選擇函數(shù)voidmenu。;
這是一個無參函數(shù),主要實現(xiàn)“功能選擇”的界面,在這個界面里有
顯示系統(tǒng)的13大功能,依據(jù)每個功能前面的序號進(jìn)行選擇。等執(zhí)行
完每一個函數(shù)功能后,按任'0'鍵回到主界面也要通過這個函數(shù)提
示來實現(xiàn)!
3、自定義函數(shù)voidprintstart()voidWrong()>voidNofind()
voidprintcO、voidprinte(Node*p)
用voidWrong。來提示輸入錯誤,用voidNofind()提示沒有找到學(xué)
生資料,用voidprintcO來輸出中文,用voidprinte(Node*p)
來輸出中文。
main()
voidAdd(Link----1)
voicMaths(Link1)
voidQur(Link1)
voidEnglish(Link1)
voidDel(:Link1)
voicselect(Link1)
voidModify(Linl1)voic
Save(Link1)
voidDisp(Link1)
voicmenu()
vcid___________TongjLtLink1)
voicprintcO
voidChinese(Link1)
voicprinte(Node*p)
3具體設(shè)計
3.1功能模塊設(shè)計
排序數(shù)學(xué)成果功能模塊
函數(shù)voidMaths(Link1)
該函數(shù)用于對數(shù)學(xué)成果進(jìn)行降序,11二(Link)mal1oc(sizeof(Node))
用于做新的鏈表連接,假如原鏈表為空的話,返回;不為空的話,
p=l->next;建立接點用于保存信息,對指定鏈表地址進(jìn)行排序。流
程圖如圖所示:
顯示學(xué)生資料功能模塊
函數(shù)voidDisp(Link1)
該函數(shù)負(fù)責(zé)顯示學(xué)生資料,這是一個不返同值函數(shù)。
算法:先將P結(jié)點的指針指向第一個結(jié)點,將P結(jié)點(即第一個結(jié)點)
的數(shù)據(jù)輸出。然后再將p結(jié)點的指針指向p指針的的指針(即下一結(jié)
點),將P結(jié)點(即第一結(jié)點)的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到P指
函數(shù)voidDel(Link1)
該函數(shù)用于有選擇地刪除學(xué)生資料,假如原來的鏈表為空的話,會返
回;不為空的話,選擇用按哪種類型刪除,假如按學(xué)號刪除,就輸入
學(xué)號,后推斷是否取得地址,取得就執(zhí)行刪除;按名字刪除就輸入名
字,運行同學(xué)號一樣。流程圖如圖所示:
一個結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成
果等數(shù)據(jù))。一個結(jié)構(gòu)體變量的指針就是該變量所占據(jù)的內(nèi)存段起始
地址。可以設(shè)一個指針變量,用來指向一結(jié)構(gòu)體變量,此時指針變量
的值是結(jié)構(gòu)體的起始地址。指針量變也可以用來指向一結(jié)構(gòu)體數(shù)組中
的元素。
structstudent
charnum[10];/*學(xué)號*/
charname[20];
charsex[4];
intcgrade;
intmgrade;
integrade;
inttotle;
intave;
charneartime[10];/*最近更新時間*/
typedcfstructnode
structstudentdata;
structnode*next;
}Node,*Link;
6總結(jié)
經(jīng)過一個多星期的C語言課程設(shè)計,感覺自己收獲不少!
首先是:要達(dá)到這樣的功能,運用鏈表相當(dāng)便利,但不簡潔理解,所
以在這方面我很了許多的時間看課本,使C語言的學(xué)問強(qiáng)化了不少。
其次,在做課程設(shè)計的過程中,發(fā)覺了平常許多沒有留意到的問題,
例如:返回值函數(shù)和不返回值函數(shù)兩者在主函數(shù)中的調(diào)用是不同
的........
更重要的是,這次課程設(shè)計雖然花了我不少時間,但正是這些時間,
讓我見識到了C語言的重要性。這個學(xué)生成果管理系統(tǒng)都是在自己學(xué)
問范圍內(nèi)完成的,所以界面清楚簡潔,可能不是很好看,但肯定好用!
從這里我也得到一個體會,做一個程序,或者開發(fā)一個軟件,應(yīng)當(dāng)著
重從它的后臺制作入手,不能做出一個中看不中用的程序或者軟件。
信任這次的課程設(shè)計使我的C語言學(xué)問扎實了許多。
由于這是第一次進(jìn)行設(shè)計,寫文檔,難免會寫得不好!
7源程序
7.1鏈表
#include〃stdio.h〃
#include"sldlib.h〃
#include"string.h〃
intshoudsave=0;/**/
structstudent
charnum[10];/*學(xué)號*/
charname[20];
charsex[4];
intcgrade;
intmgrade;
integrade;
inttotle;
intave;
charneartime[10];/*最近更新時間*/
typedefstructnode
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()
y—yi,f
Il*T\*T?*T?*T^*T^#T?*T?*T?
\?
*fsX^**TS*TS*TS^T**lSZ7**Ts*lSZ^**lSI
printfC\tl登記學(xué)生資料\t\t\t\t\t2刪除學(xué)生資料\n〃);
printfC\t3查詢學(xué)生資料\t\t\t\t\t4修改學(xué)生資料\n〃);
printfr\t5顯示學(xué)生資料\t\t\t\t\l6統(tǒng)計學(xué)生資料\n〃);
printf(,z\t7排序語文成果\t\t\t\t\t8排序數(shù)學(xué)成果\n〃);
printfC\t9排序英語成果\t\t\t\t\tlO選出分段分?jǐn)?shù)\n〃);
printfCXtll保存學(xué)生資料\t\t\t\t\tl2幫助信息\t\t\n〃);
printf(/z\t0退出系統(tǒng)\t\t\t\t\t\t\t\n");
-9^py-^^,f
II*7**7%^Tw#TW^T%
?X^.]*\?、
^T**iSZT**TSZT**TS*iS*TSZ^*\I1
voidprintstart()
printf(〃---------
-\n〃);
voidWrong()
printf("\n===》提示:輸入錯誤!\n〃);
voidNofind()
printf(〃\n===>提示:沒有找到該學(xué)生!\n〃);
voidprintcO/*本函數(shù)用于輸出中文*/
printf(〃學(xué)號\t姓名\t性別語文成果數(shù)學(xué)成果英語
成果總分平均分、\n〃);
voidprinte(Node*p)/*本函數(shù)用于輸出英文*/
,z,,
printf(%-12s%s\t%s\t%d\t%d\t%d\t%d\t%d\n)p->data.num,p-
>data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->dat
a.cgrade,p->data.totle,p->data.ave);
Node*Locate(Link1?charfindmess[],charnameornum[])/*該
函數(shù)用于定位連表中符合要求的接點,并返回該指針*/
Node
if(strcmp(nameornum,,,numz,)==0)/*按學(xué)號查詢*/
r=l->next;
while(r!=NULL)
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
elseif(strcmp(nameornum,"name")=0)/*按姓名查詢*/
r=l->next;
while(r!=NULL)
if(strcmp(r->data.name,findmess)=0)
returnr;
r=r->noxt;
return0;
voidAdd(Link1)/*增加學(xué)生*/
Node*p,*r,*s;
charnum[10];
r=l;
s=l->noxt;
while(r->next!=NULL)
r=r->next;/*將指針置于最末尾*/
while(1)
printf(〃請你輸入學(xué)號(以'O'返回上一級菜單:)〃);
scanf(〃%s〃,num);
if(strcmp(num,,/0,,)==0)
break;
whi1e(s)
if(strcmp(s->data.num,num)==0)
printf(〃===>提示:學(xué)號為‘%s'的學(xué)生已經(jīng)存在,若要修改請你選
擇‘4修改‘!\n”,num);
printstart();
printc();
printe(s);
printstart();
printf(〃\n〃);
return;
s=s->next;
p=(Node*)malloc(sizcof(Node));
strcpy(p->data.num,num);
printf(〃請你輸入姓名:〃);
scanf(〃%s〃,p->data.name);
getchar();
printf(〃請你輸入性別:〃);
scanf(〃/s〃,p->data.sex);
getchar();
printf(〃請你輸入語文成果:〃);
scanf(〃%d〃,&p->data.cgrade);
getchar();
printf(〃請你輸入數(shù)學(xué)成果:〃);
scanf&p->data.mgrade);
getchar();
printf(〃請你輸入英語成果:〃);
scanf(〃%d〃,&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
/*信息輸入已經(jīng)完成*/
p->next=NULL;
r->next=p;
r=P;
shoudsave=l;
voidQur(Link1)/*查詢學(xué)生*/
intsei;
charfindmess[20];
Node*p;
if(!l->ncxt)
printf(〃\n===>提示:沒有資料可以查詢!\n〃);
return;
printf(〃\n===>l按學(xué)號查找\n===>2按姓名查找\n〃);
scanf(〃%d〃,&sel);
if(sel==l)/*學(xué)號*/
printf("請你輸入要查找的學(xué)號:〃);
scanf(〃%s〃,findmess);
p=Locate(1,findmess,〃num〃);
if(p)
printfC\t\t\t\t查找結(jié)果\n〃);
printstart();
printc();
printe(p);
printstart();
else
Nofind();
elseif(sel==2)/*姓名*/
printf(〃請你輸入要查找的姓名:〃);
scanf(〃%s〃,findmess);
p=Locate(l,findmess,z/name,z);
if(p)
printf(z,\t\t\t\t查找結(jié)果\n〃);
printstart();
printc();
printe(p);
printstart();
else
Nofind();
else
Wrong();
voidDel(Link1)/*刪除*/
intsei;
Node*p,*r;
charfindmess[20];
if(!l->next)
printf(〃\。==二〉提示:沒有資料可以刪除!\口〃);
return;
printf(z/\n=?>l按學(xué)號刪除\.:=>2按姓名刪除\n〃);
scanf(繪d〃,&sel);
if(sel==l)
printf(〃請你輸入要刪除的學(xué)號:〃);
scanf(〃%s〃,findmess);
p二Locate。,findmess,〃num〃);
if(p)
r=l;
whi1e(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n===>提示:該學(xué)生已經(jīng)勝利刪除!\n");
shoudsave=l;
else
Nofind();
elseif(sel-2)
printf(〃請你輸入要刪除的姓名:〃);
scanf(〃%s〃,findmess);
p=Locate(1,findmcss,"name");
if(p)
r=l;
while(r->ncxt!=p)
r=r->next;
r->next=p->next;
free(p);
printf(〃\n===>提示:該學(xué)生已經(jīng)勝利刪除!\n〃);
shoudsave=l;
else
Nofind();
else
Wrong();
voidModify(Link1)
Node*p;
charfindmess[20];
if(!l->next)
printf(〃\n===>提示:沒有資料可以修改!\n〃);
return;
printf(〃請你輸入要修改的學(xué)生學(xué)號:〃);
scanf(〃%s〃,findmess);
p=Locate。,findmess,^num^);
if(p)
printf(“請你輸入新學(xué)號(原來是%s):〃,p->data.num);
scanf(〃%s〃,p->data.num);
prinlf(〃請你輸入新姓名(原來是%$):〃,p->data.name);
scanf(〃%s〃,p->data.name);
getchar();
printf(〃請你輸入新性別(原來是%s):〃,p->data.sex);
scanf(〃%s〃,p->data.sex);
printf(〃請你輸入新的語文成果(原來是%(1分):〃,p->data.cgrade);
scanf(飛d〃,&p->data.cgrade);
getchar();
printf(〃請你輸入新的數(shù)學(xué)成果(原來是%(1分)/z,p->data.mgrade);
scanf(〃%d〃,&p->data.mgrade);
getchar();
printf(〃請你輸入新的英語成果(原來是%d分)p->data.egrade);
scanf(z/%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf(〃\n===>提示:資料修改勝利!\n〃);
shoudsave=l;
else
Nofind();
voidDisp(Link1)
intcount=0;
Node*p;
p=l->next;
if(1p)
printf(〃\『二=》提示:沒有資料可以顯示!\n〃);
return;
printf(/z\t\t\t\t顯示結(jié)果\n");
printstart();
printc();
printf(〃\n〃);
whi1e(p)
printe(p);
p=p->next;
printstart();
printf("\n");
voidTongji(Link1)
Node*pm,*pe,*pc,*pt,*pa;/*用于指向分?jǐn)?shù)最高的接點*/
Node*r=l-〉next;
if(!r)
printf(〃3===》提示:沒有資料可以統(tǒng)計!\n〃);
return;
pm=pe=pc=pt=pa=r;
while(r!=NULL)
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egradc)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
printfC-------------------------------統(tǒng)計結(jié)果
---------------------------------\n〃);
printf("總分最高者:\t%s%d分
\n〃,pt->data.name,pt->data.totle);
printf(〃平均分最高者:\t%s%d分
\n〃,pa->data.name,pa->data.ave);
printf(,z英語最高者:\t%s%d分
\n〃,pe->data.name,pe->data.egrade)
printfC數(shù)學(xué)最高者:\t%s%d分
\n〃,pm->data.name,pm->data.mgrade)r
printf(/z語文最高者:\t%s%d分
\n〃,pc->data.name,pc->data.cgrade);
printstart();
voidChinese(Link1)
Link11;
Node*p,*rr,*s;
ll=(Link)malloc(sizeof(Node));/*用于做新的連表*/
ll->next=NULL;
if(l->next==NULL)
printf(〃\n===>提示:沒有資料可以排序!\n〃);
return;
p=l->next;
while(p)
s=(Node*)malloc(sizeof(Node));/*新建接點用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL&&
rr->next->data.egrade>=p->data.egrade)
rr=rr->next;
if(rr->next==NULL)
rr->ncxt=s;
else
s->next=rr->next;
rr->next=s;
p=p->next;
free⑴;
l->next=ll->next;
printf(〃\11===》提示:排序已經(jīng)完成!\n〃);
voidMaths(Link1)/*對數(shù)學(xué)排序*/
Link11;
Node*p,*rr,*s;
11=(Link)malloc(sizeof(Node));/*用于做新的連表*/
ll->next=NULL;
if(l->next-NULL)
printf(〃\n===>提示:沒有資料可以排序!\n〃);
return;
p=l->next;
while(p)
s=(Node*)malloc(sizeof(Node));/*新建接點用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NL'LL&&
rr->next->data.mgrade>=p->data.mgrade)
rr=rr->next;
if(rr->ncxt==NULL)
rr->next=s;
else
s->next=rr->next;
rr->next=s;
p=p->next;
free⑴;
l->next=ll->next;
printf(〃\n===>提示:排序已經(jīng)完成!\n〃);
voidEnglish(Link1)/*對英語排序*/
Link11;
Node*p,*rr,*s;
11=(Link)malloc(sizeof(Node));/*用于做新的連表*/
ll->next=NULL;
if(l->next==NULL)
printf(〃\n===>提示:沒有資料可以排序!\n〃);
return;
p=l->next;
while(p)
s=(Node*)malloc(sizeof(Node));/*新建接點用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL&&
rr->next->data.cgrade>=p->data.cgrade)
rr=rr->ncxt;
if(rr->next==NULL)
rr->next=s;
else
s->next=rr->next;
rr->next=s;
p=p->next;
free⑴;
l->next=l]->next;
printf("\n===>提示:排序已經(jīng)完成!\n");
voidselect(Link1)
inti;
intj,k;
Node*pc=1;〃用于指向分?jǐn)?shù)最高的接點
Node*r=l->next;
if(jr)
printf(〃\n===》提示:沒有資料可以篩選!\n〃);
return;
printf(〃輸入課程名1,語文2.數(shù)學(xué)3.英語〃);
scanf(〃/d〃,&i);
if(i==l)
printf(〃請輸入篩選分?jǐn)?shù)的上限:〃);
scanf;
printf(〃請輸入篩選分?jǐn)?shù)的下限:〃);
scanf(〃%d”,&k);
printf(z,-------------------------------篩選結(jié)果
\n〃);
printf(〃學(xué)號\t姓名\t性別語文成果數(shù)學(xué)
成果英語成果總分平均分\n〃);
printstart();
while(r!=NULL)
if(k<=(r->data.egrade)&&(r->data.egrade)<j)
printe(r);
r=r->next;
elseif(i==2)
printf(〃請輸入篩選分?jǐn)?shù)的上限:〃);
scanf(〃%d〃,&j);
printf(〃請輸入篩選分?jǐn)?shù)的下限:〃);
scanf(〃/d〃,&k);
printf(,z-----------------------------------篩選結(jié)果
\n〃);
printf(〃學(xué)號\t姓名\t性別語文成果數(shù)學(xué)
成果英語成果總分平均分\n〃);
printstart();
while(r!=NULL)
if(k<=(r->data.mgrade)&&(r->data.mgradc)<j)
printe(r);
r=r->next;
elseif(i==3)
printf(〃請輸入篩選分?jǐn)?shù)的上限:〃);
scanf&j);
printf("請輸入篩選分?jǐn)?shù)的下限:");
scanf(〃%d",&k);
printf(,z篩選結(jié)果
\n〃);
printf(〃學(xué)號\t姓名\t性別語文成果數(shù)學(xué)
成果英語成果總分平均分\n〃);
printstart();
while(r!=NULL)
if(k<=(r->data.cgrade)&&(r->data.cgrade)<j)
printe(r);
r=r->next;
else
Wrong();
voidSave(Link1)
FILE*fp;
Node*p;
intflag=l,count=0;
fp二fopen(〃c:\\student〃,〃wb〃);
if(fp二二NULL)
printf(〃\n===>提示:重新打開文件時發(fā)生錯誤!\n〃);
exit(1);
p=l->next;
while(p)
if(fwrite(p,sizeof(Node),1,fp)==1)
p=p->next;
count++;
else
flag=O;
break;
if(flag)
printf(〃\n===>提示:文件保存勝利.(有%d條記錄已經(jīng)保
存.)\n〃,count);
shoudsave=0;
fclose(fp);
voidmain()
Link1;/*連表*/
FILE*fp;/*文件指針*/
intsei;
charch;
charjian;
intcount=0;
Node*p,*r;
printf(〃\t\t\t\t學(xué)生成果管理系統(tǒng)\n\t\t\t06自動化2班蔡
曉慶3106000849\t\t\t\t\n/z);
1=(Node*)maHoc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen(〃C:\\student〃,〃wb〃);
loop:menu();
printf(〃請你選擇操作:〃);
scanf(〃%d〃,&sel);
if(sel==0)
if(shoudsave==1)
{getcharO;
printf(〃\n===>提示:資料已經(jīng)改動,是否將改動保存到文件中
(y/n)?\n〃);
scanf(〃%c”,&ch);
if(ch='y'||ch='Y')
Save(1);
printf(〃\n===>提示:你已經(jīng)退出系統(tǒng),再見!\n〃);
return;
switch(sei)
case1:Add(1);gotoloop;break;/*增加學(xué)生*/
case2:Del(1);gotoloop;break;/*刪除學(xué)生*/
case3:Qur(1);gotoloop;break;/*查詢學(xué)生*/
case4:Modify(1);gotoloop;break;/*修改學(xué)生*/
case5:Disp(l);gotoloop;break;/*顯示學(xué)生*/
case6:Tongji(1);gotoloop;break;/*統(tǒng)計學(xué)生*/
case7:Chinese(1);gotoloop;break;/*語文排序*/
case8:Maths(1);gotoloop;break;/*數(shù)學(xué)排序*/
case9:English(l);gotoloop;break;/*英語排序*/
case10:select(1);gotoloop;break;A選擇分段分?jǐn)?shù)*/
case11:Save(l);gotoloop;break;A保存學(xué)生*/
case12:printf(z,\t\t\t==========%gbM==========\n/?);goto
loop;break;
default:Wrong();getchar();break;
7.2結(jié)構(gòu)體
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
structstudent
charclass_0[20];
charnum[20];
charname[20];
floatmath;
floatc_prog;
floateng;
floatpolity;
floatsport;
floatave;}stu[1000];
charj,h;
/*函數(shù)聲明*/
voidluru();
voidchaxun();
voidcharu();
voidtongji();
voidxiugai();
voidshanchu();
voidpaixuO;
voidtuichu();
FILE*fp;〃指向?qū)W生信息的文件指針
voidmain()
loop:
printf(z,\t\i********************************************
printf("\t\t歡迎運用學(xué)生信息管理系統(tǒng)
\t\t\n");
printf(z/\t\t
\t\t\n/z);
printfC\t\t制作人:電力4史素
芬\t\t\n");
printf(〃\t\t
\t\t\n〃);
printf(〃\t\t
\t\t\n/z);
printfCz\t\tl.錄入學(xué)生成果\n〃);
printfC\t\t2.排序?qū)W生成果\n〃);
printf(〃\t\l3.統(tǒng)計輸出成果\n〃);
printf(〃\t\t4.查詢學(xué)生成果\n〃);
printfCz\t\t5.插入學(xué)生成果\n");
printf(z/\t\t6.修改學(xué)生成果\n〃);
printf(z/\t\t7.刪除學(xué)生成果\n〃);
printf(z,\t\t8.退出管理系統(tǒng)\n");
intn;
printf(〃請選擇功能\n\n〃);
scanf("%d〃,&n);
system(〃cls〃);
switch(n)
case1:
printfC\t\t錄入學(xué)生成果\n\n");
luru();
gotoloop;
case2:
printfC\t\t排序?qū)W生成果\n\n〃);
paixuO;
gotoloop;
case3:
printfC\t\t統(tǒng)計輸出學(xué)生成果\n\n〃);
tongji();
gotoloop;
case4:
printfCz\t\t查詢學(xué)生成果\n\n〃);
chaxun();
gotoloop;
case5:
printfr\t\t插入學(xué)生成果\n\n〃);
charu();
gotoloop;
case6:
printf(,z\t\t修改學(xué)生成果\n\n〃);
xiugai();
gotoloop;
case7:
printfC\t\t刪除學(xué)生成果\n\n〃);
shanchu();
gotoloop;
case8:
printf程序退出。\t感謝運用!\n\n〃);
exit(0);
default:
printf(〃您的輸入有誤,請重試!\n\n〃);
fflush(stdin);
gotoloop;
printf(z,\n按隨意鍵返回.....〃);
voidluru()
inti,m;
FTLE*fp;
printf(〃請輸入學(xué)生人數(shù):〃);
scanf(〃%d〃,&m);
if(m>1000|m<0){printf(〃\n錯誤\n\n");return;}
else
for(i=0;i<m;i++)
{printfC\n請輸入第%d位學(xué)生的成果:\n〃,i+1);
printf("班級:”);
scanf("%s〃,stu[i].class_0);
printf(〃學(xué)號:〃);
scanf(飛s〃,stu[i].num);
printf(〃姓名:〃);
scanf(〃%s〃,stu[i].name);
printf(〃高等數(shù)學(xué)成果:〃);
scanf(〃%f〃,&stu[i].math);
printfCC程序設(shè)計成果:〃);
scanf(z,%fz/,&stu[i].cprog);
printf(〃高校英語成果:〃);
scanfeng);
printf(〃馬克思主義政治經(jīng)濟(jì)學(xué)成果:〃);
scanf(zz%fz/,&stu[i].polity);
printf(〃高校體育成果:〃);
scanf.sport);
stu[i].ave=(stu[i].c_prog+stu[i].eng+stu[i].math+stu[i].
polity+stu
[i].sport)/5;
fp二fopen("stud.c〃,〃w〃);
for(i=0;i<m;i++)
if(fwritesizeof(struct
student),1,fp)!=1)
printfC\n打開文件失敗\n\n\n〃);
fclose(fp);
fp二fopen("stud.c〃,〃r〃);
printf(〃\n已錄入的學(xué)生成果:\n〃);
printf(〃\n班級學(xué)號姓名高等數(shù)學(xué)C程序設(shè)計高
校英語馬克思主義經(jīng)濟(jì)學(xué)高校體育平均分\。〃);
for(i=0;i<m;i++)
{fread(&stu[i],sizeof(structstudent),1,fp);
printf(,z\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-
6.2f\n〃,stu[i].class0,
stu[i],num,stu[i].name,stu[i].math,stu[i].c_prog,stu[i].
eng,
stu[i].polity,stu[i].sport,stu[i].ave);
fclose(fp);
getchar();
voidpaixu()
loop:
printf(-\t=================l,平均成果排序
printf(〃\t=========2,高數(shù)成果排序
printf(,z\t=================3,C語言成果排序
printf(z,\t=================4,英語成果排序
printf(〃\t=========5,馬克思經(jīng)濟(jì)學(xué)成果排序
=====\n〃);
printf(/z\t=================6,高校體育成果排序
\nO;
printf(〃\t=========7,學(xué)號排序
==========\n〃);
printf(〃請輸入你的選擇\n〃);
intt;
scanf(〃%d〃,&t);
FILE*fp;intx,y,z;structstudenttemp;
if((fp=fopen(z,stud.c〃,〃r〃))二二NULL)
{printf(z,\n無法打開文件\n\n\n〃);return;)
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x++)
printf("\n");
fclose(fp);
z=x;
for(x=O;x<z;x++)
for(y=x+l;y<z;y++)
if(stu[x].ave<stu[y].ave)
{temp=stu[x];
stu[x]=stu[y];
stu[y]=temp;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名高等數(shù)學(xué)C程序設(shè)計高
校英語馬克思主義經(jīng)濟(jì)學(xué)高校體育平均分\n〃);
fp二fopen("stud.c〃,〃w〃);
for(x=0;x<z;x++)
{fwrite(&stu[x],sizeof(structstudent),1,fp);
printf(,z\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-
6.2f\n,/,stu[x].class_0,
stu[x].num,stu[x].name,stu[x].math,stu[x].c_prog,stu[x].
eng,
stu[x].polity,stu[x].sport,stu[x].ave);
printf('\n");getchar();
fclose(fp);
return;
elseif(t=2)
FILE*fp;intx,y,z;structstudent
gaoshu;
if((fp=fopen("stud.c〃,"r"))=二NULL)
{printf(/z\n無法打開文件\n\n\n〃);return;)
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x++)
printf(〃\n〃);
fclose(fp);
z二x;
for(x=0;x<z;x++)
for(y=x+l;y<z;y++)
if(stu[x].math<stu[y].math)
{gaoshu=stu[x];
stu[x]=stu[y];
stu[y]=gaoshu;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名高等數(shù)學(xué)\n〃);
fp二fopen("stud,c","w〃);
for(x=0;x<z;x++)
{fwrite(&stu[x],sizeof(structstudent),1,fp);
printf(,z\n%-6s%-6s%-6s%-9.2f\n〃,stu[x],class_0,
stu[x].num,stu[x].name,stu[x].math);
printf(〃\n");getchar();
fclose(fp);
return;
elseif(t=3)
FILE*fp;intx,y,z;structstudent
yuyan;
if((fp=fopenCstud,c","rO)==NULL)
{printf(,z\n無法打開文件\n\n\n〃);return;}
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x4-+)
printf(〃\n〃);
fclose(fp);
z=x;
for(x=0;x<z;x++)
for(y=x+1;y<z;y++)
if(stu[x].c_prog<stu[y].c_prog)
{yuyan=stu[x];
stu[x]=stu[y];
stu[y]=yuyan;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名C語言\n〃);
fp=fopen(z/stud.c〃,〃w〃);
for(x=0;x〈z;x++)
{fwrite(&stu[x],sizeof(structstudent),1,fp);
printf(,z\n%-6s%-6s%-6s%-9.2f\n,z,stu[x].class0,
stu[x].num,stu[x].name,stu[x].c_prog);
printf(〃\n〃);getchar();
fclose(fp);
return;
elseif(t=4)
FILE*fp;intx,y,z;structstudent
ying;
if((fp二fopen("stud.c〃,)=NULL)
{printf(z,\n無法打開文件\n\n\n〃);return;}
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x")
printf(〃\n〃);
fclose(fp);
z二x;
for(x=0;x<z;x++)
for(y=x+l;y<z;y++)
if(stu[x].eng<stu[y].eng)
{ying=stu[x];
stu[x]=stu[y];
stu[y]=ying;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名英語\n〃);
fp二fopen(〃stud.c〃,〃w〃);
for(x=O;x<z;x++)
{fwrite(&stu[x],sizeof(structstudent),1,fp);
printf(z,\n%-6s%-6s%-6s%-9.2f\nzz,stu[x].class_O,
stu[x].num,stu[x].name,stu[x].eng);
printf(〃\n");getchar();
fclose(fp);
return;
elseif(t=5)
FILE*fp;intx,y,z;structstudent
makesi;
if((fp=fopen("stud.c〃,〃r〃))二二NULL)
{printf(z,\n無法打開文件\n\n\n〃);return;)
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x++)
printf("\n");
fclose(fp);
z=x;
for(x=0;x<z;x++)
for(y=x+l;y<z;y++)
if(stu[x].polity<stu[y].polity)
{makesi=stu[x];
stu[x]=stu[y];
stu[y]=makesi;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名馬克思經(jīng)濟(jì)學(xué)\n〃);
fp=fopen(/zstud.c〃,〃w〃);
for(x=0;x<z;x++)
{fwrite(&stu[x],sizeof(structstudent),1,fp);
printf(z,\n%-6s%-6s%-6s%-9.2f\n〃,stu[x].class_0,
stu[x].num,stu[x].name,stu[x].polity);
printf(〃\n〃);getchar();
fclose(fp);
return;
elseif(t=6)
FILE*fp;intx,y,z;structstudent
tiyu;
if((fp=fopenCstud.c","r"))=NULL)
{printf(z/\n無法打開文件\n\n\n〃);return;}
for(x=0;fread(&stu[x],sizeof(struct
student),1,fp)!=0;x++)
printf(〃\n");
fclose(fp);
z=x;
for(x=0;x〈z;x++)
for(y=x+l;y<z;y++)
if(stu[x].sport<stu[y].sport)
{tiyu=stu[x];
stu[x]=stu[y];
stu[y]=tiyu;
printf(〃\n排序后的數(shù)據(jù):\n〃);
printf(〃\n班級學(xué)號姓名高校體育\n〃);
fp=fopen(〃stud.c","w〃);
for(x=0;x<z;x++)
{fwrite
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 博物館經(jīng)營與管理
- 學(xué)前教育展望未來
- 三位數(shù)除以兩位數(shù)質(zhì)量測驗?zāi)M題帶答案
- 急性淋巴細(xì)胞白血病的健康宣教
- 脈管炎的健康宣教
- 心臟性猝死的健康宣教
- 護(hù)理敏感指標(biāo)管理制度
- 白血病伴發(fā)的精神障礙的健康宣教
- 遺傳性橢圓形細(xì)胞增多癥的健康宣教
- 肺癌的健康宣教
- 安慶銅礦選礦工藝
- 新能源汽車在政府采購領(lǐng)域中的推廣與應(yīng)用
- (完整文本版)新概念英語第一冊單詞表默寫版1-144
- 《氣胸護(hù)理查房》課件
- 肝膿腫的pbl查房
- 筼筜湖生態(tài)環(huán)境整治提升一期項目環(huán)境影響報告
- 建設(shè)用地報批服務(wù)投標(biāo)方案(技術(shù)方案)
- 護(hù)理身份識別制度課件
- 志愿者申請登記表
- 公司銀行賬戶開戶申請表
- 2022語文課程標(biāo)準(zhǔn)問答題及參考答案
評論
0/150
提交評論