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

下載本文檔

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

文檔簡介

1、<p><b>  本科生課程論文封面</b></p><p>  課程名稱 C語言課程設計 </p><p>  教師姓名 </p><p>  本科生姓名 </p><p>  本科生學號

2、 </p><p>  本科生專業(yè) </p><p>  所在院系 </p><p>  類別: C.本科生 </p><p>  日期: 2012年09月05日 </p><p>

3、;<b>  課程設計評語</b></p><p>  注:1、無評閱人簽名成績無效;</p><p>  2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;</p><p>  3、如有平時成績,必須在上面評分表中標出,并計算入總成績。</p><p><b>  目 錄</b></p>

4、<p><b>  課程設計評語2</b></p><p><b>  目 錄3</b></p><p>  1.課程論文題目4</p><p>  2.程序設計思路4</p><p><b>  3.功能模塊圖5</b></p><p&

5、gt;  4.數(shù)據(jù)結構設計5</p><p><b>  5.算法設計6</b></p><p><b>  6.程序代碼13</b></p><p>  7.程序運行結果22</p><p>  8.編程中遇到的困難及解決方法25</p><p>  9.總結心得

6、及良好建議26</p><p><b>  10.致謝26</b></p><p><b>  1.課程論文題目</b></p><p>  名稱:學生選修課系統(tǒng)設計</p><p><b>  【要求】</b></p><p>  假定有n門課程,

7、每門課程有課程編號,課程名稱,課程性質(zhì),總學時,授課時間,實驗或上級時間,學分,開課學期等信息,學生可按要求(如總學分不超過60)自由選課。是設計一選修課課程系統(tǒng),使只能提供以下功能:</p><p><b>  系統(tǒng)一菜單方式工作</b></p><p>  課程信息和學生選課信息錄入功能(課程信息用文件保存</p><p><b>

8、;  輸入</b></p><p>  課程信息瀏覽功能——輸出</p><p>  查詢功能(至少一種查詢方式)——算法</p><p><b>  按學分查詢</b></p><p>  某門課程學生選修情況(可選項)</p><p><b>  【提示】</b&g

9、t;</p><p>  數(shù)據(jù)結構可用結構體,包括授課和選課兩個結構體,其中課程結構體成員包括編號,課程名稱,課程性質(zhì),總學時,授課學時,實驗或上機時間,學分,開課學期。學秀結構體成員包括學號,課程編號,該結構體的建立主要是為了查詢某門課程學生選修情況。</p><p><b>  程序設計思路</b></p><p>  由于題目要求將學生的

10、選課信息用結構體形式輸入,并寫入文件中,所以應提供文件的輸入輸出等操作:在過程中需有瀏覽、插入、修改、查找、刪除學生選課信息等操作,顧應分別建立個功能模塊;另外還應提供鍵盤式選擇菜單實現(xiàn)程序運行。</p><p>  根據(jù)題目要求,可以將系統(tǒng)分為六個模塊:</p><p>  系統(tǒng)以菜單方式工作模塊;</p><p>  課程信息與學生選課信息錄入功能模塊;<

11、/p><p>  課程信息瀏覽功能模塊;</p><p><b>  查詢模塊;</b></p><p><b>  按學分查詢模塊;</b></p><p>  6)某些課程學生選修情況模塊</p><p><b>  3.功能模塊圖</b></p&

12、gt;<p><b>  數(shù)據(jù)結構設計</b></p><p>  該程序采用多個main()函數(shù)模塊分別來實現(xiàn)程序的運行,通過使用數(shù)組功能來實現(xiàn)數(shù)據(jù)的錄入,使用strcpy()函數(shù)來實現(xiàn)錄入信息的復制,整個結構從整體來看使用了選擇結構,break ..case ..的合理利用</p><p><b>  算法設計</b></

