工資信息管理系統(tǒng)課程設(shè)計_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  C 語言程序設(shè)計</b></p><p>  編程實踐是學(xué)習(xí)C語言程序設(shè)計的一重要環(huán)節(jié),為提高學(xué)生程序設(shè)計能力,通過課堂和上機實踐練習(xí)使學(xué)生的程序設(shè)計能力上一臺階。通過前四單元溫顧而知新、庖丁解牛、舉一反三、熟能生巧等過程的練習(xí)設(shè)計下面一個完整的程序。</p><p><b>  1、題目要求</b></p&g

2、t;<p>  設(shè)計“工資信息管理系統(tǒng)” </p><p>  要求:該系統(tǒng)能夠?qū)崿F(xiàn)工資信息管理。系統(tǒng)包括錄入,瀏覽,查詢,統(tǒng)計等功能。</p><p>  錄入功能要求:能夠添加新的工資信息到文件;</p><p>  瀏覽功能要求:能夠按照工資卡號,姓名分類瀏覽,提供分屏 顯示;有排序功能,排序后按照工資卡號升序或?qū)嵃l(fā)工資降序輸出;</p&

3、gt;<p>  查詢功能要求:能夠按照工資 卡號,姓名查詢;</p><p>  統(tǒng)計功能要求:能夠按照月份累計統(tǒng)計某職工在某時間段發(fā)工資總金額。</p><p><b>  職工數(shù)據(jù)如下:</b></p><p>  姓名銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅金 實發(fā)工資</p><p>

4、  wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00</p><p>  wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00</p><p><b>  2、分析:</b>&l

5、t;/p><p>  根據(jù)題目要求,應(yīng)當(dāng)把職工工資信息用結(jié)構(gòu)體形式輸入,再定義一個全局變量和文件指針進(jìn)行整個程序的運行,然后把職工工資信息送到文件中,所以應(yīng)該提供一個結(jié)構(gòu)體和文件的輸入輸出等操作;在程序中需實現(xiàn)職工工資瀏覽,查詢,統(tǒng)計等功能的操作,所以需要建立相應(yīng)的模塊來實現(xiàn);另外還需提供鍵盤式選擇菜單實現(xiàn)功能,在運行時達(dá)到所要目的。</p><p><b>  3、總體設(shè)計:<

6、;/b></p><p>  根據(jù)題目要求,可以將系統(tǒng)分為六個模塊:</p><p>  職工工資信息瀏覽模塊;</p><p>  添加工工資信息模塊;</p><p>  統(tǒng)計職工工資總合模塊;</p><p>  按名字查詢職工工資信息模塊;</p><p>  按卡號查詢職工工資信

7、息模塊;</p><p><b>  功能選擇</b></p><p><b>  4、詳細(xì)設(shè)計:</b></p><p>  #include<iostream.h> </p><p>  #include<stdio.h> </p><p>  #

8、include<stdlib.h> </p><p>  #include<string.h>//頭函數(shù)名</p><p>  /*********職員工資信息結(jié)構(gòu)體*********/</p><p>  /***包括職工的姓名、銀行卡好、工作月份、應(yīng)發(fā)工資、實發(fā)工資、水費、電費、稅***/</p><p>  st

9、ruct staff//職員工資信息結(jié)構(gòu)體</p><p><b>  { </b></p><p>  char Name[10];</p><p>  char CardNumber[10]; </p><p>  int Month; </p><p>  float SPWages;

10、</p><p>  float APWages; </p><p>  float Water; </p><p>  float Electrical; </p><p>  float Tax; </p><p><b>  }; </b></p><p>  FIL

11、E *fp;//定義文件指針===全局變量</p><p>  struct staff temp;</p><p>  void printf_face()//輸出函數(shù)</p><p><b>  {</b></p><p>  printf("\n 姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工

12、資 \n ");</p><p>  printf("%s %s %d %.2f %.2f %.2f %.2f %.2f\n",temp.Name,temp.CardNumber,temp.Month,</p><p>  temp.SPWages,temp.Water,temp.Electrical,temp.Tax,temp.APWages);</p

13、><p><b>  }</b></p><p><b>  一、</b></p><p>  /**********瀏覽職工工資信息==模塊*********/</p><p>  void PrintInformation()//瀏覽職工工資信息 </p&g

