2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《C語言程序設計》課程設計報告</p><p>  專 業: 電子信息工程 </p><p>  班 級: </p><p>  姓 名: </p><p>  指導教師: </p><p> 

2、 2011年12月28日</p><p>  目 錄</p><p>  1.課程設計目的…………………………………………………2 </p><p>  2.課程設計題目描述和要求……………………………………2 </p><p>  3.課程設計報告內容 ……………………………………………3</p><p&g

3、t;  3.1 所涉及知識點 ……………………………………………3 </p><p>  3.2課程設計的思路以及流程圖 ……………………………3 </p><p>  3.3個人負責程序說明 ………………………………………4</p><p>  3.4課程設計中遇到的問題以及解決方法 …………………11 </p><p>  4.個人設計總

4、結…………………………………………………11 </p><p>  5.參考書目………………………………………………………11 </p><p>  6.附錄源程序代碼………………………………………………11</p><p>  《C語言程序設計》課程設計任務書</p><p><b>  1、課程設計目的</b><

5、;/p><p> ?。?)、熟練掌握C語言課程中所學的理論知識;</p><p> ?。?)、通過綜合C語言的基本知識來解決實際問題;</p><p> ?。?)、加強分析和解決問題的能力。</p><p>  2、課程設計題目描述和要求</p><p> ?。?)課程設計題目:成績信息管理系統。</p>&

6、lt;p> ?。?)課程設計要求:</p><p>  a,設計包含N個學生的數據信息的學生成績管理系統,包括以下信息: </p><p>  學號、 姓名(拼音)、三門課程成績(高數、英語、計算機) </p><p>  b,系統功能包括: </p><p>  1、學生信息的錄入(增加數據)。用數組數據類型賦初值的方法或從鍵盤輸入的

7、方法把學生的數據送到各個數組中(注意要是合法數據),然后把它們輸出顯示。</p><p>  2、學生信息的刪除(刪除數據)。任意輸入一位學生的學號,將它所有的信息從數組中刪除。</p><p>  3、學生信息的瀏覽(查找數據)。任意輸入一位學生的學號,打印出他的所有數據。要求能多次查找。</p><p>  4、學生信息的修改(修改數據)。任意輸入一位學生的學號

8、,打印出所有相關信息后,可對某一項信息進行修改并保存。</p><p>  5、學生信息的計算并排序。計算每個學生三門課程的總分(sum,整型)及平均分(aver,單精度,輸出一位小數),將包括所有數據的數組元素按總分從大到小的順序排序打印出來。</p><p>  6、程序編譯成員及模塊分配</p><p>  主函數的設計—------------</p&

9、gt;<p>  信息錄入模塊的設計--------</p><p>  刪除模塊的設計------------</p><p>  修改模塊的設計------------</p><p>  瀏覽模塊的設計------------</p><p>  計算與排序模塊的設計------</p><p> 

10、 3、課程設計報告內容</p><p>  3.1. 所涉及知識點:</p><p>  指針的定義與引用;函數的定義與調用;局部變量和全局變量大的定義; for循環語句的使用;if語句的使用;break語句的使用;格式輸入與輸出;比較法排序;函數的定義;數組作為函數參數。</p><p>  3.2課程設計的思路以及流程圖</p><p>

11、<b>  一:課程設計思路</b></p><p>  主程序為main(),子程序有個分別為Add(l),Qur(l), Modify(l), Insert(l), Tongji(l), Sort(l), Save(l)。分別可以實現錄入學生信息,刪除學生信息,瀏覽學生信息,修改學生信息,對信息學生排序,以及對學生信息保存。</p><p>  二、課程設計思路及

12、結構圖</p><p>  根據題目的要求,需要一個主程序main()和若干子程序,其如結構圖下:</p><p>  1、初始化函數 STUDENT  *init()</p><p>  這是一個無參函數,里面只有一個語句,它的作用是使鏈表初始化,使head的值為NULL。比如:沒有這個函數的話,在你沒有輸入任何數據的情況下,去執行顯示功能的時候會顯示一

13、些亂碼!</p><p>  2、菜單選擇函數 int menu_select();</p><p>  這是一個無參函數,主要實現“功能選擇”的界面,在這個界面里有顯示系統的九大功能,根據每個功能前面的序號進行選擇,中間還顯示系統當前的時間。等執行完每一個函數功能后,按任一鍵回到主界面也要通過這個函數來實現!</p><p>  3、輸入記錄函數 STUDENT

