C語言課程設計手冊_第1頁
C語言課程設計手冊_第2頁
C語言課程設計手冊_第3頁
C語言課程設計手冊_第4頁
C語言課程設計手冊_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言課程設計指導書

第二版

劉躍峰李天博陸繼遠編

江蘇大學電氣學院

2023.5

課程設計目的

一、課程設計目的

C語言課程設計的目的J是通過課程設計日勺綜合訓練,培養學生實際分析問題、

編程和動手能力,最終目的是通過這種形式,協的學生系統掌握該門課程的重要

內容,更好地完畢教學任務。

本課程設計具有如下特點:

(1)重點在于C語言的基本特性上,涵蓋了C語言的重要基礎知識。

(2)結合了實際應用的規定,使課程設計既涵蓋知識點,又靠近工程實際

需要。通過激發學習愛好,調動學生積極學習的積極性,并引導他們根據實際編

程規定,訓練自己實際分析問題口勺能力以及編程能力,并養成良好的編程習慣。

(3)每個課程設計均給出規定與算法,為學生發明獨立思索的條件。學生

在吃透規定與算法的前提下,完全可以設計出自己的應用程序。

(4)有些課程設計還提出了某些改善措施或規定,可以供有愛好的同學擴

充自己的設計。

(5)課程設計分為基本部分與擴展部分,以滿足不一樣學生叫規定。

(6)提供兩個綜合課程設計,以期深入鍛煉學生的動手能力。還可以將其

分為幾種子項目,讓學生分工合作,以培養團體精神。

此外,在實際編程中,為了提高編程質量,但愿學生在書寫代碼時,對空行、

空格和注釋嚴格按規定處理.,以建立良好的編程風格。

二、課程設計構造

C語言的構成是函數調用,因此課程設計的重點是函數。函數設計口勺難點是

選擇函數類型及其參數日勺傳遞方式。數據類型及程序控制方式是C語言的I基礎;

數組、指針和構造日勺使用技術是編程的關鍵技術,也是程序設計人員必備日勺知識,

因此本課程設計特意加強這方面日勺訓練。

本課程設計共選擇了六個設計課題,不使用一種獨立的課題涵蓋所有知識

點,而是按層次逐漸深入。這些課題及其簡要闡明如下:

1、使用數組和指針記錄成績

數組和指針是C語言的重要概念,數組與指針之間的關系又輕易混淆。此外,

字符串數組日勺使用措施與一般的數值型數組日勺使用方法也有所不一樣,它們與指

針之間日勺關系也較特殊。

該課題圍繞以上問題展開,同步故意拓寬字符串數組日勺用途,引入多維字符

串數組及數組指針。為了適應不一樣層次學生的需要,將它們分為幾種不一樣的

設計規定,以便靈活取舍。

2、記錄工資

該課程設計規定設計一種企業職工日勺數據構造,并使用構造指針數組存儲職

工信息,記錄企業員工工資總額和平均工資,目的是深入理解函數參數類型和構

造之間日勺關系。

3、職工檔案及簡要信息生成

該課程設計波及到日勺知識點是構造數組及其指針的關系,尤其是構造數組的

讀取問題。由于規定使用菜單項選擇擇各項功能,這又波及到函數類型及其參數

傳遞問題。

為了編制滿足該課程設計規定的函數,需要深入深入理解函數的性質。

4、鏈表信息管理

該課程設計的重點集中在鏈表,包括創立鏈表,使用鏈表存儲構造信息,增

長鏈表結點及刪除鏈表結點等基本操作。

5、簡樸通信錄程序

該課程設計可在鏈表程序的基礎上,增長檢索與排序,并且可以打開指定文

獻或修改指定文獻,還可將多種文獻構成一種文獻。

6、學籍管理程序

該課程設計是設計一種實用日勺小型學生成績管理程序,規定不用鏈表,而用

數組來設計。它具有排序和檢索等功能,并且可以對指定文蛾操作,還可將多種

文獻構成一種文獻。

第一章使用數組和指針記錄成績

1.1設計題目

本課程設計重要練習數組和指針的使用。

假定給定班級各科考試平均成績的原始資料如下:

