c語言保安排版課程設(shè)計報告_第1頁
已閱讀1頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p><b>  保安排班系統(tǒng)</b></p><p><b>  設(shè)計任務(wù)與目標(biāo)</b></p><p>  如今是信息高速發(fā)展的時代,我們已經(jīng)進(jìn)入了信息社會。作為計算機專業(yè)的學(xué)生,我們更應(yīng)該了解信息的重要性,而電腦是當(dāng)今社會的重要交流工具。使用計算機進(jìn)行信息控制,

2、不僅提高了工作效率,而且大大的提高了其安全性。作為電腦操作者,動手能力無疑是最重要的環(huán)節(jié),課程設(shè)計就是鍛煉動手能力的不錯平臺。作為高科技人才,我們必須會運用C,編寫應(yīng)用程序,是一個計算機學(xué)院學(xué)生必備的技能。無論是以后的工作,還是現(xiàn)在的學(xué)習(xí),都要求我們能夠做好課程設(shè)計。保安人員休息時間安排系統(tǒng)是一個簡單的小程序,通過它,可以讓我們掌握一個完整系統(tǒng)的設(shè)計和實現(xiàn)的方法,鞏固所學(xué)的程序設(shè)計的知識。通過課程設(shè)計的訓(xùn)練,學(xué)生了解程序設(shè)計的基本開發(fā)過

3、程,掌握編寫、調(diào)試和測試C語言程序的基本技巧,充分理解結(jié)構(gòu)化程序設(shè)計的基本方法,熟悉運用結(jié)構(gòu)化程序設(shè)計的方法。此類問題的已有類似工作,是應(yīng)用結(jié)構(gòu)體來處理的,而我將在這的基礎(chǔ)上應(yīng)用鏈表,指針來完成保安排班系統(tǒng),利用for循環(huán)來為保安輪休選擇排列組合。這樣能夠讓我熟悉并掌握掌握鏈表,指針的相關(guān)知識,。進(jìn)行本設(shè)計時要達(dá)到的具體的目標(biāo):</p><p>  應(yīng)用鏈表來完成保安排班系統(tǒng)。</p><p&

4、gt;  所設(shè)計的程序能夠識別不滿足排班的情況。</p><p>  利用for循環(huán)來排列組合保安的輪休選擇。</p><p>  必須用到c語言的精華部分:指針。</p><p>  利用文件的讀取,記錄程序的運行結(jié)果。</p><p><b>  方案設(shè)計與論證</b></p><p><

5、;b>  設(shè)計思路</b></p><p>  聲明一linklist結(jié)構(gòu)體類型的結(jié)點,含“char *name;int day[7];”兩個成員, </p><p>  還有 struct linklist類型的指針 next。</p><p>  定義建表函數(shù):定義指針數(shù)組char *n[7]指向7個保安的姓氏;定義struct linkli

6、st 的指針head, q, p;再分別創(chuàng)建7個新結(jié)點;并將7個新結(jié)點的name分別初始化,避免出現(xiàn)野指針。</p><p>  定義myinput函數(shù),存入每名保安的輪休選擇;它的作用是:依次輸入各個保安人員想要的休息日(1—7),當(dāng)所輸入的休息日數(shù)小于7時,輸入一個負(fù)數(shù)結(jié)束該保安的數(shù)據(jù)輸入,(如:趙想要的休息日是星期一,星期二,星期六,則輸入:1 2 6 -1<回車>);當(dāng)所有的數(shù)據(jù)輸入后,不能使

7、每天都有保安值班,則提示并重新輸入數(shù)據(jù)。</p><p>  定義myfuny函數(shù):</p><p>  定義FILE型的指針fp,讓其指向文件,文件名filename[]="保安排版.txt";記錄程序運行的結(jié)果。重新定義一個struct linklist *s[7];利用for循環(huán)讓其分別指向7個結(jié)點,利 用7個for循環(huán)為保安的輪休選擇排列組合,如果分

8、配給這7名保安的休息日互不相等,則該分配方式滿足要求,并輸出。</p><p><b>  定義主函數(shù): </b></p><p>  定義struct linklist *a; 調(diào)用函數(shù)myinput以a為參數(shù),調(diào)用清屏函數(shù)system("cls"),和函數(shù)myfun以a為參數(shù)。</p><p>  三、程序框圖或流程圖,

9、程序清單與調(diào)用關(guān)系</p><p><b>  四、全部源程序清單</b></p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  #include<conio.h>/*包含 getch()*/</p&

