




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設(shè)計(jì)報(bào)告專 業(yè): 班 級(jí): 學(xué) 號(hào): 姓名: 指導(dǎo)教師: 成績(jī): 計(jì)算機(jī)工程學(xué)院 2014年6月專心-專注-專業(yè)目 錄一、 題目: 名稱、內(nèi)容 . 2二、解題的基本思路 . 2三、設(shè)計(jì)方案功能模塊框圖 . 3程序流程圖等 . 3四、算法設(shè)計(jì)算法描述 . 9實(shí)現(xiàn)方法 . 9詳細(xì)流程圖 . 10五、程序調(diào)試調(diào)試過(guò)程與步驟 . 15發(fā)現(xiàn)的問(wèn)題 . 16解決的辦法 . 17六、測(cè)試運(yùn)行程序 . 17輸入測(cè)試數(shù)據(jù) . 18判斷是否達(dá)到預(yù)期目的 . 19注: 1.測(cè)試數(shù)據(jù)要有典型意義2.要注意臨界值的選取3.注意測(cè)試數(shù)據(jù)的廣泛性和普適性七、總結(jié)收獲與體會(huì) . 20有實(shí)際內(nèi)容,
2、忌空洞無(wú)物忌千篇一律,400字左右。八、附錄:源代碼(含注釋). 21一、題目名稱、內(nèi)容(學(xué)生選課管理系統(tǒng)設(shè)計(jì))(第32組)假定有n門課程,每門課程的信息包括:課程編號(hào),課程名稱,課程性質(zhì)(公共課、必修課、選修課),總學(xué)時(shí),學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計(jì)一選修課程系統(tǒng),實(shí)現(xiàn)以下功能:1課程信息錄入(課程信息用文件保存,并可在電腦中直接查找并打開該文件)2課程信息瀏覽3課程信息查詢(1)按學(xué)分查詢(2)按課程性質(zhì)查詢4學(xué)生選修課程學(xué)生輸入學(xué)號(hào)和姓名后可進(jìn)行選課。5統(tǒng)計(jì)學(xué)生選課情況二、解題的基本思路 C語(yǔ)言課程設(shè)計(jì)和現(xiàn)代計(jì)算機(jī)技術(shù)的實(shí)際應(yīng)用相結(jié)合,是我們
3、在本階段學(xué)完理論課程之后對(duì)自己該方面的能力的一次很好的檢驗(yàn),從開始的算法思路到運(yùn)行調(diào)試后的美觀的圖形界面以及另人興奮的可用程序,都是一個(gè)很好的學(xué)習(xí)和鍛煉的過(guò)程。使我們鞏固了原有的理論知識(shí),培養(yǎng)了我們靈活運(yùn)用和組合集成所學(xué)過(guò)知識(shí)及技能來(lái)分析、解決實(shí)際問(wèn)題的能力。使我們體會(huì)到自身知識(shí)和能力能在實(shí)際中的應(yīng)用和發(fā)揮。不但可以激發(fā)創(chuàng)新意識(shí),同時(shí),還可以開發(fā)創(chuàng)造能力、培養(yǎng)溝通能力。這次學(xué)生選修課系統(tǒng)管理設(shè)計(jì)時(shí)間雖然僅有一個(gè)星期,但確實(shí)使我受益非淺。通過(guò)學(xué)生選修課系統(tǒng)管理設(shè)計(jì)我豐富了計(jì)算機(jī)操作經(jīng)驗(yàn),更加深了對(duì)C語(yǔ)言的了解,熟悉了其環(huán)境,更增強(qiáng)了對(duì)Microsoft Visual C+ 6.0的使用技巧。C語(yǔ)
4、言是在國(guó)內(nèi)外廣泛使用的一種計(jì)算機(jī)語(yǔ)言。語(yǔ)言功能豐富、表達(dá)能力強(qiáng)、使用靈活方便、既具有高級(jí)語(yǔ)言的優(yōu)點(diǎn),又具有低級(jí)語(yǔ)言的許多特點(diǎn),適合編寫系統(tǒng)軟件。同時(shí),我覺(jué)得C語(yǔ)言應(yīng)該是操作和理論相結(jié)合的課程,在不斷地編寫中去思考,兩者是不可分割的。我們?cè)诰帉懸粋€(gè)較大的程序時(shí)應(yīng)該把它分開成幾個(gè)小程序來(lái)看,這樣會(huì)容易得多。比如說(shuō),這次的選課系統(tǒng),將系統(tǒng)分為錄入、瀏覽、查詢、選課、統(tǒng)計(jì)、退出系統(tǒng)六個(gè)階段。通過(guò)主函數(shù)調(diào)用各個(gè)函數(shù),層次清晰,一眼明了,同時(shí)。為了滿足多種查詢的方式,將查詢函數(shù)分為兩個(gè)部分,按照學(xué)分查詢和按照課程性質(zhì)查詢,這樣可以避免錯(cuò)誤。最后,我覺(jué)得我所編出的程序的最大的優(yōu)點(diǎn)就是輸入錯(cuò)誤后,有個(gè)重新輸入
5、的步驟,這樣避免有人誤選數(shù)字,而導(dǎo)致程序結(jié)束。同時(shí),在程序中用printf輸出如“歡迎進(jìn)入”、“謝謝使用”等的敬語(yǔ),更具有人性化,親人美觀的界面可以讓選課者賞心悅目。同時(shí),程序中的換行等,都可以保持界面不至于太過(guò)擁擠,大方簡(jiǎn)約。3、 設(shè)計(jì)方案,功能模塊框圖與程序流程圖等(1) 設(shè)計(jì)方案:通過(guò)主函數(shù)調(diào)用各個(gè)函數(shù)實(shí)現(xiàn)其功能,并逐步進(jìn)行優(yōu)化開 始(2) 本系統(tǒng)的功能模塊如圖所示 主 函 數(shù)進(jìn)入選課操作統(tǒng)計(jì)選課情況瀏覽課程信息錄入課程信 息查詢課程信息從選課文件中統(tǒng)計(jì)信 息輸 入學(xué) 號(hào)姓 名進(jìn) 行選 課瀏覽文件中的課程信 息將課程信息輸入文件 中按 照課 程性 質(zhì)查 詢課 程按照學(xué)分查詢課程信 息(3
6、)主要功能模塊:1.主函數(shù):構(gòu)造void main(),實(shí)現(xiàn)調(diào)用各個(gè)功能模塊:學(xué)生選課系統(tǒng)執(zhí)行主流程如圖所示,先執(zhí)行主函數(shù)中顯示菜單函數(shù),通過(guò)循環(huán)和按鍵操作來(lái)執(zhí)行相應(yīng)的操作。按鍵的有效鍵值為05之間的任意數(shù)值,其他按鍵為無(wú)效輸入,會(huì)提示“輸入錯(cuò)誤,請(qǐng)重新輸入”,同時(shí),再次用scanf創(chuàng)造再次輸入的機(jī)會(huì)。各個(gè)按鍵的執(zhí)行功能為: “1”:錄入選修課課程信,調(diào)用函數(shù)luru(); “2”:瀏覽錄入的課程信息,調(diào)用函數(shù)liulan(); “3”:查詢課程信息,調(diào)用函數(shù)chaxun(); “4”:進(jìn)入選課操作,調(diào)用函數(shù)chaxun(); “5”:統(tǒng)計(jì)選課信息,調(diào)用函數(shù)tongji(); “0”:退出系統(tǒng)
7、;int main()int n;int menu();int f1();int luru();int liulan();int chaxun();int xuanke();int tongji();printf("n * *");printf("nn * 歡迎進(jìn)入學(xué)生選課系統(tǒng)! *");menu();printf("n");printf(" * the end *n");printf("n * *");printf("nn 請(qǐng) 先 選 擇 1 進(jìn) 行 課 程 信 息 錄 入:&quo
8、t;);scanf("%d",&n);for(;n>5|n<0;)printf("n 輸 入 錯(cuò) 誤 !請(qǐng) 重 新 輸 入 !n ");scanf("%d",&n);while(n>0&&n<6)switch(n)case 1:luru();break;case 2:liulan();break;case 3:chaxun();break;case 4:xuanke();break;case 5:tongji();break;scanf("%d",&n
9、);for(;n>5|n<0;)printf("nn");printf("n 輸 入 錯(cuò) 誤 ! 請(qǐng) 重 新 輸 入 !n ");scanf("%d",&n);system("cls"); if(n=0)printf(" nnnnnnn");printf(" * 謝謝使用! *n "); printf("nnnnn");exit(0);return 0; 2. 定義menu函數(shù),f1函數(shù)方便調(diào)用函數(shù)函數(shù)功能及實(shí)現(xiàn):此函數(shù)為輸出菜單,進(jìn)入
10、系統(tǒng)后提示可根據(jù)供選擇的項(xiàng)目進(jìn)行后續(xù)操作。int menu()int n;printf("nnnn");printf(" 1. 錄 入 課 程 信 息nn"); printf(" 2. 瀏 覽 課 程 信 息nn"); printf(" 3. 查 詢 課 程 信 息nn"); printf(" 4. 進(jìn) 入 選 課 操 作nn");printf(" 5. 統(tǒng) 計(jì) 選 課 情 況nn");printf(" 0. 退 出 選 課 系 統(tǒng)nn"); return
11、 0;3. 定義課程、選課結(jié)構(gòu)體變量struct courseint num;char name20;char kind20;int ttime,mark,term;c;struct student int snum;int cnum;char cnam20;char snam20;s500;4. 定義錄入函數(shù),課程信息函數(shù)功能及實(shí)現(xiàn):此函數(shù)錄入課程信息,在查詢、瀏覽、進(jìn)入選課,查看選課信息等函數(shù)之前。定義指向文件的指針變量*fp,課程信息結(jié)構(gòu)體c通過(guò)fopen函數(shù)建立文件”course.txt”,后輸入錄入課程的門數(shù),打印表頭,通過(guò)for循環(huán),用scanf函數(shù)從屏幕讀取課程信息,并通過(guò)fpr
12、intf函數(shù)將課程信息錄入到文件“course.txt”中,最后輸出主菜單,返回主程序。int luru()FILE *fp;struct course c;int count;int i;if(fp=fopen("D:/course.txt","w")=NULL)printf("cannot open filen");exit(0);printf("n 請(qǐng) 輸 入 選 擇 的 課 程 門 數(shù):");scanf("%d",&count);printf("nnn");f
13、1();for(i=0;i<count;i+)scanf("%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);fprintf(fp,"%dt%st%st%dt%dt%dt",c.num,,c.kind,c.ttime,c.mark,c.term);fclose(fp);printf("n 錄 入 成 功!nn");menu();return 0;5. 定義瀏覽函數(shù),瀏覽錄入的課程信息函數(shù)功能及實(shí)現(xiàn):此函數(shù)先定義指向
14、文件的指針*fp,課程結(jié)構(gòu)體變量c,通過(guò)if語(yǔ)句判斷文件是否存在,在調(diào)用函數(shù)f1(),輸出表頭信息,通過(guò)for循環(huán)并使用fscanf函數(shù)將文件中的課程信息讀出并通過(guò)printf打印到屏幕上,再通過(guò)fclose函數(shù)關(guān)閉文件。int liulan()/瀏覽函數(shù)int i=0;FILE *fp;struct course c;if(fp=fopen("D:/course.txt","r")=NULL)printf("ncannot open course!n");exit(0);f1();while(!feof(fp)&&i
15、<count)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);printf("%7d%11s%10s%9d%9d%8dn",c.num,,c.kind,c.ttime,c.mark,c.term);i+;fclose(fp);menu();return 0;6. 定義查詢函數(shù),按照學(xué)分和課程性質(zhì)查詢函數(shù)功能及實(shí)現(xiàn):先定義學(xué)生結(jié)構(gòu)體變量s,打印相關(guān)可供選擇的選項(xiàng),通過(guò)scanf函數(shù)讀取輸入字符,打印表頭,再使用i
16、f語(yǔ)句進(jìn)行相關(guān)選擇。如果數(shù)“1”,則是按學(xué)分查詢課程,符合第一個(gè)if語(yǔ)句,輸入想要查詢的學(xué)分,程序通過(guò)for循環(huán)從文件中讀取課程信息,并通過(guò)printf函數(shù)輸出滿足要求的課程信息;如選擇“2”,符合第二個(gè)if語(yǔ)句,則按照課程性質(zhì)查詢,輸入課程性質(zhì),程序通過(guò)for循環(huán)從文件中讀取課程信息,并通過(guò)printf函數(shù)輸出滿足要求的課程信息;如輸入“3”,符合第二個(gè)if語(yǔ)句,則按照課程名稱查詢,輸入要課程名稱,程序通過(guò)for循環(huán)從文件中讀取課程信息,并通過(guò)printf函數(shù)輸出滿足要求的課程信息;查詢完成后通過(guò)fclose 函數(shù)關(guān)閉文件,打印主菜單,返回主函數(shù)。int chaxun()FILE *fp;s
17、truct course c;int score;int b,i=0;char kind20;printf("n 1.按 學(xué) 分 查 詢n");printf("n 2.按 課 程 性 質(zhì) 查 詢");printf(" 請(qǐng) 選 擇 查 詢 方 式 nn 輸 入 選 項(xiàng) 數(shù) 字:");scanf("%d",&b);for(;b<1|b>2;)printf("n 輸 入 錯(cuò) 誤 !請(qǐng) 重 新 輸 入 !n ");scanf("%d",&b);if(b=1
18、)printf("n 輸 入 你 要 查 詢 的 學(xué) 分: ");scanf("%d",&score);if(fp=fopen("D:/course.txt","r")=NULL)printf("ncannot open course!n");exit(0);f1();while(!feof(fp)&&i<count)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&a
19、mp;c.mark,&c.term);if(c.mark=score)printf("%7d%11s%10s%9d%9d%8dn",c.num,,c.kind,c.ttime,c.mark,c.term);i+;else if(b=2)printf("nn 輸 入 你 要 查 詢 的 課 程 性 質(zhì):");scanf("%s",kind);if(fp=fopen("D:/course.txt","r")=NULL)/打開文件"course.txt"prin
20、tf("ncannot open course!n");f1();while(!feof(fp)&&i<count)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);if(strcmp(c.kind,kind)=0)printf("%7d%11s%10s%9d%9d%8dn",c.num,,c.kind,c.ttime,c.mark,c.term);i+;elseprintf(
21、"輸入錯(cuò)誤!");exit(1);fclose(fp);menu();return 0;7. 定義選課函數(shù),進(jìn)入選課操作函數(shù)功能及實(shí)現(xiàn):進(jìn)入此函數(shù)可進(jìn)行自由選課,首先定義了學(xué)生結(jié)構(gòu)體變量s,和課程結(jié)構(gòu)體變量c。選課學(xué)生輸入自己的學(xué)號(hào)和要選的課程,通過(guò)for循環(huán)打開文件并找到所要選擇的課程,通過(guò)break跳出循環(huán),關(guān)閉課程文件“course.txt”并將學(xué)生選課信息存入文件“student.txt”中。打印菜單信息,返回主函數(shù)。int xuanke()int t=0,flag;int i;/*struct course c;FILE *fp;doprintf("n
22、請(qǐng) 輸 入 學(xué) 號(hào) 姓 名 課 程 編 號(hào) 及 課 程 名 稱 :"); scanf("%d%s%d%s",&st.snum,st.snam,&um,am);if(fp=fopen("D:/course.txt","r")=NULL)/打開文件"course.txt"printf("ncannot open course!n");exit(0);while(!feof(fp)fscanf(fp,"%d%s%s%d%d%d",&am
23、p;c.num,,c.kind,&c.ttime,&c.mark,&c.term); if(um=c.num)&&(am=)t+;break;fclose(fp);printf("n 是 否 繼 續(xù) ,是 1,否 0 n ");scanf("%d",&flag);if(fp=fopen("D:/student.txt","a+")=NULL)printf("ncannot open student!n")
24、;exit(0); for(i=0;i<t;i+);fprintf(fp,"%dt%st%dt%stn",st.snum,st.snam,um,am); fclose(fp);while(flag);printf("n * 恭喜選課成功!*n");menu();return 0;8定義統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)學(xué)生選課信息函數(shù)功能及實(shí)現(xiàn):此函數(shù)為查看選修課被選擇的情況。定義了變量total為了統(tǒng)計(jì)選課人數(shù),通過(guò)if語(yǔ)句判斷是否存在文件“student.txt”,通過(guò)for循環(huán)打印出所有已選課學(xué)生的學(xué)號(hào)、選課課程編號(hào)和所選課程的名稱,通過(guò)計(jì)數(shù)
25、變量total輸出已選課的人數(shù)信息。然后打印菜單,返回主函數(shù)。int tongji()/統(tǒng)計(jì)函數(shù)int total=0;int t,i=0;FILE *fp;if(fp=fopen("D:/student.txt","r")=NULL)printf("ncannot open student!n");exit(0);printf("n 學(xué)號(hào) 姓名 課程編號(hào)及課程名稱n");while(!feof(fp)fscanf(fp,"%d%s%d%sn",&si.snum,si.snam,&
26、;um,am);total+;i+;t=i;for(i=0;i<t;i+)printf("%5d%6s%7d%10sn",si.snum,si.snam,um,am);printf("n 選課學(xué)生總?cè)藬?shù)為:%d人",total);fclose(fp);menu();return 0;4、 算法設(shè)計(jì) (1)主函數(shù)的設(shè)計(jì) 對(duì)于主函數(shù),通過(guò)選擇操作所對(duì)應(yīng)的數(shù)字,進(jìn)入相應(yīng)的操作,同時(shí),在選擇序號(hào)數(shù)字錯(cuò)誤時(shí),有提示“輸入錯(cuò)誤,請(qǐng)重新輸入”,然后,從鍵盤上重新輸入一個(gè)數(shù)字,繼續(xù)進(jìn)行相應(yīng)的操作。(注:輸入的數(shù)字要在05之內(nèi)
27、)算法設(shè)計(jì)如下:S1: 從鍵盤上輸入一個(gè)05的數(shù)字,進(jìn)入相應(yīng)的操作S2: 如果選擇序號(hào)1,則進(jìn)入課程信息錄入操作S3: 如果選擇序號(hào)2,則進(jìn)入瀏覽課程信息操作S4: 如果選擇序號(hào)3,則進(jìn)入查詢課程信息操作S5: 如果選擇序號(hào)4,則進(jìn)入學(xué)生選擇課程操作S6: 如果選擇序號(hào)5,則進(jìn)入統(tǒng)計(jì)選課情況操作S7: 如果選擇序號(hào)0,則退出學(xué)生選課管理系統(tǒng)S8: 如果選擇除05的其他操作,則提示“輸入錯(cuò)誤,請(qǐng)重新輸入”然后返回S1具體流程圖如下:開 始 主 函 數(shù)輸入05相 應(yīng)的操作對(duì)應(yīng)的數(shù)字進(jìn)行相應(yīng)的操作是 否 繼 續(xù) 是 否結(jié) 束(2) 錄入函數(shù)的設(shè)計(jì)對(duì)于錄入函數(shù),就是在D盤建立一個(gè)“course.txt
28、”文件,然后通過(guò)scanf從鍵盤上輸入課程信息,再通過(guò)fprintf將輸入的信息保存在文件中,關(guān)閉文件。算法設(shè)計(jì)如下:S1: 在D盤建立“course.txt”文件S2: 提示讓學(xué)生輸入選課門數(shù)S3: 從鍵盤上輸入課程信息并保存S4: 當(dāng)指針指向文件尾部,返回S3 具體流程圖如下: 開 始創(chuàng)建文件 輸入課程門數(shù)結(jié) 束輸入課程信息保存課程信息是否指向尾 部 是結(jié) 束(3) 瀏覽函數(shù)的設(shè)計(jì)對(duì)于瀏覽函數(shù),通過(guò)fscanf讀取文件中的課程信息,然后再通過(guò)printf將信息輸出算法設(shè)計(jì)如下:S1: 打開“course.txt”文件S2: 讀取文件中的信息S3: 輸出信息S4: 當(dāng)指針未指向文件尾部,返回
29、S2具體流程圖如下:開 始打開文件輸出課程信息讀取課程信息 否是否指向尾 部是結(jié) 束(4) 查詢函數(shù)的設(shè)計(jì)對(duì)于查詢函數(shù),輸入1或2選擇查詢方式,如果不是,則重新輸入。對(duì)于不同方式的查詢,如果輸入的方式與文件中有相符的,則輸出查詢結(jié)果算法設(shè)計(jì)如下:S1: 選擇查詢方式S2: 如果方式是學(xué)分查詢,輸入想查詢的學(xué)分,打開文件,未指向文件尾部,如果文件中存在,則輸出查詢結(jié)果S3: 如果方式是課程性質(zhì)查詢,輸入想查詢的課程性質(zhì),打開文件,未指向文件尾部,讀取文件信息,如果文件中存在,則輸出查詢結(jié)果S4: 如果方式數(shù)字不存在,則退出查詢具體流程圖如下:開 始選擇查詢方式數(shù)字不正確按課程性質(zhì)按學(xué)分查詢打開文
30、件讀取打開文件讀取只 顯示 課程 編號(hào)、課程 名稱 信息,不顯 示結(jié) 果是否存在信息是否存在信息是是 否 否是否指向尾 部是否指向尾 部是是是是退出課程查詢系統(tǒng)輸出課程信息輸出課程信息結(jié) 束結(jié) 束(5) 選課函數(shù)的設(shè)計(jì)對(duì)于選課函數(shù),先從鍵盤上輸入學(xué)號(hào),姓名,課程編號(hào),課程名稱,打開“course.txt”文件,如果,課程存在,則進(jìn)入下一步,建立“student.txt”文件,將選課信息保存在文件中,退出。算法設(shè)計(jì)如下:S1: 輸入選課信息,包括學(xué)號(hào),姓名,課程編號(hào),課程名稱S2: 打開文件“course.txt”S3: 如果課程存在,則進(jìn)行下一步S4: 建立“student.txt”文件S5:
31、 保存選課信息 具體流程圖如下開 始:輸入選課信息打開課程文件是否存在課程建立選課文件讀取選課信息保存讀取選課信息保存 否是否指向尾 部結(jié) 束(6) 統(tǒng)計(jì)函數(shù)的設(shè)計(jì)對(duì)于統(tǒng)計(jì)函數(shù),打開“student.txt”文件,讀取文件中的選課信息,輸出文件中的選課信息,計(jì)數(shù),關(guān)閉文件算法設(shè)計(jì)如下:S1: 打開“student.txt”文件S2: 當(dāng)未指向文件尾部,讀取文件中的選課信息S3: 輸出選課信息同時(shí)計(jì)數(shù)S4: 輸出人數(shù)S5: 結(jié)束具體流程圖如下:開 始打開選課文件讀取選課信息輸出選課信息計(jì)數(shù)否是否指向尾 部結(jié) 束五、程序調(diào)試(1) 調(diào)試步驟 先進(jìn)入菜單函數(shù),選擇數(shù)字進(jìn)行相應(yīng)的操作,然后,先進(jìn)入錄入
32、函數(shù)階段,通過(guò)鍵盤輸入相應(yīng)的課程信息,同時(shí),創(chuàng)建一個(gè)“course.txt”文件,將輸入的課程信息保存在文件中。然后,進(jìn)入瀏覽函數(shù)階段,先讀取課程文件中的課程信息,然后將信息顯示到屏幕上。接著,進(jìn)入查詢函數(shù)階段,通過(guò)學(xué)分或者課程性質(zhì),查詢相應(yīng)的課程信息。隨后,進(jìn)入選課函數(shù)階段,通過(guò)輸入學(xué)號(hào)和姓名,進(jìn)行選課操作,并創(chuàng)建一個(gè)“student.txt”文件,將選課信息保存其中。最后,進(jìn)入統(tǒng)計(jì)函數(shù)階段,讀取選課文件中的信息,統(tǒng)計(jì)選課人數(shù),并將選課信息顯示在屏幕上。選擇序號(hào)0退出選課系統(tǒng)。(2)發(fā)現(xiàn)的問(wèn)題 1. 在用scanf函數(shù)給普通變量輸入數(shù)據(jù)時(shí),在變量名前漏寫地址運(yùn)算符&。如:scanf(
33、“%d”,count);同時(shí),不能少掉上引號(hào)和分號(hào)。 2. 輸入數(shù)據(jù)時(shí)的數(shù)據(jù)形式與要求不符。用scanf函數(shù)輸入數(shù)據(jù)時(shí),必須注意要與scanf語(yǔ)句中的對(duì)應(yīng)形式匹配。 如:scanf(“%d,%d”,&x,&y);輸入數(shù)據(jù)時(shí),不能輸2 3,而是應(yīng)該用2,3 3.可以用scanf輸入一個(gè)字符串,如果要用它輸入多個(gè)字符串,輸入時(shí),中間要用空格分開。 如:scanf(“%s%s%s”,str1,str2,str3);輸入數(shù)據(jù) how are you4. 混淆“=”和“=” 在C語(yǔ)言中,“=”是賦值運(yùn)算符,“=”是關(guān)系運(yùn)算符。 如:if(i=1)不能寫成if(i=1) 5. 在不該出現(xiàn)分
34、號(hào)的地方加了分號(hào) 如:if(x>y);在if后面是不用加分號(hào)的 6. 不能超過(guò)數(shù)組的最大值使用,在引用數(shù)組元素時(shí),下標(biāo)從0開始,即下標(biāo)的下限是0,而下標(biāo)的上限值是數(shù)組定義時(shí)元素個(gè)數(shù)減1。 7. 在switch語(yǔ)句的各分支中未使用break語(yǔ)句。 如:switch(n) case 1:luru();break;/錄入課程信息 case 2:liulan();break;/瀏覽課程信息 case 3:chaxun();break;/查詢課程信息 case 4:xuanke();break;/進(jìn)入選課操作 case 5:tongji();break;/統(tǒng)計(jì)選課情況 8. 統(tǒng)計(jì)時(shí)出現(xiàn)中文(2)
35、解決問(wèn)題1.對(duì)于語(yǔ)法中的錯(cuò)誤,可以通過(guò)系統(tǒng)自動(dòng)查出。2.像邏輯錯(cuò)誤,即算法中的問(wèn)題,要通過(guò)不斷檢驗(yàn)算法,觀察它邏輯中的錯(cuò)誤。同時(shí)對(duì)于運(yùn)行中出現(xiàn)中文的問(wèn)題,是因?yàn)閷?duì)于數(shù)組的未初始化或者定義空間過(guò)小等出現(xiàn)的。3.對(duì)于可以創(chuàng)建,但是無(wú)法鏈接的問(wèn)題,可能是未關(guān)閉運(yùn)行窗口,或出現(xiàn)拼寫中的錯(cuò)誤,還有,像字符串的前面是不用加地址符的。 4.還有,出現(xiàn)最后一行多輸出一次的問(wèn)題,那就是在循環(huán)里面,應(yīng)該先檢查它所在的文件中是否多有一行,如果文件中多一行,那就是保存時(shí)出現(xiàn)問(wèn)題,如果是文件中是正確的,那問(wèn)題就可能出現(xiàn)在輸出函數(shù)時(shí),循環(huán)中多進(jìn)行一次六、測(cè)試(1)、主菜單界面 (2)、錄入課程信息:(3)、瀏覽課程信息:
36、(4)、查詢課程信息a.按照學(xué)分查詢: b.按照課程性質(zhì)查詢: (5)、進(jìn)入選課操作:(可以多次選擇) (6)、統(tǒng)計(jì)選課信息 (7)退出選課系統(tǒng)(按0退出操作系統(tǒng))七、總結(jié):為了更好的復(fù)習(xí)C語(yǔ)言的基礎(chǔ)知識(shí),進(jìn)一步加深對(duì)C語(yǔ)言編程的理解,老師給每個(gè)人布置了完成一個(gè)操作系統(tǒng)的任務(wù)。這對(duì)于我們來(lái)說(shuō),無(wú)疑是一個(gè)巨大的挑戰(zhàn)。因?yàn)殒湵硎莿倓倢W(xué)習(xí)的,還不太熟練,我選擇了用結(jié)構(gòu)體和數(shù)組來(lái)構(gòu)建我的系統(tǒng)。我知道,對(duì)于鏈表,我們應(yīng)該熟練掌握,但是,在以后,我會(huì)多看書,加深對(duì)鏈表的理解。而且,通過(guò)這次作業(yè),我懂得了如何做一個(gè)完整的系統(tǒng),我明白一個(gè)好的系統(tǒng),是要分成很多模塊,而不是單純的堆疊在一個(gè)主函數(shù)里,對(duì)于同一種性
37、質(zhì)的,最好將他們放在另外一個(gè)函數(shù)里,方便多次調(diào)用,并且,避免了不必要的繁瑣。自己編一個(gè)程序,才了解到其中的不易,每次出錯(cuò),都會(huì)揪心,每次解決小小的問(wèn)題,就會(huì)情不自禁的歡喜,看到錯(cuò)誤欄顯示的錯(cuò)誤不斷變少,就感覺(jué)成功更進(jìn)一步。雖然我的程序沒(méi)有用到很復(fù)雜的東西,但是,我覺(jué)得,我編的程序還算層次分明,每個(gè)模塊分工詳細(xì),各盡所能。而且,我還了解到獨(dú)立思考的重要性。平時(shí),上機(jī)課,我們都是習(xí)慣性的將書上的程序照原樣打一遍,這樣,并不能鍛煉到我們的能力,而是,成為了一個(gè)單純的打字員。所以,我們應(yīng)該改變這種方式,我們應(yīng)該學(xué)著自己思考問(wèn)題,想想算法,如何實(shí)現(xiàn)各個(gè)模塊的鏈接,如何通過(guò)循環(huán)讀取一系列數(shù)據(jù),然后將它保存
38、,另外存在文件中,然后再讀取。另外,我還掌握了有關(guān)文件的一些知識(shí),例如,定義指向文件的指針,文件的保存,文件的讀取,文件的格式,讀寫文件,只讀文件,只寫文件,指向末尾的文件等等。還掌握了文件中的一些函數(shù)與普通的區(qū)別。fscanf和scanf的區(qū)別,fprintf與printf的區(qū)別,還有標(biāo)準(zhǔn)庫(kù)函數(shù)stdio與stdlib的區(qū)別,庫(kù)函數(shù)中的清屏,退出程序的函數(shù),隨機(jī)函數(shù)等,字符串調(diào)用函數(shù),對(duì)字符串比較,字符串的復(fù)制,以前,不會(huì)那么詳細(xì)的去了解這些知識(shí),但是,自從編了這個(gè)程序之后,就要不斷翻書,加深對(duì)這些邊邊角角的知識(shí)的理解,而不僅限于開始的了解。經(jīng)過(guò)看書之后,對(duì)那些函數(shù)有了更深的理解。還有,我明
39、白在任何事情中都要細(xì)心。無(wú)論是在程序設(shè)計(jì)方面還是其他方面。每一個(gè)細(xì)微的錯(cuò)誤,就可能導(dǎo)致程序無(wú)法運(yùn)行,即使是一個(gè)小小的標(biāo)點(diǎn)符號(hào)也不可忽視。同時(shí),我掌握了檢查錯(cuò)誤的一個(gè)小竅門。就是將錯(cuò)誤細(xì)化,可能一個(gè)程序中包含很多個(gè)函數(shù),我每次出現(xiàn)問(wèn)題時(shí),都將每個(gè)函數(shù)單獨(dú)提出來(lái),那樣就可以將錯(cuò)誤細(xì)化到很小的部分,畢竟程序那么多,那么復(fù)雜,從頭到尾都看過(guò)來(lái),那是很困難的。但是將他們分開,就可以避免這個(gè)問(wèn)題。還有,比如說(shuō)像輸出結(jié)果多一行的問(wèn)題,本來(lái)是毫無(wú)頭緒,而后來(lái),將問(wèn)題細(xì)化,發(fā)現(xiàn)了問(wèn)題的共性,發(fā)現(xiàn)都是指向文件尾部的指針那里,對(duì)于指向尾部這個(gè)條件,每次出現(xiàn)這個(gè)條件時(shí),系統(tǒng)瀏覽出來(lái)的數(shù)據(jù),或者查詢的數(shù)據(jù),最后一行都是
40、會(huì)重復(fù)輸出一遍,這時(shí),我在保存文件的后面加了一個(gè)printf函數(shù),這樣,就可以知道,到底在文件保存之后,有沒(méi)有出問(wèn)題。如果在文件保存之后出現(xiàn)問(wèn)題,那就是下面讀取時(shí)有錯(cuò)誤,但是,如果是沒(méi)有問(wèn)題,那就是保存文件的問(wèn)題。最后,發(fā)現(xiàn)都沒(méi)有問(wèn)題,而且打開文件后,發(fā)現(xiàn),保存的文件都沒(méi)有問(wèn)題。才發(fā)現(xiàn)原來(lái)是輸出循環(huán)出現(xiàn)問(wèn)題,并且問(wèn)題都是共性的。都是使用while(!feof(fp)這個(gè)條件時(shí),沒(méi)有注意到這個(gè)指向文件末尾的函數(shù),在指向文件末尾后,會(huì)再輸出一次,然后,我找到了解決的方法,定義一個(gè)count 表示課程門數(shù),用i<count這個(gè)條件之后,就可以控制,讓文件能在末尾前一個(gè)結(jié)束。最后,我發(fā)現(xiàn),C語(yǔ)言
41、真的是很復(fù)雜的,但是,如果我們用心去學(xué),也能學(xué)的很好,世界上沒(méi)有做不了的事,只要看我們有沒(méi)有付出努力,我們努力過(guò)了,即使不成功,那也沒(méi)有遺憾,以后,一定要好好看書,爭(zhēng)取攻克C語(yǔ)言8、 附錄 * 歡迎使用本軟件 * *#include<stdio.h>#include<string.h>#include<stdlib.h>struct courseint num;char name20;char kind20;int ttime,mark,term;c;struct student int snum;int cnum;char cnam20;char snam
42、20;s500;int count;/全局變量int main()/主函數(shù)int n;int menu();int f1();int luru();int liulan();int chaxun();int xuanke();int tongji();printf("n * *");printf("nn * 歡迎進(jìn)入學(xué)生選課系統(tǒng)! *");menu();printf("n");printf(" * the end *n");printf("n * *");printf("nn 請(qǐng) 先
43、選 擇 1 進(jìn) 行 課 程 信 息 錄 入:");scanf("%d",&n);/防止錯(cuò)誤,請(qǐng)重新輸入for(;n>5|n<0;)printf("n 輸 入 錯(cuò) 誤 !請(qǐng) 重 新 輸 入 !n ");scanf("%d",&n);while(n>0&&n<6)switch(n)case 1:luru();break;/錄入課程信息case 2:liulan();break;/瀏覽課程信息case 3:chaxun();break;/查詢課程信息case 4:xuanke
44、();break;/進(jìn)入選課操作case 5:tongji();break;/統(tǒng)計(jì)選課情況scanf("%d",&n);/選擇所需操作for(;n>5|n<0;)printf("nn");printf("n 輸 入 錯(cuò) 誤 ! 請(qǐng) 重 新 輸 入 !n ");scanf("%d",&n);/防止錯(cuò)誤,提示重新輸入system("cls");/清屏 if(n=0)printf(" nnnnnnn");printf(" * 謝謝使用! *n
45、"); printf("nnnnn");exit(0);/退出選課系統(tǒng)return 0; int menu()/菜單函數(shù)int n;printf("nnnn");printf(" 1. 錄 入 課 程 信 息nn"); printf(" 2. 瀏 覽 課 程 信 息nn"); printf(" 3. 查 詢 課 程 信 息nn"); printf(" 4. 進(jìn) 入 選 課 操 作nn");printf(" 5. 統(tǒng) 計(jì) 選 課 情 況nn");p
46、rintf(" 0. 退 出 選 課 系 統(tǒng)nn"); return 0;int f1()printf("n 課程編號(hào) 課程名稱 課程性質(zhì) 總學(xué)時(shí) 學(xué)分 開課學(xué)期:n");return 0;int luru()/錄入函數(shù)FILE *fp;/定義指向文件的指針struct course c;int i;if(fp=fopen("D:/course.txt","w")=NULL)/建立文件"course.txt"printf("cannot open filen");exit(0
47、);printf("n 請(qǐng) 輸 入 選 擇 的 課 程 門 數(shù):");scanf("%d",&count);printf("nn");f1();for(i=0;i<count;i+)scanf("%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);fprintf(fp,"%dt%st%st%dt%dt%dt",c.num,,c.kind,c.ttime,c.mark,c
48、.term);fclose(fp);/關(guān)閉文件printf("n * 錄入成功!*n");menu();return 0;int liulan()/瀏覽函數(shù)int i=0;FILE *fp;/定義指向文件的指針struct course c;/定義課程結(jié)構(gòu)體變量if(fp=fopen("D:/course.txt","r")=NULL)/打開文件"course.txt"printf("ncannot open course!n");exit(0);f1();while(!feof(fp)&
49、;&i<count)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);printf("%7d%11s%10s%9d%9d%8dn",c.num,,c.kind,c.ttime,c.mark,c.term);i+;fclose(fp);/關(guān)閉文件menu();return 0;int chaxun()/查詢函數(shù)FILE *fp;/定義指向文件的指針struct course c;/定義課程結(jié)構(gòu)體變量int score;int b,i=0;char kind20;printf("n 1.按 學(xué) 分 查 詢n");printf
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 甘肅省蘭州市第一中學(xué)2026屆化學(xué)高二第一學(xué)期期末達(dá)標(biāo)測(cè)試試題含答案
- 2025年房地產(chǎn)調(diào)控政策對(duì)房?jī)r(jià)與經(jīng)濟(jì)增長(zhǎng)關(guān)系的影響報(bào)告
- 2025新能源汽車二手車市場(chǎng)評(píng)估與流通渠道競(jìng)爭(zhēng)力分析報(bào)告
- 醫(yī)療美容消費(fèi)者心理與服務(wù)質(zhì)量2025年行業(yè)趨勢(shì)分析報(bào)告
- 2025年高中《秋季軍訓(xùn)》工作實(shí)施方案 合計(jì)6份
- 2026年高考?xì)v史一輪復(fù)習(xí):選擇性必修3《文化交流與傳播》知識(shí)點(diǎn)考點(diǎn)背誦提綱
- 高考數(shù)學(xué)一輪復(fù)習(xí) 9.6 離散型隨機(jī)變量的均值與方差課件 理-人教版高三全冊(cè)數(shù)學(xué)課件
- 2026年高考語(yǔ)文備考分類匯編:語(yǔ)言文字運(yùn)用(簡(jiǎn)答題組)(三)含答案解析
- 2025年山西省公務(wù)員考試模擬試題(含答案)
- 2026年中考語(yǔ)文專項(xiàng)復(fù)習(xí):現(xiàn)代文閱讀 標(biāo)題的含義與作用講義(含練習(xí)題及答案)
- 基孔肯雅熱培訓(xùn)測(cè)試題含答案
- 寫字樓管理辦法
- (標(biāo)準(zhǔn))摩托車轉(zhuǎn)讓合同協(xié)議書
- (標(biāo)準(zhǔn))無(wú)證雜物間轉(zhuǎn)讓合同協(xié)議書
- 養(yǎng)老護(hù)理員禮儀修養(yǎng)
- 用餐招待管理辦法
- 慢宋品牌全案框架
- 無(wú)人機(jī)管理使用暫行辦法
- 《新時(shí)代國(guó)有企業(yè)黨的建設(shè)工作要求》考試題(含答案)
- 2025年廣東省中考英語(yǔ)試題卷(含答案解析)
- 腎病綜合征患者飲食與液體平衡管理:核心原則、臨床策略與患者教育
評(píng)論
0/150
提交評(píng)論