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

下載本文檔

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

文檔簡介

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

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

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

4、生選修課程系統(tǒng)些程生修況塊 某課學(xué)選情模4 數(shù)據(jù)結(jié)構(gòu)設(shè)計該程序采用多個main ()函數(shù)模塊分別來實現(xiàn)程序的運行,通過使用 數(shù)組功能來實現(xiàn)數(shù)據(jù)的錄入,使用strcpy ()函數(shù)來實現(xiàn)錄入信息的復(fù)制,整個結(jié)構(gòu)從整體來看使用了選擇結(jié)構(gòu),break .case .的合理利用5 算法設(shè)計1.課程信息錄入功能void savefile(SUB *head)SUB *p;FILE *fp;fp=fope n( subjects.txt,w);fprin tf(fp, 課程編號 課程名稱 課程性質(zhì) 機學(xué)時 學(xué)分 開課學(xué)期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);總學(xué)時 授課學(xué)時 實驗或上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,課程編號 課程名稱上機學(xué)時 學(xué)分 開課學(xué)期n);for(p=head;p;p=p-n ext)課程性質(zhì) 總學(xué)時 授課學(xué)時 實驗或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(”輸入要查找的課程的學(xué)分n);scan f(%d,&n um);printf(課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上 機學(xué)時 學(xué)分 開課學(xué)期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、查找請按回車鍵,結(jié)束請按空格鍵: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ù)插入請按回車,結(jié)束請按空格: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ù) 刪 除 請 按 回 車 , 結(jié) 束 請 按 空 格 :n);ch仁getchar();II將回車鍵賦給 CH1 ,否則num輸完后再輸入的回車鍵會賦給CH ,因此用CH1填補。ch=getchar();retur n head;4.選課功能void choose(SUB *head)選定、輸岀結(jié)束SUB *p,*q;int a5;int nu m,total=0,i=0,j;printf(”輸入要選修的課程的編號,編號之間以空格分開,輸完后以0結(jié)束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(選修總學(xué)分未達到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ì) 總學(xué)時 授課學(xué)時 實驗或上機學(xué)時 學(xué) 分 開課學(xué)期 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ì) 總學(xué)時 授課學(xué)時 實驗或上機學(xué)時 學(xué) 分 開課學(xué)期 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ì) 總學(xué)時 授課學(xué)時 實驗或上機學(xué)時 學(xué) 分 開課學(xué)期 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ì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期 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,若要按學(xué)分查找請輸入 2:n);scanf(%d,&a);switch(a)case 1:printf( 請輸入要查找的課程的性質(zhì) :n);scanf(%s,type);學(xué)分printf( 課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 開課學(xué)期 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( 輸入要查找的課程的學(xué)分 n);scanf(%d,&num);printf( 課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期 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ù)查找請按回車鍵,結(jié)束請按空格鍵 :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ù)插入請按回車,結(jié)束請按空格 :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ù)刪除請按回車,結(jié)束請按空格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結(jié)束 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(選修總學(xué)分未達到 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.程序運行結(jié)果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為:總手時授時時可賢或上機學(xué)時學(xué)分開譚學(xué)期1vuithabx151412lielibx坤fl2513Ct*Sis14414ph 驢iFg 寧hx13JH112a1H6naficvxts12a157H isttiryv)c旳15K常人餾賽刪除的課程蕭號1Q毬坯刖搏:溝按迫1車潔丸情按豆帕1 W雌性質(zhì)皂學(xué)時攬慢學(xué)時實踐或上機啊學(xué)分1iwt 居bxli12EnllffhbK151總曲13上卄ZkZ1444phyj;hx活134*SChxx1412曲1W16Fhifilcxk1

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論