C++程序設(shè)計(jì)-報(bào)告-及源代碼--學(xué)生選課系統(tǒng)_第1頁
C++程序設(shè)計(jì)-報(bào)告-及源代碼--學(xué)生選課系統(tǒng)_第2頁
C++程序設(shè)計(jì)-報(bào)告-及源代碼--學(xué)生選課系統(tǒng)_第3頁
C++程序設(shè)計(jì)-報(bào)告-及源代碼--學(xué)生選課系統(tǒng)_第4頁
C++程序設(shè)計(jì)-報(bào)告-及源代碼--學(xué)生選課系統(tǒng)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 摘 要 C語言是在國內(nèi)外廣泛使用的一種計(jì)算機(jī)語言。C語言簡潔緊湊、靈活方便、運(yùn)算符豐富、適用范圍大、可移植性好。它既具有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它可以作為系統(tǒng)設(shè)計(jì)語言,編寫工作系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。本學(xué)生選課系統(tǒng)主要利用C語言的數(shù)組指針和文件操作能力設(shè)計(jì)開發(fā)一個(gè)小型的選課系統(tǒng),至少具有如下功能:查看課程信息、查找課程信息、增加課程信息、修改課程信息、選課等功能。本文主要對學(xué)生選課系統(tǒng)來進(jìn)行說明。本程序主要考察對自定義函數(shù)的熟悉程度,本程序中主要使用到的是數(shù)組的相關(guān)操作,包括數(shù)組的輸入、輸出、查找、插入、刪除等操作,需要對數(shù)組有

2、比較深入的掌握。還包括指針、函數(shù)、結(jié)構(gòu)體、文件等C語言的基礎(chǔ)知識的運(yùn)用。關(guān)鍵字: 源代碼、 指針、調(diào)用函數(shù)、流程圖、結(jié)構(gòu)、數(shù)組。目錄 TOC o 1-2 h z u HYPERLINK l _Toc234951313 第一章 設(shè)計(jì)題目的內(nèi)容、任務(wù)及具體要求 PAGEREF _Toc234951313 h 1 HYPERLINK l _Toc234951314 第二章 總體設(shè)計(jì)思路 PAGEREF _Toc234951314 h 2 HYPERLINK l _Toc234951315 2.1 程序功能 PAGEREF _Toc234951315 h 2 HYPERLINK l _Toc23495

3、1316 2.2 模塊關(guān)系 PAGEREF _Toc234951316 h 2 HYPERLINK l _Toc234951317 總體框圖 PAGEREF _Toc234951317 h 3 HYPERLINK l _Toc234951318 第三章 功能模塊的具體設(shè)計(jì) PAGEREF _Toc234951318 h 4 HYPERLINK l _Toc234951319 3.1 主函數(shù)模塊的設(shè)計(jì) PAGEREF _Toc234951319 h 4 HYPERLINK l _Toc234951320 3.2 顯示課程信息模塊的設(shè)計(jì) PAGEREF _Toc234951320 h 7 HYPE

4、RLINK l _Toc234951321 3.3 查詢模塊模塊的設(shè)計(jì) PAGEREF _Toc234951321 h 8 HYPERLINK l _Toc234951322 3.4 增加模塊的設(shè)計(jì) PAGEREF _Toc234951322 h 9 HYPERLINK l _Toc234951323 3.5 刪除模塊模塊的設(shè)計(jì) PAGEREF _Toc234951323 h 13 HYPERLINK l _Toc234951324 3.6 修改模塊模塊的設(shè)計(jì) PAGEREF _Toc234951324 h 14 HYPERLINK l _Toc234951325 3.7 選課模塊的設(shè)計(jì) PA

5、GEREF _Toc234951325 h 15 HYPERLINK l _Toc234951326 3.8 顯示選課情況模塊的設(shè)計(jì) PAGEREF _Toc234951326 h 17 HYPERLINK l _Toc234951327 第四章 功能模塊的調(diào)試及測試 PAGEREF _Toc234951327 h 18 HYPERLINK l _Toc234951328 4.1 登陸界面和主菜單界面的顯示 PAGEREF _Toc234951328 h 18 HYPERLINK l _Toc234951329 4.2 查詢所有課程信息的顯示結(jié)果 PAGEREF _Toc234951329 h

6、 19 HYPERLINK l _Toc234951330 4.3 查詢單個(gè)課程信息的顯示結(jié)果 PAGEREF _Toc234951330 h 20 HYPERLINK l _Toc234951331 4.4 添加課程信息的顯示結(jié)果 PAGEREF _Toc234951331 h 20 HYPERLINK l _Toc234951332 4.5 刪除和修改課程信息的顯示結(jié)果 PAGEREF _Toc234951332 h 21 HYPERLINK l _Toc234951333 4.6 選課的顯示結(jié)果 PAGEREF _Toc234951333 h 22 HYPERLINK l _Toc234

