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

下載本文檔

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

文檔簡介

1、<p> ??; </p><p><b>  C語言程序設(shè)計</b></p><p>  題目:職工信息管理系統(tǒng) </p><p>  學(xué)號: </p><p>  姓名: </p&g

2、t;<p><b>  班級:</b></p><p>  成績: </p><p><b>  目錄</b></p><p><b>  一、設(shè)計思想2</b></p><p><b>  二、概要設(shè)計2

3、</b></p><p>  (一)模塊介紹2</p><p>  (二)系統(tǒng)流程;3</p><p><b>  三、詳細(xì)設(shè)計4</b></p><p>  (一)函數(shù)介紹4</p><p>  (二)參數(shù)介紹10</p><p>  (三

4、)返回結(jié)果介紹10</p><p>  四、結(jié)果總結(jié)10</p><p><b>  設(shè)計思想</b></p><p>  主要分為六大功能,分別用六個函數(shù)來實現(xiàn):</p><p>  錄入職工信息并保存:用fwrite將輸入的數(shù)據(jù)保存在文件中,用 fp=fopen("emploee_date

5、1","wb")語句進(jìn)行寫入;</p><p>  添加職工信息并保存:用fp=fopen("emploee_date1","ab")語句追加所輸入的信息,再用fwrite函數(shù)保存到文件中;</p><p>  顯示所有職工信息:用fread函數(shù)對文件進(jìn)行讀??;</p><p>  職工查詢:①職

6、工號方式查詢,輸入職工號,讀取文件,輸出與文件中相對應(yīng)的信息;②職工姓名查詢,用strcmp函數(shù)比較文件中的字符串與輸入的字符串;</p><p>  刪除職工信息:先用 第4個功能查找信息,然后再把文件中的信息用后一項代替前一項,保存的項數(shù)減一;</p><p>  修改職工信息并保存:先用第4個功能查找信息,將數(shù)據(jù)從文件中讀出后再賦值,然后重新全部保存;</p><

7、p><b>  概要設(shè)計</b></p><p><b>  模塊介紹</b></p><p><b>  錄入職工信息并保存</b></p><p>  第一次進(jìn)入需進(jìn)行首次錄入后才能運(yùn)行,錄入后將會保存到文件"emploee_date1"中;</p><

8、;p><b>  添加功能</b></p><p>  在錄入的基礎(chǔ)上對信息進(jìn)行追加,并保存在文件中;</p><p><b>  顯示所有職工信息</b></p><p>  將文件中的信息全部讀出,然后顯示在屏幕上;</p><p><b>  職工查詢</b><

9、;/p><p>  查詢分為職工號查詢和職工姓名查詢。進(jìn)入查找后會提醒是職工號查詢還是職工姓名查詢。查找為輸入要查詢的職工號或姓名,就會顯示出查詢的職工全部信息; </p><p><b>  刪除職工信息</b></p><p>  在刪除界面輸入要刪除職工的職工號或姓名,查詢出職工信息后,選擇刪除后即可刪除; </p><p

10、><b>  修改職工信息并保存</b></p><p>  對于職工信息的修改,在修改界面輸入要修改職工的姓名或職工號,查詢出該職工后選擇修改,輸入要修改的信息即完成修改。</p><p><b>  系統(tǒng)流程;</b></p><p><b>  主函數(shù)流程圖為:</b></p>

11、<p>  進(jìn)入程序后,會有菜單提示操作選項,當(dāng)輸入操作選項后,程序進(jìn)入選擇操作的工作界面。</p><p>  當(dāng)輸入1時,進(jìn)入錄入職工信息并保存界面,選擇錄入個數(shù),然后會將錄入的信息保存在emploee_date1文件中。</p><p>  當(dāng)輸入2時,進(jìn)入添加職工信息并保存界面,選擇添加個數(shù),然后會將添加的信息保存在emploee_date1文件中。</p>

12、;<p>  當(dāng)輸入3時,屏幕上會顯示所有的職工信息。</p><p>  當(dāng)輸入4時,進(jìn)入查詢界面,屏幕上會顯示是按職工號查找還是按姓名查找。選擇相應(yīng)的操作后,屏幕上會出現(xiàn)輸入查詢職工的姓名或職工號,輸入后選擇查詢即可查找到要查的職工信息,若輸入的職工不存在,會提醒不存在。查詢完后會再提示是繼續(xù)查找還是退出查詢,選擇相應(yīng)的操作選項即可實現(xiàn)想要的操作。</p><p>  當(dāng)

13、輸入5時,會提示是按姓名查找刪除還是按職工號查找刪除,選擇相應(yīng)的選項后輸入要刪除的職工的姓名或職工號,屏幕上會顯示要刪除的職工信息,然后會提示確定刪除還是退出刪除,選擇刪除即可刪除。</p><p>  當(dāng)輸入5時,會提示是按姓名查找修改還是按職工號查找修改,選擇相應(yīng)的選項后,輸入要修改的職工的姓名或職工號,然后選擇修改,輸入修改的內(nèi)容,即可完成修改。</p><p><b> 

14、 詳細(xì)設(shè)計</b></p><p><b>  代碼介紹</b></p><p><b>  函數(shù)介紹</b></p><p>  #include <stdio.h></p><p>  #define SIZE 20</p><p>  int k

15、,m,y,i,n,d,p=1,z=0;</p><p>  struct emploee_type</p><p><b>  {</b></p><p><b>  int num;</b></p><p>  char name[10];</p><p><b>

16、;  char sex;</b></p><p>  struct date</p><p><b>  {</b></p><p><b>  int year;</b></p><p>  int month;</p><p><b>  int d

17、ay;</b></p><p><b>  }birth;</b></p><p>  char state[10];</p><p><b>  int pay;</b></p><p>  char phone[11];</p><p>  } emp[SIZ

18、E];</p><p><b>  主函數(shù):</b></p><p>  void main()</p><p><b>  {</b></p><p>  system("color 3f"); //換背景顏色語句</p>

19、<p>  m=open2(); //從emploee_date2文件中取出m值</p><p>  while(1) //功能的重復(fù)運(yùn)行</p><p><b>  {</b></p><p>  printf("請選擇功能:");

20、</p><p>  scanf("%d",&n);</p><p><b>  if(n<7)</b></p><p><b>  {</b></p><p><b>  switch(n)</b></p><p>&

21、lt;b>  {</b></p><p><b>  case 1:</b></p><p>  printf("錄入的職工信息的個數(shù):");</p><p>  scanf("%d",&m);</p><p><b>  save1();&

22、lt;/b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  while(p==1) //功能的重復(fù)運(yùn)行</p><p><b>  {</b></p>

23、<p>  printf("添加的職工信息的個數(shù):");</p><p>  scanf("%d",&k);</p><p><b>  save2();</b></p><p><b>  m=m+k;</b></p><p><b&

24、gt;  }</b></p><p><b>  break;</b></p><p>  case 3:output();break;</p><p><b>  case 4:</b></p><p>  printf("請選擇查找方式:\n");</p&g

25、t;<p>  find();break;</p><p><b>  case 5:</b></p><p>  while(p==1)</p><p><b>  {</b></p><p>  m=del(m); //將m值返回<

26、;/p><p>  printf("繼續(xù)刪除請按1,退出刪除請按2:");</p><p>  scanf("%d",&p);</p><p><b>  }</b></p><p><b>  break;</b></p><p>

27、;  case 6:change();break;</p><p><b>  }</b></p><p>  p=1; //讓程序能夠再次進(jìn)入功能2、3、4、5</p><p>  open1(); //保存m值到文件emploee_da

28、te2</p><p>  printf("\n(提示請按7,退出程序請按8)\n");</p><p><b>  }</b></p><p>  else if(n==7)</p><p><b>  ……</b></p><p>  else if

29、(n==8)</p><p>  break; //退出循環(huán)</p><p><b>  else</b></p><p>  printf("錯誤,請重新輸入\n");</p><p><b>  }</b></p>

30、;<p><b>  } </b></p><p>  主函數(shù)由一個死循環(huán)構(gòu)成,保證功能的重復(fù)運(yùn)行,用stwich語句展開對六個函數(shù)的引用,各分函數(shù)用循環(huán)語句保證各自功能的重復(fù)運(yùn)行。</p><p>  void save1()//錄入職工</p><p><b>  {</b></p>

