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

下載本文檔

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

文檔簡介

1、<p><b>  信息科學(xué)與工程學(xué)院</b></p><p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p>  課程名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 </p><p>  班 級: </p><p>  學(xué) 號:

2、 </p><p>  姓 名: </p><p>  指導(dǎo)教師: </p><p><b>  二○一三年 六 月</b></p><p>  職工管理系統(tǒng)課程設(shè)計報告</p><p

3、><b>  一、需求分析</b></p><p>  職工管理系統(tǒng)是一個工作單位不可缺少的管理工具,它管理的數(shù)據(jù)對于公司的決策者和管理者來說都至關(guān)重要,所以職工管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段。但一直以來各個公司基本上都是靠傳統(tǒng)的人工方式來管理職工信息,這種管理方式存在著許多缺點,如:效率低、保密性差,另外時間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于信息的查找、更新和

4、維護(hù)都帶來了不少的困難。</p><p>  當(dāng)今社會,信息迅速膨脹,隨著各個公司的規(guī)模增大,有關(guān)信息管理工作所涉及的數(shù)據(jù)量越來越大,職工信息量也大大增加,利用傳統(tǒng)的手工查詢、登記、修改等方法的處理速度遠(yuǎn)遠(yuǎn)跟不上公司的需求,有的公司不得不靠增加人力、物力來進(jìn)行信息管理。 </p><p>  隨著計算機(jī)技術(shù)的不斷提高,計算機(jī)作為知識經(jīng)濟(jì)時代的產(chǎn)物,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類

5、社會的各個行業(yè)和領(lǐng)域并發(fā)揮著越來越重要的作用,成為人們工作和生活中不可缺少的一部分。</p><p>  而作為計算機(jī)應(yīng)用的一部分,使用計算機(jī)對職工進(jìn)行管理,具有手工管理所無法比擬的優(yōu)點。例如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高職工管理的效率,也是公司的科學(xué)化、正規(guī)化管理和與世界接軌的重要條件。</p><p>  職工管理系統(tǒng)作為一

6、種管理軟件正在各公司中得到越來越廣泛的應(yīng)用,且已達(dá)到了良好效果。</p><p>  簡單的職工管理系統(tǒng):</p><p><b>  1、問題描述</b></p><p>  對單位的職工進(jìn)行管理,包括插入、刪除、查找、排序等功能。</p><p><b>  2、要求</b></p>

7、<p>  職工對象包括姓名(字符串)、性別(字符)、出生年月(數(shù)字)、工作年月(數(shù)字)、學(xué)歷(字符串)、職務(wù)(字符串)、住址(字符串)、電話(字符串)等信息。</p><p> ?。?)新增一名職工:將新增職工對象按姓名以字典方式職工管理文件中。</p><p> ?。?)刪除一名職工:從職工管理文件中刪除一名職工對象。</p><p> ?。?)查

8、詢:從職工管理文件中查詢符合某些條件的職工。</p><p> ?。?)修改:檢索某個職工對象,對其某些屬性進(jìn)行修改。</p><p> ?。?)排序:按某種需要對職工對象文件進(jìn)行排序。</p><p><b>  3、實現(xiàn)功能</b></p><p> ?。?)由鍵盤輸入職工對象,以文件方式保存。程序執(zhí)行時先將文件讀入

9、內(nèi)存。</p><p> ?。?)對職工對象中的“姓名”按字典順序進(jìn)行排序。</p><p> ?。?)對排序后的職工對象進(jìn)行增、刪、查詢、修改、排序等操作。</p><p><b>  二、概要設(shè)計 </b></p><p>  1、輸入功能的實現(xiàn):要想實現(xiàn)職工管理系統(tǒng)的輸入,必須要建立一個職工信息系統(tǒng)的抽象數(shù)據(jù)類型,

10、其中職工信息以鏈表的存儲方式實現(xiàn)。由鍵盤輸入職工對象,以文件方式保存。程序執(zhí)行時先將文件讀入內(nèi)存。</p><p>  2、系統(tǒng)處理功能的實現(xiàn):系統(tǒng)管理員根據(jù)公司的人員流動情況,在提示信息的提示下,選擇相應(yīng)的服務(wù)進(jìn)行操作。如對職工對象中的"姓名"按字典順序進(jìn)行排序;對排序后的職工對象進(jìn)行增、刪、查詢、修改、排序等操作。</p><p>  3、輸出的實現(xiàn):根據(jù)選擇的操作