14、*create()</p><p>  這是一個無參函數,用來執行第學生成績記錄的輸入,當學生為0時停止輸入,函數結束后,帶回一個指向鏈表頭的指針head。</p><p>  算法:先聲明一個首節點head,并將head->next設為NULL。每輸入一個數據就聲明一個新節點p,把p->next設為NULL,并且鏈接到之前列表的尾端。</p><p>

15、<b>  N-S流程圖如下:</b></p><p>  4、顯示記錄函數 void print(STUDENT *head)</p><p>  這是一個不返回值的有參函數,形參為“鏈表頭的指針”,負責對全部學生成績記錄的輸出,不足之處就是不能對學生成績進行分頁顯示。</p><p>  算法:先將p結點的指針指向第一個結點,將p結點(即第

16、一個結點)的數據輸出。然后再將p結點的指針指向p指針的的指針(即下一結點),將p結點(即第一結點)的數據輸出。重復執行此步聚直到p指針指向NULL為止。</p><p><b>  N-S流程圖如下:</b></p><p>  5、查找記錄函數 void search(STUDENT *head)</p><p>  這是一個不返回值的有參函

17、數,形參為“鏈表頭的指針”,實現按學號對某個學生進行查找,并顯示所查找到的記錄。</p><p>  算法:采用線性查找法往下一個節點查找。輸入所要查找的學生的學號s,設一個指針變量p,先指向第一個結點,當strcmp(p->name,s) && p != NULL時,使p后移一個結點,如果p!=NULL,輸出p所指的結點。</p><p><b>  N-

18、S流程圖如下:</b></p><p><b>  源程序如下:</b></p><p>  /*************************************************************</p><p>  作用:用于定位鏈表中符合要求的節點,并返回指向該節點的指針</p><p&

19、gt;  參數:findmess[]保存要查找的具體內容; nameornum[]保存按什么查找;</p><p><b>  在單鏈表l中查找;</b></p><p>  **************************************************************/</p><p>  Node* Locat