數學:75

物理:80

外語:83

政治:85

體育:86

人數:30

規定記錄出全班學期總平均成績以及得分最低的科目和該科A的成績。規定

的輸出成果如下:

全班各科平均成績如下:

數學:75

物理:80

外語:83

政治:85

體育:86

則記錄成果如下:

人數:30

平均成績:81

最低分科目H勺成績:75

最低分數的科目:數學

1.2設計規定

對寄存原始數據的規定如下:

(1)使用整型數組a寄存數學、物理、外語、政治、體育、人數、平均成

績、最低分數科目的成績。

(2)使用字符串數組name寄存數學、物理、外語、政治、體育、最低分數

的科目。

(3)使用字符串數組MeanLow寄存人數、平均成績、最低分數科目的成績、

最低分數的科目。

實現本設計功能的措施諸多,在此給出3種難易程度不一樣的規定,以便加

深對數組和指針知識的理解。

1、使用數組實現

使用數組和指針數組實現。

2、使用分派的內存實現

規定將數組a的內容存入到分派的內存中,使用指針實現對內存內容的存取

和計算。

3、將數組內容所有存入內存

為字符分派內存,并將字符數組口勺內容存入所分派的內存中,使用指針來實

現。

第二章記錄工資

2.1設計題目

本課程設計規定設計一種企業職工的數據構造,并使用構造指針數組存儲職

工信息,記錄企業員工工資總額和平均工資。

2.2設計規定

設計規定實現如下功能:

(1)使用構造指針數組設計一種企業職工的數據構造,使用下述的構造定

義:

typedefstructemployee{

intage;

char*name;

doublesalary;

}*PEMP:

(2)在主函數里構造一種指針數組company,用來寄存職工信息。

(3)設計?一種update函數,用來給company賦值。

函數update(company,id,age,name,salary)『、J四個參數為:

company:構造指針數組

id:company口勺下標

age:年齡,整數類型

salary:薪水,實數

(4)設計一種readin函數,直接采用調用update函數的方式進行賦值。

例如:update(company,2,30,“LIMING”,3000.0);

(5)編寫total函數對工資求和。

這個函數應當能對全體職工和某一年齡段的職工的工資求和。

(6)編寫moan函數求平均工資。

這個函數應當能對全體職工和不小于某一年齡段日勺職工的工資求和并計算

