版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計(jì)--保安排班系統(tǒng)
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告
- c語言語言課程設(shè)計(jì)報(bào)告
- c語言年歷課程設(shè)計(jì)報(bào)告
- C語言課程設(shè)計(jì)報(bào)告.doc
- c語言課程設(shè)計(jì)實(shí)踐報(bào)告
- c語言課程設(shè)計(jì)報(bào)告模版
- c語言課程設(shè)計(jì)報(bào)告---游戲設(shè)計(jì)
- c課程設(shè)計(jì)報(bào)告-- c語言程序設(shè)計(jì)
- 【課程設(shè)計(jì)】c語言課程設(shè)計(jì)
- c語言背單詞課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告--背單詞
- c語言磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)報(bào)告----簡(jiǎn)易繪圖
- c語言背單詞課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)實(shí)踐報(bào)告--時(shí)鐘
- c語言課程設(shè)計(jì)報(bào)告-游戲2048
評(píng)論
0/150
提交評(píng)論