2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  C語(yǔ)言課程設(shè)計(jì)報(bào)告</b></p><p><b>  學(xué)生成績(jī)管理系統(tǒng) </b></p><p>  學(xué) 院 計(jì)算機(jī)學(xué)院 </p><p>  專 業(yè) 軟件工程(4)班 </p><p&g

2、t;  年 級(jí) 2007級(jí) </p><p>  姓 名 </p><p>  學(xué) 號(hào) </p><p>  教 師 </p><p><b>  一.設(shè)計(jì)題

3、目</b></p><p><b>  學(xué)生成績(jī)管理系統(tǒng)</b></p><p><b>  二.課程設(shè)計(jì)目的</b></p><p>  了解軟件工程中的一些系統(tǒng)分析,模塊分析,代碼設(shè)計(jì)的概念,利用WIN-TC實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)的錄入、查詢、刪除、統(tǒng)計(jì)等基本操作,使用單鏈表結(jié)構(gòu)實(shí)現(xiàn)學(xué)生成績(jī)管理,了解數(shù)據(jù)庫(kù)管

4、理的基本功能,掌握C語(yǔ)言中的結(jié)構(gòu)體、指針、函數(shù)(系統(tǒng)函數(shù)、自定義函數(shù))、文件操作等知識(shí)。通過(guò)對(duì)系統(tǒng)的分析和設(shè)計(jì),進(jìn)一步鞏固C語(yǔ)言的學(xué)習(xí),以提高對(duì)開發(fā)環(huán)境的進(jìn)一步認(rèn)識(shí)和綜合編程能力。</p><p><b>  系統(tǒng)功能</b></p><p>  1.學(xué)生基本情況錄入。</p><p>  2 能夠?qū)σ呀?jīng)錄入的數(shù)據(jù)進(jìn)行顯示。</p>

5、;<p>  3.能夠進(jìn)行數(shù)據(jù)的插入。</p><p>  4.刪除基本數(shù)據(jù)的相關(guān)信息。</p><p>  5.復(fù)制基本數(shù)據(jù)的相關(guān)信息。</p><p>  6.能夠從文件中讀入記錄。</p><p>  7.對(duì)輸入的數(shù)據(jù)進(jìn)行保存。</p><p>  8.可進(jìn)行姓名的查詢。如:姓陳的同學(xué)。</p

6、><p>  9.可進(jìn)行基本數(shù)據(jù)的統(tǒng)計(jì)計(jì)算。如:</p><p> ?、伲y(tǒng)計(jì)每個(gè)學(xué)生各門功課的平均成績(jī)及總分,根據(jù)總分進(jìn)行名次排列。</p><p>  ②.對(duì)數(shù)據(jù)進(jìn)行分類合計(jì)處理,統(tǒng)計(jì)個(gè)班級(jí)的總分,總平均分。</p><p>  四.系統(tǒng)功能模塊結(jié)構(gòu)圖</p><p>  本程序利用單鏈表存儲(chǔ)結(jié)構(gòu)完成對(duì)學(xué)生成績(jī)的動(dòng)態(tài)管

7、理,其基本功能模塊如下圖所示:</p><p>  ︱            </p><p>  圖1 程序功能模塊結(jié)構(gòu)圖</p><p>  五.程序設(shè)計(jì)及各模塊函數(shù)功能簡(jiǎn)述</p><p><b>  1.?dāng)?shù)據(jù)結(jié)構(gòu)</b></p><p>  鏈表是線形表的一種,線形表分為順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)?/p>

8、存儲(chǔ)結(jié)構(gòu)。線形表的順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是邏輯關(guān)系上相鄰的兩個(gè)元素物理位置上也相鄰,因此可以隨機(jī)存取表中任一元素。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn)是用一組任意的存儲(chǔ)單元存儲(chǔ)線形表的數(shù)據(jù)元素。鏈表的最大的優(yōu)點(diǎn)是對(duì)表的添加、刪除、查找、排序等操作比較方便,因此采用鏈表來(lái)存儲(chǔ)學(xué)生相關(guān)信息。且對(duì)結(jié)點(diǎn)的定義如下:</p><p>  typedef struct z1 /*定義數(shù)據(jù)結(jié)構(gòu)*/</p><p>&

9、lt;b>  {</b></p><p>  char no[11]; /*10位學(xué)號(hào)*/</p><p>  char name[15]; /*姓名*/</p><p>  int score[N]; /*成績(jī)*/</p><p>  float sum; /*總分*/</p>

10、<p>  float average; /*平均分*/ </p><p>  int order; /*排名*/</p><p>  struct z1 *next;</p><p><b>  }STUDENT;</b></p><p>  2.main()主函數(shù)</p>

11、<p>  主函數(shù)是程序入口,采用模塊化設(shè)計(jì)。首先在主程序中打印歡迎界面,聲明一些必要變量,作一無(wú)限循環(huán)程序,循環(huán)體為一開關(guān)語(yǔ)句,該語(yǔ)句設(shè)置一個(gè)斷點(diǎn),其條件值是通過(guò)調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值,調(diào)用相應(yīng)的功能函數(shù),同時(shí)設(shè)置一個(gè)斷點(diǎn),當(dāng)返回值為一定條件時(shí)結(jié)束程序。</p><p>  3.menu_select()主菜單</p><p>  為了美化界面,制作單邊框窗口,

