精選文檔學(xué)生管理系統(tǒng)_第1頁(yè)
精選文檔學(xué)生管理系統(tǒng)_第2頁(yè)
精選文檔學(xué)生管理系統(tǒng)_第3頁(yè)
精選文檔學(xué)生管理系統(tǒng)_第4頁(yè)
精選文檔學(xué)生管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)報(bào)告需求分析構(gòu)建學(xué)生成績(jī)管理系統(tǒng),每個(gè)學(xué)生的信息為:基本信息(學(xué)號(hào)、姓名、年齡、性別),課程1(課程1、成績(jī)、教師),課程2(課程2、成績(jī)、教師)。采用Hash表加課程鏈表的結(jié)構(gòu):Hash表存放每個(gè)學(xué)生的基本信息,課程指針指向課程鏈表。程序應(yīng)有如下功能:(1)建立哈希表:輸入十個(gè)人的信息,哈希函數(shù)為H=(學(xué)號(hào)后三位)MOD11,用線性探測(cè)再散列的方法處理沖突(2)查詢(xún):顯示全部信息,可以實(shí)現(xiàn)按學(xué)號(hào)、姓名、性別、某年級(jí)全部課程、聽(tīng)某教師課的學(xué)生、選擇某門(mén)課程的學(xué)生查找(3)排序:按學(xué)號(hào)從小到大、按年齡從大到小、按學(xué)生總成績(jī)從大到小排序(4)統(tǒng)計(jì):可以實(shí)現(xiàn)統(tǒng)計(jì):男女生人數(shù)、個(gè)人平均成績(jī)和總成績(jī)、各年級(jí)平均年齡、各門(mén)課程的平均成績(jī)(5)系統(tǒng)維護(hù):可以實(shí)現(xiàn)插入、刪除、修改一個(gè)記錄的功能。演示程序以用戶(hù)和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)上顯示提示信息,由用戶(hù)進(jìn)行操作,顯示各種指標(biāo)值。測(cè)試數(shù)據(jù)見(jiàn)附錄。二、概要設(shè)計(jì)抽象數(shù)據(jù)定義:課程結(jié)構(gòu)體的定義:typedefstructClass{ charname[20]; intscore; charteacher[20]; Class*next;}Class,*ClassList;課程結(jié)構(gòu)體的定義學(xué)生信息結(jié)構(gòu)體的定義:typedefstruct{ charnumber[10]; charname[20]; intage; charsex[10]; structClass*classes;}Student;數(shù)據(jù)類(lèi)型的定義:structElemType{intkey;Studentstudent;};哈希結(jié)構(gòu)體的定義:typedefstruct{ ElemType*elem; intcount; intsizeindex;}HashTable;用于排序的結(jié)構(gòu)體的定義:typedefstruct{ ElemTyper[MAXSIZE+1]; intlength;}SqList;基本操作:InitHashTable(HashTable&H)操作結(jié)果:初始化一個(gè)哈希表Hash(intK)操作結(jié)果:哈希函數(shù),返回計(jì)算得的結(jié)果collision(int&p,intc)操作結(jié)果:處理沖突,返回計(jì)算得的結(jié)果SearchHash(HashTableH,intK,int&p,int&c)操作結(jié)果:查找哈希表,返回查找到的結(jié)果RecreateHashTable(HashTable&H)操作結(jié)果:開(kāi)辟更大空間,重新構(gòu)造一個(gè)哈希表InsertHash(HashTable&H,ElemTypee)操作結(jié)果:哈希表的插入,插入一個(gè)數(shù)據(jù)SeInsertHash(HashTable&H,ElemTypee,fstreamdataFile)操作結(jié)果:初始哈希表插入,從文件中將數(shù)據(jù)拷貝到哈希表中ListTraverse(ClassListL)操作結(jié)果:遍歷線性鏈表,打印輸出TraverseHash(HashTableH)操作結(jié)果:遍歷哈希表,打印輸出Partition(SqList&L,intlow,inthigh)操作結(jié)果:一趟快速排序,并返回樞軸所在位置QSort(SqList&L,intlow,inthigh)操作結(jié)果:對(duì)順序表L中的子序列L.r[low…h(huán)igh]作快速排序QuickSort(SqList&L)操作結(jié)果:對(duì)順序表L作快速排序HeapAdjust(SqList&H,ints,intm)操作結(jié)果:調(diào)整H.r[s]的關(guān)鍵字,使H.r[s…m]成為一個(gè)小頂堆HeapSort(SqList&H)操作結(jié)果:對(duì)順序表H進(jìn)行堆排序Merge(ElemTypeSR[],ElemTypeTR[],inti,intm,intn)操作結(jié)果:將有序的SR[i…m]和SR[m+1…n]歸并為有序的TR[i…n]MSort(ElemTypeSR[],ElemTypeTR1[],ints,intt)操作結(jié)果:將SR[s…t]歸并為T(mén)R1[s…t]MergeSort(SqList&L)操作結(jié)果:對(duì)順序表L作歸并排序CreateList(ClassList&L,fstreamdataFile,intn)操作結(jié)果:初始從文件中讀數(shù)據(jù)創(chuàng)建課程鏈表Pricreat(HashTable&people)操作結(jié)果:初始化從文件讀入構(gòu)造哈希表print(ElemTypee)操作結(jié)果:打印輸出單個(gè)學(xué)生信息Isvalue(chara[],intn)操作結(jié)果:判斷數(shù)組a的前n個(gè)字符是否為數(shù)字NumSearch(HashTableH)操作結(jié)果:按學(xué)號(hào)查找,打印輸出NameSearch(HashTableH)操作結(jié)果:按姓名查找,打印輸出SexSearch(HashTableH)操作結(jié)果:按性別查找,打印輸出GradeSearch(HashTableH)操作結(jié)果:按年級(jí)查找,打印輸出TeacherSearch(HashTableH)操作結(jié)果:按教師查找,打印輸出ClassSearch(HashTableH)操作結(jié)果:按課程查找,打印輸出ShowQSort(SqListpeople1,HashTablepeople)操作結(jié)果:顯示快速排序后的結(jié)果ShowHSort(SqListpeople1,HashTablepeople)操作結(jié)果:顯示堆排序后的結(jié)果ShowMSort(SqListpeople1,HashTablepeople)操作結(jié)果:顯示歸并排序后的結(jié)果AddSex(HashTableH)操作結(jié)果:統(tǒng)計(jì)男/女生人數(shù)PerAverage(HashTableH)操作結(jié)果:計(jì)算個(gè)人平均成績(jī)、總成績(jī)GradeAverage(HashTableH)操作結(jié)果:計(jì)算某年級(jí)平均年齡ClassAverage(HashTableH)操作結(jié)果:計(jì)算某課程平均成績(jī)AddCreateList(ClassList&L,intn)操作結(jié)果:添加數(shù)據(jù)時(shí)創(chuàng)建課程鏈表AddHash(HashTable&H)操作結(jié)果:添加一個(gè)數(shù)據(jù)ClearList(ClassList&L)操作結(jié)果:刪除數(shù)據(jù)時(shí)清空課程鏈表DeleteHash(HashTable&H)操作結(jié)果:刪除一個(gè)記錄EditHash(HashTable&H)操作結(jié)果:修改一個(gè)記錄headshow(void)操作結(jié)果:顯示主菜單show1(void)操作結(jié)果:顯示子菜單1Show2(void)操作結(jié)果:顯示子菜單2Show3(void)操作結(jié)果:顯示子菜單3Show4(void)操作結(jié)果:顯示子菜單4三、調(diào)試分析1.初始化采用文件操作,且選取的數(shù)據(jù)需要作沖突處理,測(cè)試數(shù)據(jù)具有較好的典型性,通過(guò)運(yùn)行對(duì)哈希表有了具體的認(rèn)識(shí)和實(shí)踐。2.查找時(shí)按學(xué)號(hào)、性別查找對(duì)用戶(hù)的輸入有查錯(cuò)處理,另外根據(jù)實(shí)際情況將個(gè)人平均成績(jī)強(qiáng)制轉(zhuǎn)換為了整數(shù)(采用四舍五入)。3.排序時(shí)分別采用了快速排序、堆排序和歸并排序,其中歸并排序是穩(wěn)定的,選取的數(shù)據(jù)也基本是無(wú)序的,且排序后不影響原來(lái)數(shù)據(jù)的結(jié)構(gòu)。4.插入、刪除、修改數(shù)據(jù)在程序未關(guān)閉時(shí)是會(huì)表現(xiàn)出來(lái)的,但并不改變測(cè)試數(shù)據(jù)文件中的內(nèi)容,這三個(gè)操作只是起一個(gè)演示作用。5.在讀文件中的數(shù)據(jù)的時(shí)候,起初我是將數(shù)據(jù)從文件中讀到一個(gè)結(jié)構(gòu)體數(shù)組中,然后再將結(jié)構(gòu)體中的數(shù)據(jù)用哈希表的形式存下來(lái),但這樣明顯浪費(fèi)了空間,所以我寫(xiě)了兩個(gè)哈希表的插入函數(shù),一個(gè)用來(lái)作初始化的插入,另一個(gè)用來(lái)添加數(shù)據(jù)時(shí)的哈希插入,同樣的理由我也寫(xiě)了兩個(gè)建立課程鏈表的函數(shù)。這樣無(wú)需過(guò)渡,直接從文件中將記錄讀入了哈希表中。6.為了區(qū)別哈希表中的一個(gè)單位有無(wú)數(shù)據(jù),在初始化哈希表時(shí)我將關(guān)鍵字全部賦為了NULLKEY即為0,另外為了凸顯關(guān)鍵字,我新定義了一個(gè)數(shù)據(jù)類(lèi)型:ElemType作為哈希表中的數(shù)據(jù)類(lèi)型,事實(shí)上這種做法在使我在后來(lái)的編程中方便了不少。7.在處理哈希表的容量的問(wèn)題時(shí),我定義了一個(gè)整型數(shù)組hashsize[]用來(lái)表示哈希表的容量的遞增,另外定義了一個(gè)全局變量m來(lái)記錄當(dāng)前哈希表的最大容量。8.在處理沖突時(shí)采用的是線性探測(cè)再散列的方法,當(dāng)沖突次數(shù)過(guò)多時(shí)就重建哈希表,重建哈希表時(shí),我先將原來(lái)哈希表中的數(shù)據(jù)用數(shù)組記錄下來(lái),在為哈希表開(kāi)辟了更大的空間后,再調(diào)用InsertHash函數(shù)將原有數(shù)據(jù)插入到新的哈希表中。9.我所遇到的最大問(wèn)題是空間分配出錯(cuò)的問(wèn)題,在創(chuàng)建課程鏈表時(shí)由于沒(méi)有處理好空間分配的問(wèn)題,沒(méi)有對(duì)課程鏈表的頭結(jié)點(diǎn)分配空間,導(dǎo)致遍歷時(shí)學(xué)生課程數(shù)據(jù)讀不出來(lái),在處理好空間分配的問(wèn)題后,以后的編程就順暢多了。10.在排序階段由于我寫(xiě)的排序是將數(shù)組的1號(hào)位作為數(shù)據(jù)存放的首位置,而哈希表中是將0號(hào)位作為數(shù)據(jù)存放的首位置,這樣在調(diào)用的時(shí)候就出問(wèn)題了,為此在排序時(shí)我多分配了一個(gè)空間,將哈希表中的數(shù)據(jù)按順序連續(xù)的賦到一個(gè)新的結(jié)構(gòu)體數(shù)組中(從1號(hào)位開(kāi)始賦值)。四、用戶(hù)手冊(cè)1.本程序的運(yùn)行環(huán)境為DOS操作系統(tǒng)。2.進(jìn)入演示程序后,即顯示用戶(hù)界面(如圖1),有五種操作可選擇,選擇這五種操作中的前四個(gè)的任何一個(gè)即進(jìn)入相關(guān)子菜單(如圖2,3,4,5所示),有另外的具體操作供選擇。3.如前面的調(diào)試分析所述,插入、刪除、修改數(shù)據(jù)在程序未關(guān)閉時(shí)是會(huì)表現(xiàn)出來(lái)的,但并不改變測(cè)試數(shù)據(jù)文件中的內(nèi)容,這三個(gè)操作只是起一個(gè)演示作用。圖1圖2圖3圖4圖5五、測(cè)試結(jié)果對(duì)初始數(shù)據(jù)進(jìn)行了測(cè)試,程序運(yùn)行正常,基本實(shí)現(xiàn)了預(yù)先所要求的各種操作。1.查詢(xún)部分:測(cè)試數(shù)據(jù)的全部顯示如圖1-1所示,按學(xué)號(hào)查找的顯示結(jié)果如圖1-2所示。其他排序顯示結(jié)果也正常,篇幅有限就不顯示截圖了。2.排序部分:按學(xué)號(hào)排序的結(jié)果如圖2-1所示,按年齡排序的結(jié)果如圖2-2所示,按總成績(jī)排序的結(jié)果如圖2-3所示。3.統(tǒng)計(jì)部分:按男女生統(tǒng)計(jì)的結(jié)果如圖3-1所示。其他統(tǒng)計(jì)結(jié)果經(jīng)檢驗(yàn)也是正確的。4.系統(tǒng)維護(hù):插入刪除一個(gè)數(shù)據(jù)的結(jié)果分別如圖4-1和4-2所示。執(zhí)行插入刪除后關(guān)于查詢(xún)、排序和統(tǒng)計(jì)的部分顯示如圖4-3,4-4,4-5所示。5.退出:選擇退出后的顯示如圖5-1所示。圖1-1圖1-2圖2-1圖2-2圖2-3圖3-1圖4-1圖4-2圖4-3圖4-4圖4-5圖5-1六、附錄源程序文件名:student.cpp存放初始數(shù)據(jù)的文件名:students.txt其內(nèi)容為:080710308朱嘯天23男數(shù)據(jù)結(jié)構(gòu)99葉延風(fēng)數(shù)學(xué)分析97陳芳啟080810310徐若寒21女綜合英語(yǔ)89王素敏數(shù)學(xué)分析90王澤軍080810313何展風(fēng)20男綜合英語(yǔ)90王素敏數(shù)學(xué)分析95王澤軍080710314劉伊藍(lán)22女?dāng)?shù)據(jù)結(jié)構(gòu)87葉延風(fēng)數(shù)學(xué)分析91陳芳啟080710320郎雨箏24女?dāng)?shù)據(jù)結(jié)構(gòu)90葉延風(fēng)數(shù)學(xué)分析88陳芳啟080710315李文風(fēng)22男數(shù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論