7、951334 查詢選課情況的顯示結(jié)果 PAGEREF _Toc234951334 h 23 HYPERLINK l _Toc234951335 4.8 退出 PAGEREF _Toc234951335 h 23 HYPERLINK l _Toc234951336 總結(jié) PAGEREF _Toc234951336 h 24 HYPERLINK l _Toc234951337 致 謝 PAGEREF _Toc234951337 h 25 HYPERLINK l _Toc234951338 參考資料: PAGEREF _Toc234951338 h 26 HYPERLINK l _Toc234951

8、339 附程序清單 PAGEREF _Toc234951339 h 27第一章 設(shè)計(jì)題目的內(nèi)容、任務(wù)及具體要求設(shè)計(jì)題目: 學(xué)生選課系統(tǒng)設(shè)計(jì)內(nèi)容:本程序?qū)儆诜菙?shù)值計(jì)算型算法設(shè)計(jì),學(xué)生需要設(shè)計(jì)出學(xué)生選課系統(tǒng)所需要的基本功能,并設(shè)計(jì)簡單的界面(無需圖形化)。本程序主要考察對自定義函數(shù)的熟悉程度,本程序中主要使用到的是數(shù)組的相關(guān)操作,包括數(shù)組的輸入、輸出、查找、插入、刪除等操作,需要對數(shù)組有比較深入的掌握。要求程序運(yùn)行結(jié)果正確,程序和算法具有一定程序度的健壯性,穩(wěn)定性。設(shè)計(jì)要求:(1)通過提示菜單選擇可以進(jìn)行的操作。(2)將課程的信息存入文件中,并命名為。(3)將選課情況信息存入文件中,并命名為。(4

9、)在本系統(tǒng)中可以進(jìn)行管理系統(tǒng)包含的基本操作,其中包括查看所有課程的信息輸入一門課程的課程編號,從當(dāng)前課程中進(jìn)行查找,如果找到則顯示該課程的相關(guān)信息,如果沒有找到則給出提示信息添加一門課程的基本信息,通過輸入課程編號,首先查找是否存在該課程編號的課程,如果存在則提示重新輸入,否則將該課程按照順序插入到相應(yīng)位置刪除一門課程的基本信息,通過輸入課程編號,首先查找是否存在該課程編號的課程,如果存在則將該課程刪除,否則給出提示信息,提示該課程不存在選修一門課程,需要給出學(xué)號和課程編號,如果課程編號不存在則重新輸入,直到輸入正確為止,并將學(xué)號和相應(yīng)的課程編號存入文件中(5)課程基本信息包括課程編號、課程名

10、、學(xué)時(shí)和學(xué)分這些簡單信息。(6)課程信息文件中每一行存放一門課程的信息。第二章 總體設(shè)計(jì)思路2.1 程序功能此系統(tǒng)是簡單的學(xué)生選課系統(tǒng)。具體的功能包括:輸入密碼進(jìn)入系統(tǒng)。查看所有課程的信息輸入一門課程的課程編號,從當(dāng)前課程中進(jìn)行查找,如果找到則顯示該課程的相關(guān)信息,如果沒有找到則給出提示信息添加一門課程的基本信息,通過輸入課程編號,首先查找是否存在該課程編號的課程,如果存在則提示重新輸入,否則將該課程按照順序插入到相應(yīng)位置刪除一門課程的基本信息,通過輸入課程編號,首先查找是否存在該課程編號的課程,如果存在則將該課程刪除,否則給出提示信息,提示該課程不存在對課程信息進(jìn)行修改。選修一門課程,需要給

11、出學(xué)號和課程編號,如果課程編號不存在則重新輸入,直到輸入正確為止,并將學(xué)號和相應(yīng)的課程編號存入xt文件中查看所選課程。2.2 模塊關(guān)系根據(jù)提示輸入學(xué)號和密碼進(jìn)入系統(tǒng)。通過主函數(shù)模塊進(jìn)入各個(gè)其它函數(shù)的模塊,然后達(dá)到對課程信息的查看、增加、刪除、修改和選課的功能,在這些模塊中又調(diào)用其它小模塊(如:排序模塊)。本程序主要有:主函數(shù)模塊、顯示課程信息模塊、查詢模塊、增加模塊、刪除模塊、修改模塊、選課模塊、顯示選課情況模塊等八個(gè)模塊組成??傮w框圖先輸入驗(yàn)證信息進(jìn)入主模塊,然后選擇調(diào)用的模塊顯示課程信息模塊查詢模塊主模模塊增加模塊刪除模塊修改模塊選課模塊顯示選課情況模塊圖2-1 各模塊關(guān)系圖第三章 功能模

