學(xué)生選修課程系統(tǒng)設(shè)計_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  程序設(shè)計實訓(xùn)</b></p><p><b>  說 明 書</b></p><p>  2015 年 1月 10 日</p><p><b>  選題要求</b></p><p>  假定有n門課程,每門課程有:課程編號,課程名稱,課程性質(zhì)(公共

2、課、必修課、選修課),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計一選修課程系統(tǒng),使之能提供以下功能:</p><p> ?。?)系統(tǒng)以菜單方式工作</p><p> ?。?)課程信息錄入功能(課程信息用文件保存) </p><p> ?。?)課程信息瀏覽功能</p><p> 

3、 (4)課程信息查詢功能,查詢方式分兩種: 按學(xué)分查詢, 按課程性質(zhì)查詢</p><p> ?。?)學(xué)生選修課程:提示選課成功,按照學(xué)生學(xué)號查詢該生所選課程</p><p><b>  考試增加的功能</b></p><p>  按照學(xué)期進行查詢課程信息</p><p>  判斷課程性質(zhì)為公共課的課程

4、信息顯示并存入文件里</p><p>  注:程序共生成三個文件(選修課程信息文件,公共課文件,學(xué)生選課文件)</p><p>  程序設(shè)計方法及主要函數(shù)介紹</p><p>  1.由于C語言是面向過程的語言,所以我的設(shè)計思路是根據(jù)目標(biāo)程序運行的過程來編寫的。</p><p>  我具體的設(shè)計思路如下:</p><p&g

5、t;  我設(shè)計的是學(xué)生選修課管理系統(tǒng),對選修課程能夠進行錄入,查詢和瀏覽操作等,并且要求有菜單界面和退出功能。</p><p>  首先,我考慮到程序的數(shù)據(jù)優(yōu)先輸入,可以先設(shè)置一個選修課登陸界面,然后在該菜單里可進行選修課的錄入,查詢和瀏覽操作,最后將錄入的課程保存到相應(yīng)的文件中。然后定義各種函數(shù)的功能包括查詢(按學(xué)期查找,按學(xué)分查找,按課程性質(zhì)查找)操作等。 </p><p>  另

6、一個為學(xué)生登陸界面,該菜單學(xué)生可以進行課程瀏覽,課程選擇,查詢所選課程等操作,最后將學(xué)生所選的課程信息存入文件(有學(xué)號,課程編號及名稱)中。在進行該操作之前需要對選修課程保存的文件進行讀取,然后對其中的內(nèi)容進行查詢等,在學(xué)生選好課程以后,可以將其選好的課程保存于相應(yīng)的文件中,以便下次進行查詢及修改。</p><p>  通過函數(shù)的層層調(diào)用來實現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過文件的打開和關(guān)閉實現(xiàn)對文件內(nèi)部所包含的數(shù)據(jù)的操

7、作。</p><p><b>  函數(shù)介紹如下:</b></p><p>  int main()//主函數(shù)</p><p>  void Mangers()//選修課函數(shù)</p><p>  void *insert()//插入課程信息函數(shù)</p><p>  void savefile()//

8、保存文件</p><p>  void prin() //瀏覽所有課程函數(shù)</p><p>  void search()//課程信息查詢函數(shù)</p><p>  void GonggkInfor()//查詢公共課信息函數(shù)</p><p>  void Students()//學(xué)生信息函數(shù)</p><p>  void

9、 prin() //瀏覽所有課程函數(shù)</p><p>  void xuan_ke()//學(xué)生選課函數(shù)</p><p>  void xuanke_information()//學(xué)生選課信息統(tǒng)計函數(shù)</p><p>  三、程序源代碼(包括注釋)</p><p>  #include<string.h> //字符串處理函數(shù)

10、 </p><p>  #include<stdio.h> //輸入,輸出函數(shù)</p><p>  #include<malloc.h> //動態(tài)存儲分配函數(shù)</p><p>  #include<stdlib.h> //動態(tài)內(nèi)存分配函數(shù)</p><p>  #include<

