武漢科技大學(xué) C課程設(shè)計 學(xué)生成績管理系統(tǒng) 鏈表_第1頁
武漢科技大學(xué) C課程設(shè)計 學(xué)生成績管理系統(tǒng) 鏈表_第2頁
武漢科技大學(xué) C課程設(shè)計 學(xué)生成績管理系統(tǒng) 鏈表_第3頁
武漢科技大學(xué) C課程設(shè)計 學(xué)生成績管理系統(tǒng) 鏈表_第4頁
武漢科技大學(xué) C課程設(shè)計 學(xué)生成績管理系統(tǒng) 鏈表_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、 二一二 二一三 學(xué)年第 一 學(xué)期電子技術(shù)學(xué)院課程設(shè)計報告書課程名稱: c程序課程設(shè)計 班 級: 電信db2011級1102班 學(xué) 號: xxxxxxxxxxxxxxx 姓 名: xxxx 指導(dǎo)教師: xxxx 二一二年 九 月一、需求分析1、題目二 學(xué)生成績管理程序任務(wù):自學(xué)c語言中相關(guān)知識,設(shè)計出學(xué)生成績管理程序。要求如下所述:u 錄入學(xué)生信息,每位學(xué)生錄入的信息有:姓名、學(xué)號、性別、班級、和三門功課(數(shù)學(xué),英語,計算機)的成績。以文件(myfile.txt)的形式保存每個學(xué)生的所有信息。(實驗中:假設(shè)3個班,每個班學(xué)生人數(shù)不得少于5人)學(xué)號 姓名 性別 班級 數(shù)學(xué) 英語 計算機 1101

2、 王鵬 男 1班 70 58 981102 李燕 女 2班 68 88 951103 趙亞芳 女 3班 58 48 96 u 增加學(xué)生記錄,并將增加的信息以文件的(myfile.txt)的形式保存。u 刪除學(xué)生記錄,以“學(xué)號”、“姓名”為關(guān)鍵字刪除記錄,若要刪除的記錄不存在,給出必要的提示信息;u 統(tǒng)計各班級學(xué)生每門課程的班級平均分,并由高到低排序。u 按學(xué)號或者姓名查詢記錄并顯示其三門功課成績;u 能瀏覽顯示全部學(xué)生成績,若無記錄可以顯示,給出必要的提示信息;2、系統(tǒng)功能需求分析 該程序中需要有存儲、讀取外部文件的命令實現(xiàn)將信息儲存于指定文件中。程序中需要有建立、修改鏈表的命令實現(xiàn)數(shù)據(jù)的動態(tài)

3、鏈表存儲方式。程序還需要一系列的提示命令使程序的易用性提高。因為需要對數(shù)據(jù)進行統(tǒng)計或查詢顯示,所以需要有對鏈表數(shù)據(jù)統(tǒng)計和對鏈表指定數(shù)據(jù)進行查找的功能。二、概要設(shè)計文件讀取模塊數(shù)據(jù)保存模塊成績對比模塊數(shù)據(jù)顯示 模塊數(shù)據(jù)查找模塊數(shù)據(jù)刪除模塊數(shù)據(jù)增加模塊成績單建立模塊學(xué)生成績管理程序三、詳細設(shè)計1、建立結(jié)構(gòu)體struct studentint num; char name10,sex10; int class,math,english,computer; struct student * next;int n;2、成績單建立模塊開始struct student *head,*p1,*p2; n=0;

4、 p1=p2=(struct student *)malloc(len);輸入第一個學(xué)生的數(shù)據(jù)head=null;p1-num!=0 y鏈表指針向后移動 n輸入一個學(xué)生的數(shù)據(jù)輸入學(xué)號為“0” y np2-next=null; return(head);結(jié)束struct student *creat(void)struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)malloc(len);printf(請輸入學(xué)生信息(按學(xué)號順序輸入)n); printf(學(xué)號:); scanf(%d,&p1-num); printf(姓名:); sc

