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

下載本文檔

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

文檔簡介

1、<p>  c語言及數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計</p><p>  題  目 : 學(xué)生信息管理系統(tǒng) </p><p>  專 業(yè): </p><p>  姓 名: </p&

2、gt;<p>  學(xué) 號: </p><p>  同組其他學(xué)生(學(xué)號): </p><p>  2013年  月   日</p><p><b>  目 錄</b></p><p><

3、b>  一、需求分析3</b></p><p><b>  二、總體設(shè)計3</b></p><p><b>  三、詳細設(shè)計5</b></p><p><b>  四、調(diào)試與測試6</b></p><p><b>  五、測試結(jié)果7<

4、/b></p><p><b>  六、用戶手冊9</b></p><p><b>  七、附錄9</b></p><p><b>  一、需求分析</b></p><p>  每年九月份都有大量新生來到學(xué)校報道,使學(xué)校管理學(xué)生工作量增大,為此我們設(shè)計一學(xué)生信息管理系

5、統(tǒng),學(xué)生信息包括:學(xué)號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。使之能提供以下功能:</p><p> ?。?)系統(tǒng)以菜單方式工作</p><p> ?。?)學(xué)生信息錄入功能---輸入</p><p> ?。?)學(xué)生信息瀏覽功能---輸出</p><p> ?。?)查詢、排序功能---算法按學(xué)號查詢、按姓名查詢、學(xué)生信息的刪除

6、與修改(可選項)</p><p><b>  二、總體設(shè)計</b></p><p><b>  組成框圖</b></p><p><b>  流程圖</b></p><p>  錄入 瀏覽</p>&l

7、t;p>  查詢 修改&刪除</p><p><b>  三、詳細設(shè)計</b></p><p>  主函數(shù)通過在while循環(huán)結(jié)構(gòu)中嵌入switch分支結(jié)構(gòu)實現(xiàn)操作選擇功能。</p><p> ?。?)Record錄入函數(shù)</p><p>

8、;  建立一個包含學(xué)生全部信息的結(jié)構(gòu)體,申請空間,其指針為p0,存入學(xué)生各項對應(yīng)的數(shù)據(jù)。</p><p> ?。?)Insert插入函數(shù):</p><p>  按輸入的數(shù)據(jù)存儲在一個stu類型的指針里,若原來鏈表里沒有元素,則將此作為第一個元素;若原來的鏈表里有元素,則將指向頭結(jié)點指針存儲的學(xué)號與頭指針下一個的學(xué)號大小進行比較,小的在前大的在后,之后指向頭結(jié)點處的指正后移,進行比較,直到尾

9、結(jié)點為止。</p><p>  在進行比較的while函數(shù)內(nèi),每比較一次,計算總?cè)藬?shù)的TOTAL_NUM自加。</p><p> ?。?)Display瀏覽函數(shù):</p><p>  將傳給Display函數(shù)的指針P所指向的結(jié)構(gòu)體的各項數(shù)據(jù)輸出以便核對信息。</p><p> ?。?)DisplayAll瀏覽函數(shù):</p>&l

10、t;p>  指針指向鏈表頭結(jié)點,在if語句中嵌套do-while語句將學(xué)生信息按學(xué)號從大到小進行逐一輸出。</p><p>  (5)Query查詢函數(shù):</p><p>  首先使用switch語句生成菜單,實現(xiàn)操作選擇功能。分三個部分按學(xué)號查詢、按姓名查詢和取消返回上一層。按學(xué)號查詢時調(diào)用while語句對學(xué)號檢索,再調(diào)用if語句進行判斷,最后輸出想要查詢的信息。按姓名查詢的方法跟

11、按學(xué)號查詢的一樣。</p><p> ?。?)Del刪除函數(shù):</p><p>  使用while語句進行檢索,直接刪除學(xué)生信息。</p><p> ?。?)Change修改函數(shù):</p><p>  建立devise函數(shù),生成菜單,用switch語句進行分叉選擇功能,選擇項目進行相應(yīng)的信息輸入。在Change函數(shù)中使用while語句進行檢索

