電子投票系統(tǒng)C語言課程設計廣東工業(yè)大學_第1頁
電子投票系統(tǒng)C語言課程設計廣東工業(yè)大學_第2頁
電子投票系統(tǒng)C語言課程設計廣東工業(yè)大學_第3頁
電子投票系統(tǒng)C語言課程設計廣東工業(yè)大學_第4頁
電子投票系統(tǒng)C語言課程設計廣東工業(yè)大學_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計報告一、需求分析:1、設計題目:電子投票系統(tǒng)2、設計內容及要求:(1)通過編程建立一個小型電子投票系統(tǒng),其中包含電子投票、票數統(tǒng)計功能。盡量 做到提供一個簡單的人機界面,系統(tǒng)界面友好,使用方便。(2)軟件的使用者分為兩類,一類為管理員,可以對候選人信息進行初始化和修改, 還可瀏覽候選人信息介紹,可對候選人的票數進行排序以及對系統(tǒng)的用戶進行管理,創(chuàng)建 使用者用戶名和密碼等。另一類為使用者普通投票者,該類用戶需要用管理員分配的用 戶名和密碼正確登錄系統(tǒng),可以查詢候選人介紹、投票等。 (投票是只需做到輸入自己想要 投票的候選人編號即可完成投票)3、系統(tǒng)功能分析:本系統(tǒng)程序功能:(1)投票者功

2、能a. 瀏覽所有候選人資料b. 查詢要了解的候選人的信息c. 在了解候選人之后進行投票(2)管理員功能a. 創(chuàng)建新的候選人資料b. 創(chuàng)建新的用戶資料c. 查詢要了解的候選人資料d. 瀏覽所有的候選人資料e. 對候選人票數進行統(tǒng)計并排序二、具體設計1、功能模塊(1)開始運行與結束運行界面模塊 開始運行顯示有“電子投票系統(tǒng)”字樣的界面,結束運行時則輸出顯示“感謝參與、再見”字樣的界面。(2)功能選擇模塊 根據輸入的用戶名和密碼,分別進入管理員界面和投票者界面(3)身份驗證模塊驗證管理員和投票者的用戶名和密碼是否正確,不正確可選擇重新輸入用戶名和密碼 或者退出。(4)投票人管理模塊 ?實現對投票人的

3、管理功能,如創(chuàng)建投票人用戶名和密碼。主要用結構體類型的數組和 文件的讀寫來完成數據的管理操作。(5)候選人管理模塊同投票人管理模塊類似,要實現對大量有一定結構的信息進行管理的操作,如創(chuàng)建候 選人,查詢、瀏覽候選人信息。因此定義候選人信息結構體,用于存儲候選人信息記錄, 并且將大量記錄存儲在硬盤文件中以便保存。用文件的讀寫函數實現各項功能。(6)投票區(qū)模塊投票區(qū)模塊用于完成系統(tǒng)的主體功能,提示投票人輸入自己想要選舉的候選人序號, 系統(tǒng)立刻將該候選人對應的票數加一,并將目前的投票狀況顯示給投票人。因此該部分只 需讀取候選人信息文件,將對應的候選人票數加一后再寫回文件并顯示即可。(7)票數管理模塊

4、:該模塊具有對候選人票數進行排行和瀏覽兩大功能。2、程序流程圖三、源程序代碼#include<stdio.h>#include<string.h> #include<stdlib.h>#include<conio.h> #include<graphics.h>#define closegr closegraph#define N 30void welcome();/*歡迎 */void thans(); /* 再見 */void main_a(); /* 管理員主控平臺 */void main_v(); /* 用戶(投票者)主控平臺

5、*/ void create(); /* 創(chuàng)建候選人 */ void CreatUser();/* 創(chuàng)建用戶 */ void search(); /* 查詢候選人信息 */ void browse(); /* 瀏覽候選人信息 */ void vote(); /* 用戶投票 */void read_c_man();/* 讀取候選人信息 */ void c_save(); /* 存儲候選人信息 */int total=0,c_total=0;int i=0;/* 候選人信息數據結構描述候選人的編號、姓名、簡介和得票數量信息,作為候選人信息記錄存在文件中 */ typedef struct cand

