版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計報告一、需求分析:1、設(shè)計題目:電子投票系統(tǒng)2、設(shè)計內(nèi)容及要求:(1)通過編程建立一個小型電子投票系統(tǒng),其中包含電子投票、票數(shù)統(tǒng)計 功能。盡量做到提供一個簡單的人機(jī)界面,系統(tǒng)界面友好,使用方便。(2)軟件的使用者分為兩類,一類為管理員,可以對候選人信息進(jìn)行初始 化和修改, 還可瀏覽候選人信息介紹, 可對候選人的票數(shù)進(jìn)行排序以及對系統(tǒng)的 用戶進(jìn)行管理, 創(chuàng)建使用者用戶名和密碼等。 另一類為使用者普通投票者, 該 類用戶需要用管理員分配的用戶名和密碼正確登錄系統(tǒng),可以查詢候選人介紹、 投票等。(投票是只需做到輸入自己想要投票的候選人編號即可完成投票)3、系統(tǒng)功能分析:本系統(tǒng)程序功能:(1)
2、投票者功能a. 瀏覽所有候選人資料b. 查詢要了解的候選人的信息c. 在了解候選人之后進(jìn)行投票(2)管理員功能a. 創(chuàng)建新的候選人資料b. 創(chuàng)建新的用戶資料c. 查詢要了解的候選人資料d. 瀏覽所有的候選人資料e. 對候選人票數(shù)進(jìn)行統(tǒng)計并排序二、具體設(shè)計1、功能模塊(1)開始運行與結(jié)束運行界面模塊 開始運行顯示有“電子投票系統(tǒng)”字樣的界面,結(jié)束運行時則輸出顯示“感 謝參與、再見”字樣的界面。(2)功能選擇模塊 根據(jù)輸入的用戶名和密碼,分別進(jìn)入管理員界面和投票者界面(3)身份驗證模塊驗證管理員和投票者的用戶名和密碼是否正確, 不正確可選擇重新輸入用戶 名和密碼或者退出。(4)投票人管理模塊 實現(xiàn)
3、對投票人的管理功能, 如創(chuàng)建投票人用戶名和密碼。 主要用結(jié)構(gòu)體類型 的數(shù)組和文件的讀寫來完成數(shù)據(jù)的管理操作。(5)候選人管理模塊 同投票人管理模塊類似,要實現(xiàn)對大量有一定結(jié)構(gòu)的信息進(jìn)行管理的操作, 如創(chuàng)建候選人,查詢、瀏覽候選人信息。因此定義候選人信息結(jié)構(gòu)體,用于存儲 候選人信息記錄, 并且將大量記錄存儲在硬盤文件中以便保存。 用文件的讀寫函 數(shù)實現(xiàn)各項功能。(6)投票區(qū)模塊投票區(qū)模塊用于完成系統(tǒng)的主體功能, 提示投票人輸入自己想要選舉的候選 人序號,系統(tǒng)立刻將該候選人對應(yīng)的票數(shù)加一, 并將目前的投票狀況顯示給投票人。因此該部分只需讀取候選人信息文件,將對應(yīng)的候選人票數(shù)加一后再寫回文 件并顯示
4、即可。(7)票數(shù)管理模塊: 該模塊具有對候選人票數(shù)進(jìn)行排行和瀏覽兩大功能。2、程序流程圖三、源程序代碼#i nclude<stdio.h>#i nclude<stri ng.h>#i nclude<stdlib.h>#in clude<c oni o.h>#in clude<graphics.h>#defi ne closegr closegraph#defi ne N 30void welcome();/* void thans(); /* void main_a(); /* void main_v(); /* void creat
5、e(); /* void CreatUser();/* void search(); /* void browse(); /* void vote(); /*歡迎 */*/再見 */ 管理員主控平臺 */ 用戶(投票者)主控平臺 創(chuàng)建候選人 */ 創(chuàng)建用戶 */ 查詢候選人信息 */ 瀏覽候選人信息 */ 用戶投票 */void read_c_man();/* 讀取候選人信息 */ void c_save(); /* 存儲候選人信息 */ int total=0,c_total=0;int i=0;/* 候選人信息數(shù)據(jù)結(jié)構(gòu)描述候選人的編號、 姓名、簡介和得票數(shù)量信息, 作為候選人信息記錄存在文
6、件 中*/typedef struct candidatelong number;char name20;char intro400;int vote;candidate;/* 系統(tǒng)用戶數(shù)據(jù)結(jié)構(gòu)描述系統(tǒng)用戶編號、 用戶名、 密碼和權(quán)限信息, 作為一整條記錄存放在文件中 */ typedef struct userchar name20;char ps8;int power;user;candidate c_manN;user total_userN;void read_c_man()char Data=" 候選人 .txt"FILE * fp=NULL;c_total=0;
7、fp=fopen(DataFile,"rb"); if(fp=NULL)printf("nOpen fail! End With any key n",DataFile); perror("Open ");getch(); exit(1); while(fread(&c_manc_total,sizeof(candidate),1,fp)!=(int)NULL) c_total+; fclose(fp);void c_save()FILE *fp=NULL;char Data=" 候選人 .txt"/* 存
8、儲投票人信息的文件名 */ fp=fopen(DataFile,"wb");for(i=0;i<c_total;i+) if(fwrite(&c_mani,sizeof(candidate),1,fp)!=1)printf("nwrite fail! End with any keyn",DataFile); perror("write ");getch(); exit(1);void byebye() thans();void vote()long candidatenum;/* 定義進(jìn)行操作時的臨時結(jié)構(gòu)體變量 */
9、int i,flag;char Data=" 候選人 .txt",next;/* DataFile 存儲候選人信息的文件名, next 為是否進(jìn)行下一次投標(biāo)操作的 選項 */candidate TempS;FILE *fp;begin:flag=0;/*flag 用來標(biāo)志是否找對應(yīng)編號,即投票是否成功 */ read_c_man();printf(" 請輸入您要投票的候選人的號碼 :"); scanf("%ld",&candidatenum);printf(" 您所投票的候選人號碼是 :%ldn",cand
10、idatenum); for(i=0;i<c_total;i+) if(c_mani.number=candidatenum) flag=1; c_mani.vote+;if(flag)printf(" 投票成功 n");fp=fopen(DataFile,"wb");/* 如果當(dāng)前文件不存在,提示打開文件失敗 */ if(fp=NULL)printf("nOpen fail!End with any key.n",DataFile); perror("Open ");getch(); exit(1); fo
11、r(i=0;i<c_total;i+) fwrite(&c_mani,sizeof(candidate),1,fp); fclose(fp);elseprintf(" 投票失敗!您要投票的號碼不存在 n"); printf(" 按任意鍵返回首頁! n"); getch();return;/* 顯示投票后的情況 */ fp=fopen(DataFile,"rb");if(fp=NULL) printf("nOpen fail! End With any key n",DataFile); perror(
12、"Open ");getch(); exit(1);printf(" 整理后的最新投票情況 :n"); printf("n 候選人號碼 t 候選人姓名 t 票數(shù) n");/* 將文件中的數(shù)據(jù)讀入結(jié)構(gòu)體數(shù)組 */ while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)t%d if(TempS.number!=0) printf("n%ld t%sn",TempS.number,TempS.name,TempS.vote); fclose(fp);print
13、f("n 繼續(xù)嗎?是(Y)/ 否(N):");fflush(stdin); next=getchar();putchar('n'); if(next='y'|next='Y')goto begin;/* 創(chuàng)建用戶信息 */void CreatUser()FILE *fp=NULL;char Data=" 用戶.txt"/*存儲投票人信息的文件名 */user TempS;int over_flag=0;char c;/* 讀入原始數(shù)據(jù) , 用于檢查輸入是否有重復(fù) */ fp=fopen(DataFile,&
14、quot;rb");if(fp=NULL)printf("nOpen fail! End With any key n",DataFile); perror("Open ");getch();exit(1);while(fread(&total_usertotal,sizeof(user),1,fp)!=(int)NULL)total+;fclose(fp);fp=fopen(DataFile,"ab+");clrscr();doclrscr();printf("* " gotoxy(23,3);
15、printf("請輸入 :");*創(chuàng)建新用戶gotoxy(30,5);printf("用戶名 :");scanf("%s",&TempS.name);TempS.name19='0'/* 檢查輸入姓名是否有重復(fù) */for(i=0;i<total;i+)if(strcmp(TempS.name,total_)=0) printf(" getch(); over_flag=1; break;if (over_flag)over_flag=0;該用戶名已存在!按任意鍵瀏覽所有用戶
16、 .");continue;gotoxy(30,6);printf(" 密碼 :");scanf("%s",&TempS.ps);TempS.ps7='0' gotoxy(30,7);printf(" if(TempS.power!=1) TempS.power=0;權(quán)限:");sca nf("%d", &TempS.power);/* 將數(shù)據(jù)加入原始數(shù)據(jù) , 用于下一次輸入比較 */total_usertotal=TempS;total+; if(fwrite(&
17、TempS,sizeof(user),1,fp)!=1) printf("nwrite fail! End with any keyn",DataFile); perror("write "); getch();exit(1);printf("要繼續(xù)創(chuàng)建新用戶嗎?是(Y)/否(N):");getchar();c=getchar();while(c='Y'|c='y');fclose(fp);/* 在屏幕上顯示文件內(nèi)容 */ printf("用戶資料數(shù)據(jù)處理完畢 .n",DataFil
18、e);printf("所有用戶具體情況如下 :n");fp=fopen(DataFile,"rb");printf(" *" );if(fp=NULL)printf("nOpen fail! End With any key n",DataFile); perror("Open ");getch();exit(1);prin tf("n 姓名 tt 密碼 tt 權(quán)限 n"); while(fread(&TempS,sizeof(user),1,fp)!=(int)NU
19、LL) printf("n%stt%-8stt%dn",TempS.name,TempS.ps,TempS.power); fclose(fp);printf("'*、' );printf("n 按任意鍵返回首頁! "); getch();void create()char Data=" 候選人 .txt"FILE * fp=NULL;char c;int over_flag=0;candidate TempS;clrscr();read_c_man();fp=fopen(DataFile,"ab+
20、");do*創(chuàng)建新候選人clrscr();printf("*");gotoxy(22,3);printf("請輸入 :");gotoxy(29,5);printf(" 候 選 人 號 碼:");sca nf("%ld", &TempS. number);/* 檢查輸入編號是否有重復(fù) */ for(i=0;i<c_total;i+)if(TempS.number=c_mani.number)printf("該號碼已存在 . 按任意鍵瀏覽所有候選人 .");getch();o
21、ver_flag=1;break;if (over_flag)over_flag=0; continue;gotoxy(27,6);pri ntf("姓名:");sca nf("%s", &TempS .n ame);TempS.name19='0'for(i=0;i<c_total;i+)if(strcmp(TempS.name,c_)=0)printf("該姓名已存在! 請再輸入一次!按任意鍵繼續(xù) .");getch(); over_flag=1; break;if (over_fl
22、ag) over_flag=0; continue;gotoxy(27,7);printf(" 簡介 :"); fflush(stdin);gets(TempS.intro);TempS.intro399='0'TempS.vote=0;/* 將數(shù)據(jù)加入原始數(shù)據(jù) , 用于下一次輸入比較 */ c_manc_total=TempS;c_total+; if(fwrite(&TempS,sizeof(candidate),1,fp)!=1)printf("nwrite fail! End with any keyn",DataFile
23、); perror("write ");getch(); exit(1);printf(" 要繼續(xù)創(chuàng)建新的候選人嗎 ?是 (Y)/ 否 (N): "); fflush(stdin);c=getchar();while(c='Y'|c='y'); fclose(fp);/* 在屏幕上顯示文件內(nèi)容 */ clrscr();printf(" 候選人資料: n");printf("f*");fp=fopen(DataFile,"rb");if(fp=NULL)printf
24、("nOpen fail! End With any key n",DataFile); perror("Open ");getch();exit(1);while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)printf("n 號 碼 :%-15ld 姓 名 介:s",TempS. nu mber,TempS. name,TempS.i ntro);fclose(fp);:%-15s 簡printf("n*");printf("n 按任意鍵返回
25、首頁! ");getch();void browse()/* 瀏覽候選人信息 */ read_c_man();clrscr();/*清屏 */printf("候選人資料: n");printf("f*n");for(i=0;i<c_total;i+)printf(”號碼:-15ld",c_ma ni. number);prin tf("姓名:-19s",c_ma ni. name);prin tf("簡介:sn",c_ma ni.i ntro);printf("f*")
26、;printf("n 按任意鍵返回首頁! ");getch();void search()/* 查詢候選人信息 */ char c;long number;int flag=0;read_c_man();doclrscr();printf("nt 請輸入要查詢的候選人號碼 :");scanf("%ld",&number);for(i=0;i<c_total;i+)if(number=c_mani.number)clrscr();printf("t您要查詢的候選人信息如下 :nn");printf(&q
27、uot;t號碼:ld n ",c_ma ni. nu mber);printf("t姓名:%s n ",c_ma ni. name);printf("t簡介:%s n",c_ma ni.i ntro);flag=1;break;if (flag) flag=0;else printf("t對不起,沒有您要查詢的候選人 n");printf("t要繼續(xù)查詢候選人嗎?是(Y)/否(N):");getchar();c=getchar();while(c='Y')|(c='y');
28、void sort() /* 按票數(shù)從高到低列出所有數(shù)據(jù) */int i,k,j;candidate c_man2N,temp; /*c_manN 用于存放排序后的數(shù)據(jù) */ read_c_man();for(i=0;i<c_total;i+)c_man2i=c_mani;/* 將 c_manc_total 賦 值 給c_man2c_total*/for(i=0;i<c_total-1;i+) /* 用選擇法排序 */k=i;for(j=i+1;j<c_total;j+) if(c_man2k.vote<c_man2j.vote)k=j;if(k!=i) temp=c_
29、man2i;c_man2i=c_man2k;c_man2k=temp; /* 排序結(jié)束 */ printf(" 票數(shù)從高到低排列如下 :n"); printf("*n");printf("* 號碼 候選人 票數(shù) *n"); printf("*n");for(i=0;i<c_total;i+) /*輸出排序后的結(jié)果 */printf("*%-13ld%-13s%-6d*n",c_man2i.number,c_,c_man2i.vote);printf("*n&q
30、uot;);printf(" 按任意鍵返回首頁! ");fflush(stdin);getch();*電子投票系統(tǒng)void welcome() printf("n*printf("nnnnr");按任意鍵進(jìn)入系統(tǒng)登錄界面 .");getch();clrscr(); printf("nnnr 統(tǒng) *nnr");歡迎登陸電子投票系void thans()clrscr();cprintf("nnnnnnrn");cprintf("nnnnnnr 見!");sleep(3);clrs
31、cr();感謝您的參與 !再/* 管理員主控平臺 */void main_a()int key;char menu=" *nr"" 管理員界面 nr"IIII1II2II3nnr"II4nnr"II5II0"nn*"nr"do創(chuàng)建新候選人 nnr" 創(chuàng)建新用戶 nnr" 查詢候選人信息瀏覽所有候選人整理所有投票 nnr" 退出 nnr" 請選擇 0 到 5:"*松 »輸出主菜單 */clrscr(); cprintf("%s"
32、,menu); /* scanf("%d",&key); switch(key)case 1:create();break;case 2:CreatUser();break;case 3:search();break;case 4:browse();break;case 5:clrscr(); sort(); break; case 0:break; default:break;while(key!=0); byebye();void main_v()/* 用戶主控平臺 */int key;menu="投票者界面char*nr"IInr"
33、; *nr""nnr ""1.瀏覽所有候選人nnr""2.查詢候選人信息nnr""3.投票 nnr""0.退出 nnr""n * 請選擇 0 到 3:"do clrscr(); cprintf("%s",menu); /* 輸出主菜單 */ scanf("%d",&key);switch(key)case 1:browse();break;case 2:search();break;case 3:clrscr(); v
34、ote();break;case 0:break;default:break;while(key!=0); byebye();void main()FILE * fp=NULL;char Data=" 用戶 .txt"char relogin;/* 是否重新登錄的標(biāo)志 */int success=0;user input_user,temp_user;system( "graftabl 936 ");welcome();again:/* 輸入用戶名 */printf("nn請輸入用戶名 :");scanf("%s"
35、,input_);printf("nr請輸入密碼 :");scanf("%s",input_user.ps);fflush(stdin);fp=fopen(DataFile,"rb");if(fp=NULL)printf("nOpen fail! End With any keyn",DataFile);perror("Open ");getch();exit(1);/* 校驗用戶名和密碼 */ while(fread(&temp_user,sizeof(user),1
36、,fp)!=NULL)if(strcmp(input_,temp_)=0 && (strcmp(input_user.ps,temp_user.ps)=0)printf("nlogin successful!");success=1;/* 判斷權(quán)限,如 power 的值為 1 ,則是管理員 , 并調(diào)用管理員界面 */if(temp_user.power=1)clrscr();printf("nnnnnnn 您是管理員 ! 歡迎您登錄 系統(tǒng)! 正在進(jìn)入管理員界面 .");sleep(2);main_a()
37、;break;/*如 power 的值為 0, 則是投票者,并調(diào)用投票者界面 */if(temp_user.power=0)clrscr();printf("nnnnnnn 您是投票者 ! 歡迎您登錄 系統(tǒng)! 正在進(jìn)入投票者界面 .");sleep(2);main_v();break;fclose(fp);if(success=0)fflush(stdin);printf("n 用戶名或密碼錯誤!繼續(xù)輸入嗎?是 (Y)/ 否 (N): "); fflush(stdin);relogin=getchar();if(relogin='Y')|
38、(relogin='y')goto again;elseprintf("結(jié)束 n");exit(0);四、測試用例和測試說明1、開始運行的界面C C: DO匚UBE11桌面IdlDSDQeilwotef. exe按任意犍進(jìn)入系統(tǒng)登錄界面.左上角的那兩行字“上一個代碼頁:437當(dāng)前代碼頁:936” 是因為在 Win-TC編譯器在添加一個顯示中文的函數(shù)system( "graftabl 936 ")之后而出現(xiàn)的!2、登錄界面(1)輸入“用戶名:1;密碼:1”將確認(rèn)該用戶的身份是管理員,并進(jìn)入管理員界面(2)輸入“用戶名:2;密碼:2”將確認(rèn)該
39、用戶的身份是投票者,并進(jìn)入管理 員界面3、管理員界面(1)、選擇“ 1”將進(jìn)入創(chuàng)建新候選人的界面按要求填寫新的候選人號碼、姓名及簡介即可,若填寫的號碼已存在系統(tǒng)將提示, 并在按任意鍵后就會顯示所有候選人的信息ci C: XDOCUlElXADilBIlXlfilXaiDSOO'lWOTE. EXEJt碼-3 咅碼;師&?:6L&TFl f姓名:Shaodie 姓塔=Long 游務(wù):Linqrlln<v 竝名:liuxiang 艾名:liudehua 定名long 姓名:wu世名:liuxiang 姓給-WU芫£ = lo bron 女茫名:we lx i
40、ong 姓茗:zhangaj/t: pretty girl '奇: student 荀介訶ESli簡介:ijundonguan藥介沖"hou商介:Ion裁?f: xucshens 商 : yun 戊 onsfyiiJin 荀JT:xuesheng 簡介-tjiuxinsS9 :AJisheng按任意鑲謖回首頁I(2) 、選擇“2”將進(jìn)入創(chuàng)建新用戶界面像創(chuàng)建新候選人一樣,按要求輸入新的用戶名、密碼及權(quán)限即可,若用戶名已存 在,系統(tǒng)將提示,并在按任意鍵后顯示所有用戶資料小 C: DOCU>E',Ia80D*l¥0TE, EEEBBQ0334320lb509
41、550881660la J ilaji1Bl310«98 98989014X0b.3130u150E4540鼻* 電殲 r.小占 q鼻*c廠 ku 丄rm n. kuj.rm n. k» uj- >«. r n. e.a. j i r. r n. en. r r r. r般任意犍返回首頁!-(3) 選擇“ 3”將進(jìn)入查詢候選人信息的界面輸入的號碼不存在即提示并要求選擇要不要繼續(xù)查詢(4) 選擇“ 4”將進(jìn)入顯示所有候選人資料的界面cv c: DOCU>E1 AD1ISI*1I OBOD*1VOTE. EXE口|po|to|hj 莒苕百pnpgpqp0 fr 612 345196678 5 $!-fl丁勺F巾百帀Shao die Long Linlingf liuxiang liudehua long uu lluxiang <JU lebron we ixionf shang-k介介介介介介介介介介介介 ” lBMBBsJSJaB凰間:pregirl :student=
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣象學(xué)教師勞動合同樣本
- 無人駕駛技術(shù)董事聘用合同
- 本溪市供熱環(huán)保政策實施
- 經(jīng)濟(jì)適用房交易附加協(xié)議
- 畜牧業(yè)會計聘用合同樣本
- 停車場綠化工程合同
- 商務(wù)樓宇電梯安全運行規(guī)范
- 采礦技術(shù)人員培訓(xùn)課件
- 校園文明禮貌教育活動
- VN3000酒店客房控制系統(tǒng)解決方案
- 關(guān)于高中英語寫作教學(xué)的問卷設(shè)計(學(xué)生卷)
- VFA的測定方法及標(biāo)準(zhǔn)曲線
- 危險品安全數(shù)據(jù)清冊氯氰菊脂
- 施工現(xiàn)場挖斷電纜、光纜事故應(yīng)急搶修方案(純干貨版)
- 石灰石粉倉安裝方案
- 標(biāo)準(zhǔn)化大綱-模版
- 松下電器(中國)焊接學(xué)?!附蛹夹g(shù)
- 《肺動脈高壓護(hù)理》PPT課件.ppt
- 河堤工程巖土工程勘察報告
- 完整版水穩(wěn)自評報告
- 《小兒推拿》PPT課件(完整版)
評論
0/150
提交評論