版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p><b> 說 明 書</b></p><p> 學(xué) 院: </p><p> 班 級(jí):
2、 </p><p> 完 成 人:姓 名: 學(xué) 號(hào): </p><p> 姓 名: 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p>
3、<p> 一、課程設(shè)計(jì)題目: 學(xué)生成績管理 </p><p> 二、課程設(shè)計(jì)應(yīng)解決的主要問題:</p><p> (1) 從鍵盤輸入學(xué)生數(shù)據(jù) </p><p> ?。?) 顯示所有學(xué)生成績
4、 </p><p> (3) 查詢學(xué)生成績 </p><p> ?。?) 在末尾增加學(xué)生 <
5、/p><p> ?。?) 在輸入學(xué)號(hào)的位置的后面插入學(xué)生 </p><p> ?。?) 按學(xué)號(hào)刪除學(xué)生 </p><p> (7) 顯示不及格學(xué)生成績
6、 </p><p> ?。?) 按總成績排序并輸出成績 </p><p> (9) 保存所有學(xué)生信息 </p><p> ?。?0) 拷貝所有學(xué)生
7、信息到文件中 </p><p> (11) 退出成績管理系統(tǒng) </p><p> 三、任務(wù)發(fā)出日期: 2012-9-4 課程設(shè)計(jì)完成日期: 2010-12-8 </p><p>&l
8、t;b> 小組分工說明</b></p><p> 小組編號(hào) 9 題 目: 學(xué)生成績管理 </p><p><b> 小組分工情況:</b></p><p> 整體構(gòu)思由兩人共同完成。</p><p>
9、XXX:追加學(xué)生函數(shù)StudentScore *Add_new(),插入學(xué)生函數(shù)void *Insert(),刪除學(xué)生函數(shù)void Delete(),查找學(xué)生函數(shù)void Search(),拷貝鏈表中的數(shù)據(jù)函數(shù)StudentScore *Copy(),保存學(xué)生信息函數(shù)void Preserve(),main()函數(shù)。</p><p> YY:從鍵盤輸入學(xué)生成績函數(shù)StudentScore *Input(),顯示
10、學(xué)生成績函數(shù)void Show(),顯示拷貝學(xué)生成績函數(shù)void Showcopy(),按總成績排序函數(shù)void Compositor(),顯示不及格學(xué)生成績函數(shù)void Fail()。</p><p> 課程設(shè)計(jì)說明書由XXX完成。</p><p> 組長簽字: </p><p> 2012 年 12 月 8 日</p>
11、<p> 指導(dǎo)教師對(duì)課程設(shè)計(jì)的評(píng)價(jià)</p><p> 成績: </p><p> 指導(dǎo)教師簽字: </p><p> 年 月 日 </p><p><b> 目 錄</b></p><p>
12、1.需求分析說明…………….………………………4</p><p> 2.概要設(shè)計(jì)說明.........................................................4</p><p> 3.詳細(xì)設(shè)計(jì)說明…………………………………….6</p><p> 4.調(diào)試分析…………………………..……………..9</
13、p><p> 5.用戶使用說明及測試結(jié)果 ………………….…….10</p><p> 6.課程設(shè)計(jì)總結(jié) ……………………...……….…….15</p><p> 7.參考書目 ………………………..…………..…….16</p><p> 8.附:程序代碼 …………………………………….16</p><p&
14、gt;<b> 需求分析說明</b></p><p><b> 1.需求分析</b></p><p> 為了提高學(xué)生信息的管理效率,方便對(duì)學(xué)生信息進(jìn)行管理、學(xué)校里面的學(xué)生和管理員方便去管理和查詢學(xué)生信息,如果要進(jìn)行查詢,就得在眾多的學(xué)生信息中查找自己的成績信息,面對(duì)學(xué)院大量的學(xué)生信息,怎么可以即時(shí)而方便的管理,建立一個(gè)學(xué)生成績管理系統(tǒng),學(xué)生
15、只要登錄本系統(tǒng)就可以查找到自己的成績信息,而管理員也方便去管理每學(xué)期的學(xué)生的成績信息。使學(xué)生信息管理工作規(guī)范化,系統(tǒng)化,程序化,提高信息處理的速度和準(zhǔn)確性,能夠及時(shí)、準(zhǔn)確、有效的查詢和管理學(xué)生信息。</p><p> 建立學(xué)生成績管理系統(tǒng)可使學(xué)院教職員工減輕工作壓力,比較系統(tǒng)地對(duì)教務(wù)、教學(xué)上的各項(xiàng)服務(wù)和信息進(jìn)行管理,同時(shí),可以減少勞動(dòng)力的使用,加快查詢速度、加強(qiáng)管理,使各項(xiàng)管理更加規(guī)范化。學(xué)生成績管理系統(tǒng)主要提
16、供成績查詢,學(xué)生可以通過該系統(tǒng)查閱與自己相關(guān)信息,管理員可以通過成績管理系統(tǒng)查閱學(xué)生成績信息。</p><p><b> 2. 功能分析</b></p><p> “學(xué)生成績管理系統(tǒng)”實(shí)現(xiàn)的功能包括:輸入學(xué)生信息,輸出學(xué)生信息,按姓名查找并顯示學(xué)生信息,按學(xué)號(hào)查找并顯示學(xué)生信息,添加學(xué)生信息,插入學(xué)生信息,按學(xué)號(hào)刪除該學(xué)生信息,按總成績排序并輸出成績,顯示不及格學(xué)
17、生信息,拷貝所有學(xué)生信息,保存學(xué)生信息,退出管理系統(tǒng)。</p><p> 本系統(tǒng)根據(jù)學(xué)生成績管理的需要,而建立一個(gè)“學(xué)生成績管理系統(tǒng)”,以方便對(duì)成績的各項(xiàng)管理操作。本系統(tǒng)能對(duì)成績進(jìn)行輸入和輸出;能按總成績對(duì)學(xué)生進(jìn)行排序,并顯示學(xué)生成績等,不過得以系統(tǒng)輸入學(xué)生資料、成績?yōu)榍疤?;能添加學(xué)生成績資料;能根據(jù)學(xué)生的姓名和學(xué)號(hào)來查詢?cè)搶W(xué)生的成績信息,或是刪除該學(xué)生信息;能把對(duì)系統(tǒng)所進(jìn)行的操作進(jìn)行備份,保存,以及時(shí)更新系統(tǒng)
18、中的數(shù)據(jù)。這些模塊既相互聯(lián)系又相互獨(dú)立。</p><p><b> 概要設(shè)計(jì)說明</b></p><p><b> 系統(tǒng)總體框架</b></p><p> 學(xué)生成績的結(jié)構(gòu)體類型定義為:</p><p> typedef struct StudentScore</p><p
19、><b> {</b></p><p> int stunum; // 學(xué)生學(xué)號(hào)</p><p> char stuname[20]; // 學(xué)生姓名</p><p> float score1; // 語文成績</p><p> float score2;
20、 // 數(shù)學(xué)成績</p><p> float score3; // 英語成績</p><p> float sum; // 總成績</p><p> struct StudentScore *next;</p><p> } StudentScore;</p><p> Studen
21、tScore *head=(StudentScore*)malloc(sizeof(StudentScore));</p><p> // 定義一個(gè)單鏈表頭結(jié)點(diǎn)并申請(qǐng)結(jié)點(diǎn)空間</p><p> StudentScore *headcopy=(StudentScore*)malloc(sizeof(StudentScore));</p><p> // 定義另一
22、個(gè)單鏈表頭結(jié)點(diǎn)并申請(qǐng)結(jié)點(diǎn)空間</p><p> int n=0; // 定義全局變量n,用以對(duì)學(xué)生人數(shù)計(jì)數(shù) </p><p><b> 函數(shù)及功能:</b></p><p> StudentScore *Input(); // 從鍵盤輸入學(xué)生成績</p><p> void Show(); / /顯示
23、學(xué)生成績</p><p> void Showcopy(); // 顯示拷貝學(xué)生成績</p><p> StudentScore *Add_new(); // 在鏈表末尾追加學(xué)生</p><p> void *Insert(); // 插入學(xué)生</p><p> void Delete(); // 根據(jù)用戶輸入的學(xué)號(hào)
24、刪除該學(xué)生</p><p> void Search(); // 按學(xué)號(hào)或姓名查找學(xué)生</p><p> void Compositor(); // 按總成績排序</p><p> void Fail(); // 顯示不及格學(xué)生成績</p><p> StudentScore *Copy(); // 拷貝鏈表中的數(shù)據(jù)&l
25、t;/p><p> void Preserve(); // 保存學(xué)生信息</p><p><b> 詳細(xì)設(shè)計(jì)說明</b></p><p> 主菜單包含在主函數(shù)里面,首先出現(xiàn)一個(gè)界面。</p><p> printf("\n\t\t* * * * * 學(xué)生成績管理系統(tǒng)* * * * * * * *\n&qu
26、ot;);</p><p> printf("\t\t*\t1.從鍵盤輸入學(xué)生數(shù)據(jù)\t\t*\n");</p><p> printf("\t\t*\t2.顯示學(xué)生成績\t\t\t*\n");</p><p> printf("\t\t*\t3.查詢學(xué)生成績\t\t\t*\n");</p>
27、<p> printf("\t\t*\t4.追加學(xué)生\t\t\t*\n");</p><p> printf("\t\t*\t5.插入學(xué)生\t\t\t*\n");</p><p> printf("\t\t*\t6.按學(xué)號(hào)刪除學(xué)生\t\t*\n");</p><p> printf(&
28、quot;\t\t*\t7.顯示不及格學(xué)生成績\t\t*\n");</p><p> printf("\t\t*\t8.按總成績排序并輸出成績\t*\n");</p><p> printf("\t\t*\t9.保存所有學(xué)生信息\t\t*\n");</p><p> printf("\t\t*\t10
29、.拷貝所有學(xué)生信息\t\t*\n");</p><p> printf("\t\t*\t0.退出成績管理系統(tǒng)\t\t*\n");</p><p> printf("\t\t* * * * * * * * * * * * * * * * * * * *\n\n");</p><p> printf("
30、請(qǐng)輸入你要執(zhí)行的操作:");</p><p> 下面是main( )的調(diào)用</p><p><b> {</b></p><p><b> case 1:</b></p><p><b> Input();</b></p><p>
31、Show(); break;</p><p><b> case 2:</b></p><p> Show(); break; </p><p><b> case 3:</b></p><p> Search();break;</p><p>&
32、lt;b> case 4:</b></p><p> Add_new(); break; </p><p><b> case 5:</b></p><p> Insert();break; </p><p><b> case 6:</b><
33、/p><p> Delete();break;</p><p><b> case 7:</b></p><p> Fail(); break;</p><p><b> case 8:</b></p><p> Compositorw(); break;</p&
34、gt;<p><b> case 9:</b></p><p> Preserve(); break;</p><p><b> case 10:</b></p><p> Copy(); break;</p><p><b> case 0:</b>
35、</p><p> system("pause"); return 0; </p><p><b> }</b></p><p> (1)輸入學(xué)生信息模塊:</p><p> 是通過Input() 和Show()兩個(gè)函數(shù)來實(shí)現(xiàn)的。</p><p> 主要功
36、能用來對(duì)學(xué)生的成績進(jìn)行輸入。在學(xué)生信息保存在系統(tǒng)中的前提下,成績錄入需要輸入學(xué)生信息,比如學(xué)號(hào),姓名。在準(zhǔn)確輸入學(xué)生信息后,就可以對(duì)該學(xué)生的各科成績進(jìn)行錄入。該學(xué)生各科成績輸入成功后,系統(tǒng)會(huì)提示是否繼續(xù)進(jìn)行操作,如果想繼續(xù)輸入學(xué)生成績就繼續(xù)輸入學(xué)生的學(xué)號(hào),不想再輸入學(xué)生成績的話就輸入0,輸入0之后會(huì)輸出一下當(dāng)前所有學(xué)生信息,因?yàn)樵谳斎胫笳{(diào)用了一下輸出函數(shù),并且統(tǒng)計(jì)輸入學(xué)生的總?cè)藬?shù)。然后按任意鍵返回主菜單?! ?lt;/p>&
37、lt;p> (2)輸出學(xué)生信息模塊:</p><p> 是通過Show()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能用來對(duì)學(xué)生的成績進(jìn)行輸出。在系統(tǒng)已經(jīng)錄入了學(xué)生信息的前提下,使用該功能可以顯示所有學(xué)生的信息。具體包括學(xué)生的學(xué)號(hào),姓名,各科成績,總成績和平均成績。在查看學(xué)生的成績等各方面的信息后,按任意鍵就可以返回到主菜單。</p><p> ?。?)查找
38、并顯示學(xué)生信息模塊:</p><p> 是通過Search()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來查找學(xué)生資料。在系統(tǒng)保存了某學(xué)生資料的前提下,查找該學(xué)生資料。在主菜單進(jìn)入查找后,會(huì)有子菜單,根據(jù)子菜單選擇1按學(xué)號(hào)查找,或者選擇2按姓名查找,或者選擇0退出查找。輸入該學(xué)生學(xué)號(hào)或者姓名后,系統(tǒng)就會(huì)顯示該學(xué)生學(xué)號(hào),姓名,各科成績,總成績和平均成績。根據(jù)提示繼續(xù)輸入學(xué)號(hào)或姓名將繼續(xù)
39、查找,第一次輸入0表示結(jié)束按學(xué)號(hào)或姓名查找第二次輸入0表示結(jié)束查找,然后按任意鍵即可返回主菜單。</p><p> (4) 追加學(xué)生模塊:</p><p> 是通過Add_new()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來在鏈表末尾添加學(xué)生信息。在主菜單中進(jìn)入次模塊后就可增加學(xué)生了,輸入學(xué)生學(xué)號(hào),姓名,各科成績等。在成功添加學(xué)生信息后,就可以對(duì)該學(xué)生進(jìn)行
40、其他的操作。增加一個(gè)節(jié)點(diǎn)t,t中存放追加學(xué)生的信息,將t連接到最后一個(gè)結(jié)點(diǎn)后邊,t->next=NULL。</p><p> (5)插入學(xué)生信息模塊:</p><p> 是通過Insert()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來插入學(xué)生信息。進(jìn)入此模塊后,用戶先輸入要插入位置的前一個(gè)學(xué)號(hào),系統(tǒng)自動(dòng)找到輸入的學(xué)號(hào)之后,用戶就可進(jìn)行輸入要插入學(xué)生的
41、信息。繼續(xù)輸入學(xué)號(hào)將繼續(xù)插入,輸入0表示結(jié)束插入。在成功插入學(xué)生信息后,就可以對(duì)該學(xué)生進(jìn)行其他的操作。</p><p> ?。?)刪除學(xué)生信息模塊:</p><p> 是通過Delete()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來刪除學(xué)生信息。在系統(tǒng)保存學(xué)生信息的前提下,想刪除某學(xué)生的信息,可以輸入學(xué)生的學(xué)號(hào),系統(tǒng)查找到該學(xué)生學(xué)號(hào)后,先顯示一下該學(xué)生的信息
42、和成績,就成功刪除了。由于學(xué)生輟學(xué),畢業(yè)等原因,及時(shí)對(duì)系統(tǒng)進(jìn)行更新,刪除一些沒用的信息,可以使系統(tǒng)更加優(yōu)化。</p><p> (7) 顯示不及格學(xué)生成績:</p><p> 是通過Fail()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能用來對(duì)不及格學(xué)生的成績進(jìn)行輸出。在系統(tǒng)已經(jīng)錄入了學(xué)生信息的前提下,使用該功能可以顯示不及格學(xué)生的信息(只要有一科成績不及格,就認(rèn)
43、為該生不及格)。具體也包括學(xué)生的學(xué)號(hào),姓名,各科成績,總成績和平均成績,并且統(tǒng)計(jì)不及格學(xué)生的人數(shù)。</p><p> (8)按總成績排序并輸出成績:</p><p> 是通過Compositor()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來對(duì)學(xué)生的總成績進(jìn)行排序。在系統(tǒng)保存學(xué)生信息和成績的前提下,使用此功能可以對(duì)學(xué)生的總成績進(jìn)行排序,這樣就方便查看學(xué)生的總
44、體成績情況。p=head->next,利用冒泡排序的思想,q結(jié)點(diǎn)中的總成績依次和其后邊結(jié)點(diǎn)r中的總成績進(jìn)行比較,若有(q->sum)<(r->sum),則交換一下結(jié)點(diǎn)中的信息,兩層for循環(huán)實(shí)現(xiàn)排序。</p><p> ?。?)保存所有學(xué)生信息模塊:</p><p> 是通過Preserve()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用
45、來儲(chǔ)存學(xué)生信息。在對(duì)系統(tǒng)進(jìn)行一系列操作,比如輸入、追加、插入、刪除、排序等,將學(xué)生信息保存在名為studentscore的文本文檔中。對(duì)系統(tǒng)的最新操作進(jìn)行保存,及時(shí)更新系統(tǒng)信息,方便下一次的操作。</p><p> ?。?0)拷貝所有學(xué)生信息:</p><p> 是通過Copy()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是用來拷貝學(xué)生信息。在系統(tǒng)已經(jīng)錄入了學(xué)生信
46、息的前提下,或者在對(duì)系統(tǒng)進(jìn)行一系列操作,比如輸入、追加、插入、刪除、排序等之后,將學(xué)生信息拷貝一遍。</p><p> ?。?1)保存學(xué)生信息并退出系統(tǒng)模塊:</p><p> 是通過Preserve()函數(shù)實(shí)現(xiàn)的。</p><p> 主要功能是退出學(xué)生成績管理系統(tǒng)。在退出學(xué)生成績管理系統(tǒng)之前先先自動(dòng)保存一下學(xué)生信息。這樣就避免在進(jìn)行一系列操作,比如添加、插入、
47、刪除、排序等之后,退出系統(tǒng)而忘記保存的情況。</p><p><b> 調(diào)試分析</b></p><p><b> 我遇到的問題:</b></p><p><b> 1.刪除模塊:</b></p><p> 我輸入一個(gè)要?jiǎng)h除的學(xué)號(hào),顯示刪除成功!但輸出一下刪除學(xué)生的信息
48、,輸出的學(xué)生的學(xué)號(hào)和姓名是亂碼。</p><p> 解決問題:顯示一下當(dāng)前所有學(xué)生信息,發(fā)現(xiàn)刪除成功。再檢查輸出,檢查指針指向的學(xué)號(hào)和姓名變量,發(fā)現(xiàn)沒有錯(cuò)誤;重新檢查整個(gè)函數(shù),發(fā)現(xiàn)錯(cuò)誤原因是我在free(q)(q是要?jiǎng)h除的結(jié)點(diǎn))之后輸出的被刪除學(xué)生的信息。結(jié)點(diǎn)已經(jīng)釋放掉了,所以不知道q指的會(huì)是什么。</p><p> 2. 按總成績排序模塊:</p><p>
49、 輸入幾個(gè)學(xué)生后,選擇按總成績排序,發(fā)現(xiàn)輸出的是原來的順序,根本沒排序。</p><p> 解決問題:利用printf發(fā)現(xiàn)進(jìn)入了if循環(huán),但是輸出的卻是沒排序的成績。仔細(xì)分析指針的指向,值交換了但指針的指向不對(duì)。最終我決定利用指針不動(dòng),只交換值的方法。改完之后發(fā)現(xiàn)學(xué)號(hào),姓名和各科成績交換了總成績和平均成績卻沒交換,仔細(xì)檢查覺得函數(shù)沒問題就是不知道為什么。通過向同學(xué)請(qǐng)教后來才發(fā)現(xiàn)程序運(yùn)行過程中沒進(jìn)入我寫的排序函數(shù)
50、,而是調(diào)用了我電腦中其他程序的排序函數(shù)。最后換了一個(gè)路徑才解決了這個(gè)問題。</p><p><b> 3.查找模塊:</b></p><p> 此模塊包括按學(xué)號(hào)查找和按姓名查找,我選擇按學(xué)號(hào)查詢完之后還想按姓名查找,但是程序沒有進(jìn)行查找,一直出現(xiàn)“1、按學(xué)號(hào)查詢;2、按姓名查詢;0、我不查詢了?!弊謽?。</p><p> 解決問題:通過測
51、試發(fā)現(xiàn)沒進(jìn)入按姓名查找循環(huán),檢查所編寫的程序代碼是否完全正確,通過重新一點(diǎn)一點(diǎn)改寫程序代碼,一遍一遍測試,最終解決了這個(gè)問題。</p><p><b> 4.保存模塊:</b></p><p> 我已經(jīng)輸入了學(xué)生信息,保存時(shí)為讀寫建立一個(gè)新的文本文檔studentscore.txt,但仍出現(xiàn)“文件不存在”字樣。</p><p> 解決問題
52、:我把if((fp=fopen("studentscore.txt","w+"))==NULL);語句改成fp=fopen("studentscore.txt","w+"); if(!fp)后就能成功保存。后一種寫法是先建立一個(gè)studentscore.txt文本文檔,然后將學(xué)生信息寫進(jìn)去。</p><p> 用戶使用說明及測試結(jié)果
53、</p><p> 運(yùn)行程序,首先進(jìn)入的是學(xué)生成績管理系統(tǒng)主菜單界面,如圖1所示,根據(jù)菜單上的提示選擇相應(yīng)的序號(hào)進(jìn)行操作。</p><p> 圖1 學(xué)生成績管理系統(tǒng)主菜單界面</p><p> 當(dāng)用戶選擇1后,開始輸入學(xué)生信息,輸入學(xué)號(hào),姓名,語文,數(shù)學(xué)和英語成績,當(dāng)學(xué)號(hào)輸入為0時(shí)結(jié)束輸入,輸出一下當(dāng)前所有學(xué)生的信息,如圖2所示。</p>&l
54、t;p> 圖2 輸入學(xué)生信息并顯示學(xué)生信息</p><p> 當(dāng)用戶選擇3后,會(huì)出現(xiàn)“1、按學(xué)號(hào)查詢;2、按姓名查詢;0、我不查詢了?!钡淖硬藛危?選擇按學(xué)號(hào)查詢,按2選擇按姓名查詢,輸入正確的學(xué)號(hào)或姓名后會(huì)輸出相應(yīng)的學(xué)生成績,如圖3所示。輸入0退出查詢子菜單,再輸入0退出查詢,再按任意鍵返回到主菜單界面。</p><p> 圖3 查找學(xué)生并輸出學(xué)生成績</p>
55、;<p> 用戶選擇4后,追加一個(gè)學(xué)生,輸入要追加學(xué)生的信息后,輸入0 結(jié)束輸入,顯示一下當(dāng)前學(xué)生成績表,如圖4所示。</p><p> 圖4 追加學(xué)生并輸出追加后的學(xué)生成績表</p><p> 用戶選擇6后,輸入要?jiǎng)h除學(xué)生的學(xué)號(hào)后顯示一下刪除學(xué)生的信息,如圖5所示。</p><p> 圖5 刪除學(xué)生并顯示要?jiǎng)h除學(xué)生的信息</p&g
56、t;<p> 刪除學(xué)生成功后,回到主菜單,按2顯示當(dāng)前學(xué)生成績表,如圖6所示。</p><p> 圖6 刪除后的學(xué)生成績表</p><p> 用戶選擇5后,插入學(xué)生信息并輸出當(dāng)前學(xué)生成績表,如圖7所示。</p><p> 圖7 插入后的學(xué)生成績表</p><p> 用戶選擇8后,系統(tǒng)將按當(dāng)前所有學(xué)生的總成績進(jìn)行排序
57、,并輸出排序后的學(xué)生成績表,如圖8所示。</p><p> 圖8 排序后的學(xué)生成績表</p><p> 課程設(shè)計(jì)總結(jié) </p><p> 在我和我的搭檔的共同努力下,我們最終完成了對(duì)此程序的編譯及試運(yùn)行。通過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),使我對(duì)程序的設(shè)計(jì)有了一個(gè)比較深刻的了解。</p><p> 首先是要設(shè)計(jì)整個(gè)程序的框架,確定各個(gè)
58、功能函數(shù);然后一個(gè)個(gè)具體地對(duì)他們進(jìn)行編程,并且仔細(xì)檢查看是否有錯(cuò);在完成這一步之后才開始構(gòu)造主函數(shù),通過主函數(shù)把各個(gè)功能函數(shù)聯(lián)系起來,編譯修改錯(cuò)誤和不足之處。</p><p> 在實(shí)際編程過程中會(huì)遇到很多不同的錯(cuò)誤,經(jīng)過很多次的修改與調(diào)試,有時(shí)候是一些很明顯很細(xì)節(jié)的語法錯(cuò)誤,這些可以通過編譯來查找錯(cuò)誤的所在,然而那些并不明顯難以查找的隱性錯(cuò)誤真讓人頭痛,只好利用斷點(diǎn)調(diào)試來一步步檢查代碼中的錯(cuò)誤,這樣為了找一個(gè)錯(cuò)
59、誤花費(fèi)了大量的時(shí)間,但是找出錯(cuò)誤之后會(huì)讓我記憶尤為深刻。</p><p> 在做這個(gè)課程設(shè)計(jì)的時(shí)候,涉及到很多學(xué)過的內(nèi)容,比如鏈表的插入、刪除操作,再比如把鏈表中的數(shù)據(jù)保存到文件中等等,因此我們就得翻書重新看他們的用法。這樣不僅把以前學(xué)過的知識(shí)重新復(fù)習(xí)一遍,還能有效的把那些零散的知識(shí)點(diǎn)相結(jié)合,并運(yùn)用。同時(shí)也學(xué)到了一些沒學(xué)過的知識(shí),讓我從中受益匪淺。熟悉了一些基本操作和解決問題的方法。</p>&l
60、t;p> 總之,此次學(xué)生成績管理系統(tǒng)的設(shè)計(jì)給我們提供了一個(gè)既動(dòng)手又動(dòng)腦、自學(xué)、獨(dú)立實(shí)踐的機(jī)會(huì),使我們養(yǎng)成了勤翻閱各種相關(guān)資料的習(xí)慣,將書本上的理論知識(shí)和實(shí)際有機(jī)地結(jié)合起來,鍛煉了實(shí)際分析問題和解決問題的能力,提高了適應(yīng)實(shí)際、實(shí)踐編程的能力,為今后的學(xué)習(xí)和實(shí)踐打下了良好的基礎(chǔ)。</p><p><b> 參考書目</b></p><p> [1] 數(shù)據(jù)結(jié)構(gòu)
61、(c語言版),嚴(yán)蔚敏 吳偉民,清華大學(xué)出版社</p><p> [2] 程序設(shè)計(jì)基礎(chǔ)——基于c語言,孫承愛 趙衛(wèi)東,科學(xué)出版社</p><p> [3] 數(shù)據(jù)結(jié)構(gòu)經(jīng)典算法實(shí)現(xiàn)與習(xí)題解答,汪杰,人民郵電出版社</p><p> [4] 數(shù)據(jù)結(jié)構(gòu)與算法(c語言版),郭龍?jiān)?胡虛懷 何光明,清華大學(xué)出版社</p><p><b&g
62、t; 附:程序代碼</b></p><p> #include<stdio.h></p><p> #include <stdlib.h></p><p> #include<string.h></p><p> typedef struct StudentScore</p>
63、;<p><b> {</b></p><p> int stunum; //學(xué)生學(xué)號(hào)</p><p> char stuname[20]; //學(xué)生姓名</p><p> float score1; //語文成績</p><p> float score2; //數(shù)學(xué)
64、成績</p><p> float score3; //英語成績</p><p> float sum; //總成績</p><p> struct StudentScore *next;</p><p> } StudentScore;</p><p> StudentScore *h
65、ead=(StudentScore*)malloc(sizeof(StudentScore));</p><p> //定義頭結(jié)點(diǎn)并申請(qǐng)結(jié)點(diǎn)空間</p><p> StudentScore *headcopy=(StudentScore*)malloc(sizeof(StudentScore));</p><p> int n=0; //定義全局變量n,用
66、以對(duì)學(xué)生人數(shù)計(jì)數(shù)</p><p><b> //函數(shù)聲明</b></p><p> StudentScore *Input();</p><p> void Show();</p><p> void Showcopy();</p><p> StudentScore *Add_new(
67、);</p><p> void *Insert();</p><p> void Delete();</p><p> void Search();</p><p> void Compositor();</p><p> void Fail();</p><p> Student
68、Score *Copy();</p><p> void Preserve();</p><p> /*****從鍵盤輸入學(xué)生成績*****/</p><p> StudentScore *Input()</p><p><b> {</b></p><p> int number;&l
69、t;/p><p> StudentScore *p1, *p2;</p><p> head=(StudentScore*)malloc(sizeof(StudentScore)); //分配空間</p><p><b> p2=head;</b></p><p> printf("\n請(qǐng)輸入第%d名
70、學(xué)生的學(xué)號(hào),學(xué)號(hào)為0表示結(jié)束輸入:",n+1);</p><p> scanf("%d",&number);</p><p> while(getchar()!='\n');</p><p> for(; number;)</p><p><b> {</b>
71、</p><p><b> n++;</b></p><p> p1=(StudentScore*)malloc(sizeof(StudentScore));</p><p> p1->stunum=number;</p><p> printf("請(qǐng)輸入第%d名學(xué)生的姓名:",n);&
72、lt;/p><p> scanf("%s",p1->stuname);</p><p> printf("請(qǐng)輸入第%d名學(xué)生的語文成績:",n);</p><p> scanf("%f",&p1->score1);</p><p> printf("
73、請(qǐng)輸入第%d名學(xué)生的數(shù)學(xué)成績:",n);</p><p> scanf("%f",&p1->score2);</p><p> printf("請(qǐng)輸入第%d名學(xué)生的英語成績:",n);</p><p> scanf("%f",&p1->score3);</p
74、><p> p1->sum=p1->score1+p1->score2+p1->score3;</p><p> p2->next=p1;</p><p><b> p2=p1;</b></p><p> printf("\n請(qǐng)輸入第%d名學(xué)生的學(xué)號(hào),沒有此學(xué)生則輸入0表示結(jié)束
75、:",n+1);</p><p> scanf("%d",&number);</p><p><b> }</b></p><p> p2->next=NULL;</p><p> printf("\n\n");</p><p&g
76、t; return (head);</p><p><b> }</b></p><p> /*****顯示學(xué)生成績*****/</p><p> void Show()</p><p><b> {</b></p><p> StudentScore *p;&l
77、t;/p><p> p=head->next;</p><p> if(p==NULL)</p><p><b> {</b></p><p> printf("\n\n此系統(tǒng)目前沒有任何學(xué)生數(shù)據(jù)!\n\n\n");</p><p><b> return
78、;</b></p><p><b> }</b></p><p> printf("目前共有學(xué)生%d名:\n",n);</p><p> printf("* * * * * * * * *學(xué)生成績統(tǒng)計(jì)一覽* * * * * * * * *\n\n");</p><p&
79、gt; printf("學(xué)號(hào)\t姓名\t語文成績\t數(shù)學(xué)成績\t英語成績\t總分\t平均分\n");</p><p> for(; p; p=p->next)</p><p><b> {</b></p><p> printf("%d\t",p->stunum);</p>
80、<p> printf("%s\t",p->stuname);</p><p> printf("%.1f\t\t",p->score1);</p><p> printf("%.1f\t\t",p->score2);</p><p> printf("%.
81、1f\t\t",p->score3);</p><p> printf("%.1f\t",p->sum);</p><p> printf("%.1f\n",(p->sum)/3);</p><p><b> }</b></p><p><b
82、> }</b></p><p> /*****顯示拷貝學(xué)生成績*****/</p><p> void Showcopy()</p><p><b> {</b></p><p> StudentScore *p;</p><p> p=headcopy->ne
83、xt;</p><p> if(p==NULL)</p><p><b> {</b></p><p> printf("\n\n此系統(tǒng)目前沒有任何學(xué)生數(shù)據(jù)!\n\n\n");</p><p><b> return;</b></p><p>&l
84、t;b> }</b></p><p> printf("目前共有學(xué)生%d名:\n",n);</p><p> printf("* * * * * * * * *學(xué)生成績統(tǒng)計(jì)一覽* * * * * * * * *\n\n");</p><p> printf("學(xué)號(hào)\t姓名\t語文成績\t數(shù)學(xué)
85、成績\t英語成績\t總分\t平均分\n");</p><p> for(; p; p=p->next)</p><p><b> {</b></p><p> printf("%d\t",p->stunum);</p><p> printf("%s\t&quo
86、t;,p->stuname);</p><p> printf("%.1f\t\t",p->score1);</p><p> printf("%.1f\t\t",p->score2);</p><p> printf("%.1f\t\t",p->score3);</p&
87、gt;<p> printf("%.1f\t",p->sum);</p><p> printf("%.1f\n",(p->sum)/3);</p><p><b> }</b></p><p><b> }</b></p><p
88、> /*****追加學(xué)生*****/</p><p> StudentScore *Add_new()</p><p><b> {</b></p><p> StudentScore *p,*t;</p><p> int number;</p><p> printf(&qu
89、ot;\n\n請(qǐng)輸入你要追加學(xué)生的學(xué)號(hào),學(xué)號(hào)為0表示結(jié)束輸入:");</p><p> scanf("%d",&number);</p><p> while(getchar()!='\n');</p><p> for(; number;)</p><p><b> {
90、</b></p><p> t=(StudentScore*)malloc(sizeof(StudentScore));</p><p> t->stunum=number;</p><p> printf("請(qǐng)輸入新加入學(xué)生的姓名:");</p><p> scanf("%s"
91、;,t->stuname);</p><p> printf("請(qǐng)輸入新加入學(xué)生的語文成績:");</p><p> scanf("%f",&t->score1);</p><p> printf("請(qǐng)輸入新加入學(xué)生的數(shù)學(xué)成績:");</p><p> s
92、canf("%f",&t->score2);</p><p> printf("請(qǐng)輸入第%d名學(xué)生的英語成績:",n);</p><p> scanf("%f",&t->score3);</p><p> t->sum=t->score1+t->score
93、2+t->score3;</p><p><b> p=head;</b></p><p> while(p->next)</p><p><b> {</b></p><p> p=p->next;</p><p><b> }<
94、/b></p><p> p->next=t;</p><p> t->next=NULL;</p><p><b> n++;</b></p><p> printf("\n請(qǐng)輸入還要追加學(xué)生的學(xué)號(hào),沒有此學(xué)生則輸入0表示結(jié)束:");</p><p>
95、; scanf("%d",&number);</p><p><b> }</b></p><p> printf("追加后的成績表為:\n");</p><p><b> Show();</b></p><p> return(head);
96、</p><p><b> }</b></p><p> /*****根據(jù)位置的前一個(gè)學(xué)號(hào)插入學(xué)生*****/</p><p> void *Insert()</p><p><b> {</b></p><p> StudentScore *s,*p;</p
97、><p> int flag; //flag是插入位置的前一個(gè)學(xué)號(hào),</p><p> printf("\n\n請(qǐng)輸入你要插入位置的前一個(gè)學(xué)生的學(xué)號(hào),學(xué)號(hào)為0表示結(jié)束插入:");</p><p> scanf("%d",&flag);</p><p> while(get
98、char()!='\n');</p><p><b> for(;;)</b></p><p><b> {</b></p><p> if (flag==0)</p><p><b> {</b></p><p> print
99、f("\n你選擇了不插入!\n");</p><p><b> break;</b></p><p><b> }</b></p><p> for(p=head->next; p!=NULL&&p->stunum!=flag; p=p->next);</p
100、><p><b> if(!p)</b></p><p><b> {</b></p><p> printf("\n\n沒有你輸入的學(xué)號(hào),請(qǐng)重新輸入,輸入0 表示結(jié)束:");</p><p> scanf("%d",&flag);</p&g
101、t;<p><b> }</b></p><p> else if (p->stunum==flag)</p><p><b> {</b></p><p> s=(StudentScore *)malloc(sizeof(StudentScore));</p><p>
102、 printf("請(qǐng)輸入要插入學(xué)生的學(xué)號(hào):");</p><p> scanf("%d",&s->stunum); //不能寫成scanf("%d",&number);</p><p> printf("請(qǐng)輸入要插入學(xué)生的姓名:");</p><p
103、> scanf("%s",s->stuname);</p><p> printf("請(qǐng)輸入要插入學(xué)生的語文成績:");</p><p> scanf("%f",&s->score1);</p><p> printf("請(qǐng)輸入要插入學(xué)生的數(shù)學(xué)成績:")
104、;</p><p> scanf("%f",&s->score2);</p><p> printf("請(qǐng)輸入要插入學(xué)生的英語成績:");</p><p> scanf("%f",&s->score3);</p><p> s->sum=s-
105、>score1+s->score2+s->score3;</p><p> s->next=p->next; //先,</p><p> p->next=s; //后,先后不能顛倒</p><p><b> n++;</b></p><p> pr
106、intf("\n請(qǐng)輸入還要插入位置的前一個(gè)學(xué)生的學(xué)號(hào),輸入0表示結(jié)束插入:");</p><p> scanf("%d",&flag);</p><p><b> }</b></p><p><b> }</b></p><p> printf
107、("插入后的成績表為:\n");</p><p><b> Show();</b></p><p> return(head);</p><p><b> }</b></p><p> /*****根據(jù)用戶輸入的學(xué)號(hào)刪除該學(xué)生*****/</p><p
108、> void Delete()</p><p><b> {</b></p><p> int number;</p><p> StudentScore *p,*q;</p><p> int flag=0;</p><p> printf("\n請(qǐng)輸入要?jiǎng)h除的學(xué)
109、生學(xué)號(hào):");</p><p> scanf("%d",&number);</p><p><b> p=head;</b></p><p> q=head->next;</p><p><b> while(q)</b></p>&
110、lt;p><b> {</b></p><p> if(q->stunum==number)</p><p><b> {</b></p><p> p->next=q->next;</p><p> printf("要?jiǎng)h除的學(xué)生信息為:\n")
111、; //一定要先顯示,若在free(q)之后再顯示的話,就找不到刪除學(xué)生的數(shù)據(jù)了</p><p> printf("學(xué)號(hào)\t姓名\t語文成績\t數(shù)學(xué)成績\t英語成績\t總分\t平均分\n");</p><p> printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.1f\n",</p>&
112、lt;p> q->stunum,q->stuname,q->score1,q->score2,q->score3,q->sum,(q->sum)/3);</p><p><b> free(q);</b></p><p><b> flag=1;</b></p><p>
113、; n--; //不要忘了總數(shù)減1</p><p><b> break;</b></p><p><b> }</b></p><p> p=p->next;</p><p> q=q->next;</p><p><
114、b> }</b></p><p><b> if(!flag)</b></p><p><b> {</b></p><p> printf("不存在該學(xué)號(hào)的學(xué)生\n");</p><p><b> return;</b><
115、/p><p><b> }</b></p><p> printf("成功刪除!\n");</p><p><b> }</b></p><p> /*****按學(xué)號(hào)或姓名查找學(xué)生*****/</p><p> void Search()</p
116、><p><b> {</b></p><p> StudentScore *p;</p><p> int choose,number;</p><p> char tem[20];</p><p><b> if (n==0)</b></p><
117、p><b> {</b></p><p> printf("\n當(dāng)前系統(tǒng)沒有任何學(xué)生數(shù)據(jù)!\n ");</p><p><b> return;</b></p><p><b> }</b></p><p><b> for(;;)
118、</b></p><p><b> {</b></p><p> printf("\n請(qǐng)輸入您要查詢學(xué)生的方式:\n\n");</p><p> printf("1、按學(xué)號(hào)查詢;2、按姓名查詢;0、我不查詢了。\n\n");</p><p> printf(&q
119、uot;請(qǐng)選擇:");</p><p> scanf("%d",&choose);</p><p> while(getchar()!='\n');</p><p> if (choose==1)</p><p><b> {</b></p>&
120、lt;p> printf("\n請(qǐng)輸入你要查詢的學(xué)生的學(xué)號(hào),輸入0退出學(xué)號(hào)查詢:");</p><p> scanf("%d",&number);</p><p> for(; number;)</p><p><b> {</b></p><p> for
121、(p=head->next; p!=NULL&&p->stunum!=number; p=p->next);</p><p><b> if (!p)</b></p><p><b> {</b></p><p> printf("\n\n找不到你要查詢的學(xué)號(hào),請(qǐng)重新輸入,
122、輸入0表示結(jié)束:");</p><p> scanf("%d",&number);</p><p><b> }</b></p><p> else if (p->stunum==number)</p><p><b> {</b></p&g
123、t;<p> printf("\n學(xué)號(hào)為%d學(xué)生的數(shù)據(jù)為:\n",p->stunum);</p><p> printf("學(xué)號(hào)\t姓名\t語文成績\t數(shù)學(xué)成績\t英語成績\t總分\t平均分\n");</p><p> printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.
124、1f\n",</p><p> p->stunum,p->stuname,p->score1,p->score2,p->score3,p->sum,(p->sum)/3);</p><p> printf("\n\n請(qǐng)輸入你還要查詢的學(xué)生的學(xué)號(hào),輸入0表示不按學(xué)號(hào)查詢了:");</p><p&g
125、t; scanf("%d",&number);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> else if (choose==2)</p>
126、<p><b> {</b></p><p> printf("\n請(qǐng)輸入你要查詢的學(xué)生的姓名,輸入0退出姓名查詢:");</p><p> scanf("%s",tem);</p><p> p=head->next;</p><p> while(p
127、!=NULL)</p><p><b> {</b></p><p> if(strcmp(p->stuname,tem)==0)</p><p><b> {</b></p><p> printf("\n姓名為%s學(xué)生的數(shù)據(jù)為:\n",p->stuname
128、);</p><p> printf("學(xué)號(hào)\t姓名\t語文成績\t數(shù)學(xué)成績\t英語成績\t總分\t平均分\n");</p><p> printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t%.1f\n",</p><p> p->stunum,p->stuname,p-
129、>score1,p->score2,p->score3,p->sum,(p->sum)/3);</p><p> printf("\n\n請(qǐng)輸入你還要查詢的學(xué)生的姓名,輸入0表示不按姓名查詢了:");</p><p> scanf("%s",tem);</p><p><b> }
130、</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> }</b></p><p> else if (choose==0)</p><p><b> {</b><
131、;/p><p> printf("\n你選擇了不查詢!\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b>
132、 {</b></p><p> printf("\n你以其他方式選擇了不查詢!\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>
133、<p><b> }</b></p><p> /*****按總成績排序*****/</p><p> void Compositor()</p><p><b> {</b></p><p> StudentScore exchange,*p,*q,*r;</p>
134、<p> if(p==NULL)</p><p><b> {</b></p><p> printf("現(xiàn)在還沒學(xué)生信息,請(qǐng)先輸入學(xué)生信息\n");</p><p><b> return;</b></p><p><b> }</b>
135、;</p><p> for(p=head->next; p!=NULL; p=p->next) //用冒泡排序的方法,兩層for循環(huán)實(shí)現(xiàn)排序</p><p> for(q=head->next; q->next!=NULL; q=q->next)</p><p><b> {</b></p>
136、<p> r=q->next;</p><p> if((q->sum)<(r->sum)) //交換q結(jié)點(diǎn)和r結(jié)點(diǎn)中的信息</p><p><b> {</b></p><p> exchange.sum=r->sum; //先復(fù)制r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--學(xué)生成績管理
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---學(xué)生成績管理系統(tǒng)(部分)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-學(xué)生成績查詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---學(xué)生成績管理問題
- 數(shù)據(jù)結(jié)構(gòu)學(xué)生成績管理課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--成績管理
- 數(shù)據(jù)結(jié)構(gòu)之學(xué)生成績管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--學(xué)生成績管理程序的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論