#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct XuanMin
{
char Name[32];
int tickets;
};
//初始化选民信息
void initXm(struct XuanMin **p,int *pn)
{
if((*p) == NULL){
printf("请问有几位候选人?");
scanf("%d",pn);
(*p) = (struct XuanMin*)malloc((*pn)*sizeof(struct XuanMin));
}
}
//获得选民信息
void getdataXm(struct XuanMin *p,int n)
{
int i;
for(i=0;i<n;i++){
p->tickets = 0;
printf("请输入第%d个选民的名字:",i+1);
scanf("%s",p->Name);
p++;
}
}
//投票
void dovote(struct XuanMin *p,int total,int *valid,int *invalid)
{
int i,j,n;
int mark;
char TempName[32];
struct XuanMin *pback = p;
printf("请输入有多少人进行投票:");
scanf("%d",&n);
for(i=0;i<n;i++){
memset(TempName,'\0',sizeof(TempName));
printf("请输入你要投票的名字:");
scanf("%s",TempName);
mark = 0;
p = pback;
for(j=0;j<total;j++){
if(strcmp(TempName,p->Name) == 0){
p->tickets++;
mark = 1;
*valid+=1;
}
p++;
}
if(mark == 0){
printf("查无此人,投票无效!!!\n");
*invalid+=1;
}
}
}
//唱票
void printvote(struct XuanMin *p,int n)
{
int i;
for(i=0;i<n;i++){
printf("选民:%s,选票:%d\n",p->Name,p->tickets);
p++;
}
}
//比较
void Cmptickets(struct XuanMin **Max,struct XuanMin *p,int n)
{
int i;
(*Max) = p;
for(i=0;i<n;i++){
if(p->tickets > (*Max)->tickets){
(*Max) = p;
}
p++;
}
}
int main()
{
struct XuanMin *pxm = NULL;
struct XuanMin *Max = NULL;
int validated_tickets = 0;
int invalidated_tickets = 0;
int total = 0;
initXm(&pxm,&total);
getdataXm(pxm,total);
dovote(pxm,total,&validated_tickets,&invalidated_tickets);
printvote(pxm,total);
Cmptickets(&Max,pxm,total);
printf("选票最多的选民是:%s\n",Max->Name);
printf("本次选举中,有效票数为:%d,无效票数为:%d\n",
validated_tickets,invalidated_tickets);
return 0;
}