11、,輸出與之對應(yīng)的信息。</p><p>  綜上可以繪制出職工管理功能的系統(tǒng)流程圖,如圖1所示</p><p><b>  圖1 系統(tǒng)流程圖</b></p><p><b>  4、系統(tǒng)功能結(jié)構(gòu)</b></p><p>  根據(jù)職工管理系統(tǒng)問題的分析和設(shè)計要求,可以得到該職工管理系統(tǒng)可以分為七個模

12、塊:職工信息添加模塊、職工信息修改模塊、職工信息刪除模塊、職工信息查詢模塊、職工信息排序模塊、職工信息保存模塊、職工信息顯示模塊。</p><p><b>  三、詳細(xì)設(shè)計</b></p><p>  (1)根據(jù)詳細(xì)設(shè)計要求,可以得到主函數(shù)代碼及其對應(yīng)的程序流程圖:在主函數(shù)中,實現(xiàn)了友好的界面設(shè)計。系統(tǒng)需要輸入職工的基本信息:姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)

13、、住址、電話等。這個系統(tǒng)還利用鍵盤輸入提供的主菜單服務(wù),在主菜單中,有九種操作,以下是結(jié)構(gòu)體及其定義:</p><p>  char name[M]; //姓名</p><p>  char sex[M];//性別</p><p>  char birthday[M];//生日</p><p>  char workday[M];/

14、/工作日</p><p>  char education[M];//教育程度</p><p>  char position[M];//職位</p><p>  char address[M];//地址</p><p>  char number[M];//電話</p><p>  void Cre

15、at(WI **);//當(dāng)沒有導(dǎo)入文件時,用此函數(shù)來創(chuàng)建</p><p>  void Insert(WI *);//插入函數(shù),將新增的數(shù)據(jù)插入到鏈表的尾端</p><p>  void Delete(WI **);//刪除函數(shù),按照姓名來進(jìn)行指定的刪除 void search_by_name(WI *);//查找函數(shù),按照姓名來進(jìn)行查找</p>&l

16、t;p>  void Edit(WI *);//修改函數(shù),按照姓名進(jìn)行查找,然后針對指定的員工信息進(jìn)行修改</p><p>  WI *Sort(WI *);//排序</p><p>  void Menu(WI *);//菜單</p><p>  void Output(WI *);//顯示函數(shù)</p

17、><p>  void sav(WI *);//保存函數(shù)</p><p>  WI *opn(WI *);//打開函數(shù)</p><p>  (2)主函數(shù)程序流程圖如圖2所示:</p><p>  圖 2 主函數(shù)程序流程圖</p><p><b>  3、查找模塊設(shè)計</b>&l

18、t;/p><p>  在查詢算法中,職工管理系統(tǒng)按照姓名進(jìn)行查找,實現(xiàn)了系統(tǒng)的人性化查詢操作。</p><p>  void search_by_name(WI *head) //按姓名查詢函數(shù)</p><p><b>  {</b></p><p>  WI *p=head;</p><p>  

19、char name[M]; //將要查找的姓名儲存在NAME[M]數(shù)組中,再與struct結(jié)構(gòu)體中的name進(jìn)行對比,用strcmp比較函數(shù),輸出為0時,代表比對相同</p><p>  printf("\nplease input the name which you want to search\n");</p><p>  scanf("%s"

20、,name);</p><p>  while(p && strcmp(name,p->name)!=0)</p><p>  p=p->next;</p><p>  if(p==NULL || strcmp(name,p->name)!=0)</p><p>  printf("system c

21、an not find the person\n");</p><p><b>  else</b></p><p>  printf("name:%s\nage:%s\nbirthday:%s\nworkday:%s\nposition:%s\neducation:%s\naddress:%s\nnumber:%s\n",p->n

22、ame,p->sex,p->birthday,p->workday,p->education,p->position,p->address,p->number);</p><p><b>  }</b></p><p>  通過使用strcmp比較函數(shù),來實現(xiàn)從名單中查找相應(yīng)的名字。當(dāng)輸入的名字與名單中某一名字相差為0時,便可

23、以得到查找結(jié)果。</p><p><b>  4、排序模塊設(shè)計</b></p><p>  在排序算法中,職工管理系統(tǒng)按照姓名首字母的英文順序來排序,實現(xiàn)了系統(tǒng)的基本排序操作。:</p><p>  WI *Sort(WI *head) //排序,將所有結(jié)點的地址放入sort[M]中,再對sort[m]中的所有結(jié)點的名字的首字母進(jìn)行由小到大排

