C語言課程設(shè)計指導(dǎo)書_第1頁
C語言課程設(shè)計指導(dǎo)書_第2頁
C語言課程設(shè)計指導(dǎo)書_第3頁
C語言課程設(shè)計指導(dǎo)書_第4頁
C語言課程設(shè)計指導(dǎo)書_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C 語 言 課 程 設(shè) 計 指 導(dǎo) 書第二版劉躍峰 李天博 陸繼遠(yuǎn)編江蘇大學(xué)電氣學(xué)院2007.5課程設(shè)計目標(biāo)一、課程設(shè)計目標(biāo)C語言課程設(shè)計的目的是通過課程設(shè)計的綜合訓(xùn)練,培養(yǎng)學(xué)生實際分析問題、編程和動手能力,最終目標(biāo)是通過這種形式,幫助學(xué)生系統(tǒng)掌握該門課程的主要內(nèi)容,更好地完成教學(xué)任務(wù)。本課程設(shè)計具有如下特點:(1)重點在于C語言的基本特征上,涵蓋了C語言的重要基礎(chǔ)知識。(2)結(jié)合了實際應(yīng)用的要求,使課程設(shè)計既涵蓋知識點,又接近工程實際需要。通過激發(fā)學(xué)習(xí)興趣,調(diào)動學(xué)生主動學(xué)習(xí)的積極性,并引導(dǎo)他們根據(jù)實際編程要求,訓(xùn)練自己實際分析問題的能力以及編程能力,并養(yǎng)成良好的編程習(xí)慣。(3)每個課程設(shè)計均

2、給出要求與算法,為學(xué)生創(chuàng)造獨立思考的條件。學(xué)生在吃透要求與算法的前提下,完全可以設(shè)計出自己的應(yīng)用程序。(4)有些課程設(shè)計還提出了一些改進(jìn)措施或要求,可以供有興趣的同學(xué)擴(kuò)充自己的設(shè)計。(5)課程設(shè)計分為基本部分與擴(kuò)展部分,以滿足不同學(xué)生的要求。(6)提供兩個綜合課程設(shè)計,以期進(jìn)一步鍛煉學(xué)生的動手能力。還可以將其分為幾個子項目,讓學(xué)生分工合作,以培養(yǎng)團(tuán)隊精神。另外,在實際編程中,為了提高編程質(zhì)量,希望學(xué)生在書寫代碼時,對空行、空格和注釋嚴(yán)格按要求處理,以建立良好的編程風(fēng)格。二、課程設(shè)計結(jié)構(gòu)C語言的組成是函數(shù)調(diào)用,所以課程設(shè)計的重點是函數(shù)。函數(shù)設(shè)計的難點是選擇函數(shù)類型及其參數(shù)的傳遞方式。數(shù)據(jù)類型及程

3、序控制方式是C語言的基礎(chǔ);數(shù)組、指針和結(jié)構(gòu)的使用技術(shù)是編程的核心技術(shù),也是程序設(shè)計人員必備的知識,因此本課程設(shè)計特意加強這方面的訓(xùn)練。本課程設(shè)計共選擇了六個設(shè)計課題,不使用一個獨立的課題涵蓋所有知識點,而是按層次逐步深入。這些課題及其簡要說明如下:1、使用數(shù)組和指針統(tǒng)計成績數(shù)組和指針是C語言的重要概念,數(shù)組與指針之間的關(guān)系又容易混淆。另外,字符串?dāng)?shù)組的使用方法與普通的數(shù)值型數(shù)組的用法也有所不同,它們與指針之間的關(guān)系也較特殊。該課題圍繞以上問題展開,同時有意拓寬字符串?dāng)?shù)組的用途,引入多維字符串?dāng)?shù)組及數(shù)組指針。為了適應(yīng)不同層次學(xué)生的需要,將它們分為幾個不同的設(shè)計要求,以便靈活取舍。2、統(tǒng)計工資該課

4、程設(shè)計要求設(shè)計一個公司職員的數(shù)據(jù)結(jié)構(gòu),并使用結(jié)構(gòu)指針數(shù)組存儲職員信息,統(tǒng)計公司員工工資總額和平均工資,目的是深入了解函數(shù)參數(shù)類型和結(jié)構(gòu)之間的關(guān)系。3、職工檔案及簡明信息生成該課程設(shè)計涉及到的知識點是結(jié)構(gòu)數(shù)組及其指針的關(guān)系,尤其是結(jié)構(gòu)數(shù)組的讀取問題。因為要求使用菜單選擇各項功能,這又涉及到函數(shù)類型及其參數(shù)傳遞問題。為了編制滿足該課程設(shè)計要求的函數(shù),需要進(jìn)一步深入理解函數(shù)的性質(zhì)。4、鏈表信息管理該課程設(shè)計的重點集中在鏈表,包括創(chuàng)建鏈表,使用鏈表存儲結(jié)構(gòu)信息,增加鏈表結(jié)點及刪除鏈表結(jié)點等基本操作。5、簡單通信錄程序該課程設(shè)計可在鏈表程序的基礎(chǔ)上,增加檢索與排序,并且能夠打開指定文件或修改指定文件,還