11、;conio.h> </p><p>  typedef struct subjects{//定義一個課程的結(jié)構(gòu)體 </p><p>  int num; //課程編號</p><p>  char name[20]; //課程名稱</p><p>  char kind[1

12、0]; //課程性質(zhì)</p><p>  int stime; //總學(xué)時</p><p>  int ttime; //授課學(xué)時</p><p>  int etime; //實驗或上機學(xué)時</p><p>  int score;

13、 //學(xué)分</p><p>  char term[20]; //開課學(xué)期 </p><p>  struct subjects *next; //next是指針變量,指向結(jié)構(gòu)體變量 </p><p>  }SUB;//定義一個SUB的結(jié)構(gòu)體</p><p>  SUB *head=NULL; //鏈表

14、的頭指針置空 </p><p>  SUB *create_form() //創(chuàng)建鏈表 </p><p><b>  {</b></p><p>  SUB *head,*tail,*p; //創(chuàng)建鏈表的頭指針,尾指針 </p><p>  int num,stime,ttime; </p><p&g

15、t;  int etime,score; </p><p>  char name[20],kind[10],term[20]; </p><p>  int size=sizeof(SUB);//給結(jié)構(gòu)體SUB申請空間 </p><p>  head=tail=NULL; //先讓頭指針和為指針置空 </p><p>  printf(&q

16、uot;輸入選修課程信息:\n"); </p><p>  scanf("%d%s%s%d%d%d%d%s",&num,name,kind,&stime,&ttime,&etime,&score,&term); </p><p>  while(num!=0){ </p><p>  p=

17、(SUB *)malloc(sizeof(SUB));//給結(jié)點p申請內(nèi)存 </p><p>  p->num=num;//給元素num賦值 </p><p>  strcpy(p->name,name); //給元素name賦值</p><p>  strcpy(p->kind,kind);//給元素kind賦值 </p><

18、;p>  p->stime=stime; //給元素stime賦值</p><p>  p->ttime=ttime; //給元素ttime賦值</p><p>  p->etime=etime; //給元素etime賦值</p><p>  p->score=score; //給元素score賦值</p><p&g

19、t;  strcpy(p->term,term); //給元素term賦值</p><p>  if(head==NULL) </p><p>  head=p;//若頭指針為空,把結(jié)點p賦值給頭指針 </p><p><b>  else </b></p><p>  tail->next=p;//否則把p

20、賦值給尾指針指向下一個結(jié)點 </p><p>  tail=p; scanf("%d%s%s%d%d%d%%s",&num,name,kind,&stime,&ttime,&etime,&score,term);</p><p><b>  } </b></p><p>  ta

21、il->next=NULL;//尾結(jié)點的數(shù)據(jù)域為空 </p><p>  return head; </p><p><b>  } </b></p><p>  void savefile()//保存文件</p><p><b>  { </b></p><p>  

22、SUB *p; //申明一個SUB型的指針變量p </p><p>  FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量 </p><p>  fp=fopen("ZSL1314010731.txt","w");//打開文件 </p><p>  if(fp==NULL) </p>&l

23、t;p><b>  { </b></p><p>  printf("\nCannot open the file!\n");//打開文件失敗 </p><p><b>  } </b></p><p>  fprintf(fp,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時

24、 實驗或上機學(xué)時 學(xué)分 開課學(xué)期\n"); //在文本的第一行輸入該信息 </p><p>  for(p=head;p;p=p->next) </p><p>  fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",p->num,p->name,p->kind,p->stime,p->

25、ttime,p->etime,p->score,p->term); //在文件里寫入信息 </p><p>  fclose(fp); //關(guān)閉文件 </p><p>  printf("創(chuàng)建后的信息已放入'ZSL1314010731.txt'文件中\(zhòng)n"); </p><p>  system("pa

26、use"); </p><p><b>  } </b></p><p>  void savefile1()//保存文件</p><p><b>  {</b></p><p>  SUB *p; //申明一個SUB型的指針變量p </p><p>  FILE