24、序,將排好的SORT數(shù)組的元素賦值給新的鏈表,并輸出</p><p><b>  {</b></p><p>  WI *head_2,*k,*q,*sort[M],*p=head;</p><p>  int i=1,n,j,b;</p><p><b>  while(p)</b></p&

25、gt;<p><b>  {</b></p><p>  sort[i]=p;</p><p>  p=p->next;</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b

26、>  n=i-1;</b></p><p><b>  i=1;</b></p><p>  while(i<=n)</p><p><b>  {</b></p><p>  sort[0]=sort[i];</p><p><b>  b

27、=i;</b></p><p>  for(j=i+1;j<=n;j++)</p><p>  if(sort[j]->name[0]<sort[0]->name[0])</p><p><b>  {</b></p><p>  sort[0]=sort[j];</p>

28、<p><b>  b=j;</b></p><p>  sort[0]=sort[i];</p><p>  sort[i]=sort[b];</p><p>  sort[b]=sort[0];</p><p><b>  }</b></p><p><

29、b>  i++;</b></p><p><b>  }</b></p><p><b>  i=1;</b></p><p>  head_2=q=k=sort[i];</p><p>  for(i=2;i<=n;i++)</p><p><

30、b>  {</b></p><p>  k=sort[i];</p><p>  q->next=k;</p><p><b>  q=k;</b></p><p>  q->next=NULL;</p><p><b>  }</b></

31、p><p>  return head_2;</p><p><b>  }</b></p><p>  排序,將所有結(jié)點的地址放入sort[M]中,再對sort[m]中的所有結(jié)點的名字的首字母進(jìn)行由小到大排序,將排好的SORT數(shù)組的元素賦值給新的鏈表,并輸出。</p><p><b>  四、調(diào)試分析</b

32、></p><p>  測試是使用人工或者自動手段來運行或測試某個系統(tǒng)的過程,其目的在于檢驗是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實際結(jié)果之間的差別。</p><p>  在調(diào)試查詢修改功能過程中,查詢的總是不正確,查詢的結(jié)果顯示,沒有找到職工信息,最后發(fā)現(xiàn)查找的結(jié)點不正確,查詢應(yīng)該與輸入的值和頭結(jié)點next比較,而不是頭結(jié)點。還有就是查詢結(jié)點不知道如何循環(huán),最后又看看了記得筆記和書,才

33、知道如何繼續(xù)查找而不出錯誤。</p><p>  修改時總是不能正確的修改,最初時修改總是修改最后輸入的數(shù)據(jù)。最后終于找到了,又是結(jié)點寫錯了。</p><p>  排序時注意交換的先后順序就可以了,刪除時注意交換結(jié)點的順序。</p><p><b>  五、測試結(jié)果</b></p><p>  1)進(jìn)入職工管理系統(tǒng),如圖

34、3所示:</p><p>  圖 3主菜單選擇界面</p><p>  2)新增一職工信息并查詢?nèi)柯毠ば畔?,如圖4,5所示:</p><p>  圖 4 新增并查詢職工信息界</p><p>  3)修改職工信息并與前面信息對照,如5所示:</p><p>  圖5 修改職工信息界面</p><

35、p>  4)按姓名排序職工信息并顯示,如圖6所示</p><p>  圖6 按姓名排序職工信息并顯示</p><p>  5)退出系統(tǒng),如圖7所示:選擇 9,退出職工管理系統(tǒng)。</p><p>  圖7 退出職工管理系統(tǒng)</p><p><b>  六、心得與體會</b></p><p>

36、;  本次課程設(shè)計是圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行。根據(jù)問題描述可知,需要解決問題并不復(fù)雜,整個問題只需要實現(xiàn)一個職工管理系統(tǒng)功能,那就是在這個系統(tǒng)中實現(xiàn)對職工信息的插入、刪除、查詢、排序、修改以及保存。但是,為了實現(xiàn)該功能,卻需要優(yōu)秀的算法和數(shù)據(jù)結(jié)構(gòu)以保證實現(xiàn)的時間和空間效率。把職工信息存儲在一個單鏈表中,利用指針實現(xiàn)對職工信息的各項基本操作。</p><p>  雖然設(shè)計的程序完成了題目描述所需要實現(xiàn)的功能,但是仍然存在不

37、如人意的地方。那就是可以排序上面多設(shè)計幾個算法。實現(xiàn)多角度排序。在這個系統(tǒng)中沒有職工序號的信息,所以允許職工姓名相同,在很大程度上面,可能是的職工信息重復(fù)。</p><p>  經(jīng)過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我們不僅及時鞏固的了數(shù)據(jù)結(jié)構(gòu)、算法、以及軟件工程的知識,并明白數(shù)據(jù)結(jié)構(gòu)和算法對于程序時間和空間性能的影響,及軟件工程提供的開發(fā)流程和工具對于實現(xiàn)特定功能程序的重要意義。</p><p> 