14、t;<p><b>  {</b></p><p>  struct staff temp; </p><p>  if((fp=fopen("wages","rb"))==NULL)</p><p><b>  {</b></p><p>  

15、printf("cannot open the file!");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  while(fread(&temp,sizeof(struct staff),1,fp)==1) printf_f

16、ace();</p><p>  fclose(fp);</p><p><b>  }</b></p><p><b>  二、</b></p><p>  /**********添加職工工資信息==模塊*********/</p><p>  void Increase(

17、)//添加職工工資信息 </p><p><b>  {</b></p><p>  if((fp=fopen("wages","ab+"))==NULL)</p><p><b>  {</b></p><p&g

18、t;  printf("cannot open the file!");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  printf("\n 請輸入要==添加的工資信息: \n");</p><

19、;p>  printf("\n 姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 \n ");</p><p>  scanf("%s%s%d%f%f%f",temp.Name,temp.CardNumber,</p><p>  &temp.Month,&temp.SPWages,&temp.Water,</p&g

20、t;<p>  &temp.Electrical);</p><p>  if(temp.SPWages<=800) temp.Tax=0; </p><p>  if((temp.SPWages>800.0)&&(temp.SPWages<1400.0)) </p><p>  temp.Tax=(temp.

21、SPWages-800)*0.05; </p><p>  if(temp.SPWages>1400){temp.Tax=(temp.SPWages-1400)*0.1;} </p><p>  temp.APWages=temp.SPWages-temp.Water-temp.Electrical-temp.Tax; </p><p>  fwrite(&a

22、mp;temp,sizeof(struct staff),1,fp);</p><p>  fclose(fp); </p><p>  }/***計算稅金并添加到文件相應(yīng)結(jié)構(gòu)體中***/</p><p><b>  三、</b></p><p>  /*********統(tǒng)計某職工工資總合==模塊*********/&l

23、t;/p><p>  void Statistics()//統(tǒng)計某職工工資總合 </p><p><b>  { </b></p><p>  struct staff temp; </p><p>  char tempname[10]; </p><p>  