27、*fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p>  fp=fopen("3.txt","w"); </p><p>  if(fp==NULL) exit(0); </p><p>  fprintf(fp,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實驗或上機學(xué)時 學(xué)分 開

28、課學(xué)期\n"); //在文本的第一行輸入該信息</p><p>  for(p=head;p;p=p->next) </p><p>  fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",p->num,p->name,p->kind,p->stime,p->ttime,p->eti

29、me,p->score,p->term); //在文本里寫入信息 </p><p>  fclose(fp); //關(guān)閉文件</p><p>  printf("創(chuàng)建后的信息已放入'3.txt'文件中\(zhòng)n"); </p><p>  system("pause"); </p><

30、;p><b>  } </b></p><p>  void readfile()//閱讀文件</p><p><b>  { </b></p><p>  void *myInsert(SUB*);//申明該函數(shù) </p><p>  SUB *newSub;//申明一個SUB型的指針變量

31、newSub</p><p>  int num,stime,ttime,etime; </p><p>  int score; </p><p>  char c,name[20],kind[10],fname[20],term;</p><p>  printf("請輸入課程信息所在的文件名稱:"); </p&

32、gt;<p>  scanf("%s",fname); </p><p>  FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p>  fp=fopen(fname,"r"); //打開文件</p><p>  while(!feof(fp)) { //判斷文件是否到了結(jié)尾 </p>

33、;<p>  if((c=fgetc(fp))=='\n') break; </p><p><b>  } </b></p><p>  while(!feof(fp)) { </p><p>  newSub=(SUB*)malloc(sizeof(SUB));//給結(jié)點p申請內(nèi)存 </p>&l

34、t;p>  fscanf(fp,"%d%s%s%d%d%d%d%s\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term); //在文本里寫

35、入信息 </p><p>  myInsert(newSub);//調(diào)用該函數(shù) </p><p><b>  } </b></p><p>  fclose(fp);//關(guān)閉文件 </p><p><b>  } </b></p><p>  void prin() //瀏覽

36、所有課程函數(shù) </p><p><b>  { </b></p><p>  readfile();//申明該函數(shù)</p><p>  SUB *ptr;//申明一個SUB型的指針變量ptr </p><p>  head=NULL; </p><p>  if(head==NULL) { &l

37、t;/p><p>  printf("\n\n\t*********NO RECORDS!************\n"); </p><p><b>  return; </b></p><p><b>  } </b></p><p>  printf("課程編號 課

38、程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n"); </p><p>  for(ptr=head;ptr;ptr=ptr->next) { </p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->

39、kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b>  } </b></p><p>  system("pause"); </p><p><b>  } </b></p

40、><p>  void *myInsert(SUB* subj)//鏈表插入操作</p><p><b>  { </b></p><p>  SUB *ptr,*ptr2; //申明一個SUB型的指針變量ptr,ptr2</p><p>  ptr=subj; </p><p>  if(head=

41、=NULL)</p><p><b>  { </b></p><p>  head=ptr; </p><p>  head->next=NULL; </p><p><b>  } </b></p><p><b>  else { </b>&

42、lt;/p><p>  for(ptr2=head;ptr2;ptr2=ptr2->next) </p><p>  if(ptr2->next==NULL)</p><p><b>  { </b></p><p>  ptr2->next=subj;//連接結(jié)點 </p><p>

43、;  subj->next=NULL;//下一個結(jié)點為空 </p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  return 0; </p><p&

44、gt;<b>  } </b></p><p>  void *insert()//插入課程信息函數(shù) </p><p><b>  { </b></p><p>  int size=sizeof(SUB);//申明并給分配內(nèi)存 </p><p>  char ch,ch1;</p>

45、<p>  SUB *ptr,*subj;//申明一個SUB型的指針變量ptr,subj </p><p>  while(ch!='0')</p><p><b>  { </b></p><p>  subj=(SUB *)malloc(size);//分配內(nèi)存 </p><p>  ptr

46、=subj; </p><p>  printf("輸入要插入的課程信息:\n"); //以下為元素輸入信息 </p><p>  printf("\n\t\t請輸入課程編號:");scanf("%d",&subj->num); </p><p>  printf("\n\t\

47、t請輸入課程名稱:");scanf("%s",&subj->name); </p><p>  printf("\n\t\t請輸入課程性質(zhì):");scanf("%s",&subj->kind); </p><p>  printf("\n\t\t請輸入總學(xué)時:");

48、scanf("%d",&subj->stime); </p><p>  printf("\n\t\t請輸入授課學(xué)時:");scanf("%d",&subj->ttime); </p><p>  printf("\n\t\t請輸入實踐或上機學(xué)時:");scanf("%d&

49、quot;,&subj->etime); </p><p>  printf("\n\t\t請輸入學(xué)分:");scanf("%d",&subj->score); </p><p>  printf("\n\t\t請輸入開課學(xué)期:");scanf("%s",&subj->

50、term); </p><p>  myInsert(subj); //調(diào)用該函數(shù)目的是是否繼續(xù)接受下一個結(jié)點 </p><p>  printf("\n添加完畢,新信息存入文件中\(zhòng)n"); </p><p>  printf("\n繼續(xù)插入請按回車\n"); </p><p>  printf(&qu

51、ot;\n結(jié)束添加課程按0: [ ]\b\b"); </p><p>  ch1=getchar(); //將回車鍵賦給CH1,否則subj->term輸完后輸入的回車鍵會賦給CH,因此用CH1填補。</p><p>  ch=getchar(); </p><p><b>  } </b></p><p

52、>  return head; </p><p><b>  }</b></p><p>  void *del() //刪除課程函數(shù) </p><p><b>  { </b></p><p>  SUB *p1,*p2;//申明一個SUB型的指針變量p1,p2 </p>&l