20、e(Link l,char findmess[],char nameornum[])</p><p><b>  {</b></p><p><b>  Node *r;</b></p><p>  if(strcmp(nameornum,"num")==0) /*按學號查詢*/</p>

21、<p><b>  {</b></p><p>  r=l->next;</p><p><b>  while(r)</b></p><p><b>  {</b></p><p>  if(strcmp(r->data.num,findmess)==0

22、) /*若找到findmess值的學號*/</p><p><b>  return r;</b></p><p>  r=r->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  els

23、e if(strcmp(nameornum,"name")==0) /*按姓名查詢*/</p><p><b>  {</b></p><p>  r=l->next;</p><p><b>  while(r)</b></p><p><b>  {</

24、b></p><p>  if(strcmp(r->data.name,findmess)==0) /*若找到findmess值的學生姓名*/</p><p><b>  return r;</b></p><p>  r=r->next;</p><p><b>  }</b&g

25、t;</p><p><b>  }</b></p><p>  return 0; /*若未找到,返回一個空指針*/</p><p><b>  }</b></p><p>  /*輸入字符串,并進行長度驗證(長度<lens)*/</p><p>  void str

26、inginput(char *t,int lens,char *notice)</p><p><b>  {</b></p><p>  char n[255];</p><p><b>  do{</b></p><p>  printf(notice); /*顯示提示信息*/</p>

27、;<p>  scanf("%s",n); /*輸入字符串*/</p><p>  if(strlen(n)>lens)printf("\n 超出要求范圍! \n"); /*進行長度校驗,超過lens值重新輸入*/</p><p>  }while(strlen(n)>lens);</p><p> 

28、 strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/</p><p><b>  }</b></p><p>  /*輸入分數,0<=分數<=100)*/</p><p>  int numberinput(char *notice)</p><p><b>  {</b>

29、</p><p><b>  int t=0;</b></p><p><b>  do{</b></p><p>  printf(notice); /*顯示提示信息*/</p><p>  scanf("%d",&t); /*輸入分數*/</p><

30、;p>  if(t>100 || t<0) printf("\n 成績范圍[0,100]! \n"); /*進行分數校驗*/</p><p>  }while(t>100 || t<0);</p><p><b>  return t;</b></p><p><b>  }</

31、b></p><p>  6、刪除記錄函數 STUDENT *delete(STUDENT *head)</p><p>  這是一個有參函數,形參為“鏈表頭的指針”,先輸入要刪除的學生記錄的學號,找到后顯示該學生信息,等確認后便可按“Y”進行刪除。</p><p>  算法:從p指向的第一個結點開始,檢查該結點中的num值是否等于輸入的要求刪除的那個學號。如

32、果相等就將該結點刪除,如不相等,就將p后移一個結點,再如此進行下去,直到遇到表尾為止。</p><p><b>  N-S流程圖如下:</b></p><p>  7、排序函數 STUDENT *sort(STUDENT *head)</p><p>  這是一個有參函數,形參為“鏈表頭的指針”,按學生成績的平均分高低進行排序,還可以顯示名次。

33、</p><p><b>  N-S流程圖:</b></p><p>  8、插入函數 STUDENT *insert(STUDENT *head,STUDENT *new)</p><p>  這是一個有參函數,形參有兩個,一個是“鏈表頭的指針”,一個是“待插入指針”,按照原來成績平均分的高低進行插入,插入后會重新進行排序,并返回。</

34、p><p>  算法:先將學生的成績按平均分由高分到低分進行排序,再插入一個新生的結點,要求按平均分的高低順序插入。先用指針變量p0指向待插入的結點,p1指向第一個結點。如果p0->average<p1->average,則待插入的結點不應插在p1所指的結點之前。此時將p1后移,并使p2指向剛才p1所指的結點。重復以上的步驟,直到p0->average>=p1->average為止

35、。這時將p0指向的結點插到p1所指結點之前。但是如果p1所指的已是表尾結點,則p1就不應后移了。如果p0->average比所有結點的average都小,則應將p0所指的結點插到鏈表末尾。如果插入的位置既不在第一個結點之前,又不在表尾結點之后,則將p0的值賦給p2->,使p2->next指向待插入的結點,然后將p1的值賦給p0->next,使得p0->next指向p1指向的變量。如果插入位置為第一個結點之前

36、,則將p0賦給head,將p1賦給p0->next。如果要插到表尾之后,應將p0賦給p1->next,NULL賦給p0->next。最后再調用排序的函數,將學生成績重新排序.</p><p><b>  N-S流程圖如下:</b></p><p>  9、保存數據到文件函數 void save(STUDENT *head)</p>&l

37、t;p>  這是一個不返回值的有參函數,形參為“鏈表頭的指針”,可以把學生記錄保存在電腦上由自己任意命名的二進制文件。</p><p><b>  N-S流程圖如下:</b></p><p>  10、從文件讀數據函數 STUDENT *load()</p><p>  這是一個不返回值的有參函數,形參為“鏈表頭的指針”,根據輸入的文件地

38、址進行讀取。</p><p><b>  N-S流程圖如下:</b></p><p>  3.3 個人負責程序說明</p><p>  學生信息的瀏覽(查找數據)。任意輸入一位學生的學號,打印出他的所有數據。要求能多次查找。</p><p>  3.4課程設計中遇到的問題以及解決方法</p><p&g

39、t; ?。?)剛開始沒有那個初始化函數,程序運行后,沒有輸入任何數據就試得去執行顯示功能,結果顯示的是一些亂碼!加入初始化函數后,這種現象也隨之消失。</p><p> ?。?)剛開始時,先把成績按平均分排序,再插入一個學生的成績,執行顯示功能,雖然插入的學生的成績能正常插入,但該學生的名次為0。后來,在插入成績之后,調用排序函數,把所有成績重新排序一次。</p><p> ?。?)在輸入

40、函數中設了一個無限循環,可以輸入無數個學生的成績信息,當學號為0的時候則停止輸入。</p><p> ?。?)輸入太多個學生的成績時,屏幕顯示不能控制為一頁一頁顯示,所以為了方便起見,不要輸入太多記錄,十七左右為最佳。</p><p> ?。?)在沒有輸入任何信息的情況下,去執行排序功能,最后顯示有一個記錄,學號、姓名為空白,成績都為0,名次為1。</p><p>

