c程序班委投票选举系统

要先在文件夹中新建名字为“候选人”的文本文档且里面不要有任何内容。此程序还是有一部分漏洞的,切勿直接使用!

/* Note:Your choice is C IDE */

#include

#include

#include

#include //通过按键盘产生的对应操作getch();

#define closegrclosegraph

#define N 30//最多候选人数

void main_a(); //管理员界面

void main_v(); //投票者者界面

void addcandidate(); // 创建候选人

void addUser();//创建投票者(用户)

void search(); //查询候选人信息

void scan();//浏览候选人信息

void vote(); //投票者投票

void read();//读取候选人信息

void save();//存储候选人信息

void sort();//整理所有投票

void del();//删除候选人 从文本写入数组中读取然后置为空在传回文本

void read1();//读取用户信息

int total=0,c_total=0;//内存中候选人数

inti=0;

typedef struct candidate//候选人数据结构体

{

long number;//候选人编号

char name[20];//候选人姓名

char intro[400];//候选人简介

int vote;//候选人得票数

}candidate;

typedef struct user//投票者数据结构体

{

char name[20];//投票者姓名

char ps[8];//对应密码

int power;//权限

int sum;//投了几次票

}user;

candidate c_man[N];

user total_user[N];

void main_v()//投票者者界面

{

int key;

do

{

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

printf("********************欢迎进入班委投票界面***********************\n"); printf("***************************************************************\n");

printf("** 1. 浏览所有候选人 2. 查询候选人信息 printf("** 3. 投票 4. 退出 scanf("%d",&key);

switch(key)

{

case 1:scan();break;

case 2:search();break;

case 3:vote();break;

case 4:system("cls");break;

default:break; **\n"); **\n");

}

}while(key!=4);

}

void vote() //投票者投票