5、anf(%s,p1-name); printf(性別:); scanf(%s,p1-sex); printf(班級:); scanf(%d,&p1-class); printf(數(shù)學(xué):); scanf(%d,&p1-math); printf(英語:); scanf(%d,&p1-english); printf(計算機:); scanf(%d,&p1-computer); head=null; while(1)n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *)malloc(len); printf(n請輸

6、入學(xué)生信息(按學(xué)號順序輸入)當(dāng)不再輸入時在學(xué)號處輸入0結(jié)束n); printf(學(xué)號:);scanf(%d,&p1-num); if(p1-num=0)break; else printf(姓名:); scanf(%s,p1-name); printf(性別:); scanf(%s,p1-sex); printf(班級:); scanf(%d,&p1-class); printf(數(shù)學(xué):); scanf(%d,&p1-math); printf(英語:); scanf(%d,&p1-english); printf(計算機:); scanf(%d,&p1-computer); p2-next=

7、null; return(head);3、數(shù)據(jù)增加模塊開始struct student *p0,*p1,*p2; p1=head; p0=stud;phead; p0=stud;輸入一個學(xué)生的數(shù)據(jù)根據(jù)學(xué)號順序找到數(shù)據(jù)應(yīng)該插入的位置phead; p0=stud;插入數(shù)據(jù) 返回頭指針phead; p0=stud;結(jié)束struct student *insert(struct student *head,struct student *stud)struct student *p0,*p1,*p2;p1=head; p0=stud;if(head=null) head=p0; p0-next=nul

8、l;elsewhile(p0-nump1-num)&(p1-next!=null)p2=p1; p1=p1-next;if(p0-numnum)if(head=p1) head=p0;else p2-next=p0;p0-next=p1;else p1-next=p0; p0-next=null;n+;printf(n增加成功!n);return(head);4、數(shù)據(jù)刪除模塊開始struct student *p1,*p2;輸入刪除的學(xué)號(姓名)鏈表中有該數(shù)據(jù)p1=head y yhead=p1-next np2-next=p1-next;printf(“不到該數(shù)據(jù)!n);結(jié)束struct s

9、tudent *del1(struct student *head,int num)struct student *p1,*p2;if(head=null) printf(n表格不存在!n); return(head);p1=head;while(num!=p1-num)&(p1-next!=null)p2=p1; p1=p1-next;if(num=p1-num)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n刪除成功!n);n-;else printf(n找不到該數(shù)據(jù)!n);return(head);struct student

10、*del2(struct student *head,char *name)struct student *p1,*p2;if(head=null) printf(n表格不存在!n); return(head);p1=head;while(strcmp(name,p1-name)!=0)&(p1-next!=null)p2=p1; p1=p1-next;if(strcmp(name,p1-name)=0)if(p1=head) head=p1-next;else p2-next=p1-next;printf(n刪除成功!n);n-;else printf(n找不到該數(shù)據(jù)!n);return(h

11、ead);5、數(shù)據(jù)查找模塊 開始struct student *p=head;輸入查找的學(xué)號(姓名)num=p-num 或strcmp(name,p-name)=0 n y輸出數(shù)據(jù) yp=p-next np!=null y結(jié)束void find1(struct student *head,int num)struct student *p=head;if(head!=null) doif(num=p-num)printf(n學(xué)號 姓名 性別 班級 數(shù)學(xué) 英語 計算機n); printf(-n); printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name

