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

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  本報告介紹了一個運用C語言開發(fā)的用于職工信息管理系統(tǒng),通過該系統(tǒng)可以對職工的姓名、工號、學(xué)歷、聯(lián)系方式等信息進行系統(tǒng)管理。該系統(tǒng)是在Visual C++集成環(huán)境中進行編譯、連接和運行的。該系統(tǒng)使用了數(shù)組程序設(shè)計技術(shù),以及輸入輸出函數(shù)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、指針、結(jié)構(gòu)體數(shù)據(jù)和文件輸入輸出的知識完成。管理人員只要通過屏幕菜單,就可以

2、實現(xiàn)對系統(tǒng)數(shù)據(jù)的插入、查詢、修改、刪除、瀏覽等工作,該系統(tǒng)的使用,給職工的管理帶來了極大的方便,大大的提高了管理人員的工作效率和工作質(zhì)量。</p><p>  關(guān)鍵詞:C語言,職工,管理系統(tǒng)</p><p><b>  目 錄</b></p><p><b>  1 功能設(shè)計1</b></p><

3、p>  2 總體設(shè)計方案2</p><p>  2.1設(shè)計技術(shù)說明2</p><p>  2.2 函數(shù)關(guān)系示意圖2</p><p>  2.3 結(jié)構(gòu)體設(shè)計及說明2</p><p>  2.4 總體設(shè)計方案及流程圖3</p><p><b>  3 詳細設(shè)計4</b></

4、p><p>  3.1 創(chuàng)建函數(shù)4</p><p><b>  3.2插入函數(shù)4</b></p><p><b>  3.3查詢函數(shù)5</b></p><p>  3.4 修改函數(shù)5</p><p><b>  3.5刪除函數(shù)5</b></p

5、><p><b>  3.6瀏覽函數(shù)5</b></p><p><b>  3.7文件保存5</b></p><p>  3.8總程序代碼及注釋6</p><p><b>  4調(diào)試及測試13</b></p><p>  4.1當(dāng)前代碼運行情況13

6、</p><p>  4.2其他問題14</p><p>  5 系統(tǒng)的操作說明16</p><p><b>  致謝17</b></p><p><b>  附錄18</b></p><p><b>  參考文獻21</b></p>

7、;<p><b>  職工信息管理系統(tǒng)</b></p><p><b>  1 功能設(shè)計</b></p><p>  對于任意大小公司來說,職工管理的好壞會直接關(guān)系到公司的發(fā)展和管理,它是公司經(jīng)營管理中非常重要的環(huán)節(jié)。職工的增加、減少、管理是一個緊密聯(lián)系的有機整體。因此,公司必須要有一個方便管理人員管理職工資料的系統(tǒng),這個系統(tǒng)又能

8、方便管理人員能及時掌握職工的有效信息。</p><p>  本報告設(shè)計的職工信息管理系統(tǒng)主要是管理職工資料的,方便修改、查詢、刪除。</p><p>  隨著公司的經(jīng)營發(fā)展,公司的管理系統(tǒng)很重要,特別是職工的管理,職工的公司最基層的人物,也是為公司提供勞動力的重要部分。本設(shè)計就是為公司職工設(shè)計一個基于C語言、在Visual C++環(huán)境中編譯、連接和運行的職工信息管理系統(tǒng)。</p>

9、;<p>  該系統(tǒng)應(yīng)該具有以下功能:</p><p>  1)能夠建立一個文件夾來儲存職工的信息;</p><p>  2)能夠錄入職工的信息;</p><p>  3) 能夠查詢某一職工的信息;</p><p>  4)能夠修改某一職工的信息;</p><p>  5)能夠刪除某一職工的信息;<

10、/p><p>  6)能夠顯示所有職工的信息;</p><p><b>  7)能夠推出系統(tǒng)。</b></p><p>  系統(tǒng)的功能結(jié)構(gòu)圖如下圖所示:</p><p><b>  2 總體設(shè)計方案</b></p><p><b>  2.1設(shè)計技術(shù)說明</b&