6、idatelong number;char name20;char intro400;int vote;candidate;/* 系統(tǒng)用戶數據結構*/描述系統(tǒng)用戶編號、用戶名、密碼和權限信息,作為一整條記錄存放在文件中typedef struct userchar name20;char ps8;int power;user;candidate c_manN;user total_userN;void read_c_man()char DataFile20="候選人 .txt"FILE * fp=NULL;c_total=0;fp=fopen(DataFile,"

7、rb");if(fp=NULL)printf("nOpen file %s fail! End With any key 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 c_save()FILE *fp=NULL;char DataFile20="候選人 .txt"/* 存儲投票人信息的

8、文件名 */fp=fopen(DataFile,"wb");for(i=0;i<c_total;i+)if(fwrite(&c_mani,sizeof(candidate),1,fp)!=1)printf("nwrite file is fail! End with any keyn",DataFile);perror("write file fail");getch();exit(1);void byebye()thans();void vote()long candidatenum;/* 定義進行操作時的臨時結構體變

9、量 */int i,flag;char DataFile20="候選人 .txt",next;/* DataFile 存儲候選人信息的文件名, next 為是否進行下一次投標操作的選項 */candidate TempS;FILE *fp;begin:flag=0;/*flag 用來標志是否找對應編號,即投票是否成功 */read_c_man();printf(" 請輸入您要投票的候選人的號碼 :");scanf("%ld",&candidatenum);printf(" 您所投票的候選人號碼是 :%ldn"

10、;,candidatenum);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");/* 如果當前文件不存在,提示打開文件失敗 */ if(fp=NULL)printf("nOpen file is fail!End with any key.n",DataFile);perror("Open file fail");ge

11、tch();exit(1);for(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 file %s fail! End With any key n",Da

12、taFile);perror("Open file fail");getch();exit(1);printf(" 整理后的最新投票情況 :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

13、): ");fflush(stdin);next=getchar();putchar('n');if(next='y'|next='Y')goto begin;/* 創(chuàng)建用戶信息 */ void CreatUser()FILE *fp=NULL;char DataFile20="用戶 .txt"/* 存儲投票人信息的文件名 */ user TempS;int over_flag=0;char c;/* 讀入原始數據 ,用于檢查輸入是否有重復 */ fp=fopen(DataFile,"rb");i

14、f(fp=NULL)printf("nOpen file %s fail! End With any key 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+");clrscr();do創(chuàng)建新用戶clrscr();printf(");gotoxy(23,3);p

15、rintf(" 請輸入 :");gotoxy(30,5);printf("用戶名 :");scanf("%s",&TempS.name);TempS.name19='0'/* 檢查輸入姓名是否有重復 */ for(i=0;i<total;i+)if(strcmp(TempS.name,total_)=0)printf(" 該用戶名已存在!按任意鍵瀏覽所有用戶 .");getch();over_flag=1;break;if (over_flag)over_flag=

16、0;continue;gotoxy(30,6);printf(" 密碼 :");scanf("%s",&TempS.ps);TempS.ps7='0'gotoxy(30,7);printf(" 權限 :");scanf("%d",&TempS.power);if(TempS.power!=1)TempS.power=0;/* 將數據加入原始數據 ,用于下一次輸入比較 */total_usertotal=TempS;total+;if(fwrite(&TempS,sizeof(

17、user),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):");getchar();c=getchar();while(c='Y'|c='y');fclose(fp);/* 在屏幕上顯示文件內容 */printf(" 用戶資料數據處理完畢 .n",Data

18、File);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 權限 n"); while(fread(&TempS,sizeof(us

19、er),1,fp)!=(int)NULL)printf("n%stt%-8stt%dn",TempS.name,TempS.ps,TempS.power); fclose(fp);printf(" *");printf("n 按任意鍵返回首頁! ");getch();void create()char DataFile20="候選人 .txt"FILE * fp=NULL;char c;int over_flag=0;candidate TempS;clrscr();read_c_man();fp=fopen(Da

20、taFile,"ab+");doclrscr();printf("創(chuàng)建新候選人);gotoxy(22,3);printf(" 請輸入 :");gotoxy(29,5);printf("候選人號碼 :");scanf("%ld",&TempS.number);/* 檢查輸入編號是否有重復 */for(i=0;i<c_total;i+)if(TempS.number=c_mani.number)printf(" 該號碼已存在 .按任意鍵瀏覽所有候選人 .");getch();

21、over_flag=1;break;if (over_flag)over_flag=0;continue;gotoxy(27,6);printf("姓名 :");scanf("%s",&TempS.name);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_flag)ove

22、r_flag=0;continue;gotoxy(27,7);printf("簡介 :");fflush(stdin);gets(TempS.intro);TempS.intro399='0'TempS.vote=0;/* 將數據加入原始數據 ,用于下一次輸入比較 */ c_manc_total=TempS;c_total+; if(fwrite(&TempS,sizeof(candidate),1,fp)!=1)printf("nwrite file is fail! End with any keyn",DataFile);p

