已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C語言課程設(shè)計報告電子投票系統(tǒng)學(xué) 院 計算機學(xué)院 專 業(yè) 年 級 姓 名 學(xué) 號 教 師 年 月 日廣東工業(yè)大學(xué)計算機學(xué)院制一.設(shè)計題目電子投票系統(tǒng)二課程設(shè)計目的了解軟件工程中的一些系統(tǒng)分析,模塊分析,代碼設(shè)計的概念,利用WIN-TC實現(xiàn)學(xué)生成績管理系統(tǒng)的錄入、查詢、刪除、統(tǒng)計等基本操作,使用單鏈表結(jié)構(gòu)實現(xiàn)學(xué)生成績管理,了解數(shù)據(jù)庫管理的基本功能,掌握C語言中的結(jié)構(gòu)體、指針、函數(shù)(系統(tǒng)函數(shù)、自定義函數(shù))、文件操作等知識。通過對系統(tǒng)的分析和設(shè)計,進一步鞏固C語言的學(xué)習(xí),以提高對開發(fā)環(huán)境的進一步認(rèn)識和綜合編程能力。三 系統(tǒng)功能本系統(tǒng)程序功能:(1)投票者功能a.瀏覽所有候選人資料b.查詢要了解的候選人的信息c.在了解候選人之后進行投票(2)管理員功能a.創(chuàng)建新的候選人資料b.創(chuàng)建新的用戶資料c.查詢要了解的候選人資料d.瀏覽所有的候選人資料e.對候選人票數(shù)進行統(tǒng)計并排序四系統(tǒng)功能模塊結(jié)構(gòu)圖本程序利用單鏈表存儲結(jié)構(gòu)完成對學(xué)生成績的動態(tài)管理,其基本功能模塊如下圖所示:電子投票系統(tǒng)驗證賬號密碼投票人管理員瀏覽候選人瀏覽候選人添加投票人查找候選人添加候選人查找候選人查看投票結(jié)果投票 圖1程序功能模塊結(jié)構(gòu)圖五程序設(shè)計及各模塊函數(shù)功能簡述1數(shù)據(jù)結(jié)構(gòu)鏈表是線形表的一種,線形表分為順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。線形表的順序存儲結(jié)構(gòu)的特點是邏輯關(guān)系上相鄰的兩個元素物理位置上也相鄰,因此可以隨機存取表中任一元素。鏈?zhǔn)酱鎯Y(jié)構(gòu)的特點是用一組任意的存儲單元存儲線形表的數(shù)據(jù)元素。鏈表的最大的優(yōu)點是對表的添加、刪除、查找、排序等操作比較方便,因此采用鏈表來存儲候選人,投票人相關(guān)信息。且對結(jié)點的定義如下:ttypedef struct candidate/候選人數(shù)據(jù)結(jié)構(gòu)體 long number;/候選人編號 char name20;/候選人姓名 char intro400;/候選人簡介 int vote;/候選人得票數(shù)candidate;typedef struct user/投票者數(shù)據(jù)結(jié)構(gòu)體 char name20;/投票者姓名 char ps8;/對應(yīng)密碼 int power;/權(quán)限user;2.main()主函數(shù)主函數(shù)是程序入口,采用模塊化設(shè)計。創(chuàng)建用戶文檔,進行賬號密碼驗證并根據(jù)賬戶不同調(diào)用不同函數(shù)進入不同的界面,執(zhí)行不同的功能3main_a()管理員界面根據(jù)輸入數(shù)字的不同調(diào)用不同的函數(shù)進入對應(yīng)的功能,返回主函數(shù)。相關(guān)的一些函數(shù)如下:addcandidate(); / 創(chuàng)建候選人 addUser();/創(chuàng)建投票者 search(); /查詢候選人信息 scan();/瀏覽候選人信息sort();/整理所有投票對菜單選項的選擇是輸入對應(yīng)數(shù)字按回車鍵進行選擇。4main_v(); 投票者者界面根據(jù)輸入數(shù)字的不同調(diào)用不同的函數(shù)進入對應(yīng)的功能,返回主函數(shù)。相關(guān)的一些函數(shù)如下:search(); /查詢候選人信息scan();/瀏覽候選人信息vote(); /投票者投票對菜單選項的選擇是輸入對應(yīng)數(shù)字按回車鍵進行選擇。5addcandidate(); 創(chuàng)建候選人當(dāng)用戶選擇該項對應(yīng)數(shù)字后,進入該函數(shù)。創(chuàng)建候選人文檔,輸入候選人信息。用for語句和if語句檢查編號、姓名是否重復(fù)。在確認(rèn)不再創(chuàng)建新候選人信息后輸出所有候選人信息。6addUser()創(chuàng)建用戶當(dāng)用戶選擇該項對應(yīng)數(shù)字后,進入該函數(shù)。創(chuàng)建用戶文檔,輸入用戶賬號與密碼。用for語句和if語句檢查賬號名是否重復(fù)。在確認(rèn)不再創(chuàng)建新用戶信息后輸出所有用戶信息。7read()讀取候選人信息打開候選人文檔,提取文檔內(nèi)內(nèi)容8scan()瀏覽候選人信息先調(diào)用read()讀取候選人信息,利用for語句輸出。9search() 查詢候選人信息先調(diào)用read()讀取候選人信息,利用for語句查找與輸入編號一致的候選人信息并輸出,若查無此編號則輸出“對不起,沒有您要查詢的候選人”。10. sort()整理所有投票先調(diào)用read()讀取候選人信息,利用for語句,使用選擇法對投票數(shù)進行排序,并輸出。11. vote()投票者投票先調(diào)用read()讀取候選人信息,輸入候選人相應(yīng)編號,利用for語句,將對應(yīng)候選人的投票數(shù)1,并返回到文檔中,輸出投票結(jié)果。若查無此編號,輸出“投票失??!您要投票的號碼不存在”。六結(jié)果初始界面 分別輸入1,1進入管理員界面創(chuàng)建新候選人輸出候選人信息投票者界面投票以及投票結(jié)果候選人票數(shù)排序結(jié)果七心得體會 在本次課程設(shè)計中,先使用結(jié)構(gòu)化分析方法對系統(tǒng)進行分析,將整個系統(tǒng)細(xì)分為幾個模塊,再針對每個小模塊編寫代碼。通過本次課程設(shè)計的學(xué)習(xí)以及老師的指導(dǎo),學(xué)會了很多東西,了解了開發(fā)一個系統(tǒng)的一些步驟。盡管大部分都參考權(quán)威書籍的代碼,但是在編寫代碼過程中還是加深了對鏈表的了解程度。開發(fā)工具用的是vc+6.0。這個程序還存在很多需要改進的地方,如密碼輸入后直接顯示了出來,而不是*,缺少安全性;每個投票人不僅僅只能投一票等等。但我會繼續(xù)努力學(xué)習(xí),爭取寫出更好的程序源代碼#include#include#include#include#define closegr closegraph#define N 30void main_a(); /管理員界面void main_v(); /投票者者界面void addcandidate(); / 創(chuàng)建候選人void addUser();/創(chuàng)建投票者void search(); /查詢候選人信息void scan();/瀏覽候選人信息void vote(); /投票者投票void read();/讀取候選人信息void save();/存儲候選人信息void sort();/整理所有投票int total=0,c_total=0;int i=0;typedef struct candidate/候選人數(shù)據(jù)結(jié)構(gòu)體 long number;/候選人編號 char name20;/候選人姓名 char intro400;/候選人簡介 int vote;/候選人得票數(shù)candidate;typedef struct user/投票者數(shù)據(jù)結(jié)構(gòu)體 char name20;/投票者姓名 char ps8;/對應(yīng)密碼 int power;/權(quán)限user;candidate c_manN;user total_userN;void main_v()/投票者者界面 int key;do printf(*n);printf(*歡迎進入投票員界面*n);printf(*n);printf(* 1.瀏覽所有候選人 2.查詢候選人信息 *n); printf(* 3.投票 4.退出 *n); scanf(%d,&key);switch(key) case 1:scan();break; case 2:search();break; case 3:vote();break; case 4:break; default:break; while(key!=4);void vote() /投票者投票 long candidatenum;/定義進行操作時的臨時結(jié)構(gòu)體變量 int i,flag; char DataFile20=候選人.txt,next;/ DataFile存儲候選人信息的文件名,next為是否進行下一次投標(biāo)操作的選項 candidate TempS; FILE *fp;begin: flag=0;/flag用來標(biāo)志是否找對應(yīng)編號,即投票是否成功 read(); printf(請輸入您要投票的候選人的號碼:); scanf(%ld,&candidatenum); printf(您所投票的候選人號碼是:%ldn,candidatenum); for(i=0;ic_total;i+) if(c_mani.number=candidatenum) flag=1; c_mani.vote+; if(flag) printf(投票成功n); fp=fopen(DataFile,wb); if(fp=NULL)/如果當(dāng)前文件不存在,提示打開文件失敗 printf(nOpen file is fail!End with any key.n,DataFile); perror(Open file fail); getch(); exit(1); for(i=0;ic_total;i+) fwrite(&c_mani,sizeof(candidate),1,fp); fclose(fp); else printf(投票失?。∧镀钡奶柎a不存在n); printf(按任意鍵返回首頁! n); getch(); return; fp=fopen(DataFile,rb);/ 顯示投票后的情況 if(fp=NULL) printf(nOpen file %s fail! End With any key n,DataFile); perror(Open file fail); getch(); exit(1); printf(整理后的最新投票情況:n); printf(n候選人號碼 t候選人姓名 t票數(shù)n); while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL) if(TempS.number!=0) printf(n%ld t%s t%d n,TempS.number,TempS.name,TempS.vote); fclose(fp); printf(n繼續(xù)嗎?是(Y)/否(N): ); fflush(stdin); next=getchar(); putchar(n); if(next=y|next=Y)goto begin;void main_a()/管理員界面 int key;do printf(*n);printf(*歡迎進入管理員界面*n);printf(*n);printf(* 1.創(chuàng)建新候選人 2.創(chuàng)建新用戶 *n); printf(* 3.查詢候選人信息 4.瀏覽所有候選人 *n); printf(* 5.整理所有投票 0.退出 *n); scanf(%d,&key);switch(key) case 1:addcandidate();break; case 2:addUser();break; case 3:search();break; case 4:scan();break; case 5:sort(); break; case 0:break; default:break; while(key!=0);void addcandidate()/創(chuàng)建候選人 char DataFile20=候選人.txt; FILE * fp=NULL; char c; int over_flag=0; candidate TempS; read(); fp=fopen(DataFile,ab+); do printf( *創(chuàng)建新候選人*n); printf(請輸入:); printf(候選人號碼:);scanf(%ld,&TempS.number); for(i=0;ic_total;i+)/檢查輸入編號是否有重復(fù) if(TempS.number=c_mani.number) printf(該號碼已存在.按任意鍵瀏覽所有候選人.); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 姓名:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;ic_total;i+) if(strcmp(TempS.name,c_)=0) printf(該姓名已存在!請再輸入一次!按任意鍵繼續(xù).); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 簡介:); fflush(stdin); gets(TempS.intro); TempS.intro399=0; TempS.vote=0; c_manc_total=TempS;/將數(shù)據(jù)加入原始數(shù)據(jù),用于下一次輸入比較 c_total+; if(fwrite(&TempS,sizeof(candidate),1,fp)!=1) printf(nwrite file is fail! End with any keyn,DataFile); perror(write file fail); getch(); exit(1); printf(要繼續(xù)創(chuàng)建新的候選人嗎?是(Y)/否(N): ); fflush(stdin); c=getchar(); while(c=Y|c=y); fclose(fp); printf(候選人資料:n); / 在屏幕上顯示文件內(nèi)容 printf(*); fp=fopen(DataFile,rb); if(fp=NULL) printf(nOpen file %s fail! 任意鍵結(jié)束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL) printf(n號碼:%-15ld姓名:%-15s簡介:%s,TempS.number,TempS.name,TempS.intro); fclose(fp); printf(n*); printf(n按任意鍵返回首頁!); getch();void read()/讀取候選人信息 char DataFile20=候選人.txt; FILE * fp=NULL; c_total=0; fp=fopen(DataFile,rb); if(fp=NULL) printf(nOpen file %s fail! 任意鍵結(jié)束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&c_manc_total,sizeof(candidate),1,fp)!=(int)NULL) c_total+; fclose(fp);void addUser()/創(chuàng)建用戶 FILE *fp=NULL; char DataFile20=用戶.txt;/存儲投票人信息的文件名 user TempS; int over_flag=0; char c; fp=fopen(DataFile,rb);/讀入原始數(shù)據(jù),用于檢查輸入是否有重復(fù) if(fp=NULL) printf(nOpen file %s fail! 任意鍵結(jié)束 n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&total_usertotal,sizeof(user),1,fp)!=(int)NULL) total+; fclose(fp); fp=fopen(DataFile,ab+); do printf( *創(chuàng)建新用戶* );printf(請輸入:); printf(用戶名:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;itotal;i+)/檢查輸入姓名是否有重復(fù) if(strcmp(TempS.name,total_)=0) printf(該用戶名已存在!按任意鍵瀏覽所有用戶.); getch(); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 密碼:);scanf(%s,&TempS.ps); TempS.ps7=0; printf( 權(quán)限:);scanf(%d,&TempS.power); if(TempS.power!=1) TempS.power=0; total_usertotal=TempS;/將數(shù)據(jù)加入原始數(shù)據(jù) total+; if(fwrite(&TempS,sizeof(user),1,fp)!=1) printf(nwrite file is fail! 任意鍵結(jié)束n,DataFile); perror(write file fail); getch(); exit(1); printf(要繼續(xù)創(chuàng)建新用戶嗎?是(Y)/否(N):); getchar(); c=getchar(); while(c=Y|c=y); fclose(fp); printf(用戶資料數(shù)據(jù)處理完畢.n,DataFile);/在屏幕上顯示文件內(nèi)容 printf(所有用戶具體情況如下:n); fp=fopen(DataFile,rb); printf(*); if(fp=NULL) printf(nOpen file is fail! End With any key n,DataFile); perror(Open file fail); getch(); exit(1); printf(n姓名tt密碼tt權(quán)限n); while(fread(&TempS,sizeof(user),1,fp)!=(int)NULL) printf(n%stt%-8stt%dn,TempS.name,TempS.ps,TempS.power); fclose(fp); printf(*); printf(n按任意鍵返回首頁!); getch();void scan()/瀏覽候選人信息 read(); printf(候選人資料:n); printf(*n); for(i=0;ic_total;i+) printf(號碼:%-15ld,c_mani.number); printf(姓名:%-19s,c_); printf(簡介:%sn,c_ro); printf(*); printf(n按任意鍵返回首頁!); getch();void search() /查詢候選人信息 char c; long number; int flag=0; read(); do printf(nt請輸入要查詢的候選人號碼:); scanf(%ld,&number); for(i=0;ic_total;i+) if(number=c_mani.number) printf(t您要查詢的候選人信息如下:nn); printf(t號碼:%ld n,c_mani.number); printf(t姓名:%s n,c_); printf(t簡介:%s n,c_ro); flag=1; break; if (flag) flag=0; else printf(t對不起,沒有您要查詢的候選人n); printf(t要繼續(xù)查詢候選人嗎?是(Y)/否(N): ); getchar(); c=getchar(); while(c=Y)|(c=y);void sort()/整理所有投票 int i,k,j; candidate c_man2N/*存放排序后的數(shù)據(jù) */, temp; read(); for(i=0;ic_total;i+) c_man2i=c_mani; for(i=0;ic_total-1;i+)/用選擇法排序 k=i; for(j=i+1;jc_total;j+) if(c_man2k.votec_man2j.vote)k=j; if(k!=i) temp=c_man2i;c_man2i=c_man2k;c_man2k=temp; /排序結(jié)束 printf(票數(shù)從高到低排列如下:n); printf(*n); printf(*號碼 候選人 票數(shù) *n); printf(*n); for(i=0;ic_total;i+) /輸出排序后的結(jié)果 printf(* %-13ld %-13s %-6d *n,c_man2i.number,c_,c_man2i.vote); printf(*n); printf(按任意鍵返回首頁!); fflush(stdin); getch();void main() FILE * fp=NULL; char DataFile20=用戶.txt; c
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025山東濟寧醫(yī)學(xué)院附屬醫(yī)院招聘高級專業(yè)技術(shù)崗位和博士研究生人員50人考試備考題庫及答案解析
- 深度解析(2026)《GBT 26098-2010圓度測量儀》(2026年)深度解析
- 2025河南對外經(jīng)濟貿(mào)易職業(yè)學(xué)院招聘工作人員10人參考筆試題庫附答案解析
- 深度解析(2026)《GBT 25974.2-2010煤礦用液壓支架 第2部分:立柱和千斤頂技術(shù)條件》
- 2025云南玉溪川洋產(chǎn)業(yè)發(fā)展有限公司招聘2人備考考試試題及答案解析
- 深度解析(2026)《GBT 25892.7-2010信息技術(shù) 維吾爾文、哈薩克文、柯爾克孜文編碼字符集 32點陣字型 第7部分:塔里克白體》
- 2026中國東方航空技術(shù)有限公司招聘考試筆試備考題庫及答案解析
- 2025年甘肅省天水市清水縣白沙中心衛(wèi)生院招聘元坪村鄉(xiāng)村醫(yī)生參考考試試題及答案解析
- 2026年江西省第五人民醫(yī)院招聘編制外工作人員1人筆試考試備考試題及答案解析
- 深度解析(2026)《GBT 25730-2010糧油機械 清粉機》(2026年)深度解析
- 術(shù)后疲勞綜合征的炎癥反應(yīng)抑制策略
- 慢性阻塞性肺疾病的營養(yǎng)改善方案
- 貴州國企招聘:2025貴陽市衛(wèi)生健康投資有限公司招聘(公共基礎(chǔ)知識)綜合能力測試題附答案
- 2026年跨境電商培訓(xùn)課件
- 醫(yī)療質(zhì)量與安全管理小組架構(gòu)及職責(zé)
- GA/T 744-2013汽車車窗玻璃遮陽膜
- 顏真卿書法欣賞課件
- DJAM碟式射流曝氣器
- 部編版2021-2022學(xué)年六年級上冊期末考試語文試卷-附答案
- 方劑學(xué)溫里劑課件
- 熒光綠送貨單樣本excel模板
評論
0/150
提交評論