38、 當(dāng)我們面對一個實際問題,應(yīng)該迅速根據(jù)問題性質(zhì)和特點抽象成特定的數(shù)據(jù)結(jié)構(gòu),當(dāng)然每個問題都有可能能夠抽象成多種數(shù)據(jù)結(jié)構(gòu),每種數(shù)據(jù)結(jié)構(gòu)適應(yīng)于不同的算法。因此應(yīng)該綜合考慮這樣的數(shù)據(jù)結(jié)構(gòu)、算法以及它們的空間和時間效率,然后從中選擇一個作為實現(xiàn)程序的基礎(chǔ)。</p><p>  此外,對程序的測試應(yīng)該要仔細(xì),根據(jù)模塊的特點和測試階段,采用各種軟件測試方法對程序進(jìn)行測試,確保各個模塊的正確性和完整性,最后集成起來測試其是否正確

39、和完整地實現(xiàn)了問題描述中要求的功能。</p><p><b>  七、附錄</b></p><p>  實驗程序:#include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p&g

40、t;<p>  #define NULL 0</p><p>  #define M 20</p><p>  typedef struct worker_information</p><p><b>  {</b></p><p>  char name[M]; //姓名</p><

41、;p>  char sex[M];//性別</p><p>  char birthday[M];//生日</p><p>  char workday[M];//工作日</p><p>  char education[M];//教育程度</p><p>  char position[M];//職位</p>

42、;<p>  char address[M];//地址</p><p>  char number[M];//電話</p><p>  worker_information *next; </p><p><b>  }WI;</b></p><p>  void Creat(WI **);

43、//當(dāng)沒有導(dǎo)入文件時,用此函數(shù)來創(chuàng)建</p><p>  void Insert(WI *);//插入函數(shù),將新增的數(shù)據(jù)插入到鏈表的尾端</p><p>  void Delete(WI **);//刪除函數(shù),按照姓名來進(jìn)行指定的刪除</p><p>  void search_by_name(WI *);//查找函數(shù),按照姓名來進(jìn)行查找<

44、/p><p>  void Edit(WI *);//修改函數(shù),按照姓名進(jìn)行查找,然后針對指定的員工信息進(jìn)行修改</p><p>  WI *Sort(WI *);//排序</p><p>  void Menu(WI *);//菜單</p><p>  void Output(WI *);//

45、顯示函數(shù)</p><p>  void sav(WI *);//保存函數(shù)</p><p>  WI *opn(WI *);//打開函數(shù)</p><p>  void sav(WI *head)</p><p><b>  {</b></p><p><b>  FI