11、gt;</p><p>  該設(shè)計是一個小型的管理系統(tǒng),該系統(tǒng)中的主要數(shù)據(jù)包括客戶姓名、性別、入職日期、學(xué)歷和聯(lián)系電話等等,這些數(shù)據(jù)的類型盡管不同,但他們之間是有內(nèi)在聯(lián)系的,都屬于記錄信息的內(nèi)容,所以在本程序中將他們組合成一個組合數(shù)據(jù),也就是結(jié)構(gòu)體。每個職工信息就是數(shù)據(jù)表中的一項記錄,所有的職工信息構(gòu)成一張總表,在程序設(shè)計時使用結(jié)構(gòu)體數(shù)組存儲這些數(shù)據(jù),每當(dāng)輸入信息完成,可以將這些數(shù)據(jù)保存在磁盤文件中。</p

12、><p>  2.2 函數(shù)關(guān)系示意圖</p><p>  為了便于程序設(shè)計調(diào)試和小組分工合作,該系統(tǒng)程序采用模塊化的設(shè)計方法,將系統(tǒng)的每個功能用一個相對獨立的函數(shù)來完成,該系統(tǒng)程序包含一個主函數(shù),包含一個插入函數(shù)(Insert)、一個查詢函數(shù)(Search)、一個修改函數(shù)(Update)、一個刪除函數(shù)(Delete)、一個瀏覽函數(shù)(Browse)、保存函數(shù)(Save)和一個退出函數(shù)(Exit)

13、。</p><p>  其示意圖如圖2-1所示:</p><p>  圖2-1 函數(shù)結(jié)構(gòu)圖</p><p>  2.3 結(jié)構(gòu)體設(shè)計及說明</p><p>  根據(jù)系統(tǒng)的要求,聲明以下的結(jié)構(gòu)體類型:</p><p>  #include<string.h> //聲明字符串</p>

14、<p>  #include<stdlib.h> //聲明函數(shù)類型</p><p>  struct workers //聲明結(jié)構(gòu)體類型的名稱為 struct workers</p><p>  { </p><p>  char name[10];

15、 //用字符串存放職工的姓名數(shù)據(jù) </p><p>  char sex[8]; //用字符串存放職工的性別數(shù)據(jù) </p><p>  char time[20]; //用字符串存放職工的入職時間數(shù)據(jù)</p><p>  char phone[20]; //用字符串

16、存放職工的聯(lián)系號碼數(shù)據(jù)</p><p>  char education[10]; //用字符串存放職工的學(xué)歷數(shù)據(jù)</p><p>  int number; //用字符串存放職工的工號數(shù)據(jù)</p><p>  }worker; //用結(jié)構(gòu)體數(shù)組存放職工的所有信息,不限制人數(shù)</p><p&

17、gt;  2.4 總體設(shè)計方案及流程圖</p><p>  系統(tǒng)總體來講采用職工信息管理,操作員根據(jù)職工信息管理系統(tǒng)中的提示項選擇其中一項進行操作,即調(diào)用與菜單項對應(yīng)的子函數(shù),操作員根據(jù)提示進行操作,操作完成后,系統(tǒng)重新顯示菜單,供用戶選擇,直到操作員選擇退出項,程序結(jié)束。</p><p>  其總的流程圖如圖2-2所示:</p><p><b>  ]

18、</b></p><p>  =0 =1 =2 =3 =4 =5 =6</p><p><b>  3 詳細設(shè)計</b></p><p>  職工信息系統(tǒng)由一個主函數(shù),一個創(chuàng)建函數(shù)(Creat)、一個插入函數(shù)(Insert)、一個查詢函數(shù)(Search)、一個修改函數(shù)(Update)、一

19、個刪除函數(shù)(Delete)、一個瀏覽函數(shù)(Browse)和一個退出函數(shù)(Exit)組成,下面對這些函數(shù)的詳細設(shè)計做一說明。</p><p>  主函數(shù)的結(jié)構(gòu)體變量:</p><p>  struct workers //聲明結(jié)構(gòu)體類型 struct workers</p><p>  { </p&g

20、t;<p>  char name[10]; // 全局變量:姓名 </p><p>  char sex[8]; // 全局變量:性別 </p><p>  char time[20]; // 全局變量:入職時間</p><p>  char

21、phone[20]; // 全局變量:聯(lián)系號碼</p><p>  char education[10]; // 全局變量:學(xué)歷</p><p>  int number; // 全局變量:工號</p><p><b>  }</b></p><p>  從主函數(shù)的代碼中看出,姓名,性