5、可將多個文件組成一個文件。6、學(xué)籍管理程序該課程設(shè)計是設(shè)計一個實用的小型學(xué)生成績管理程序,要求不用鏈表,而用數(shù)組來設(shè)計。它具有排序和檢索等功能,并且能夠?qū)χ付ㄎ募僮?,還可將多個文件組成一個文件。第一章 使用數(shù)組和指針統(tǒng)計成績1.1 設(shè)計題目本課程設(shè)計主要練習(xí)數(shù)組和指針的使用。假定給定班級各科考試平均成績的原始資料如下:數(shù)學(xué):75物理:80外語:83政治:85體育:86人數(shù):30要求統(tǒng)計出全班學(xué)期總平均成績以及得分最低的科目和該科目的成績。要求的輸出結(jié)果如下:全班各科平均成績?nèi)缦拢簲?shù)學(xué):75物理:80外語:83政治:85體育:86則統(tǒng)計結(jié)果如下:人數(shù):30平均成績:81最低分科目的成績:75最

6、低分?jǐn)?shù)的科目:數(shù)學(xué)1.2 設(shè)計要求對存放原始數(shù)據(jù)的要求如下:(1)使用整型數(shù)組a存放數(shù)學(xué)、物理、外語、政治、體育、人數(shù)、平均成績、最低分?jǐn)?shù)科目的成績。(2)使用字符串?dāng)?shù)組name存放數(shù)學(xué)、物理、外語、政治、體育、最低分?jǐn)?shù)的科目。(3)使用字符串?dāng)?shù)組MeanLow存放人數(shù)、平均成績、最低分?jǐn)?shù)科目的成績、最低分?jǐn)?shù)的科目。實現(xiàn)本設(shè)計功能的方法很多,在此給出3種難易程度不同的要求,以便加深對數(shù)組和指針知識的理解。1、使用數(shù)組實現(xiàn)使用數(shù)組和指針數(shù)組實現(xiàn)。2、使用分配的內(nèi)存實現(xiàn)要求將數(shù)組a的內(nèi)容存入到分配的內(nèi)存中,使用指針實現(xiàn)對內(nèi)存內(nèi)容的存取和計算。3、將數(shù)組內(nèi)容全部存入內(nèi)存為字符分配內(nèi)存,并將字符數(shù)組的

7、內(nèi)容存入所分配的內(nèi)存中,使用指針來實現(xiàn)。第二章 統(tǒng)計工資2.1 設(shè)計題目本課程設(shè)計要求設(shè)計一個公司職員的數(shù)據(jù)結(jié)構(gòu),并使用結(jié)構(gòu)指針數(shù)組存儲職員信息,統(tǒng)計公司員工工資總額和平均工資。2.2 設(shè)計要求設(shè)計要求實現(xiàn)如下功能:(1)使用結(jié)構(gòu)指針數(shù)組設(shè)計一個公司職員的數(shù)據(jù)結(jié)構(gòu),使用下述的結(jié)構(gòu)定義:typedef struct employeeint age;char *name;double salary;*PEMP;(2)在主函數(shù)里構(gòu)造一個指針數(shù)組company,用來存放職工信息。(3)設(shè)計一個update函數(shù),用來給company賦值。函數(shù)update(company, id, age, name,

8、salary)的四個參數(shù)為:company: 結(jié)構(gòu)指針數(shù)組id: company的下標(biāo)age: 年齡,整數(shù)類型salary: 薪水,實數(shù)(4)設(shè)計一個readin函數(shù),直接采用調(diào)用update函數(shù)的方式進(jìn)行賦值。例如:update(company, 2, 30, “LI MING”, 3000.0);(5)編寫total函數(shù)對工資求和。這個函數(shù)應(yīng)該能對全體職工和某一年齡段的職工的工資求和。(6)編寫mean函數(shù)求平均工資。這個函數(shù)應(yīng)該能對全體職工和大于某一年齡段的職工的工資求和并計算相應(yīng)的平均值。2.3 算法分析為了簡單起見,假設(shè)在主函數(shù)main中定義結(jié)構(gòu)數(shù)組指針如下:PEMP company

9、num;下面說明幾個函數(shù)的設(shè)計問題:(1)readin函數(shù)數(shù)組company屬于main函數(shù),它是不可見的,所以必須作為readin函數(shù)的參數(shù)。因為參數(shù)傳遞是傳地址的方式,所以不需要返回值。以數(shù)據(jù)為例,這個函數(shù)的定義和使用方法如下:void reading(company)PEMP company;update(company, 2, 23, “張文”,3000.0);update(company, 1, 33, “王微”,2400.0);update(company, 2, 23, “李小”,3055.0);(2)total函數(shù)它也必須以數(shù)組company作為參數(shù),而且要返回工資總額??蓪⑺?/p>

10、的原型設(shè)計為:double total (PEMP *);total函數(shù)應(yīng)該允許輸入年齡范圍,如果年齡不合理,應(yīng)該允許重新輸入。對輸入數(shù)據(jù)進(jìn)行判別,確保無誤再進(jìn)行計算。for( ; ; )printf(“輸入年齡范圍”);scanf(“%d%d”,&age1, &age2)if(age1>age2)i=age1;age1=age2;age2=i; if(age1>=0)&&(age2<=100)&&(age2>=0)&&(age2<=100)&&(age2>age1)break;

11、(3)mean函數(shù)mean函數(shù)也必須以數(shù)組company作為參數(shù),而且要返回平均工資。將它的函數(shù)原型設(shè)計為:double mean (PEMP *);mean函數(shù)應(yīng)該允許輸入年齡范圍。對輸入字符進(jìn)行判別,確保無誤再進(jìn)行計算,注意允許大小寫。printf(“求某一年齡段以上的職工的平均工資n”);printf(“默認(rèn)是全體職工的平均工資,要改變計算方式請輸入Y/yn”);getchar();ch=getchar();if(ch=Y|ch=y)printf(“age:”);scanf(“%d”,&age);(4)申請內(nèi)存在update函數(shù)中,需要申請內(nèi)存空間。PEMP empIf(emp=

12、(PEMP) malloc (sizeof(struct employee)=NULL)return;注意emp是指針,所以要使用sizeof(struct employee)。第三章 職工檔案及簡明信息生成3.1 設(shè)計題目本設(shè)計要求使用頭文件和菜單,并組成一個工程文件,對職工的檔案進(jìn)行管理并生成職工的簡明信息。3.2 設(shè)計要求設(shè)計要求實現(xiàn)如下功能:(1)建立wkrs職工數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)含有姓名、序號、性別和年齡信息。(2)建立一個結(jié)構(gòu)數(shù)組,以便存儲10個職工信息。(3)設(shè)計一個readin函數(shù),以便采用問答式輸入10個職工的信息。(4)編寫一個display函數(shù),要求使用結(jié)構(gòu)指針作為參數(shù),用來

13、輸出結(jié)構(gòu)數(shù)組的內(nèi)容。(5)建立wks職工簡明數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)中只含有姓名和年齡信息。(6)編制一個srt函數(shù),根據(jù)wks結(jié)構(gòu)建立的職工情況,把職工姓名和年齡信息抽出來,另外建一個只含職工姓名和年齡的wkshort結(jié)構(gòu)的數(shù)組。(7)編制一個delwk函數(shù),可以從簡明數(shù)據(jù)結(jié)構(gòu)中刪去指定的職工數(shù)據(jù)。如果數(shù)組中沒有要刪去的職工,則輸出沒有這個職工的信息;如果將內(nèi)容全部刪去,應(yīng)該給出內(nèi)容已空的提示信息。(8)將上述函數(shù)編制在一個文件里,共用一個頭文件。(9)用一個簡單的菜單提供上述操作。菜單信息為:1、輸入數(shù)據(jù)2、顯示原始數(shù)據(jù)3、制作簡明數(shù)據(jù)4、刪除簡明數(shù)據(jù)5、結(jié)束退出Please Input 1-5:

14、3.3 算法分析1、結(jié)構(gòu)數(shù)組根據(jù)要求,可以定義它們各自的數(shù)據(jù)結(jié)構(gòu)及其結(jié)構(gòu)數(shù)組如下:struct wkrschar num10;char name10;char sex3;int age;wk10;struct wkrchar name10;int age;wkshort10;因為直接定義它們各自的結(jié)構(gòu)數(shù)組,所以各個函數(shù)可以直接對這些數(shù)組進(jìn)行操作。2、函數(shù)類型如上所述,因為直接定義了結(jié)構(gòu)數(shù)組,所以以下函數(shù)均不需要參數(shù),也不需要返回值。void reading();void disp();void delwk();void srt();int menu_select();3、結(jié)構(gòu)指針顯示數(shù)據(jù)的di

15、splay函數(shù),本身不需要使用結(jié)構(gòu)指針,但題目要求使用結(jié)構(gòu)指針實現(xiàn),所以其原型可以設(shè)計為:void display(struct wkrs *);它的程序代碼如下:void display(struct wkrs *p)char *c4=“序號”,“姓名”,“性別”,“年齡”;int i;p=wk;printf(“n%8st%8st%6st%4sn”, c0,c1,c2,c3);for(i=0;i<10;i+,p+)printf(“n%8st%8st%6st%4dn”, p->num,p->name,p->sex,p->age);printf(“n”);與普通數(shù)組

16、一樣,結(jié)構(gòu)數(shù)組名即結(jié)構(gòu)數(shù)組的首地址。結(jié)構(gòu)作為參數(shù)傳遞時,也是傳值方式。如果要修改普通的結(jié)構(gòu)數(shù)據(jù),必須使用傳址方式。下面的disp函數(shù)可以完成同一功能,但不用參數(shù)。void disp()char *c4=“序號”,“姓名”,“性別”,“年齡”;int i;printf(“n%8st%8st%6st%4sn”, c0,c1,c2,c3);for(i=0;i<num;i+)printf(“n%8st%8st%6st%4dn”,wki.num,,wki.sex, wki.age);第四章 鏈表信息管理4.1 設(shè)計題目本課程設(shè)計的目的是學(xué)習(xí)建立鏈表,使用鏈表存儲結(jié)構(gòu)信息,增加鏈表結(jié)

