版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、PAGE 串聯(lián)型連續(xù)可調(diào)直流穩(wěn)壓正電源電路設(shè)計(jì) 課程設(shè)計(jì)說明書課程設(shè)計(jì)名稱: 綜合程序課程設(shè)計(jì) 課程設(shè)計(jì)題目: 電視大賽觀眾投票及排名系統(tǒng) 學(xué) 院 名 稱: 信息工程學(xué)院 專業(yè):電子信息工程 班級: 學(xué)號: 姓名: 評分: 教師: 20 14 年 2 月 電子信息工程專業(yè) 課程設(shè)計(jì)任務(wù)書20 13 20 14 學(xué)年 第 2 學(xué)期第 1 周 2 周 題目電視大賽觀眾投票及排名系統(tǒng)內(nèi)容及要求 在很多的電視大賽中,通常當(dāng)選手表演結(jié)束后,現(xiàn)場觀眾通過手中的按鍵對參賽選手進(jìn)行投票,然后對選手獲得的票數(shù)進(jìn)行統(tǒng)計(jì),從高到低進(jìn)行降序排序,從而自動產(chǎn)生冠軍、亞軍和季軍?,F(xiàn)在要求采用編寫一程序模擬實(shí)現(xiàn)上述系統(tǒng)的功
2、能進(jìn)度安排周一、布置任務(wù),查閱資料周二、模塊程序的分別設(shè)計(jì)周三、對整個程序進(jìn)行調(diào)試周四、對程序代碼進(jìn)行優(yōu)化周五、設(shè)計(jì)結(jié)果的檢查及報告的撰寫學(xué)生姓名:指導(dǎo)時間 第一周指導(dǎo)地點(diǎn):綜合樓506 室任務(wù)下達(dá)2014年 2任務(wù)完成2014 年 2考核方式1.評閱 2.答辯 3.實(shí)際操作 4.其它指導(dǎo)教師系(部)主任注:1、此表一組一表二份,課程設(shè)計(jì)小組組長一份;任課教師授課時自帶一份備查。2、課程設(shè)計(jì)結(jié)束后與“課程設(shè)計(jì)小結(jié)”、“學(xué)生成績單”一并交院教務(wù)存檔。電視大賽觀眾投票及排名系統(tǒng)課程設(shè)計(jì)說明書PAGE PAGE 19摘 要 電視大賽觀眾投票及排名系統(tǒng)是一個運(yùn)用在各種電視節(jié)目中用來進(jìn)行投票的一種較為智
3、能的系統(tǒng)。該系統(tǒng)用途廣泛例如進(jìn)行選手的投票和選手的觀眾的支持?jǐn)?shù)量統(tǒng)計(jì)以及各種競賽節(jié)目都能發(fā)揮作用。本次設(shè)計(jì)的采用的是以C語言以及數(shù)據(jù)結(jié)構(gòu)的知識在visual C+ 6.0的環(huán)境下進(jìn)行編程。通過模塊化的方法將投票、排序、文檔輸出保存等功能進(jìn)行一一實(shí)現(xiàn)。最終程序能夠較好的實(shí)現(xiàn)選手信息輸入、投票、排序、結(jié)果保存輸出txt文件等功能。 關(guān)鍵詞:C語言;數(shù)據(jù)結(jié)構(gòu);投票及排名系統(tǒng);編譯目 錄第一章 設(shè)計(jì)內(nèi)容及要求3第二章 程序設(shè)計(jì)方案4第三章 程序具體分析與設(shè)計(jì)3.1 基本思路53.2 程序分析及其設(shè)計(jì)63.3關(guān)鍵程序設(shè)計(jì)與分析73.4程序預(yù)計(jì)實(shí)現(xiàn)結(jié)果8第四章 方案的調(diào)試及測試結(jié)果與分析4.1 調(diào)試過程中
4、遇到的問題及解決方案94.2 調(diào)試結(jié)果與分析9第五章 課程設(shè)計(jì)分析總結(jié)與心得體會12附錄13參考文獻(xiàn)17第一章 設(shè)計(jì)內(nèi)容及要求在很多的電視大賽中,通常當(dāng)選手表演結(jié)束后,現(xiàn)場觀眾通過手中的按鍵對參賽選手進(jìn)行投票,然后對選手獲得的票數(shù)進(jìn)行統(tǒng)計(jì),從高到低進(jìn)行降序排序,從而自動產(chǎn)生冠軍、亞軍和季軍?,F(xiàn)在要求編寫一程序模擬實(shí)現(xiàn)上述系統(tǒng)的功能在該課程設(shè)計(jì)中,首先輸入?yún)①愡x手的人數(shù)(范圍為1-9個),然后根據(jù)人數(shù)通過malloc函數(shù)來開辟存放選手信息的順序表。將選手的編號和姓名依此存入順序表單元中,觀眾通過按鍵進(jìn)行投票,按1為1號選手投票,按2為2號選手投票,以此類推,以按0作為投票結(jié)束標(biāo)志。投票結(jié)束后進(jìn)行
5、排序,在此采用希爾排序,然后為每個選手計(jì)算名次,得票相同的名次也相同。最終輸出排名結(jié)果,并將結(jié)果保存到文件中。程序設(shè)計(jì)方案2.1總體設(shè)計(jì)思路本程序分為四個模塊:1.主程序模塊:實(shí)現(xiàn)對函數(shù)的調(diào)用; 2.順序表模塊:實(shí)現(xiàn)對選手信息的存儲; 3.投票模塊:實(shí)現(xiàn)觀眾對選手的投票; 4.排序模塊:實(shí)現(xiàn)對選手成績的排序。 它們之間的關(guān)系為:主程序模塊 順序表模塊 投票模塊 排序模塊2.2詳細(xì)設(shè)計(jì)方案 本程序分為五個模塊a、主程序模塊: 實(shí)現(xiàn)對函數(shù)的調(diào)用;b、順序表模塊: 實(shí)現(xiàn)選手信息存儲;c、投票模塊: 實(shí)現(xiàn)觀眾對選手的投票;d、排序模塊: 實(shí)現(xiàn)對選手成績的排序;e、文件保存模塊: 實(shí)現(xiàn)對選手成績的保存;
6、第三章 程序具體分析及設(shè)計(jì)3.1 基本思路 將輸入的信息儲存在順序鏈表中,然后觀眾投票后對其累加票數(shù),最后利用希爾排序?qū)x手的得票進(jìn)行從高到低地排序,顯示名次的先后(包含并列名次),并對最終結(jié)果進(jìn)行保存到文件。3.2 程序分析及其設(shè)計(jì)分析:為了實(shí)現(xiàn)上述程序功能,需要定義順序表的抽象數(shù)據(jù)類型如下1、存儲類型的定義 參賽選手信息存儲類型的定義:typedef struct node /結(jié)構(gòu)體定義,命名一個新的類型名代表結(jié)構(gòu)體類型char name9; / 選手姓名int num; /選手編號 int score; / 選手得分int tax; /選手名次ElemType; /新的類型名2、函數(shù)的定
7、義1. 函數(shù)Menu, 用于進(jìn)行菜單的顯示和選號:void Meun()2.函數(shù)Init_sq,為選手個數(shù)分配動態(tài):void Init_sq(SeqList *L,int n)3.函數(shù)Init,用于完成選手信息的輸入:void Init(SeqList *L)4. Vote函數(shù)用以實(shí)現(xiàn)投票的功能:void Vote(SeqList *L)5.希爾排序:void Shellsort(SeqList *L)6. Rank函數(shù),用以計(jì)算選手名次:void Rank(SeqList *L)7.Display函數(shù),用以輸出最終結(jié)果:void Display(SeqList *L)8.Save函數(shù),實(shí)現(xiàn)文
8、件的生成:void Save(SeqList *L)3.3 關(guān)鍵程序設(shè)計(jì)與分析(希爾排序)本次程序設(shè)計(jì)的關(guān)鍵部分在于對選手投票結(jié)果的排序,對投票排序模塊的代碼分析如下:本次程序設(shè)計(jì)采用希爾排序,取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進(jìn)行直接插人排序;然后,取第二個增量d2d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dtdt-ld2len;doincrement=increment/3+1; /* 增量序列 */for(i=increment+1;ilen;i+)if (L-datai.score L-dat
9、ai-increment.score) /* 需將L-ri插入有序增量子表 */ L-data0=L-datai; /* 暫存在L-r0 */for(j=i-increment; j0 & L-data0.score L-dataj.score; j-=increment) L-dataj+increment=L-dataj; /* 記錄后移,查找插入位置 */L-dataj+increment=L-data0; /* 插入 */while(increment1);void Rank(SeqList *L) /* 計(jì)算選手名次 */int i; L-data1.tax=1; for(i=2;i
10、len;i+)if(L-datai-1.score=L-datai.score)L-datai.tax= L-datai-1.tax;elseL-datai.tax= L-datai-1.tax+1;printf(正在計(jì)算選手名次請稍后n排序成功n);3.4程序預(yù)計(jì)實(shí)現(xiàn)結(jié)果 本程序在c+6.0中運(yùn)行:1.輸入的形式和輸入值的范圍:由于本程序主要運(yùn)用于觀眾投票以及選手信息的輸入,所以輸入的形式是數(shù)字及字符,范圍不限;2.輸出的形式:根據(jù)觀眾投票情況輸出排名情況3.程序?qū)崿F(xiàn)的功能:實(shí)現(xiàn)觀眾投票以及選手得分情況的排名4.測試數(shù)據(jù):a.輸入選手的個數(shù)以及每個選手的信息輸入“4”“asdfb.根據(jù)菜單輸
11、入選號“2”輸出“1號a得分是0,排名是0;2號s得分是0,排名是0;3號d得分是0,排名是0;4號f得分是0,排名是0;c.給選手投票,輸入“123333432210”。d.根據(jù)菜單輸入選號“4”,輸出 e根據(jù)菜單駛?cè)脒x號“5” f根據(jù)菜單選號“6”第四章 方案的調(diào)試及測試結(jié)果與分析4.1 調(diào)試過程1、 在剛開始編程的時候經(jīng)常會碰到一些低級編寫錯誤例如漏分號大括號不匹配等 經(jīng)過仔細(xì)修改已能正常運(yùn)行; 2、 本程序的模塊劃分簡單而合理,在操作方面比較容易,運(yùn)用順序表來存儲選手信息;3、在程序完成后但由于輸入選手姓名后不能根據(jù)名字長短自動判斷自動判斷對齊編號列表,后來經(jīng)過老師指導(dǎo)并請教同學(xué)優(yōu)化代
12、碼,在輸入名字后按下TAB鍵就能自動對齊編號列表,程序更加人性化。 4、 本實(shí)驗(yàn)程序設(shè)計(jì)中,將程序分為五個模塊,使得設(shè)計(jì)時思路清晰,實(shí)現(xiàn)時調(diào)試順利,各 模塊具有較好的可重用性,確實(shí)得到了一次良好的程序設(shè)計(jì)訓(xùn)練。4.2 調(diào)試結(jié)果與分析(1)輸入選手信息界面(2)投票界面(3)排序界面(4)排序結(jié)果頁面(5)保存到文件(6)保留到文件的界面:經(jīng)編譯完成,此次設(shè)計(jì)程序已完成選手信息輸入、投票、排序及保存到文件等功能第五章 課程設(shè)計(jì)分析總結(jié)與心得體會此次實(shí)習(xí)為期一周,時間雖然不多但是我學(xué)到了很多,也知道了很多的不足。通過老師的精心指導(dǎo)帶領(lǐng)下,我不僅獲得了很多新知識,還好好復(fù)習(xí)了一下以前學(xué)的知識。作為一
13、個電子專業(yè)的學(xué)生,C語言是一門必須要熟練掌握的重要語言。在這之前,我們已經(jīng)對C語言這門課程學(xué)習(xí)了一個學(xué)期,對其有了一定的了解,但是更多的還是停留在學(xué)習(xí)了解的范圍,對里面的好多東西還是很陌生,并不是很熟練,有著許多欠缺,更多的在運(yùn)用起來的時候還是感到很不好動手。C語言課堂上許多關(guān)于C語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用C語言這個工具解決實(shí)際問題,又必須掌握它。通過多次上機(jī)練習(xí),對于語法知識有了感性的認(rèn)識,加深對它的理解,在理解的基礎(chǔ)上就會自然而然地掌握C語言的語法規(guī)定。對于一些內(nèi)容自己認(rèn)為在課堂上聽懂了,但上機(jī)實(shí)踐中會發(fā)現(xiàn)原來理解的偏差,更加鞏固了學(xué)過
14、的知識,而且在設(shè)計(jì)的時候?qū)W要系統(tǒng)的知識,也是一個較大的挑戰(zhàn),某一方面知識的欠缺都將影響到整個程序的設(shè)計(jì)。我所編的雖然只是一個小程序,但是每一步的編的過程,讓我懂得很多。重溫一下C語言,因?yàn)檫^了計(jì)算機(jī)二級,因而編程比較容易懂,但是通過練習(xí),發(fā)現(xiàn)理論與實(shí)際的差距。編程從一開始全部編到一個main函數(shù)中到,最后逐個分塊,到添加功能,到最后的進(jìn)行代碼的優(yōu)化,使程序的可用性和智能性都有進(jìn)一步的提高,一點(diǎn)一點(diǎn)的進(jìn)步讓我很欣喜,對編程的興趣也更加濃厚。此次實(shí)習(xí),不僅了有關(guān)c語言的知識,還掌握了一些現(xiàn)實(shí)中編程的一些小技巧,實(shí)際的編程能力也得到了歷練,本次課程設(shè)計(jì)是很好的一次鍛煉機(jī)會!附錄 程序源代碼#incl
15、ude #include /動態(tài)存儲分配函數(shù)頭文件#define LIST_INIT_SIZE 3 /#define指令,指定用一個符號名稱代表常量#define LIST_INCREMENT 3 typedef struct node /結(jié)構(gòu)體定義,命名一個新的類型名代表結(jié)構(gòu)體類型char name9; / 選手姓名int num; /選手編號 int score; / 選手得分int tax; /選手名次ElemType; /新的類型名typedef structElemType *data; /定義結(jié)構(gòu)體指針變量data,指向此結(jié)構(gòu)體類型數(shù)據(jù)int len; int listsize;
16、SeqList; /新的類型名void Init_sq(SeqList *L,int n) /定義函數(shù)Init_sq,為選手個數(shù)分配動態(tài)內(nèi)存L-data=(ElemType*)malloc(n*sizeof(ElemType); /用malloc函數(shù)分配動態(tài)內(nèi)存if(!L-data) exit(1); /存儲分配失敗L-len = n; /空表長度為0 L-listsize = n; /初始存儲容量void Init(SeqList *L) /定義函數(shù)Init,用于完成選手信息的輸入ElemType *newbase; /定義結(jié)構(gòu)體指針變量指向ElemType結(jié)構(gòu)體類型數(shù)據(jù) int i,n;p
17、rintf(請輸入選手個數(shù): );scanf(%d,&n);Init_sq(L,n);printf(請輸入選手姓名和編號n); printf(姓名t編號tn);if(L-len=L-listsize)newbase=(ElemType*)realloc(L-data,(L-listsize+LIST_INCREMENT)*sizeof(ElemType); /用ralloc函數(shù)重新分配動態(tài)空間if(!newbase) exit(1); /分配失敗L-data = newbase; L-listsize += LIST_INCREMENT;for(i=1;ilen;i+) /for循環(huán)輸入選手信
18、息scanf(%s%d,L-,&L-datai.num); L-datai.score = L-datai.tax =0;void Vote(SeqList *L) /定義Vote函數(shù)用以實(shí)現(xiàn)投票的功能int i,num; printf(請輸入您要為幾號選手投票:( 0 結(jié)束) n); doscanf(%d,&num);if(num L-len)printf(你輸入的編號錯誤請重新輸入 (1-%d)n,L-len);continue;elsefor(i=1;ilen;i+)if(L-datai.num = num)L-datai.score += 1;while(num !
19、= 0); /for循環(huán)實(shí)現(xiàn)為某號選手投票使其得分增加 void Shellsort(SeqList *L) /希爾排序int i,j;int increment=L-len;doincrement=increment/3+1; /增量序列 for(i=increment+1;ilen;i+)if (L-datai.score L-datai-increment.score) /需將 L-ri插入有序增量子表 L-data0=L-datai; /暫存在L-r0for(j=i-increment; j0 & L-data0.score L-dataj.score; j-=increment) L
20、-dataj+increment=L-dataj; /記錄后移,查找插入位置 L-dataj+increment=L-data0; /插入while(increment1); /* 計(jì)算選手名次 */void Rank(SeqList *L) / Rank函數(shù),用以計(jì)算選手名次int i; L-data1.tax=1; for(i=2;ilen;i+)if(L-datai-1.score=L-datai.score)L-datai.tax= L-datai-1.tax;elseL-datai.tax= L-datai-1.tax+1;printf(正在計(jì)算選手名次請稍后n排序成功n);void
21、 Display(SeqList *L) /定義Display函數(shù),用以輸出最終結(jié)果int i;printf(姓名t編號t票數(shù)t名次tn);for(i=1;ilen;i+)printf(%st%dt%dt%dtn,L-,L-datai.num,L-datai.score,L-datai.tax);printf(n);void Save(SeqList *L) /定義Save函數(shù),實(shí)現(xiàn)文件的生成FILE *fp; /定義一個指向文件的指針變量fpint i;char filename20;printf(請輸入目標(biāo)文件名:n);scanf(%s,filename); fp=fopen(filename,w);/建立新文件將fopen函數(shù)的返回值賦給指針/變量fp,fp指向了名為filename的文件fprintf(fp,姓名t編號t票數(shù)t名次n);for(i=1;il
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年房地產(chǎn)投資的法律規(guī)定與合規(guī)體系
- 2025年衛(wèi)生院崗前人事考試試題及答案
- 2025年傳感器筆試題目及答案
- 2025年陜西年底人事考試及答案
- 2025年永定縣教師編制筆試及答案
- 2026年工程結(jié)構(gòu)非線性分析的案例分析
- 2025年北師大文字學(xué)博筆試及答案
- 2025年張家港醫(yī)生事業(yè)編考試及答案
- 2026年清明節(jié)的春游活動
- 2025年安徽皖維集團(tuán)招聘筆試及答案
- 2026年中考英語復(fù)習(xí)專題課件:謂語動詞的時態(tài)和被動語態(tài)
- 糧食行業(yè)競爭對手分析報告
- 兒科MDT臨床技能情景模擬培訓(xùn)體系
- 【高三上】2026屆12月八省聯(lián)考(T8聯(lián)考)語文試題含答案
- (人教版)必修第一冊高一物理上學(xué)期期末復(fù)習(xí)訓(xùn)練 專題02 連接體、傳送帶、板塊問題(原卷版)
- 護(hù)理不良事件根本原因分析
- 社會心理學(xué)考試題及答案
- 門窗工程掛靠協(xié)議書
- 醫(yī)療器械經(jīng)營企業(yè)質(zhì)量管理體系文件(2025版)(全套)
- 出鐵廠鐵溝澆注施工方案
- 2025年中小學(xué)教師正高級職稱評聘答辯試題(附答案)
評論
0/150
提交評論