1、c程序班委投票选举系统要先在文件夹中新建名字为“候选人”的文本文档且里面不要有任何内容。此程序还是有一部分漏洞的,切勿直接使用!/* Note:Your choice is C IDE */#include#include#include#include /通过按键盘产生的对应操作getch();#define closegr closegraph#define N 30/最多候选人数void main_a(); /管理员界面void main_v(); /投票者者界面void addcandidate(); / 创建候选人void addUser();/创建投票者(用户)void searc
2、h(); /查询候选人信息void scan();/浏览候选人信息void vote(); /投票者投票void read();/读取候选人信息void save();/存储候选人信息void sort();/整理所有投票void del();/删除候选人 从文本写入数组中读取然后置为空在传回文本void read1();/读取用户信息int total=0,c_total=0;/内存中候选人数int i=0;typedef struct candidate/候选人数据结构体 long number;/候选人编号 char name20;/候选人姓名 char intro400;/候选人简介
3、int vote;/候选人得票数candidate; typedef struct user/投票者数据结构体 char name20;/投票者姓名 char ps8;/对应密码 int power;/权限 int sum;/投了几次票user;candidate c_manN;user total_userN;void main_v()/投票者者界面 int key; do printf(n*n); printf(*欢迎进入班委投票界面*n); printf(*n); printf(* 1.浏览所有候选人 2.查询候选人信息 *n); printf(* 3.投票 4.退出 *n); scan
4、f(%d,&key); switch(key) case 1:scan();break; case 2:search();break; case 3:vote();break; case 4:system(cls);break; default:break; while(key!=4);void vote() /投票者投票 long candidatenum;/定义进行操作时的临时结构体变量 int over_flag=0,tf=0; int i,flag,j,k,m=0; char DataFile20=候选人.txt,next;/ DataFile存储候选人信息的文件名,next为是否进行
5、下一次投标操作的选项 char DataFile120=用户.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+); /读写用户信息 i
6、f(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;jtotal;j+) if(strcmp(total_userj.name,TempS2.name)=0 & strcmp(total_userj.ps,TempS2.ps)=0) /如果输入的名字和内存的一样 k=j; over
7、_flag=1; break; break; if(over_flag) m=0; else printf(此用户不存在或密码错误.按任意键返回.); getch(); over_flag=0; main_v(); if(total_userk.sum) printf(此用户已经投过票了!); getch(); main_v(); else /如果票数=0说明有这个用户只投了一次否则 flag=0;/flag用来标志是否找对应编号,即投票是否成功 printf(请输入您要投票的候选人的号码:); scanf(%ld,&candidatenum); printf(您所投票的候选人号码是:%ldn
8、,candidatenum); for(i=0;ic_total;i+) if(c_mani.number=candidatenum) flag=1; c_mani.vote+; total_userk.sum+; if(flag) printf(投票成功n); total_userk.sum+; fwrite(&total_userk,sizeof(user),1,fp1); fclose(fp1); fp=fopen(DataFile,wb); if(fp=NULL)/如果当前文件不存在,提示打开文件失败 printf(n打开文件失败!按任意键结束.Open file fail! End
9、With any key.n,DataFile); perror(Open file fail); /同系统的错误一起输出 getch();/暂停,按任意键继续 exit(1);/返回1给程序 for(i=0;ic_total;i+) fwrite(&c_mani,sizeof(candidate),1,fp);/用二进制将数据输出到文件 fclose(fp); else printf(投票失败!您要投票的号码不存在n); printf(按任意键返回首页! n); getch(); return; fp=fopen(DataFile,rb);/ 显示投票后的情况 if(fp=NULL) pri
10、ntf(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 t%d n,TempS.number,TempS.name,TempS.vote); fclose
11、(fp); printf(n继续吗?是(Y)/否(N): ); fflush(stdin);/清空输入缓冲区 next=getchar(); putchar(n); if(next=y|next=Y)goto begin; m=0; system(cls);void main_a()/管理员界面 int key; do printf(nn*n); printf(*欢迎进入班委投票界面*n); printf(*n); printf(* 1.创建新候选人 2.创建新用户 *n); printf(* 3.查询候选人信息 4.显示所有候选人 *n); printf(* 5.选举结果显示 6.投票界面
12、*n); printf(* 7.删除候选人 0.退出 *n); 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; case 6:system(cls);printf(nn 您是投票者!欢迎您登录系统!正在进入投票者界面.n); main_v(); break;
13、 case 7:del();break; case 0:break; default:break; while(key!=0);void addcandidate()/创建候选人 char DataFile20=候选人.txt; FILE * fp=NULL; char c; int over_flag=0; candidate TempS; read(); fp=fopen(DataFile,ab+);/ab+读写 do printf( *创建新候选人*n); printf(请输入:); printf(候选人号码:); scanf(%ld,&TempS.number); for(i=0;ic
14、_total;i+)/检查输入编号是否有重复 if(TempS.number=c_mani.number) printf(该号码已存在.); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 姓名:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;ic_total;i+) if(strcmp(TempS.name,c_mani.name)=0) printf(该姓名已存在!请再输入一次!按任意键继续.); getch(); over_flag=1; break; i
15、f (over_flag) over_flag=0; continue; 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(n写入文件失败!按任意键结束.write file is fail! End with any keyn,DataFile); perror(wr
16、ite file fail); 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 DataFile20=候选人.txt; FILE * fp=NULL; c_total=0; fp=fopen(DataFile,rb);/rb只读 if(fp=NULL) printf(n打开%S失败!按任意键结束.Ope
17、n 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 read1()/读取用户信息 char DataFile20=用户.txt; FILE * fp=NULL; total=0; fp=fopen(DataFile,rb);/rb只读 if(fp=NULL) printf(n打开%S失败!按任意键结束
18、.Open file %s fail!End With any key.n,DataFile); perror(Open file fail); getch(); exit(1); while(fread(&total_usertotal,sizeof(candidate),1,fp)!=(int)NULL) total+; fclose(fp);void addUser()/创建用户 FILE *fp=NULL; char DataFile20=用户.txt;/存储投票人信息的文件名 user TempS; int over_flag=0; char c; fp=fopen(DataFile
19、,rb);/读入原始数据,用于检查输入是否有重复 if(fp=NULL) printf(n打开%S失败!按任意键结束.Open 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+); do printf( *创建新用户* ); printf(n请输入:); printf(用户名
20、:);scanf(%s,&TempS.name); TempS.name19=0; for(i=0;itotal;i+)/检查输入姓名是否有重复 if(strcmp(TempS.name,total_useri.name)=0) printf(该用户名已存在!n); over_flag=1; break; if (over_flag) over_flag=0; continue; printf( 密码:); scanf(%s,&TempS.ps); TempS.ps7=0; printf( 权限:);scanf(%d,&TempS.power); if(TempS.power!=1) Temp
21、S.power=0; TempS.sum=0; total_usertotal=TempS;/将数据加入原始数据 total+; if(fwrite(&TempS,sizeof(user),1,fp)!=1) printf(n写入文件失败!按任意键结束.write file is fail! End with any keyn,DataFile); perror(write file fail); getch(); exit(1); printf(要继续创建新用户吗?是(Y)/否(N):); getchar(); c=getchar(); while(c=Y|c=y); fclose(fp);
22、 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姓名tt密码tt权限n); while(fread(&TempS,sizeof(user),1,fp)!=(int)NULL) /当文件里有内
23、容时打印 printf(n%stt%-8stt%dn,TempS.name,TempS.ps,TempS.power); fclose(fp); printf(*); printf(n按任意键返回首页!); getch(); system(cls);void scan()/显示候选人信息 read(); printf(候选人资料:n); printf(*n); for(i=0;ic_total;i+) if(c_mani.number=0) continue; else printf(号码:%-15ld,c_mani.number); printf(姓名:%-19s,c_mani.name);
24、 printf(简介:%sn,c_mani.intro); printf(*); printf(n按任意键返回首页!); getch();void search() /查询候选人信息 char c; long number; int flag=0; read(); do printf(nt请输入要查询的候选人号码:); scanf(%ld,&number); for(i=0;ic_total;i+) if(number=c_mani.number) printf(t您要查询的候选人信息如下:nn); printf(t号码:%ld n,c_mani.number); printf(t姓名:%s
25、n,c_mani.name); printf(t简介:%s n,c_mani.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()/整理所有投票,选举结果显示 int i,k,j,t=0,flot=0; candidate c_man2N/*存放排序后的数据 */, temp; read(); for(i=0;ic_total;i+) if(c_mani.number!=0) c_man2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1