17、點及刪除鏈表結(jié)點等基本操作。實際設(shè)計時,可增加數(shù)據(jù)信息及檢索等功能。4.2 設(shè)計要求4.2.1 功能設(shè)計要求本設(shè)計要求實現(xiàn)如下功能:(1)本設(shè)計將重點放在整體設(shè)計上,信息只選成員代號和電話。(2)如果已經(jīng)有記錄,只能在其后追加。(3)顯示整個記錄的內(nèi)容(含新追加的新記錄)。(4)使代號可由6位字符和數(shù)字的混合編碼組成,如:A201,34011D等。(5)使電話號碼可由18位字符和數(shù)字組成,如(86)-551-34443535,1396786678等。(6)可以刪除全部記錄,可以隨時增加新記錄。(7)可以使用菜單實現(xiàn)增加、刪除和顯示等功能的選擇。(8)使用宏定義動態(tài)申請存儲空間。4.2.2 總體

18、設(shè)計本設(shè)計對模塊設(shè)計的要求如下:(1)要求使用多文件方式實現(xiàn)鏈表設(shè)計。(2)要求將它們分成3個模塊編制。一個模塊負(fù)責(zé)輸入;一個模塊負(fù)責(zé)顯示記錄的內(nèi)容;一個模塊含有主程序,主程序負(fù)責(zé)菜單選擇和命令處理。(3)每個模塊作為一個單獨的C文件,每個文件內(nèi)的函數(shù)及功能如表4-1所示。(4)宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。這樣,程序就由這4個源文件和頭文件組成,每個源文件都代表某種特定的功能。表4-1 文件及函數(shù)組成源文件函數(shù)名或其他功能record.cmain總控制函數(shù)menu_select菜單選擇handle_menu菜單處理input.cinput輸入數(shù)據(jù)delete.cdel刪除記錄d

19、isplay.cdisplay顯示鏈表內(nèi)容record.hASK(自定義宏)宏定義申請內(nèi)存結(jié)構(gòu)聲明結(jié)構(gòu)聲明庫函數(shù)及函數(shù)原型聲明引用庫函數(shù)及函數(shù)4.2.3 函數(shù)設(shè)計因為采用鏈表方式記錄,所以將它們的第一個結(jié)點作為參數(shù)傳遞。假設(shè)將數(shù)據(jù)結(jié)構(gòu)自定義為ADDR,用它定義*top為第一個記錄結(jié)構(gòu)的指針,分別描述這些函數(shù),并建立它們的函數(shù)原型。1建立鏈表函數(shù)函數(shù)原型:ADDR *input(ADDR *)功能:建立新結(jié)點參數(shù):接收結(jié)構(gòu)指針top工作方式:從尾部開始逐個追加記錄要求:將新記錄追加到記錄尾部。2顯示內(nèi)存動態(tài)記錄數(shù)據(jù)函數(shù)函數(shù)原型:void display(ADDR *)功能:顯示內(nèi)存中的記錄參數(shù):

20、接收結(jié)構(gòu)指針top工作方式:從頭部開始逐個顯示記錄內(nèi)容要求:報告是否有記錄及記錄條數(shù)和內(nèi)容。3刪除內(nèi)存動態(tài)記錄數(shù)據(jù)函數(shù)函數(shù)原型:void *del(ADDR *)功能:刪除內(nèi)存中的記錄參數(shù):接收結(jié)構(gòu)指針top工作方式:按給定方式和內(nèi)容查找,如果找到,則刪除該記錄內(nèi)容要求:報告是否有記錄以及是否刪除的信息。4菜單處理函數(shù)函數(shù)原型:void handle_menu(ADDR *)功能:處理選擇的菜單命令參數(shù):接收結(jié)構(gòu)指針top工作方式:根據(jù)命令,調(diào)用相應(yīng)的函數(shù)要求:給出結(jié)束信息。5菜單選擇函數(shù)函數(shù)原型:int menu_select(void)功能:接收用戶選擇的命令代碼參數(shù):無參數(shù)工作方式:返回

21、命令代碼的整數(shù)值要求:只允許選擇規(guī)定值,如果輸入不合要求,則提醒用戶重新輸入。6主函數(shù)函數(shù)原型:void main(void)功能:控制程序參數(shù):無參數(shù)要求:管理菜單命令并完成初始化。7頭部文件函數(shù)原型:record功能:聲明函數(shù)原型,包含文件及自定義宏和數(shù)據(jù)結(jié)構(gòu)要求:報告是否能正常申請內(nèi)存及存入記錄的條數(shù)等。4.3 算法分析1宏和數(shù)據(jù)結(jié)構(gòu)聲明自定義類型ADDR,根據(jù)數(shù)據(jù)長度的要求,均使用字符數(shù)組。為了使程序簡潔,根據(jù)自定義類型ADDR,特定義一個用來申請內(nèi)存空間的宏ASK。這樣,在程序中使用語句“ASK(top);”就可以為指針* top申請內(nèi)存空間。因為需要對記錄進(jìn)行計數(shù),所以設(shè)計一個全局