12、后再調(diào)用devise函數(shù)修改信息。實現(xiàn)學(xué)生信息修改。</p><p><b>  四、調(diào)試與測試</b></p><p>  1、進行多次運行,發(fā)現(xiàn)電話那欄的電話一打長就會顯示一樣的數(shù)字,打短的數(shù)字就可以。我們原本是使用長整型來定義電話號碼,想說空間不夠,后來改用字符型,用字符串記錄電話號碼程序運行結(jié)果正確。</p><p>  2、程序設(shè)計初

13、就在考慮退出與返回有什么差別,如果返回了主菜單那退出用什么,關(guān)于這個問題看了許多網(wǎng)上的資料,發(fā)現(xiàn)許多程序都有exit(0)的函數(shù),所以去查了不少關(guān)于exit的函數(shù)內(nèi)容,最后退出就用了exit(0),但是又提醒說要編寫exit函數(shù),之后發(fā)現(xiàn)要加入<stdlib.h>的頭文件,程序可以正常運行。</p><p>  3、程序在180行顯示說readData函數(shù)不可以返回值,所以在if條件句中將return

14、 0刪除了,不過這個程序在學(xué)校的機房即使不刪return 0也是可以運行的,關(guān)于這點很是不解,還有待解決。</p><p><b>  五、測試結(jié)果</b></p><p>  1、進入系統(tǒng)界面,輸入密碼,超過三次會自動退出。</p><p>  2、選1時錄入學(xué)生信息,編輯完后會繼續(xù)顯示菜單</p><p>  3、選

15、2瀏覽學(xué)生信息 ,之后繼續(xù)返回菜單界面,為節(jié)省空間菜單界面暫不截圖</p><p>  4、選擇3查詢學(xué)生信息會有按學(xué)號與按姓名查詢。下圖是先按學(xué)號查詢的截圖。</p><p>  5、按姓名查詢時,如果查無此人會顯示“沒有該學(xué)生信息,請核對?!敝蠓祷厣弦粚?,按姓名查詢。顯示學(xué)生信息后可以選擇取消返回主菜單。</p><p>  6、選擇4刪除學(xué)生,輸入學(xué)號刪除學(xué)

16、生的信息。之后會返回主菜單</p><p>  7選擇5修改學(xué)生信息,按學(xué)號輸入,之后按顯示輸入即可。</p><p>  用幾組測試數(shù)據(jù)進行測試算法設(shè)計的正確性。(附上程序運行的截圖)</p><p><b>  六、用戶手冊</b></p><p>  1程序一開始會顯示歡迎界面,按要求輸入密碼,3次錯誤會退出程序。

17、</p><p>  2 密碼正確后會顯示主菜單,按要求輸入您的需求。</p><p><b>  七、附錄</b></p><p>  源程序清單和結(jié)果:源程序要加注釋。結(jié)果要包括測試數(shù)據(jù)和運行結(jié)果。</p><p>  /* Note:Your choice is C IDE */</p><p&

18、gt;  #include <stdio.h></p><p>  #include <malloc.h></p><p>  #include <string.h></p><p>  #include <io.h></p><p>  #include <stdlib.h><

19、;/p><p>  #define NULL 0</p><p>  #define LEN sizeof(struct student)</p><p>  #define FILE_DATA_PATH "c:\student.txt" </p><p>  struct student </p><

20、p>  { long int num;</p><p>  char name[20];</p><p><b>  int age;</b></p><p>  char sex[4];</p><p>  char birthday[10];</p><p>  char address

21、[30];</p><p>  char tele_num[13];</p><p>  char E_mail[20];</p><p>  struct student *next;};</p><p>  int TOTAL_NUM = 0;</p><p>  struct student *head = NU

22、LL;</p><p>  void welcome();</p><p>  void mainmenu();</p><p>  void record();</p><p>  void insert(struct student *stu);</p><p>  void display(struct stud

23、ent *stu);</p><p>  void displayAll();void query();</p><p>  void query_by_num();void query_by_name();</p><p>  void readData();</p><p>  void writeData();</p>&

