程序設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)_第1頁
程序設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)_第2頁
程序設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)_第3頁
程序設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)_第4頁
程序設(shè)計學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、通達學(xué)院程序設(shè)計(2017/2018學(xué)年 第1學(xué)期)題 目:學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn) 專 業(yè) 計算機科學(xué)于技術(shù)(嵌入式) 學(xué) 生 姓 名 班 級 學(xué) 號 指 導(dǎo) 教 師 徐小龍 指 導(dǎo) 單 位 計算機學(xué)院·計算機科學(xué)與技術(shù)系日 期 2017年10月27日 南京郵電大學(xué)通達學(xué)院程序設(shè)計指導(dǎo)教師成績評定表題目學(xué)生姓名班級學(xué)號專業(yè)評分內(nèi)容評分標(biāo)準(zhǔn)優(yōu)秀良好中等差平時成績認(rèn)真對待課程設(shè)計,遵守實驗室規(guī)定,上機不遲到早退,不做和設(shè)計無關(guān)的事。設(shè)計成果設(shè)計的科學(xué)、合理性功能豐富、符合設(shè)題目要求 界面友好、外觀漂亮、大方設(shè)計的原創(chuàng)性設(shè)計報告設(shè)計報告正確合理、反映系統(tǒng)設(shè)計流程文檔內(nèi)容詳實程度文檔格式

2、規(guī)范、排版美觀答辯簡練、準(zhǔn)確闡述設(shè)計內(nèi)容,能準(zhǔn)確有條理回答各種問題,系統(tǒng)演示順利。評分等級指導(dǎo)教師簽名日期2017-10-27備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格一、 課題內(nèi)容和要求學(xué)生選修課程系統(tǒng)設(shè)計與實現(xiàn)假定有n門課程,每門課程有課程編號,課程名稱,課程性質(zhì),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計一選修課程系統(tǒng),使之能提供以下功能:(1) 系統(tǒng)以菜單方式工作(2) 課程信息錄入功能(課程信息用文件保存)輸入(3) 課程信息瀏覽功能輸出(4) 查詢功能:按學(xué)分查詢、按課程性質(zhì)查詢(5) 學(xué)生可以選修課程2、

3、需求分析開 始本系統(tǒng)的功能模塊如圖所示 主 函 數(shù)進入選課操作統(tǒng)計選課情況瀏覽課程信息錄入課程信 息查詢課程信息從選課文件中統(tǒng)計信 息輸入學(xué)號姓名進行選 開課課瀏覽文件中的課程信 息將課程信息輸入文件 中按 照課 程性 質(zhì)查 詢課 程按照學(xué)分查詢課程信 息1. 使系統(tǒng)以菜單方式工作:輸出個菜單,用于顯示以從文件中加載的課程信息和若干個可選的功能選項。根據(jù)客戶輸入的選項來運行不同的功能,運行不同的函數(shù)。2. 錄入課程信息:使用戶可以將課程信息輸入文件3. 瀏覽課程信息:使用戶可以按照學(xué)分或者課程性質(zhì)瀏覽文件中的課程信息4. 進入選課操作:輸入學(xué)號,姓名進行選課5. 統(tǒng)計選課情況:從選課文件中統(tǒng)計

4、信息3、 概要設(shè)計(1)主函數(shù)的設(shè)計 在主函數(shù)中按照提示輸入相對應(yīng)數(shù)字進入相應(yīng)的操作,同時,在輸入序號數(shù)字錯誤時,會自動提示“輸入錯誤,請重新輸入”,然后,重新輸入一個數(shù)字,繼續(xù)進行相應(yīng)的操作。(注:輸入的數(shù)字要在05之內(nèi))算法設(shè)計如下:S1: 從鍵盤上輸入一個05的數(shù)字,進入相應(yīng)的操作S2: 如果選擇序號1,則進入課程信息錄入操作S3: 如果選擇序號2,則進入瀏覽課程信息操作S4: 如果選擇序號3,則進入查詢課程信息操作S5: 如果選擇序號4,則進入學(xué)生選擇課程操作S6: 如果選擇序號5,則進入統(tǒng)計選課情況操作S7: 如果選擇序號0,則退出學(xué)生選課管理系統(tǒng)S8: 如果選擇除05的其他操作,則