12、塊的具體設(shè)計(jì)3.1 主函數(shù)模塊的設(shè)計(jì)在主函數(shù)中通過inset()函數(shù)讓用戶輸入驗(yàn)證信息進(jìn)入,簡單菜單的制作可以利用printmenu()函數(shù)實(shí)現(xiàn)。從文件中獲取課程信息,并存放在定義的結(jié)構(gòu)數(shù)組desk100中。定義結(jié)果的源代碼為struct classinint number;char classname10;int hours;double credit;typedef struct classin Classin;Classin desk100 = 0然后將文件中的信息讀入此數(shù)組中,讀取函數(shù)的代碼為:cfptr = fopen(LessonInfo.txt,r);while(!feof(cf

13、ptr)fscanf(cfptr, %d%s%d%lf, &deski.number, deski.classname, &deski.hours, &deski.credit);i+;在后面的使用中都是調(diào)用此地址便可以對數(shù)組進(jìn)行修改。輸入選擇項(xiàng)choice,再用switch語句去調(diào)用其它函數(shù),具體實(shí)現(xiàn)如下(主函數(shù)的主要代碼):while(choice != 8) switch(choice) case 1:myread(desk);break; case 2:myfind(desk);break; case 3:myadd(desk);shunxu(desk);filewhite(desk)

14、;break; case 4:mydelete(desk);filewhite(desk);break;case 5:mymodify(desk);shunxu(desk);filewhite(desk);break; case 6:selection(desk, studentin);filewrite(studentin);break; case 7:output(studentin);break; default:break; 接著判斷用戶是否繼續(xù)輸入,若繼續(xù),則重新進(jìn)行選擇;否則,退出程序。開始打開文件將學(xué)好和密碼讀入數(shù)組中輸入密碼和學(xué)號密碼、學(xué)好?換回1換回0圖3-1 inset()

15、函數(shù)模塊的流程圖上圖是簡單的將輸入學(xué)號和密碼的過程提示是一遍,但實(shí)際函數(shù)中我使用的三從循環(huán)。第一重循環(huán)是輸入學(xué)號;第二重循環(huán)是判斷該學(xué)會是否存在,若學(xué)號不存在便提示是再輸,還是退出系統(tǒng);在學(xué)號存在時(shí)進(jìn)入第三重循環(huán),輸入密碼(注:學(xué)號和密碼是在運(yùn)行此函數(shù)時(shí)從文件中讀到數(shù)組里)并在數(shù)組中查找,若有和該密碼相等的數(shù)組元素,就將進(jìn)入系統(tǒng),否則提示繼續(xù)或退出.開始打開文件并將課程信息讀入數(shù)組輸入查詢類型Inset()查詢模塊增加模塊刪除模塊修改模塊選課模塊顯示課程信息模塊顯示選課情況模塊退出結(jié)束圖3-2 main()函數(shù)模塊的流程圖在次函數(shù)中用戶通過輸入選項(xiàng)進(jìn)入不同的函數(shù)模塊。當(dāng)每次運(yùn)行一個(gè)模塊后,又進(jìn)

16、行選擇。3.2 顯示課程信息模塊的設(shè)計(jì)本模塊的設(shè)計(jì)主要是設(shè)計(jì)被調(diào)用函數(shù)myread(Classin *wkesk),是用指針指向儲存課程信息的數(shù)組,調(diào)用數(shù)組的地址。再用循環(huán)把數(shù)組中的信息輸出。主要代碼為:for(i=0; i=N-1; i+)if(wdeski.hours = 0) break; printf(%-10d%-20s%-10d%-10lfn, wdeski.number,wdeski.classname,wdeski.hours,wdeski.credit);在此片段函數(shù)中wdeski.hours = 0是作為循環(huán)的結(jié)束條件之一,能提前結(jié)束該程序。開始i99課時(shí)!=0在屏幕輸出課

17、程信息i+結(jié)束i = 0圖3-3 myprintf()函數(shù)模塊的流程圖在上圖中“課時(shí)!=0“就是上面解釋的wdeski.hours = 0的另一形式。3.3 查詢模塊模塊的設(shè)計(jì)本模塊是要求設(shè)計(jì)查找功能的函數(shù)myfind(Classin *wkesk),同上步將數(shù)組地址調(diào)用。然后輸入要查找的課程編號,再進(jìn)行在數(shù)組中的查找。找到就輸出,否則提示重新輸入或退出。主要原代碼為:printf(Please enter the class number: );scanf(%d,&Number);printf(nn);for(i=0;i=N-1;i+) if(Number = wdeski.number)

18、if(wdeski.credit = 0.0)printf(nnnn);break;printf(%-10s%-20s%-10s%-10s%n,number, classname, hours, credit);printf(%-10d%-20s%-10d%-10lfnnnn, wdeski.number,wdeski.classname,wdeski.hours,wdeski.credit);flag = 0;break;在此程序中flag是作為標(biāo)準(zhǔn)值,初始為-1,當(dāng)flag改變時(shí)說明已經(jīng)找到該課程,否則為找到。在對flag賦值為-1;再做判斷,看是繼續(xù)查找,還是退出此函數(shù)模塊。結(jié)束開始fl

19、ag=-1輸入NumberNumber = wdeski.number輸出數(shù)組中找到的元素flag=1是否繼續(xù)flag = -1圖3-4 myfind()函數(shù)模塊的流程圖3.4 增加模塊的設(shè)計(jì)本模塊要設(shè)計(jì)被調(diào)用增加數(shù)組的函數(shù)myadd(Classin *wkesk)、排序函數(shù)shunxu(Classin *wkesk)和寫入文件函數(shù)filewhite(Classin *wkesk)。這幾個(gè)函數(shù)是按先后運(yùn)行的。myadd(Classin *wkesk)的介紹它主要源代碼為:if(wdeski.hours = 0)wdeski.number = nub;printf(nPlease enter t

20、he class name: );fflush(stdin); scanf(%s,&wdeski.classname);printf(Please enter the hours: );scanf(%d,&wdeski.hours);printf(Please enter the credit: );scanf(%lf,&wdeski.credit);在運(yùn)行此代碼前,輸入要增加的課程編號,然后在數(shù)組中查找,若沒有,就再添加。其簡易流程圖為:開始輸入numberNumber等于wdeski.number在數(shù)組中增加一個(gè)結(jié)構(gòu)元素是否再輸入?結(jié)束圖3-5 myadd()函數(shù)模塊的流程圖3.42排序函

21、數(shù)shunxu()的介紹: 此函數(shù)的原理是用冒泡排序法將數(shù)組按照課程編號由大到小排序。其主要源代碼為:Classin temp;while(wdeskk+.number != 0); /*計(jì)算有多少課程門課程的信息。*/for(i=1; i=k-1; i+)for(j=0; j wdeskj+1.number)if(wdeskj+1.number = 0)break; /*排到尾時(shí),結(jié)束*/temp = wdeskj+1;wdeskj+1 = wdeskj;wdeskj = temp; /*交換*/在此函數(shù)中temp是做一個(gè)交換的中間變量。要注意函數(shù)中if(wdeskj+1.number =

22、0)break;是十分有用的,它將數(shù)組中由于初始化時(shí)的0號元素排除,才能使排序得以成功運(yùn)行。其流程圖為:開始i =1;j=0;文件是否結(jié)束k+;i=k-1jwdeskj+1.number交換wdeskj.number和wdeskj+1,i+結(jié)束圖3-6 shunxu()函數(shù)模塊的流程圖filewhite()的介紹:此函數(shù)的主要源代碼為:cfptr = fopen(LessonInfo.txt,w); do if(wdeski.hours = 0) break;fprintf(cfptr, %-10d%-20s%-10d%-10.2lfn, wdeski.number,wdeski.classn

23、ame,wdeski.hours,wdeski.credit); i+; while(i 100); 在此函數(shù)中用“w”的寫入方式,目的是將前面文件中儲存的信息覆蓋。其流程圖為:開始打開文件wdeski.hours是否為0i100用fprintf將數(shù)組讀進(jìn)文件,i+結(jié)束關(guān)閉文件圖3-7 filewhite()函數(shù)模塊的流程圖注意:在打開文件進(jìn)行操作完后要用fclose()關(guān)閉文件!3.5 刪除模塊模塊的設(shè)計(jì) 此模塊主要用函數(shù)mydelete()用指針指向結(jié)構(gòu)數(shù)組的地址,調(diào)用指針對數(shù)組進(jìn)行修改。在里就是在數(shù)組中刪除某項(xiàng)課程信息,然后用函數(shù)filewhite()將數(shù)組信息讀入文件,讀取方式為“w”

24、。最主要就是mydelete()函數(shù)的應(yīng)用,下面為其主要源代碼:for(i=0; i=N-1; i+)if(wdeski.number = 0) break;if(nub = wdeski.number)flag = 0;for(j=i; j=N-2; j+) wdeskj = wdeskj+1; /*將找到的課程刪除*/if(wdeskj+1.hours = 0) break;printf(Delete success.n);break; 在這段函數(shù)中使用wdeskj = wdeskj+1用后一個(gè)數(shù)組元素覆蓋前面一個(gè),當(dāng)循環(huán)結(jié)束后就達(dá)到刪除的目的了。其流程圖為:開始i100輸入numbern

25、umber等于 wdeski.numberj = i;j99結(jié)束wdeskj = wdeskj+1;圖3-8 mydelete()函數(shù)模塊的流程圖filewhite()函數(shù)在增加模塊中已經(jīng)介紹,這里就不做介紹了。 修改模塊模塊的設(shè)計(jì)此模塊主要用到修改函數(shù)mymodify(),其次還有filewhite()函數(shù)將修改后的數(shù)組讀入文件。由于在增加模塊中已近比較詳細(xì)的介紹了filewhite()函數(shù)的使用,這里主要介紹mymodify()的原理。其主要源代碼是:for(i=0;i=N-1;i+) if(Number = wdeski.number) if(wdeski.credit = 0.0)pr

26、intf(nnnn);break; printf(Please entr the classname: );scanf(%s,&wdeski.classname); printf(Please enter the hours: ); scanf(%d,&wdeski.hours); printf(Please enter the credit: ); scanf(%lf,&wdeski.credit);printf(nModify success!n); flag = 0; break;在此函數(shù)中先將輸入的課程編號找到,再對其進(jìn)行修改。查找方法如同mydelete()中的數(shù)組查找。在找到后就分

27、別對數(shù)組結(jié)構(gòu)中每一個(gè)元素修改。開始輸入課程編號number結(jié)束Number等于wdeski.number修改wdeski中的各個(gè)元素輸入mm等于*圖3-9 mymodify()函數(shù)模塊的流程圖3.7 選課模塊的設(shè)計(jì)在這個(gè)模塊中用選課函數(shù)selection()將課信息讀入數(shù)組,再用函數(shù)filewrite()將數(shù)組中的選課情況讀進(jìn)文件中。filewrite()與前面講的filewhite函數(shù)相似,其主要的源代碼為:do if(wstudentini.studentnumber = 0) break; fprintf(sfptr, %dt,wstudentini.studentnumber); fo

28、r(j=0; j10; j+) if(wstudentini.classnumberj = 0) fprintf(sfptr, n); break; fprintf(sfptr, %dt, wstudentini.classnumberj); i+;while(i 50);在這里用到兩個(gè)循環(huán),可以達(dá)到選多門課的目的。其它地方可參考filewhite()函數(shù)?,F(xiàn)在主要來介紹選課函數(shù)selection(),首先,其源代碼為:scanf(%d,&wstudentini.studentnumber);scanf(“%d”, &a);for(j=0; j=N-1; j+) if(a = wdeskj.n

29、umber)flag = 0;wstudentini.classnumberk+ = a;break;在這個(gè)片段中先輸入學(xué)號,然后輸入課程編號,再在數(shù)組中查找,若未找到與輸?shù)木幪栂嗟?,則提示重新輸入或退出,否則提示選課成功。其流程圖為:開始輸入學(xué)號,再輸入課程編號是否存在此課程編號將信息讀入數(shù)組結(jié)束圖3-10 selection()函數(shù)模塊的流程圖3.8 顯示選課情況模塊的設(shè)計(jì)此函數(shù)只用到輸出選課情況的函數(shù)output()與函數(shù)myprintft()相似。其主要源代碼為:printf(%stt%sn, student number, class number);for(i=0; i50; i+

30、)if(wstudentini.studentnumber = 0)printf(n);break;printf(%dtt, wstudentini.studentnumber);for(j=0; j10; j+)if(wstudentini.classnumberj = 0)break;printf(%dt, wstudentini.classnumberj);printf(n);流程圖為:開始i 50i = 0wstudentini.studentnumber是否等于0輸出信息i+結(jié)束圖3-11 output()函數(shù)模塊的流程圖第四章 功能模塊的調(diào)試及測試4.1 登陸界面和主菜單界面的顯示

