C++課程設(shè)計投票程序_第1頁
C++課程設(shè)計投票程序_第2頁
C++課程設(shè)計投票程序_第3頁
C++課程設(shè)計投票程序_第4頁
C++課程設(shè)計投票程序_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、各專業(yè)全套優(yōu)秀畢業(yè)論文圖紙c/c+程序設(shè)計課程設(shè)計課程設(shè)計題目: 投票程序 系 別: 計算機科學與工程 專 業(yè): 信息管理與信息系統(tǒng) 小組成員: xxx 設(shè) 計 者: xxx 指導教師: xxx 批語:河南城建學院2014年 12 月 25 日設(shè)計題目:投票程序1一、設(shè)計要求和分工11、設(shè)計要求12、設(shè)計目標2二、數(shù)據(jù)結(jié)構(gòu)設(shè)計2數(shù)據(jù)結(jié)構(gòu)設(shè)計描述2三、變量的定義和作用4四、系統(tǒng)各模塊( 函數(shù))的組成,功能61、 輸入模塊:62、 統(tǒng)計模塊:63、 輸出功能:7五、各功能模塊的算法處理流程圖及相關(guān)說明81、 輸入模塊的算法處理流程圖及相關(guān)說明:82、統(tǒng)計模塊的算法處理流程圖及相關(guān)說明:82、 輸出

2、模塊的算法處理流程圖及相關(guān)說明:9六、程序設(shè)計過程中遇到的問題及解決過程101、 問題一及解決過程:102、 問題二及解決過程:103、 問題三及解決過程:11七、 課程設(shè)計總結(jié)或體會111、總結(jié)112、體會12附錄:源程序12參考文獻14設(shè)計題目:投票程序一、設(shè)計要求和分工1、設(shè)計要求要求在設(shè)計過程中,充分發(fā)揮自己的獨立工作能力及創(chuàng)造能力,對每個問題都應(yīng)進行分析、比較,并提出自己的見解,反對盲從,杜絕抄襲。在設(shè)計過程中必須做到:1.隨時復(fù)習教科書、聽課筆記及習題;2.做好準備工作,充分發(fā)揮自己的主觀能動性和創(chuàng)造性,及時查閱相關(guān)資料;3.認真編程;4.按預(yù)定計劃及時完成任務(wù)。2、設(shè)計目標設(shè)有代

3、號為a,b,c的三位亞洲小姐候選人,根據(jù)投票者在選票上對他們代號的填寫順序分別記分5,3,2。請編程從鍵盤上輸入投票人數(shù)及投票結(jié)果,統(tǒng)計他們的得分,并輸出哪位當選亞洲小姐。請注意:若同一張票上寫有兩個相同代號,或者投票者在選票上填寫的代號不是a,b,c的三位亞洲小姐候選人的代號,則顯示“此票無效”;對候選人按照他們的得分排序,然后比較前兩名候選人得分是否相同。如果相同,則顯示“重新投票”;否則顯示三個候選者得分并輸出“祝賀x當選冠軍”,x為最高分候選者。例如:投票人數(shù):6輸入投票內(nèi)容:abccabcbacaa該票無效!rca該票無效!cba三位候選人得分:a:12b:13c:15 “祝賀x當選

4、冠軍”,x為最高分候選者。二、數(shù)據(jù)結(jié)構(gòu)設(shè)計數(shù)據(jù)結(jié)構(gòu)設(shè)計描述開始定義結(jié)構(gòu)體、相關(guān)變量和常量輸入投票人數(shù)和投票內(nèi)容選票代號是否重復(fù)是否含有其他人ny該票無效統(tǒng)計相應(yīng)候選人的票數(shù)并排序輸出投票結(jié)果yn判斷前兩名總票數(shù)是否相等重新投票輸出獲勝者結(jié)束三、變量的定義和作用#include #include /以上兩個是包含庫。struct hxr int code; int score; /定義代號、得分兩個整型數(shù)據(jù)。 hxr3; /定義一個結(jié)構(gòu)體存放候選人數(shù)據(jù)。main() /入口函數(shù)。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定義接收投票的變量。 struct

