2. 电子投票管理程序
2. 电子投票管理程序主要用结构体数组实现,用结构体表示每项记录,包含候选人数据为:编号、姓名、简历、票数。
其中“票数”由投票后统计得到。设计各个函数,分别实现以下功能:
(1)输入:输入候选人信息
(2)显示:显示所有候选人记录
(3)删除:完成业绩信息的删除;
(4)修改:允许对已经录入的数据重新进行编辑、修改;
(5)投票:投票功能实现,每次投票后,应有询问是否继续(y/n),若输入y则再投票,若输入n则回到菜单。
(6)统计:对所有候选人按票数进行排序显示,结果以图形方式显示,如下:
Peter |**********
Mike |*******************
Lincon |**************
(7)查询:给出指定候选的票数
(8)退出程序。
设计菜单,通过选择菜单调用以上各函数。能用动态内存分配及数据以文件形式存储者,可获得额外加分。
#include<stdio.h>
#include<string.h>
#define NULL 0
struct person
{
int num;
char name[20];
int count;
int age;
struct person *next;
}leader[3];
struct person shuru
{
int i;
printf("输入候选人姓名、序号、年龄、地址:\n");
for(i=0;i<3;i++)
{
scanf("%s,%d,%d,%s",leader[i].name,leader[i].num,leader[i].age,leader[i].place);
}
}
struct person shanchu
{
struct person *head;
struct person *p;
int num,gole=0;
struct person *p1,*p2,*p3=head;
printf("请输入你要删除的候选人序号:\n");
scanf("%d",& num);
while(p!=NULL)
{
p1=head;
p1=head;
while((p1->next!=NULL)&&(p1->num!=num))
{
p2=p1;
p1=p1->next;
}
if(p1->num==num)
{
printf("姓名\t\t序号\t年龄\t");
printf("%s\t%d\t%d\t",p1->name,p1->num,p1->age);
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
gole++;
}
else
{
printf("没有与该序号对应的候选人\n");
p3=p3->next;
}
}
if(gole!=0)
{
printf("共删除该序号%d个人",gole);
}
return head;
}
struct person xiugai
{
struct person *head
char name[20];
int num;
int gole=0;
int a;
struct person *p;
if(p==NULL)
printf("分配内存失败\n");
menu(head);
if(head==NULL)
{
do
{
printf("请选择要修改的:1、姓名 2、序号 3、年龄 4、返回\n");
scanf("%d",&a);
p=head;
if(a==1)
{
printf("请输入要改的候选人姓名:\n");
gets(name);
while(p!=NULL)
{
if(strcmp(name,p->name)==0)
{
p=change(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("找不到要修改的人名\n");
}
else if(a==2)
{
printf("请输入要改的候选人序号:\n");
scanf("%d",&num);
while(p!=NULL)
{
if(num==p->num)
{
p=change(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("找不到要修改的序号\n");
}
else if(a==3)
{
int age;
printf("请输入要改的候选人年龄:\n");
scanf("%d",&age);
while(p!=NULL)
{
if(age==p->age)
{
p=change(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("找不到要修改的年龄\n");
}
}while(a!=1&&a!=2&&a!=3&&a!=4);
}
else
{
printf("暂无信息,请先存入此信息");
}
menu (head);
}
struct person xianshi
{
struct person *top
int i;
struct person *p=top;
while(p!=NULL)
{
printf("姓名\t\t序号\t年龄\t");
printf("%s\t%d\t%d\t",p->name,p->num,p->age);
for(i=0;i<3;i++)
{
printf("%-20s,%-10d,%-3d",leader[i].name,leader[i].num,leader[i].age);
}
p=p->next;
}
menu(top);
}
struct person toupiao
{
int i,j;
char c[2];
char vote_name[20];
printf("投票人数为10");
do
{
for(i=1;i<=10;i++)
{
scanf("%s",vote_name);
for(j=0;j<3;j++)
if(strcmp(vote_name,leader[j].name)==0)
{
leader[j].count=leader[j].count+1;
printf("继续输入请按Y或y:");
scanf("%s",c);
}
}
}while(!(strcmp(c,"Y"))||!(strcmp(c,"y")));
do
{
printf("结束请按N或n:");
menu(p);
}while(!(strcmp(c,"N"))||!(strcmp(c,"n")));
}
struct person chazhao
{
int i,gole=0;
char na[20];
printf("输入要查找的候选人姓名:\n");
scanf("%s",na[20]);
for(i=0;i<3;i++)
{
if(strcmp(leader[i].name,na)==0)
{
printf("%d",leader[i].count);
gole++;
break;
}
}
if(gole==0)
{
printf("查找不到输入姓名的人\n");
menu(p);
}
}
struct person tongji
{
int i,j;
for(i=0;i<3;i++)
{
printf("%-20s",leader[i].name);
for(j=0;j<=leader[i].count;j++)
printf("*");
printf("\n");
}
}
void main()
{
struct person *head=NULL;
int a;
printf("\n\n\n --目录--\n");
printf(" 1:添加候选人信息\n");
printf(" 2:删除候选人信息\n");
printf(" 3:修改候选人信息\n");
printf(" 4:显示候选人信息\n");
printf(" 5:投票\n");
printf(" 6:统计\n");
printf(" 7:查询\n");
printf(" 8:退出\n");
printf(" 请选择:");
scanf("%d",&a);
if(a==1)
shuru();
else if(a==2)
shanchu();
else if(a==3)
xiugai();
else if(a==4)
xianshi();
else if(a==5)
toupiao();
else if(a==6)
tongji();
else if(a==7)
chazhao();
else
printf("输入错误\n");
}
最后运行不出来,问题怎么解决啊