22、變量n用來計數(shù)。代碼清單如下:#define ASK(top) dop=(ADDR *)malloc(sizeof(ADDR);if (p=NULL)printf(“memory fail!”);exit(-1);while(0)#define LEN sizeof(ADDR)extern int count;typedef struct addresschar name8;char tel20;struct address *next;ADDR;2建立數(shù)據(jù)前的初始化主函數(shù)里如何實現(xiàn)初始化,決定了整個程序的功能。由函數(shù)組成可見,指針*top是公用的,但它應(yīng)該具有如下主函數(shù)中的初始值。void

23、main()ADDR *top,*star;ASK(top);ASK(star);top->next=NULL;count=0;handle_menu(top);3刪除全部數(shù)據(jù)后的處理因為在刪除操作中,可能將全部記錄刪除。這時就必須在退出之前恢復(fù)初始值。算法如下:(1)首先判別是否有記錄,沒有就退出操作if(count=0)printf(“記錄已經(jīng)為空,請退出刪除操作!”);return top;(2)對查找的方式進(jìn)行判別while(1)cn=atoi(choose);if(cn!=1 && cn!=2)printf(“輸入錯誤,重新選擇1-2:”);gets(choos

24、e);else break;(3)刪除指定數(shù)據(jù),如果刪除的是最后一個,恢復(fù)到初始值。if(count=0)ASK(top);ASK(star);top->next=NULL;return top;第五章 實用的小型通訊錄5.1 設(shè)計題目本課程設(shè)計是設(shè)計一個實用的小型通訊錄程序,它是在鏈表程序的基礎(chǔ)上,增加查詢功能,并且能夠打開指定文件或修改指定文件及將多個文件組成一個文件。5.2 設(shè)計要求5.2.1 功能設(shè)計要求本設(shè)計要求完成如下功能:1建立文件(1)存儲文件可以使用默認(rèn)文件名或指定文件名;(2)可以不保存輸入記錄,但需要確認(rèn)是否保存輸入記錄;(3)如果已經(jīng)有文件,只能在其后追加;(4)

25、新增的記錄可以不存入原文件中,也可以用原來的文件覆蓋內(nèi)存的內(nèi)容;(5)可以將兩個文件合并到一個文件中。2文件的存取和顯示(1)可以單獨存取文件;(2)可以隨時顯示內(nèi)存中記錄的全部內(nèi)容;(3)可以直接存取默認(rèn)文件或指定文件。3刪除記錄(1)可以按“姓名”或“電話”方式刪除記錄并更新內(nèi)存鏈表內(nèi)容;(2)能給出被刪除記錄的信息;(3)如果已經(jīng)是空表,刪除時應(yīng)給出提示信息并返回主菜單;(4)如果沒有要刪除的信息,輸出沒有找到的信息;(5)刪除操作僅限于內(nèi)存,只有執(zhí)行存記錄時,才能覆蓋原記錄。4查詢記錄(1)可以按“姓名”或“電話”方式查詢記錄;(2)能給出查詢記錄的信息;(3)如果查詢的信息不存在,輸

26、出沒有找到的信息。5整體功能(1)應(yīng)該可以隨時檢索、刪除或增加新記錄,保存或取消新的記錄;(2)使姓名可由16位字符和數(shù)字組成;(3)使電話號碼可由18位字符和數(shù)字組成;(4)將輸出信息加上輸出信息欄,例如:姓名電話Marry Li(86)-10-54546666(5)對存儲的文件進(jìn)行整理分類;(6)定義ASK宏,用于申請動態(tài)內(nèi)存;(7)使用菜單實現(xiàn)功能的正確選擇。6測試程序(1)應(yīng)列出測試大綱對程序進(jìn)行測試;(2)應(yīng)保證能測試到程序的各種邊緣情況。5.2.2 總體設(shè)計本課程設(shè)計對模塊設(shè)計的要求如下:(1)要求使用多文件方式實現(xiàn)鏈表設(shè)計;(2)要求在各個文件內(nèi)實現(xiàn)結(jié)構(gòu)化設(shè)計;(3)每個模塊作為

27、一個單獨的C文件,每個文件內(nèi)的函數(shù)如表5-1所示,表中給出了各個函數(shù)的功能說明;(4)宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。本設(shè)計由6個C文件(13個函數(shù))和一個頭文件組成,每個C文件都代表著某種特定的功能,它們的關(guān)系如表5-1所示。因為設(shè)計了文件連接功能,所以該程序包含文件的存、取過程。它的功能就是按輸入順序建立記錄。如果原來沒有記錄文件,可重新建立一個文件;如果已經(jīng)有記錄,可以先把文件內(nèi)容讀入,然后把新記錄追加到原來記錄的尾部;也可以單獨建立新文件,以后再使用連接功能拼裝。由上述功能分析可以看到程序的全貌。因為它有并列選擇,所以可以用選擇菜單方便地實現(xiàn)。這個菜單具有多個選擇項,用sw