46、LE *fp;</b></p><p>  char no[20];</p><p>  WI *p=head;</p><p>  printf("\n請輸入需要保存的文件名");</p><p>  fflush(stdin);</p><p>  scanf("%s&qu

47、ot;,no);</p><p>  fp=fopen(no,"wb");</p><p><b>  while(p)</b></p><p><b>  {</b></p><p>  fwrite(p,sizeof(WI),1,fp);</p><p&g

48、t;  p=p->next;</p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  }</b></p><p>  WI *opn(void) /*打開函數(shù)*/</p><p><b>  {&l

49、t;/b></p><p><b>  FILE *fp;</b></p><p>  WI *p,*head,*q;</p><p>  char no[20];</p><p>  printf("****************************************************

50、********");</p><p>  printf("***** 歡迎來到職工管理系統(tǒng) *****");</p><p>  printf("*****************************

51、*******************************");</p><p>  printf("\n\n\n\n\n\n\n\t\t\t請輸入需要打開的文件名");</p><p>  fflush(stdin);</p><p>  scanf("%s",no);</p><p>

52、  if((fp=fopen(no,"rb"))==NULL)</p><p>  printf("沒有此文件\n");</p><p><b>  else</b></p><p><b>  {</b></p><p>  p=head=(WI *)mal

53、loc(sizeof(WI));</p><p>  fread(head,sizeof(WI),1,fp);</p><p>  p=head->next=(WI *)malloc(sizeof(WI));</p><p>  fread(p,sizeof(WI),1,fp);</p><p><b>  q=p;</

54、b></p><p>  if(p==NULL) fclose(fp);</p><p><b>  else</b></p><p><b>  {</b></p><p>  p=(WI *)malloc(sizeof(WI));</p><p>  while(f

55、read(p,sizeof(WI),1,fp)!=0)</p><p><b>  {</b></p><p>  q->next=p;</p><p><b>  q=p;</b></p><p>  p=(WI *)malloc(sizeof(WI));</p><p

56、><b>  }</b></p><p>  q->next=NULL;</p><p>  fclose (fp);</p><p><b>  }</b></p><p>  return head;</p><p><b>  }</b>

57、;</p><p>  return NULL;</p><p><b>  }</b></p><p>  void Creat(WI **head) //創(chuàng)建函數(shù)</p><p><b>  {</b></p><p><b>  WI *p,*q;</

58、b></p><p><b>  char ch;</b></p><p>  (*head)=(WI *)malloc(sizeof(WI));</p><p>  printf("please input your name\n");</p><p>  scanf("%s&quo

59、t;,(*head)->name);</p><p>  fflush(stdin);</p><p>  printf("please input your sex\n");</p><p>  scanf("%s",(*head)->sex);</p><p>  fflush(stdi

60、n);</p><p>  printf("please input your birthday\n");</p><p>  scanf("%s",(*head)->birthday);</p><p>  fflush(stdin);</p><p>  printf("pleas

61、e input your workday\n");</p><p>  scanf("%s",(*head)->workday);</p><p>  fflush(stdin);</p><p>  printf("please input your education\n");</p><

62、;p>  scanf("%s",(*head)->education);</p><p>  fflush(stdin);</p><p>  printf("please input your position\n");</p><p>  scanf("%s",(*head)->pos

63、ition);</p><p>  fflush(stdin);</p><p>  printf("please input your address\n");</p><p>  scanf("%s",(*head)->address);</p><p>  fflush(stdin);<

64、;/p><p>  printf("please input your number\n");</p><p>  scanf("%s",(*head)->number);</p><p>  fflush(stdin);</p><p>  (*head)->next=NULL;</p&

65、gt;<p>  p=(*head);</p><p>  printf("would you like to continue input Y/N?\n");</p><p>  while((ch=getchar())=='Y' || ch=='y' )</p><p><b>  {&

66、lt;/b></p><p>  q=(WI *)malloc(sizeof(WI));</p><p>  fflush(stdin);</p><p>  printf("please input your name\n");</p><p>  scanf("%s",q->name);

67、</p><p>  fflush(stdin);</p><p>  printf("please input your sex\n");</p><p>  scanf("%s",q->sex);</p><p>  fflush(stdin);</p><p>  p

68、rintf("please input your birthday\n");</p><p>  scanf("%s",q->birthday);</p><p>  fflush(stdin);</p><p>  printf("please input your workday\n");<

69、/p><p>  scanf("%s",q->workday);</p><p>  fflush(stdin);</p><p>  printf("please input your education\n");</p><p>  scanf("%s",q->educa

70、tion);</p><p>  fflush(stdin);</p><p>  printf("please input your position\n");</p><p>  scanf("%s",q->position);</p><p>  fflush(stdin);</p&g

71、t;<p>  printf("please input your address\n");</p><p>  scanf("%s",q->address);</p><p>  fflush(stdin);</p><p>  printf("please input your number\

72、n");</p><p>  scanf("%s",q->number);</p><p>  fflush(stdin);</p><p>  p->next=q;</p><p><b>  p=q;</b></p><p>  q->next=

73、NULL;</p><p>  printf("would you like to continue input Y/N?\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  void search_by_name(WI

74、*head) //按姓名查詢函數(shù)</p><p><b>  {</b></p><p>  WI *p=head;</p><p>  char name[M]; //將要查找的姓名儲存在NAME[M]數(shù)組中,再與struct結(jié)構(gòu)體中的name進(jìn)行對比,用strcmp比較函數(shù),輸出為0時,代表比對相同</p><p>

75、;  printf("\nplease input the name which you want to search\n");</p><p>  scanf("%s",name);</p><p>  while(p && strcmp(name,p->name)!=0)</p><p>  p=p-

76、>next;</p><p>  if(p==NULL || strcmp(name,p->name)!=0)</p><p>  printf("system can not find the person\n");</p><p><b>  else</b></p><p>  pr

77、intf("name :%s\nage: %s\nbirthday:%s\nworkday:%s\nposition:%s\neducation:%s\naddress:%s\nnumber:%s\n",p->name,p->sex,p->birthday,p->workday,p->education,p->position,p->address,p->number)

78、;</p><p><b>  }</b></p><p>  void Insert(WI *head) //插入函數(shù),將新增職工的信息插入在鏈表的尾端</p><p><b>  {</b></p><p>  WI *q,*p=head;</p><p>  q=(W

79、I *)malloc(sizeof(WI));</p><p>  printf("please input your name\n");</p><p>  scanf("%s",q->name);</p><p>  fflush(stdin);</p><p>  printf("

80、please input your sex\n");</p><p>  scanf("%s",q->sex);</p><p>  fflush(stdin);</p><p>  printf("please input your birthday\n");</p><p>  sc

81、anf("%s",q->birthday);</p><p>  fflush(stdin);</p><p>  printf("please input your workday\n");</p><p>  scanf("%s",q->workday);</p><p&

82、gt;  fflush(stdin);</p><p>  printf("please input your education\n");</p><p>  scanf("%s",q->education);</p><p>  fflush(stdin);</p><p>  printf(

83、"please input your position\n");</p><p>  scanf("%s",q->position);</p><p>  fflush(stdin);</p><p>  printf("please input your address\n");</p>

84、<p>  scanf("%s",q->address);</p><p>  fflush(stdin);</p><p>  printf("please input your number\n");</p><p>  scanf("%s",q->number);</p

85、><p>  fflush(stdin);</p><p>  while(p->next)</p><p>  p=p->next; //找到最后一個結(jié)點,再將新結(jié)點插入到最后</p><p>  p->next=q;</p><p><b>  p=q;</b></p&g

86、t;<p>  p->next=NULL;</p><p><b>  }</b></p><p>  void Delete(WI **head) //刪除函數(shù),刪除指定的職工的信息</p><p><b>  {</b></p><p>  WI *p=(*head);&

87、lt;/p><p>  char name[M]; //此處與查找函數(shù)的功能相同</p><p>  printf("please input the name which you want to DELETE\n\n");</p><p>  scanf("%s",name);</p><p>  i

88、f(strcmp(name,p->name)==0) //使用**head(指針的指針,使得函數(shù)不用返回參數(shù),直接對head進(jìn)行修改)</p><p>  (*head)=(*head)->next;</p><p><b>  else</b></p><p><b>  {</b></p>

89、<p>  while(p->next && strcmp(name,p->next->name)!=0)</p><p>  p=p->next;</p><p>  if(p->next==NULL || strcmp(name,p->next->name)!=0)</p><p>  prin

90、tf("system can not find the person\n");</p><p><b>  else</b></p><p>  p->next=p->next->next;</p><p><b>  }</b></p><p><b&g

91、t;  }</b></p><p>  void Edite(WI *head) //編輯函數(shù)</p><p><b>  {</b></p><p>  WI *q=head;</p><p>  char name[M]; //此處與查找函數(shù)的功能相同</p><p>  prin