22、別,職工入職日期,學(xué)歷和職工聯(lián)系電話都屬于全局變量。設(shè)置這些變量,使整個職工信息系統(tǒng)的數(shù)據(jù)更具體和清晰。</p><p>  3.1 創(chuàng)建函數(shù) </p><p><b>  1)Creat()</b></p><p><b>  2)功能</b></p><p>  創(chuàng)建函數(shù)便于創(chuàng)建保存數(shù)據(jù)文件

23、的具體路徑。創(chuàng)建文檔文件workers,使fp指向此文件,程序中的w+表示創(chuàng)建一個具有讀寫功能的文檔文件。通過創(chuàng)建函數(shù),可以確定該文件的具體路徑為D磁盤。</p><p><b>  3)相關(guān)變量</b></p><p>  通過程序,可以看出相關(guān)的變量為fp,fp是指向workers文檔文件的變量。</p><p>  fp 將fope

24、n函數(shù)的返回值賦值給針變量fp </p><p>  3.2插入函數(shù) </p><p>  1)Insert()</p><p><b>  2)功能</b></p><p>  錄入數(shù)據(jù)函數(shù)具有巨大的功能,是為錄入具體職工信息服務(wù)的。程序中我們依序錄入職工姓名,職工性別,職工入職日期,學(xué)歷,聯(lián)系電話的有關(guān)職工信息。

25、</p><p><b>  3)相關(guān)變量</b></p><p>  fp 將fopen函數(shù)的返回值賦值給指針變量fp</p><p>  流程圖(見附錄的圖1)</p><p>  3.3查詢函數(shù) </p><p>  1)Search()</p><p>&

26、lt;b>  2)功能</b></p><p>  Seach查詢函數(shù)在職工信息處理系統(tǒng)中起著查詢職工信息的作用。通過調(diào)用查詢函數(shù),我們可以根據(jù)要查詢的職工工號來查詢出職工姓名,性別,入職日期,學(xué)歷和聯(lián)系電話。</p><p><b>  3)相關(guān)變量</b></p><p>  fp 將fopen函數(shù)返回值賦值給指針

27、變量fp</p><p>  flag 設(shè)定標(biāo)記變量flag來判斷是否存在此職工信息</p><p>  3)流程圖(見附錄的圖2)</p><p>  3.4 修改函數(shù) </p><p>  1)Update()</p><p><b>  2)功能</b></p>&

28、lt;p>  首先輸入你曾經(jīng)錄入的數(shù)據(jù),接著可以按要求去修改之前所錄入的數(shù)據(jù),例如姓名、性別、入職日期、學(xué)歷和聯(lián)系電話,另外,如果之前沒有錄入就查詢,則會出現(xiàn)提示語“沒有查詢到將要修改的職工工號!”</p><p><b>  3)相關(guān)變量</b></p><p>  flag 設(shè)定標(biāo)記變量flag來判斷是否存在此職工信息</p>&l

29、t;p>  offset 用來存放修改職工資料的一長整型變量</p><p>  fread 調(diào)用數(shù)據(jù)工具變量fread</p><p>  流程圖(見附錄的圖3)</p><p>  3.5刪除函數(shù) </p><p>  1)Delete()</p><p><b>  2)功能&

30、lt;/b></p><p>  起到刪除離職職工的信息的功能,并且能將文件指針返回到存儲此職工信息的位置。當(dāng)下次查詢時,沒有此職工的信息內(nèi)容。 </p><p><b>  3)相關(guān)變量</b></p><p>  flag 設(shè)定標(biāo)記變量flag來判斷是否有查詢到可以刪除的職工號 </p>

31、<p>  fp 將fopen函數(shù)返回值賦值給指針變量fp</p><p>  fread 用數(shù)據(jù)工具變量fread</p><p>  流程圖(見附錄的圖4)</p><p>  3.6瀏覽函數(shù) </p><p>  1)Browse()</p><p>&l

32、t;b>  2)功能</b></p><p>  對之前所錄入的一系列數(shù)據(jù)起到比較直觀的瀏覽功能。</p><p><b>  3)相關(guān)變量</b></p><p>  int i=0; 定義整型變量i</p><p>  4)流程圖(見附錄的圖5)</p><p><

