C語言課程設計報告—學生選修課程系統(tǒng)設計_第1頁
C語言課程設計報告—學生選修課程系統(tǒng)設計_第2頁
C語言課程設計報告—學生選修課程系統(tǒng)設計_第3頁
C語言課程設計報告—學生選修課程系統(tǒng)設計_第4頁
C語言課程設計報告—學生選修課程系統(tǒng)設計_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國地質(zhì)大學本科生課程論文封面課程名 稱 C 語言課程設計教師姓名本科生姓名本科生學號本科生專業(yè)所在院系類別:c.本科生日期:2012年09月05日ii課程設計評語對課程論文的評語平時成績:課程論文成績:總成績:評閱人簽名:注:1無評閱人簽名成績無效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;3、如有平時成績,必須在上面評分表中標出,并計算入總成績。目錄課程設計評語 2目 錄 31課程論文題目 42程序設計思路 53功能模塊圖 54數(shù)據(jù)結構設計 65算法設計 66程序代碼 127程序運行結果 228編程中遇到的困難及解決方法 239總結心得及良好建議 2410 致謝 24181課程論文題目名

2、稱:學生選修課系統(tǒng)設計【要求】假定有 n 門課程,每門課程有課程編號,課程名稱,課程性質(zhì), 總學時,授課時間,實驗或上級時間,學分,開課學期等信息,學生 可按要求(如總學分不超過 60)自由選課。 是設計一選修課課程系統(tǒng), 使只能提供以下功能:(1)系統(tǒng)一菜單方式工作(2)課程信息和學生選課信息錄入功能(課程信息用文件保存 輸入(3)課程信息瀏覽功能輸出(4)查詢功能(至少一種查詢方式)算法(5)按學分查詢(6)某門課程學生選修情況(可選項)【提示】數(shù)據(jù)結構可用結構體,包括授課和選課兩個結構體,其中課程 結構體成員包括編號,課程名稱,課程性質(zhì),總學時,授課學時,實 驗或上機時間,學分,開課學期

3、。學秀結構體成員包括學號,課程編 號,該結構體的建立主要是為了查詢某門課程學生選修情況。2程序設計思路由于題目要求將學生的選課信息用結構體形式輸入,并寫入 文件中,所以應提供文件的輸入輸出等操作:在過程中需有 瀏覽、插入、修改、查找、刪除學生選課信息等操作,顧應 分別建立個功能模塊;另外還應提供鍵盤式選擇菜單實現(xiàn)程 序運行。根據(jù)題目要求,可以將系統(tǒng)分為六個模塊:1) 系統(tǒng) 以菜 單方 式 工 作模塊 ;2) 課程 信息 與學 生 選 課信息 錄 入功 能 模塊 ;3) 課程 信息 瀏覽 功 能 模塊;4) 查詢 模塊 ;5) 按學 分查 詢模 塊 ;6) 某些課程學生選修情況模塊3功能模塊圖學