92、tf("please input the name which you want to EDITE\n");</p><p>  scanf("%s",name);</p><p>  while(q && strcmp(name,q->name)!=0)</p><p>  q=q->next;&

93、lt;/p><p>  if(q==NULL || strcmp(name,q->name)!=0)</p><p>  printf("system can not find the person\n");</p><p><b>  else</b></p><p><b>  {&l

94、t;/b></p><p>  printf("please input your name\n");</p><p>  scanf("%s",q->name);</p><p>  fflush(stdin);</p><p>  printf("please input yo

95、ur sex\n");</p><p>  scanf("%s",q->sex);</p><p>  fflush(stdin);</p><p>  printf("please input your birthday\n");</p><p>  scanf("%s&qu

96、ot;,q->birthday);</p><p>  fflush(stdin);</p><p>  printf("please input your workday\n");</p><p>  scanf("%s",q->workday);</p><p>  fflush(std

97、in);</p><p>  printf("please input your education\n");</p><p>  scanf("%s",q->education);</p><p>  fflush(stdin);</p><p>  printf("please in

98、put your position\n");</p><p>  scanf("%s",q->position);</p><p>  fflush(stdin);</p><p>  printf("please input your address\n");</p><p>  sc

99、anf("%s",q->address);</p><p>  fflush(stdin);</p><p>  printf("please input your number\n");</p><p>  scanf("%s",q->number);</p><p>

100、  fflush(stdin);</p><p><b>  }</b></p><p>  getchar();</p><p><b>  }</b></p><p>  WI *Sort(WI *head) //排序,將所有結(jié)點的地址放入sort[M]中,再對sort[m]中的所有結(jié)點的名字