5、提示“輸入錯誤,請重新輸入”然后返回S1具體流程圖如下:開 始 主 函 數(shù)輸入05相 應(yīng)的操作對應(yīng)的數(shù)字進行相應(yīng)的操作是 否 繼 續(xù) 是 否結(jié) 束(2) 錄入函數(shù)的設(shè)計對于錄入函數(shù),就是在D盤建立一個“course.txt”文件,然后通過scanf從鍵盤上輸入課程信息,再通過fprintf將輸入的信息保存在文件中,關(guān)閉文件。算法設(shè)計如下:S1: 在D盤建立“course.txt”文件S2: 提示讓學(xué)生輸入選課門數(shù)S3: 從鍵盤上輸入課程信息并保存S4: 當(dāng)指針指向文件尾部,返回S3 具體流程圖如下: 開 始創(chuàng)建文件 輸入課程門數(shù)結(jié) 束輸入課程信息保存課程信息是否指向尾 部 是結(jié) 束(3) 瀏覽

6、函數(shù)的設(shè)計對于瀏覽函數(shù),通過fscanf讀取文件中的課程信息,然后再通過printf將信息輸出算法設(shè)計如下:S1: 打開“course.txt”文件S2: 讀取文件中的信息S3: 輸出信息S4: 當(dāng)指針未指向文件尾部,返回S2具體流程圖如下:開 始打開文件輸出課程信息讀取課程信息 否是否指向尾 部是結(jié) 束(4) 查詢函數(shù)的設(shè)計對于查詢函數(shù),輸入1或2選擇查詢方式,如果不是,則重新輸入。對于不同方式的查詢,如果輸入的方式與文件中有相符的,則輸出查詢結(jié)果算法設(shè)計如下:S1: 選擇查詢方式S2: 如果方式是學(xué)分查詢,輸入想查詢的學(xué)分,打開文件,未指向文件尾部,如果文件中存在,則輸出查詢結(jié)果S3: 如

7、果方式是課程性質(zhì)查詢,輸入想查詢的課程性質(zhì),打開文件,未指向文件尾部,讀取文件信息,如果文件中存在,則輸出查詢結(jié)果S4: 如果方式數(shù)字不存在,則退出查詢具體流程圖如下:開 始選擇查詢方式數(shù)字不正確按課程性質(zhì)按學(xué)分查詢打開文件讀取打開文件讀取只 顯示 課程 編號、課程 名稱 信息,不顯 示結(jié) 果是否存在信息是否存在信息是是 否 否是否指向尾 部是否指向尾 部是是是是退出課程查詢系統(tǒng)輸出課程信息輸出課程信息結(jié) 束結(jié) 束(5) 選課函數(shù)的設(shè)計對于選課函數(shù),先從鍵盤上輸入學(xué)號,姓名,課程編號,課程名稱,打開“course.txt”文件,如果,課程存在,則進入下一步,建立“student.txt”文件,

8、將選課信息保存在文件中,退出。算法設(shè)計如下:S1: 輸入選課信息,包括學(xué)號,姓名,課程編號,課程名稱S2: 打開文件“course.txt”S3: 如果課程存在,則進行下一步S4: 建立“student.txt”文件S5: 保存選課信息 具體流程圖如下開 始:輸入選課信息打開課程文件是否存在課程建立選課文件讀取選課信息保存讀取選課信息保存 否是否指向尾 部結(jié) 束(6) 統(tǒng)計函數(shù)的設(shè)計對于統(tǒng)計函數(shù),打開“student.txt”文件,讀取文件中的選課信息,輸出文件中的選課信息,計數(shù),關(guān)閉文件算法設(shè)計如下:S1: 打開“student.txt”文件S2: 當(dāng)未指向文件尾部,讀取文件中的選課信息S3

9、: 輸出選課信息同時計數(shù)S4: 輸出人數(shù)S5: 結(jié)束具體流程圖如下:開 始打開選課文件讀取選課信息輸出選課信息計數(shù)否是否指向尾 部結(jié) 束四、詳細(xì)設(shè)計1.主函數(shù):構(gòu)造void main(),實現(xiàn)調(diào)用各個功能模塊:學(xué)生選課系統(tǒng)執(zhí)行主流程如圖所示,先執(zhí)行主函數(shù)中顯示菜單函數(shù),通過循環(huán)和按鍵操作來執(zhí)行相應(yīng)的操作。按鍵的有效鍵值為05之間的任意數(shù)值,其他按鍵為無效輸入,會提示“輸入錯誤,請重新輸入”,同時,再次用scanf創(chuàng)造再次輸入的機會。各個按鍵的執(zhí)行功能為: “1”:錄入選修課課程信,調(diào)用函數(shù)luru(); “2”:瀏覽錄入的課程信息,調(diào)用函數(shù)liulan(); “3”:查詢課程信息,調(diào)用函數(shù)ch

