![學(xué)生成績(jī)管理系統(tǒng)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ab4e9214-f719-48ec-a167-b478eee9ab13/ab4e9214-f719-48ec-a167-b478eee9ab131.gif)
![學(xué)生成績(jī)管理系統(tǒng)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ab4e9214-f719-48ec-a167-b478eee9ab13/ab4e9214-f719-48ec-a167-b478eee9ab132.gif)
![學(xué)生成績(jī)管理系統(tǒng)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ab4e9214-f719-48ec-a167-b478eee9ab13/ab4e9214-f719-48ec-a167-b478eee9ab133.gif)
![學(xué)生成績(jī)管理系統(tǒng)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ab4e9214-f719-48ec-a167-b478eee9ab13/ab4e9214-f719-48ec-a167-b478eee9ab134.gif)
![學(xué)生成績(jī)管理系統(tǒng)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ab4e9214-f719-48ec-a167-b478eee9ab13/ab4e9214-f719-48ec-a167-b478eee9ab135.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)生姓名: 班 號(hào): 學(xué) 號(hào): 指導(dǎo)教師: 實(shí)習(xí)題目一 學(xué)生成績(jī)管理系統(tǒng)【需求規(guī)格說(shuō)明】學(xué)生成績(jī)管理是高等學(xué)校教務(wù)管理的重要組成部分,主要包括學(xué)生注冊(cè)、考試成績(jī)的錄入及修改、成績(jī)的統(tǒng)計(jì)分析等等。設(shè)計(jì)一個(gè)系統(tǒng)實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的管理。 【基本要求】要求系統(tǒng)應(yīng)具有以下基本功能:(1)學(xué)生注冊(cè)登記;(2)增加、刪除某一班級(jí)的學(xué)生數(shù);(3)成績(jī)錄入:輸入學(xué)生的考試成績(jī);(4)成績(jī)修改:若輸入錯(cuò)誤可進(jìn)行修改;(5)統(tǒng)計(jì)分析:對(duì)某個(gè)班級(jí)學(xué)生的單科成績(jī)進(jìn)行統(tǒng)計(jì),求出平均成績(jī);求出成績(jī)處于指定分?jǐn)?shù)段內(nèi)的學(xué)生人數(shù);求出每個(gè)學(xué)生一學(xué)期各科的平均成績(jī)等;(6)查找:查找某個(gè)學(xué)生的某門課程成績(jī),查找某門課
2、程成績(jī)處于指定分?jǐn)?shù)段內(nèi)的學(xué)生名單等等。(7)打?。捍蛴∫粋€(gè)班級(jí)學(xué)生的單科成績(jī);打印某一課程成績(jī)處于指定分?jǐn)?shù)段內(nèi)的學(xué)生名單;打印學(xué)生在某一學(xué)期的成績(jī)報(bào)告單;(8)排序:按照學(xué)生成績(jī)的總分排序?qū)W生記錄?!舅惴ㄔO(shè)計(jì)】(1)設(shè)計(jì)思想: 本題的核心操作是查詢,因?yàn)楣1淼牟檎倚屎芨?,?yīng)此在實(shí)現(xiàn)該系統(tǒng)的時(shí)候考慮到應(yīng)用哈希表這樣一種數(shù)據(jù)結(jié)構(gòu). 哈希函數(shù)的設(shè)計(jì)采用除留余數(shù)法,解決碰撞沖突采用線性探測(cè)在散列的方法。另外考慮到要排序,而且為了實(shí)現(xiàn)排序算法的時(shí)間復(fù)雜度盡可能低,采用了二叉排序樹(shù)的數(shù)據(jù)結(jié)構(gòu)解決排序問(wèn)題。由于哈希表的關(guān)鍵字項(xiàng)只能有一項(xiàng),為了實(shí)現(xiàn)按學(xué)號(hào)或按姓名查找和按班級(jí)插入和刪除學(xué)生信息,設(shè)計(jì)了三個(gè)哈
3、希表來(lái)實(shí)現(xiàn)該學(xué)生管理系統(tǒng),其中學(xué)號(hào)哈希表存放所有的學(xué)生信息,包括學(xué)號(hào).姓名.班號(hào).c語(yǔ)言成績(jī).數(shù)學(xué)成績(jī).英語(yǔ)成績(jī).總分以及平均分,其中學(xué)號(hào)哈希表的表項(xiàng)關(guān)鍵字為學(xué)號(hào);姓名哈希表以學(xué)生姓名的ascii碼值為表項(xiàng)關(guān)鍵字,其中該姓名哈希表存放了學(xué)生的學(xué)號(hào)作為索引項(xiàng);班級(jí)哈希表以班號(hào)為表項(xiàng)關(guān)鍵字,該班級(jí)哈希表用一個(gè)數(shù)組存放了該班所有學(xué)生的學(xué)號(hào)。二叉排序樹(shù)以學(xué)生成績(jī)的總分作為關(guān)鍵字項(xiàng),另外存放了學(xué)生的學(xué)號(hào)與姓名作為索引信息,排序時(shí),將學(xué)生的學(xué)號(hào),姓名和總分依次插入二叉排序樹(shù),按照成績(jī)總分排序只要中序遍歷此二叉樹(shù)便可得到。實(shí)現(xiàn)按學(xué)號(hào)和按姓名查找,并且實(shí)現(xiàn)三個(gè)表的動(dòng)態(tài)的修改即(插入和刪除),當(dāng)插入(刪除)學(xué)生
4、信息到學(xué)號(hào)哈希表時(shí),先到學(xué)號(hào)哈希表去查找學(xué)生的相關(guān)信息,未找到時(shí)(找到時(shí))就在學(xué)號(hào)哈希表中插入(刪除)該學(xué)生的所有信息,同時(shí)也要把學(xué)生的信息反映到姓名哈希表和班級(jí)哈希表中。當(dāng)從姓名哈希表插入(刪除)學(xué)生信息時(shí),計(jì)算該學(xué)生姓名的ascii碼值作為關(guān)鍵字到姓名哈希表中時(shí),到哈希表中去對(duì)應(yīng)信息,如果找不到(找到)就在姓名哈希表中插入(刪除)姓名的ascii碼關(guān)鍵字的值,同時(shí)在姓名哈希表中插入(刪除)該學(xué)生的學(xué)號(hào)。當(dāng)從班級(jí)哈希表中插入(刪除)學(xué)生信息時(shí),把班號(hào)作為關(guān)鍵字到班級(jí)哈希表中去查找對(duì)應(yīng)的信息,如果找不到就提示不存在該班級(jí),找到該班號(hào)就在班號(hào)哈希表的班級(jí)數(shù)組中插入該學(xué)生的學(xué)號(hào),增加該班級(jí)的學(xué)生人
5、數(shù)。 三個(gè)哈希表及二叉樹(shù)之間的對(duì)應(yīng)關(guān)系見(jiàn)下圖: 學(xué)號(hào)哈希表關(guān)鍵字項(xiàng) 數(shù)據(jù)項(xiàng)學(xué)號(hào) 班號(hào) 姓 名 其它信息2006 0010 huang2007 0008 kai 2008 0002 tao2009 0003 liu2010 0004 zhang2011 0009 li2012 0002 wang2013 0006 chen2014 0008 wen2015 0007 yang2016 0006 song2017 0008 jiang2018 0005 xu2019 0006 ren2020 0010 hu。 。 。 。 。2006 0007 lai2007 0006 lei2008 0004 l
6、ong2009 0002 jun2010 0001 xun2011 0003 mei2012 0001 ling2013 0002 ri2014201820102016201720182040210422052030203120342108210922042307240821402036姓名哈希表關(guān)鍵字 學(xué)號(hào)zhang 2025wang 2027yang 2030song 2031kai 2022huang 2021wen 2029。 。ren 2034lai 2014jiang 2032xun 2018班號(hào)哈希表班編號(hào)0005000800020010。00030006 0001 0007 二
7、叉排序樹(shù)關(guān)鍵字 數(shù)據(jù)項(xiàng)總分 學(xué)號(hào) 姓名256 2006 lai258 2009 jun260 2012 wang267 2013 ri268 2011 mei269 2010 xun。 。 。280 2015 yang(2)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):/*學(xué)號(hào)哈希表*/typedef structdatatype number;/學(xué)號(hào)char name10;/姓名int classnumber;/班號(hào)int cgrade;/語(yǔ)言成績(jī) int mgrade;/數(shù)學(xué)成績(jī)int egrade;/英語(yǔ)成績(jī)datatype total;/總分 float ave;/平均分 kindofitem info;/當(dāng)前狀態(tài)(
8、是否被訪問(wèn)的標(biāo)志)hashitemnum;typedef struct hashitemnum *ht;/ 學(xué)號(hào)哈希表數(shù)組int tablesize;/表長(zhǎng) int currentsize;/當(dāng)前表的長(zhǎng)度hashtablenum;/建立的關(guān)鍵字為學(xué)號(hào)的學(xué)號(hào)哈希表/*姓名哈希表*/typedef structdatatype na;/存放姓名的ascii碼的關(guān)鍵字(相當(dāng)于索引項(xiàng))int number;/班號(hào)kindofitem info;/當(dāng)前狀態(tài)hashitemname;typedef struct hashitemname *ht;/ 姓名哈希表數(shù)組int tablesize; int cu
9、rrentsize;hashtablename;/建立的關(guān)鍵字為姓名的姓名哈希表/*班級(jí)哈希表*/typedef structdatatype classnumber;/存放班號(hào)的關(guān)鍵字int number50;/存放本班學(xué)生學(xué)號(hào)的數(shù)組(相當(dāng)于索引項(xiàng))int size;/本班學(xué)生的人數(shù)kindofitem info; /當(dāng)前狀態(tài)hashitemclassnumber;typedef struct hashitemclassnumber *ht;/ 班級(jí)哈希表數(shù)組 int tablesize; int currentsize;hashtableclassnumber;/建立的關(guān)鍵字為班號(hào)的班級(jí)哈
10、希表/*二叉排序樹(shù)的數(shù)據(jù)結(jié)構(gòu)*/typedef struct tree datatype data;/關(guān)鍵字域int number;/學(xué)號(hào)char name10;/姓名 struct tree *leftchild;/左孩子 struct tree *rightchild;/右孩子 bitree;/二叉樹(shù)(3)詳細(xì)設(shè)計(jì)說(shuō)明: 三個(gè)哈希表的總體設(shè)計(jì):結(jié)構(gòu)體哈希表由哈希表數(shù)組,數(shù)組個(gè)數(shù)和當(dāng)前哈希表項(xiàng)個(gè)數(shù)三部分組成,其中哈希表數(shù)組中每個(gè)表項(xiàng)的數(shù)據(jù)類型是結(jié)構(gòu)體hashitem。結(jié)構(gòu)體hashitem由數(shù)據(jù)元素和表項(xiàng)狀態(tài)兩部分組成,其中數(shù)據(jù)元素僅包括一個(gè)關(guān)鍵字域,表項(xiàng)狀態(tài)的數(shù)據(jù)類型為枚舉類型,表項(xiàng)狀態(tài)有
11、empty,active和deleted三種狀態(tài),分別表示表項(xiàng)的空,已占用和被刪除三種狀態(tài)。 數(shù)據(jù)結(jié)構(gòu)定義如下:哈希表項(xiàng)包括三個(gè),一個(gè)是數(shù)據(jù)元素關(guān)鍵字項(xiàng),一個(gè)是元素的其它信息,還有一個(gè)是元素項(xiàng)的當(dāng)前狀態(tài)(info).數(shù)據(jù)元素的當(dāng)前狀態(tài)有三種:空,占用(或稱活動(dòng))和刪除,因此,需要定義一個(gè)有三個(gè)取值empty,active和deleted的枚舉類型kindofitem。 存放三個(gè)哈希表的數(shù)組采用動(dòng)態(tài)數(shù)組,初始化時(shí)哈希表的表的表長(zhǎng)采用總?cè)藬?shù)的1.5倍。 本題的核心算法是哈希表的插入,查找和刪除。其中,插入和刪除操作首先需要查找數(shù)據(jù)元素是否在哈希表中存在。查找函數(shù)共有三種情況:查找到,返回?cái)?shù)據(jù)元素的
12、哈希地址(值為正);未查找到,返回一個(gè)負(fù)值(插入操作可在哈希表的該返回值的絕對(duì)值位置插入數(shù)據(jù)元素);未找到,且哈希表已滿無(wú)法插入,此時(shí)返回為-tablesize. 插入函數(shù)首先調(diào)用查找函數(shù),返回值(設(shè)為i)為負(fù)(說(shuō)明數(shù)據(jù)原素不存在)且返回值不等于- tablesize(說(shuō)明哈希表未滿)時(shí),在哈希表的-i位置插入數(shù)據(jù)元素?!竞瘮?shù)模塊】create(hashitemnum*num,int &m,datatype a,int b)initiatenum(hashtablenum*hash,int msize)initiatenumber(hashtableclassnumber*hash,int m
13、size)findnum(hashtablenum *hash,datatype x)insertnum(hashtablenum *hash,hashitemnum*num)findname(hashtablename *hash,char p)deletenum(hashtablenum *hashnum,datatype x,hashtablename *hashname)insertname(hashtablename *hash,char p,int number)deletename(hashtablename *hashname,char *p,hashtablenum *has
14、hnum,int&m)findnumber(hashtableclassnumber *hash,datatype x)insertclassnumber(hashtableclassnumber *hash,hashtablenum *hashnum,datatype x,int b)deletenumber(hashtableclassnumber *hash,int i,int number)add(hashtableclassnumber *hashnumber, hashtablenum *hashnum,hashtablename *hashname)deletebynum(has
15、htableclassnumber*hashnumber,hashtablenum*hashnum,hashtablename*hashname);deletebyname(hashtableclassnumber *hashnumber, hashtablenum *hashnum,hashtablename *hashname)delete(hashtableclassnumber *hashnumber, hashtablenum *hashnum,hashtablename *hashname)xiugai(hashtablenum *hashnum,hashtablename *ha
16、shname)tongji(hashtableclassnumber *hashnumber,hashtablenum *hashnum,hashtablename *hashname)chazhao(hashtableclassnumber*hashnumber,hashtablenum*hashnum,hashtablename*hashname,hashitemnum*num,int m)print(hashtableclassnumber*hashnumber,hashtablenum*hashnum,hashtablename*hashname,hashitemnum*num)pri
17、ntmidan(hashtablenum *hashnum,int b,int&h)insert(bitree *root,hashitemnum item)traverse(bitree*root)程序執(zhí)行中函數(shù)調(diào)用關(guān)系和流程如下:學(xué)生信息的登記與成績(jī)錄入 完成對(duì)三個(gè)表的創(chuàng)建增加學(xué)生記錄刪除學(xué)生記錄修改學(xué)生記錄create()add()delete()xiugai()統(tǒng)計(jì)學(xué)生記錄查找學(xué)生記錄打印學(xué)生記錄排序?qū)W生記錄tongji()chazhao()print()paixu()initiatenum()initiatename()initiatenumber()insertnum ()inse
18、rtname ()insertclassnumber()( ()insertnum () ; insertname ();insertclassnumber();deletebynum(); deletebyname()findnumber();findnum();findnumber()deletenumber()deletename()deletenum()findnumber();findnum()findname();findnum();insert(bitree*root,hashitemnm item)traverse(bitree*root)【測(cè)試數(shù)據(jù)】 *歡迎使用學(xué)生成績(jī)管理系
19、統(tǒng)* 菜 單* * a 學(xué)生登記注冊(cè)與學(xué)生成績(jī)錄入 b 增加某一班的學(xué)生記錄 * * c 刪除某一班的學(xué)生記錄 d 修改學(xué)生成績(jī) * * e 統(tǒng)計(jì)學(xué)生記錄 f 查找學(xué)生記錄 * * g 打印學(xué)生記錄 h 排序?qū)W生記錄 * * j 退出 * *請(qǐng)輸入全校學(xué)生的班級(jí)個(gè)數(shù):25請(qǐng)輸入您要進(jìn)行的操作:a請(qǐng)輸入學(xué)生的信息:學(xué)生的學(xué)號(hào):2008學(xué)生的姓名:huang該學(xué)生所在的班號(hào):1學(xué)生的數(shù)學(xué)成績(jī):84學(xué)生的英語(yǔ)成績(jī):85學(xué)生的c語(yǔ)言成績(jī):86繼續(xù)輸入?(y/n)y學(xué)生的學(xué)號(hào):2006學(xué)生的姓名:lei該學(xué)生所在的班號(hào):1學(xué)生的數(shù)學(xué)成績(jī):85學(xué)生的英語(yǔ)成績(jī):86學(xué)生的c語(yǔ)言成績(jī):87繼續(xù)輸入?(y/n)
20、y學(xué)生的學(xué)號(hào):2010學(xué)生的姓名:kai該學(xué)生所在的班號(hào):2學(xué)生的數(shù)學(xué)成績(jī):84學(xué)生的英語(yǔ)成績(jī):85學(xué)生的c語(yǔ)言成績(jī):96繼續(xù)輸入?(y/n)y學(xué)生的學(xué)號(hào):2012學(xué)生的姓名:wei該學(xué)生所在的班號(hào):2學(xué)生的數(shù)學(xué)成績(jī):84學(xué)生的英語(yǔ)成績(jī):85學(xué)生的c語(yǔ)言成績(jī):87繼續(xù)輸入?(y/n)n學(xué)生的信息正在被錄入之中.請(qǐng)稍后請(qǐng)輸入您要進(jìn)行的操作:1請(qǐng)輸入您要進(jìn)行的操作:2040請(qǐng)輸入您要進(jìn)行的操作:you請(qǐng)輸入您要進(jìn)行的操作:b請(qǐng)輸入您要增加的學(xué)生的所在班級(jí)的班號(hào):1請(qǐng)輸入您要增加的學(xué)生的學(xué)號(hào):2040請(qǐng)輸入您要增加的學(xué)生姓名:you學(xué)生的數(shù)學(xué)成績(jī):88學(xué)生的英語(yǔ)成績(jī):84學(xué)生的c語(yǔ)言成績(jī):85該學(xué)生
21、已成功增加到信息系統(tǒng)中!繼續(xù)輸入?(y/n)n請(qǐng)輸入您要進(jìn)行的操作:c按學(xué)號(hào)刪除 0按姓名刪除 1請(qǐng)選擇刪除方式0/1:0請(qǐng)輸入您要?jiǎng)h除的學(xué)生的所在班級(jí)的班號(hào):1請(qǐng)輸入您要?jiǎng)h除的學(xué)生的學(xué)號(hào):2008該學(xué)生已被成功刪除!請(qǐng)輸入您要進(jìn)行的操作:d按姓名修改 0按學(xué)號(hào)修改 1請(qǐng)選擇修改方式:0請(qǐng)輸入要修改的學(xué)生的姓名:you請(qǐng)輸入您要修改的學(xué)生的某一項(xiàng)的成績(jī):修改數(shù)學(xué)成績(jī) 0修改英語(yǔ)成績(jī) 1修改c語(yǔ)言成績(jī) 2請(qǐng)選擇修改方式:0請(qǐng)修改后的數(shù)學(xué)成績(jī):99修改成功!請(qǐng)輸入您要進(jìn)行的操作:e請(qǐng)輸入您要統(tǒng)計(jì)的學(xué)生的所在班級(jí)的班號(hào):1統(tǒng)計(jì)數(shù)學(xué)成績(jī) 0統(tǒng)計(jì)英語(yǔ)成績(jī) 1統(tǒng)計(jì)c語(yǔ)言成績(jī) 2請(qǐng)輸入您要統(tǒng)計(jì)哪一項(xiàng)的成績(jī):
22、0請(qǐng)輸入您要查詢的統(tǒng)計(jì)的分?jǐn)?shù)段maxmin:請(qǐng)輸入max的值:99請(qǐng)輸入min的值:68no.1學(xué)生的平均成績(jī)是92.00處于9968之間的學(xué)生人數(shù)是:2請(qǐng)輸入您要進(jìn)行的操作:f按姓名查找 0按學(xué)號(hào)查找 1請(qǐng)選擇查找方式:0請(qǐng)輸入要查找的學(xué)生的姓名:you查找數(shù)學(xué)成績(jī) 0查找英語(yǔ)成績(jī) 1查找c語(yǔ)言成績(jī) 2請(qǐng)選擇查找方式:0該學(xué)生的數(shù)學(xué)成績(jī)的是:99查找指定的分?jǐn)?shù)段的數(shù)學(xué)成績(jī) 0查找指定的分?jǐn)?shù)段的英語(yǔ)成績(jī) 1查找指定的分?jǐn)?shù)段的c語(yǔ)言成績(jī) 2請(qǐng)選擇查找方式:0請(qǐng)輸入您要查詢的數(shù)學(xué)成績(jī)指定的分?jǐn)?shù)段max1min1請(qǐng)輸入max1的值:99請(qǐng)輸入min1的值:68成績(jī)指定的分?jǐn)?shù)段9968的學(xué)生名單是:k
23、aiyouleiwei請(qǐng)輸入您要進(jìn)行的操作:g請(qǐng)輸入您要打印的學(xué)生的所在班級(jí)的班號(hào):1請(qǐng)輸入您要打印哪一項(xiàng)的成績(jī):打印數(shù)學(xué)成績(jī) 0打印英語(yǔ)成績(jī) 1打印c語(yǔ)言成績(jī) 2請(qǐng)選擇打印方式:0學(xué)號(hào) 姓名 數(shù)學(xué)2006 lei 852040 you 99學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) c語(yǔ)言2010 kai 84 85 962040 you 99 84 852006 lei 85 86 872012 wei 84 85 87請(qǐng)輸入您要進(jìn)行的操作:h2012 wei 2562006 lei 2582010 kai 2652040 you 268請(qǐng)輸入您要進(jìn)行的操作:jpress any key to continu
24、e【調(diào)試報(bào)告】1、開(kāi)始時(shí),增加學(xué)生記錄時(shí)可以增加成功,但是到后來(lái)在查詢的時(shí)候卻顯示該學(xué)生記錄不存在,設(shè)置斷點(diǎn)調(diào)試后,發(fā)現(xiàn)查找函數(shù)的狀態(tài)記錄不正確,修改后實(shí)現(xiàn)了查找成功。2、在打印學(xué)生的姓名時(shí)開(kāi)始打印出來(lái)的姓名是亂碼,后來(lái)調(diào)試進(jìn)行跟蹤發(fā)現(xiàn)字符串末尾沒(méi)有添加結(jié)束符號(hào)0,添加后打印成功。 3、用二叉排序樹(shù)對(duì)學(xué)生信息進(jìn)行排序時(shí)發(fā)現(xiàn),總分必須作為關(guān)鍵字項(xiàng),因此又將學(xué)號(hào)哈希表的總分項(xiàng)改成了datatype類型,成功將問(wèn)題解決。【用戶手冊(cè)】根據(jù)提示輸入相應(yīng)的學(xué)生信息即可,可以任意輸入班級(jí)個(gè)數(shù),學(xué)生人數(shù)和添加與刪除學(xué)生信息。【附錄】代碼清單:#include stdio.h#include stdlib.h#
25、include string.htypedef int keytype;#define max 1000;typedef enum empty, active, deleted kindofitem;typedef structkeytype key;datatype;typedef structdatatype number;char name10;int classnumber;int cgrade; int mgrade; int egrade; datatype total; float ave; kindofitem info;hashitemnum;typedef structda
26、tatype na;char name10;int number;kindofitem info;hashitemname;typedef structdatatype classnumber;int number50;int size;kindofitem info;hashitemclassnumber;typedef struct hashitemnum *ht; int tablesize; int currentsize;hashtablenum;typedef struct hashitemname *ht; int tablesize; int currentsize;hasht
27、ablename;typedef struct hashitemclassnumber *ht; int tablesize; int currentsize; hashtableclassnumber;typedef struct tree datatype data;int number;char name10; struct tree *leftchild; struct tree *rightchild; bitree; void create(hashitemnum*num,int &m,datatype a,int b)int i=0;char flag=y; printf(n請(qǐng)輸
28、入學(xué)生的信息:n); while(flag=y|flag=y) printf(學(xué)生的學(xué)號(hào):); scanf(%d,&numi.number.key); bi=numi.number.key; printf(學(xué)生的姓名:); scanf(%s,); printf(該學(xué)生所在的班號(hào):); scanf(%d,&numi.classnumber); ai.key=numi.classnumber; printf(學(xué)生的數(shù)學(xué)成績(jī):); scanf(%d,&numi.mgrade); printf(學(xué)生的英語(yǔ)成績(jī):); scanf(%d,&numi.egrade); printf(學(xué)生的
29、c語(yǔ)言成績(jī):); scanf(%d,&numi.cgrade); i+; printf(繼續(xù)輸入?(y/n); scanf(%s,&flag); m=i;void copy(char p,char q)int i=0;while(1)qi=pi; if(pi=0) break;elsei+; int initiatenum(hashtablenum*hash,int msize)hash-tablesize=msize;hash-ht=(hashitemnum*)malloc(sizeof(hashitemnum)*msize);if(hash-ht=null)return 0 ;elseha
30、sh-currentsize=0;return 1;int initiatename(hashtablename*hash,int msize)hash-tablesize=msize;hash-ht=(hashitemname*)malloc(sizeof(hashitemname)*msize);if(hash-ht=null)return 0 ;elsehash-currentsize=0;return 1;int initiatenumber(hashtableclassnumber*hash,int msize) hash-tablesize=msize;hash-ht=(hashi
31、temclassnumber*)malloc(sizeof(hashitemclassnumber)*msize);if(hash-ht=null)return 0 ;elsehash-currentsize=0;return 1;int findnum(hashtablenum *hash,datatype x)int i=x.key%hash-tablesize;int j=i;while(=active&hash-htj.number.key!=x.key)j=(j+1)%hash-tablesize;if(j=i)return -hash-tablesize;
32、if(=active)return j;else return -j;int insertnum(hashtablenum *hash,hashitemnum*num)int i=findnum(hash,num-number);if(i0)return 0;else if(i!=-hash-tablesize)hash-ht-i.number=num-number; copy(num-name,); hash-ht-i.classnumber=num-classnumber; hash-ht-i.mgrade=num-mgrade; ha
33、sh-ht-i.egrade=num-egrade;hash-ht-i.cgrade=num-cgrade;=active;hash-currentsize+;return 1;else return 0;int findname(hashtablename *hash,char p) datatype x;x.key=0;int k=0;while(1) x.key+=(int)(pk); k+; if(pk=0) break; int i=x.key%hash-tablesize;int j=i;while(=active&hash-h
34、tj.na.key!=x.key)j=(j+1)%hash-tablesize;if(j=i)return -hash-tablesize;if(=active)return j;else return -j;int findname1(hashtablename *hash,char p) datatype x;x.key=0;int k=0;while(1) x.key+=(int)(pk); k+; if(pk=0) break; int i=x.key%hash-tablesize;int j=i;while(hash-htj.na.key!=x.key)j=
35、(j+1)%hash-tablesize;if(j=i)return -hash-tablesize;if(=active)return j;else return -j;int deletenum(hashtablenum *hashnum,datatype x,hashtablename *hashname) int i=findnum(hashnum,x); if(i=0) int j=findname(hashname,);if(j=0) =deleted; hashname-currentsi
36、ze-; =deleted;hashnum-currentsize-;return 1;else return 0;int insertname(hashtablename *hash,char p,int number)datatype x;x.key=0;int j=0;while(1) x.key+=(int)(pj); j+; if(pj=0) break; int i=findname(hash,p);if(i0)return 0;else if(i!=-hash-tablesize)hash-ht-i.na=x; hash-ht-i.number=n
37、umber;=active;hash-currentsize+;return 1;else return 0;int deletename(hashtablename *hashname,char *p,hashtablenum *hashnum,int&m)int i=findname(hashname,p);if(i=0)datatype x;x.key=hashname-hti.number;x.key=m;int j=findnum(hashnum,x);if(j=0) =deleted; hashnum-currentsiz
38、e-;=deleted;hashname-currentsize-;return 1;else return 0;int findnumber(hashtableclassnumber *hash,datatype x)int i=x.key%hash-tablesize;int j=i;while(=active&hash-htj.classnumber.key!=x.key)j=(j+1)%hash-tablesize;if(j=i)return -hash-tablesize;if(=active)re
39、turn j;else return -j;int insertclassnumber(hashtableclassnumber *hash,hashtablenum *hashnum,datatype x,int b)int j=0,k=0,m;datatype y;int i=findnumber(hash,x);if(i0)return 0;else if(i!=-hash-tablesize) hash-ht-i.classnumber=x; for(j=0;bj!=-1;j+) y.key=bj; m=findnum(hashnum,y); if(m=0) if(hashnum-ht
40、m.classnumber=x.key) hash-ht-i.numberk=bj; k+; hash-ht-i.size=k; =active; hash-currentsize+; return 1;else return 0;void insertclassnumber1(hashtableclassnumber *hash,hashtablenum *hashnum,datatype x,int b)int j=0,k=0,m,h;datatype y;int i=findnumber(hash,x);if(i=0) h=hash-hti.size-1; f
41、or(j=0;bj!=-1;j+) y.key=bj; m=findnum(hashnum,y); if(m=0) if(hashnum-htm.classnumber=x.key) hash-hti.numberh=bj; h+; k+; hash-hti.size+=k-1; =active; hash-currentsize+; return 1;else return 0;int deletenumber(hashtableclassnumber *hash,int i,int number)int j=0;int k;int i=findnumber(ha
42、sh,x); if(i=0) for(j=0;jhti.size;j+)if(hash-hti.numberj=number) break;for(k=j;khti.size;k+) hash-hti.numberk=hash-hti.numberk+1;hash-hti.size-; return 1;else return 0;void add(hashtableclassnumber *hashnumber, hashtablenum *hashnum,hashtablename *hashname) int i,n,j=0,k; hashitemnum num; datatype x1
43、; int b50; for(k=0;k50;k+) bk=-1; char flag=y; while(flag=y|flag=y) printf(請(qǐng)輸入您要增加的學(xué)生的所在班級(jí)的班號(hào):); scanf(%d,&n); x1.key=n; num.classnumber=n; i=findnumber(hashnumber,x1); if(i=0) hashnumber-hti.size+; printf(請(qǐng)輸入您要增加的學(xué)生的學(xué)號(hào):); scanf(%d,&num.number); bj=num.number.key; printf(請(qǐng)輸入您要增加的學(xué)生姓名:); scanf(%s,num
44、.name); printf(學(xué)生的數(shù)學(xué)成績(jī):); scanf(%d,&num.mgrade); printf(學(xué)生的英語(yǔ)成績(jī):); scanf(%d,&num.egrade); printf(學(xué)生的c語(yǔ)言成績(jī):); scanf(%d,&num.cgrade); insertnum(hashnum,&num); insertname(hashname,,num.number.key); /deletenum(hashnum,num.number,hashname); printf(該學(xué)生已成功增加到信息系統(tǒng)中!n); printf(繼續(xù)輸入?(y/n); scanf(%s,&f
45、lag); j+; insertclassnumber1(hashnumber,hashnum,x1,b);void deletebynum(hashtableclassnumber *hashnumber, hashtablenum *hashnum,hashtablename *hashname) int n,m; datatype x1,x2; printf(請(qǐng)輸入您要?jiǎng)h除的學(xué)生的所在班級(jí)的班號(hào):); scanf(%d,&n); x1.key=n; printf(請(qǐng)輸入您要?jiǎng)h除的學(xué)生的學(xué)號(hào):); scanf(%d,&m); x2.key=m; int i=findnumber(hashnumber,x1); if(i=0) /hashnumber-hti.size-; deletenum(hashnum,x2,hashname);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- α-Apooxytetracycline-生命科學(xué)試劑-MCE-3621
- PB-22-7-Hydroxyisoquinoline-isomer-生命科學(xué)試劑-MCE-3092
- L-Arginyl-L-alanine-生命科學(xué)試劑-MCE-1970
- BDW-OH-生命科學(xué)試劑-MCE-6441
- 4-Chlorocathinone-hydrochloride-生命科學(xué)試劑-MCE-4146
- 1-Methyl-3-amino-4-cyanopyrazole-生命科學(xué)試劑-MCE-7778
- 2025年度智能城市基礎(chǔ)設(shè)施合作框架協(xié)議
- 二零二五年度茶葉種植基地租賃與經(jīng)營(yíng)管理合同
- 二零二五年度貨車駕駛員勞動(dòng)合同(貨車駕駛與車輛融資租賃)
- 2025年度解除合同終止合同樣本:5G通信技術(shù)合作終止合同書(shū)
- 2024-2025學(xué)年成都市金牛區(qū)九年級(jí)上期末(一診)英語(yǔ)試題(含答案)
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測(cè)數(shù)學(xué)三年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 廣東2024年廣東金融學(xué)院招聘專職輔導(dǎo)員9人筆試歷年典型考點(diǎn)(頻考版試卷)附帶答案詳解
- 2025年研究生考試考研英語(yǔ)(二204)試卷與參考答案
- DB31∕731-2020 船舶修正總噸單位產(chǎn)品能源消耗限額
- 2024-年全國(guó)醫(yī)學(xué)博士外語(yǔ)統(tǒng)一入學(xué)考試英語(yǔ)試題
- 天津市-2024年-社區(qū)工作者-上半年筆試真題卷
- 2024年衛(wèi)生專業(yè)技術(shù)資格考試衛(wèi)生檢驗(yàn)技術(shù)(初級(jí)(師)211)相關(guān)專業(yè)知識(shí)試題及答案指導(dǎo)
- 《手衛(wèi)生知識(shí)培訓(xùn)》培訓(xùn)課件
- 《祛痘產(chǎn)品祛痘產(chǎn)品》課件
- 江蘇省南京鼓樓區(qū)2024年中考聯(lián)考英語(yǔ)試題含答案
評(píng)論
0/150
提交評(píng)論