101、的首字母進(jìn)行由小到大排序,將排好的SORT數(shù)組的元素賦值給新的鏈表,并輸出</p><p><b>  {</b></p><p>  WI *head_2,*k,*q,*sort[M],*p=head;</p><p>  int i=1,n,j,b;</p><p><b>  while(p)</b

102、></p><p><b>  {</b></p><p>  sort[i]=p;</p><p>  p=p->next;</p><p><b>  i++;</b></p><p><b>  }</b></p><

103、;p><b>  n=i-1;</b></p><p><b>  i=1;</b></p><p>  while(i<=n)</p><p><b>  {</b></p><p>  sort[0]=sort[i];</p><p>&

104、lt;b>  b=i;</b></p><p>  for(j=i+1;j<=n;j++)</p><p>  if(sort[j]->name[0]<sort[0]->name[0])</p><p><b>  {</b></p><p>  sort[0]=sort[j];

105、</p><p><b>  b=j;</b></p><p><b>  }</b></p><p><b>  if(b!=i)</b></p><p><b>  {</b></p><p>  sort[0]=sort[i]

106、;</p><p>  sort[i]=sort[b];</p><p>  sort[b]=sort[0];</p><p><b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p>

107、;<p><b>  i=1;</b></p><p>  head_2=q=k=sort[i];</p><p>  for(i=2;i<=n;i++)</p><p><b>  {</b></p><p>  k=sort[i];</p><p> 

108、 q->next=k;</p><p><b>  q=k;</b></p><p>  q->next=NULL;</p><p><b>  }</b></p><p>  return head_2;</p><p><b>  }</b&g

109、t;</p><p>  void Menu(WI *head)</p><p><b>  {</b></p><p>  printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n"); </p><p>  printf("\t☆

110、 * 主菜單 * ☆\n"); </p><p>  printf("\t★ ********** ★\n");</p><p>  printf("\t

111、 ☆☆\n"); </p><p>  printf("\t★ 1.查詢職工信息\t\t\t\t 2.插入職工信息\t★\n\t☆ 3.刪除職工信息\t\t\t\t 4.修改職工信息\t☆\n\t★ 5.排序職工信息\t\t\t\t 6.顯示職工信息\t★\n\t☆ 7.保存職工信息\t\t\t\t 8.創(chuàng)建職工信息\t☆\

112、n\t★ 9.退出管理系統(tǒng)\n"); </p><p>  printf("\t ☆☆\n"); </p><p>  printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n"); </p

113、><p><b>  while(1)</b></p><p>  switch(getchar())</p><p><b>  {</b></p><p>  case '1':system("CLS");search_by_name(head);getchar(

114、);getchar();system("CLS");Menu(head);break;</p><p>  case '2':system("CLS");Insert(head);getchar();system("CLS");Menu(head);break;</p><p>  case '3'

115、:system("CLS");Delete(&head);getchar();getchar();system("CLS");Menu(head);break;</p><p>  case '4':system("CLS");Edite(head);getchar();system("CLS");Menu(h

116、ead);break;</p><p>  case '5':system("CLS");head=Sort(head);getchar();getchar();system("CLS");Menu(head);break;</p><p>  case '6':system("CLS");Outp

117、ut(head);getchar();getchar();system("CLS");Menu(head);break;</p><p>  case '7':system("CLS");sav(head);getchar();getchar();system("CLS");Menu(head);break;</p><

118、;p>  case '8':system("CLS");Creat(&head);getchar();getchar();system("CLS");Menu(head);break;</p><p>  case '9':exit(0);</p><p>  default:break;</p&g

119、t;<p><b>  }</b></p><p><b>  }</b></p><p>  void Output(WI *head) //輸出函數(shù)</p><p><b>  {</b></p><p>  WI *p=head;</p>&

120、lt;p><b>  while(p)</b></p><p><b>  {</b></p><p>  printf("%*s%*s%*s%*s\n",12,"Name",11,"sex",16,"birthday",15,"workday&quo

121、t;);</p><p>  printf("%*s%*s%*s%*s\n\n",strlen("name")+8,p->name,strlen("sex")+8,p->sex,strlen("birthday")+8,p->birthday,strlen("workday")+8,p->w

122、orkday);</p><p>  printf("%*s%*s%*s%*s\n",16,"position",17,"education",15,"address",14,"number");</p><p>  printf("%*s%*s%*s%*s",strle

123、n("position")+8,p->position,strlen("education")+8,p->education,strlen("address")+8,p->address,strlen("number")+8,p->number);</p><p>  printf("\n______

124、_____________________________________________________________\n");</p><p>  printf("\n\n\n");</p><p>  p=p->next;</p><p><b>  }</b></p><p>

125、;<b>  }</b></p><p>  void main(void) //主函數(shù)</p><p><b>  {</b></p><p><b>  WI *work;</b></p><p>  work=opn();</p><p>  M

126、enu(work);</p><p><b>  }</b></p><p><b>  五子棋課程設(shè)計報告</b></p><p><b>  一、需求分析</b></p><p>  五子棋是有兩個人在一盤棋上進(jìn)行對抗的競技運動。在對局開始時,先由用戶選擇哪方先開局,先開局

127、一方將一枚棋子落在一點上,然后由另一方在對方棋周圍的交叉點上落子,如此輪流落子,直到某一方首先在棋盤的直線、橫線或斜線上形成連續(xù)的五子則該方就算獲勝。 本程序要實現(xiàn)人人對戰(zhàn)以及人機(jī)對戰(zhàn),人機(jī)對戰(zhàn)中電腦這方具有一定智能,具備對奕能力。人人對戰(zhàn)中,雙方棋手采用鍵盤輸入坐標(biāo)控制。游戲開始后,選擇模式,可進(jìn)入相應(yīng)界面,界面顯示15*15的棋盤,本游戲默認(rèn)白棋先手,五子連珠者勝,人機(jī)對戰(zhàn)中,程序會提示電腦當(dāng)前下棋的位置,結(jié)束時會顯示對戰(zhàn)

128、雙方勝負(fù)情況。</p><p>  本程序難點為以下三個方面的實現(xiàn):</p><p><b>  1.電腦下子的實現(xiàn)</b></p><p>  人機(jī)對戰(zhàn)中電腦下子是通過AI(int *p,int *q)這個函數(shù)實現(xiàn)的。用p 、q返回下子的坐標(biāo)。先歷遍棋盤上所有點,如發(fā)現(xiàn)一個空點則調(diào)用函數(shù)value(int p,int q)計算該空點的價值。每

129、個點又由8個方向的棋型組成。調(diào)用函數(shù)qixing(int n,int p,int q)判斷空點p q在n方向上的棋型號。對每種棋型進(jìn)行賦值,然后對各個方向的棋型進(jìn)行分析。最后計算出該空點的價值。如此找到棋盤上價值最大的空點,則電腦在該處下子。</p><p><b>  2.棋型價值的計算</b></p><p>  棋型價值的計算是通過函數(shù)value(int p,i

130、nt q)實現(xiàn)的。先調(diào)用函數(shù)qixing(int n,int p,int q) 判斷空點p q在n方向上的棋型號。n為1-8方向 從右順時針開始數(shù)。對8個方向的棋型進(jìn)行分析后給出該點的價值。各種棋型的價值存在數(shù)組a[2][4][4]中。本程序?qū)上喾捶较虻钠逍瓦M(jìn)行合在一起進(jìn)行分析。本程序分為六類進(jìn)行討論。</p><p><b>  空棋型and其他。</b></p><