24、lt;p>  void freeAll();</p><p>  void del();</p><p>  void change();</p><p>  void devise(struct student *p);</p><p>  int main(){ </p><p>  char user

25、PWD[7]; int i;</p><p>  welcome(); </p><p>  for(i = 0; i < 3; i++) { </p><p>  printf("\n密碼為123\n"); </p><p>  printf(&quo

26、t;\n請輸入您的密碼:"); </p><p>  scanf("%s", userPWD); </p><p>  if (strcmp(userPWD,"123")==0) </p><p>  { //密碼正確,顯示主菜單

27、 </p><p>  mainmenu(); break; } </p><p>  else </p><p>  { if (i < 2) </p><p>  { //用戶名或密碼錯誤,提示用戶重新輸入

28、 </p><p>  printf("密碼錯誤,請重新輸入!"); } </p><p>  else { //連續(xù)3次輸錯用戶名或密碼,退出系統(tǒng)。 </p><p>  printf("

29、;您已連續(xù)3次將密碼輸錯,系統(tǒng)將退出!"); </p><p>  } } } </p><p>  return 0;}//顯示歡迎信息</p><p>  void welcome(){ </p><p>  printf("+~~~~~~~~~~~~~~~~~~~~~~~

30、~~~~+\n"); </p><p>  printf("| |\n"); </p><p>  printf("| 歡迎使用學(xué)生信息管理系統(tǒng) |\n"); </p><p>  printf("|

31、 |\n"); </p><p>  printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n");}//系統(tǒng)主菜單</p><p>  void mainmenu(){ int choice; choice = -1; </p><p>  readData(); </

32、p><p>  printf("\n溫馨提示:為保證您的操作得到保存,請按正常順序退出系統(tǒng)^_^\n"); </p><p><b>  do </b></p><p>  { printf("\n\n\n"); </p><p>  printf("

33、;\t\t\t--------------------------------\n"); </p><p>  printf("\t\t\t+ 學(xué)生信息管理系統(tǒng) |\n"); </p><p>  printf("\t\t\t--------------------------------\n");

34、 </p><p>  printf("\t\t\t+ 1----錄入學(xué)生信息 |\n"); </p><p>  printf("\t\t\t+ 2----瀏覽學(xué)生信息 |\n"); </p><p>  printf("\t\t\t+ 3--

35、--查詢學(xué)生信息 |\n"); </p><p>  printf("\t\t\t+ 4----刪除學(xué)生信息 |\n"); </p><p>  printf("\t\t\t+ 5----修改學(xué)生信息 |\n"); </p><p>  printf("

36、\t\t\t+ 0----退出系統(tǒng) |\n"); </p><p>  printf("\t\t\t--------------------------------\n"); </p><p>  printf("請輸入您的選擇:"); </p><p>  

37、scanf("%d", &choice); </p><p>  switch(choice) { </p><p>  case 0: writeData(); freeAll(); exit(0); </p><p>  case

38、 1: record(); break; </p><p>  case 2: displayAll(); break; </p><p>  case 3: query(); break; </p><p>  case

39、 4: del(); break; </p><p>  case 5: change(); break; </p><p>  default: printf("\n無效選項!"); break; } }

40、 </p><p>  while(choice != 0);}//錄入學(xué)生信息</p><p>  void record(){ struct student *p0; </p><p>  p0 = (struct student *)malloc(LEN); </p><p>  printf("請輸入學(xué)生的學(xué)號:&

41、quot;); </p><p>  scanf("%ld",&p0->num); </p><p>  printf("請輸入學(xué)生的姓名:"); </p><p>  scanf("%s",p0->name); </p><p>  printf(&qu

42、ot;請輸入學(xué)生的年齡:"); </p><p>  scanf("%d",&p0->age); </p><p>  printf("請輸入學(xué)生的性別:"); </p><p>  scanf("%s",p0->sex); </p><p>  pri

43、ntf("請輸入學(xué)生的出生年月:"); </p><p>  scanf("%s",p0->birthday); </p><p>  printf("請輸入學(xué)生的地址:"); </p><p>  scanf("%s",p0->address); </p>&

44、lt;p>  printf("請輸入學(xué)生的電話:"); </p><p>  scanf("%s",p0->tele_num); </p><p>  printf("請輸入學(xué)生的E-mail:"); </p><p>  scanf("%s",p0->E_mail);

45、 </p><p>  insert(p0); </p><p>  printf("該學(xué)生的信息為:\n"); </p><p>  printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");

46、</p><p>  printf("學(xué)號\t姓名\t年齡\t性別\t出生年月\t\t地址\t電話\tE-mail\n"); </p><p>  display(p0);}</p><p>  void insert(struct student *stu)//根據(jù)學(xué)號對學(xué)生進行排序//</p><p><b>

47、;  { </b></p><p>  struct student *p0, *p1, *p2; p1 = head; </p><p>  p0 = stu; </p><p>  if(head == NULL) { head = p0; p0->next = NULL; }</p><p>  else {

48、 while((p0->num > p1->num)&&(p1->next != NULL)) </p><p>  { p2 = p1; p1 = p1->next; } </p><p>  if(p0->num <= p1->num) { if(head == p1) head = p0;&l

49、t;/p><p>  else p2->next = p0; </p><p>  p0->next = p1; } </p><p>  else { p1->next = p0; p0->next = NULL; } } </p><p>  TOTAL_NUM++;}</p>

50、<p>  void display(struct student *p){ </p><p>  printf("%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->

51、E_mail);}//瀏覽學(xué)生信息</p><p>  void displayAll(){ </p><p>  struct student *p; </p><p>  printf("學(xué)生總數(shù):%d\n", TOTAL_NUM); </p><p>  p = head; </p><p>

52、;  if(head != NULL) { </p><p>  printf("\n學(xué)號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"); </p><p>  printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

53、^^^^^"); </p><p>  do { display(p); p = p->next; } while(p != NULL); } printf("\n");}//查詢學(xué)生信息</p><p>  void query(){ int choice; </p><p>  choice = -1;

54、</p><p>  do { printf("\n"); </p><p>  printf("+--------------------+\n"); </p><p>  printf("| 按學(xué)號查詢 請按 1 |\n"); </p&

55、gt;<p>  printf("| 按姓名查詢 請按 2 |\n"); </p><p>  printf("| 取消 請按 0 |\n"); </p><p>  printf("+--------------------+\n"); </p&g

56、t;<p>  printf("請輸入您的選擇:"); </p><p>  scanf("%d", &choice); </p><p>  switch(choice) { case 0: return;</p><p>  case 1:que

57、ry_by_num();break; </p><p>  case 2:query_by_name(); break; </p><p>  default: printf("\n無效選項!");break; } } </p><p>  while(choice !=

58、 0);}//按學(xué)號查詢學(xué)生信息</p><p>  void query_by_num(){ </p><p><b>  int num; </b></p><p>  struct student *p1; </p><p>  printf("請輸入學(xué)生的學(xué)號:"); </p>

59、<p>  scanf("%ld", &num); </p><p>  if(head==NULL) { printf("無學(xué)生記錄!\n"); return; } </p><p><b>  p1=head; </b></p><p>  while(num!=p1->

60、num && p1->next!=NULL) p1=p1->next; </p><p>  if(num == p1->num) { </p><p>  printf("\n學(xué)號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"); </p><p>  printf(&qu

61、ot;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); </p><p>  display(p1); } else printf("沒有該學(xué)生記錄,請核對!");}//按姓名查詢學(xué)生信息</p><p>  void query_b

62、y_name(){ char name[20]; struct student *p1; printf("請輸入學(xué)生的姓名:"); </p><p>  scanf("%s", name); if(head==NULL) { printf("無學(xué)生記錄!\n"); return; } p1=head; </p><p>

63、  while(strcmp(name, p1->name) && p1->next!=NULL) p1=p1->next; </p><p>  if(!strcmp(name, p1->name)) { </p><p>  printf("\n學(xué)號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"

64、;); </p><p>  printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); </p><p>  display(p1); } </p><p>  else printf("沒有該學(xué)生記錄,請

65、核對!");}//寫入文件</p><p>  void writeData(){ FILE* fp;//文件指針 </p><p>  struct student *p; </p><p>  fp = fopen(FILE_DATA_PATH, "w"); </p><p>  if (!f

66、p) { printf("文件打開錯誤!"); return; } </p><p>  fprintf(fp,"%d\n", TOTAL_NUM); </p><p>  for(p = head; p!= NULL; p= p->next) { </p><p>

67、  fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", </p><p>  p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail); } </p>&

68、lt;p>  fclose(fp); }</p><p>  void freeAll(){ </p><p>  struct student *p1, *p2; </p><p>  p1=p2=head; </p><p>  while(p1) { p2=p1->next; free(p1); p1=p2; } }

69、//讀取文件</p><p>  void readData(){ FILE* fp;//文件指針 </p><p>  struct student *p1, *p2; </p><p>  fp = fopen(FILE_DATA_PATH, "r"); </p><p>  if (!fp)

70、{ printf("文件打開錯誤!"); } </p><p>  fscanf(fp,"%d\n", &TOTAL_NUM); </p><p>  head = p1 = p2 = (struct student *)malloc(LEN); </p><p>  fscanf(fp,"

71、;%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); </p><p>  while(!feof(fp)) &

72、lt;/p><p>  { p1 = (struct student *)malloc(LEN); </p><p>  fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->bi

73、rthday, p1->address, &p1->tele_num, p1->E_mail); p2->next = p1; p2 = p1; } </p><p>  p2->next = NULL; fclose(fp);}//刪除學(xué)生信息</p><p>  void del(){ struct student *p1, *p2; <

