九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表

上傳人:仙*** 文檔編號:28355619 上傳時間:2021-08-26 格式:DOC 頁數(shù):23 大?。?.12MB
收藏 版權申訴 舉報 下載
武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表_第1頁
第1頁 / 共23頁
武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表_第2頁
第2頁 / 共23頁
武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表_第3頁
第3頁 / 共23頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表》由會員分享,可在線閱讀,更多相關《武漢科技大學 C課程設計 學生成績管理系統(tǒng) 鏈表(23頁珍藏版)》請在裝配圖網(wǎng)上搜索。

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

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

3、鏈表存儲方式。程序還需要一系列的提示命令使程序的易用性提高。因為需要對數(shù)據(jù)進行統(tǒng)計或查詢顯示,所以需要有對鏈表數(shù)據(jù)統(tǒng)計和對鏈表指定數(shù)據(jù)進行查找的功能。二、概要設計文件讀取模塊數(shù)據(jù)保存模塊成績對比模塊數(shù)據(jù)顯示 模塊數(shù)據(jù)查找模塊數(shù)據(jù)刪除模塊數(shù)據(jù)增加模塊成績單建立模塊學生成績管理程序三、詳細設計1、建立結(jié)構體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);輸入第一個學生的數(shù)據(jù)head=NULL;p1-num!=0 Y鏈表指針向后移動 N輸入一個學生的數(shù)據(jù)輸入學號為“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(請輸入學生信息(按學號順序輸入)n); printf(學號:); scanf(%d,&p1-num); printf(姓名:); sc

5、anf(%s,p1-name); printf(性別:); scanf(%s,p1-sex); printf(班級:); scanf(%d,&p1-Class); printf(數(shù)學:); 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、入學生信息(按學號順序輸入)當不再輸入時在學號處輸入0結(jié)束n); printf(學號:);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ù)學:); 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;輸入一個學生的數(shù)據(jù)根據(jù)學號順序找到數(shù)據(jù)應該插入的位置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;輸入刪除的學號(姓名)鏈表中有該數(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;輸入查找的學號(姓名)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學號 姓名 性別 班級 數(shù)學 英語 計算機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未找到相應信息!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學號 姓名 性別 班級 數(shù)學 英語 計算機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未找到相應信息!n);else printf(n成績單為空!n);void print(struct student *head)struct student *p;p=head;if(head!=NULL)printf(學號 姓名 性別 班級 數(shù)學 英語 計算機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輸出一個學生的數(shù)據(jù) Np=p-next;p!=NULL Y結(jié)束 Nvoid print(struct student *head)struct student *p;p=head;if(head!=NULL)printf(學號 姓名 性別 班級 數(shù)學 英語 計算機

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ù)學班

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(# 學

27、生成績管理系統(tǒng)菜單 #n);printf(#-#n); printf(# 1.創(chuàng)建學生成績單 #n);printf(#-#n); printf(# 2.增加學生信息 #n); printf(#-#n); printf(# 3.刪除學生信息 #n);printf(#-#n); printf(# 4.查看學生信息 #n);printf(#-#n);printf(# 5.顯示所有學生信息 #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(請輸入學生信息n); printf(學號:); scanf(%d,&stu-num); prin

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

30、rintf(學號:); 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ù)學:); scanf(%d,&stu-math); printf(英語:); scanf(%d,&stu-english); printf(計算機:); scanf(%d,&stu-computer); break; case 3: printf(1.按學號刪除 2.按姓名刪除

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

32、); scanf(%s,name); break; default: break; break; case 4: printf(1.按學號查找 2.按姓名查找n請選擇:); scanf(%d,&choice); switch(choice) case 1: printf(輸入要查找的學生學號:); scanf(%d,&num); find1(head,num); break; case 2: printf(輸入要查找的學生姓名:); 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、增加學生記錄4、刪除學生記錄5、顯示所有學生記錄6、班級成績對比7、查找學生記錄8、保存學生記錄9、讀取文件信息調(diào)試過程中的問題與反思: 此次編寫的程序蓋內(nèi)容量很大,在編寫過程中采用的是寫好一個模塊測試一個模塊的方法,但是將各個模塊組合到一起后仍舊出現(xiàn)了許多