24、float sum=0; </p><p>  int monthstart=0,monthover=0;</p><p>  printf("\n 輸入姓名 起始月份 終止月份 \n:");</p><p>  scanf("%s%d%d", tempname, &monthstart,&month

25、over);</p><p>  if((fp=fopen("wages","rb"))==NULL)</p><p><b>  {</b></p><p>  printf("cannot open the file!")</p><p><b>

26、  exit(0);</b></p><p><b>  }</b></p><p>  while(fread(&temp,sizeof(struct staff),1,fp)==1) </p><p><b>  { </b></p><p>  if(strcmp(temp

27、.Name,tempname)==0)/******判斷是否是該職工******/ </p><p><b>  { </b></p><p>  if(temp.Month>=monthstart&&temp.Month<=monthover) </p><p><b>  { </b><

28、;/p><p>  sum+=temp.APWages; </p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  printf("%d 月到 %d 月的工資

29、總和 %f",monthstart,monthover,sum); </p><p>  fclose(fp); </p><p><b>  }</b></p><p><b>  四、</b></p><p>  /*********按名字查詢某職工工資信息==模塊********/

30、 </p><p>  void NameSearch()//按名字查詢某職工工資信息 </p><p><b>  { </b></p><p>  char tempname[10]; </p><p>  struct staff temp;</p><p>  printf("

31、\n 輸入姓名:"); </p><p>  scanf("%s",tempname); </p><p>  if((fp=fopen("wages","rb"))==NULL)</p><p><b>  {</

32、b></p><p>  printf("cannot open the file!");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  while(fread(&temp,sizeof(struc

33、t staff),1,fp)==1) /***讀文件中資料**/</p><p><b>  { </b></p><p>  if(strcmp(temp.Name,tempname)==0) /**判斷是否是該姓名**/</p><p><b>  {</b></p><p>  printf_

34、face();</p><p><b>  } </b></p><p><b>  } </b></p><p>  fclose(fp); </p><p><b>  }</b></p><p><b>  五、</b>&l

35、t;/p><p>  /********按卡號查詢某職工工資信息==模塊*******/</p><p>  void CardNumberSearch()//按卡號查詢某職工工資信息 </p><p><b>  { </b></p><p>  char tempCardNumber[10]; </

36、p><p>  struct staff temp;</p><p>  printf("\n 輸入卡號:");</p><p>  scanf("%s",tempCardNumber); </p><p>  if((fp=fopen("wages","rb")

37、)==NULL)</p><p><b>  {</b></p><p>  printf("cannot open the file!");</p><p><b>  exit(0);</b></p><p><b>  }</b></p>

38、<p>  while(fread(&temp,sizeof(struct staff),1,fp)==1) /***讀文件中資料**/</p><p><b>  { </b></p><p>  if(strcmp(temp.CardNumber,tempCardNumber)==0) /**判斷是否是該卡號**/</p><

39、;p><b>  {</b></p><p>  printf_face();</p><p><b>  } </b></p><p><b>  } </b></p><p>  fclose(fp); </p><p><b> 

40、 }</b></p><p><b>  六、</b></p><p>  /**********職工工資信息查詢==模塊********/</p><p>  int Search()</p><p><b>  { </b></p><p><b>

41、  int n; </b></p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  printf("\n1. 按照卡號查詢: \n "); </p><p> 

42、 printf("\n2. 按照姓名查詢: \n "); </p><p>  printf("\n0. 返回上級目錄: \n");</p><p>  scanf("%d",&n);</p><p>  switch(n) </p><p><b>  { &l

43、t;/b></p><p>  case 1:CardNumberSearch();break; </p><p>  case 2:NameSearch();break; </p><p>  case 0:return 0;break; </p><p><b>  } </b></p><

44、p><b>  } </b></p><p><b>  }</b></p><p><b>  七、</b></p><p>  /***************功能選擇==模塊***********/</p><p>  void ShowMenu()

45、 </p><p><b>  { </b></p><p><b>  int n; </b></p><p><b>  while(1) </b></p><p><b>  { </b></p&g

46、t;<p>  printf("1. 添加工資信息: \n");</p><p>  printf("2. 瀏覽工資信息: \n" );</p><p>  printf("3. 統(tǒng)計工資信息: \n" );</p><p>  printf("4. 查詢工資信息: \n"

47、); </p><p>  printf("0. 退出系統(tǒng): " );</p><p>  scanf("%d",&n);</p><p>  switch(n) </p><p><b>  { </b></p><p>  case 1:Incr

48、ease();break; </p><p>  case 2:PrintInformation();break; </p><p>  case 3:Statistics();break; </p><p>  case 4:Search();break; </p><p>  case 0:exit(0);break; </p>

49、;<p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  /***************主函數(shù)*************/</p><p>  void main()</p>

50、;<p><b>  {</b></p><p>  ShowMenu();</p><p><b>  }</b></p><p>  運行結(jié)果可以達(dá)到要求的目的。</p><p><b>  運行結(jié)果:</b></p><p>  1.

51、 添加工資信息:</p><p>  2. 瀏覽工資信息:</p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0. 退出系統(tǒng): 1</p><p>  請輸入要==添加的工資信息:</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電

52、費</p><p>  wanglei 05507101 6 5000 25 35</p><p>  1. 添加工資信息:</p><p>  2. 瀏覽工資信息:</p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0.

53、退出系統(tǒng): 1</p><p>  請輸入要==添加的工資信息:</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費</p><p>  wanglei 05507101 7 5100 20 40</p><p>  1. 添加工資信息:</p><p>  2. 瀏覽工資信息:<

54、/p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0. 退出系統(tǒng): 2</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工資</p><p>  wanglei 05507101 6 5000.00 25.00 3

55、5.00 360.00 4580.00</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工資</p><p>  wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00</p><p>  1. 添加工資信息:</p><p>

56、  2. 瀏覽工資信息:</p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0. 退出系統(tǒng): 3</p><p>  輸入姓名 起始月份 終止月份</p><p>  :wanglei 6 7</p><p>  6 月到 7

57、 月的工資總和 9250.0000001. 添加工資信息:</p><p>  2. 瀏覽工資信息:</p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0. 退出系統(tǒng): 4</p><p>  1. 按照卡號查詢:</p><p>  2.

58、 按照姓名查詢:</p><p>  0. 返回上級目錄:</p><p><b>  1</b></p><p>  輸入卡號:05507101</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工資</p><p>  wanglei 05507

59、101 6 5000.00 25.00 35.00 360.00 4580.00</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工資</p><p>  wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00</p>

60、<p>  1. 按照卡號查詢:</p><p>  2. 按照姓名查詢:</p><p>  0. 返回上級目錄:</p><p><b>  2</b></p><p>  輸入姓名:wanglei</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅

61、 實發(fā)工資</p><p>  wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00</p><p>  姓名 銀行卡號 月份 應(yīng)發(fā)工資 水費 電費 稅 實發(fā)工資</p><p>  wanglei 05507101 7 5100.00 20.00 40.00

62、 370.00 4670.00</p><p>  1. 按照卡號查詢:</p><p>  2. 按照姓名查詢:</p><p>  0. 返回上級目錄:</p><p><b>  0</b></p><p>  1. 添加工資信息:</p><p>  2. 瀏

63、覽工資信息:</p><p>  3. 統(tǒng)計工資信息:</p><p>  4. 查詢工資信息:</p><p>  0. 退出系統(tǒng): 0</p><p>  Press any key to continue</p><p>  剛開始運行時出現(xiàn)的錯誤:</p><p>  由于瀏覽和查詢模塊

64、中多定義了局部變量,且與全局變量同名將全局變量屏蔽,以至于這些模塊不能達(dá)到預(yù)期效果,總是只輸出最近一次的數(shù)據(jù),經(jīng)過修改后將其刪除,達(dá)到了所要的效果。使程序得以執(zhí)行。到目前程序中還有一小毛病,就是計算稅金是實數(shù)雙精度與單精度轉(zhuǎn)換存在不足。</p><p>  做此C程序設(shè)計的體會:</p><p>  通過學(xué)習(xí)和練習(xí)C程序的設(shè)計基礎(chǔ),了解了一些關(guān)于C的知識。在設(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

提交評論