4、生選修課程系統(tǒng)些程生修況塊 某課學選情模4 數(shù)據(jù)結構設計該程序采用多個main ()函數(shù)模塊分別來實現(xiàn)程序的運行,通過使用 數(shù)組功能來實現(xiàn)數(shù)據(jù)的錄入,使用strcpy ()函數(shù)來實現(xiàn)錄入信息的復制,整個結構從整體來看使用了選擇結構,break .case .的合理利用5 算法設計1.課程信息錄入功能void savefile(SUB *head)SUB *p;FILE *fp;fp=fope n( subjects.txt,w);fprin tf(fp, 課程編號 課程名稱 課程性質(zhì) 機學時 學分 開課學期n);for(p=head;p;p=p-n ext)fprin tf(fp,%5d%12

5、s%9s%9d%9d%11d%11d%7d stime,p-ttime,p-etime,p-score,p-term);fclose(fp);總學時 授課學時 實驗或上n “,p_ n um,p_ n ame,p-ki nd,p-void savefileadd(SUB *head)SUB *p;FILE *fp;fp=fope n( subjectsadd.txt,w);fprin tf(fp,課程編號 課程名稱上機學時 學分 開課學期n);for(p=head;p;p=p-n ext)課程性質(zhì) 總學時 授課學時 實驗或fprin tf(fp,%5d%12s%9s%9d%9d%11d%11d

6、%7dn ”,p- num,p- name,p-ki nd,p-stime,p-ttime,p-etime,p-score,p-term);fclose(fp);2查詢功能void search(SUB *head)開始n ext)if(strcmp(type,ptr-ki nd)=0)prin tf(%5d%12s%9s%9d%9d%11d%11d%7dn ”,ptr- num,ptr- name,ptr-ki nd,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf( 未找到!n”);t=1;break;ca

7、se 2:printf(”輸入要查找的課程的學分n);scan f(%d,&n um);printf(課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上 機學時 學分 開課學期n);for(ptr=head;ptr;ptr=ptr- n ext)if(ptr-score=nu m)printf(%5d%12s%9s%9d%9d%11d%11d%7d n,ptr-num,ptr-name,ptr-kind,pt r-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf( 未 找 到 !n);t=1;printf(”繼續(xù)

8、查找請按回車鍵,結束請按空格鍵:n);ch1=getchar();/ 將 回 車 鍵 賦 給 CH1 ,否 則 CASE 里 面 最 后 輸 入 的 回 車 鍵 會 賦 給 CH , 因 此 用 CH1 填 補 。ch=getchar();3.插入、刪除信息功能SUB *insert(SUB *head)SUB *ptr,*ptr2,*subj;int size=sizeof(SUB);char ch=a,ch1;while(ch!= )subj=(SUB *)malloc(size); ptr=subj;printf( 輸 入 要 插 入 的 課 程 信 息 :n);scanf(%d%s%s

9、%d%d%d%d%d,&subj-num,subj-name,subj-kind,&subj-stime,&subj-ttime,&subj-etime,&subj-score,&subj-term);if(head=NULL)head=ptr;head-next=NULL;else-next)for(ptr2=head;ptr2;ptr2=ptr2 if(ptr2-next=NULL) ptr2-next=subj; subj-next=NULL; break;printf(”繼續(xù)插入請按回車,結束請按空格:n);ch1=getchar();/ 將 回 車 鍵 賦 給 CH1 , 否 則su

10、bj-term 輸完后輸入的回車鍵會賦給 CH, 因此用 CH1 填補。ch=getchar();return head;SUB *del(SUB *head)SUB *p1,*p2;char ch=a,ch1;int num;while(ch!= )printf(”輸入想要刪除的課程編號:n);scanf(%d,&num);if(head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num=num)p1-next=p2-next;fre

11、e(p2);else p1=p2;p2=p1-next;printf( 繼 續(xù) 刪 除 請 按 回 車 , 結 束 請 按 空 格 :n);ch仁getchar();II將回車鍵賦給 CH1 ,否則num輸完后再輸入的回車鍵會賦給CH ,因此用CH1填補。ch=getchar();retur n head;4.選課功能void choose(SUB *head)選定、輸岀結束SUB *p,*q;int a5;int nu m,total=0,i=0,j;printf(”輸入要選修的課程的編號,編號之間以空格分開,輸完后以0結束n); scan f(%d,&n um);while( nu m!=

12、0)for(p=head;p;p=p-n ext)if(p-num=nu m)total=total+p-score;ai=num;i+;scan f(%d,&n um);if(total60) printf(選修總學分未達到60,選 修失敗!n”);else printf( 選 修成功!n); printf(您選修的課程為:n”);for(j=0;jn ext)if(q-num=aj)printf(%s printf(n);,q-name);printf(printf(H*printf(H*printf(H*n);n);n);n);6程序代碼#include #include #includ

13、e typedef struct subjects int num;char name20;char kind10;int stime;int ttime;int etime;int score;int term;struct subjects *next;SUB;SUB *create_form()SUB *head,*tail,*p;int num,stime,ttime;int etime,score,term;char name20,kind10;int size=sizeof(SUB);head=tail=NULL;printf( 輸入選修課程信息 :n);scanf(%d %s%s

14、%d%d%d%d%d,&num,&name,&kind,&stime,&ttime,&etime,&score,&term);while(num!=0)p=(SUB *)malloc(size);p-num=num;strcpy(p-name,name);strcpy(p-kind,kind);p-stime=stime;p-ttime=ttime;p-etime=etime;p-score=score;p-term=term;if(head=NULL)head=p;elsetail-next=p;tail=p;scanf(%d %s%s%d%d%d%d%d,&num,&name,&kind,

15、&stime,&ttime,&etime,&score,&term); tail-next=NULL;return head;void savefile(SUB *head)SUB *p;FILE *fp;fp=fopen(subjects.txt,w);fprintf(fp, 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實驗或上機學時 學 分 開課學期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p

16、-term);fclose(fp);void savefileadd(SUB *head)SUB *p;FILE *fp;fp=fopen(subjectsadd.txt,w);fprintf(fp, 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實驗或上機學時 學 分 開課學期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p-term); fclose(fp);void savefiledel(SUB

17、 *head)SUB *p;FILE *fp;fp=fopen(subjectsdel.txt,w);fprintf(fp, 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實驗或上機學時 學 分 開課學期 n);for(p=head;p;p=p-next)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,p-num,p-name,p-kind,p-stime,p-tt ime,p-etime,p-score,p-term);fclose(fp);void prin(SUB *head)SUB *ptr;if(head=NULL)printf( 沒有此門課程記錄

18、!n);return;printf( 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上機學時 學分 開課學期 n);for(ptr=head;ptr;ptr=ptr-next)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,ptr-score,ptr-term);void search(SUB *head)int a,num;int t=1;char type10;char ch=a,ch1;SUB *ptr;while(ch!= )printf(

19、若要按課程性質(zhì)查找請輸入 1,若要按學分查找請輸入 2:n);scanf(%d,&a);switch(a)case 1:printf( 請輸入要查找的課程的性質(zhì) :n);scanf(%s,type);學分printf( 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上機學時 開課學期 n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(type,ptr-kind)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,

20、ptr-score,ptr-term);t=0;if(t) printf( 未找到 !n);break;case 2:printf( 輸入要查找的課程的學分 n);scanf(%d,&num);printf( 課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上機學時 學分 開課學期 n);for(ptr=head;ptr;ptr=ptr-next)if(ptr-score=num)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,p tr-ttime,ptr-etime,ptr-score,pt