28、itch語句可以實現(xiàn)這些選擇。表5-1 文件及函數(shù)組成源文件函數(shù)名及其他成分功能letter.cmain總控函數(shù)menu_select菜單選擇handle_menu菜單處理free_nodes釋放top的內(nèi)存空間quit結(jié)束運行new_addrBook新建通訊錄sls_disp.cslstore輸入信息display顯示信息delete_record.cdelete_record刪除記錄find_record.cfind_record查詢記錄link_files.clink_files連接文件save_loadsave文件存儲load文件讀取letter.hASK(自定義宏)宏定義申請內(nèi)存結(jié)構(gòu)

29、說明通訊錄結(jié)構(gòu)庫函數(shù)及函數(shù)原型聲明引用庫函數(shù)及函數(shù)5.2.3 函數(shù)設(shè)計因為采用鏈表方式記錄,所以將它們的第一個結(jié)點作為參數(shù)傳遞。假設(shè)將數(shù)據(jù)結(jié)構(gòu)自定義為ADDR,用它定義*top為第一個記錄結(jié)構(gòu)的指針,分別描述這些函數(shù),并建立它們的函數(shù)原型。1文件存儲操作函數(shù)函數(shù)原型:void save(ADDR *)功能:將記錄存入指定文件sname參數(shù):結(jié)構(gòu)指針top返回值:void工作方式:從鏈表頭部開始逐個存入文件。要求:報告是否有記錄可存,是否能正常建立或打開文件,根據(jù)要求執(zhí)行存入操作并報告存入記錄的條數(shù)。2文件讀取操作函數(shù)函數(shù)原型:ADDR *load(ADDR *)功能:將文件sname里的記錄取

30、入內(nèi)存參數(shù):結(jié)構(gòu)指針top返回值:返回結(jié)構(gòu)指針top工作方式:在內(nèi)存里從top處開始構(gòu)造鏈表并返回top。要求:報告是否有記錄可讀,是否能正常打開文件及讀取記錄的條數(shù)。3顯示內(nèi)存動態(tài)記錄數(shù)據(jù)函數(shù)函數(shù)原型:void display (ADDR *)功能:顯示內(nèi)存里的記錄參數(shù):結(jié)構(gòu)指針top返回值:void工作方式:從頭部開始逐個顯示記錄內(nèi)容。要求:報告是否有記錄及記錄條數(shù)和內(nèi)容。4輸入信息函數(shù)函數(shù)原型:ADDR *slstore (ADDR *) 功能:添加記錄 參數(shù):結(jié)構(gòu)指針top 返回值:返回結(jié)構(gòu)指針top 工作方式:從尾部開始逐個追加記錄。 要求:如果內(nèi)存已經(jīng)存在記錄,則將新記錄追加在記錄

31、尾部。如果還沒有建立記錄鏈表,則建立鏈表并從尾部開始追加記錄。5刪除記錄函數(shù)函數(shù)原型:ADDR *delete_record(ADDR *)功能:刪除內(nèi)存鏈表中的指定結(jié)點參數(shù):結(jié)構(gòu)指針top返回值:返回結(jié)構(gòu)指針top工作方式:根據(jù)給定的關(guān)鍵字,查找符合的結(jié)點并刪除。要求:給出相關(guān)信息。6查詢記錄函數(shù)函數(shù)原型:void find_record(ADDR *)功能:查詢內(nèi)存鏈表中是否含有該信息的結(jié)點參數(shù):結(jié)構(gòu)指針top返回值:void工作方式:根據(jù)給定的關(guān)鍵字,查找符合的結(jié)點并給出它的完整信息。要求:給出相關(guān)信息。7連接文件函數(shù)函數(shù)原型:void link_files(void)功能:將一個文件的

32、內(nèi)容追加到另一個文件的尾部參數(shù):void返回值:void工作方式:根據(jù)給定的文件名,將第2個文件追加到第1個文件的尾部。要求:給出相關(guān)信息8新建通訊錄函數(shù)函數(shù)原型:ADDR* new_addrBook(ADDR *)功能:新建通訊錄鏈表的表頭參數(shù):當(dāng)前通訊錄鏈表的表頭top返回值:新建通訊錄鏈表的表頭top工作方式:可將已改動通訊錄保存,釋放原通訊錄所占空間并插入新的記錄。要求:根據(jù)要求保存已改動通訊錄,然后建立新的記錄。9菜單處理函數(shù)函數(shù)原型:void handle_menu(ADDR *)功能:處理選擇的菜單命令參數(shù):結(jié)構(gòu)指針top返回值:void工作方式:根據(jù)命令,調(diào)用相應(yīng)函數(shù)。要求:給

33、出結(jié)束信息。10菜單選擇函數(shù)函數(shù)原型:void menu_select(void)功能:接收用戶選擇的命令代碼參數(shù):void返回值:int工作方式:返回命令代碼的整數(shù)值。要求:只允許選擇規(guī)定值,如果輸入不合要求,則提醒用戶重新輸入。11釋放內(nèi)存空間函數(shù)函數(shù)原型:void free_nodes(ADDR *)功能:釋放以top為頭部的鏈表的內(nèi)存空間參數(shù):當(dāng)前通訊錄鏈表的表頭top返回值:void工作方式:調(diào)用free函數(shù)釋放鏈表的內(nèi)存空間。要求:將計數(shù)器清零。12結(jié)束程序運行函數(shù)函數(shù)原型:void quit(ADDR *)功能:結(jié)束程序運行參數(shù):void返回值:void工作方式:根據(jù)要求決定在退