53、t;p>  char ch,ch1; </p><p><b>  int num; </b></p><p>  while(ch!='0') { </p><p>  printf("輸入想要刪除的課程編號:[ ]\b\b\b\b\b"); </p><p>  sca

54、nf("%d",&num); </p><p>  if(head->num==num) { </p><p>  p2=head; //以下為刪除結(jié)點操作 </p><p>  head=head->next; </p><p>  free(p2); </p><p><

55、;b>  } </b></p><p>  if(head==NULL) return NULL; </p><p><b>  p1=head; </b></p><p>  p2=head->next; </p><p>  while(p2){</p><p>  

56、if(p2->num==num){ </p><p>  p1->next=p2->next; </p><p><b>  free(p2);</b></p><p><b>  } </b></p><p>  else p1=p2; </p><p>

57、;  p2=p1->next; </p><p><b>  } </b></p><p>  printf("\n繼續(xù)刪除請按回車\n"); </p><p>  printf("\n結(jié)束刪除課程按 0: [ ]\b\b"); </p><p>  ch1=getchar(

58、);//將回車鍵賦給CH1,否則num輸完后再輸入的回車鍵會賦給CH,因此用CH1填補。</p><p>  ch=getchar(); </p><p>  printf("\n刪除完畢,新信息存入文件中\(zhòng)n"); </p><p>  system("pause"); </p><p><b

59、>  } </b></p><p>  return head; </p><p>  system("pause"); </p><p><b>  }</b></p><p>  void GonggkInfor()//查詢公共課信息函數(shù) </p><p>