12、在窗口中顯示主菜單。通過(guò)putch()輸出圖形符號(hào)的ASCII碼值(十六進(jìn)制),達(dá)到顯示的目的。</p><p>  利用Windows函數(shù)制作顯示窗口,該窗口與邊框位置,大小基本一致,通過(guò)過(guò)仔細(xì)計(jì)算且多次調(diào)試后得到其坐標(biāo)值,用函數(shù)gotoxy()來(lái)實(shí)現(xiàn)光標(biāo)的移動(dòng)。設(shè)置文本和背景色輸出菜單項(xiàng)?;謴?fù)原窗口,設(shè)計(jì)輸入選擇項(xiàng),返回主函數(shù)。相關(guān)的一些函數(shù)如下:</p><p>  window、t

13、extbackground、clrscr、textcolor、cprintf、bioskey、gotoxy、gettext、puttext、putch。</p><p>  putch(0xda); /*輸出左上角邊框┏*/ </p><p>  putch(0xc4); /*輸出上邊框水平線*/</p><p>  putch(0xbf); /*輸出右上角邊框

14、┓*/ </p><p>  gotoxy(10,i);putch(0xb3); /*輸出左邊的垂直線*/</p><p>  gotoxy(63,i);putch(0xb3); /*輸出右邊的垂直線*/</p><p>  putch(0xc0); /*輸出左下角邊框┗*/</p><p>  putch(0xc4); /*輸出下邊框水平

15、線*/</p><p>  putch(0xd9); /*輸出右下角邊框┛*/</p><p>  對(duì)菜單選項(xiàng)的選擇是利用移動(dòng)光標(biāo)按回車鍵進(jìn)行選擇。</p><p>  4.init()初始化</p><p>  單鏈表需要一個(gè)頭指針來(lái)指向表的第一個(gè)結(jié)點(diǎn),對(duì)單鏈表的訪問是從頭指針開始的。初始化單鏈表為空,用NULL表示,該值在頭文件stdi

16、o.h中定義為常數(shù)0。</p><p>  5.create()創(chuàng)建鏈表</p><p>  當(dāng)用戶選擇輸入增加記錄后,進(jìn)入該函數(shù),輸入學(xué)生信息,并把信息加入鏈表。在輸入過(guò)程中,有相關(guān)提示,如學(xué)號(hào)是十位,格式為字符型。同時(shí)對(duì)某些信息作了限定,如輸入分?jǐn)?shù)(0—100) ,若輸入分?jǐn)?shù)不在這個(gè)范圍內(nèi),則系統(tǒng) 提示重新輸入,但是要求輸入分?jǐn)?shù)輸入了非數(shù)字的代碼,如“Z”,則會(huì)出現(xiàn)死循環(huán)。因此在輸入基

17、本信息時(shí),若要返回主菜單,請(qǐng)?jiān)凇癳nter no:”時(shí)輸入‘*’以便返回主菜單。當(dāng)輸入結(jié)束后,系統(tǒng)自動(dòng)計(jì)算該生的總分和平均分,并將名次置0,待排序結(jié)束后賦予新值。數(shù)據(jù)輸入結(jié)束后返回鏈表的頭指針到方函數(shù)。</p><p>  在生成鏈表時(shí),每次新輸入的結(jié)點(diǎn)放在表頭,這樣最先輸入的結(jié)點(diǎn)存放在最后。</p><p>  6.delete()刪除結(jié)點(diǎn)</p><p>  刪

18、除指定學(xué)號(hào)的學(xué)生記錄。輸入要?jiǎng)h除的結(jié)點(diǎn)的學(xué)號(hào),根據(jù)學(xué)號(hào)順序查找結(jié)點(diǎn),如果沒找到,則輸出沒有找到的信息;否則顯示找到的結(jié)點(diǎn)信息。如果刪除的是頭結(jié)點(diǎn),則修改頭指針,將該結(jié)點(diǎn)的前趨指針指向其后繼結(jié)點(diǎn),然后釋放該結(jié)點(diǎn)。</p><p>  7.a(chǎn)ppend()追加記錄到文件尾</p><p>  當(dāng)想要在文件尾增加一條記錄時(shí)使用該函數(shù),首先輸入新結(jié)點(diǎn)信息,然后輸入要追加的文件名,按追加方式打開文件

19、,將新信息寫入文件。</p><p>  8.insert()插入結(jié)點(diǎn)</p><p>  在指定結(jié)點(diǎn)前面插入新結(jié)點(diǎn),申請(qǐng)空間得到指針info,輸入新結(jié)點(diǎn)信息,存放info中,設(shè)鏈表頭指針為h,p為指定結(jié)點(diǎn)的指針,q為p的前趨指針。從頭結(jié)點(diǎn)開始循環(huán)移動(dòng)指針p查找指定結(jié)點(diǎn),查找和插入時(shí)分兩種情況處理:</p><p>  1).指針p為空,如果p等于h,說(shuō)明鏈表為空,

20、則新結(jié)點(diǎn)即為頭結(jié)點(diǎn),修改指針h=info。否則,說(shuō)明表中沒有指定結(jié)點(diǎn),則新結(jié)點(diǎn)插入在表尾部,此是q把指的結(jié)點(diǎn)是最后一個(gè)結(jié)點(diǎn),所以修改指針q->next=info。</p><p>  2).指針p不為空,如果p等于h,說(shuō)明新結(jié)點(diǎn)插入在當(dāng)前第一個(gè)結(jié)點(diǎn)之前,為新的頭結(jié)點(diǎn),修改指針info->next=p,h=info。否則,說(shuō)明新結(jié)點(diǎn)的位置應(yīng)在q和p兩個(gè)結(jié)點(diǎn)之間,修改指針info->next=p,q

21、->next=info。</p><p>  9.print()顯示所有記錄</p><p>  采用順序訪問的方法顯示和查找記錄,定義一個(gè)指向結(jié)點(diǎn)的臨時(shí)變量p,初值為單鏈表的頭指針,輸出指針?biāo)涗浀臄?shù)據(jù)后,將指針后移一個(gè)記錄,直到p指針值為空,則所有記錄輸出完畢。</p><p>  10.search()查找結(jié)點(diǎn)</p><p> 

22、 按照 姓名 來(lái)查找記錄。從頭結(jié)點(diǎn)開始順序查找, 若沒有相同記錄顯示沒有,遇到 一個(gè)匹配的記錄則顯示此記錄, 后到尾結(jié)點(diǎn)結(jié)束。</p><p>  11.save()保存記錄到文件</p><p>  將學(xué)生信息保存到指定的文件中。按照文件讀寫要求,先定義一個(gè)指向文件的指針,輸入要保存的磁盤文件名,如果輸入的是絕對(duì)路徑,則文件保存到指定的位置;如果只要文件名,則文件保存在TC默認(rèn)的路徑。如

23、果文件打不開,則退出程序,否則選擇一種寫文件方式,打開文件。如果文件打不開,則退出程序,否則選擇一種寫文件方式,從鏈表的頭指針</p><p>  開始,順序?qū)⒂涗泴懭胛募?,直到所有記錄寫完,?biāo)志就是移動(dòng)指針為空。</p><p>  12.load()從文件中加載記錄</p><p>  按照文件讀寫要求,先定義一個(gè)指向文件的指針,輸入要讀入數(shù)據(jù)的磁盤文件名,然后

24、確定文件的打開方式。如果文件打不開,則退出函數(shù),否則選擇一種讀文件方式,從文件頭開始,將記錄讀入內(nèi)存,直到文件尾。文件打開方式和讀入方式的確定要依據(jù)輸出文件的打開方式和寫入方式,以名數(shù)據(jù)讀入錯(cuò)誤。如果輸出文件是二進(jìn)制文件,塊寫操作,讀入也應(yīng)設(shè)置為二進(jìn)制打開方式,塊讀取方式。每讀入一條記錄,都要做好指針鏈接關(guān)系,本函數(shù)將新結(jié)點(diǎn)鏈接到當(dāng)前鏈表的尾部,鏈表的順序和文件保存的順序一致。</p><p>  13.copy

25、()備份文件</p><p>  將文件讀寫功能結(jié)合到一起,先輸入源文件名,再輸入目標(biāo)文件名,然后利用文件讀寫函數(shù)將源文件中的信息寫到目標(biāo)文件中,以達(dá)到備份文件的目的。</p><p>  14.computer()計(jì)算所有學(xué)生課程的總成績(jī)成績(jī)和總平均成績(jī)</p><p>  15.sort()排序</p><p>  本函數(shù)實(shí)現(xiàn)按總分排序的

26、功能。在算法上,選擇直接插入算法,即:每步將一個(gè)待排序的按其排序碼值的大小插到前面已經(jīng)排好序的表中,直到全部插入為止。先將鏈表的頭結(jié)點(diǎn)看作是已經(jīng)排好序的結(jié)點(diǎn),然后取下一個(gè)結(jié)點(diǎn)作為待排序的結(jié)點(diǎn),插入到已排好序的表中。其具體做法為:</p><p>  (1).先將原表頭結(jié)點(diǎn)作為新排好序表的頭結(jié)點(diǎn)h,原表下一個(gè)結(jié)點(diǎn)作為原表頭結(jié)點(diǎn)h1。</p><p>  (2).原表頭結(jié)點(diǎn)為待排序結(jié)點(diǎn),將其總

27、分與新表結(jié)點(diǎn)的總分進(jìn)行比較,如果待排序結(jié)點(diǎn)總分大,則插在表頭,否則插入在其后,原表頭結(jié)點(diǎn)后移一位。</p><p>  (3).重復(fù)第二步,即將原表頭結(jié)點(diǎn)的總分和新表結(jié)點(diǎn)的總分進(jìn)行比較,如果待排序結(jié)點(diǎn)總分小,則移動(dòng)新表指針,直到找到合適的位置將其插入。當(dāng)原表為空時(shí),所有結(jié)點(diǎn)排序完畢。</p><p>  排好序后,系統(tǒng)自動(dòng)將名次數(shù)據(jù)寫入結(jié)點(diǎn)數(shù)據(jù)域的order中。</p>&l