34、出之前是否將修改的記錄存入文件。要求:結(jié)束運行之前,詢問是否對修改的記錄進(jìn)行存儲。13主函數(shù)函數(shù)原型:void main(void)功能:控制程序參數(shù):void返回值:void要求:管理菜單命令并進(jìn)行初始化。14頭部文件文件名稱:letter.h功能:聲明函數(shù)原型,包含文件及自定義宏和數(shù)據(jù)結(jié)構(gòu)。要求:報告是否能正常打開文件執(zhí)行存入操作及存入記錄的條數(shù)。第六章 學(xué)生成績管理程序6.1 設(shè)計題目本課程設(shè)計是設(shè)計一個實用的小型學(xué)生成績管理程序,它要求不用鏈表,而用數(shù)組來設(shè)計這個程序。它有查詢和檢索等功能,并且能夠?qū)χ付ㄎ募僮?,也可將多個文件組成一個文件。6.2 設(shè)計要求6.2.1 功能設(shè)計要求本設(shè)

35、計要求完成如下功能:1建立文件(1)可以使用默認(rèn)文件名或指定文件名將記錄存儲到文件;(2)文件保存成功返回0,失敗返回-1;(3)設(shè)置保存標(biāo)志savedTag作為是否已對記錄進(jìn)行存儲操作的信息;(4)寫同名文件將覆蓋原來文件的內(nèi)容; 2增加學(xué)生記錄(1)可以在已有記錄后面追加新的記錄;(2)可以隨時用它增加新的記錄,它們僅保存在結(jié)構(gòu)數(shù)組中;(3)可以將一個文件讀入,追加在已有記錄的后面;(4)如果已經(jīng)采取用文件追加的方式,在沒有保存到文件之前,將繼續(xù)保持文件追加狀態(tài),以便實現(xiàn)連續(xù)文件追加操作方式;(5)如果沒有記錄存在,給出提示信息。3新建學(xué)生信息文件(1)用來重新建立學(xué)生信息記錄;(2)如果

36、已經(jīng)有記錄存在,可以覆蓋原記錄或者在原記錄后面追加,也可以將原有記錄信息保存到一個指定文件,然后重新建立記錄;(3)給出相應(yīng)的提示信息。4顯示記錄(1)如果沒有記錄可供顯示,給出提示信息;(2)可以隨時顯示內(nèi)存中的記錄;(3)顯示表頭。5文件存儲(1)可以按默認(rèn)名或指定名存儲記錄文件;(2)存儲成功返回0,失敗返回-1;(3)更新存儲標(biāo)志。6讀取文件(1)可以按默認(rèn)名字或指定名字將記錄文件讀入內(nèi)存;(2)讀取成功返回0,失敗返回-1;(3)可以將指定或默認(rèn)文件追加到現(xiàn)有記錄的尾部;(4)可以將文件連續(xù)追加到現(xiàn)有記錄并更新記錄的名次;(5)更新存儲標(biāo)志。7刪除記錄(1)可以按“學(xué)號”、“姓名”或

37、“名次”方式刪除記錄;(2)給出將被刪除記錄的信息,經(jīng)確認(rèn)后再刪除;(3)如果已經(jīng)是空表,刪除時應(yīng)給出提示信息并返回主菜單;(4)如果沒有要刪除的信息,輸出沒有找到的信息;(5)應(yīng)該更新其他記錄的名次;(6)刪除操作僅限于內(nèi)存,只有執(zhí)行存記錄時,才能覆蓋原記錄。(7)更新存儲標(biāo)志。8修改記錄(1)可以按“學(xué)號”、“姓名”或“名次”方式修改記錄內(nèi)容;(2)給出將被修改記錄的信息,經(jīng)確認(rèn)后再修改;(3)如果已經(jīng)是空表,刪除時應(yīng)給出提示信息并返回主菜單;(4)如果沒有找到要修改的信息,輸出提示信息;(5)應(yīng)該同時更新其他記錄的名次;(6)修改操作僅限于內(nèi)存,只有執(zhí)行存儲操作時,才能覆蓋原記錄。(7)