60、;<b>  { </b></p><p><b>  int t=1;</b></p><p>  char min[20];</p><p>  SUB *ptr;//申明一個SUB型的指針變量ptr</p><p>  FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量 &l

61、t;/p><p>  fp=fopen("GonggkInfor.txt","w");//打開文件 </p><p>  printf("請輸入要查找的課程性質(zhì):"); </p><p>  scanf("%s",min);</p><p>  printf(&q

62、uot;課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n"); </p><p>  for(ptr=head;ptr;ptr=ptr->next) </p><p><b>  {</b></p><p>  if(strcmp(min,ptr->kind)==0)//通過

63、比較兩個字符串來進行實現(xiàn) </p><p><b>  { </b></p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->sc

64、ore,ptr->term); </p><p><b>  t=0; </b></p><p><b>  }</b></p><p><b>  t=1; </b></p><p>  } </p><p>  if(fp==

65、NULL) </p><p><b>  {</b></p><p>  printf("文件存取失敗!");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  fpr

66、intf(fp,"課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n");//在文本的第一行輸入該信息 </p><p>  for(ptr=head;ptr;ptr=ptr->next) </p><p>  if(strcmp(min,ptr->kind)==0)</p><p>&l

67、t;b>  { </b></p><p>  fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);//在文本里寫入信息 <

68、;/p><p><b>  t=0; </b></p><p><b>  }</b></p><p><b>  t=1; </b></p><p>  fclose(fp);//關(guān)閉文件 </p><p>  printf("已把性

69、質(zhì)為公共課的信息存入文件‘GonggkInfor.txt’里!");</p><p>  system("pause"); </p><p><b>  }</b></p><p>  void search()//課程信息查詢函數(shù) </p><p><b>  { <

70、;/b></p><p>  int a,num; </p><p><b>  int t=1; </b></p><p>  char type[10],min[10],term[10];</p><p>  SUB *ptr; //申明一個SUB型的指針變量ptr </p><p> 

71、 L1:system("cls");//清屏功能,每次操作完返回到該功能首菜單 </p><p>  printf("\n\n\t\t**********請選擇查詢方式*************\n"); </p><p>  printf("\n\t\t\t1---按學(xué)期查找\n");</p><p> 

72、 printf("\n\t\t\t2---按課程性質(zhì)查找\n"); </p><p>  printf("\n\t\t\t3---按學(xué)分查找\n"); </p><p>  printf("\n\t\t\t4---退出查找\n"); </p><p>  printf("\n\n\t\t*****

73、*********************************\n"); </p><p>  printf("\n\n請選擇(1-4):[ ]\b\b"); </p><p>  scanf("%d",&a); </p><p>  switch(a) { </p><p>  

74、case 1:printf("請輸入要查找的課程學(xué)期:"); </p><p>  scanf("%s",min); </p><p>  printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n"); </p><p>  for(ptr=head;

75、ptr;ptr=ptr->next) </p><p><b>  {</b></p><p>  if(strcmp(min,ptr->term)==0)//通過比較兩個字符串來進行實現(xiàn) </p><p><b>  { </b></p><p>  printf("%5d%

76、12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b>  t=0; </b></p><p><b> 

77、 }t=1; </b></p><p>  } </p><p>  system("pause"); </p><p>  goto L1;//再次返回到該菜單進行下一個操作 </p><p>  case 2:printf("請輸入要查找的課程的性質(zhì):");

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

79、t;<b>  { </b></p><p>  if(strcmp(type,ptr->kind)==0)</p><p><b>  { </b></p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->nam

80、e,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); </p><p><b>  t=0; </b></p><p><b>  }t=1; </b></p><p><b>  }<

81、/b></p><p>  system("pause"); </p><p><b>  goto L1; </b></p><p>  case 3:printf("輸入要查找的課程的學(xué)分:"); </p><p>  scanf("%d&q

82、uot;,&num); </p><p>  printf("課程編號 課程名稱 課程性質(zhì) 總學(xué)時 授課學(xué)時 實踐或上機學(xué)時 學(xué)分 開課學(xué)期\n");</p><p>  for(ptr=head;ptr;ptr=ptr->next) </p><p><b>  {</b></p>

83、<p>  if(ptr->score==num)</p><p><b>  { </b></p><p>  printf("%5d%12s%9s%9d%9d%11d%11d%11s\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr-

84、>etime,ptr->score,ptr->term); </p><p><b>  t=1; </b></p><p><b>  } </b></p><p>  system("pause"); </p><p><b>  goto L1;

85、</b></p><p>  case 4:break;</p><p><b>  } </b></p><p><b>  } </b></p><p>  void Mangers()//選修課函數(shù) </p><p><b>  { </b&