13、p><p><b>  課程信息錄入功能</b></p><p>  void savefile(SUB *head)</p><p><b>  {</b></p><p><b>  SUB *p;</b></p><p><b>  FILE

14、 *fp;</b></p><p>  fp=fopen("subjects.txt","w");</p><p>  fprintf(fp,"課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實驗或上機學時 學分 開課學期\n");</p><p>  for(p=head;p;p

15、=p->next)</p><p>  fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);</p><p>  fclose(fp);</p

16、><p><b>  }</b></p><p>  void savefileadd(SUB *head)</p><p><b>  {</b></p><p><b>  SUB *p;</b></p><p><b>  FILE *fp;

17、</b></p><p>  fp=fopen("subjectsadd.txt","w");</p><p>  fprintf(fp,"課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實驗或上機學時 學分 開課學期\n");</p><p>  for(p=head;p;p=p

18、->next)</p><p>  fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);</p><p>  fclose(fp);</p&g

19、t;<p><b>  }</b></p><p><b>  查詢功能</b></p><p>  void search(SUB *head)</p><p><b>  {</b></p><p>  int a,num;</p><p&

20、gt;<b>  int t=1;</b></p><p>  char type[10];</p><p>  char ch='a',ch1;</p><p><b>  SUB *ptr;</b></p><p>  while(ch!=' '){</p&

21、gt;<p>  printf("若要按課程性質(zhì)查找請輸入1,若要按學分查找請輸入2:\n");</p><p>  scanf("%d",&a);</p><p>  switch(a){</p><p>  case 1:printf("請輸入要查找的課程的性質(zhì):\n");<

22、/p><p>  scanf("%s",type);</p><p>  printf("課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上機學時 學分 開課學期\n");</p><p>  for(ptr=head;ptr;ptr=ptr->next)</p><p>  if

23、(strcmp(type,ptr->kind)==0){</p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);</p>

24、;<p><b>  t=0;</b></p><p><b>  }</b></p><p>  if(t) printf("未找到!\n");</p><p><b>  t=1;</b></p><p><b>  break;

25、</b></p><p>  case 2:printf("輸入要查找的課程的學分\n");</p><p>  scanf("%d",&num);</p><p>  printf("課程編號 課程名稱 課程性質(zhì) 總學時 授課學時 實踐或上機學時 學分 開課學期\n");

26、</p><p>  for(ptr=head;ptr;ptr=ptr->next)</p><p>  if(ptr->score==num){</p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->

27、;stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);</p><p><b>  t=0;</b></p><p><b>  }</b></p><p>  if(t) printf("未找到!\n");</p>

28、<p><b>  t=1;</b></p><p><b>  }</b></p><p>  printf("繼續(xù)查找請按回車鍵,結束請按空格鍵:\n");</p><p>  ch1=getchar(); //將回車鍵賦給CH1,

29、否則CASE里面最后輸入的回車鍵會賦給CH,因此用CH1填補。</p><p>  ch=getchar();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  插入、刪除信息功能</b></p><