31、<p><b>  FILE*fp;</b></p><p>  printf("職工號 姓名 性別(F/M) 出生 職務(wù) 工資 電話號碼\n");</p><p>  for(i=0;i<m;i++)</p><p>  scanf("%d%s%s%d-%d-%d%s%d%s&quo

32、t;,&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.month,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);</p><p>  fp=fopen("emploee_date1",&qu

33、ot;wb") //以寫方式打開文件emploee_date1</p><p>  for(i=0;i<m;i++)</p><p>  if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p>  printf("文件寫入錯誤\

34、n");</p><p>  fclose(fp); //關(guān)閉文件emploee_date1</p><p><b>  }</b></p><p>  用fwrite將職工信息保存在文件emploee_date1中。</p><p&g

35、t;  void save2()//添加職工</p><p><b>  { </b></p><p><b>  FILE *fp;</b></p><p><b>  int i;</b></p><p>  printf("職工號 姓名 性別(F/M

36、) 出生 職務(wù) 工資 電話號碼\n");</p><p>  for(i=0;i<k;i++)</p><p>  scanf("%d%s%s%d-%d-%d%s%d%s",&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.m

37、onth,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);</p><p>  (fp=fopen("emploee_date1","ab") //以追加方式打開文件emploee_date1</p><p>  for(i=0;i<k

38、;i++)</p><p>  if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p>  printf("文件寫入錯誤\n");</p><p>  fclose(fp);</p><p>  printf("繼續(xù)添加請按1,退出添

39、加請按2:");</p><p>  scanf("%d",&p);</p><p><b>  }</b></p><p>  用fwrite追加職工信息并保存在文件emploee_date1中。</p><p>  void output()//顯示所有職工功能</p>

40、;<p><b>  {</b></p><p><b>  FILE*fp;</b></p><p><b>  int i;</b></p><p>  printf("職工號 姓名 性別 出生 職務(wù) 工資 電話號碼\n")

41、;</p><p>  fp=fopen("emploee_date1","rb"); //以讀方式打開emploee_date1文件</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><

42、p>  fread(&emp[i],sizeof(struct emploee_type),1,fp); //讀出文件中的信息</p><p>  printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s",emp[i].num,emp[i].name,emp[i].sex,emp[i].birth.year,emp[i].bir

43、th.month,emp[i].birth.day,emp[i].state,emp[i].pay,emp[i].phone);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  }

