版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子投票系统C语
言课程设计广东工
业大学
文档仅供参考
课程设计报告
一、需求分析:
1、设计题目:电子投票系统
2、设计内容及要求:
(1)经过编程建立•个小型电了投票系统,其中包含电了投
票、票数统计功能。尽量做到提供一个简单的人机界面,系统界
面友好,使用方便。
(2)软件的使用者分为两类,一类为管理员,能够对候选人
信息进行初始化和修改,还可浏览候选人信息介绍,可对候选人
的票数进行排序以及对系统的用户进行管理,创立使用者用户名
和密码等。另一类为使用者一普通投票者,该类用户需要用管理
员分配的用户名和密码正确登录系统,能够查询候选人介绍、投
票等。(投票是只需做到输入自己想要投票的候选人编号即可完
成投票)
3、系统功能分析:
本系统程序功能:
(1)投票者功能
a.浏览所有候选人资料
b.查询要了解的候选人的信息
c.在了解候选人之后进行投票
(2)管理员功能
文档仅供参考
a.创立新的候选人资料
b.创立新的用户资料
c.查询要了解的候选人资料
&浏览所有的候选人资料
e.对候选人票数进行统计并排序
二、具体设计
1、功能模块
(1)开始运行与结束运行界面模块
开始运行显示有“电子投票系统”字样的界面,结束运行时
则输出显示“感谢参与、再见”字样的界面。
(2)功能选择模块
根据输入的用户名和密码,分别进入管理员界面和投票者界
面
(3)身份验证模块
验证管理员和投票者的用户名和密码是否正确,不正确可选
择重新输入用户名和密码或者退出。
(4)投票人管理模块
实现对投票人的管理功能,如创立投票人用户名和密码。主
要用结构体类型的数组和文件的读写来完成数据的管理操作。
(5)候选人管理模块
同投票人管理模块类似,要实现对大量有一定结构的信息进
行管理的操作,如创立候选人,查询、浏览候选人信息。因此定
文档仅供参考
义候选人信息结构体,用于存储候选人信息记录,而且将大量记
录存储在硬盘文件中以便保存。用文件的读写函数实现各项功
能。
(6)投票区模块
投票区模块用于完成系统的主体功能,提不投票人输入自己
想要选举的候选人序号,系统马上将该候选人对应的票数加一,
并将当前的投票状况显示给投票人。因此该部分只需读取候选人
信息文件,将对应的候选人票数加一后再写回文件并显示即可。
(7)票数管理模块:
该模块具有对候选人票数进行排行和浏览两大功能。
2、程序流程图
文档仅供参考
三、源程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#defineclosegrclosegraph
文档仅供参考
#defineN30
voidwelcome();/*欢迎*/
voidthans();/*再见*/
voidmain_a();/*管理员主控平台*/
voidmain_v();/*用户(投票者)主控平台*/
voidcreate();/*创立候选人*/
voidCreatUser();/*创立用户*/
voidsearch();/*查询候选人信息*/
voidbrowse();/*浏览候选人信息*/
voidvoteO;/*用户投票*/
voidread_c_man();/*读取候选人信息*/
voidc_save();/*存储候选人信息*/
inttotal=0,c_total=0;
inti=0;
/*候选人信息数据结构
描述候选人的编号、姓名、简介和得票数量信息,作为候选人信
息记录存在文件中*/
typedefstructcandidate
longnumber;
文档仅供参考
charname[20];
charintro[400];
intvote;
}candidate;
/*系统用户数据结构
描述系统用户编号、用户名、密码和权限信息,作为一整条记录
存放在文件中*/
typedefstructuser
(
charname[20];
charps[8];
intpower;
}user;
candidatec_man[N];
usertotal_user[N];
voidreadcman()
(
charDataFile[20]="候选人,txt”;
FILE*fp=NULL;
ctotal=0;
文档仅供参考
fp=fopen(DataFile,,zrb,z);
if(fp==NULL)
(
printf(,z\nOpenfile%sfail!EndWithanykey
\nzz,DataFile);
perror(,zOpenfilefail");
getch();
exit(1);
}
while(fread(&c_man[c_total],sizeof(candidate),1,fp)!=(int
)NULL)
c_total++;
)
fclose(fp);
)
voidc_save()
(
FILE*fp=NULL;
charDataFile[20]=〃候选人.txt〃;/*存储投票人信息的文
件名*/
文档仅供参考
fp=fopen(DataFile,,zwb,z);
for(i=0;i<ctotal;i++)
(
if(fwrite(&c_man[i],sizeof(candidate),1,fp)!=1)
(
printf(,z\nwritefileisfail!Endwithany
key\n〃,DataFile);
perror(,zwritefilefail");
getchO;
exit(1);
)
)
)
voidbyebye()
(
thans();
}
voidvote()
longcandidatenum;/*定义进行操作时的临时结构体变量
文档仅供参考
inti,flag;
charDataFile[20]二〃候选人.txt”,next;
/*DataFile存储候选人信息的文件名,next为是否进行下
一次投标操作的选项*/
candidateTempS;
FILE*fp;
begin:
flag=O;/*flag用来标志是否找对应编号,即投票是否成功
*/
readcman();
printf(〃请输入您要投票的候选人的号码:〃);
scanf(z/%ldz,,&candidatenum);
printf(〃您所投票的候选人号码是:%ld\n〃,candidatenum);
for(i=0;i<c^total;i++)
(
if(c_man[i],number==candidatenum)
(
flag=l;
c_man[i].vote++;
if(flag)
文档仅供参考
printf(〃投票成功\n〃);
fp=fopen(DataFile,,zwb,z);
/*如果当前文件不存在,提示打开文件失败*/
if(fp==NULL)
]
printfCAnOpenfileisfail!Endwithany
key.\n〃,DataFile);
perror(,zOpenfilefail");
getch();
exit(1);
)
for(i=0;i<c_total;i++)
(
fwritc(&c_man[i],sizcof(candidate),1,fp);
)
fclose(fp);
)
else
(
printf(〃投票失败!您要投票的号码不存在\n〃);
printf(〃按任意键返回首页!\n〃);
文档仅供参考
getchO;
return;
}
/*显示投票后的情况*/
fp=fopen(DataFile,zzrbzz);
if(fp==NULL)
[
printf(z,\nOpenfile%sfail!EndWithanykey
\n〃,DataFile);
perror("Openfilefail");
getchO;
exit(1);
}
printf(〃整理后的最新投票情况:\n〃);
printf(z,\n候选人号码\t候选人姓名\t票
数\n〃);
/*将文件中的数据读入结构体数组*/
while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)
(
if(TempS.number!=0)
printf(z,\n%ld\t%s\t%d
\n〃,TempS.number,TempS.name,TempS.vote);
文档仅供参考
)
fclose(fp);
printf(〃\n继续吗?是(Y是否(N):〃);
fflush(stdin);
next=getchar();
putchar(,\n);
if(next二二'y'||next二二'Y')gotobegin;
)
/*创立用户信息*/
voidCreatUser()
(
FILE*fp=NULL:
charDataFile[20]=〃用户,存储投票人信息的文件
名*/
userTempS;
intover_flag=0;
charc;
/*读入原始数据,用于检查输入是否有重复*/
fp=fopen(DataFile,,zrbz/);
if(fp==NULL)
文档仅供参考
printf(z,\nOpenfile%sfail!EndWithanykey
\n〃,DataFile);
perror(''Openfilefail");
getchO;
exit(1);
)
while(fread(fetotaluser[total],sizeof(user),1,fp)!=(int)N
ULL)
(
total++;
)
fclose(fp);
fp=fopen(DataFile,,,ab+,z);
clrscr();
do
(
clrscr();
printf("*****************仓汁立新用户
\J•
gotoxy(23,3);
printf(〃请输入:〃);
文档仅供参考
gotoxy(30,5);printf(〃用户
名:〃);scanf&TempS.name);
TempS.name[19]='\0';
/*检查输入姓名是否有重复*/
for(i=0;i<total;i++)
]
if(strcmp(TempS.name,total_user[i].name)==0)
(
printf(〃该用户名已存在!按任意键浏览所有
用户・・・〃);
getchO;
over_flag=l;
break;
)
)
if(over_flag)
(
over_flag=0;
continue;
gotoxy(30,6);printf(〃密
码:〃);scanf(〃%s〃,&TempS.ps);
文档仅供参考
TempS.ps[7]='\0';
gotoxy(30,7);printf(〃权
限:〃);scanf(〃96d〃,&TempS.power);
if(TempS.power!=1)
(
TempS.power=0;
}
/*将数据加入原始数据,用于下一次输入比较*/
totaluser[total]=TempS;
total++;
if(fwrite(&TempS,sizeof(user),1,fp)!=1)
(
printf(z,\nwritefileisfail!Endwithany
key\n〃,DataFile);
perror("writefilefail");
getchO;
exit(1);
)
printf(〃要继续创立新用户吗?是(Y)/否(N):〃);
getchar();
c=getchar();
}while(c二二'Y)||c二二'y');
文档仅供参考
fclose(fp);
/*在屏幕上显示文件内容*/
printf(〃用户资料数据处理完毕.\n〃,DataFile);
printf(〃所有用户具体情况如下:\n〃);
fp=fopen(DataFile,zzrbzz);
i(〃*A**1**4**1**1**A**£**£**£**£»*2*
IIiII*T**T**T**T*yi*xT**T**7**T**T**T**7**7**T**T**T^*7**7*
*sl*^^*^^**^*^\•
1
if(fp==NULL)
(
printf(〃\nOpenfileisfail!EndWithanykey
\n,z,DataFile);
perror(,z0penfilefail");
getchO;
exit(1);
}
printfC\n姓名\t\t密码\t\t权限\n〃);
while(fread(&TempS,sizeof(user),1,fp)!=(int)NULL)
(
printf(〃\n96s\t\t%一
8s\t\t%d\n,z,TempS.name,TempS.ps,TempS.power);
)
文档仅供参考
fclose(fp);
+6、(〃*£*
|IIIxjszyszyszjsxjsxjxzjxzjszjsxj*zjsxj*z|xzjxzjszjsz|x*jxzjszjxzjszjszyszjxzjsxf**7*ZJ**1^
〃\•
z|xzjx*Jszjxzjxxj*zj*z|x)
printf(〃\n按任意键返回首页!〃);
getchO;
)
voidcreate()
charDataFile[20]=〃候选人.txt〃;
FILE*fp=NULL;
charc;
intover_flag=0;
candidateTempS;
clrscr();
readcman();
fp=fopen(DataFile,,zab+,z);
do
clrscr();
文档仅供参考
printf(,z*****************仓ij立新候
选人*****************〃);
gotoxy(22,3);
printf(〃请输入:〃);
gotoxy(29,5);printf(z,候选人号
码:〃);scanf(〃%ld〃,&TempS.number);
/*检查输入编号是否有重复*/
for(i=0;i<c_total;i++)
(
if(TempS.number==c_man[i].number)
(
printf(〃该号码已存花按任意键浏览所有候选
人・・,〃);
getchO;
over_flag=l;
break;
}
if(overflag)
(
overflag=0;
continue;
文档仅供参考
gotoxy(27,6);printf(〃姓
名:〃);scanf(〃%s〃,&TempS.name);
TempS.name[19]=,\0";
for(i=0;i<c_total;i++)
(
if(strcmp(TempS.name,c_man[iLname)==0)
(
printf(〃该姓名已存在!请再输入一次!按任
意键继续・・.〃);
getchO;
over_flag=l;
break;
)
)
if(over_flag)
(
overflag=0;
continue;
gotoxy(27,7);printf(〃简介:〃);
fflush(stdin);
文档仅供参考
gets(TempS.intro);
TempS.intro[399]=,\0J;
TempS.vote=0;
/*将数据加入原始数据,用于下一次输入比较*/
c_man[c_total]二TempS;
c_total++;
if(fwrite(&TempS,sizeof(candidate),1,fp)!=1)
(
printf(/z\nwritefileisfail!Endwithany
key\n,?,DataFile);
perror("writefilefail");
gctchO;
exit(1);
}
printf(〃要继续创立新的候选人吗?是(Y)/否(N):〃);
fflush(stdin);
c=getchar();
}while(c==,Y'||c二二'y,);
fclose(fp);
/*在屏幕上显示文件内容*/
clrscr();
printf(〃候选人资料:\n〃);
文档仅供参考
•ZV-V/^1y-v+-i-*(K£>^X>>1>»/>
IIIIZ7SZjS*TXZ1XZlXZjSZ7XZjS/TXZTXZlXZJSZjSXTX^TxXTS✓TS*TXZ1XxTxXTSZTSZTXZlXXTX/TSZ7S^TXXTXxTsZ7SZ7SZ|SXIXXjXZ|SZ|SZTXXTXZ7XZ7S/7SZg*zfx
K|>xl>K1>、•
X7SZjS*TX^TXZTXZjXZTSI
fp=fopen(DataFile,z,rb,z);
if(fp==NULL)
printf(z,\nOpenfile%sfail!EndWithanykey
\n〃,DataFile);
perror(z,Openfilefail");
getchO;
exit(1);
)
whi1e(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)
printfC\n号码:%-151d姓名:%-15s简
介:%s〃,TempS.number,TempS.name,TempS.intro);
)
fclose(fp);
VN4-4、(\*1**1**1*>1**1**1**1**1**£**1**1**£**1**1**L**1**1*
]l\II,[—,卜*T**Tx,[、>1%*7*,[、,[、,J、>7*,]、,[、,[、,[、*T>,]、,卜,[、*7*,[、,[、,卜
*1^\■
*T**T**T**7**T**T**|**T*)
printf(〃\n按任意键返回首页!〃);
文档仅供参考
getchO;
voidbrowse。/*浏览候选人信息*/
readcman();
clrscrO;/*清屏*/
printf(〃候选人资料:\n〃);
f%£**4**£**X*
IIiII*T**T**T**T**T**7**T*
**************\n〃);
for(i=0;i<c_total;i++)
printf(〃号码:%T51d〃,cman[i].number);
printf(〃姓名:%-19s〃,c_man[i].name);
printf(〃简介:96s\n〃,c_man[i],intro);
)
-v7,sX>xX>7,xj>\],»£»■],^£>K1>
I[IIIZT^Zg^zfxZTXztxZlXZT^ZgS/txztxztxZjSZ|S^TXZTVZTSZ7^ZjSztxztxztxZTSZ7^^|XZTXZTX*TSZT^Z?S^?XZlXZTSZT^Z7XZ1^^jXZlXZTSZT^ZgSZ|V^TXZTVZTSZ7^/TXZ|VZTX
\.
XTXZTXZ7*ZgSZTXZlXI
printf(〃\n按任意键返回首页!〃);
getchO;
文档仅供参考
}
voidsearch()/*查询候选人信息*/
(
charc;
longnumber;
intflag=0;
read_c_man();
do
[
clrscr();
printf(〃\n\t请输入要查询的候选人号码:〃);
scanf&number):
for(i=0;i〈c_total;i++)
(
if(number==c_man[i].number)
(
clrscr();
printf(,z\t您要查询的候选人信息如
下:\n\n〃);
printf(〃\t号码:%ld\n〃,c_man[i].number);
printf(,z\t姓名:%s\n〃,c_man[i].name);
文档仅供参考
printf(z,\t简介:%s\nzz,c_man[i].intro);
flag=l;
break;
)
)
if(flag)
(
flag=0;
)
else
(
printfCz\t对不起,没有您要查询的候选人\n〃);
)
printfCAt要继续查询候选人吗?是(Y)/否(N):〃);
getchar();
c=getchar();
}while((c==Y')||(c二二'y'));
voidsort()/*按票数从高到低列出所有数据*/
文档仅供参考
inti,k,j;
candidatecman2[N],temp;/*cjnan[N]用于存放排序后
的数据*/
read_c_man();
for(i=0;i<c_total;i++)
c_man2[i]=c_man[i];/*将c_man[c_total]赋值
给c_man2[c_total]*/
for(i=0;i<c_total-l;i++)/*用选择法排序*/
(
k=i;
for(j=i+1;j<c_total;j++)
if(c_man2[k],vote<c_man2[j].vote)k=j;
)
if(k!=i){
temp=cman2[i];cman2[i]=cman2[k];cman2[k]=temp;
}
}/*排序结束*/
printf(〃票数从高到低排列如下:\n〃);
printf(〃*----------------------------------------
一*\n〃);
文档仅供参考
printf(〃*号码候选人票数
*\n〃);
printf(〃*------------------------------------------------
一*\n〃);
for(i=0;i<c_total;i++)/*输出排序后的结果*/
printfC*%-131d%-13s%-6d
*\n〃,c_man2[i],number,c_man2[i].name,c_man2[i].vote);
}
printf(〃*------------------------------------------------
一*\n〃);
printf(〃按任意键返回首页!〃);
fflush(stdin);
getchO;
)
voidwelcome()
(
printf(〃\n********************电子投票
系统********************\n\n\n\n\r,z);
printfC按任意键进入系统登录界
面・・・〃);
文档仅供参考
getchO;
clrscr();
printf(〃\n\n\n\r********************欢迎登
陆电子投票系统********************\n\n\r〃);
)
voidthans()
(
clrscr();
cprintf(〃\n\n\n\n\n\n\r感
谢您的参与!\n〃);
cprintf(,z\n\n\n\n\n\n\r
再见!〃);
sleep(3);
clrscr();
)
/*管理员主控平台*/
voidmain_a()
intkey
文档仅供参考
charmenu口二〃
K£>K|>>^ZK^>K£>K|>Xt>»J>^1>K1>、X^^1>K1>\y-^\-«/>
*|XZTSZTSZ7SZjSXTXZlSZTSZ7XZg^*TXZ1XZlXZjSZ7XZj^/TxxTxZlXZ7XZ7S#|SZTXZ»XXTS✓TS*TXZ1XxTxXTSXTSZjXXTXXTXXjXZ7Szj^ZTX^txXTSZTXZ7*Zj*ZTXZTX\|I\|
〃管理员
界面\n\r〃
\\-*<«
*J**J<*y**y**y»*y**j**J<*y**y**T**y**J<*Y**T**J**J**y**V**y**y**J、*J**y**7**T**T**T、*7^*y*>p**J<*J、*y**y**y**^**T**y**y**T»\I1\!
〃\n\r〃
〃1.创立新
候选人\n\n\r〃
〃2.创立新
用户\n\n\r〃
〃3.查询候
选人信息\n\n\r〃
〃4.浏览所
有候选人\n\n\r〃
〃5.整理所
有投票\n\n\r〃
〃0,退出
\n\n\r"
\n\n*请选择0到5:〃;
do
文档仅供参考
clrscr();
cprintf("%s〃,menu);/*输出主菜单*/
scanf(〃%d〃,&key);
switch(key)
(
case1:create();break;
case2:CreatUser();break;
case3:search();break;
case4:browseO;break;
case5:clrscr();sort();break;
case0:break;
default:break;
}
}while(key!=0);
byebye();
)
voidmain_v()/*用户主控平台*/
(
intkey;
charmenu口二〃
文档仅供参考
■],KI>K^K^v1>xf>\\-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSCMA 0007-2023出口二手汽车起重机质量与价值评估
- T/UNP 371-2024智能数字化矿山领域机器人
- T/GSEE 4-202210kV配网用交流电力电缆/高压开关柜/
- T/CI 835-2024光刻胶行业绿色工厂评价规范
- T/CAEE 7-2022有机固体废物热解处理工艺评价导则
- T/CSAE 325-2023动力电池信号采集板封装热压绝缘胶膜技术条件
- 2025~2026学年甘肃省天水市麦积区北道区新阳乡胡湾小学人教版三年级上册10月月考试卷数学试卷【附答案】
- 2025-2026学年河南省登封市初中数学九年级期末下册高分预测重点试题详细参考解析
- 2025-2026学年江西省南昌市初中政治九年级期末上册点睛提升黑金试题(详细参考解析)
- Photoshop中级职业技能考试试题(含详细答案解析)
- 血液透析患者皮肤瘙痒的护理
- GB/T 20118-2025钢丝绳通用技术条件
- 2026版高中汉水丑生生物-第五章第1节植物生长素
- 社区家长学校课件
- 公租房维修管理办法北京
- 【公开课】《地图的选择和应用》课件-2025-2026学年人教版七年级地理上册
- XXX中小学食品安全与膳食经费管理专项治理工作自查报告范文
- 中国2型糖尿病防治指南(2024版)解读课件
- 公司廉洁风险防控管理办法
- 两用物项和技术进出口管理资料课件
- 2024年度最终版军人心理学教案
评论
0/150
提交评论