86、gt;</p><p>  int n,w=1,flag=0,j,i=3; </p><p><b>  do{ </b></p><p>  system("cls"); //選修課信息菜單 </p><p>  printf("\n\n\t\t*********************選

87、修課菜單***********************\n\n"); </p><p>  printf("\t\t\t\t 1---錄入課程\n");</p><p>  printf("\t\t\t\t 2---瀏覽課程\n"); </p><p>  printf("\t\t\t\t

88、 3---查詢課程\n"); </p><p>  printf("\t\t\t\t 4---存取公共課課程\n"); </p><p>  printf("\t\t\t\t 5---返回主菜單"); </p><p>  printf("\n\n\t\t********************

89、**********************************\n"); </p><p>  printf("請選擇(1-5):[ ]\b\b"); </p><p>  scanf("%d",&n); </p><p><b>  switch(n)</b></p>

90、<p><b>  { </b></p><p>  case 1:insert();savefile();break;</p><p>  case 2:prin();break;</p><p>  case 3:search();break;</p><p>  case 4:GonggkInfor(

91、);break; </p><p>  case 5:return; </p><p>  default:; </p><p><b>  }</b></p><p>  } while(w==1); </p><p><b>  } </b></p><

92、;p>  struct student </p><p><b>  { </b></p><p>  long int snum;//學(xué)生學(xué)號 </p><p>  int cnum;//所選課程編號 </p><p>  char cname[20];//所選課程名稱 </p><p>

93、  };//定義一個學(xué)生結(jié)構(gòu)體 </p><p>  void xuan_ke()//學(xué)生選課函數(shù) </p><p><b>  { </b></p><p>  struct student s;//定義學(xué)生結(jié)構(gòu)體變量s </p><p><b>  char C; </b></p>

94、<p>  SUB *c;//定義課程結(jié)構(gòu)體變量c</p><p>  FILE *fp; //fp是指向FILE結(jié)構(gòu)的指針變量</p><p>  printf("\n 請輸入您的學(xué)號及您要選擇的課程編號:"); </p><p>  scanf("%d %d",&s.snum,&s.cnum)

95、;</p><p>  fp=fopen("ZSL1314010731.txt","r");</p><p>  if(fp==NULL) //打開選課記錄文件"2.txt" </p><p>  { printf("\nCannot open course!\n"); }

96、</p><p>  while(!feof(fp)) </p><p>  { if((C=fgetc(fp))=='\n') break; } </p><p>  while(!feof(fp))</p><p><b>  { </b></p><p>  c=(

97、SUB*)malloc(sizeof(SUB));//給結(jié)點申請空間 </p><p>  fscanf(fp,"%d %s %s %d %d %d %d %s\n",&c->num,c->name,c->kind,&c->stime,&c->ttime,&c->etime,&c->score,&c-&g

98、t;term); </p><p>  if(c->num==s.cnum) //通過學(xué)生選課輸入的編號,和選修課程中的編號進行匹配,若匹配成功就結(jié)束,并帶回當(dāng)前指針 </p><p><b>  break;</b></p><p><b>  } </b></p><p>  fclose

99、(fp);//關(guān)閉選課記錄文件"ZSL1314010731.txt"</p><p>  if((fp=fopen("student.txt","a+"))==NULL)</p><p>  { printf("\nCannot open student!\n");} </p><p&g

100、t;  //將學(xué)生選課信息輸入student.txt文件</p><p>  fprintf(fp,"%d %d %s\n",s.snum,s.cnum,c->name);//把選課學(xué)生的學(xué)號,所選課程編號,課程名稱寫入文件里 </p><p>  fclose(fp);</p><p>  printf("\n 恭喜您選課成功!