21、r-term);t=0;if(t) printf( 未找到 !n);t=1;printf( 繼續(xù)查找請按回車鍵,結束請按空格鍵 :n);ch仁getchar();/將回車鍵賦給CH1否貝U CASE里面最后輸入的回車鍵會賦給CH因此用CH1填補。ch=getchar();SUB *insert(SUB *head)SUB *ptr,*ptr2,*subj;int size=sizeof(SUB);char ch=a,ch1; while(ch!= )subj=(SUB *)malloc(size);ptr=subj;printf( 輸入要插入的課程信息 :n);scanf(%d%s%s%d%d

22、%d%d%d,&subj-num,subj-name,subj-kind,&subj-stime,&subj-tt ime,&subj-etime,&subj-score,&subj-term);if(head=NULL)head=ptr;head-next=NULL;elsefor(ptr2=head;ptr2;ptr2=ptr2-next)if(ptr2-next=NULL)ptr2-next=subj;subj-next=NULL;break;printf( 繼續(xù)插入請按回車,結束請按空格 :n);ch仁getchar();/將回車鍵賦給 CH1,否則subj-term 輸完后輸入的回車

23、鍵會賦給CH因此用CH1填補。ch=getchar();return head;SUB *del(SUB *head)SUB *p1,*p2;char ch=a,ch1;int num;while(ch!= )printf( 輸入想要刪除的課程編號 :n);scanf(%d,&num);if(head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;while(p2)if(p2-num=num)p1-next=p2-next;free(p2);else p1=p2;p2=

24、p1-next;:n);printf( 繼續(xù)刪除請按回車,結束請按空格28ch1=getchar();/將回車鍵賦給 CH1,否則num輸完后再輸入的回車鍵會賦給CH因此用CH1填補。ch=getchar();return head;void choose(SUB *head)SUB *p,*q;int a5;int num,total=0,i=0,j;0結束 n);printf( 輸入要選修的課程的編號,編號之間以空格分開,輸完后以 scanf(%d,&num);while(num!=0)for(p=head;p;p=p-next)if(p-num=num)total=total+p-sco

25、re;ai=num;i+;scanf(%d,&num);if(total60) printf(選修總學分未達到 60, 選修失敗 !n);else printf(選修成功 !n);printf(您選修的課程為 :n);for(j=0;jnext)if(q-num=aj)printf(%s ,q-name);printf(n);printf(*n);printf(*n);printf(*n);printf(*n);void main()SUB *head=create_form();savefile(head);prin(head);search(head);注意此處的必要性,函數(shù) insert

26、 的的返注意此處的必要性, 函數(shù) del 的的返回值head=insert(head); / 回值重新賦給 head!savefileadd(head);printf( 修改后的信息為 :n); prin(head);head=del(head); / 重新賦給 head!savefiledel(head);printf( 修改后的課程信息為 :n);prin(head);choose(head);7.程序運行結果1h* 15 MtI Lr3lUh E 為 H X5 I J C* b- W 14 U 14 phy*丄bn 込門朗L F Chkntise ax li 12 B 1* 1 b- I

27、hntlc mk 1% 12 V i ? MLatey 1% M2課酬號iWti千比嘉上機弟町幸1ut hshiK佔14351ihit1、14M13*初I1514&2H14fihwlc*bM1513aioi5Ch 1mmm1413eitiHus 1C1512i1&1黑帯揖:賓鋁 X.齊鞋I、倉鎧慢改居信5為:總手時授時時可賢或上機學時學分開譚學期1vuithabx151412lielibx坤fl2513Ct*Sis14414ph 驢iFg 寧hx13JH112a1H6naficvxts12a157H isttiryv)c旳15K常人餾賽刪除的課程蕭號1Q毬坯刖搏:溝按迫1車潔丸情按豆帕1 W雌性質(zhì)皂學時攬慢學時實踐或上機啊學分1iwt 居bxli12EnllffhbK151總曲13上卄ZkZ1444phyj;hx活134*SChxx1412曲1W16Fhifilcxk1

溫馨提示

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

評論

0/150

提交評論