41、 ?。?)在輸入選項時不能輸入字母,否則會死循環,建議不要亂輸字母。</p><p><b>  4、個人設計總結</b></p><p>  C語言課程設計,感覺自己收獲了不少,通過這個課程設計提高了對編程語言的興趣,同時加深了對C語言的理解!</p><p>  本來按老師建議的是用結構體數組,但是由于沒有學習結構體數組,而自己自學起來我們

42、個人感覺指針更簡單一些,所以采用了指針的方法。</p><p>  鏈表本來上課是沒有學的,但這個課程設計里面主要都是用鏈表,因為要達到這樣的功能,使用鏈表相當方便,但不容易理解,所以在這方面我很了很多的時間看課本和參考課外書,使C語言的知識強化了不少。</p><p>  在做課程設計的過程中,發現了平時很多沒有注意到的問題,例如:返回值函數和不返回值函數兩者在主函數中的調用是不同的等等

43、。</p><p>  這次課程設計雖然花了我不少時間,但正是這些時間,讓我見識到了C語言的重要性。</p><p><b>  5、參考書目</b></p><p>  Schildt H著,戴健鵬譯,C語言大全(第二版),電子工業出版社,京,1994年</p><p>  譚浩強,《c程序設計教程》,清華大學出版社,

44、北京,2005年</p><p>  譚浩強,《c程序設計題解與上機指導》,清華大學出版社,北京,2006年</p><p><b>  6、附錄源程序代碼</b></p><p>  #include "stdio.h" /*標準輸入輸出函數庫*/</p><p>  #include &quo

45、t;stdlib.h" /*標準函數庫*/</p><p>  #include "string.h" /*字符串函數庫*/</p><p>  #include "conio.h" /*屏幕操作函數庫*/</p><p>  #define HEADER1 " ------------------

46、----------學生成績表---------------------------------- \n"</p><p>  #define HEADER2 " | 學號 | 姓名 |計算機|數學|英語 | 總分 | 平均分 |名次 | \n"</p><p>  #define HEADER3 "

47、 |---------------|-------------|-----|-----|-----|--------|-------|-----| "</p><p>  #define FORMAT " | %-10s |%-14s|%4d| %4d| %4d| %4d | %.2f |%4d |\n"</p><p>  #defin

48、e DATA p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci</p><p>  #define END " ---------------------------

49、------------------------------------------ \n"</p><p>  int saveflag=0; /*是否需要存盤的標志變量*/</p><p>  /*定義與學生有關的數據結構*/</p><p>  typedef struct student /*標記為student*/</p>

50、<p><b>  {</b></p><p>  char num[10]; /*學號*/</p><p>  char name[15]; /*姓名*/</p><p>  int cgrade; /*計算機成績*/</p><p>  int mgrade; /*數學成績*/<

51、/p><p>  int egrade; /*英語成績*/</p><p>  int total; /*總分*/</p><p>  float ave; /*平均分*/</p><p>  int mingci; /*名次*/</p><p><b>  };</b&

52、gt;</p><p>  /*定義每條記錄或結點的數據結構,標記為:node*/</p><p>  typedef struct node</p><p><b>  {</b></p><p>  struct student data; /*數據域*/</p><p>  struct n

53、ode *next; /*指針域*/</p><p>  }Node,*Link; /*Node為node類型的結構變量,*Link為node類型的指針變量*/</p><p>  void menu() /*主菜單*/</p><p><b>  {</b></p><p>  system("cl

54、s"); /*調用DOS命令,清屏.與clrscr()功能相同*/</p><p>  cprintf(" 學生成績管理系統 \n");</p><p>  cprintf(" *************************菜單*********************************

55、\n");</p><p>  cprintf(" * 1 輸入記錄 * 2 刪除記錄 *\n");</p><p>  cprintf(" * 3 查詢記錄 * 4 修改記錄 *\n"

56、);</p><p>  cprintf(" * 5 添加記錄 * 6 統計打印記錄 *\n");</p><p>  cprintf(" * 7 排序打印記錄 * 8 保存記錄 *\n");</p>

57、<p>  cprintf(" * 0 退出系統 *\n");</p><p>  cprintf(" **************************************************************\n");</p

58、><p>  /*cprintf()送格式化輸出至文本窗口屏幕中*/</p><p><b>  }</b></p><p>  void printheader() /*格式化輸出表頭*/</p><p><b>  {</b></p><p>  printf(HEADER1

59、);</p><p>  printf(HEADER2);</p><p>  printf(HEADER3);</p><p><b>  }</b></p><p>  void printdata(Node *pp) /*格式化輸出表中數據*/</p><p><b>  {<

60、;/b></p><p><b>  Node* p;</b></p><p><b>  p=pp;</b></p><p>  printf(FORMAT,DATA);</p><p><b>  }</b></p><p>  void Wr