74、/p><p>  long int num; </p><p>  if(head == NULL) </p><p>  { printf("無學(xué)生記錄!\n"); return; } </p><p>  printf("請輸入您要刪除的學(xué)生的學(xué)號:"); </p><p>

75、;  scanf("%ld", &num); </p><p>  p1 = head; </p><p>  while(num != p1->num && p1->next != NULL) </p><p>  { p2=p1; </p><p>  p1=p1->n

76、ext; } </p><p>  if(num==p1->num) </p><p>  { if(p1==head) </p><p>  head=p1->next; </p><p>  else p2->next=p1->next; </p><p>  free(p1);

77、 </p><p>  TOTAL_NUM--;} </p><p>  else printf("沒有該學(xué)生記錄,請核對!\n");}//修改學(xué)生信息</p><p>  void change(){ struct student *p1, *p2; long int num; </p><p>  if(head

78、== NULL) </p><p>  { printf("無學(xué)生記錄!\n"); </p><p>  return; } </p><p>  printf("請輸入您要修改的學(xué)生的學(xué)號:");</p><p>  scanf("%ld", &num); </p

79、><p>  p1=head; </p><p>  while(num !=p1->num && p1->next != NULL) </p><p>  { p2=p1; p1=p1->next; } </p><p>  if(num==p1->num) devise(p1); </