{

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

intover_flag=0,tf=0;

inti,flag,j,k,m=0;

char DataFile[20]="候选人.txt",next;// DataFile存储候选人信息的文件名,next 为是否进行下一次投标操作的选项

char DataFile1[20]="用户.txt";

user TempS1; //临时存放用户信息

user TempS2;

candidate TempS; //零时存放候选人信息

FILE *fp;//定义一个指向文件的指针变量fp

FILE *fp1;

begin: //和后面的goto begin对应

read();

// read1();

printf("请输入进行投票的用户账号:\n");

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

printf("密码:\n");

scanf("%s",&TempS2.ps);

fp1=fopen(DataFile1,"ab+"); //读写用户信息

if(fp1==NULL)

{

printf("\n打开%S失败! 按任意键结束.Open file %s fail!End With any key.\n",DataFile1); perror("Open file fail");

getch();

exit(1);

}

while(fread(&TempS1,sizeof(user),1,fp1)!=(int)NULL)

{

for(j=0;j

{

if(strcmp(total_user[j].name,TempS2.name)==0

&&strcmp(total_user[j].ps,TempS2.ps)==0) //如果输入的名字和内存的一样 {

k=j; over_flag=1; break;

}

}

break;

}

if(over_flag)

{

m=0;

}

else

{

printf("此用户不存在或密码错误. 按任意键返回...");

getch();

over_flag=0;

main_v();

}

if(total_user[k].sum)

{

printf("此用户已经投过票了!"); getch(); main_v();

}

else //如果票数=0说明有这个用户只投了一次否则

{

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

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

scanf("%ld",&candidatenum);

printf("您所投票的候选人号码是:%ld\n",candidatenum);

for(i=0;i

{

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

{

flag=1;

c_man[i].vote++;

total_user[k].sum++;

}

}

if(flag)

{

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

total_user[k].sum++;

fwrite(&total_user[k],sizeof(user),1,fp1);

fclose(fp1);

fp=fopen(DataFile,"wb");

if(fp==NULL)//如果当前文件不存在,提示打开文件失败

{

printf("\n打开文件失败! 按任意键结束.Open file fail! End With any key.\n",DataFile); perror("Open file fail"); //同系统的错误一起输出

getch();//暂停,按任意键继续

exit(1);//返回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("\n打开%s失败! 按任意键结束.Open file %s fail! End With any key \n",DataFile); perror("Open file fail");

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

\n",TempS.number,TempS.name,TempS.vote);

}

fclose(fp);

printf("\n继续吗? 是(Y)/否(N): ");

fflush(stdin);//清空输入缓冲区

next=getchar();

putchar('\n');

if(next=='y'||next=='Y')goto begin;

m=0;

}

system("cls"); \t%d

}

void main_a()//管理员界面

{

int key;

do

{

printf("\n\n***************************************************************\n"); printf("********************欢迎进入班委投票界面***********************\n"); printf("***************************************************************\n"); printf("** 1. 创建新候选人 2. 创建新用户 printf("** 3. 查询候选人信息 4. 显示所有候选人 printf("** 5. 选举结果显示 6. 投票界面 printf("** 7. 删除候选人 0. 退出 scanf("%d",&key);

switch(key)

{

case 1:addcandidate();break;

case 2:system("cls");addUser();break;

case 3:system("cls");search();break;

case 4:system("cls");scan();break;

case 5:system("cls");sort(); break; **\n"); **\n"); **\n"); **\n");

case 6:system("cls");printf("\n\n 您是投票者! 欢迎您登录系统! 正在进入投票者界面...\n");

main_v(); break; case 7:del();break;

case 0:break;

default:break;

}

}while(key!=0);

}

void addcandidate()//创建候选人

{

char DataFile[20]="候选人.txt";

FILE * fp=NULL;

char c;

intover_flag=0;

candidate TempS;

read();

fp=fopen(DataFile,"ab+");//ab+读写

do

{

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

printf("请输入:");

printf("候选人号码:");

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

for(i=0;i

{

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

{

printf("该号码已存在.");

over_flag=1;

break;

}

}

if (over_flag)

{

over_flag=0;

continue;

}

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;

}

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("\n写入文件失败! 按任意键结束.write file is fail! End with any key\n",DataFile);

getch();

exit(1);

}

printf("要继续创建新的候选人吗? 是(Y)/否(N): ");

fflush(stdin);

c=getchar();

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

fclose(fp);

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

getch();system("cls");

}

void read()//读取候选人信息

{

char DataFile[20]="候选人.txt";

FILE * fp=NULL;

c_total=0;

fp=fopen(DataFile,"rb");//rb只读

if(fp==NULL)

{

printf("\n打开%S失败! 按任意键结束.Open file %s fail!End With any key.\n",DataFile);

getch();

exit(1);

}

while(fread(&c_man[c_total],sizeof(candidate),1,fp)!=(int)NULL)

{

c_total++;

}

fclose(fp);

}

void read1()//读取用户信息

{

char DataFile[20]="用户.txt";

FILE * fp=NULL;

total=0;

fp=fopen(DataFile,"rb");//rb只读

if(fp==NULL)

{

printf("\n打开%S失败! 按任意键结束.Open file %s fail!End With any key.\n",DataFile); perror("Open file fail");

getch();

}

while(fread(&total_user[total],sizeof(candidate),1,fp)!=(int)NULL)

{

total++;

}

fclose(fp);

}

void addUser()//创建用户

{

FILE *fp=NULL;

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

user TempS;

intover_flag=0;

char c;

fp=fopen(DataFile,"rb");//读入原始数据, 用于检查输入是否有重复

if(fp==NULL)

{

printf("\n打开%S失败! 按任意键结束.Open file %s fail!End With any key.\n",DataFile); perror("Open file fail");

getch();

}

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

{

total++;

}

fclose(fp);

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

do

{

");

printf("\n请输入:"); printf(" *****************创建新用户*****************

printf("用户名:");scanf("%s",&TempS.name);

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

for(i=0;i

{

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

{

printf("该用户名已存在!\n");

over_flag=1;

break;

}

if (over_flag)

{

over_flag=0;

continue;

}

printf(" 密码:"); scanf("%s",&TempS.ps);

TempS.ps[7]='\0';

printf(" 权限:");scanf("%d",&TempS.power);

if(TempS.power!=1)

{

TempS.power=0;

}

TempS.sum=0;

total_user[total]=TempS;//将数据加入原始数据

total++;

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

{

printf("\n写入文件失败! 按任意键结束.write file is fail! End with any key\n",DataFile); perror("write file fail");

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("\n打开文件失败! 按任意键结束.Open file fail! End With any key.\n",DataFile); perror("Open file fail");

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

system("cls");

}

void scan()//显示候选人信息

{

read();

printf("候选人资料:\n");

printf("***************************************************************\n"); for(i=0;i

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

{

continue;

}

else

{

printf("号码:%-15ld",c_man[i].number);

printf("姓名:%-19s",c_man[i].name);

printf("简介:%s\n",c_man[i].intro);

}

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

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

getch();

}

void search() //查询候选人信息

{

char c;

long number;

int flag=0;

read();

do

{

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

scanf("%ld",&number);

for(i=0;i

{

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

{

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

}

void sort()//整理所有投票, 选举结果显示

{

inti,k,j,t=0,flot=0;

candidate c_man2[N]/*存放排序后的数据 */, temp;

read();

for(i=0;i

{

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

{

c_man2[t]=c_man[i];

t++;

}

else

{

flot=1;

}

continue;

}

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

*\n",c_man2[i].number,c_man2[i].name,c_man2[i].vote);

}

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

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

fflush(stdin); %-6d

}

void del()//删除候选人

{

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

inti,flag,j=0;

char DataFile[20]="候选人.txt",next;// DataFile存储候选人信息的文件名,next 为是否进行下一次投标操作的选项

candidate TempS; //零时存放候选人信息

FILE *fp;//定义一个指向文件的指针变量fp

begin: //和后面的goto begin对应

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

read();

printf("请输入您要删除的候选人的号码:");

scanf("%ld",&candidatenum);

for(i=0;i

{

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

{

printf("您所删除的候选人信息:\n号码:%ld 姓名:%s 简介:%s 票数:%s\n",c_man[i].number,c_man[i].name,c_man[i].intro,c_man[i].vote);

flag=1;

c_man[i].vote=0;

c_man[i].number=0;

strcpy(c_man[i].intro,"无");

strcpy(c_man[i].name,"无");

}

}

if(flag)

{

printf("删除成功\n");

fp=fopen(DataFile,"wb");

if(fp==NULL)//如果当前文件不存在,提示打开文件失败

{

printf("\n打开文件失败! 按任意键结束.Open file fail! End With any key.\n",DataFile); perror("Open file fail"); //同系统的错误一起输出

getch();//暂停,按任意键继续

exit(1);//返回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");// 显示删除后的情况

c_total--;

printf("候选人资料:\n"); // 在屏幕上显示文件内容

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

printf(" 号码 候选人 票数

while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)

{

if(TempS.number!=0)

printf("%5ld \t%4s

\n",TempS.number,TempS.name,TempS.vote);

else if(TempS.number==0)

j=1; \n"); \t%4d

continue;

}

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

fclose(fp);

printf("\n继续吗? 是(Y)/否(N): ");

fflush(stdin);//清空输入缓冲区

next=getchar();

putchar('\n');

if(next=='y'||next=='Y')goto begin;

}

void main()

{

FILE * fp=NULL;

char DataFile[20]="用户.txt";

char relogin;//是否重新登录的标志

int success=0,i;

user input_user,temp_user;

printf("班委投票系统 制作者:思 奥 \n");

printf("管理员账号:admin 密码:123\n"); printf("\n"); printf("*************************************************************\n");

printf("********************欢迎登录班委投票系统*********************\n");

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

printf("* 请输入用户名: *");

scanf("%s",input_user.name);

printf("* 请输入密码: *");

scanf("%s",input_user.ps);

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

fflush(stdin);

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

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

{

total++;

}

if(fp==NULL)

{

printf("\n打开文件失败! 按任意键结束.Open file fail! End With any key.\n",DataFile); perror("Open file fail");

getch();

exit(1);

}

system("cls");

if(strcmp(input_user.name,"admin")==0 && (strcmp(input_user.ps,"123")==0))//校验用户名和密码, 若用户名和密码分别为1, 是管理员, 并调用管理员界面

{ printf("%d",total);

printf("\nlogin successful!");

success=1;

printf("\n\n 您是管理员! 欢迎您登录系统! 正在进入管理员界面...\n");

main_a();

} else

{

for(i=0;i

if(strcmp(input_user.name,total_user[i].name)==0&&(strcmp(input_user.ps,total_user[i].ps)==0))

{

printf("\nlogin successful!");

success=1;

printf("\n\n 您是投票者! 欢迎您登录系统! 正在进入投票者

界面...\n");

main_v();

}

} } fclose(fp);

if(success==0)

{

fflush(stdin);

printf("\n用户名或密码错误!继续输入吗?是(Y)/否(N): "); fflush(stdin);

relogin=getchar();

if((relogin=='Y')||(relogin=='y'))

{

goto again;

}

else

{

printf("结束\n");

exit(0);

}

}

}


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn