查找候选人 函数里 为什么只是一直显示没有您要查询的候选人 删除和修改 不用链表 甚至不用指针的话 能不能写 求教求手把手教 感激不尽。
#include
#include
#include
#include
#define DATA candi[i].num,candi[i].name,&candi[i].age,candi[i].unit,&candi[i].count
#define DATAPRINT candi[i].num,candi[i].name,candi[i].age,candi[i].unit,candi[i].count
void write_data();//输入候选人信息
void read_data();//浏览候选人信息
void vote();//投票
void search();//查找候选人
void delete_modify();//修改、删除候选人信息
void insert_data();//新增候选人信息
void record_order();//候选人数据排序候选人数据排序
void count_up();//统计
void count_up_age();//年龄统计
void count_up_unit();//工作单位统计
void menu();//菜单
void reset();//格式化投票系统
struct candidate
{
char num[4];
char name[20];
int age;
int count;
char unit[20];
}candi[50];
FILE *fp;
int pflag;
int voteflag;
char select;
char savefile[] = "save.dat";
char filename[] = "data.dat";
int main()
{
if((fp=fopen(savefile,"rb"))==NULL)
{
fp=fopen(savefile,"wb");
pflag=0;
fwrite(&pflag,4,1,fp);
voteflag=0;
fwrite(&voteflag,4,1,fp);
fclose(fp);
}
fread(&pflag,4,1,fp);
fread(&voteflag,4,1,fp);
fclose(fp);
menu();
return 0;
}
void menu()
{
printf(" --------------------------选民投票管理系统------------------- \n");
printf("*********************************************************************************************************\n");
printf("\t[** 1 录入候选人信息 **]\n");
printf("\t[** 2 浏览候选人信息 **]\n");
printf("\t[** 3 进行正式投票 **]\n");
printf("\t[** 4 查询候选人数据 **]\n");
printf("\t[** 5 修改、删除候选人信息 **]\n");
printf("\t[** 6 新增候选人信息 **]\n");
printf("\t[** 7 候选人数据排序 **]\n");
printf("\t[** 8 统计候选人信息 **]\n");
printf("\t[** 9 重置所有数据(谨慎操作) **]\n");
printf("\t[** 0 退出系统 **]\n");
while((select=getch())!=0)
{
switch(select)
{
case '1':write_data();break;
case '2':read_data();break;
case '3':vote();break;
case '4':search();break;
case '5':delete_modify();break;
case '6':insert_data();break;
case '7':record_order();break;
case '8':count_up();break;
case '9':reset();break;
case '0':
{
fopen(savefile,"wb");
fwrite(&pflag,4,1,fp);
fwrite(&voteflag,4,1,fp);
fclose(fp);
exit(0);
}
break;
default:printf(" 指令错误请重新输入\n");break;
}
}
}
void vote()
{
int i;
int COUT=0;
int COUTMAX=0;
char NUM[4];
int FIND=0;
if(!voteflag)
{
fp=fopen(filename,"rb");
for(i=0;i
fread(&candi[i],sizeof(struct candidate),1,fp);
fclose(fp);
system("cls");
printf(" 投 票 系 统\n");
printf(" 是否要开始正式投票(投票结束后无法再次进行投票)\n");
printf(" Y 开始投票 N 返回菜单\n");
while((select=getch())!=0)
{
switch(select)
{
case 'y':
{
system("cls");
printf(" 现在开始正式投票\n");
getch();
printf("请输入选民数量\n");
scanf("%d",&COUTMAX);
while(COUT {
system("cls");
printf(" 请第%d位选民开始投票\n",COUT+1);
printf(" 输入你要投的候选人编号\n");
scanf("%s",NUM);
for(i=0;i {
if(strcmp(NUM,candi[i].num)==0)
{
printf("-----------------------------------------------------------------------------------\n");
printf(" 找到候选人\n 姓名:%s 编号:%s \n",candi[i].name,candi[i].num);
FIND=1;
printf(" 确认投票按Y 弃票按N\n");
while((select=getch())!='\n')
{
switch(select)
{
case 'y':
{
candi[i].count++;
getch();
printf("投票成功,候选人%s当前票数为%d\n",candi[i].name,candi[i].count);
getch();
}break;
case 'n':printf(" 用户弃票\n");break;
default:printf("无效操作\n");break;
}
if(select=='y'||select=='n')
break;
}
}
}
if(!FIND)
{
printf(" 未找到候选人信息\n");
printf(" 请重新输入候选人信息\n");
getch();
continue;
}
COUT++;
}
getch();
printf(" 正式投票结束,请在主选单处查询投票结果\n");
getch();
voteflag=1;
fp=fopen(filename,"wb");
for(i=0;i fwrite(&candi[i],sizeof(struct candidate),1,fp);
fclose(fp);
fopen(savefile,"wb");
fwrite(&pflag,4,1,fp);
fwrite(&voteflag,4,1,fp);
fclose(fp);
system("cls");
menu();
}break;
case 'n':
{
system("cls");
menu();
}break;
default:printf(" 请输入正确的选项\n");break;
}
}
}
else
{
system("cls");
printf(" 正式投票已经进行过了,请重置所有数据后再进行操作\n");
printf(" 任意键返回主菜单\n");
getch();
system("cls");
menu();
}
}
void write_data()
{
int n,i;
system("cls");
printf(" 若已有候选人信息,此操作会清除所有信息是否继续\n");
printf(" 继续请按Y 回主菜单按N\n");
while((select=getch())!='\n')
{
switch(select)
{
case 'y':
{
pflag=0;
system("cls");
fp=fopen(filename,"wb");
printf(" 输入要添加的候选人个数:\n");
scanf("%d",&n);
system("cls");
printf("\t\t\t\t\t编号****姓名****年龄****工作单位\n");
for(i=0;i {
printf("\t\t\t\t\t");
scanf("%s\t%s\t%d\t%s",candi[i].num,candi[i].name,&candi[i].age,candi[i].unit);
candi[i].count=0;
pflag++;
}
for(i=0;i fwrite(&candi[i],sizeof(struct candidate),1,fp);
fclose(fp);
fp=fopen(savefile,"wb");
fwrite(&pflag,4,1,fp);
fwrite(&voteflag,4,1,fp);
fclose(fp);
printf(" 候选人信息保存成功,返回主菜单\n");
getch();
system("cls");
menu();
}break;
case 'n':
{
system("cls");
menu();
}break;
default:printf(" 请选择正确的选项\n");break;
}
}
}
void read_data()
{
int i;
system("cls");
if(pflag==0)
{
printf(" 无候选人数据,请输入候选人数据\n");
printf(" 任意键返回主菜单\n");
getch();
system("cls");
menu();
}
if((fp=fopen(filename,"rb"))==NULL)
{
printf(" 文件打开失败,是否重试\n");
while(select=getch()!=0)
{
switch(select)
{
case 'y':read_data(); break;
case 'n':exit(0);break;
default:printf(" 请输入正确指令\n");break;
}
}
}
printf(" 以下是候选人信息\n");
printf(" 编号****姓名****年龄****工作单位********票数\n");
for(i=0;i
fread(&candi[i],sizeof(struct candidate),1,fp);
for(i=0;i printf(" %s\t%s\t%d\t%s\t\t%d\n",DATAPRINT);
fclose(fp);
printf(" 按任意键返回主菜单\n");
getch();
system("cls");
menu();
}
void record_order()
{
int top,seek,i;
struct candidate *temp;
struct candidate *cp[50];
struct candidate candi[50];
fopen(filename,"rb");
for(i=0;i
{
fread(&candi[i],sizeof(struct candidate),1,fp);
cp[i]=&candi[i];
}
fclose(fp);
system("cls");
printf(" 请选择排序方式\n");
printf(" 1 按姓名排序 2 按编号排序\n");
while((select=getch())!='\n')
{
switch(select)
{
case '1':
{
printf(" 请确认是否按照姓名排序(按n返回主菜单)\n");
printf(" y 确定 n 取消\n");
while((select=getch())!='\n')
{
switch(select)
{
case 'y':
{
for(top=0;top for(seek=top+1;seek if(strcmp(cp[top]->name,cp[seek]->name)>0)
{
temp=cp[top];
cp[top]=cp[seek];
cp[seek]=temp;
}
fp=fopen(filename,"wb");
for(i=0;i fwrite(cp[i],sizeof(struct candidate),1,fp);
fclose(fp);
printf(" 排序完成,返回主菜单\n");
getch();
system("cls");
menu();
}
break;
case 'n':
{
system("cls");
menu();
}
break;
default:printf(" 指令错误请重新输入\n");break;
}
}
}
break;
case '2':
{
printf(" 请确认是否按照编号排序(按n返回主菜单)\n");
printf(" y 确定 n 取消\n");
while((select=getch())!='\n')
{
switch(select)
{
case 'y':
{
for(top=0;top for(seek=top+1;seek if(strcmp(cp[top]->num,cp[seek]->num)>0)
{
temp=cp[top];
cp[top]=cp[seek];
cp[seek]=temp;
}
fp=fopen(filename,"wb");
for(i=0;i fwrite(cp[i],sizeof(struct candidate),1,fp);
fclose(fp);
printf(" 排序完成,返回主菜单\n");
getch();
system("cls");
menu();
}
break;
case 'n':
{
system("cls");
menu();
}
break;
default:printf(" 指令错误请重新输入\n");break;
}
}
}break;
default:printf(" 请输入正确指令\n");break;
}
}
printf(" 无候选人信息\n请先写入候选人信息再进行排序操作\n");
system("cls");
menu();
}
void count_up()
{
system("cls");
printf(" 统 计\n");
printf(" 选择统计方式\n");
printf(" 1 单位统计 2 年龄统计\n");
while((select=getch())!='\n')
{
switch(select)
{
case '1':count_up_unit();break;
case '2':count_up_age();break;
}
}
}
void count_up_age()
{
int Pcount1=0,Pcount2=0,Pcount3=0,Pcount4=0,Pcount5=0,Pcount6=0;
int i;
fp=fopen(filename,"rb");
for(i=0;i
{
fread(&candi[i],sizeof(struct candidate),1,fp);
if(candi[i].age>10&&candi[i].age<=20) Pcount1++;
if(candi[i].age>20&&candi[i].age<=30) Pcount2++;
if(candi[i].age>30&&candi[i].age<=40) Pcount3++;
if(candi[i].age>40&&candi[i].age<=50) Pcount4++;
if(candi[i].age>50&&candi[i].age<=60) Pcount5++;
if(candi[i].age>60&&candi[i].age<=70) Pcount6++;
}
system("cls");
printf(" 10至20岁的候选人数为%d个\n",Pcount1);
printf(" 20至30岁的候选人数为%d个\n",Pcount2);
printf(" 30至40岁的候选人数为%d个\n",Pcount3);
printf(" 40至50岁的候选人数为%d个\n",Pcount4);
printf(" 50至60岁的候选人数为%d个\n",Pcount5);
printf(" 60至70岁的候选人数为%d个\n",Pcount6);
getch();
printf(" 再按任意键返回主菜单\n");
getch();
system("cls");
menu();
}
void count_up_unit()
{
int i,n,Unitcount=0;
int UC[10];
int UNIF=0;
char UNIT[10][20];
fp=fopen(filename,"rb");
for(i=0;i
fread(&candi[i],sizeof(struct candidate),1,fp);
for(i=0;i {
for(n=0;n {
if(strcmp(candi[i].unit,UNIT[n])==0)
{
UNIF=0;
}
else
{
UNIF=1;
break;
}
}
if(UNIF)
{
strcpy(UNIT[Unitcount],candi[i].unit);
Unitcount++;
}
}
for(i=0;i {
for(n=0;n {
if(strcmp(candi[i].unit,UNIT[n])==0)
UC[n]++;
}
}
for(n=0;n printf(" 单位:%s,候选人数:%d\n",UNIT[n],UC[n]);
getch();
printf(" 再按任意键返回主菜单\n");
getch();
system("cls");
menu();
}
void search()
{
int n;
char c;
char number[4];
int flag=0;
for(int i=0;i
fread(&candi[i],sizeof(struct candidate),1,fp);
do
{
printf("请输入要查询的候选人号码: ");
scanf("%s",&number);
for(n=0;n<99;n++)
{
if(strcmp( number,candi[i].num)==0)
{
printf("\t 您要查询的候选人信息如下: ");
printf("\t号码%s\n",candi[i].num);
printf("\t姓名%s\n",candi[i].name);
printf("\t年龄%d\n",candi[i].age);
printf("\t票数%d\n,candi[i].unit");
flag=1;break;
}
}
if(flag)
{
flag=0;
}
else
{
printf("\t没有您要查询的候选人\n");
}
printf("\t要继续查询候选人吗?是(y)/否(n)");
getchar();
c=getchar();
}while((c=='y')||(c=='Y'));
}
void delete_modify()
{
}
void insert_data()
{
int i,n;
if(!voteflag)
{
fp=fopen(filename,"ab");
system("cls");
printf(" 请输入要添加的候选人信息个数\n");
scanf("%d",&n);
system("cls");
printf("\t\t\t\t\t编号****姓名****年龄****工作单位\n");
for(i=0;i {
printf("\t\t\t\t\t");
scanf("%s\t%s\t%d\t%s",candi[i].num,candi[i].name,&candi[i].age,candi[i].unit);
candi[i].count=0;
pflag++;
}
for(i=0;i fwrite(&candi[i],sizeof(struct candidate),1,fp);
fclose(fp);
fp=fopen(savefile,"wb");
fwrite(&pflag,4,1,fp);
fwrite(&voteflag,4,1,fp);
fclose(fp);
printf(" 候选人信息保存成功,返回主菜单\n");
getch();
system("cls");
menu();
}
else
{
printf(" 投票已经进行过了,无法再新增候选人数据\n");
printf(" 现在按任意键返回主菜单\n");
getch();
system("cls");
menu();
}
}
void reset()
{
system("cls");
fp=fopen(filename,"wb");
fclose(fp);
fp=fopen(savefile,"wb");
pflag=0;
fwrite(&pflag,4,1,fp);
voteflag=0;
fwrite(&voteflag,4,1,fp);
fclose(fp);
getch();
printf(" 数据格式化完成,返回主菜单\n");
getch();
system("cls");
menu();
}