44、</b></p><p>  用fread文件emploee_date1中的信息讀取。</p><p>  find()//查找功能</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p>  int i,n

45、=0,y,x,number; //其中n=0是為了控制是否文件中存在該信息</p><p>  char a[10];</p><p>  fp=fopen("emploee_date1","rb");</p><p>  printf("1--按職工號\n2--按姓名\n&quo

46、t;);</p><p>  scanf("%d",&x);</p><p>  if(x==1) //選擇查找方式 </p><p><b>  {</b></p><p>  printf("請輸入職工號:&qu

47、ot;);</p><p>  scanf("%d",&number);</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  fread(&emp[i],sizeof(struct emploee_type),1,fp

48、);</p><p>  if(emp[i].num==number) //比較輸入的數(shù)據(jù)與文件中職工號相同的信息</p><p><b>  {</b></p><p>  y=i; //將查找到位置給y</p><p>  n=1;

49、 //文件中存在與所輸入的數(shù)據(jù)相同的信息</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(x==2)</b></p><p

50、><b>  {</b></p><p>  printf("請輸入名字:");</p><p>  scanf("%s",&a);</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p&

51、gt;<p>  fread(&emp[i],sizeof(struct emploee_type),1,fp);</p><p>  if(strcmp(emp[i].name,a)==0) //比較輸入的字符串與文件中姓名相同的信息</p><p><b>  {</b></p><p><b>  y=

52、i;</b></p><p><b>  n=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  i

53、f(n==1)</b></p><p><b>  {</b></p><p>  printf("職工號 姓名 性別 出生 職務(wù) 工資 電話號碼\n");</p><p>  printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s&

54、quot;,emp[y].num,emp[y].name,emp[y].sex,emp[y].birth.year,emp[y].birth.month,emp[y].birth.day,emp[y].state,emp[y].pay,emp[y].phone);</p><p>  printf("\n");</p><p><b>  }</b>

55、;</p><p><b>  if(n==0)</b></p><p>  printf("查無此人\n");</p><p>  fclose(fp);</p><p>  return(y);</p><p><b>  }</b></p>

56、;<p>  讀取文件后,用比較輸入的數(shù)據(jù)和字符串與文件中的數(shù)據(jù)是否相同來實行查找功能,使用了strcmp函數(shù)來比較兩個字符串是否相同,其中用n的值來控制文件中存在與所輸入的信息相同的數(shù)據(jù)。</p><p>  del(int m)//刪除功能</p><p><b>  {</b></p><p><b>  FILE

57、 *fp;</b></p><p>  printf("請選擇刪除方式:\n");</p><p>  y=find(); //利用功能4的函數(shù)首先查找到所需修改的信息,并將查找到的數(shù)據(jù)所對應(yīng)的位置提取出來</p><p>  printf("確定刪除嗎 (是按1,否按2

58、):");</p><p>  scanf("%d",&p);</p><p>  if(p==1) //功能的循環(huán)</p><p><b>  {</b></p><p>  m=m-1;