對應[f、J平均值。

2.3算法分析

為了簡樸起見,假設在主函數main中定義構造數組指針如下:

PEMPcompany[num];

下面闡明幾種函數[1勺設計問題:

(1)readin函數

數組company屬于main函數,它是不可見日勺,因此必須作為readin函數的

參數。由于參數傳遞是傳地址的方式,因此不需要返回值。以數據為例,這個函

數口勺定義和使用措施如下:

voidreading(company)

PEMPcompany[];

(

update(company,2,23,“張文”,3000.0);

update(company,1,33,“王微”,2400.0);

update(company,2,23,“李小”,3055.0);

(2)total函數

它也必須以數組company作為參數,并且要返回工資總額。可將它日勺原型設

計為:

doubletotal(PEMP*);

total函數應當容許輸入年齡范圍,假如年齡不合理,應當容許重新輸入。

對輸入數據進行鑒別,保證無誤再進行計算。

for(;;)

(

printf(“輸入年齡范圍”);

scanf(u%d%dw,&agel,&age2)

if(agel>age2)

(

i=agel;

agel=age2;

age2=i;

)

if((agel>=0)&&(age2<=l00)&&(age2>=0)&&(age2<=l00)&&(age2>age1))

break;

(3)mean函數

mean函數也必須以數組company作為參數,并且要返回平均工資。將它的函

數原型設計為:

doublemean(PEMP*);

mean函數應當容許輸入年齡范圍。對輸入字符進行鑒別,保證無誤再進行計

算,注意容許大小寫。

printf(“求某一年齡段以上日勺職工的平均工資\n”);

printf(“默認是全體職工的平均工資,要變化計算方式請輸入Y/八n”);

getchar();

ch=getchar();

if(dY'||ch-y')

(

printf(“age:");

scanf("%d”,&age);

)

(4)申請內存

在update函數中,需要申請內存空間。

PEMPemp

If((emp=(PEMP)nialloc(sizeof(structemployee)))—NULL)return;

注意emp是指針,因此要使用sizeof(structemployee)o

第三章職工檔案及簡要信息生成

3.1設計題目

本設計規定使用頭文獻和菜單,并構成一種工程文獻,對職工的檔案進行管

理并生成職工的簡要信息。

3.2設計規定

設計規定實現如下功能:

(1)建立wkrs職工數據構造,構造具有姓名、序號、性別和年齡信息。

(2)建立一種構造數組,以便存儲10個職二信息。

(3)設計一種readin函數,以便采用問答式輸入10個職工的信息。

(4)編寫一種display函數,規定使用構造指針作為參數,用來輸出構造

數組的內容。

(5)建立wks職二簡要數據構造,構造中只具有姓名和年齡信息。

(6)編制一種srt函數,根據wks構造建立的職工狀況,把職工姓名和年

齡信息抽出來,此外建一種只含職工姓名和年齡由Jwkshort構造的數組。

(7)編制一種delwk函數,可以從簡要數據構造中刪去指定啊職工數據。

假如數組中沒有要刪去的職工,則輸出沒有這個職工的信息;假如將內容所有刪

去,應當給出內容已空的提醒信息。

(8)將上述函數編制在一種文獻里,共用一種頭文獻。

(9)用一種簡樸的菜單提供上述操作。菜單信息為:

1、輸入數據

2、顯示原始數據

3、制作簡要數據

4、刪除簡要數據

5、結束退出

PleaseInput1-5:

3.3算法分析

1、構造數組

根據規定,可以定義它們各自的數據構造及其構造數組如下:

structwkrs

(

charnum[10];

charname[10];

charsex[3];

intage:

}wk[10];

structwkr

(

charname[10];

intage;

}wkshort[10];

由于直接定義它們各自H勺構造數組,因此各個函數可以直接對這些數組進行

操作。

2、函數類型

如上所述,由于直接定義了構造數組,因此如下函數均不需要參數,也不需

要返回值。

voidreading();

voiddispO;

voiddelwk();

voidsrt();

intmenuselect0;

3、構造指針

顯示數據Redisplay函數,自身不需要使用構造指針,但題目規定使用構造

指針實現,因此其原型可以設計為:

voiddisplay(structwkrs*);

它的程序代碼如下:

voiddisplay(structwkrs*p)

(

char*c⑷={“序號”,“姓名”,“性別”,“年齡”};

inti;

p=wk;

printf("<\n%8s\t%8s\t%6s\t%4s\nn,c[0],c[l],c[2],c[3]);

for(i=0;i<10;i++,p++)

printf(a\n%8s\t%8s\t%6s\t%4d\nw,

p->num,p->name,p->sex,p->age);

)

printf(“\n”);

}

與一般數組同樣,構造數組名即構造數組的首地址。構造作為參數傳遞時,

也是傳值方式。假如要修改一般的構造數據,必須使用傳址方式。

下面的Jdisp函數可以完畢同一功能,但不用參數。

voiddispO

(

char*c[4]={“序號”,“姓名”,“性別”,“年齡”};

inti;

printf(<<\n%8s\t%8s\t%6s\t%4s\nw,cFOl,cTll,c[2],cT31):

for(i=0;i<num;i++)

(

printf(“\n%8s\t%8s\t%6s\t%4d\n",

wk[i].num,wk[i].name,wk[i].sex,wk[i].age);

)

第四章鏈表信息管理

4.1設計題目

本課程設計的目的是學習建立鏈表,使用鏈表存儲構造信息,增長鏈表結點

及刪除鏈表結點等基木操作。實際設計時,可增長數據信息及檢索等功能。

4.2設計規定

4.2.1功能設計規定

本設計規定實現如下功能:

(1)本設計將重點放在整體設計上,信息只選組員代號和。

(2)假如已經有記錄,只能在其后追加。

(3)顯示整個記錄的內容(含新追加的新記錄)。

(4)使代號可由6位字符和數字口勺混合編碼構成,如:A201,34011D等。

(5)使號碼可由18位字符和數字構成,如(86)等。

(6)可以刪除所有記錄,可以隨時增長新記錄。

(7)可以使用菜單實現增長、刪除和顯示等功能口勺選擇。

(8)使用宏定義動態申請存儲空間。

4.2.2總體設計

本設計對模塊設計口勺規定如下:

(1)規定使用多文獻方式實現鏈表設計。

(2)規定將它們提成3個模塊編制。一種模塊負責輸入;一種模塊負責顯

示記錄的內容;一種模塊具有主程序,主程序負責菜單項選擇擇和命令處理。

(3)每個模塊作為一種單獨口勺C文獻,每個文獻內的函數及功能如表4-1

所示。

(4)宏和數據構造等放在頭文獻中,并使用條件編譯。

這樣,程序就由這4個源文獻和頭文獻構成,每個源文獻都代表某種特定的I

功能。

表4-1文獻及函數構成

源文獻函數名或其他功能

main總捽制函數

record,cmenuselect菜單項選擇擇

hand!emenu菜單處理

input,cinput輸入數據

delete.cdel刪除記錄

display.cdisplay顯示鏈表內容

ASK(自定義宏)宏定義申請內存

record,h構造申明構造申明

庫函數及函數原型申明引用庫函數及函數

4.2.3函數設計

由于采用鏈表方式記錄,因此將它們的第一種結點作為參數傳遞。假設將數

據構造自定義為ADDR,用它定義*lop為第一種記錄構造的指針,分別描述這些

函數,并建立它們的函數原型。

1.建立鏈表函數

函數原型:ADDR*input(ADDR*)

功能:建立新結點

參數:接受構造指針top

工作方式:從尾部開始逐一追加記錄

規定:將新記錄追加到記錄尾部。

2.顯示內存動態記錄數據函數

函數原型:voiddisplay(ADDR*)

功能:顯示內存中/、J記錄

參數:接受構造指針top

工作方式:從頭部開始逐一顯示記錄內容

規定:匯報與否有記錄及記錄條數和內容。

3.刪除內存動態記錄數據函數

函數原型:void*del(ADDR*)

功能:刪除內存中的記錄

參數:接受構造指針top

工作方式:按給定方式和內容查找,假如找到,則刪除該記錄內容

規定:匯報與否有記錄以及與否刪除的信息。

4.菜單處理函數

函數原型:voidhandlemenu(ADDR*)

功能:處理選擇的菜單命令

參數:接受構造指針top

工作方式:根據命令,調用對應的函數

規定:給出結束信息。

5.菜單項選擇擇函數

函數原型:intmenu_select(void)

功能:接受顧客選擇的命令代碼

參數:無參數

工作方式:返回命令代碼的整數值

規定:只容許選擇規定值,假如輸入不合規定,則提醒顧客重新輸入。

6.主函數

函數原型:voidmain(void)

功能:控制程序

參數:無參數

規定:管理菜單命令并完畢初始化。

7.頭部文獻

函數原型:record

功能:申明函數原型,包括文獻及自定義宏和數據構造

規定:匯報與否能正常申請內存及存入記錄口勺條數等。

4.3算法分析

1.宏和數據構造

申明自定義類型ADDR,根據數據長度口勺規定,均使用字符數組。為了使程序

簡潔,根據自定義類型ADDR,特定義一種用來申清內存空間的宏ASK。這樣,在

程序中使用語句“ASKltop);”就可認為指針*top申請內存空間。

由于需要對記錄進行計數,因此設計一種全局變量n用來計數。代碼清單如

下:

#defineASK(top)do{\

p=(ADDR*)malloc(sizeof(ADDR));\

if(p==NULL)[printf(^memoryfail!);exit(-1);}\

}while(0)

#defineLENsizeof(ADDR)

externintcount;

typedefstructaddress{

charname[8];

chartel[20];

structaddress*next;

JADDR;

2.建立數據前的初始化

主函數里怎樣實現初始化,決定了整個程序的功能。由函數構成可見,指針

*top是公用的,但它應當具有如下主函數中的初始值。

voidmainO(

ADDR*top,*star;

ASK(top);

ASK(star);

top->next=NULL;

count=0;

handle_menu(top);

3.刪除所有數據后的處理

由于在刪除操作中,也許將所有記錄刪除。這時就必須在退出之前恢復初始

值。算法如下:

(1)首先鑒別與否有記錄,沒有就退出操作

if(count==0)

(

printf(“記錄已經為空,請退出刪除操作!”);

returntop;

)

(2)對查找H勺方式進行鑒別

while(1)

(

cn=atoi(choose);

if(cn!=l&&cn!=2)

(

printf("輸入錯誤,重新選擇1-2:");

gets(choose);

}

elsebreak;

(3)刪除指定數據,假如刪除的I是最終一種,恢復到初始值。

if(count==0)

(

ASK(top);

ASK(star);

top->next=NULL;

)

returntop;

第五章實用的小型通訊錄

5.1設計題目

本課程設計是設計一種實用的小型通訊錄程序,它是在鏈表程序的基礎上,

增長查詢功能,并且可以打開指定文獻或修改指定文獻及將多種文獻構成一種文

獻。

5.2設計規定

5.2.1功能設計規定

本設計規定完畢如下功能:

1.建立文獻

(1)存儲文獻可以使用默認文獻名或指定文獻名;

(2)可以不保留輸入記錄,但需要確認與否保留輸入記錄;

(3)假如已經有文獻,只能在其后追加;

(4)新增的記錄可以不存入原文獻中,也可以用本來的文獻覆蓋內存的內

容;

(5)可以將兩個文獻合并到一種文獻中。

2.文獻時存取和顯示

(1)可以單獨存取文獻;

(2)可以隨時顯示內存中記錄的所有內容;

(3)可以直接存取默認文獻或指定文獻。

3.刪除記錄

(1)可以按“姓名”或“"方式刪除記錄并更新內存鏈表內容;

(2)能給出被刪除記錄日勺信息;

(3)假如已經是空表,刪除時應給出提醒信息并返回主菜單;

(4)假如沒有要刪除的信息,輸出沒有找到日勺信息;

(5)刪除操作僅限于內存,只有執行存記錄時,才能覆蓋原記錄。

4.查詢記錄

(1)可以按“姓名”或“”方式查詢記錄;

(2)能給出查詢記錄的信息;

(3)假如查詢的信息不存在,輸出沒有找到的信息。

5.整體功能

(1)應當可以隨時檢索、刪除或增長新記錄,保留或取消新的記錄;

(2)使姓名可由!6位字符和數字構成;

(3)使號碼可由18位字符和數字構成;

(4)將輸出信息加上輸出信息欄,例如:

姓名

李星

MarryLi(86)-10-54546666

(5)對存儲口勺文獻進行整頓分類;

(6)定義ASK宏,用于申請動態內存;

(7)使用菜單實現功能的對口勺選擇。

6.測試程序

(1)應列出測試大綱對程序進行測試;

(2)應保證能測試到程序的多種邊緣狀況。

5.2.2總體設計

本課程設計對模塊設計日勺規定如下:

(1)規定使用多又獻方式實現鏈表設計;

(2)規定在各個文獻內實現構造化設計;

(3)每個模塊作為一種單獨日勺C文獻,每個文獻內的I函數如表5-1所示,

表中給出了各個函數的功能闡明;

(4)宏和數據構造等放在頭文獻中,并使用條件編譯。

本設計由6個C文獻(13個函數)和一種頭文獻構成,每個C文獻都代表著

某種特定的功能,它們的關系如表5-1所示。

由于設計了文獻連接功能,因此該程序包括文獻的存、取過程。它的功能就

是按輸入次序建立記錄。假如本來沒有記錄文獻,可重新建立一種文獻;假如已

經有記錄,可以先把,文獻內容讀入,然后杷新記錄追加到本來記錄的尾部:也可

以單獨建立新文獻,后來再使用連接功能拼裝。

由上述功能分析可以看到程序的全貌。由于它有并列選擇,因此可以用選擇

菜單以便地實現。這個菜單具有多種選擇項,用switch語句可以實現這些選擇。

表5T文獻及函數構成

源文獻函數名及其他成分功能

main總控函數

menu_select菜單項選擇擇

letter.chandle_menu菜單處理

free_nodcs釋放top的內存空間

quit結束運行

new_addrBook新建通訊錄

sls_disp.cslstore輸入信息

display顯示信息

delete_record.cdelete_record刪除記錄

find_record.cfind_record查詢記錄

linkfiles.clink_files連接文獻

save_loadsave文獻存儲

load文獻讀取

ASK(自定義宏)宏定義申請內存

letter.h構造闡明通訊錄構造

庫函數及函數原型申明引用庫函數及函數

5.2.3函數設計

由于采用鏈表方式記錄,因此將它們H勺第一種結點作為參數傳遞。假設將數

據構造自定義為ADDR,用它定義*top為第一種記錄構造的指針,分別描述這些

函數,并建立它們的函數原型。

1.文獻存儲操作函數

函數原型:voidsave(ADDR*)

功能:將記錄存入指定文獻sname

參數:構造指針top

返回值:void

工作方式:從鏈表頭部開始逐一存入文獻。

規定:匯報與否有記錄可存,與否能正常建立或打開文獻,根據規定執行存

入操作并匯報存入記錄日勺條數。

2.文獻讀取操作函數

函數原型:ADDR*load(ADDR*)

功能:將文獻sna口e里日勺記錄取入內存

參數:構造指針top

返回值:返回構造指針top

工作方式:在內存里從top處開始構造鏈表并返回tope

規定:匯報與否有記錄可讀,與否能正常打開文獻及讀取記錄的)條數。

3.顯示內存動態記錄數據函數

函數原型:voiddisplay(ADDR*)

功能:顯示內存里口勺記錄

參數:構造指針top

返回值:void

工作方式:從頭部開始逐一顯示記錄內容。

規定:匯報與否有記錄及記錄條數和內容。

4.輸入信息函數

函數原型:ADDR*slstore(ADDR*)

功能:添加記錄

參數:構造指針top

返回值:返回構造指針top

工作方式:從尾部開始逐一追加記錄。

規定:假如內存已經存在記錄,則將新記錄追加在記錄尾部。假如還沒有建

立記錄鏈表,則建立鏈表并從尾部開始追加記錄。

5.刪除記錄函數

函數原型:ADDR*delete_record(ADDR*)

功能:刪除內存鏈表中日勺指定結點

參數:構造指針top

返回值:返回構造指針top

工作方式:根據給定的關鍵字,查找符合的結點并刪除。

規定:給出有關信息。

6.查詢記錄函數

函數原型:voidfind_record(ADDR*)

功能:查詢內存鏈表中與否具有該信息的結點

參數:構造指針top

返回值:void

工作方式:根據給定的關鍵字,杳找符合的結點并給出它的完整信息。

規定:給出有關信息。

7.連接文獻函數

函數原型:voidlinkfiles(void)

功能:將一種文獻的內容追加到另一種文獻的尾部

參數:void

返回值:void

工作方式:根據給定的文獻名,將第2個文獻追加到第1個文獻的尾部。

規定:給出有關信息

8.新建通訊錄函數

函數原型:ADDR*newaddrBook(ADDR*)

功能:新建通訊錄鏈表日勺表頭

參數:目前通訊錄鏈表日勺表頭top

返回值:新建通訊錄鏈表的I表頭top

工作方式:可將已改動通訊錄保留,釋放原通訊錄所占空間并插入新日勺記錄。

規定:根據規定保留已改動通訊錄,然后建立新的記錄。

9.菜單處理函數

函數原型:voidhandlemenu(ADDR*)

功能:處理選擇的菜單命令

參數:構造指針top

返回值:void

工作方式:根據命令,調用對應函數。

規定:給出結束信息。

10.菜單項選擇擇函數

函數原型:voidmenuselect(void)

功能:接受顧客選擇的命令代碼

參數:void

返回值:int

工作方式:返回命令代碼的整數值。

規定:只容許選擇規定值,假如輸入不合規定,則提醒顧客重新輸入。

11.釋放內存空間函數

函數原型:voidfree_nodes(ADDR*)

功能:釋放以top為頭部的鏈表的內存空間

參數:目前通訊錄鏈表日勺表頭top

返回值:void

工作方式:調用free函數釋放鏈表的I內存空間。

規定:將計數器清零。

12.結束程序運行函數

函數原型:voidquit(ADDR*)

功能:結束程序運行

參數:void

返回值:void

工作方式:根據規定決定在退出之前與否將修改的記錄存入文獻。

規定:結束運行之前,問詢與否對修改的記表進行存儲。

13.主函數

函數原型:voidmeiin(void)

功能:控制程序

參數:void

返回值:void

規定:管理菜單命令并進行初始化。

14.頭部文獻

文獻名稱:letter,h

功能:申明函數原型,包括文獻及自定義宏和數據構造。

規定:匯報與否能正常打開文獻執行存入操作及存入記錄的條數。

第六章學生成績管理程序

6.1設計題目

本課程設計是設計一種實用的小型學生成績管理程序,它規定不用鏈表,而

用數組來設計這個程序。它有查詢和檢索等功能,并且可以對指定文獻操作,也

可將多種文獻構成一種文獻。

6.2設計規定

6.2.1功能設計規定

本設計規定完畢如下功能:

1.建立文獻

(1)可以使用默認文獻名或指定文獻名將記錄存儲到文獻;

(2)文獻保留成功返回0,失敗返回-1;

(3)設置保留標志savedTag作為與否已對記錄進行存儲操作的信息;

(4)寫同名文獻將覆蓋本來文獻口勺內容:

2.增長學生記錄

(1)可以在已經有記錄背面追加新的記錄;

(2)可以隨時用它增長新的記錄,它們僅保留在構造數組中;

(3)可以將一種文獻讀入,追加在已經有記錄的背面;

(4)假如已經采用用文獻追加的方式,在沒有保留到文獻之前,將繼續保

持文獻追加狀態,以便實現持續文獻追加操作方式;

(5)假如沒有記錄存在,給出提醒信息。

3.新建學生信息文獻

(1)用來重新建立學生信息記錄;

(2)假如已經有記錄存在,可以覆蓋原記錄或者在原記錄背面追加,也可

以將原有記錄信息保留到一種指定文獻,然后重新建立記錄;

(3)給出對應時提醒信息。

4.顯示記錄

(1)假如沒有記錄可供顯示,給出提醒信息;

(2)可以隨時顯示內存中的記錄;

(3)顯不表頭。

5.文獻存儲

(1)可以按默認名或指定名存儲記錄文獻;

(2)存儲成功返回0,失敗返回-1;

(3)更新存儲標志。

6.讀取文獻

(1)可以按默認名字或指定名字將記錄文獻讀入內存;

(2)讀取成功返P10,失敗返回-1;

(3)可以將指定或默認文獻追加到既有記錄口勺尾部;

(4)可以將文獻持續追加到既有記錄并更新記錄口勺名次;

(5)更新存儲標志。

7.刪除記錄

(1)可以按“學號”、“姓名”或“名次”方式刪除記錄;

(2)給出將被刪除記錄口勺信息,經確認后再刪除;

(3)假如已經是空表,刪除時應給出提醒信息并返回主菜單;

(4)假如沒有要刪除日勺信息,輸出沒有找到日勺信息;

(5)應當更新其他記錄日勺名次;

(6)刪除操作僅限于內存,只有執行存記錄時,才能覆蓋原記錄。

(7)更新存儲標志。

8.修改記錄

(1)可以按“學號”、“姓名”或“名次”方式修改記錄內容;

(2)給出將被修改記錄的信息,經確認后再修改;

(3)假如已經是空表,刪除時應給出提醒信息并返回主菜單;

(4)假如沒有找到要修改的信息,輸出提醒信息;

(5)應當同步更新其他記錄的名次;

(6)修改操作僅限于內存,只有執行存儲操作時,才能覆蓋原記錄。

(7)更新存儲標志。

9.查詢記錄

(1)可以按“學號”、“姓名”或“名次”方式查詢記錄;

(2)能給出查詢記錄的信息;

(3)假如查詢的信息不存在,輸出提醒信息。

10.對記錄進行排序

(1)可以按學號進行升序或降序排序;

(2)可以按姓名進行升序或降序排序;

(3)可以按名次進行升序或降序排序;

(4)假如屬于選擇錯誤,可以立即退出排序:

(5)更新存儲標志。

11.頭文獻

(1)使用條件編譯定義頭文獻;

(2)函數原型申明;

(3)數據成果及包括文獻。

12.測試程序

(1)應列出測試大綱對程序進行測試;

(2)應保證能測試到程序的多種邊緣狀況。

6.2.2總體設計

本課程設計對模塊設計FI勺規定如下:

(1)規定使用多文獻方式實現設計;

(2)規定在各個文獻內實現構造化設計:

(3)每個模塊作為一種單獨H勺C文獻,每個文獻內的函數如表6-1所示,

表中給出了各個函數的功能闡明;

(4)宏和數據構造等放在頭文獻中,并使用條件編譯。

本設計由5個C文獻(17個函數)和一種頭文獻構成,每個C文獻都代表著

某種特定的功能,它們口勺關系如表67所示。

程序包括文獻的存、取過程。它的功能就是按輸入次序建立記錄。假如本來

沒有記錄文獻,可重新建立一種文獻;假如已經有記錄,可以先把文獻內容讀入,

然后把新記錄追加到本來記錄的尾部;也可以單獨建立新文獻,后來再使用讀取

文獻的措施拼裝。

由上述功能分析可以看到程序的全貌。由于它有并列選擇,因此可以用選擇

菜單以便地實現。這個菜單具有多種選擇項,用switch語句可以實現這些選擇。

表6T文獻及函數構成

源文獻函數名及其他成分功能

main總控函數

menu_select菜單項選擇擇

student,chandle_menu菜單處理

newRecords新建學生信息記錄

quit結束運行

showTable打印表頭

add_disp.cgetlndex按升序排序日勺位置

addRecord在表尾追加信息

display顯示信息

removeRecord刪除指定的記錄

que_remv_modi.cfindRecord查找指定日勺記錄

queryinfo查詢指定學生的信息

copyRecord復制記錄

modifyRecord修改指定學生的信息

save_loadSave文獻存儲

Load文獻讀取

sort,csortinfo排序

常數提供常數

student,h構造闡明學生成績構造

庫函數及函數原型申明引用庫函數及函數

6.2.3函數設計

為某些函數設計兩個返回值以辨別其執行成具與否對的。每個學生信息資料

用一種Stulnfo構造來保留,用Stulnfo數組全局變量records來保留一批學生

的信息資料。其中用宏定義INITIAL_SIZE表達數組初始大小,當已經分派的數

組大小不夠用時,將增長數組的大小,INCR_SIZE為每次增長的大小。全局變量

numStus表達數組中記錄的學生數,awaySize是為數組分派日勺空間大小。全局

變量saveTag是信息與否已保留日勺標志,當數組內容被保留到文獻后,設為“己

保留”狀態,當數組內容被修改之后,設為“未保留”狀態。

下面分別描述這些函數,并建立它們的函數原型。

1.文獻存儲操作函數

函數原型:intsaveRecords(void)

功能:將記錄存入默認文獻slu_info或指定文獻

參數:void

返回值:成功0,失敗T

工作方式:數組records被保留至指定文獻。

規定:匯報與否有記錄可存,與否能正常建立或打開文獻,根據規定執行存

入操作并匯報存入記錄口勺條數。

2.文獻讀取操作函數

函數原型:intloadRecords(void)

功能:將默認文獻stuinfo或指定文獻里的記錄取入內存

參數:void

返回值:成功0,失敗T

工作方式:records將為從指定文獻中讀取出的記錄。

規定:匯報與否有記錄可存,與否能正常打開文獻、與否覆蓋已經有記錄以

及讀取記錄日勺條數。

3.顯示所有學生信息日勺函數

函數原型:voiddisplay(void)

功能

溫馨提示

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

評論

0/150

提交評論