33、;b>  3.7文件保存</b></p><p>  1)數(shù)據(jù)的輸入和輸出</p><p>  fp=fopen("D:\workers.txt","r"); //將fopen函數(shù)的返回值賦值給指針變量fp</p><p>  while(!feof(fp))</p><p>

34、<b>  {</b></p><p>  fread(&worker,sizeof(struct workers),1,fp); //讀取文件</p><p>  if(worker.number==number)</p><p>  {printf("\n已經(jīng)有相同的職工工號,請選擇其他工號:");</p

35、><p>  return; //當(dāng)新輸入的工號和已保存的工號是重復(fù)時提示并返回</p><p><b>  } </b></p><p>  } </p><p>  fclose(fp);

36、 //關(guān)閉文件"D:\workers.txt"</p><p>  fp=fopen("D:\workers.txt","r+"); //打開文件</p><p>  while(!feof(fp)) //從頭文件讀入字符直到文件結(jié)束</p><p>&

37、lt;b>  {</b></p><p>  long offset; </p><p>  offset=ftell(fp); //將文件指針?biāo)诘奈恢觅x給一長整型變量</p><p>  fread(&worker,sizeof(struct workers),1,fp)

38、;</p><p><b>  2)打開方式</b></p><p>  void Save( ) //定義Save函數(shù)</p><p><b>  { </b></p><p>  if((fp=fopen("D:\workers.txt","a"))==

39、NULL) //打開文件workers,使fp指向此文件,判斷此文件是否為空文件</p><p>  { printf("cannot open file\n"); //若workers文件為空文件,則輸出“不能打開文件”的提示信息</p><p>  return; //返回if語句,繼續(xù)進行判斷文件是否為空文件 <

40、/p><p><b>  }</b></p><p>  if(fwrite(&worker,sizeof(struct workers),1,fp)!=1) //向workers文件中寫數(shù)據(jù), 用if語句進行判斷寫入數(shù)據(jù)的真假</p><p>  { printf("file write error\n"); /

41、/若寫入的數(shù)據(jù)為假的,則輸出“文件寫入錯 誤”的提示信息</p><p>  return ; //返回if語句,繼續(xù)進行判斷寫入的數(shù)據(jù)是否為假的</p><p><b>  }</b></p><p>  fclose(fp); //關(guān)閉文件</p><p><b>  }</b&

42、gt;</p><p>  3.8總程序代碼及注釋</p><p>  #include<stdio.h></p><p>  #include<string.h> //聲明字符串</p><p>  #include<stdlib.h> //聲明函數(shù)類型</p><p&

43、gt;  struct workers //聲明結(jié)構(gòu)體類型 struct workers</p><p>  { </p><p>  char name[10]; //定義職工的姓名 </p><p>  char sex[8]; //定義職工的性別

44、 </p><p>  char time[20]; //定義職工的入職時間</p><p>  char phone[20]; //定義職工的聯(lián)系號碼</p><p>  char education[10]; //定義職工的學(xué)歷</p><p>  int number;

45、 //定義職工的工號</p><p><b>  }worker;</b></p><p>  void Creat();</p><p>  void Insert();</p><p>  void Search();</p><p>  void Update();<

46、/p><p>  void Delete();</p><p>  void Browse();</p><p>  void Save(); //聲明函數(shù)</p><p>  FILE *fp; //定義文件指針</p><p>  int number;

47、 //定義全局變量</p><p>  int main()</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  printf("\n 您好,這是第六組C語言課程設(shè)計作品\n\n

48、 謝謝欣賞!!\n\n");</p><p>  printf("數(shù)據(jù)保存在D盤對應(yīng)的記事本中,若文件不存在請先進行創(chuàng)建,請知悉!\n");</p><p><b>  do</b></p><p><b>  { </b></p><p&g

49、t;  printf("\n>***************** 職工信息管理系統(tǒng) *****************<\n");</p><p>  printf("* 0---新建(Creat) *\n");</p><p>  p