59、 //刪除一個值后信息量減少一個</p><p>  for(i=y;i<m;i++)</p><p>  emp[i]=emp[i+1]; //從所查找到的信息開始,依次將后一項的信息代替前一項</p><p>  printf("刪除成功\n");</p><p>  if((fp=fopen(&

60、quot;emploee_date1","wb"))==NULL) //將修改的信息重新保存到文件中</p><p><b>  {</b></p><p>  printf("文件無法打開\n");</p><p><b>  return;</b></p>

61、;<p><b>  }</b></p><p>  for(i=0;i<m;i++)</p><p>  if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p>  printf("文件寫入錯誤\n");</p>

62、<p>  fclose(fp);</p><p>  return(m); //將修改后的m值返回</p><p><b>  }</b></p><p><b>  }</b></p><p>  首先利用查找功能查找到所需修改

63、的信息,再將后一項的信息依次代替前一項,同時信息量m減少一。</p><p>  void change()//修改功能</p><p><b>  {</b></p><p>  while(p==1)</p><p><b>  {</b></p><p><b&g

64、t;  FILE *fp;</b></p><p>  printf("請選擇所需修改的職工:\n");</p><p>  y=find(); //查找所需修改的內(nèi)容</p><p>  printf("請按格式填寫修改的內(nèi)容:\n");</p

65、><p>  printf("職工號 姓名 性別(F/M) 出生 職務(wù) 工資 電話號碼\n");</p><p>  scanf("%d%s%s%d-%d-%d%s%d%s",&emp[y].num,emp[y].name,&emp[y].sex,&emp[y].birth.year,&emp[y].birt

66、h.month,&emp[y].birth.day,emp[y].state,&emp[y].pay,emp[y].phone);//重新輸入所查找到的信息,將原來的信息淹沒即可完成修改。</p><p>  (fp=fopen("emploee_date1","wb") //重新保存信息</p><p>  for(

67、i=0;i<m;i++)</p><p>  if(fwrite(&emp[i],sizeof(struct emploee_type),1,fp)!=1)</p><p>  printf("文件寫入錯誤\n");</p><p>  fclose(fp);</p><p>  printf("修

68、改成功\n");</p><p>  printf("繼續(xù)修改請按1,退出修改請按2:");</p><p>  scanf("%d",&p);</p><p><b>  }</b></p><p><b>  }</b></p>

69、;<p>  查找到所需修改的內(nèi)容后,新輸入信息將原來的信息覆蓋,重新保存信息即可完成修改功能。</p><p>  void open1()//保存m值</p><p><b>  {</b></p><p>  FILE *fp2;</p><p>  if((fp2=fopen("emplo

70、ee_date2","wb"))==NULL)</p><p>  { printf("cannot open file\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  

71、fprintf(fp2,"%d",m);</p><p>  fclose(fp2);</p><p><b>  }</b></p><p>  用fprintf函數(shù)將變量m值保存。</p><p>  open2()//提取m值</p><p><b>  {&l

72、t;/b></p><p>  FILE *fp2;</p><p>  if((fp2=fopen("emploee_date2","rb"))==NULL)</p><p><b>  {</b></p><p>  printf("cannot open fi

73、le\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  fscanf(fp2,"%d",&m);</p><p>  fclose(fp2);</p><p>  r

74、eturn(m);</p><p><b>  }</b></p><p>  用fscanf函數(shù)將m值讀取。</p><p><b>  參數(shù)介紹</b></p><p>  編寫的程序中,所有的參數(shù)都為m,都表示文件中有效的職工信息個數(shù)。其中變量p﹑n﹑y值,分別用來控制功能的循環(huán),信息的存在與

75、否以及信息位置的控制。</p><p><b>  返回結(jié)果介紹</b></p><p>  編寫的程序中,所有的返回值都為m,都表示文件中有效的職工信息個數(shù)。</p><p><b>  結(jié)果總結(jié)</b></p><p>  在整個編寫的過程中,將功能模塊化,逐個解決各項功能,用文件的方式將信息保

76、存起來,其中注意對文件的打開和關(guān)閉,有字符串的比較。值得關(guān)注的是程序中對有效職工信息數(shù)m的定義和運(yùn)用,在錄入,添加,刪除時,m的值均會發(fā)生變化,其中用到了fscanf和fprintf函數(shù)對m值進(jìn)行提取和保存,以達(dá)到對信息量的控制。修改后以“wb”對職工信息重新保存,刪除時,用到將職工信息前移以覆蓋要刪除信息,達(dá)到刪除目的,修改信息時,將查找的信息直接用新的數(shù)據(jù)覆蓋,然后再保存到文件中,以達(dá)到修改的目的,對于電話號碼,11位數(shù)超過了整型的

溫馨提示

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

評論

0/150

提交評論