12、,p-sex,p-class,p-math,p-english,p-computer); break; else p=p-next;while(p!=null);if(p=null) printf(n未找到相應(yīng)信息!n);else printf(n成績單為空!n);void find2(struct student *head,char *name)struct student *p=head;if(head!=null)doif(strcmp(name,p-name)=0)printf(n學(xué)號 姓名 性別 班級 數(shù)學(xué) 英語 計算機n); printf(-n); printf(%d %-6s

13、%s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); break;else p=p-next;while(p!=null);if(p=null) printf(n未找到相應(yīng)信息!n);else printf(n成績單為空!n);void print(struct student *head)struct student *p;p=head;if(head!=null)printf(學(xué)號 姓名 性別 班級 數(shù)學(xué) 英語 計算機n);printf(-n); do printf(%d %-6s %s

14、 %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); p=p-next;while(p!=null);else printf(無信息!n);6、數(shù)據(jù)顯示模塊開始struct student *p; p=head;head!=null y輸出一個學(xué)生的數(shù)據(jù) np=p-next;p!=null y結(jié)束 nvoid print(struct student *head)struct student *p;p=head;if(head!=null)printf(學(xué)號 姓名 性別 班級 數(shù)學(xué) 英語 計算機

15、n);printf(-n); do printf(%d %-6s %s %d %-3d %-3d %-3dn,p-num,p-name,p-sex,p-class,p-math,p-english,p-computer); p=p-next;while(p!=null);else printf(無信息!n);7、成績對比模塊開始struct student *p; p=head; float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;p!=null np-class=1 y ysum1=sum1+p-math(

16、englishi/computer); n1+; np-class=2 ysum1=sum1+p-math(englishi/computer); n1+;p-class=3 n ysum1=sum1+p-math(englishi/computer); n1+;p=p-next;算出各班平均分并比較輸出成績對比結(jié)果結(jié)束void compare(struct student *head)struct student *p;p=head;float sum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;printf( 數(shù)學(xué)班

17、級平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-math; n1+;if(p-class=2) sum2=sum2+p-math; n2+;if(p-class=3) sum3=sum3+p-math; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,ave

18、rage1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=ave

19、rage2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 英語班級平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-english; n1+;if(p-class=2) sum2=sum2+p-english; n2+;if(

20、p-class=3) sum3=sum3+p-english; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average

21、2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,av

22、erage3,average2,average1);p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf(n 計算機班級平均分 n);printf(-n);while(p!=null)if(p-class=1) sum1=sum1+p-computer; n1+;if(p-class=2) sum2=sum2+p-computer; n2+;if(p-class=3) sum3=sum3+p-computer; n3+;p=p-next;average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if(

23、average1=average2)&(average1=average3)if(average2=average3)printf(1班:%.2f 2班:%.2f 3班:%.2fn,average1,average2,average3);elseprintf(1班:%.2f 3班:%.2f 2班:%.2fn,average1,average3,average2); else if(average2=average1)&(average2=average3)if(average1=average3)printf(2班:%.2f 1班:%.2f 3班:%.2fn,average2,average1

24、,average3);elseprintf(2班:%.2f 3班:%.2f 1班:%.2fn,average2,average3,average1);elseif(average1=average2)printf(3班:%.2f 1班:%.2f 2班:%.2fn,average3,average1,average2);else printf(3班:%.2f 2班:%.2f 1班:%.2fn,average3,average2,average1);8、數(shù)據(jù)保存模塊void save(struct student *head) struct student *p; file *fp; fp=fop