50、rintf("* 1---錄入(Insert) *\n");</p><p>  printf("* 2---查詢(Search) *\n");</p><p>  printf(&q

51、uot;* 3---修改(Update) *\n");</p><p>  printf("* 4---刪除(Delete) *\n");</p><p>  printf("*

52、 5---瀏覽(Browse) *\n");</p><p>  printf("* 6---退出(Exit) *\n");</p><p>  printf(">********

53、*******************謝謝使用!*************************<\n");</p><p>  scanf("%d",&i);</p><p><b>  switch(i)</b></p><p><b>  {</b></p>

54、<p>  case 0:Creat(); //調(diào)用創(chuàng)建運算</p><p><b>  break;</b></p><p>  case 1:Insert(); //調(diào)用插入運算</p><p><b>  break;&

55、lt;/b></p><p>  case 2:Search(); //調(diào)用查詢運算</p><p><b>  break;</b></p><p>  case 3:Update(); //調(diào)用修改運算</p><p>

56、<b>  break;</b></p><p>  case 4:Delete(); //調(diào)用刪除運算</p><p><b>  break;</b></p><p>  case 5:Browse(); //調(diào)用瀏覽運算<

57、;/p><p><b>  break;</b></p><p>  case 6:break; //表示退出的提示</p><p>  default:printf("職工管理信息系統(tǒng)操作錯誤!請重新選擇你需要操作的步驟!");break;</p><p&

58、gt;  } //輸入非0到6的提示提示輸入錯誤</p><p>  }while(i!=6); </p><p>  printf("\n謝謝使用此系統(tǒng)!\n"); //當(dāng)輸入為6時退出系統(tǒng)</p><p>  return 0;

59、 //主函數(shù)執(zhí)行完畢,返回函數(shù)值0</p><p>  } </p><p>  void Creat() //定義Creat函數(shù)</p><p><b>  {</b></p><

60、;p>  fp=fopen("D:\workers.txt","w+"); //創(chuàng)建保存數(shù)據(jù)文件的具體路徑,w+表示</p><p>  建立一個具有讀寫功能的文本文件 </p><p>  fclose(fp); //關(guān)閉文件</p><p><b>  }&l

61、t;/b></p><p>  void Insert() //定義錄入數(shù)據(jù)函數(shù) </p><p><b>  {</b></p><p>  printf("請輸入職工工號:"); //按要求輸入職工工號</p>

62、<p>  scanf("%d",&number); //輸入工號,且其輸入類型為十進制整數(shù)</p><p>  fp=fopen("D:\workers.txt","r"); //將fopen函數(shù)的返回值賦值給指針變量fp</p><p>  while(!feof(f

63、p))</p><p><b>  {</b></p><p>  fread(&worker,sizeof(struct workers),1,fp); //讀取文件</p><p>  if(worker.number==number)</p><p>  {printf("\n已經(jīng)

64、有相同的職工工號,請選擇其他工號:");</p><p>  return; //當(dāng)新輸入的工號和已保存的工號是重復(fù)時提示并 </p><p><b>  返回</b></p><p><b>  } </b></p><p>  }

65、 </p><p>  fclose(fp); //關(guān)閉文件"D:\workers.txt"</p><p>  worker.number=number; </p><p>  printf("請輸入姓名:"

66、); </p><p>  scanf("%s",worker.name); </p><p>  printf("請輸入性別:"); </p><p>  scanf("%s",worker.sex);</p><p>  printf("

67、請輸入入職日期:"); </p><p>  scanf("%s",worker.time);</p><p>  printf("請輸入學(xué)歷:"); </p><p>  scanf("%s",worker.education);</p><p>  printf(&

68、quot;請輸入聯(lián)系電話:");</p><p>  scanf("%s",worker.phone); //根據(jù)提示輸入職工信息</p><p>  Save(); } //保存數(shù)據(jù)</p><p>  void

69、 Search() //定義Search函數(shù)</p><p>  {int flag=0; //設(shè)定標(biāo)記量的初值</p><p>  printf("請輸入要查詢的職工工號:"); </p><p>

70、;  scanf("%d",&number); //提示輸入要查詢職工的</p><p><b>  工號</b></p><p>  fp=fopen("D:\workers.txt","r"); //打開

71、磁盤文件 </p><p>  while(!feof(fp))</p><p>  {fread(&worker,sizeof(struct workers),1,fp); //讀取數(shù)據(jù)</p><p>  if(worker.number==number) //尋找此工號信息的數(shù)據(jù)存儲</p>&

72、lt;p><b>  位置</b></p><p><b>  { </b></p><p>  printf("姓名:%s\n",worker.name);</p><p>  printf("性別:%s\n",worker.sex);</p><p&g

73、t;  printf("入職日期:%s\n",worker.time);</p><p>  printf("學(xué)歷:%s\n",worker.education);</p><p>  printf("聯(lián)系電話:%s\n",worker.phone); //若數(shù)據(jù)存在則輸出此工號</p><p

74、><b>  職工信息</b></p><p>  flag=1; //標(biāo)記量變?yōu)?</p><p><b>  break;</b></p><p><b>  }</b></p><p><b

75、>  }</b></p><p>  fclose(fp);</p><p>  if(flag==0) printf("\n不存在此職工信息!\n"); //標(biāo)記量不變則有提示"不存在此職工信息!"</p><p><b>  }</b></p><p>  

76、void Update() //定義Update函數(shù)</p><p>  {int flag=0; </p><p>  printf("請輸入要修改的職工工號:");</p><p>  scanf("%d",&nu

77、mber);</p><p>  fp=fopen("D:\workers.txt","r+"); //打開文件</p><p>  while(!feof(fp)) //從頭文件讀入字符直到文件結(jié)束</p><p><b>  {</b

78、></p><p>  long offset; </p><p>  offset=ftell(fp); //將文件指針?biāo)诘奈恢觅x給一長整型</p><p><b>  變量</b></p><p>  fread(&worker,

79、sizeof(struct workers),1,fp);</p><p>  if(worker.number==number) //若輸入的職工號與之前錄入的相同則</p><p><b>  可進行修改</b></p><p><b>  {</b></p><p>  print