30、p>  SUB *insert(SUB *head)</p><p><b>  {</b></p><p>  SUB *ptr,*ptr2,*subj;</p><p>  int size=sizeof(SUB);</p><p>  char ch='a',ch1;</p>&

31、lt;p>  while(ch!=' '){</p><p>  subj=(SUB *)malloc(size);</p><p><b>  ptr=subj;</b></p><p>  printf("輸入要插入的課程信息:\n");</p><p>  scanf(&q

32、uot;%d%s%s%d%d%d%d%d",&subj->num,subj->name,subj->kind,&subj->stime,&subj->ttime,&subj->etime,&subj->score,&subj->term);</p><p>  if(head==NULL){</p>

33、;<p><b>  head=ptr;</b></p><p>  head->next=NULL;</p><p><b>  }</b></p><p><b>  else{</b></p><p>  for(ptr2=head;ptr2;ptr2

34、=ptr2->next)</p><p>  if(ptr2->next==NULL){</p><p>  ptr2->next=subj;</p><p>  subj->next=NULL;</p><p><b>  break;</b></p><p><b

35、>  }</b></p><p><b>  }</b></p><p>  printf("繼續(xù)插入請按回車,結束請按空格:\n");</p><p>  ch1=getchar(); //將回車鍵賦給CH1,否則subj->term輸完后輸入的回車鍵會賦給

36、CH,因此用CH1填補。</p><p>  ch=getchar();</p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b></p><p>  SUB *del(SUB *head)</p>

37、;<p><b>  {</b></p><p>  SUB *p1,*p2;</p><p>  char ch='a',ch1;</p><p><b>  int num;</b></p><p>  while(ch!=' '){</p&g

38、t;<p>  printf("輸入想要刪除的課程編號:\n");</p><p>  scanf("%d",&num);</p><p>  if(head->num==num){</p><p><b>  p2=head;</b></p><p>

39、  head=head->next;</p><p><b>  free(p2);</b></p><p><b>  }</b></p><p>  if(head==NULL)</p><p>  return NULL;</p><p><b>  p

40、1=head;</b></p><p>  p2=head->next;</p><p>  while(p2){</p><p>  if(p2->num==num){</p><p>  p1->next=p2->next;</p><p><b>  free(p2)

41、;</b></p><p><b>  }</b></p><p>  else p1=p2;</p><p>  p2=p1->next;</p><p><b>  }</b></p><p>  printf("繼續(xù)刪除請按回車,結束請按空格

42、:\n");</p><p>  ch1=getchar(); //將回車鍵賦給CH1,否則num輸完后再輸入的回車鍵會賦給CH,因此用CH1填補。</p><p>  ch=getchar();</p><p><b>  }</b></p><p>  retur

43、n head;</p><p><b>  }</b></p><p><b>  4.選課功能</b></p><p>  void choose(SUB *head)</p><p><b>  {</b></p><p>  SUB *p,*q;&

44、lt;/p><p><b>  int a[5];</b></p><p>  int num,total=0,i=0,j;</p><p>  printf("輸入要選修的課程的編號,編號之間以空格分開,輸完后以0結束\n");</p><p>  scanf("%d",&n

45、um);</p><p>  while(num!=0){</p><p>  for(p=head;p;p=p->next)</p><p>  if(p->num==num){</p><p>  total=total+p->score;</p><p><b>  a[i]=num;

46、</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p>  scanf("%d",&num);</p><p><b>  }</b></p><p>  i

47、f(total<60) printf("選修總學分未達到60,選修失敗!\n");</p><p><b>  else {</b></p><p>  printf("選修成功!\n");</p><p>  printf("您選修的課程為:\n");</p>&

48、lt;p>  for(j=0;j<i;j++) </p><p>  for(q=head;q;q=q->next)</p><p>  if(q->num==a[j])</p><p>  printf("%s ",q->name);</p><p>  printf("\n&

49、quot;);</p><p>  printf("***********************************\n");</p><p>  printf("***********************************\n");</p><p>  printf("***************

50、********************\n");</p><p>  printf("***********************************\n");</p><p><b>  }</b></p><p><b>  程序代碼</b></p><p>

51、;  #include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct subjects{ int num; char name[20]; char kind[10]; int stime; int ttime; int etime; int score; int term; struct subje

52、cts *next;}SUB; SUB *create_form(){ SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name[20],kind[10]; int size=sizeof(SUB); head=tail=NULL; printf("輸入選修課程信息:\n"); scanf("%d

53、 %s %s %d %d %d %d %d",&num,&name,&kind,&stime,&ttime,&etime,&score,&term); while(num!=0){ p=</p><p>  void search(SUB *head){ int a,num; int t=1; char type[10];

54、char ch='a',ch1; SUB *ptr; while(ch!=' '){ printf("若要按課程性質(zhì)查找請輸入1,若要按學分查找請輸入2:\n"); scanf("%d",&a); switch(a){ case 1:printf("請輸入要查找的課程的性質(zhì):\n"); scanf("

55、;%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%7d\n",

56、ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term</p><p>  SUB *insert(SUB *head){ SUB *ptr,*ptr2,*subj; int size=sizeof(SUB); char ch='a'

57、,ch1; while(ch!=' '){ subj=(SUB *)malloc(size); ptr=subj; printf("輸入要插入的課程信息:\n"); scanf("%d%s%s%d%d%d%d%d",&subj->num,subj->name,subj->kind,&subj->

58、;stime,&subj->ttime,&subj->etime,&subj->score,&subj->term); if(head==NULL){ head=ptr; head->next=NULL; } else{ for(ptr2=head;ptr2;ptr2=ptr2->

59、;next) if(ptr2->next==NULL){ ptr2</p><p>  SUB *del(SUB *head){ SUB *p1,*p2; char ch='a',ch1; int num; while(ch!=' '){ printf("輸入想要刪除的課程編號:\n");

60、 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){

61、 if(p2->num==num){ p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; } printf("繼續(xù)刪除請按回車,結束請按空格:\n"); ch1=getchar(); //將回車鍵賦給CH1,否則n<

62、/p><p>  for(q=head;q;q=q->next) if(q->num==a[j]) printf("%s ",q->name); printf("\n");printf("***********************************\n");printf("***********

63、***********************\n");printf("**********************************\n");printf("***********************************\n"); }} </p><p>  void main(){ SUB *head=create_f

64、orm(); savefile(head); prin(head); search(head); head=insert(head); //注意此處的必要性,函數(shù)insert的的返回值重新賦給head! savefileadd(head); printf("修改后的信息為:\n"); prin(head); head=del(head);

65、 //注意此處的必要性,函數(shù)del的的返回值重新賦給head! savefiledel(head); printf("修改后的課程信息為:\n"); prin(head); choose(head);</p><p><b>  }</b></p><p><b>  7.程序運行結果</b

66、></p><p>  編程中遇到的困難及解決方法</p><p>  1.問題:程序雖然經(jīng)過多次精簡,但僅僅是形式上、小范圍的精簡,仍未得到本質(zhì)上的精簡,即未找到更加簡單、更加高效、更加合理、更小占用的資源的算法。</p><p>  解決方法:.算法上除了采用結構體數(shù)組外,考慮在程序的算法設計上引入鏈表結構,考察這樣對數(shù)據(jù)組織存貯效率上是否具有提高作用&l

67、t;/p><p>  問題:程序仍然存在不合理的地方,例如程序某些部分輸入錯誤會導致程序中止或轉(zhuǎn)向其他功能模塊,即程序建議用戶注意提示,進行合理的準確的輸入,這樣更有利于管理工作。</p><p>  解決方法:對每個數(shù)據(jù)輸入段代碼進行更深的研究與分析,明確變量的類型、可能的數(shù)值,然后進行分類判斷(if或switch語句),必要時借助for循環(huán)語句來控制程序進行,保障各模塊運行相對獨立,穩(wěn)定準

68、確執(zhí)行各自功能。典型方法是如果輸入數(shù)據(jù)錯誤,通過printf輸出問題,并用for或(do)while構成循環(huán),輸入三次以上程序自動跳出主菜單或直到用戶輸入正確為止。</p><p><b>  總結心得及良好建議</b></p><p>  程序的源代碼為白手寫起,歷時3天,克服了非常多的困難,感覺到了很大的壓力。程序的源代碼是在邊看書、邊查資料、詢問、長期思考與設計

69、、調(diào)試、試驗的基礎上編寫出來的,在編寫程序的過程中,得到了許多的鍛煉,編程的思維也得以塑造。程序源代碼經(jīng)過數(shù)次精簡,但仍然比較龐大,應是編程經(jīng)驗不足造成的,雖不能說本程序源代碼比他人的類似代碼運行效率更高,占有資源更少,但是程序執(zhí)行的準確性還是能夠保障的。</p><p><b>  致謝</b></p><p>  首先得感謝紹老師這8晚上的指導,在此表示衷心的感謝

溫馨提示

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

評論

0/150

提交評論