101、信息已存入到“student.txt”中。\n"); </p><p>  system("pause");</p><p><b>  } </b></p><p>  void xuanke_information()//學(xué)生選課信息統(tǒng)計函數(shù) </p><p><b>  {

102、 </b></p><p>  int total=0;//人數(shù)統(tǒng)計變量</p><p>  FILE *fp;//fp是指向FILE結(jié)構(gòu)的指針變量</p><p>  struct student s;//定義一個student結(jié)構(gòu)體類型的變量s </p><p>  if((fp=fopen("student.txt

103、","r"))==NULL)//打開選課記錄文件"student.txt"</p><p>  { printf("\nCannot open student!\n"); } </p><p>  for(;!feof(fp);) </p><p><b>  { </b>

104、;</p><p>  printf("\n\t\t 學(xué)號 課程編號 課程名稱\n"); </p><p>  fscanf(fp,"%d %d %s\n",&s.snum,&s.cnum,&s.cname); </p><p><b>  total

105、++; </b></p><p>  printf("%22d %17d %18s\n",s.snum,s.cnum,s.cname); </p><p><b>  }</b></p><p>  printf("\n 選課學(xué)生總?cè)藬?shù)為:%d人",total)

106、;</p><p>  fclose(fp);//關(guān)閉文件 </p><p>  system("pause");</p><p><b>  } </b></p><p>  void Students()//學(xué)生信息函數(shù) </p><p><b>  { &l

107、t;/b></p><p>  int n,w=1; </p><p><b>  do { </b></p><p>  system("cls"); </p><p>  printf("\n\n\t\t*********************學(xué)生選課菜單************

108、******\n\n"); </p><p>  printf("\t\t\t\t1---瀏覽所有課程\n"); </p><p>  printf("\t\t\t\t2---選擇選修課程\n"); </p><p>  printf("\t\t\t\t3---瀏覽我選修的課程\n"); <

109、;/p><p>  printf("\t\t\t\t4---返回主菜單"); </p><p>  printf("\n\n\t\t****************************************************\n"); </p><p>  printf("請選擇(1-4):[ ]\b\b&q

110、uot;); </p><p>  scanf("%d",&n); </p><p>  switch(n){ </p><p>  case 1:prin();break; </p><p>  case 2:xuan_ke();break; </p><p>  case 3:xuan

111、ke_information();break; </p><p>  case 4:return; </p><p>  default:; </p><p><b>  } </b></p><p>  } while(w==1); </p><p><b>  } </b>

112、;</p><p>  int main()//主函數(shù) </p><p><b>  { </b></p><p>  int n,w=1; </p><p><b>  do{ </b></p><p>  system("cls"); </p&g

113、t;<p>  printf("\n\n\t*********************學(xué)生選課系統(tǒng)*********************\n\n"); </p><p>  printf("\t\t\t 1.選修課信息\n"); </p><p>  printf("\t\t\t 2.學(xué)生選課\n"

114、;); </p><p>  printf("\t\t\t 3.退出"); </p><p>  printf("\n\n\t******************************************************\n"); </p><p>  printf("請選擇(1-3):[ ]\

115、b\b"); </p><p>  scanf("%d",&n); </p><p>  switch(n){</p><p>  case 1:Mangers();break; </p><p>  case 2:Students();break; </p><p>  case

116、 3:w=0;break; </p><p>  default:; </p><p><b>  } </b></p><p>  } while(w==1); </p><p><b>  return 0;</b></p><p><b>  } </b

117、></p><p><b>  程序運行界面</b></p><p><b>  主界面</b></p><p><b>  選修課菜單 </b></p><p>  a>錄入課程(并存入到ZSL1314010731.txt)</p><p>

118、;  將所有錄入的課程存入’ZSL1314010731.txt’文件</p><p><b>  b>瀏覽課程</b></p><p><b>  c>查詢課程</b></p><p>  按學(xué)期查找(考試增加功能)</p><p><b>  按課程性質(zhì)查找</b>