80、p><p>  else printf("沒有該學(xué)生記錄,請核對!\n");}</p><p>  void devise(struct student *p)</p><p>  { int choice; </p><p>  choice=-1; </p><p><b> 

81、 do </b></p><p>  { printf("請選擇您要修改的學(xué)生的信息內(nèi)容:\n"); </p><p>  printf("+----------------------+\n"); </p><p>  printf("| 姓

82、名 請按 1 |\n"); </p><p>  printf("| 年齡 請按 2 |\n"); </p><p>  printf("| 性別 請按 3 |\n"); </p><p>  printf("| 出生年月 請

83、按 4 |\n"); </p><p>  printf("| 地址 請按 5 |\n"); </p><p>  printf("| 電話 請按 6 |\n"); </p><p>  printf("| E-mail 請按 7 |\n")

84、; </p><p>  printf("| 取消 請按 0 |\n"); </p><p>  printf("+----------------------+\n"); </p><p>  printf("請輸入您的選擇:"); </

85、p><p>  scanf("%d", &choice); </p><p>  switch(choice) { case 0: return; </p><p>  case 1: printf("請輸入新姓名:"); sca

86、nf("%s", p->name); break; </p><p>  case 2: printf("請輸入新年齡:"); scanf("%d", &p->age);break; </p><p>  case 3: printf("請輸入新性別:"

87、;); scanf("%s", p->sex); break; </p><p>  case 4: printf("請輸入新出生年月:"); scanf("%s", p->birthday); break; </p><p>  cas

88、e 5: printf("請輸入新地址:"); scanf("%s", p->address); break; </p><p>  case 6: printf("請輸入新電話:"); scanf("%s", &p->tele_num);

89、 break; </p><p>  case 7: printf("請輸入新E-mail:"); scanf("%s", p->E_mail); break; </p><p>  default:printf("\n無效選項!");

溫馨提示

  • 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

提交評論