5、 hxr hxr3; /用hxr定義結(jié)構(gòu)體數(shù)組。 printf(請輸入投票總?cè)藬?shù):n); scanf(%d,&k); /將投票人數(shù)放入標量k。 printf(請輸入投票:n); getchar(); /攔截scanf的最后一個回車。 while(end=0) /while語句進行循環(huán)判定,if出現(xiàn)出現(xiàn)前兩名并列第一時,返回while語句重新投票else輸出冠軍結(jié)束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化結(jié)構(gòu)體數(shù)組。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /將投票按照x,y,z的順序輸入。 ge

6、tchar();/攔截回車,否則最后一個字符輸入完畢按回車之后,回車的輸入沒有東西接收,就會變成下次循環(huán)的第一個字符scanf就會接收,那么二次循環(huán)的第一個字符就智能讀到回車了,所以第一次結(jié)尾用getchar()攔截回車. if(x!=y&x!=z&y!=z)&(x=a| x=b|x=c)&(y=a| y=b|y=c)&(z=a| z=b|z=c) / 只有所投票中3位候選人各出現(xiàn)一次且所投票必須是a,b,c以內(nèi)的字母此票才有效,不符合執(zhí)行if下面的prinft語句。 hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2); hxr

7、2.score+=(x=c?5:(y=c?3:2); /三目運算判斷三個投票人一輪投票的結(jié)果,每有人投一次就判斷累加一次。 printf( score: %d %d %dn,hxr0.score,hxr1.score,hxr2.score); / 輸出投入該票后,三個人累計得分。 continue; / continue 語句的用法是跳過continue下面的語句進入下一次循環(huán)! printf(此票無效n); for(i=0;i3;i+) if(temp=hxr2.score) | ( (hxr0.score=hxr2.score)&hxr0.score=hxr1.score) | (hxr1

8、.score=hxr2.score)&hxr1.score=hxr0.score) printf(重新投票n);/ 如果出現(xiàn)前兩名并列第一,則打印“重新投票”。 else printf(祝賀%c當選冠軍,%c為最高分候選者。n,j,j); / 否則輸出得分最高者的名字。 end=1; getchar(); / 增加一個輸入命令,防止程序直接退出看不到結(jié)果。四、系統(tǒng)各模塊( 函數(shù))的組成,功能1、 輸入模塊:main() /入口函數(shù)。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定義接收投票的變量。 struct hxr hxr3; /用hxr定義結(jié)構(gòu)體數(shù)組

9、。 printf(請輸入投票總?cè)藬?shù):n); scanf(%d,&k); /將投票人數(shù)放入標量k。 printf(請輸入投票:n); getchar(); /攔截scanf的最后一個回車。 while(end=0) /while語句進行循環(huán)判定,if出現(xiàn)出現(xiàn)前兩名并列第一時,返回while語句重新投票else輸出冠軍結(jié)束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化結(jié)構(gòu)體數(shù)組。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /將投票按照x,y,z的順序輸入。 getchar();/攔截回車,否則最后一個字符輸