23、error("write file fail");getch();exit(1);printf("要繼續(xù)創(chuàng)建新的候選人嗎 ?是(Y)/否(N): ");fflush(stdin);c=getchar();while(c='Y'|c='y');fclose(fp);/* 在屏幕上顯示文件內容 */ clrscr();printf(" 候選人資料: n");printf(" *");fp=fopen(DataFile,"rb");if(fp=NULL)printf(&

24、quot;nOpen file %s fail! End With any key 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

25、按任意鍵返回首頁! ");getch();void browse()/* 瀏覽候選人信息 */read_c_man();clrscr();/* 清屏 */printf(" 候選人資料: n");*n");printf("for(i=0;i<c_total;i+)printf("號碼 :%-15ld",c_mani.number);printf("姓名 :%-19s",c_);printf("簡介 :%sn",c_ro);printf("

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+)!=6l)()! !>ejq!(O4u !ue-,11u s%:號凰 )Hud!(eu ue-,11u s%:沏 lll)uud!(jqn

27、u ue-,11u p%: lll)uudK1.uu: ±WWBYWWM> 11)ud!()JSJ(jqu nr!ue0=OqlU nu)elseprintf("t 對不起,沒有您要查詢的候選人 n");printf("t 要繼續(xù)查詢候選人嗎 ?是(Y)/否(N): ");getchar();c=getchar();while(c='Y')|(c='y');void sort() /* 按票數從高到低列出所有數據 */int i,k,j;candidate c_man2N,temp; /*c_manN 用于

28、存放排序后的數據 */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_man2i;c_man2i=c_man2k;c_man2k=temp;/* 排序結束 */printf(" 票數從高到低排列如下 :n");p

29、rintf("*n");printf("* 號碼候選人票數*n");printf("*n");for(i=0;i<c_total;i+) /* 輸出排序后的結果 */printf("* %-13ld %-13s %-6d*n",c_man2i.number,c_,c_man2i.vote);printf("*n");printf(" 按任意鍵返回首頁! ");fflush(stdin);getch();void welcome()printf(&qu

30、ot;n電子投票系統(tǒng)nnnnr");printf("按任意鍵進入系統(tǒng)登錄界面 .");getch();clrscr();printf("nnnr * 歡 迎 登 陸 電 子 投 票 系 統(tǒng) * nnr");void thans()clrscr();cprintf("nnnnnnr感 謝 您 的 參 與 !n");cprintf("nnnnnnr再見 !");sleep(3);clrscr();/* 管理員主控平臺 */ void main_a()int key;char menu=*nr"&qu

31、ot; 管理員界面 nr"" *nr""nr""1.創(chuàng)建新候選人 nnr""2.創(chuàng)建新用戶 nnr""3.查詢候選人信息 nnr""4.瀏覽所有候選人 nnr""5.整理所有投票 nnr""0.退出 nnr"" nn *請選擇 0到 5:"doclrscr();cprintf("%s",menu); /* 輸出主菜單 */scanf("%d",&key);sw

32、itch(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;char menu="nr""nnr "nnr""n*nr"投票者界面*nr"1.瀏覽所有候

33、選人nnr"2.查詢候選人信息3. 投票 nnr"0.退出nnr"*請選擇 0到 3:"doclrscr();cprintf("%s",menu); /* 輸出主菜單 */scanf("%d",&key);switch(key)case 1:browse();break;case 2:search();break;case 3:clrscr(); vote();break;case 0:break;default:break;while(key!=0);byebye();void main()FILE *

34、fp=NULL;char DataFile20="用戶 .txt"char relogin;/* 是否重新登錄的標志 */int success=0;user input_user,temp_user;system( "graftabl 936 ");welcome();again:/* 輸入用戶名 */printf("nn請輸入用戶名 :");scanf("%s",input_);printf("nr請輸入密碼 :");scanf("%s",input_u

35、ser.ps);fflush(stdin);fp=fopen(DataFile,"rb");if(fp=NULL)printf("nOpen file %s fail! End With any keyn",DataFile);perror("Open file fail");getch();exit(1);/* 校驗用戶名和密碼 */while(fread(&temp_user,sizeof(user),1,fp)!=NULL)if(strcmp(input_,temp_)=0 &

36、&(strcmp(input_user.ps,temp_user.ps)=0)printf("nlogin successful!");success=1;/* 判斷權限,如 power的值為 1,則是管理員 ,并調用管理員界面 */ if(temp_user.power=1)clrscr();printf("nnnnnnn 您是管理員 !歡迎您登錄系統(tǒng) !正在進入 管理員界面 .");sleep(2);main_a();break;/* 如 power的值為 0,則是投票者,并調用投票者界面 */ if(temp_user.power=0)clrscr();printf("nnnnnnn您是投票者 !歡迎您登錄系統(tǒng) !正在進入投票者界面 .");sleep(2);main_v();break;fclose(fp);if(success=0)fflush(stdin);(Y)/否(N): &q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論