31、在進(jìn)入系統(tǒng)前,用戶需輸入學(xué)號和密碼,若沒有,則無法進(jìn)入系統(tǒng)。當(dāng)然,也有意外,如果保存學(xué)號和密碼的文件丟失,可以注冊登錄。登錄界面如下(圖4-1 登錄界面):圖4-1 登錄界面當(dāng)學(xué)號和密碼都正確后進(jìn)入主菜單界面,并可以按照此界面中的各種提示進(jìn)行操作。主菜單界面如下(圖4-2 主菜單界面):圖4-2 主菜單界面4.2 查詢所有課程信息的顯示結(jié)果輸入選項(xiàng)編號1,然后就可以看到全部課程信息,(如:圖4-3和圖4-4)圖4-3 主菜單界面圖4-4 全部課程信息界面4.3 查詢單個(gè)課程信息的顯示結(jié)果同上面操作,在主菜單中輸入選項(xiàng)編號2,再輸入要查詢的課程編號,(如圖:4-5):圖4-5 課程信息查詢界面4

32、.4 添加課程信息的顯示結(jié)果輸入選項(xiàng)編號3,由提示增加課程信息,先輸入課程編號輸0為查看課程信息,具體操作(如:圖4-6)。圖4-6 刪除課程信息界面4.5 刪除和修改課程信息的顯示結(jié)果在主菜單中輸入選項(xiàng)編號4,再輸入要?jiǎng)h除的課程編號或輸0為查看課程信息,具體操作(如:圖4-6)。圖4-7 課程信息查詢界在主菜單中輸入選項(xiàng)編號5,再輸入要修改的課程的編號 (如:圖4-8);圖4-7 修改課程信息界面4.6 選課的顯示結(jié)果輸入選項(xiàng)編號6,然后輸入學(xué)號,再輸入要選的課程編號(如:圖4-8):圖4-8 選修課程的界面查詢選課情況的顯示結(jié)果在主菜單中輸入7,即可查詢選課情況(如:圖4-9);圖4-9