10、axun(); “4”:進入選課操作,調(diào)用函數(shù)chaxun(); “5”:統(tǒng)計選課信息,調(diào)用函數(shù)tongji(); “0”:退出系統(tǒng);int main()int n;int menu();int f1();int luru();int liulan();int chaxun();int xuanke();int tongji();printf("n * *");printf("nn * 歡迎進入學(xué)生選課系統(tǒng)! *");menu();printf("n");printf(" * the end *n");printf

11、("n * *");printf("nn 請 先 選 擇 1 進 行 課 程 信 息 錄 入:");scanf("%d",&n);for(;n>5|n<0;)printf("n 輸 入 錯 誤 !請 重 新 輸 入 !n ");scanf("%d",&n);while(n>0&&n<6)switch(n)case 1:luru();break;case 2:liulan();break;case 3:chaxun();break;case

12、4:xuanke();break;case 5:tongji();break;scanf("%d",&n);for(;n>5|n<0;)printf("nn");printf("n 輸 入 錯 誤 ! 請 重 新 輸 入 !n ");scanf("%d",&n);system("cls"); if(n=0)printf(" nnnnnnn");printf(" * 謝謝使用! *n "); printf("nnnnn&

13、quot;);exit(0);return 0; 2. 定義menu函數(shù),f1函數(shù)方便調(diào)用函數(shù)函數(shù)功能及實現(xiàn):此函數(shù)為輸出菜單,進入系統(tǒng)后提示可根據(jù)供選擇的項目進行后續(xù)操作。int menu()int n;printf("nnnn");printf(" 1. 錄 入 課 程 信 息nn"); printf(" 2. 瀏 覽 課 程 信 息nn"); printf(" 3. 查 詢 課 程 信 息nn"); printf(" 4. 進 入 選 課 操 作nn");printf(" 5.

14、統(tǒng) 計 選 課 情 況nn");printf(" 0. 退 出 選 課 系 統(tǒng)nn"); return 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ù)功能及實現(xiàn):此函數(shù)錄入課程信息,在查詢、瀏覽、進入選課,查看選課信息等函數(shù)之前。定義指向文件的指針變量*fp,課程信息結(jié)構(gòu)體c通過fopen函

15、數(shù)建立文件”course.txt”,后輸入錄入課程的門數(shù),打印表頭,通過for循環(huán),用scanf函數(shù)從屏幕讀取課程信息,并通過fprintf函數(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 請 輸 入 選 擇 的 課 程 門 數(shù):

16、");scanf("%d",&count);printf("nnn");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.term);fclose(fp);printf("n 錄 入

17、 成 功!nn");menu();return 0;5. 定義瀏覽函數(shù),瀏覽錄入的課程信息函數(shù)功能及實現(xiàn):此函數(shù)先定義指向文件的指針*fp,課程結(jié)構(gòu)體變量c,通過if語句判斷文件是否存在,在調(diào)用函數(shù)f1(),輸出表頭信息,通過for循環(huán)并使用fscanf函數(shù)將文件中的課程信息讀出并通過printf打印到屏幕上,再通過fclose函數(shù)關(guān)閉文件。int liulan()/瀏覽函數(shù)int i=0;FILE *fp;struct course c;if(fp=fopen("D:/course.txt","r")=NULL)printf("nc

18、annot 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,&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ù),按照

19、學(xué)分和課程性質(zhì)查詢函數(shù)功能及實現(xiàn):先定義學(xué)生結(jié)構(gòu)體變量s,打印相關(guān)可供選擇的選項,通過scanf函數(shù)讀取輸入字符,打印表頭,再使用if語句進行相關(guān)選擇。如果數(shù)“1”,則是按學(xué)分查詢課程,符合第一個if語句,輸入想要查詢的學(xué)分,程序通過for循環(huán)從文件中讀取課程信息,并通過printf函數(shù)輸出滿足要求的課程信息;如選擇“2”,符合第二個if語句,則按照課程性質(zhì)查詢,輸入課程性質(zhì),程序通過for循環(huán)從文件中讀取課程信息,并通過printf函數(shù)輸出滿足要求的課程信息;如輸入“3”,符合第二個if語句,則按照課程名稱查詢,輸入要課程名稱,程序通過for循環(huán)從文件中讀取課程信息,并通過printf函數(shù)輸

20、出滿足要求的課程信息;查詢完成后通過fclose 函數(shù)關(guān)閉文件,打印主菜單,返回主函數(shù)。int chaxun()FILE *fp;struct course c;int score;int b,i=0;char kind20;printf("n 1.按 學(xué) 分 查 詢n");printf("n 2.按 課 程 性 質(zhì) 查 詢");printf(" 請 選 擇 查 詢 方 式 nn 輸 入 選 項 數(shù) 字:");scanf("%d",&b);for(;b<1|b>2;)printf("n

21、 輸 入 錯 誤 !請 重 新 輸 入 !n ");scanf("%d",&b);if(b=1)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

22、,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&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:/co

23、urse.txt","r")=NULL)/打開文件"course.txt"printf("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%8

24、dn",c.num,,c.kind,c.ttime,c.mark,c.term);i+;elseprintf("輸入錯誤!");exit(1);fclose(fp);menu();return 0;7. 定義選課函數(shù),進入選課操作函數(shù)功能及實現(xiàn):進入此函數(shù)可進行自由選課,首先定義了學(xué)生結(jié)構(gòu)體變量s,和課程結(jié)構(gòu)體變量c。選課學(xué)生輸入自己的學(xué)號和要選的課程,通過for循環(huán)打開文件并找到所要選擇的課程,通過break跳出循環(huán),關(guān)閉課程文件“course.txt”并將學(xué)生選課信息存入文件“student.txt”中。打印菜單信息,返回主函數(shù)。int xuank

25、e()int t=0,flag;int i;/*struct course c;FILE *fp;doprintf("n 請 輸 入 學(xué) 號 姓 名 課 程 編 號 及 課 程 名 稱 :"); 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&qu

26、ot;);exit(0);while(!feof(fp)fscanf(fp,"%d%s%s%d%d%d",&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&quo

27、t;,"a+")=NULL)printf("ncannot open student!n");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)計函數(shù),統(tǒng)計學(xué)生選課信息函數(shù)功能及實現(xiàn):此函數(shù)為查看選修課被選擇的情況。定義了變量total為了統(tǒng)計選課人數(shù),通過

28、if語句判斷是否存在文件“student.txt”,通過for循環(huán)打印出所有已選課學(xué)生的學(xué)號、選課課程編號和所選課程的名稱,通過計數(shù)變量total輸出已選課的人數(shù)信息。然后打印菜單,返回主函數(shù)。int tongji()/統(tǒng)計函數(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é)號 姓名 課程編號及課程名稱n");while(

29、!feof(fp)fscanf(fp,"%d%s%d%sn",&si.snum,si.snam,&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;源程序代碼:#include<stdio.h>#include<string.h

30、>#include<stdlib.h>struct courseint num;char name20;char kind20;int ttime,mark,term;c;struct student int snum;int cnum;char cnam20;char snam20;s500;int count;/全局變量int main()/主函數(shù)int n;int menu();int f1();int luru();int liulan();int chaxun();int xuanke();int tongji();printf("n * *")

31、;printf("nn * 歡迎進入學(xué)生選課系統(tǒng)! *");menu();printf("n");printf(" * the end *n");printf("n * *");printf("nn 請 先 選 擇 1 進 行 課 程 信 息 錄 入:");scanf("%d",&n);/防止錯誤,請重新輸入for(;n>5|n<0;)printf("n 輸 入 錯 誤 !請 重 新 輸 入 !n ");scanf("%d&q

32、uot;,&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;/統(tǒng)計選課情況scanf("%d",&n);/選擇所需操作for(;n>5|n<0;)printf("nn");printf("n 輸 入 錯 誤 ! 請

33、重 新 輸 入 !n ");scanf("%d",&n);/防止錯誤,提示重新輸入system("cls");/清屏 if(n=0)printf(" nnnnnnn");printf(" * 謝謝使用! *n "); printf("nnnnn");exit(0);/退出選課系統(tǒng)return 0; int menu()/菜單函數(shù)int n;printf("nnnn");printf(" 1. 錄 入 課 程 信 息nn"); printf

34、(" 2. 瀏 覽 課 程 信 息nn"); printf(" 3. 查 詢 課 程 信 息nn"); printf(" 4. 進 入 選 課 操 作nn");printf(" 5. 統(tǒng) 計 選 課 情 況nn");printf(" 0. 退 出 選 課 系 統(tǒng)nn"); return 0;int f1()printf("n 課程編號 課程名稱 課程性質(zhì) 總學(xué)時 學(xué)分 開課學(xué)期:n");return 0;int luru()/錄入函數(shù)FILE *fp;/定義指向文件的指針st

35、ruct course c;int i;if(fp=fopen("D:/course.txt","w")=NULL)/建立文件"course.txt"printf("cannot open filen");exit(0);printf("n 請 輸 入 選 擇 的 課 程 門 數(shù):");scanf("%d",&count);printf("nn");f1();for(i=0;i<count;i+)scanf("%d%s%s%d%d%

36、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);/關(guān)閉文件printf("n * 錄入成功!*n");menu();return 0;int liulan()/瀏覽函數(shù)int i=0;FILE *fp;/定義指向文件的指針struct course c;/定義課程結(jié)構(gòu)體變量if(fp=fope

37、n("D:/course.txt","r")=NULL)/打開文件"course.txt"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,&c.mark,&c.term);printf("%7d%11s%10s%9d%9d%8dn&q

38、uot;,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("n 2.按 課 程 性 質(zhì) 查 詢");printf(" 請 選 擇 查 詢 方 式 nn 輸 入 選 項 數(shù) 字:")

39、;scanf("%d",&b);/防止錯誤,提示重新輸入for(;b<1|b>2;)printf("n 輸 入 錯 誤 !請 重 新 輸 入 !n ");scanf("%d",&b);/按學(xué)分查詢if(b=1)printf("n 輸 入 你 要 查 詢 的 學(xué) 分: ");scanf("%d",&score);if(fp=fopen("D:/course.txt","r")=NULL)printf("ncann

40、ot open course!n");exit(0);f1();while(!feof(fp)&&i<count)/當(dāng)沒有指向文件尾部,讀取文件“course.txt”中的數(shù)據(jù)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);if(c.mark=score)/比較輸入的分?jǐn)?shù)和結(jié)構(gòu)體中的分?jǐn)?shù),如果相同,輸出那組數(shù)據(jù)printf("%7d%11s%10s%9d%9d%8dn",c.num,,

41、c.kind,c.ttime,c.mark,c.term);i+;else if(b=2)/按課程性質(zhì)查詢printf("nn 輸 入 你 要 查 詢 的 課 程 性 質(zhì):");scanf("%s",kind);if(fp=fopen("D:/course.txt","r")=NULL)/打開文件"course.txt"printf("ncannot open course!n");f1();while(!feof(fp)&&i<count)/當(dāng)沒有到達

42、文件尾部,讀取“course.txt”中的數(shù)據(jù)fscanf(fp,"%d%s%s%d%d%d",&c.num,,c.kind,&c.ttime,&c.mark,&c.term);if(strcmp(c.kind,kind)=0)/比較輸入的字符串與原文件中的課程性質(zhì),如果相同,輸出那組數(shù)據(jù)printf("%7d%11s%10s%9d%9d%8dn",c.num,,c.kind,c.ttime,c.mark,c.term); i+;elseprintf("輸入錯誤!");/選擇錯誤

43、,就退出exit(1);fclose(fp);menu();return 0;int xuanke()/選課函數(shù)int t=0,flag;int i;FILE *fp;/定義指向文件的指針doprintf("n 請 輸 入 學(xué) 號 姓 名 課 程 編 號 及 課 程 名 稱 :"); scanf("%d%s%d%s",&st.snum,st.snam,&um,am);if(fp=fopen("D:/course.txt","r")=NULL)/打開文件"course.t

44、xt"printf("ncannot open course!n");exit(0);while(!feof(fp)/如果課程編號和課程名稱與學(xué)生所選一致,就跳出,執(zhí)行下一步fscanf(fp,"%d%s%s%d%d%d",&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 &q

45、uot;);scanf("%d",&flag);if(fp=fopen("D:/student.txt","a+")=NULL)/建立文件“student.txt”printf("ncannot open student!n");exit(0); /建立,并將學(xué)生選課信息輸入"student.txt"for(i=0;i<t;i+);fprintf(fp,"%dt%st%dt%stn",st.snum,st.snam,um,am); fclos

46、e(fp);/關(guān)閉選課文件"course.txt"while(flag);printf("n * 恭喜選課成功!*n");menu();return 0;int tongji()/統(tǒng)計函數(shù)int total=0;int t,i=0;FILE *fp;if(fp=fopen("D:/student.txt","r")=NULL)/打開文件“student.txt”printf("ncannot open student!n");exit(0);printf("n 學(xué)號 姓名 課程編號及課

47、程名稱n");while(!feof(fp)/計數(shù)fscanf(fp,"%d%s%d%sn",&si.snum,si.snam,&um,am);/讀取文件“student.txt”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);/關(guān)閉文件menu();return 0;5、 測試

48、數(shù)據(jù)及其結(jié)果分析(1)、主菜單界面(2)、錄入課程信息:(3)、瀏覽課程信息:(4)、查詢課程信息a.按照學(xué)分查詢: b.按照課程性質(zhì)查詢: (5)、進入選課操作:(可以多次選擇) (6)、統(tǒng)計選課信息 (7)退出選課系統(tǒng)(按0退出操作系統(tǒng))6、 調(diào)試過程中的問題(1) 調(diào)試步驟 先進入菜單函數(shù),選擇數(shù)字進行相應(yīng)的操作,然后,先進入錄入函數(shù)階段,通過鍵盤輸入相應(yīng)的課程信息,同時,創(chuàng)建一個“course.txt”文件,將輸入的課程信息保存在文件中。然后,進入瀏覽函數(shù)階段,先讀取課程文件中的課程信息,然后將信息顯示到屏幕上。接著,進入查詢函數(shù)階段,通過學(xué)分或者課程性質(zhì),查詢相應(yīng)的課程信息。隨后,進

49、入選課函數(shù)階段,通過輸入學(xué)號和姓名,進行選課操作,并創(chuàng)建一個“student.txt”文件,將選課信息保存其中。最后,進入統(tǒng)計函數(shù)階段,讀取選課文件中的信息,統(tǒng)計選課人數(shù),并將選課信息顯示在屏幕上。選擇序號0退出選課系統(tǒng)。(2)發(fā)現(xiàn)的問題 1. 在用scanf函數(shù)給普通變量輸入數(shù)據(jù)時,在變量名前漏寫地址運算符&。如:scanf(“%d”,count);同時,不能少掉上引號和分號。 2. 輸入數(shù)據(jù)時的數(shù)據(jù)形式與要求不符。用scanf函數(shù)輸入數(shù)據(jù)時,必須注意要與scanf語句中的對應(yīng)形式匹配。 如:scanf(“%d,%d”,&x,&y);輸入數(shù)據(jù)時,不能輸2 3,而是應(yīng)該

50、用2,3 3.可以用scanf輸入一個字符串,如果要用它輸入多個字符串,輸入時,中間要用空格分開。 如:scanf(“%s%s%s”,str1,str2,str3);輸入數(shù)據(jù) how are you4. 混淆“=”和“=” 在C語言中,“=”是賦值運算符,“=”是關(guān)系運算符。 如:if(i=1)不能寫成if(i=1) 5. 在不該出現(xiàn)分號的地方加了分號 如:if(x>y);在if后面是不用加分號的 6. 不能超過數(shù)組的最大值使用,在引用數(shù)組元素時,下標(biāo)從0開始,即下標(biāo)的下限是0,而下標(biāo)的上限值是數(shù)組定義時元素個數(shù)減1。 7. 在switch語句的各分支中未使用break語句。 如:switch(n) case 1:luru();break;/錄入課程信息 case 2:liulan();break;/瀏覽課程信息 case 3:chaxun();break;/查詢課程信息 case 4:xuanke();break;/進入選課操作 case 5:tongji();break;/統(tǒng)計選課情況 8. 統(tǒng)計時出現(xiàn)中文(2) 解決問題1.對于語法中的錯誤,可以通過系統(tǒng)自動查出。2.像邏輯錯誤,即算法中的問題,要通過不斷檢驗算法,觀察它邏輯中的錯誤。同時對于運行中出現(xiàn)中文的問題,是因為對

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