电子投票系统C语言课程设计广东工业大学.docx

上传人:b****6 文档编号:4831461 上传时间:2022-12-10 格式:DOCX 页数:23 大小:21.18KB
下载 相关 举报
电子投票系统C语言课程设计广东工业大学.docx_第1页
第1页 / 共23页
电子投票系统C语言课程设计广东工业大学.docx_第2页
第2页 / 共23页
电子投票系统C语言课程设计广东工业大学.docx_第3页
第3页 / 共23页
电子投票系统C语言课程设计广东工业大学.docx_第4页
第4页 / 共23页
电子投票系统C语言课程设计广东工业大学.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

电子投票系统C语言课程设计广东工业大学.docx

《电子投票系统C语言课程设计广东工业大学.docx》由会员分享,可在线阅读,更多相关《电子投票系统C语言课程设计广东工业大学.docx(23页珍藏版)》请在冰豆网上搜索。

电子投票系统C语言课程设计广东工业大学.docx

电子投票系统C语言课程设计广东工业大学

课程设计报告

一、需求分析:

1、设计题目:

电子投票系统

2、设计内容及要求:

(1)通过编程建立一个小型电子投票系统,其中包含电子投票、票数统计功能。

尽量做到提供一个简单的人机界面,系统界面友好,使用方便。

(2)软件的使用者分为两类,一类为管理员,可以对候选人信息进行初始化和修改,还可浏览候选人信息介绍,可对候选人的票数进行排序以及对系统的用户进行管理,创建使用者用户名和密码等。

另一类为使用者—普通投票者,该类用户需要用管理员分配的用户名和密码正确登录系统,可以查询候选人介绍、投票等。

(投票是只需做到输入自己想要投票的候选人编号即可完成投票)

3、系统功能分析:

本系统程序功能:

(1)投票者功能

a.浏览所有候选人资料

b.查询要了解的候选人的信息

c.在了解候选人之后进行投票

(2)管理员功能

a.创建新的候选人资料

b.创建新的用户资料

c.查询要了解的候选人资料

d.浏览所有的候选人资料

e.对候选人票数进行统计并排序

二、具体设计

1、功能模块

(1)开始运行与结束运行界面模块

开始运行显示有“电子投票系统”字样的界面,结束运行时则输出显示“感谢参与、再见”字样的界面。

(2)功能选择模块

根据输入的用户名和密码,分别进入管理员界面和投票者界面

(3)身份验证模块

验证管理员和投票者的用户名和密码是否正确,不正确可选择重新输入用户名和密码或者退出。

(4)投票人管理模块?

实现对投票人的管理功能,如创建投票人用户名和密码。

主要用结构体类型的数组和文件的读写来完成数据的管理操作。

(5)候选人管理模块

同投票人管理模块类似,要实现对大量有一定结构的信息进行管理的操作,如创建候选人,查询、浏览候选人信息。

因此定义候选人信息结构体,用于存储候选人信息记录,并且将大量记录存储在硬盘文件中以便保存。

用文件的读写函数实现各项功能。

(6)投票区模块

投票区模块用于完成系统的主体功能,提示投票人输入自己想要选举的候选人序号,系统立刻将该候选人对应的票数加一,并将目前的投票状况显示给投票人。

因此该部分只需读取候选人信息文件,将对应的候选人票数加一后再写回文件并显示即可。

(7)票数管理模块:

该模块具有对候选人票数进行排行和浏览两大功能。

2、程序流程图

三、源程序代码

#include

#include

#include

#include

#include

#defineclosegrclosegraph

#defineN30

voidwelcome();/*欢迎*/

voidthans();/*再见*/

voidmain_a();/*管理员主控平台*/

voidmain_v();/*用户(投票者)主控平台*/

voidcreate();/*创建候选人*/

voidCreatUser();/*创建用户*/

voidsearch();/*查询候选人信息*/

voidbrowse();/*浏览候选人信息*/

voidvote();/*用户投票*/

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];

voidread_c_man()