33、查看選課情況的界面4.8 退出輸入編號8,在主函數(shù)中實(shí)現(xiàn)退出功能。退出界面如:圖4-10圖4-10 退出界面各模塊調(diào)試過程中注意的問題:由于本系統(tǒng)要調(diào)用的和定義的函數(shù)較多,造成可能忘記聲明函數(shù),調(diào)試過程中出錯(cuò)不能運(yùn)行。由于使用的變量較多,在使用之前一定的注意聲明,否則出錯(cuò)。還應(yīng)該注意的是變量的初始化,有時(shí)這會造成嚴(yán)重的錯(cuò)誤!注意結(jié)構(gòu)體定義和使用的變量個(gè)數(shù)。注意頭文件的聲明一定要適用于所有的函數(shù)。注意適當(dāng)?shù)闹羔樀氖褂每墒钩绦蜃兊酶油昝???偨Y(jié)本次課程設(shè)計(jì),我學(xué)習(xí)到了很多內(nèi)容!1、通過這兩周的C課程設(shè)計(jì)實(shí)習(xí),我對c語言的強(qiáng)大功能有了更深一點(diǎn)的了解。同時(shí)它也激發(fā)了我對編程的興趣和愛好,特別在成功解決

34、程序中的各種問題時(shí),有則一種興奮。2、通過編程也使我對C語言課程設(shè)計(jì)有了更深刻的了解,為以后的使用奠定了堅(jiān)實(shí)的基礎(chǔ)。3、注意大程序的設(shè)計(jì)最好按照“自頂向下,逐步細(xì)化,模塊化”的方法進(jìn)行設(shè)計(jì)。4、編寫編寫各個(gè)小函數(shù)時(shí),要學(xué)會對運(yùn)行結(jié)果的分析,并進(jìn)行測試與調(diào)試。5、在編程時(shí),應(yīng)該多使用庫函數(shù)。因?yàn)槟切┖瘮?shù)都是進(jìn)過嚴(yán)格調(diào)試的,有很強(qiáng)的可移植性,同時(shí)也能提高函數(shù)的性能。6、使用文件時(shí)要注意文件的打開和關(guān)閉。7、在使用結(jié)構(gòu)數(shù)組時(shí),要特別注意對其初始化,還要特別注意不能出現(xiàn)越界。8、最終最重要的一點(diǎn)還是要有嚴(yán)謹(jǐn)?shù)木幊趟季S,還要足夠細(xì)心。致 謝首先,感謝學(xué)校為我們提供了這個(gè)良好的平臺來鍛煉我們的對c語言的實(shí)