10、入完畢按回車之后,回車的輸入沒有東西接收,就會變成下次循環(huán)的第一個字符scanf就會接收,那么二次循環(huán)的第一個字符就智能讀到回車了,所以第一次結(jié)尾用getchar()攔截回車.2、 統(tǒng)計模塊:if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a| y=b|y=c)&(z=a| z=b|z=c) / 只有所投票中3位候選人各出現(xiàn)一次且所投票必須是a,b,c以內(nèi)的字母此票才有效,不符合執(zhí)行if下面的prinft語句。 hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2); hxr2.score+=(x=c?5:(

11、y=c?3:2); /三目運算判斷三個投票人一輪投票的結(jié)果,每有人投一次就判斷累加一次。 printf( score: %d %d %dn,hxr0.score,hxr1.score,hxr2.score); / 輸出投入該票后,三個人累計得分。 continue; / continue 語句的用法是跳過continue下面的語句進入下一次循環(huán)! printf(此票無效n); 3、 輸出功能:for(i=0;i3;i+) if(temp=hxr2.score) | ( (hxr0.score=hxr2.score)&hxr0.score=hxr1.score) | (hxr1.score=hx

12、r2.score)&hxr1.score=hxr0.score) printf(重新投票n);/ 如果出現(xiàn)前兩名并列第一,則打印“重新投票”。 else printf(祝賀%c當選冠軍,%c為最高分候選者。n,j,j); / 否則輸出得分最高者的名字。 end=1; getchar(); / 增加一個輸入命令,防止程序直接退出看不到結(jié)果。五、各功能模塊的算法處理流程圖及相關(guān)說明1、 輸入模塊的算法處理流程圖及相關(guān)說明:開始定義結(jié)構(gòu)體、相關(guān)變量和常量輸入投票人數(shù)和投票內(nèi)容圖一,輸入模塊流程圖說明:首先定義輸入相關(guān)的變量、常量和結(jié)構(gòu)體,char x,y,z;為接收投票的變量,struct hxr

13、hxr3;hxr為定義的結(jié)構(gòu)體數(shù)組;輸入投票人數(shù)和投票內(nèi)容,投票人數(shù)標量為:k。2、統(tǒng)計模塊的算法處理流程圖及相關(guān)說明:開始選票代號是否重復(fù)是否含有其他人ny該票無效統(tǒng)計相應(yīng)候選人的票數(shù)并排序圖二,統(tǒng)計模塊流程圖說明:if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a|y=b|y=c)&(z=a| z=b|z=c) / 判斷所投票中3位候選人是否各出現(xiàn)一次且所投票是a,b,c以內(nèi)的字母,若不符合合執(zhí)行if下面的prinft語句,若是,通過hxri.score+累加執(zhí)行三目運算統(tǒng)計三個投票人投票的結(jié)果。2、 輸出模塊的算法處理流程圖及相關(guān)說明:開始yn判斷前兩名總票數(shù)是否

14、相等重新投票輸出獲勝者結(jié)束圖三,輸出模塊流程圖說明:首先通過temp=hxri.score; j=a+i;將得分最高的人,最高得分保存在temp里,并將這個人的名字(a、b或c)保存在j里。然后用printf(people %c score %dn,a+hxri.code,hxri.score);輸出3個人各自的得分情況;最后判定前兩名的分數(shù)是否相等,若相等輸出重新投票,否則輸出“祝賀x當選冠軍,x為最高分候選者。”并結(jié)束程序。六、程序設(shè)計過程中遇到的問題及解決過程1、 問題一及解決過程: 問題一:hxri.code和hxri.score未進行初始化,導致程序出錯。解決過程:通過仔細檢查,發(fā)現(xiàn)

15、問題并對結(jié)構(gòu)體數(shù)組 hxri.code=i; hxri.score=0; 進行初始化。2、 問題二及解決過程: 問題二:使用if(x!=y&x!=z&y!=z)進行判定時,只對所投票中3位候選人各出現(xiàn)一次進行了判定,但是若輸入的選票不在a,b,c三位候選人以內(nèi)則無法判定為廢票。解決過程:通過在原來的基礎(chǔ)上增加限定條件進行改善,出現(xiàn)的問題得到了解決;修改后的代碼如下: if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a|y=b|y=c)&(z=a| z=b|z=c)3、 問題三及解決過程:問題三:三位候選人的分數(shù)如果用ifelse語句進行判斷的話代碼會很繁瑣,而且不易進行