119、;</p><p><b>  按學(xué)分查找</b></p><p>  d>判斷并存取公共課課程</p><p>  將公共課的課程信息寫入’GonggkInfor.txt’文件</p><p><b>  學(xué)生選課菜單</b></p><p><b>  a

120、>學(xué)生開始選課</b></p><p>  將學(xué)生選課信息存入’student.txt’文件</p><p>  b>查詢學(xué)生所選課程</p><p><b>  返回主菜單</b></p><p><b>  生成的三個文件</b></p><p>

121、<b>  程序的優(yōu)點和不足</b></p><p><b>  【程序的優(yōu)點】</b></p><p>  算法是程序的靈魂,程序的優(yōu)點首先表現(xiàn)在算法上的優(yōu)點,其次才是功能上的。</p><p> ?。鬯惴ㄉ系膬?yōu)點]主要體現(xiàn)在以下三點:</p><p>  該程序采用main主函數(shù)方式設(shè)計,程序的

122、主體的功能大都由該功能完成。程序如此設(shè)計有利于程序的進一步改進及有助于程序執(zhí)行效率的提高。</p><p>  程序?qū)ξ募?shù)據(jù)的讀寫采用了fread和fwrite塊讀寫函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應(yīng)的數(shù)組中進行一系列操作,最終再寫入文件。</p><p>  插入操作在本程序中是將課程信息插入到鏈表的最后一個節(jié)點,從而減少了數(shù)據(jù)的相互移動,節(jié)省了時間,提高

123、了效率。</p><p> ?。酃δ苌系膬?yōu)點]主要體現(xiàn)在以下兩點:</p><p>  1.有簡潔明了的程序菜單。程序主要采用了層次嵌套的菜單,相互獨立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。</p><p>  有人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多

124、樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地看懂程序并進行操作。</p><p><b>  【程序的缺點】</b></p><p>  1.本程序沒有進行相應(yīng)的密碼操作,所以對于使用者來說可能存在比較大的不保密性。需要進一步改善。</p><p>  2.本程序沒有將各個選課學(xué)生的信息就行各自存檔。為了各個學(xué)生的隱私,應(yīng)將每個人的信息

125、分步存檔。</p><p><b>  六、心得體會</b></p><p>  經(jīng)過這次C語言實訓(xùn),我確實學(xué)到了好多以前不知道的。以前動手能力基本為零,我一直覺得自己是一個光說不練的夢想主義者。好在有了這次實訓(xùn)的機會,我定要牢牢把握住這次來之不易的機會,從開始實訓(xùn)到結(jié)束我一直堅持自己先琢磨,先理解問題,如有解決不了的我定會請教身邊的高手,在這個過程里我加深了對程序和

126、與程序有關(guān)的一些知識的理解。雖說我的功底差,但只要有毅力,恒心和信心,我一定會得到本屬于我的東西,</p><p>  在實訓(xùn)過程里我遇到好多問題和挫折,但就問題而言我一直堅持兩個原則:自己先解決大部分問題;對于不會的自己在深研,實在不會在請教他人。</p><p>  因為這一次是自己親手做的,自己難免有些小小激動和高興,不管結(jié)果如何,這一次我真的學(xué)到了自己想要的知識。首先我對程序設(shè)計也

127、有自己的一點看法,程序就是算法和邏輯結(jié)構(gòu)的合成,寫程序就是把算法編寫成電腦能識別的字符,調(diào)試之后進行編譯運行,在算法里加入邏輯結(jié)構(gòu)就可以實現(xiàn)算法了;其次程序這是個很神奇的東西,只需幾行代碼就可以變換出來一個神奇的世界,自己看著就心動,這會讓我越來越喜歡這種挑戰(zhàn),我對其中的神秘武器很好奇。</p><p>  在敲代碼的過程里。我經(jīng)常會犯很多低級錯誤,那原因就很簡單了,雖然如此,但我還是每次自己一次又一次的找出錯誤

溫馨提示

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

評論

0/150

提交評論