{

charDataFile[20]="候选人.txt";

FILE*fp=NULL;

c_total=0;

fp=fopen(DataFile,"rb");

if(fp==NULL)

{

printf("\nOpenfile%sfail!

EndWithanykey\n",DataFile);

perror("Openfilefail");

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,"wb");

for(i=0;i

{

if(fwrite(&c_man[i],sizeof(candidate),1,fp)!

=1)

{

printf("\nwritefileisfail!

Endwithanykey\n",DataFile);

perror("writefilefail");

getch();

exit

(1);

}

}

}

voidbyebye()

{

thans();

}

voidvote()

{

longcandidatenum;/*定义进行操作时的临时结构体变量*/

inti,flag;

charDataFile[20]="候选人.txt",next;

/*DataFile存储候选人信息的文件名,next为是否进行下一次投标操作的选项*/

candidateTempS;

FILE*fp;

begin:

flag=0;/*flag用来标志是否找对应编号,即投票是否成功*/

read_c_man();

printf("请输入您要投票的候选人的号码:

");

scanf("%ld",&candidatenum);

printf("您所投票的候选人号码是:

%ld\n",candidatenum);

for(i=0;i

{

if(c_man[i].number==candidatenum)

{

flag=1;

c_man[i].vote++;

}

}

if(flag)

{

printf("投票成功\n");

fp=fopen(DataFile,"wb");

/*如果当前文件不存在,提示打开文件失败*/

if(fp==NULL)

{

printf("\nOpenfileisfail!

Endwithanykey.\n",DataFile);

perror("Openfilefail");

getch();

exit

(1);

}

for(i=0;i

{

fwrite(&c_man[i],sizeof(candidate),1,fp);

}

fclose(fp);

}

else

{

printf("投票失败!

您要投票的号码不存在\n");

printf("按任意键返回首页!

\n");

getch();

return;

}

/*显示投票后的情况*/

fp=fopen(DataFile,"rb");

if(fp==NULL)

{

printf("\nOpenfile%sfail!

EndWithanykey\n",DataFile);

perror("Openfilefail");

getch();

exit

(1);

}

printf("整理后的最新投票情况:

\n");

printf("\n候选人号码\t候选人姓名\t票数\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继续吗?

是(Y)/否(N):

");

fflush(stdin);

next=getchar();

putchar('\n');

if(next=='y'||next=='Y')gotobegin;

}

/*创建用户信息*/

voidCreatUser()

{

FILE*fp=NULL;

charDataFile[20]="用户.txt";/*存储投票人信息的文件名*/

userTempS;

intover_flag=0;

charc;

/*读入原始数据,用于检查输入是否有重复*/

fp=fopen(DataFile,"rb");

if(fp==NULL)

{

printf("\nOpenfile%sfail!

EndWithanykey\n",DataFile);

perror("Openfilefail");

getch();

exit

(1);

}

while(fread(&total_user[total],sizeof(user),1,fp)!

=(int)NULL)

{

total++;

}

fclose(fp);

fp=fopen(DataFile,"ab+");

clrscr();

do

{

clrscr();

printf("*****************创建新用户*****************");

gotoxy(23,3);

printf("请输入:

");

gotoxy(30,5);printf("用户名:

");scanf("%s",&TempS.name);

TempS.name[19]='\0';

/*检查输入姓名是否有重复*/

for(i=0;i

{

if(strcmp(TempS.name,total_user[i].name)==0)

{

printf("该用户名已存在!

按任意键浏览所有用户...");

getch();

over_flag=1;

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("%d",&TempS.power);

if(TempS.power!

=1)

{

TempS.power=0;

}

/*将数据加入原始数据,用于下一次输入比较*/

total_user[total]=TempS;

total++;

if(fwrite(&TempS,sizeof(user),1,fp)!

=1)

{

printf("\nwritefileisfail!

Endwithanykey\n",DataFile);

perror("writefilefail");

getch();

exit

(1);

}

printf("要继续创建新用户吗?

是(Y)/否(N):

");

getchar();

c=getchar();

}while(c=='Y'||c=='y');

fclose(fp);

/*在屏幕上显示文件内容*/

printf("用户资料数据处理完毕.\n",DataFile);

printf("所有用户具体情况如下:

\n");

fp=fopen(DataFile,"rb");

printf("************************************************************");

if(fp==NULL)

{

printf("\nOpenfileisfail!

EndWithanykey\n",DataFile);

perror("Openfilefail");

getch();

exit

(1);

}

printf("\n姓名\t\t密码\t\t权限\n");

while(fread(&TempS,sizeof(user),1,fp)!

=(int)NULL)

{

printf("\n%s\t\t%-8s\t\t%d\n",TempS.name,TempS.ps,TempS.power);

}

fclose(fp);

printf("************************************************************");

printf("\n按任意键返回首页!

");

getch();

}

voidcreate()

{

charDataFile[20]="候选人.txt";

FILE*fp=NULL;

charc;

intover_flag=0;

candidateTempS;

clrscr();

read_c_man();

fp=fopen(DataFile,"ab+");

do

{

clrscr();

printf("*****************创建新候选人*****************");

gotoxy(22,3);

printf("请输入:

");

gotoxy(29,5);printf("候选人号码:

");scanf("%ld",&TempS.number);

/*检查输入编号是否有重复*/

for(i=0;i

{

if(TempS.number==c_man[i].number)

{

printf("该号码已存在.按任意键浏览所有候选人...");

getch();

over_flag=1;

break;

}

}

if(over_flag)

{

over_flag=0;

continue;

}

gotoxy(27,6);printf("姓名:

");scanf("%s",&TempS.name);

TempS.name[19]='\0';

for(i=0;i

{

if(strcmp(TempS.name,c_man[i].name)==0)

{

printf("该姓名已存在!

请再输入一次!

按任意键继续...");

getch();

over_flag=1;

break;

}

}

if(over_flag)

{

over_flag=0;

continue;

}

gotoxy(27,7);printf("简介:

");

fflush(stdin);

gets(TempS.intro);

TempS.intro[399]='\0';

TempS.vote=0;

/*将数据加入原始数据,用于下一次输入比较*/

c_man[c_total]=TempS;

c_total++;

if(fwrite(&TempS,sizeof(candidate),1,fp)!

=1)

{

printf("\nwritefileisfail!

Endwithanykey\n",DataFile);

perror("writefilefail");

getch();

exit

(1);

}

printf("要继续创建新的候选人吗?

是(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("\nOpenfile%sfail!

EndWithanykey\n",DataFile);

perror("Openfilefail");

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();

}

voidbrowse()/*浏览候选人信息*/

{

read_c_man();

clrscr();/*清屏*/

printf("候选人资料:

\n");

printf("***************************************************************\n");

for(i=0;i

{

printf("号码:

%-15ld",c_man[i].number);

printf("姓名:

%-19s",c_man[i].name);

printf("简介:

%s\n",c_man[i].intro);

}

printf("***************************************************************");

printf("\n按任意键返回首页!

");

getch();

}

voidsearch()/*查询候选人信息*/

{

charc;

longnumber;

intflag=0;

read_c_man();

do

{

clrscr();

printf("\n\t请输入要查询的候选人号码:

");

scanf("%ld",&number);

for(i=0;i

{

if(number==c_man[i].number)

{

clrscr();

printf("\t您要查询的候选人信息如下:

\n\n");

printf("\t号码:

%ld\n",c_man[i].number);

printf("\t姓名:

%s\n",c_man[i].name);

printf("\t简介:

%s\n",c_man[i].intro);

flag=1;

break;

}

}

if(flag)

{

flag=0;

}

else

{

printf("\t对不起,没有您要查询的候选人\n");

}

printf("\t要继续查询候选人吗?

是(Y)/否(N):

");

getchar();

c=getchar();

}while((c=='Y')||(c=='y'));

}

voidsort()/*按票数从高到低列出所有数据*/

{

inti,k,j;

candidatec_man2[N],temp;/*c_man[N]用于存放排序后的数据*/

read_c_man();

for(i=0;i

c_man2[i]=c_man[i];/*将c_man[c_total]赋值给c_man2[c_total]*/

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(c_man2[k].vote

}

if(k!

=i){

temp=c_man2[i];c_man2[i]=c_man2[k];c_man2[k]=temp;

}

}/*排序结束*/

printf("票数从高到低排列如下:

\n");

printf("*---------------------------------------------*\n");

printf("*号码候选人票数*\n");

printf("*---------------------------------------------*\n");

for(i=0;i

{

printf("*%-13ld%-13s%-6d*\n",c_man2[i].number,c_man2[i].name,c_man2[i].vote);

}

printf("*---------------------------------------------*\n");

printf("按任意键返回首页!

");

fflush(stdin);

getch();

}

voidwelcome()

{

printf("\n********************电子投票系统********************\n\n\n\n\r");

printf("按任意键进入系统登录界面...");

getch();

clrscr();

printf("\n\n\n\r********************欢迎登陆电子投票系统********************\n\n\r");

}

voidthans()

{

clrscr();

cprintf("\n\n\n\n\n\n\r感谢您的参与!

\n");

cprintf("\n\n\n\n\n\n\r再见!

");

sleep(3);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1