38、更新存儲標(biāo)志。9查詢記錄(1)可以按“學(xué)號”、“姓名”或“名次”方式查詢記錄;(2)能給出查詢記錄的信息;(3)如果查詢的信息不存在,輸出提示信息。10對記錄進(jìn)行排序(1)可以按學(xué)號進(jìn)行升序或降序排序;(2)可以按姓名進(jìn)行升序或降序排序;(3)可以按名次進(jìn)行升序或降序排序;(4)如果屬于選擇錯誤,可以立即退出排序;(5)更新存儲標(biāo)志。11頭文件(1)使用條件編譯定義頭文件;(2)函數(shù)原型聲明;(3)數(shù)據(jù)結(jié)果及包含文件。12測試程序(1)應(yīng)列出測試大綱對程序進(jìn)行測試;(2)應(yīng)保證能測試到程序的各種邊緣情況。6.2.2 總體設(shè)計本課程設(shè)計對模塊設(shè)計的要求如下:(1)要求使用多文件方式實現(xiàn)設(shè)計;(2

39、)要求在各個文件內(nèi)實現(xiàn)結(jié)構(gòu)化設(shè)計;(3)每個模塊作為一個單獨的C文件,每個文件內(nèi)的函數(shù)如表6-1所示,表中給出了各個函數(shù)的功能說明;(4)宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。本設(shè)計由5個C文件(17個函數(shù))和一個頭文件組成,每個C文件都代表著某種特定的功能,它們的關(guān)系如表6-1所示。程序包含文件的存、取過程。它的功能就是按輸入順序建立記錄。如果原來沒有記錄文件,可重新建立一個文件;如果已經(jīng)有記錄,可以先把文件內(nèi)容讀入,然后把新記錄追加到原來記錄的尾部;也可以單獨建立新文件,以后再使用讀取文件的方法拼裝。由上述功能分析可以看到程序的全貌。因為它有并列選擇,所以可以用選擇菜單方便地實現(xiàn)。這

40、個菜單具有多個選擇項,用switch語句可以實現(xiàn)這些選擇。表6-1 文件及函數(shù)組成源文件函數(shù)名及其他成分功能student.cmain總控函數(shù)menu_select菜單選擇handle_menu菜單處理newRecords新建學(xué)生信息記錄quit結(jié)束運行add_disp.cshowTable打印表頭getIndex按升序排序的位置addRecord在表尾追加信息display顯示信息que_remv_modi.cremoveRecord刪除指定的記錄findRecord查找指定的記錄queryInfo查詢指定學(xué)生的信息copyRecord復(fù)制記錄modifyRecord修改指定學(xué)生的信息sav

41、e_loadSave文件存儲Load文件讀取sort.csortInfo排序student.h常數(shù)提供常數(shù)結(jié)構(gòu)說明學(xué)生成績結(jié)構(gòu)庫函數(shù)及函數(shù)原型聲明引用庫函數(shù)及函數(shù)6.2.3 函數(shù)設(shè)計為一些函數(shù)設(shè)計兩個返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個學(xué)生信息資料用一個StuInfo結(jié)構(gòu)來保存,用StuInfo數(shù)組全局變量records來保存一批學(xué)生的信息資料。其中用宏定義INITIAL_SIZE表示數(shù)組初始大小,當(dāng)已經(jīng)分配的數(shù)組大小不夠用時,將增加數(shù)組的大小,INCR_SIZE為每次增加的大小。全局變量numStus表示數(shù)組中記錄的學(xué)生數(shù),arraySize是為數(shù)組分配的空間大小。全局變量saveTag是信

42、息是否已保存的標(biāo)志,當(dāng)數(shù)組內(nèi)容被保存到文件后,設(shè)為“已保存”狀態(tài),當(dāng)數(shù)組內(nèi)容被修改之后,設(shè)為“未保存”狀態(tài)。下面分別描述這些函數(shù),并建立它們的函數(shù)原型。1文件存儲操作函數(shù)函數(shù)原型:int saveRecords(void)功能:將記錄存入默認(rèn)文件stu_info或指定文件參數(shù):void返回值:成功0,失敗-1工作方式:數(shù)組records被保存至指定文件。要求:報告是否有記錄可存,是否能正常建立或打開文件,根據(jù)要求執(zhí)行存入操作并報告存入記錄的條數(shù)。2文件讀取操作函數(shù)函數(shù)原型:int loadRecords(void)功能:將默認(rèn)文件stu_info或指定文件里的記錄取入內(nèi)存參數(shù):void返回值:

43、成功0,失敗-1工作方式:records將為從指定文件中讀取出的記錄。要求:報告是否有記錄可存,是否能正常打開文件、是否覆蓋已有記錄以及讀取記錄的條數(shù)。3顯示所有學(xué)生信息的函數(shù)函數(shù)原型:void display(void)功能:顯示內(nèi)存里的記錄信息參數(shù):void返回值:void工作方式:從頭部開始逐個顯示記錄內(nèi)容。要求:報告是否有記錄及記錄條數(shù)和內(nèi)容。4增加信息函數(shù)函數(shù)原型:void addRecord(void)功能:增加記錄參數(shù):void返回值:void工作方式:從尾部開始逐個追加記錄。要求:將新記錄追加在記錄尾部,并對記錄進(jìn)行計數(shù)。 5打印表頭函數(shù)函數(shù)原型:void showTable(void)功能:打印表頭參數(shù):void返回值:void工作方式:輸出一行表頭信息。要求:將表頭按制表符打印要求。6輸出在記錄中按升序排序的位置函數(shù)原型:int getIndex(float sum)功能:找出總分為sum在第0至numStus-1個記錄中按升

溫馨提示

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

評論

0/150

提交評論