61、ong() /*輸出按鍵錯誤信息*/</p><p><b>  {</b></p><p>  printf("\n\n\n\n\n***********錯誤:輸入有誤! 按任意鍵繼續**********\n");</p><p>  getchar();</p><p><b>  }&

62、lt;/b></p><p>  void Nofind() /*輸出未查找此學生的信息*/</p><p><b>  {</b></p><p>  printf("\n=====>未找到該學生!\n");</p><p><b>  }</b></p>

63、;<p>  void Disp(Link l) /*顯示單鏈表l中存儲的學生記錄,內容為student結構中定義的內容*/</p><p><b>  {</b></p><p><b>  Node *p;</b></p><p>  p=l->next; /*l存儲的是單鏈表中頭結點的指針,該頭結

64、點沒有存儲學生信息,指針域指向的后繼結點才有學生信息*/</p><p>  if(!p) /*p==NULL,NUll在stdlib中定義為0*/</p><p><b>  {</b></p><p>  printf("\n=====>沒有學生記錄!\n");</p><p>  getc

65、har();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  printf("\n\n");</p><p>  printheader(); /*輸出表格頭部*/</p><p>  whi

66、le(p) /*逐條輸出鏈表中存儲的學生信息*/</p><p><b>  {</b></p><p>  printdata(p);</p><p>  p=p->next; /*移動直下一個結點*/</p><p>  printf(HEADER3);</p><p><b

67、>  }</b></p><p>  getchar();</p><p><b>  }</b></p><p>  /*************************************************************</p><p>  作用:用于定位鏈表中符合要求的節點,并

68、返回指向該節點的指針</p><p>  參數:findmess[]保存要查找的具體內容; nameornum[]保存按什么查找;</p><p><b>  在單鏈表l中查找;</b></p><p>  **************************************************************/</p

69、><p>  Node* Locate(Link l,char findmess[],char nameornum[])</p><p><b>  {</b></p><p><b>  Node *r;</b></p><p>  if(strcmp(nameornum,"num"

70、;)==0) /*按學號查詢*/</p><p><b>  {</b></p><p>  r=l->next;</p><p><b>  while(r)</b></p><p><b>  {</b></p><p>  if(strcmp

71、(r->data.num,findmess)==0) /*若找到findmess值的學號*/</p><p><b>  return r;</b></p><p>  r=r->next;</p><p><b>  }</b></p><p><b>  }</b&g

72、t;</p><p>  else if(strcmp(nameornum,"name")==0) /*按姓名查詢*/</p><p><b>  {</b></p><p>  r=l->next;</p><p><b>  while(r)</b></p>

73、<p><b>  {</b></p><p>  if(strcmp(r->data.name,findmess)==0) /*若找到findmess值的學生姓名*/</p><p><b>  return r;</b></p><p>  r=r->next;</p>&

74、lt;p><b>  }</b></p><p><b>  }</b></p><p>  return 0; /*若未找到,返回一個空指針*/</p><p><b>  }</b></p><p>  /*輸入字符串,并進行長度驗證(長度<lens)*/<

75、;/p><p>  void stringinput(char *t,int lens,char *notice)</p><p><b>  {</b></p><p>  char n[255];</p><p><b>  do{</b></p><p>  printf(

76、notice); /*顯示提示信息*/</p><p>  scanf("%s",n); /*輸入字符串*/</p><p>  if(strlen(n)>lens)printf("\n 超出要求范圍! \n"); /*進行長度校驗,超過lens值重新輸入*/</p><p>  }while(strlen(n)>

77、lens);</p><p>  strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/</p><p><b>  }</b></p><p>  /*輸入分數,0<=分數<=100)*/</p><p>  int numberinput(char *notice)</p><

78、;p><b>  {</b></p><p><b>  int t=0;</b></p><p><b>  do{</b></p><p>  printf(notice); /*顯示提示信息*/</p><p>  scanf("%d",&

79、;t); /*輸入分數*/</p><p>  if(t>100 || t<0) printf("\n 成績范圍[0,100]! \n"); /*進行分數校驗*/</p><p>  }while(t>100 || t<0);</p><p><b>  return t;</b></p>

80、<p><b>  }</b></p><p>  /*增加學生記錄*/</p><p>  void Add(Link l)</p><p><b>  {</b></p><p>  Node *p,*r,*s; /*實現添加操作的臨時的結構體指針變量*/</p>&

81、lt;p>  char ch,flag=0,num[10];</p><p><b>  r=l;</b></p><p>  s=l->next;</p><p>  system("cls");</p><p>  Disp(l); /*先打印出已有的學生信息*/</p>

82、<p>  while(r->next!=NULL)</p><p>  r=r->next; /*將指針移至于鏈表最末尾,準備添加記錄*/</p><p>  while(1) /*一次可輸入多條記錄,直至輸入學號為0的記錄結點添加操作*/</p><p><b>  {</b></p><p>

83、;  while(1) /*輸入學號,保證該學號沒有被使用,若輸入學號為0,則退出添加記錄操作*/</p><p><b>  {</b></p><p>  stringinput(num,10,"輸入學號(按'0'返回菜單):"); /*格式化輸入學號并檢驗*/</p><p><b>  fl

84、ag=0;</b></p><p>  if(strcmp(num,"0")==0) /*輸入為0,則退出添加操作,返回主界面*/</p><p><b>  {return;}</b></p><p>  s=l->next;</p><p>  while(s) /*查詢該學號是

85、否已經存在,若存在則要求重新輸入一個未被占用的學號*/</p><p>  {if(strcmp(s->data.num,num)==0)</p><p><b>  {</b></p><p><b>  flag=1;</b></p><p><b>  break;</b

86、></p><p><b>  }</b></p><p>  s=s->next;</p><p><b>  }</b></p><p>  if(flag==1) /*提示用戶是否重新輸入*/</p><p>  { getchar();</p>

87、<p>  printf("=====>學號 %s 不存在,重新輸入?(y/n):",num);</p><p>  scanf("%c",&ch);</p><p>  if(ch=='y'||ch=='Y')</p><p><b>  continue

88、;</b></p><p><b>  else</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><

89、b>  {break;}</b></p><p><b>  }</b></p><p>  p=(Node *)malloc(sizeof(Node)); /*申請內存空間*/</p><p><b>  if(!p)</b></p><p><b>  {</b

90、></p><p>  printf("\n 分配失敗 "); /*如沒有申請到,打印提示信息*/</p><p>  return ; /*返回主界面*/</p><p><b>  }</b></p><p>  strcpy(p->data.num,num);

91、 /*將字符串num拷貝到p->data.num中*/</p><p>  stringinput(p->data.name,15,"Name:");</p><p>  p->data.cgrade=numberinput("Computer Score[0-100]:"); /*輸入并檢驗分數,分數必須在0-100之間*/<

92、;/p><p>  p->data.mgrade=numberinput("Math Score[0-100]:"); /*輸入并檢驗分數,分數必須在0-100之間*/</p><p>  p->data.egrade=numberinput("English Score[0-100]:"); /*輸入并檢驗分數,分數必須在0-10

93、0之間*/</p><p>  p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; /*計算總分*/</p><p>  p->data.ave=(float)(p->data.total/3); /*計算平均分*/</p><p>  p->data.mi

94、ngci=0;</p><p>  p->next=NULL; /*表明這是鏈表的尾部結點*/</p><p>  r->next=p; /*將新建的結點加入鏈表尾部中*/</p><p><b>  r=p;</b></p><p>  saveflag=1;</p><p><

95、;b>  }</b></p><p><b>  return ;</b></p><p><b>  }</b></p><p>  void Qur(Link l) /*按學號或姓名,查詢學生記錄*/</p><p><b>  {</b></p&g

96、t;<p>  int select; /*1:按學號查,2:按姓名查,其他:返回主界面(菜單)*/</p><p>  char searchinput[20]; /*保存用戶輸入的查詢內容*/</p><p><b>  Node *p;</b></p><p>  if(!l->next) /*若鏈表為空*/</

97、p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("\n=====>沒有學生記錄!\n");</p><p>  getchar();</p><p><b>  return

98、;</b></p><p><b>  }</b></p><p>  system("cls");</p><p>  printf("\n =====>1 按學號查詢 =====>2 按姓名查詢\n");</p><p>  printf(&q

99、uot; 請選擇[1,2]:");</p><p>  scanf("%d",&select);</p><p>  if(select==1) /*按學號查詢*/</p><p><b>  {</b></p><p>  stringinput(searchinpu

100、t,10,"input the existing student number:");</p><p>  p=Locate(l,searchinput,"num");/*在l中查找學號為searchinput值的節點,并返回節點的指針*/</p><p>  if(p) /*若p!=NULL*/</p><p><b&

101、gt;  {</b></p><p>  printheader();</p><p>  printdata(p);</p><p>  printf(END);</p><p>  printf("按任意鍵返回");</p><p>  getchar();</p>&

102、lt;p><b>  }</b></p><p><b>  else</b></p><p><b>  Nofind();</b></p><p>  getchar();</p><p><b>  }</b></p><p

103、>  else if(select==2) /*按姓名查詢*/</p><p><b>  {</b></p><p>  stringinput(searchinput,15,"input the existing student name:");</p><p>  p=Locate(l,searchinput,&

104、quot;name");</p><p><b>  if(p)</b></p><p><b>  {</b></p><p>  printheader();</p><p>  printdata(p);</p><p>  printf(END);</

105、p><p>  printf("按任意鍵返回");</p><p>  getchar();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  Nofind();</b>&l

106、t;/p><p>  getchar();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  Wrong();</b></p><p>  getchar();</p><p

107、><b>  }</b></p><p>  /*刪除學生記錄:先找到保存該學生記錄的節點,然后刪除該節點*/</p><p>  void Del(Link l)</p><p><b>  {</b></p><p><b>  int sel;</b></p&

108、gt;<p>  Node *p,*r;</p><p>  char findmess[20];</p><p>  if(!l->next)</p><p>  { system("cls");</p><p>  printf("\n=====>沒有學生記錄!\n");&

109、lt;/p><p>  getchar();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  system("cls");</p><p><b>  Disp(l);</b>

110、;</p><p>  printf("\n =====>1 按學號刪除 =====>2 按姓名刪除\n");</p><p>  printf(" 請選擇[1,2]:");</p><p>  scanf("%d",&sel);</p>

111、<p>  if(sel==1)</p><p><b>  {</b></p><p>  stringinput(findmess,10,"輸入要刪除學生的學號:");</p><p>  p=Locate(l,findmess,"num");</p><p> 

112、 if(p) /*p!=NULL*/</p><p><b>  {</b></p><p><b>  r=l;</b></p><p>  while(r->next!=p)</p><p>  r=r->next;</p><p>  r->next=

113、p->next;/*將p所指節點從鏈表中去除*/</p><p>  free(p); /*釋放內存空間*/</p><p>  printf("\n=====>刪除成功!\n");</p><p>  getchar();</p><p>  saveflag=1;</p><p>&

114、lt;b>  }</b></p><p><b>  else</b></p><p><b>  Nofind();</b></p><p>  getchar();</p><p><b>  }</b></p><p>  els

115、e if(sel==2) /*先按姓名查詢到該記錄所在的節點*/</p><p><b>  {</b></p><p>  stringinput(findmess,15,"輸入要刪除學生的姓名");</p><p>  p=Locate(l,findmess,"name");</p>&

116、lt;p><b>  if(p)</b></p><p><b>  {</b></p><p><b>  r=l;</b></p><p>  while(r->next!=p)</p><p>  r=r->next;</p><p&

117、gt;  r->next=p->next;</p><p><b>  free(p);</b></p><p>  printf("\n=====>刪除成功!\n");</p><p>  getchar();</p><p>  saveflag=1;</p>&l

118、t;p><b>  }</b></p><p><b>  else</b></p><p><b>  Nofind();</b></p><p>  getchar();</p><p><b>  }</b></p><p&

119、gt;<b>  else</b></p><p><b>  Wrong();</b></p><p>  getchar();</p><p><b>  }</b></p><p>  /*修改學生記錄。先按輸入的學號查詢到該記錄,然后提示用戶修改學號之外的值,學號不能修

120、改*/</p><p>  void Modify(Link l)</p><p><b>  {</b></p><p><b>  Node *p;</b></p><p>  char findmess[20];</p><p>  if(!l->next)<

121、;/p><p>  { system("cls");</p><p>  printf("\n=====>沒有學生記錄!\n");</p><p>  getchar();</p><p><b>  return;</b></p><p><b&g

122、t;  }</b></p><p>  system("cls");</p><p>  printf("修改學生記錄");</p><p><b>  Disp(l);</b></p><p>  stringinput(findmess,10,"input

123、 the existing student number:"); /*輸入并檢驗該學號*/</p><p>  p=Locate(l,findmess,"num"); /*查詢到該節點*/</p><p>  if(p) /*若p!=NULL,表明已經找到該節點*/</p><p><b>  {</b></

124、p><p>  printf("學號:%s,\n",p->data.num);</p><p>  printf("姓名:%s,",p->data.name);</p><p>  stringinput(p->data.name,15,"input new name:");</p>

125、;<p>  printf("計算機成績:%d,",p->data.cgrade);</p><p>  p->data.cgrade=numberinput("Computer Score[0-100]:");</p><p>  printf("高數成績:%d,",p->data.mgrade)

126、;</p><p>  p->data.mgrade=numberinput("Math Score[0-100]:");</p><p>  printf("英語成績:%d,",p->data.egrade);</p><p>  p->data.egrade=numberinput("Engli

127、sh Score[0-100]:");</p><p>  p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;</p><p>  p->data.ave=(float)(p->data.total/3);</p><p>  p->data.mi

128、ngci=0;</p><p>  printf("\n=====>修改成功!\n");</p><p><b>  Disp(l);</b></p><p>  saveflag=1;</p><p><b>  }</b></p><p><

129、;b>  else</b></p><p><b>  Nofind();</b></p><p>  getchar();</p><p><b>  }</b></p><p>  /*插入記錄:按學號查詢到要插入的節點的位置,然后在該學號之后插入一個新節點。*/</p&

130、gt;<p>  void Insert(Link l)</p><p><b>  {</b></p><p>  Link p,v,newinfo; /*p指向插入位置,newinfo指新插入記錄*/</p><p>  char ch,num[10],s[10]; /*s[]保存插入點位置之前的學號,num[]保存輸入的新記

131、錄的學號*/</p><p>  int flag=0;</p><p>  v=l->next;</p><p>  system("cls");</p><p><b>  Disp(l);</b></p><p><b>  while(1)</b&

132、gt;</p><p>  { stringinput(s,10,"please input insert location after the Number:");</p><p>  flag=0;v=l->next;</p><p>  while(v) /*查詢該學號是否存在,flag=1表示該學號存在*/</p>&

133、lt;p><b>  {</b></p><p>  if(strcmp(v->data.num,s)==0) {flag=1;break;}</p><p>  v=v->next;</p><p><b>  }</b></p><p>  if(flag==1)</p&

134、gt;<p>  break; /*若學號存在,則進行插入之前的新記錄的輸入操作*/</p><p><b>  else</b></p><p>  { getchar();</p><p>  printf("\n=====>學號 %s 不存在,重新輸入?(y/n):",s);</p>

135、<p>  scanf("%c",&ch);</p><p>  if(ch=='y'||ch=='Y')</p><p>  {continue;}</p><p><b>  else</b></p><p><b>  {return;

136、}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*以下新記錄的輸入操作與Add()相同*/</p><p>  stringinput(num,10,"input new student Number:"

137、;);</p><p>  v=l->next;</p><p><b>  while(v)</b></p><p><b>  {</b></p><p>  if(strcmp(v->data.num,num)==0)</p><p><b>  

138、{</b></p><p>  printf("=====>對不起,學號:'%s' 重復 !\n",num);</p><p>  printheader();</p><p>  printdata(v);</p><p>  printf("\n");</p&

溫馨提示

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

評論

0/150

提交評論