80、f("請輸入姓名:");</p><p>  scanf("%s",worker.name);</p><p>  printf("請輸入性別:");</p><p>  scanf("%s",worker.sex);</p><p>  printf("

81、;請輸入入職日期:");</p><p>  scanf("%s",worker.time);</p><p>  printf("請輸入學(xué)歷:");</p><p>  scanf("%s",worker.education);</p><p>  printf(&quo

82、t;請輸入聯(lián)系電話:");</p><p>  scanf("%s",worker.phone); //輸入修改后的職工信息</p><p>  fseek(fp,offset,SEEK_SET); //將文件指針返回到存儲此職工

83、 </p><p><b>  信息的位置 </b></p><p>  fwrit

84、e(&worker,sizeof(struct workers),1,fp); //保存修改后職工資料</p><p>  flag=1; </p><p><b>  break;</b></p><p><b>  }</b></p><p

85、><b>  }</b></p><p>  fclose(fp); </p><p>  if(flag==0) printf("\n沒有查詢到將要修改的職工工號!\n"); </p><p><b>  }</b></p>

86、<p>  void Delete() //定義Delete函數(shù)</p><p>  {int flag=0; </p><p>  printf("請輸入要刪除的職工工號:");</p><p>  scanf("%d&qu

87、ot;,&number);</p><p>  fp=fopen("D:\workers.txt","r+"); </p><p>  while(!feof(fp))</p><p><b>  { </b></p><p>  long offset;

88、 </p><p>  offset=ftell(fp); //將文件指針?biāo)诘奈恢觅x給一長整型變量</p><p>  fread(&worker,sizeof(struct workers),1,fp);</p><p>  if(worker.number==number) //如果

89、要刪除的工號與錄入保存的相符就執(zhí)行</p><p><b>  下面的語句</b></p><p><b>  {</b></p><p>  worker.number=0; </p><p>  strcpy(worker.name,"");

90、 //將空格復(fù)制到原來的職工資料相對</p><p>  應(yīng)的位置中,即相當(dāng)于刪除</p><p>  strcpy(worker.sex,"");</p><p>  strcpy(worker.time,"");</p><p>  strcpy(worker.education,&

91、quot;");</p><p>  strcpy(worker.phone,"");</p><p>  fseek(fp,offset,SEEK_SET); //將文件指針返回到存儲此職工信息的位置 </p><p>  fwrite(&worker,sizeof(struct workers),1,fp

92、) ; //保存刪除后的職工資料</p><p>  flag=1; </p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><

93、p>  fclose(fp); </p><p>  if(flag==0) printf("\n沒有查詢到可以刪除的職工工號!\n");</p><p><b>  }</b></p><p>  void Browse() //定義Browse函數(shù)</p>