16、累加積分,所以很難計算三位候選人的分數(shù)。解決過程:通過查閱書籍,詢問同學發(fā)現(xiàn)三目運算能起到與ifelse語句相的效果而且更為簡潔明了,代碼如下:hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2);hxr2.score+=(x=c?5:(y=c?3:2);7、 課程設(shè)計總結(jié)或體會1、總結(jié)剛開始聽說課程設(shè)計的時候有些不知所措,然后了解到課程設(shè)計就是對我們前一段學習的的考察和總結(jié),總之覺得還是升華了很多。在選定題目的時候思索了很久,不知道該選哪個題目好?其實每個題目都是有各自的難點的,最后經(jīng)過思考選擇了投票程序,一開始覺得這個題目應(yīng)該

17、會很簡單,但是隨著深入了解才發(fā)現(xiàn)其實挺困難的。然后就有些迷茫與失落,想放棄但是還是堅持下來了。剛開始的時候一直摸不著頭腦,不知從哪里寫起,如何引用函數(shù),如何定義常量、變量和數(shù)組,用什么語句,怎樣進行嵌套,如何構(gòu)造判斷條件等等。所以就從一無所知開始了,然后就一點點的開始編寫,剛開始編寫的很像偽代碼,越往后寫完問題越多,頭疼了許久后再鼓起勇氣,終于在經(jīng)過兩天的努力下總體框架已經(jīng)寫好,雖然還是有諸多的問題,但是一點點的改進總能做好。但是真正的問題才剛剛開始,因為我只是停留在編寫代碼解決眼前的問題上,沒有把思維放在問題后更深的實質(zhì)和更多的情況上,雖說是摸著石頭過河,但是我堅信清晰的思路和嚴密的邏輯會帶

18、來正確的判斷和結(jié)果。在代碼完成總體完成后的昨天我發(fā)現(xiàn)這段代碼并沒有符合我的要求,我的要求是代碼要簡潔、有效而不是繁多、冗雜,代碼不能有任何的語義沖突也不能有一點點的疏忽。這些都是靠不斷地提高要求和不斷地檢驗才能達成的。就在今天12月25日,這個代碼我又改了五次,有很多人說其實湊合就行了,也有很多人說太簡短了(在他們看來簡短的代碼就是簡單的代碼),還有人讓我換一種方法,但是我知道我一點開始了就停不下來,我堅信我能夠通過自己的努力把它改成很合理的代碼,雖然我也擔心自己做不到,但是我的靈魂已經(jīng)被他深深地吸引了,從我見到她的那刻起。2、體會我知道沒有哪個人是完美的,但是我會努力做到最好,我就是這樣一個

19、人,不管多苦都會笑和堅持;我知道自己知識不夠,但是我會問別人不過他知道多少,也不過他怎么說我,我會查任何一個我不懂得代碼、函數(shù)、語句,一次次直到一個個弄明白,因為我就是這樣一個人,盡管此時渾身疼痛,但是我還是在這里坐著堅持,因為這就是我不管多苦只會笑和堅持!、通過此次的課程設(shè)計我學到了很多,比如非格式輸入的作用,三目運算,以及復(fù)雜的關(guān)系判斷等等。我很有收獲,我的付出都是值得的。附錄:源程序#include #include /以上兩個是包含庫。struct hxr int code; int score; /定義代號、得分兩個整型數(shù)據(jù)。 hxr3; /定義一個結(jié)構(gòu)體存放候選人數(shù)據(jù)。main()

20、 /入口函數(shù)。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定義接收投票的變量。 struct hxr hxr3; /用hxr定義結(jié)構(gòu)體數(shù)組。 printf(請輸入投票總?cè)藬?shù):n); scanf(%d,&k); /將投票人數(shù)放入標量k。 printf(請輸入投票:n); getchar(); /攔截scanf的最后一個回車。 while(end=0) /while語句進行循環(huán)判定,if出現(xiàn)出現(xiàn)前兩名并列第一時,返回while語句重新投票else輸出冠軍結(jié)束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化結(jié)構(gòu)體數(shù)組。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /將投票按照x,y,z的順序輸入。 getchar();/攔截回車,否則最后一個字符輸入完畢按回車之后,回車的輸入沒有東西接收,就會變成下次循環(huán)的第一個字符scanf就會接收,那么二次循環(huán)的第一個字符就智能讀到回車了,所以第一次結(jié)尾用getchar()攔截回車

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論