34、小問題,經(jīng)過多次調(diào)試才達到各個模塊協(xié)調(diào)工作。最初程序編寫的時候并沒有太過提示性輸出語句,雖然程序運行不會受到影響,但是非編寫人員就難以使用,在調(diào)試中明顯感受到有些地方如果不加提示使用者將很難操作。最后對一些需要提示的地方慢慢修改,加入一系列提示以后才使程序比較人性化。對于界面的設計,最初雖然有一個雛形,但是在實際調(diào)試過程中暴露出不少錯位等顯示效果不佳的狀況。針對此類問題,必須多次全面調(diào)試,才能將程序界面編寫得最美觀。經(jīng)過整個調(diào)試之后,深深感受到程序調(diào)試有相當?shù)谋匾?,很多問題不經(jīng)過反復調(diào)試是難以暴露的。如界面設計、菜單人性化等需要直觀感受的東西,也只有通過程序調(diào)試才能將它們盡可能完善。五、課程

35、設計小結(jié)通過本次課程設計,我熟悉了對鏈表的創(chuàng)建、增加、刪除等一些操作,先前只在課堂上聽老師講述,自己對開辟內(nèi)存空間、結(jié)構體指針等與鏈表相關的操作并不熟悉,在制作了這個程序之后,我對鏈表的相關操作已經(jīng)比較熟練了。本次課程設計需要用到一系列外部文件命令,通過自學外部命令和課程設計的演練,我已經(jīng)能夠掌握外部文件的相關命令。值得一提的是,課程設計要求鏈表命令與外部文件命令相結(jié)合,通過此次程序編寫,這兩部分知識結(jié)合使用,將我所學的只是串聯(lián)起來。課程設計所要求的程序,是我從學習C語言以來編寫得最長的程序,以往老師在可能上常說命令要精簡我總是不以為然,經(jīng)過本次編寫,我體會到了精簡命令的重要性。對于一個小程序

36、,可能長點短點無所謂,出了問題很容易檢查,而對于這種需要編寫四五百行的大程序,如果不注意使用命令的簡單明了,可能導致程序編寫量大很多,冗長的程序代碼也會給程序出錯時的檢查帶來極大的麻煩。過去編寫程序,都是書上的題目,完成題目就算目標達成。而此次程序設計我需要完成的是一個完完整整有很強使用行的程序。因而首次讓我注意到界面的問題,不僅僅需要編寫出能夠正常運行的程序,還需要給使用者一個清爽的、易操作的界面。為了達到清爽的界面,得不斷觀察程序運行界面,不斷調(diào)試,達到最佳顯示效果;為了達到一操作性,必需添加一系列判斷語句同時伴隨相應的輸出語句給使用者提示。這些,都是過去C語言練習中涉及不多的。這次設計的程序包含了大量的獨立模塊,在編寫過程中運用了逐個模塊單獨編寫,單獨測試,最終聚合到一起調(diào)試的思路。這種思路以前大學計算機基礎課和C語言課都講到過,但由于所編寫的程序往往比較簡單,過去并未應用。而此次課程設計運用到了這種思想,我也感受到了這種思想的先進性,大大提高了工作效率??傊?,在這次課程設計中我受益匪淺,我不僅掌握了過去并未掌握的知識,同時將很多以前隨聽說卻不曾使用過的思想付諸實踐。也體會到調(diào)試程序的重要性,從調(diào)試中我們可以發(fā)現(xiàn)很多很多編寫時所未曾注意的問題。C語言這門課,是教我們?nèi)绾尉帉懗绦?,絕非僅僅會解答C語言題目,從編寫程序過程中,我感受到還要注重程序界面的外觀與可操作性。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!