94、<p><b>  {</b></p><p>  int i=0; //定義i變量</p><p>  fp=fopen("D:\workers.txt","r"); </p><p>  while(!feof(fp)) </p><p><b>

95、  {</b></p><p>  fread(&worker,sizeof(struct workers),1,fp); //從文件中讀數(shù)據(jù)</p><p>  if(worker.number!=0) i++; //用變量i統(tǒng)計職工人數(shù)</p><p><b>  }</b><

96、;/p><p>  fclose(fp); </p><p>  fp=fopen("D:\workers.txt","r"); </p><p>  printf(" 工號 姓 名 性別 入職日期 學(xué)歷 聯(lián)系電話 \n"); //輸出結(jié)構(gòu)體類型的文字,使程序排版更美

97、觀</p><p>  while(!feof(fp))</p><p><b>  {</b></p><p>  fread(&worker,sizeof(struct workers),1,fp); //從文件中讀數(shù)據(jù)</p><p>  if(worker.number&&(i!=1))

98、</p><p>  {printf(" %4d %6s %4s %8s %4s %8s \n",</p><p>  worker.number,worker.name,worker.sex,worker.time,worker.education,worker.phone);</p><p>  i--; //按

99、順序輸出職工信息的數(shù)據(jù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n"); </p><p>  fclose(fp); </p><p><b>  }&l

100、t;/b></p><p>  void Save() //定義Save函數(shù)</p><p><b>  { </b></p><p>  if((fp=fopen("D:\workers.txt","a"))==NULL) //打開文件workers,使fp指向此</p><

101、;p>  文件,判斷此文件是否為空文件</p><p>  { printf("cannot open file\n"); //若workers文件為空文件,則輸出“不能打開 </p><p><b>  文件”的提示信息</b></p><p>  return; //返回if語句,繼續(xù)進行判斷文件是否為空文件

102、 </p><p><b>  }</b></p><p>  if(fwrite(&worker,sizeof(struct workers),1,fp)!=1) //向workers文件中寫數(shù)據(jù), </p><p>  用if語句進行判斷寫入數(shù)</p><p><b>  據(jù)的真假<

103、;/b></p><p>  { printf("file write error\n"); //若寫入的數(shù)據(jù)為假的,則輸出“文件寫入錯誤”</p><p><b>  的提示信息</b></p><p>  return ; //返回if語句,繼續(xù)進行判斷寫入的數(shù)據(jù)是否為假的</p><p&

104、gt;<b>  }</b></p><p>  fclose(fp); //關(guān)閉文件</p><p><b>  }</b></p><p><b>  4調(diào)試及測試</b></p><p>  4.1當(dāng)前代碼運行情況</p><p>  1)執(zhí)行無

105、誤之后出現(xiàn)的界面如下;</p><p>  2)輸入職工的資料;</p><p>  3)瀏覽職工的資料;</p><p>  4)修改02號職工資料;</p><p>  5)瀏覽修改后的職工資料;</p><p>  6)刪除職工資料后再瀏覽資料;</p><p><b>  7)

106、退出;</b></p><p>  8)自動創(chuàng)建的文件夾及刪除某一職工資料后保存的資料</p><p><b>  4.2其他問題</b></p><p>  在文件保存的過程中遇到的問題是文件內(nèi)容不能順利的保存在它對應(yīng)的磁盤中:</p><p>  void load( )</p><p

107、>  { FILE*fp;</p><p><b>  int i;</b></p><p>  if((fp=fopen("workers.dat","wb"))==NULL)</p><p>  { printf("cannot open file\n");</p&g

108、t;<p><b>  return;</b></p><p><b>  }</b></p><p>  for(i=0;i<MaxSize;i++)</p><p>  if(fwrite(&workers[i],sizeof(struct workers),1,fp)!=1);</p

109、><p>  { printf("file write error\n");</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  }&

110、lt;/b></p><p>  經(jīng)過我們多次的修改,最終我們完成了對文件的保存:</p><p>  void Save( ) //定義Save函數(shù)</p><p><b>  { </b></p><p>  if((fp=fopen("D:\workers.txt","a&qu

111、ot;))==NULL) //打開文件workers,使fp指向此文件,判斷此文件是否為空文件</p><p>  { printf("cannot open file\n"); //若workers文件為空文件,則輸出“不能打開文件”的提示信息</p><p>  return; //返回if語句,繼續(xù)進行判斷文件是否為空文件 </p><

