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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、st 的指針head, q, p;再分別創(chuàng)建7個(gè)新結(jié)點(diǎn);并將7個(gè)新結(jié)點(diǎn)的name分別初始化,避免出現(xiàn)野指針。</p><p>  定義myinput函數(shù),存入每名保安的輪休選擇;它的作用是:依次輸入各個(gè)保安人員想要的休息日(1—7),當(dāng)所輸入的休息日數(shù)小于7時(shí),輸入一個(gè)負(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";記錄程序運(yùn)行的結(jié)果。重新定義一個(gè)struct linklist *s[7];利用for循環(huán)讓其分別指向7個(gè)結(jié)點(diǎn),利 用7個(gè)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é)點(diǎn) </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)友但有對(duì)其進(jìn)行修改,該函數(shù)主要功能是錄入每個(gè)保安的輪休選擇,并進(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-----請(qǐng)輸入你想要的休息日(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)計(jì)一個(gè)星期的每一天,有多少保安選擇該天作為休息日*/ </p>&

19、lt;p><b>  i++;</b></p><p>  }while(p1->day[i-1]>=0&&i<7); /*當(dāng)想要的休息日數(shù)小于七天時(shí),以負(fù)數(shù)結(jié)束輸入,如當(dāng)想要的休息日是:星期一,星期三,星期日時(shí),輸入: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ù)不能滿足每天都有人值班!請(qǐng)重新輸入!\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]儲(chǔ)存分配給第一個(gè)保安的休息日,y[2]儲(chǔ)存分配給第二個(gè)保安的休息日……*/</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個(gè)結(jié)點(diǎn)。</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時(shí)結(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(); //從控制臺(tái)讀取一個(gè)字符,但不顯示在屏幕上 用getch();會(huì)等待你按下任意鍵,再繼續(xù)執(zhí)行下面的語句;</p><p><b>  }</b></p><p>  五、程

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

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

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

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

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

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

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

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

50、</p><p>  [1] 譚浩強(qiáng)等編著,C語言程序設(shè)計(jì)學(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版,北京:機(jī)械工業(yè)出版社,25-33頁。</p>&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論