35、際操作和應(yīng)用能力,使我們更加充分的吸收和應(yīng)用所學(xué)的知識。其次,感謝指導(dǎo)老師對我們的幫助,指導(dǎo)老師對我們在程序調(diào)試過程中出現(xiàn)的問題提出了許多寶貴的更改方案和意見,使我們的程序能夠順利運(yùn)行也使我們的程序更人性化實(shí)用化。再次,感謝學(xué)校提供良好的環(huán)境讓我們編程。最后,感謝同學(xué)們的幫助和支持。參考資料:1Harvey M . Deitel. C程序設(shè)計(jì)經(jīng)典教程(第四版) 北京:204-3632王為青等.C語言高級編程及實(shí)例剖析 北京:378-412 3向艷等. c語言程序設(shè)計(jì) 北京:清華大學(xué)出版社 2008.9:232-236附程序清單程序代碼編寫的過程是把設(shè)計(jì)思想和設(shè)計(jì)流程圖用計(jì)算機(jī)實(shí)現(xiàn)的過程。下面按

36、照統(tǒng)一的設(shè)計(jì)風(fēng)格編寫學(xué)生選課系統(tǒng)的各個(gè)模塊代碼:#include #include #define N 100struct classinint number;char classname10;int hours;double credit;typedef struct classin Classin; /*定義課程信息結(jié)構(gòu).*/struct selectinint studentnumber;int classnumber10;typedef struct selectin Selectin; /*定義選課信息結(jié)構(gòu)。*/int inset(void);void waiting(void);i