112、;p><b>  }</b></p><p>  if(fwrite(&worker,sizeof(struct workers),1,fp)!=1) //向workers文件中寫數(shù)據(jù),用if語句進行判斷寫入數(shù)據(jù)的真假</p><p>  { printf("file write error\n"); //若寫入的數(shù)據(jù)為假的,則

113、輸出“文件寫入錯誤”的提示信息</p><p>  return ; //返回if語句,繼續(xù)進行判斷寫入的數(shù)據(jù)是否為假的</p><p><b>  }</b></p><p>  fclose(fp); //關(guān)閉文件</p><p><b>  }</b></p><p

114、>  文件的保存程序的編寫是整個程序中最難的,經(jīng)過我們小組的努力和老師的指導(dǎo),我們最終完成了編寫。</p><p>  在編寫程序過程中,我們還遇到了路徑問題,以下我們對路徑問題進行了具體分析。</p><p>  目前路徑:為了讓老師更直觀地看清晰地到所保存的數(shù)據(jù),我們確定文檔的路徑在D盤的workers文本中,代碼請見3.7總程序代碼及注釋</p><p>

115、;  注:fp=fopen("D:\workers.txt","w+");</p><p>  fp=fopen("D:\workers.txt","r");</p><p>  fp=fopen("D:\workers.txt","r");</p><

116、;p>  fp=fopen("D:\workers.txt","r+");</p><p>  fp=fopen("D:\workers.txt","r+");</p><p>  fp=fopen("D:\workers.txt","r");</p>

117、<p>  if((fp=fopen("D:\workers.txt","a"))==NULL)</p><p>  以前路徑:代碼和現(xiàn)代碼差不多,只是把上面的凡是有"D:\workers.txt"部分修改為"workers.txt",即可保存在所創(chuàng)建的磁盤中。其弊端是難以分清哪個是保存數(shù)據(jù)的文本。</p>

118、<p><b>  5 系統(tǒng)的操作說明</b></p><p>  1、0鍵為新建,運行沒錯誤之后先按0鍵創(chuàng)建一個文件夾來保存輸入的職工資 </p><p><b>  料;</b></p><p>  2、1鍵為錄入,按1鍵再按回車鍵,根據(jù)提示語言錄入職工的資料;</p><p>  

119、3、2鍵為查詢,按2鍵再按回車,可以根據(jù)需要輸要查詢職工的工號查詢;</p><p>  4、3鍵為修改,按3鍵可以再輸入需要修改職工資料的工號,根據(jù)提示語言進</p><p><b>  行填寫;</b></p><p>  5、4鍵為刪除,按4鍵再按回車鍵,根據(jù)提示語言輸入需要刪除的職工工號;</p><p>  6

120、、5鍵為瀏覽,按5鍵再按回車鍵,在屏幕上就會顯示出全部職工的資料;</p><p>  7、6鍵為退出,按6鍵再按回車之后可以按任意鍵退出系統(tǒng)。</p><p><b>  致謝</b></p><p>  經(jīng)過我們小組的共同努力,我們最終完成了程序的編寫和報告攢寫,在此我們我們特別感謝xx老師的指導(dǎo),同學(xué)們提供的幫助和寶貴的意見,我們再一次衷

121、心地感謝。</p><p>  我們會在今后的學(xué)習(xí)中加強小組間的交流討論,促進學(xué)習(xí),掌握技能;更加努力、主動的學(xué)習(xí)新知識,加強動手親身實踐與發(fā)散思維的能力。</p><p><b>  附錄</b></p><p>  圖1(錄入函數(shù)的流程圖) </p><p>  圖2(查詢函數(shù)的流程圖)</p>&

122、lt;p>  圖3(修改函數(shù)的流程圖) 圖4(刪除函數(shù)的流程圖)</p><p>  圖5(瀏覽函數(shù)的流程圖)</p><p><b>  參考文獻</b></p><p>  [1] 譚浩強.C程序設(shè)計(第四版)[M].北京:清華大學(xué)出版社,2010.6.</p><p>

溫馨提示

  • 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

提交評論