28、t;p>  16.index()索引</p><p>  定義臨時(shí)指針后,將原表的頭指針?biāo)傅南乱粋€(gè)結(jié)點(diǎn)作頭指針,再使第一個(gè)結(jié)點(diǎn)定為新表的頭結(jié)點(diǎn)。當(dāng)原表不為空時(shí),進(jìn)行排序。</p><p>  17.total()分類合計(jì)</p><p>  追加班別信息,對(duì)各班的總成績(jī)和總平均成績(jī)進(jìn)行統(tǒng)計(jì)并顯示。</p><p>  18.exit

29、()退出程序</p><p>  19.auther()版本信息</p><p>  顯示與本系統(tǒng)相關(guān)的信息。</p><p><b>  六.結(jié)果</b></p><p><b>  歡迎界面</b></p><p><b>  主菜單</b><

30、/p><p><b>  輸入界面</b></p><p><b>  刪除界面</b></p><p><b>  顯示界面</b></p><p><b>  搜索界面</b></p><p><b>  加載界面<

31、/b></p><p><b>  統(tǒng)計(jì)界面</b></p><p><b>  版本界面</b></p><p><b>  七.心得體會(huì)</b></p><p>  在本次課程設(shè)計(jì)中,先使用結(jié)構(gòu)化分析方法對(duì)系統(tǒng)進(jìn)行分析,將整個(gè)系統(tǒng)細(xì)分為幾個(gè)模塊,再針對(duì)每個(gè)小模塊編寫代

32、碼。通過(guò)本次課程設(shè)計(jì)的學(xué)習(xí),學(xué)會(huì)了很多東西,了解了開發(fā)一個(gè)系統(tǒng)的一些步驟。盡管大部分都參考權(quán)威書籍的代碼,但是在編寫代碼過(guò)程中還是加深了對(duì)鏈表的了解程度。開發(fā)工具用的是WIN-TC ,而目前用得比較多的應(yīng)用程序的開發(fā)系統(tǒng)都是可視化的集成開發(fā)環(huán)境,比如Visual C++等,但是在底層開發(fā)比如硬件驅(qū)動(dòng)程序的開發(fā)上,直接寫出優(yōu)秀的源代碼還是一個(gè)程序員必須掌握的。所以 ,作為計(jì)算機(jī)軟件專業(yè)的學(xué)生,我們都應(yīng)該努力去做好!</p>

33、<p><b>  源代碼</b></p><p>  /*11.3.2 源程序*/</p><p>  /***********xue sheng guan li xi tong.c***********/</p><p>  /******頭文件(.h)***********/</p><p>  #in

34、clude "stdio.h" /*I/O函數(shù)*/</p><p>  # include "bios.h" /*ROM基本輸入輸出函數(shù)*/</p><p>  #include "stdlib.h" /*其它說(shuō)明*/</p><p>  #include "dos.h"

35、 /*dos接口函數(shù)*/</p><p>  #include "string.h" /*字符串函數(shù)*/</p><p>  #include "conio.h" /*屏幕操作函數(shù)*/</p><p>  #include "mem.h" /*內(nèi)存操作函數(shù)*/</p><p

36、>  #include "ctype.h" /*字符操作函數(shù)*/</p><p>  #include "alloc.h" /*動(dòng)態(tài)地址分配函數(shù)*/</p><p>  #define N 3 /*定義常數(shù)*/</p><p>  typedef struct z1 /*定義數(shù)據(jù)結(jié)構(gòu)*/</

37、p><p><b>  {</b></p><p>  char no[11];</p><p>  char name[15];</p><p>  int score[N];</p><p>  float sum;</p><p>  float average;<

38、/p><p>  int order;</p><p>  struct z1 *next;</p><p><b>  }STUDENT;</b></p><p>  /*以下是函數(shù)原型*/</p><p>  STUDENT *init(); /*初始化函數(shù)*/</p>

39、<p>  STUDENT *create(); /*創(chuàng)建鏈表*/</p><p>  STUDENT *delete(STUDENT *h); /*刪除記錄*/</p><p>  void print(STUDENT *h); /* 顯示所有記錄*/</p><p>  void search(STUDENT *h); /*查找*/&

40、lt;/p><p>  void save(STUDENT *h); /*保存*/</p><p>  STUDENT *load(); /*讀入記錄*/</p><p>  void computer(STUDENT *h); /*計(jì)算總分和平均分*/</p><p>  STUDENT *insert(STUDENT

41、*h); /*插入記錄*/</p><p>  void append(); /*追加記錄*/</p><p>  void copy(); /*復(fù)制文件*/</p><p>  STUDENT *sort(STUDENT *h); /*排序*/</p><p>  STUDENT *in

42、dex(STUDENT *h); /*索引*/</p><p>  void auther(); /*版本信息*/ </p><p>  void total(STUDENT *h); /*分類合計(jì)*/</p><p>  int menu_select(); /*菜單函數(shù)*/</p><p>