131、p>  邊界沖棋型and其他。</p><p>  邊界空沖棋型and其他。</p><p>  己活己活 己活己沖 對活對活 對活對沖。</p><p>  己活對活 己活對沖 己沖對活 己沖對沖。</p><p><b>  其他棋型。</b></p><p>  3. 勝利及棋型的判斷

132、</p><p>  勝利及棋型的判斷都調(diào)用了函數(shù)yiwei(int n,int *i,int *j)。在n方向上對坐標(biāo) i j 移位。 n為1-8方向 從右順時針開始數(shù)。</p><p>  勝利的判斷:每下一次子從該點向1方向移位,移位后判斷新點是否與下的子相同。如相同則繼續(xù)移位判斷,否則轉(zhuǎn)向判斷即n+=4;如轉(zhuǎn)向后仍然沒五連,則換下一個方向判斷即 n-=3;直到出現(xiàn)五

133、連則勝利,如果8個方向判斷完都沒有五 連則返回0,表示還未勝利。</p><p>  棋型的判斷:棋型的判斷主要運用switch語句。在某一方向移位后判斷該點的狀態(tài)。最后得出該方向上的棋型號。</p><p><b>  二、概要設(shè)計 </b></p><p>  共設(shè)計有有8個模塊:</p><p>  界面模塊和主控

134、模塊。</p><p>  畫圖模塊和判斷輸贏模塊。</p><p>  電腦下子模塊和計算下子價值模塊。</p><p>  棋型模塊和移位模塊。</p><p>  五子棋流程圖,如圖所示:</p><p><b>  圖(1)</b></p><p><b>

135、;  三、詳細(xì)設(shè)計</b></p><p><b>  (1)程序預(yù)處理</b></p><p>  程序預(yù)處理部分包括加載頭文件、定義全局變量和定義數(shù)據(jù)結(jié)構(gòu),并對它們進(jìn)行初始化工作。具體加載的頭文件代碼如下:</p><p>  # include<stdio.h> </p><p>  #

136、 include<string.h> /*于字符數(shù)組的函數(shù)定義的頭文件*/</p><p>  # include<stdlib.h> /*standard library標(biāo)準(zhǔn)庫頭文件*/</p><p> ?。?)界面模塊和主控模塊</p><p>  該模塊主要用于界面初始化,處理游戲運行過程中所輸入的指令。主要函數(shù)是:</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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論