10、gt;<p>  #include<stdlib.h></p><p>  struct linklist </p><p>  { char *name;</p><p>  int day[7];</p><p>  struct linklist *next; </p><p><

11、b>  };</b></p><p>  struct linklist *creat(int m)/*建表函數(shù)*/ </p><p>  {char*n[7]={"趙","錢","孫","李","周","吳","陳"};</p

12、><p>  int d[7]={0};</p><p><b>  int i; </b></p><p>  struct linklist *head, *q, *p; </p><p>  head=(struct linklist *)malloc(sizeof(struct linklist));</p&g

13、t;<p>  head->name=n[0]; </p><p>  q=head;//頭指針賦給指針q</p><p>  for(i=1;i<m;i++) </p><p><b>  {</b></p><p>  p=(struct linklist *)malloc(sizeof(s

14、truct linklist));//創(chuàng)建新結(jié)點 </p><p>  p->name=n[i];</p><p>  q->next=p; </p><p><b>  q=p; </b></p><p><b>  } </b></p><p>  q->

15、;next=NULL; </p><p>  return head; </p><p><b>  }</b></p><p>  void myinput(struct linklist *q1)//參考zsq88網(wǎng)友但有對其進(jìn)行修改,該函數(shù)主要功能是錄入每個保安的輪休選擇,并進(jìn)行相應(yīng)的判斷。</p><p>  {

16、struct linklist *p1=q1;</p><p>  int i,r[8]={0},c;</p><p>  printf("=======================排班系統(tǒng)=======================\n");</p><p>  for(c=0;c<7;c++)</p><p&g

17、t;<b>  {</b></p><p>  printf("%s-----請輸入你想要的休息日(1-7):",p1->name);</p><p><b>  i=0;</b></p><p><b>  do</b></p><p><b&

18、gt;  {</b></p><p>  scanf("%d",&p1->day[i]);</p><p>  if(p1->day[i]>0) r[p1->day[i]]++; /*"r[p->day[i]]++"用來統(tǒng)計一個星期的每一天,有多少保安選擇該天作為休息日*/ </p>&

19、lt;p><b>  i++;</b></p><p>  }while(p1->day[i-1]>=0&&i<7); /*當(dāng)想要的休息日數(shù)小于七天時,以負(fù)數(shù)結(jié)束輸入,如當(dāng)想要的休息日是:星期一,星期三,星期日時,輸入:1 3 7 -1<出車>*/</p><p>  printf("-----------

20、-------------------------------------------\n");</p><p>  p1=q1->next;q1=p1;</p><p><b>  }</b></p><p>  if(r[1]==0||r[2]==0||r[3]==0||r[4]==0||r[5]==0||r[6]==0||

21、r[7]==0) /*若一星期內(nèi)存在某一天或以上完全沒人選做休息日,則重新輸入*/</p><p><b>  {</b></p><p>  printf("輸入的數(shù)據(jù)不能滿足每天都有人值班!請重新輸入!\n");</p><p>  printf("按任意鍵繼續(xù)...");</p>&l

22、t;p><b>  getch();</b></p><p>  system("cls");</p><p><b>  }</b></p><p><b>  }</b></p><p>  void myfuny(struct linklist

23、*t) // 部分參考zsq88網(wǎng)友</p><p>  {FILE *fp;</p><p>  char filename[]="baoanpaiban.txt";</p><p>  char xingqi[8][7]={"","星期一","星期二","星期三"

24、;,"星期四","星期五","星期六","星期日"}; </p><p>  int y[7],j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,b; /*定義數(shù)組y[7],y[1]儲存分配給第一個保安的休息日,y[2]儲存分配給第二個保安的休息日……*/</p><p><b>

25、  int n=1;</b></p><p>  struct linklist *p2=t,*s[7];//定義struct linklist類型的指針q和指針數(shù)組s[7]。</p><p>  fp=fopen(filename,"w");//將程序執(zhí)行的結(jié)果保存在“保安排版.txt”文檔中。</p><p>  for(b=0;