43、;  /******主函數(shù)開始*******/</p><p><b>  main()</b></p><p><b>  {</b></p><p><b>  int i;</b></p><p>  STUDENT *head; /*鏈表定義頭指針*/</

44、p><p>  head=init(); /*初始化鏈表*/</p><p>  printf("\n\n\n\n\n\n\n\n\n");</p><p>  printf("\t\t \4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4

45、\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");</p><p>  printf("\t\t \6 Welcome to the students-score System! \6 \n");</p><p>  printf("\t\t \6 ---Chen Tian Lin---

46、 \6 \n");</p><p>  printf("\t\t \4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\4\n");</p><p>  for(;;) /*無(wú)限循環(huán)*/

47、</p><p><b>  {</b></p><p>  switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語(yǔ)句的條件*/</p><p>  { /*值不同,執(zhí)行的函數(shù)不同,break 不能省略*/</p><p>  case 0:he

48、ad=init();break; /*執(zhí)行初始化*/</p><p>  case 1:head=create();break; /*創(chuàng)建鏈表*/</p><p>  case 2:head=delete(head);break; /*刪除記錄*/</p><p>  case 3:print(head);break; /*顯示全部記錄*/</p>

49、;<p>  case 4:search(head);break; /*查找記錄*/</p><p>  case 5:save(head);break; /*保存文件*/</p><p>  case 6:head=load(); break; /*讀文件*/</p><p>  case 7:computer(head);break; /*

50、計(jì)算總分和均分*/</p><p>  case 8:head=insert(head); break; /*插入記錄*/</p><p>  case 9:copy();break; /*復(fù)制文件*/</p><p>  case 10:head=sort(head);break; /*排序*/</p><p>  case 11

51、:append();break; /*追加記錄*/</p><p>  case 12:head=index(head);break; /*索引*/</p><p>  case 13:total(head);break; /*分類合計(jì)*/</p><p>  case 14:exit(0); /*如菜單返回值為14程序結(jié)束*/</p

52、><p>  case 15:auther(); /*版本信息*/</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*菜單函數(shù),返回值為整數(shù)*/</p

53、><p>  menu_select()</p><p><b>  {</b></p><p>  char *f[]={"\2\2\1\1\1\1\1\1\1\1\1 SCORES MENU \1\1\1\1\1\1\1\1\1\2\2", /*定義菜單字符串?dāng)?shù)組*/</p><p>  "

54、; 0. init list ", /*初始化*/</p><p>  " 1. Enter list ", /*輸入記錄*/</p><p>  " 2. Delete a record from list ", /*從表中刪除記錄*/</p><p>  " 3. prin

55、t list ", /*顯示單鏈表中所有記錄*/</p><p>  " 4. Search record on name ", /*按照姓名查找記錄*/</p><p>  " 5. Save the file ", /*將單鏈表中記錄保存到文件中*/<

56、/p><p>  " 6. Load the file ", /*從文件中讀入記錄*/</p><p>  " 7. computer the score", /*計(jì)算所有學(xué)生的總分和均分*/</p><p>  " 8. insert record to list

57、 ", /*插入記錄到表中*/</p><p>  " 9. copy the file to new file", /*復(fù)制文件*/</p><p>  "10. sort to make new file", /*排序*/</p><p>  "11. append record to f

58、ile", /*追加記錄到文件中*/</p><p>  "12. index on nomber", /*索引*/</p><p>  "13. total on nomber", /*分類合計(jì)*/</p><p>  "14. Quit " ,

59、 /*退出*/</p><p>  "15. auther ", /*版本信息*/</p><p>  "\5\3\5 Enter the * to return when need ! \5\3\5",</p><p><b>  };</b></p><p>  c

60、har s[80]; /*以字符形式保存選擇號(hào)*/</p><p><b>  int i;</b></p><p>  int key=0; /*記錄所壓鍵值*/</p><p><b>  int c=0;</b></p><p>  gotoxy(25,25); /*移動(dòng)光標(biāo)*/<

61、;/p><p>  printf("press any key enter menu......\n");/*壓任意鍵進(jìn)入主菜單*/</p><p><b>  getch();</b></p><p>  clrscr(); /*清屏*/</p><p>  textcolor(YELLOW ); /

62、*設(shè)置文本顏色為黃色*/</p><p>  textbackground(BLUE ); /*設(shè)置背景顏色為藍(lán)色*/</p><p>  gotoxy(10,2);</p><p>  putch(0xda); /*輸出左上角邊框┏*/</p><p>  for(i=1;i<53;i++)</p><p>

63、  putch(0xc4); /*輸出上邊框水平線*/</p><p>  putch(0xbf); /*輸出右上角邊框 ┓*/</p><p>  for(i=3;i<22;i++)/*輸出左右兩邊的垂直線*/</p><p><b>  {</b></p><p>  gotoxy(10,i);putch(0

64、xb3);</p><p>  gotoxy(63,i);putch(0xb3);</p><p><b>  }</b></p><p>  gotoxy(10,22);putch(0xc0); /*輸出左下角邊框┗*/</p><p>  for(i=1;i<53;i++)</p><p&g

65、t;  putch(0xc4); /*輸出下邊框水平線*/</p><p>  putch(0xd9); /*輸出右下角邊框┛*/</p><p>  window(11,3,62,21); /* 制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計(jì)*/</p><p>  clrscr(); /*清屏*/</p><p>  for(i=0;i

66、<18;i++)</p><p><b>  {</b></p><p>  gotoxy(10,i+1);</p><p>  cprintf("%s",f[i]); /*輸出菜單項(xiàng)數(shù)組*/</p><p><b>  }</b></p><p>

67、<b>  i=1;</b></p><p>  gotoxy(10,2); /*設(shè)置默認(rèn)選項(xiàng)在第一項(xiàng)*/</p><p>  textbackground(BLINK );/*設(shè)置背景顏色為淺綠*/</p><p>  cprintf("%s",f[1]); /*輸出菜單項(xiàng),表示選中*/</p><

68、p>  gotoxy(10,2); /*移動(dòng)光標(biāo)到菜單的第一項(xiàng)*/</p><p>  while(key!=13) /*所壓鍵不是回車鍵時(shí)*/</p><p><b>  {</b></p><p>  while(bioskey(1)==0); /*查詢是否壓下了一個(gè)鍵*/</p><p>  key=

69、bioskey(0); /*返回下一個(gè)在鍵盤壓下的鍵*/</p><p>  key=key&0xff?key&0xff:key>>8; /*對(duì)所壓的鍵進(jìn)行判斷*/</p><p>  gotoxy(10,i+1);</p><p>  textbackground(BLUE);/*設(shè)置背景顏色為藍(lán)色*/</p><

70、;p>  cprintf("%s",f[i]); /*輸出菜單項(xiàng)*/</p><p>  if(key==72) i=i==1?16:i-1; /*如壓向上光標(biāo)鍵↑,i減1,如已到第一行再上移,則到最后一行*/</p><p>  if(key==80)i=i==16?1:i+1; /*如壓向下光標(biāo)鍵↓,i加1,如已到最后一行再下移,則到第一行*/</p&

71、gt;<p>  gotoxy(10,i+1); /*光標(biāo)移動(dòng)i的下一項(xiàng)*/</p><p>  textbackground(LIGHTRED); /*將背景顏色設(shè)為淺紅*/</p><p>  cprintf("%s",f[i]); /*輸出菜單項(xiàng)*/</p><p>  c=i-1; /*給代表菜單選項(xiàng)的整數(shù)賦值*/<

72、;/p><p><b>  }</b></p><p>  textbackground(CYAN ); /*設(shè)置背景顏色為青色*/</p><p>  window(1,1,80,25); /*恢復(fù)原窗口大小*/</p><p>  return c; /*返回代表菜單選項(xiàng)的整數(shù)值*/</p><

73、p><b>  }</b></p><p>  STUDENT *init()</p><p>  { return NULL;}</p><p><b>  /*1創(chuàng)建鏈表*/</b></p><p>  STUDENT *create()</p><p><b

74、>  {</b></p><p>  int i; int s;</p><p>  STUDENT *h=NULL,*info; /* STUDENT指向結(jié)構(gòu)體的指針*/</p><p><b>  for(;;)</b></p><p><b>  {</b></p&g

75、t;<p>  info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請(qǐng)空間*/</p><p>  if(!info) /*如果指針info為空*/</p><p><b>  {</b></p><p>  printf("\nout of memory"); /

76、*輸出內(nèi)存溢出*/</p><p>  return NULL; /*返回空指針*/</p><p><b>  }</b></p><p>  inputs("enter no:",info->no,11); /*輸入學(xué)號(hào)并校驗(yàn)*/</p><p>  if(info-

77、>no[0]=='*') break; /*如果學(xué)號(hào)首字符為@則結(jié)束輸入*/</p><p>  inputs("enter name:",info->name,15); /*輸入姓名,并進(jìn)行校驗(yàn)*/</p><p>  printf("please input %d score \n",N); /*提示開始輸入成

78、績(jī)*/</p><p>  s=0; /*計(jì)算每個(gè)學(xué)生的總分,初值為0*/</p><p>  for(i=0;i<N;i++) /*N門課程循環(huán)N次*/</p><p><b>  {</b></p><p><b>  do{</b></p><p

79、>  printf("score%d:",i+1); /*提示輸入第幾門課程*/</p><p>  scanf("%d",&info->score[i]); /*輸入成績(jī)*/</p><p>  if(info->score[i]>100||info->score[i]<0) /*確保成績(jī)?cè)?

80、~100之間*/</p><p>  printf("bad data,repeat input\n"); /*出錯(cuò)提示信息*/ </p><p>  }while(info->score[i]>100||info->score[i]<0);</p><p>  s=s+info->score[i]; /*累

81、加各門課程成績(jī)*/</p><p><b>  }</b></p><p>  info->sum=s; /*將總分保存*/</p><p>  info->average=(float)s/N; /*求出平均值*/</p><p>  info->order=0; /*未排序前此值為0*

82、/</p><p>  info->next=h; /*將頭結(jié)點(diǎn)做為新輸入結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/</p><p>  h=info; /*新輸入結(jié)點(diǎn)為新的頭結(jié)點(diǎn)*/</p><p><b>  }</b></p><p>  return(h); /*返回頭指針*/</p><p>

83、;<b>  }</b></p><p>  /*2輸入字符串,并進(jìn)行長(zhǎng)度驗(yàn)證*/</p><p>  inputs(char *prompt, char *s, int count)</p><p><b>  {</b></p><p>  char p[255];</p><

84、;p>  clrscr(); /*清屏*/</p><p>  do{printf("No. name yu wen shu xue ying yu /Enter the * to return when need\n");</p><p>  printf(prompt); /*顯示提示信息*/</p><p>  scan

85、f("%s",p); /*輸入字符串*/</p><p>  if(strlen(p)>count)printf("\n too long! \n"); /*進(jìn)行長(zhǎng)度校驗(yàn),超過(guò)count值重輸入*/</p><p>  }while(strlen(p)>count);</p><p>  strcpy(s,p);

86、 /*將輸入的字符串拷貝到字符串s中*/</p><p><b>  }</b></p><p>  /*3輸出鏈表中結(jié)點(diǎn)信息*/</p><p>  void print(STUDENT *h)</p><p><b>  {</b></p><p>  int i=0;

87、 /* 統(tǒng)計(jì)記錄條數(shù)*/</p><p>  STUDENT *p; /*移動(dòng)指針*/</p><p>  clrscr(); /*清屏*/</p><p>  p=h; /*初值為頭指針*/</p><p>  printf("\n\n\n***************************STUDEN

88、T SCORES**************************************\n");</p><p>  printf("| rec|nO | name |yu wen|shu xue|ying yu| sum | ave |order|\n");</p><p>  printf("|--

89、--|----------|---------------|------|-------|-------|--------|-------|-----|\n");</p><p>  while(p!=NULL)</p><p><b>  {</b></p><p><b>  i++;</b></p&g

90、t;<p>  printf("|%3d |%-10s|%-15s|%6d|%7d|%7d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],</p><p>  p->score[2],p->sum,p->average,p->order);&l

91、t;/p><p>  p=p->next;</p><p><b>  }</b></p><p>  printf("**********************************end******************************************\n");</p><p&

92、gt;<b>  }</b></p><p><b>  /*4刪除記錄*/</b></p><p>  STUDENT *delete(STUDENT *h)</p><p><b>  {</b></p><p>  STUDENT *p,*q; /*p為查找到要?jiǎng)h除的結(jié)

93、點(diǎn)指針,q為其前驅(qū)指針*/</p><p>  char s[11]; /*存放學(xué)號(hào)*/</p><p>  clrscr(); /*清屏*/</p><p>  printf("please deleted no \n"); /*顯示提示信息*/</p><p>  scanf("

94、;%s",s); /*輸入要?jiǎng)h除記錄的學(xué)號(hào)*/</p><p>  q=p=h; /*給q和p賦初值頭指針*/</p><p>  while(strcmp(p->no,s)&&p!=NULL) /*當(dāng)記錄的學(xué)號(hào)不是要找的,或指針不為空時(shí)*/</p><p><b>  {</b></p>

95、;<p>  q=p; /*將p指針值賦給q作為p的前驅(qū)指針*/</p><p>  p=p->next; /*將p指針指向下一條記錄*/</p><p><b>  }</b></p><p>  if(p==NULL) /*如果p為空,說(shuō)明鏈表中沒有該結(jié)點(diǎn)*/</p><

96、p>  printf("\nlist no %s student\n",s);</p><p>  else /*p不為空,顯示找到的記錄信息*/</p><p><b>  {</b></p><p>  printf("*****************************have fou

97、nd***********************************\n");</p><p>  printf("|no | name |yu wen|shu xue|ying yu| sum | ave |order|\n");</p><p>  printf("|----------|-----

98、----------|------|-------|-------|--------|-------|-----|\n");</p><p>  printf("|%-10s|%-15s|%6d|%7d|%7d| %4.2f | %4.2f | %3d |\n", p->no,</p><p>  p->name,p->score[0],p-

99、>score[1],p->score[2],p->sum,</p><p>  p->average,p->order);</p><p>  printf("********************************end***************************************\n");</p>

100、<p>  getch(); /*壓任一鍵后,開始刪除*/</p><p>  if(p==h) /*如果p==h,說(shuō)明被刪結(jié)點(diǎn)是頭結(jié)點(diǎn)*/</p><p>  h=p->next; /*修改頭指針指向下一條記錄*/</p><p><b>  else</b></p><p> 

101、 q->next=p->next; /*不是頭指針,將p的后繼結(jié)點(diǎn)作為q的后繼結(jié)點(diǎn)*/</p><p>  free(p); /*釋放p所指結(jié)點(diǎn)空間*/</p><p>  printf("\n have deleted No %s student\n",s);</p><p>  printf("Don&

102、#39;t forget save\n");/*提示刪除后不要忘記保存文件*/</p><p><b>  }</b></p><p>  return(h); /*返回頭指針*/</p><p><b>  }</b></p><p><b>  /*5查找記錄*/&

103、lt;/b></p><p>  void search(STUDENT *h)</p><p><b>  {</b></p><p>  STUDENT *p; /* 移動(dòng)指針*/</p><p>  char s[15]; /*存放姓名的字符數(shù)組*/</p><p>  

104、clrscr(); /*清屏幕*/</p><p>  printf("please enter name for search\n");</p><p>  scanf("%s",s); /*輸入姓名*/</p><p>  p=h; /*將頭指針賦給p*/</p><p>  wh

105、ile(strcmp(p->name,s)&&p!=NULL) /*當(dāng)記錄的姓名不是要找的,或指針不為空時(shí)*/</p><p>  p=p->next; /*移動(dòng)指針,指向下一結(jié)點(diǎn)*/</p><p>  if(p==NULL) /*如果指針為空*/</p><p>  printf("\nlist n

106、o %s student\n",s); /*顯示沒有該學(xué)生*/</p><p>  else /*顯示找到的記錄信息*/</p><p><b>  {</b></p><p>  printf("\n\n*****************************havefound**********

107、**************************\n");</p><p>  printf("|nO | name |yu wen|shu xue|ying yu| sum | ave |order|\n");</p><p>  printf("|----------|---------------|

108、------|-------|-------|--------|-------|-----|\n");</p><p>  printf("|%-10s|%-15s|%6d|%7d|%7d| %4.2f | %4.2f | %3d |\n", p->no,</p><p>  p->name,p->score[0],p->score[1

109、],p->score[2],p->sum,p->average,p->order);</p><p>  printf("********************************end***************************************\n");</p><p><b>  }</b><

110、;/p><p><b>  }</b></p><p><b>  /*6插入記錄*/</b></p><p>  STUDENT *insert(STUDENT *h)</p><p><b>  {</b></p><p>  STUDENT *p,*

111、q,*info; /*p指向插入位置,q是其前驅(qū),info指新插入記錄*/</p><p>  char s[11]; /*保存插入點(diǎn)位置的學(xué)號(hào)*/</p><p><b>  int s1,i;</b></p><p>  clrscr(); /*清屏幕*/</p><p>  printf("plea

112、se enter location before the no /Enter the * to return when need\n");</p><p>  scanf("%s",s); /*輸入插入點(diǎn)學(xué)號(hào)*/</p><p>  printf("\nplease new record\n"); /*提示輸入記錄信息*/&

113、lt;/p><p>  info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請(qǐng)空間*/</p><p><b>  if(!info)</b></p><p><b>  {</b></p><p>  printf("\nout of memory&q

114、uot;); /*如沒有申請(qǐng)到,內(nèi)存溢出*/</p><p>  return NULL; /*返回空指針*/</p><p><b>  }</b></p><p>  inputs("enter no:",info->no,11); /*輸入學(xué)號(hào)*/</p><p&g

115、t;  inputs("enter name:",info->name,15); /*輸入姓名*/</p><p>  printf("please input %d score \n",N); /*提示輸入分?jǐn)?shù)*/</p><p>  s1=0; /*保存新記錄的總分,初值為0*/</p><p>  for(

116、i=0;i<N;i++) /*N門課程循環(huán)N次輸入成績(jī)*/</p><p><b>  {</b></p><p>  do{ /*對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,保證在0~100之間*/</p><p>  printf("score%d:",i+1);</p><p>  scanf(&

117、quot;%d",&info->score[i]);</p><p>  if(info->score[i]>100||info->score[i]<0)</p><p>  printf("bad data,repeat input\n");</p><p>  }while(info->s

118、core[i]>100||info->score[i]<0);</p><p>  s1=s1+info->score[i]; /*計(jì)算總分*/</p><p><b>  }</b></p><p>  info->sum=s1; /*將總分存入新記錄中*/</p><p> 

119、 info->average=(float)s1/N; /*計(jì)算均分*/</p><p>  info->order=0; /*名次賦值0*/</p><p>  info->next=NULL; /*設(shè)后繼指針為空*/</p><p>  p=h; /*將指針賦值給p*/</p>

120、<p>  q=h; /*將指針賦值給q*/</p><p>  while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/</p><p><b>  {</b></p><p>  q=p; /*保存指針p,作為下一個(gè)p

121、的前驅(qū)*/</p><p>  p=p->next; /*將指針p后移*/</p><p><b>  }</b></p><p>  if(p==NULL) /*如果p指針為空,說(shuō)明沒有指定結(jié)點(diǎn)*/</p><p>  if(p==h) /*同時(shí)p等于h,說(shuō)明鏈表為空*/&l

122、t;/p><p>  h=info; /*新記錄則為頭結(jié)點(diǎn)*/</p><p><b>  else</b></p><p>  q->next=info; /*p為空,但p不等于h,將新結(jié)點(diǎn)插在表尾*/</p><p><b>  else</b></p><p>

123、  if(p==h) /*p不為空,則找到了指定結(jié)點(diǎn)*/</p><p><b>  {</b></p><p>  info->next=p; /*如果p等于h,則新結(jié)點(diǎn)插入在第一個(gè)結(jié)點(diǎn)之前*/</p><p>  h=info; /*新結(jié)點(diǎn)為新的頭結(jié)點(diǎn)*/</p><p><b>  }

124、</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  info->next=p; /*不是頭結(jié)點(diǎn),則是中間某個(gè)位置,新結(jié)點(diǎn)的后繼為p*/</p><p>  q->next=info; /*新結(jié)點(diǎn)作為q的后繼

125、結(jié)點(diǎn)*/</p><p><b>  }</b></p><p>  printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存盤*/</p>

126、<p>  return(h); /*返回頭指針*/</p><p><b>  }</b></p><p>  /*7保存數(shù)據(jù)到文件*/</p><p>  void save(STUDENT *h)</p><p><b>  {</b></p><

127、;p>  FILE *fp; /*定義指向文件的指針*/</p><p>  STUDENT *p; /* 定義移動(dòng)指針*/</p><p>  char outfile[10]; /*保存輸出文件名*/</p><p>  clrscr(); /*清屏*/</p><p>  printf

128、("Enter outfile name,for example c:\\f1\\te.txt: /Enter the * to return when need \n"); /*提示文件名格式信息*/</p><p>  scanf("%s",outfile);</p><p>  if((fp=fopen(outfile,"wb&quo

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論