37、nt viewin(int a, Classin *wdesk);void mywrite(Classin *wdesk);void myread(Classin *wdesk);void printmenu(void);void myfind(Classin *wdesk);void myadd(Classin *wdesk);void mydelete(Classin *wdesk);void mymodify(Classin *wdesk);void filewhite(Classin *wdesk);void myprintf(Classin *wdesk);void shunxu(C

38、lassin *wdesk);void selection(Classin *wdesk, Selectin *wstudentin);void filewrite(Selectin *wstudentin);void output(Selectin *wstudentin);/*主函數(shù)*/int main()char m = 0;int choice = 0;int i;Classin deskN = 0; Selectin studentin50 = 0; FILE *cfptr;waiting();if(!inset()choice = 8;if(cfptr = fopen(Lesson

39、Info.txt,r) = NULL)printf(the file cant be openedn);printf(You shoud enter the class information!n);mywrite(desk);else i = 0;while(!feof(cfptr) fscanf(cfptr, %d%s%d%lf, &deski.number, deski.classname, &deski.hours, &deski.credit); i+; /*將文件中的課程信息讀入數(shù)組。*/fclose(cfptr); if(choice != 8)dosystem(cls);pri

40、ntmenu(); printf(Please select: ); scanf(%d,&choice);system(cls);if(choice 8)printf(Incorrect entered.n);printf(Enter any key to continue.nn); fflush(stdin); scanf(%c, &m);while(choice 8); system(cls);while(choice != 8) switch(choice) case 1: myread(desk); break; case 2: myfind(desk); break; case 3:

41、 myadd(desk); shunxu(desk); filewhite(desk); break; case 4: mydelete(desk); filewhite(desk); break; case 5: mymodify(desk); shunxu(desk); filewhite(desk); break; case 6: selection(desk, studentin); filewrite(studentin); break; case 7: output(studentin); break; default: break; /*對各種操作進(jìn)行選擇。*/ if(choic

42、e != 8) system(cls); printmenu(); printf(Please select: ); scanf(%d,&choice); system(cls); return 0; /*結(jié)束main.*/*進(jìn)入系統(tǒng)操作。*/int inset(void) FILE *tp, *sp;int i = 0, j = 0;int num = -1, mima, flag = 0;int a50, b50;int k = 0, c100;char m = 0, x;if(tp = fopen(mima.txt, r) = NULL)printf(The password is mi

43、ss!n);printf(Please register first.n);tp = fopen(mima.txt, w); printf(Please enter your stdent number: );scanf(%d, &ai);printf(Please enter the password: );scanf(%d, &bi);printf(nnregister success!nn);fprintf(tp, %dt%dt, ai, bi);fclose(tp);printf(enter any key to continue.n);fflush(stdin);scanf(%c,

44、&x);system(cls); /*創(chuàng)建登陸信息。*/tp = fopen(mima.txt, r);while(!feof(tp)fscanf(tp, %d%d, &ai, &bi+);fclose(tp);printf( Welcome to Lesson Management System! n);printf(nnnnnnnttt Lesson Management System n);doprintf(ttt Please enter your student number: );scanf(%d, &num);for(j=0; j50; j+) if(num = aj)while

45、(m != *)printf(ttt Please enter the password: );scanf(%d, &mima);if(mima = bj)flag = 1;m = *;break;elseprintf(ttt Your password is wrong!n);printf(ttt Enter any key to continue(enter * to exit.)nnn);printf(ttt );fflush(stdin);scanf(%c, &m);if(m = *)break; /*結(jié)束while*/ /*if的后*/if(m = *)break; /*結(jié)束for*

46、/if(flag != 1)printf(ttt The student number is not exist!);printf(nttt Enter any key to continue(enter * to exit.)nnn);printf(ttt );fflush(stdin);scanf(%c, &m);while(m != *); /*驗(yàn)證信息*/if(flag = 1)if(sp = fopen(jilu.txt, r) = NULL)printf(The file is not exit!);sp = fopen(jilu.txt, w);elsei = 0;while(!

47、feof(sp) fscanf(sp, %d, &ci+);k+;fclose(sp);sp = fopen(jilu.txt, a);fprintf(sp, %dtt%dn, num, (k+=2)/2);fclose(sp); /*將登陸信息讀入文件。*/ return flag;/*向文件中寫入課程信息。*/void mywrite(Classin *wdesk)int i=0; char m = 0;do printf(nPlease enter %d class number: , i+1); scanf(%d,&wdeski.number); printf(Please enter

48、 the class name: ); fflush(stdin); scanf(%s,&wdeski.classname); printf(Please enter the hours: ); scanf(%d,&wdeski.hours); printf(Please enter the credit: ); scanf(%lf,&wdeski.credit); printf(nnPlease enter a new class number(enter * to the menu).n); fflush(stdin); scanf(%c,&m); i+;while(m != * & i

49、N);filewhite(wdesk); /*將課程信息讀入文件。*/void filewhite(Classin *wdesk)int i = 0;FILE *cfptr;cfptr = fopen(LessonInfo.txt,w); do if(wdeski.hours = 0) break; fprintf(cfptr, %-10d%-20s%-10d%-10.2lfn, wdeski.number,wdeski.classname,wdeski.hours,wdeski.credit); i+;while(i Welcome to Lesson Management System!

50、n);printf(nnnttt Lesson Management System );printf(nnnttt 1.View All Lessonn);printf(ttt 2.View A Lesson Informationn);printf(ttt 3.Add Lesson Informationn);printf(ttt 4.Delete Lesson Informationn);printf(ttt 5.Modify Lesson Informationn);printf(ttt 6.Select Lessonn);printf(ttt 7.View the selected i

51、nformatiom.n);printf(ttt 8.Exitn);printf(nnntttCopyright:Automation08 Fan Weinn);printf(=n);/*在屏幕輸出全部課程信息。*/void myread(Classin *wdesk)char m;int i;printf(%-10s%-20s%-10s%-10s%n,number, classname, hours, credit);for(i=0; i=N-1; i+)if(wdeski.hours = 0) break; printf(%-10d%-20s%-10d%-10lfn, wdeski.num

52、ber,wdeski.classname,wdeski.hours,wdeski.credit);printf(Print any key to the menu.n);fflush(stdin);scanf(%c,&m);system(cls);/*查找課程信息。*/void myfind(Classin *wdesk)int Number;char m;int flag,i;doflag = -1; printf(Please enter the class number: ); scanf(%d,&Number);printf(nn); for(i=0;i=N-1;i+) if(Numb

53、er = wdeski.number) if(wdeski.credit = 0.0)printf(nnnn);break; printf(%-10s%-20s%-10s%-10s%n,number, classname, hours, credit);printf(%-10d%-20s%-10d%-10lfnnnn, wdeski.number,wdeski.classname,wdeski.hours,wdeski.credit); flag = 0; break; if(flag = -1)printf(The classe is not existn); printf(Enter ot

54、her key to continue(Enter * to the menu).n);fflush(stdin);scanf(%c,&m);while(m != *); system(cls);/*增加課程信息*/void myadd(Classin *wdesk)char m = 0;int nub = -1, i;nub = viewin(nub, wdesk);do for(i=0; i=N-1; i+) if(nub = wdeski.number) printf(The class number is exist!n); printf(Enter other key to cont

55、inue(Enter * to the menu).nn);fflush(stdin); scanf(%c,&m);break; /*存在所輸課程信息*/if(wdeski.hours = 0)wdeski.number = nub;printf(nPlease enter the class name: );fflush(stdin); scanf(%s,&wdeski.classname);printf(Please enter the hours: );scanf(%d,&wdeski.hours);printf(Please enter the credit: );scanf(%lf,

56、&wdeski.credit);printf(nAdd successul!nPlease enter a new class number(enter * to the menu).n);fflush(stdin);scanf(%c,&m);printf(nn);break; /*增加課程信息*/if(m != *) nub = viewin(nub, wdesk);while(m != *);system(cls);/*從屏幕輸出全部課程信息。*/void myprintf(Classin *wdesk)int i;printf(%-10s%-20s%-10s%-10s%n,number,

57、 classname, hours, credit);for(i=0; i=N-1; i+)if(wdeski.hours = 0)break;printf(%-10d%-20s%-10d%-10lfn, wdeski.number,wdeski.classname,wdeski.hours,wdeski.credit);/*刪除課程信息*/void mydelete(Classin *wdesk)int nub = -1, i, j;int flag = -1;char m = 0;nub = viewin(nub, wdesk);dofor(i=0; i=N-1; i+)if(wdeski

58、.number = 0)break;if(nub = wdeski.number)flag = 0;for(j=i; j=N-2; j+)wdeskj = wdeskj+1; /*將找到的課程刪除*/if(wdeskj+1.hours = 0) break;printf(Delete success.n);break; if(flag = -1) printf(the class is not exist.n);printf(Enter any key to continue(enter * to end).n);fflush(stdin);scanf(%c,&m);if(m != *)nub

59、 = viewin(nub, wdesk);while(m != *);system(cls);/*修改課程信息。*/void mymodify(Classin *wdesk)int Number;char m;int flag,i;doflag = -1;Number = viewin(Number,wdesk);printf(nn); for(i=0;i=N-1;i+) if(Number = wdeski.number) if(wdeski.credit = 0.0)printf(nnnn);break; printf(Please entr the classname: );scanf

60、(%s,&wdeski.classname); printf(Please enter the hours: ); scanf(%d,&wdeski.hours); printf(Please enter the credit: ); scanf(%lf,&wdeski.credit);printf(nModify success!n); flag = 0; break; /*尋找課程,并對其信息進(jìn)行修改*/ if(flag = -1)printf(The classe is not existn); printf(Enter other key to continue(Enter * to

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論