26、b<7;b++)</p><p><b>  {</b></p><p>  s[b]=p2; //利用for循環(huán)讓指針s[0],s[1]… …s[5],s[6]分別依次指向7個結(jié)點。</p><p>  p2=t->next;</p><p><b>  t=p2;</b></

27、p><p><b>  }</b></p><p>  for(j1=0;s[0]->day[j1]>0&&j1<7;j1++) /*當(dāng)s[0].day[j1]為負(fù)數(shù)或j1>=7時結(jié)束循環(huán),下同*/</p><p><b>  {</b></p><p>  y[

28、0]=s[0]->day[j1];</p><p>  for(j2=0;s[1]->day[j2]>0&&j2<7;j2++)</p><p><b>  {</b></p><p>  y[1]=s[1]->day[j2]; </p><p>  for(j3=0;s[2

29、]->day[j3]>0&&j3<7;j3++)</p><p><b>  {</b></p><p>  y[2]=s[2]->day[j3]; //利用for循環(huán)進(jìn)行排列組合比較,滿足的方案就輸出。</p><p>  for(j4=0;s[3]->day[j4]>0&am

30、p;&j4<7;j4++)</p><p><b>  {</b></p><p>  y[3]=s[3]->day[j4];</p><p>  for(j5=0;s[4]->day[j5]>0&&j5<7;j5++)</p><p><b>  {<

31、;/b></p><p>  y[4]=s[4]->day[j5];</p><p>  for(j6=0;s[5]->day[j6]>0&&j6<7;j6++)</p><p><b>  {</b></p><p>  y[5]=s[5]->day[j6];<

32、/p><p>  for(j7=0;s[6]->day[j7]>0&&j7<7;j7++)</p><p><b>  {</b></p><p>  y[6]=s[6]->day[j7];</p><p>  if(y[0]!=y[1]&&y[0]!=y[2]&

33、;&y[0]!=y[3]&&y[0]!=y[4]&&y[0]!=y[5]&&y[0]!=y[6]&&y[1]!=y[2]&&y[1]!=y[3]&&y[1]!=y[4]&&y[1]!=y[5]&&y[1]!=y[6]&&y[2]!=y[3]&&y[2]!=y[4]&

34、;&y[2]!=y[5]&&y[2]!=y[6]&&y[3]!=y[4]&&y[3]!=y[5]&&y[3]!=y[6]&&y[4]!=y[5]&&y[4]!=y[6]&&y[5]!=y[6])</p><p>  {printf("Solution: %d\n趙 錢 孫 李 周 吳

35、陳\n",n);</p><p>  fprintf(fp,"Solution: %d\n趙 錢 孫 李 周 吳 陳\n",n);</p><p>  printf("=======================================================================\n");</p>

36、<p>  fprintf(fp,"=======================================================================\n");</p><p>  printf("%s %s %s %s %s %s %s\n\n\n",xingqi[y[0]],xingqi[y[1]],xingqi[y[2]],xi

37、ngqi[y[3]],xingqi[y[4]],xingqi[y[5]],xingqi[y[6]]);</p><p>  fprintf(fp,"%s %s %s %s %s %s %s\n\n\n",xingqi[y[0]],xingqi[y[1]],xingqi[y[2]],xingqi[y[3]],xingqi[y[4]],xingqi[y[5]],xingqi[y[6]]);<

38、/p><p><b>  n++;</b></p><p>  } /*如果分配給這7名保安的休息日互不相等,則該分配方式滿足要求,并輸出在屏幕上*/ </p><p><b>  }</b></p><p><b>  } </b></p><p><

39、;b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  fclo

40、se(fp);</p><p><b>  }</b></p><p>  void main() </p><p>  { struct linklist *a;</p><p>  a=creat(7); </p><p>  myinput(a);</p><p> 

41、 system("cls");//清屏的作用 </p><p>  myfuny(a);</p><p>  getch(); //從控制臺讀取一個字符,但不顯示在屏幕上 用getch();會等待你按下任意鍵,再繼續(xù)執(zhí)行下面的語句;</p><p><b>  }</b></p><p>  五、程

42、序運行結(jié)果測試與分析</p><p>  以下是不滿足的時候的情況:(假設(shè)沒人選星期三作為休息日)</p><p><b>  六、結(jié)論與心得</b></p><p>  這次課程設(shè)計歷時三個多星期。剛開始時,思緒全無,舉步維艱,對于理論知識學(xué)習(xí)不夠扎實的我深感“書到用時方恨少”,再加上因為已經(jīng)過去一個學(xué)期了,期間又沒有怎么看書,考完試就放下了

43、,許多知識都已經(jīng)忘記了。于是我重拾教材與實驗手冊,對知識系統(tǒng)而全面進(jìn)行了梳理,遇到難處先是自己思考再向同學(xué)老師請教,終于基本掌握了基本理論知識。最終我完成了這個C語言程序的設(shè)計,認(rèn)真完成了課程設(shè)計報告。</p><p>  我做的是保安休息時間安排系統(tǒng),雖然是很簡單的一個小程序,但老師要求我用鏈表做,對我一個剛剛學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人來說卻是一個很大的困難,更何況這是第一次做課程設(shè)計。所以,在得知自己要做這個課程設(shè)計時

44、,真不知道應(yīng)該如何開始。于是我拿出書本自學(xué)鏈表知識。經(jīng)過幾天的努力,大體上把課本上鏈表的知識點看了一遍,然后在網(wǎng)上找了一下相關(guān)資料,體會別人是如何編程。</p><p>  在本程序調(diào)試中我總是遇到不少困難:</p><p>  1. .如何讓這7名保安輸入自己想要的休息日,怎么從一個星期中的7天進(jìn)行選擇,每個人以什么樣的數(shù)據(jù)形式輸入,以及每個人要輸入的數(shù)據(jù)個數(shù)也可能不一樣。為了解決這個問

45、題,并挑戰(zhàn)自己的能力,本想用鏈表和枚舉類型來設(shè)計這道程序的,但發(fā)現(xiàn)在實現(xiàn)算法的過程中,由于自己對這些知識掌握的不夠,很多技術(shù)問題難以解決,于是放棄了這種做法,定義結(jié)構(gòu)體來儲存各個保安的信息,在結(jié)構(gòu)體內(nèi)用數(shù)組來存儲各個保安輸入的信息,保安以整形數(shù)據(jù)類型的形式輸入數(shù)據(jù),但所輸入數(shù)據(jù)數(shù)小于7個時,以負(fù)數(shù)結(jié)尾,如此,數(shù)據(jù)輸入方式簡單不易出錯.</p><p>  2. 當(dāng)7名保安都輸入數(shù)據(jù)后,無法使每一天都有人值班,這時

46、所輸入的數(shù)據(jù)就不滿足要求,那么怎么判斷這種情況呢。解決辦法是:定義一個數(shù)組r[8],r[1]-r[7]分別代表從星期一到星期天,保安們每選中一天,就使這一天對應(yīng)的數(shù)組成員自動加1,當(dāng)7名保安都輸入數(shù)據(jù)后,若從r[1]——r[7]7個數(shù)中有一個仍為0,則說明輸入輸數(shù)據(jù)不滿足要求,并以遞歸函數(shù)實現(xiàn)重新輸入數(shù)據(jù)。</p><p>  3.設(shè)計此程序本著以輸入“數(shù)字化”,結(jié)果輸出”文字化“的理念,那么怎么在輸出時,以漢字

47、的形式表示出來呢。思路是定義一個二維數(shù)組,數(shù)組中存放”星期一“,”星期二“……那么我們可以通過前面輸入的數(shù)字作為行下標(biāo),來引用這些文字,從而問題得到解決。</p><p>  4另外,程序在調(diào)試上,也遇到了不少問題,由于調(diào)試缺乏技巧,花了不少時間處理,所以以后必須多上機,不斷積累程序調(diào)試經(jīng)驗。例如在調(diào)試過程中</p><p>  .程序總是提示:“0x004011c6指令引用的0xcccc

48、cccc內(nèi)存該內(nèi)存不能為read”。剛開始我并不明白其代表的意思,為了解決這一問題我查了不少參考資料,同時向CSDN網(wǎng)友求助,后方知弄清其意思。此后經(jīng)過多番修改調(diào)試,終于完成本程序的編寫。</p><p>  回顧這次課程設(shè)計,我收獲了很多。首先,在這過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計劃,如何去實現(xiàn)這個計劃;其次,在設(shè)計過程中,我認(rèn)識到學(xué)好計算機要重視實踐操作,不僅僅是

49、學(xué)習(xí)C語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐;最后,我還大致了解了軟件開發(fā)的大體過程及各個步驟,這對將來的學(xué)習(xí)和工作是很有幫助的。</p><p>  但因時間關(guān)系沒有來得及完成的其他想法,例如屏幕背景顏色和字符顏色的設(shè)置,我本打算使用數(shù)據(jù)庫系統(tǒng),VC++等方法實現(xiàn)。還有保安個人信息的錄入與輸出。</p><p><b>  七、參考資料</b>

50、</p><p>  [1] 譚浩強等編著,C語言程序設(shè)計學(xué)習(xí)輔導(dǎo),北京:清華大學(xué)出版社,214-222頁。</p><p>  [2] 嚴(yán)蔚敏 吳偉民編著, 數(shù)據(jù)結(jié)構(gòu)(c語言版)北京:清華大學(xué)出版社,27-31頁。</p><p>  [3] 陳守孔 孟佳娜 武秀川等編著,算法與數(shù)據(jù)結(jié)構(gòu)c語言版第2版,北京:機械工業(yè)出版社,25-33頁。</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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論