25、en(myfile.txt,wb); p=head; while(p!=null) fwrite(p,len,1,fp); p=p-next; fclose(fp); printf(保存成功!n);9、數(shù)據(jù)讀取模塊struct student *load() struct student *head,*p1,*p2; file *fp; n=0; head=null; fp=fopen(myfile.txt,rb); head=p2=p1=(struct student *)malloc(len); while(fread(p1,len,1,fp)=1)p2=p1; p1=(struct st

26、udent *)malloc(len); p2-next=p1; n+; p2-next=null; fclose(fp);printf(讀取成功!n); return(head); 10、主函數(shù)void main()system(color 0b);struct student *head=null,*stu;int num,choice;char name10; while(1)system(pause); system(cls);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(# #n);printf(# 學(xué)

27、生成績管理系統(tǒng)菜單 #n);printf(#-#n); printf(# 1.創(chuàng)建學(xué)生成績單 #n);printf(#-#n); printf(# 2.增加學(xué)生信息 #n); printf(#-#n); printf(# 3.刪除學(xué)生信息 #n);printf(#-#n); printf(# 4.查看學(xué)生信息 #n);printf(#-#n);printf(# 5.顯示所有學(xué)生信息 #n);printf(#-#n); printf(# 6.班級成績對比 #n);printf(#-#n); printf(# 7.保存至文件 #n);printf(#-#n); printf(# 8.從文件中讀取信

28、息 #n);printf(#-#n); printf(# 9.退出系統(tǒng) #n);printf(# #n);printf(# # # # # # # # # # # # # # # # # # # # # # # #n);printf(n請選擇所需功能:); scanf(%d,&choice);printf(n); switch(choice) case 1: head=creat(); break; case 2: stu=(struct student *)malloc(len); printf(請輸入學(xué)生信息n); printf(學(xué)號:); scanf(%d,&stu-num); prin

29、tf(姓名:); scanf(%s,stu-name); printf(性別:); scanf(%s,stu-sex); printf(班級:); scanf(%d,&stu-class); printf(數(shù)學(xué):); scanf(%d,&stu-math); printf(英語:); scanf(%d,&stu-english); printf(計算機:); scanf(%d,&stu-computer); while(1) head=insert(head,stu); printf(請繼續(xù)輸入學(xué)生信息(按0退出)n); stu=(struct student *)malloc(len); p

30、rintf(學(xué)號:); scanf(%d,&stu-num); if(stu-num=0) break; printf(姓名:); scanf(%s,stu-name); printf(性別:); scanf(%s,stu-sex); printf(班級:); scanf(%d,&stu-class); printf(數(shù)學(xué):); scanf(%d,&stu-math); printf(英語:); scanf(%d,&stu-english); printf(計算機:); scanf(%d,&stu-computer); break; case 3: printf(1.按學(xué)號刪除 2.按姓名刪除

31、n請選擇:); scanf(%d,&choice); switch(choice) case 1: printf(輸入要刪除的學(xué)生學(xué)號(按0退出):); scanf(%d,&num); while(num!=0) head=del1(head,num); printf(輸入要刪除的學(xué)生學(xué)號(按0退出):); scanf(%d,&num); break; case 2: printf(輸入要刪除的學(xué)生姓名(按0退出):); scanf(%s,name); while(strcmp(name,0)!=0) head=del2(head,name); printf(輸入要刪除的學(xué)生姓名(按0退出):

32、); scanf(%s,name); break; default: break; break; case 4: printf(1.按學(xué)號查找 2.按姓名查找n請選擇:); scanf(%d,&choice); switch(choice) case 1: printf(輸入要查找的學(xué)生學(xué)號:); scanf(%d,&num); find1(head,num); break; case 2: printf(輸入要查找的學(xué)生姓名:); scanf(%s,name); find2(head,name); break; default: break; break; case 5: print(hea

33、d); break; case 6: compare(head); break; case 7: save(head); break; case 8: head=load(); break; default: break; if(choice=9) printf(謝謝使用!n); break;四、調(diào)試分析過程描述1、主菜單2、創(chuàng)建成績單3、增加學(xué)生記錄4、刪除學(xué)生記錄5、顯示所有學(xué)生記錄6、班級成績對比7、查找學(xué)生記錄8、保存學(xué)生記錄9、讀取文件信息調(diào)試過程中的問題與反思: 此次編寫的程序蓋內(nèi)容量很大,在編寫過程中采用的是寫好一個模塊測試一個模塊的方法,但是將各個模塊組合到一起后仍舊出現(xiàn)了許多小問題,經(jīng)過多次調(diào)試才達到各個模塊協(xié)調(diào)工作。最初程序編寫的時候并沒有太過提示性輸出語句,雖然程序運行不會受到影響,但是非編寫人員就難以使用,在調(diào)試中明顯感受到有些地方如果

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論