投票系统(C语言)

设计一个投票系统
首先定义一个选民结构体,结构体内包选民名字和获得票数

struct  XuanMin
{
	char name[32];
	int tickets;
};

对于选民首先要初始化信息,票数清零,确定选民名字

//初始化选民信息
	for(i=0;i<len;i++){
		xm[i].tickets = 0;
		printf("请输入第%d个选民的名字\n",i+1);
		scanf("%s",xm[i].name);
	}


然后是唱票环节,这里的mark用来确定投出去的票是否为有效票。
//唱票环节
	for(i=0;i<5;i++){
		mark=0;
		printf("请输入你投给谁:\n");
		memset(tmpName,'\0',sizeof(tmpName));
		scanf("%s",tmpName);
		for(j=0;j<len;j++){
			if(strcmp(tmpName,xm[j].name) == 0){
				xm[j].tickets++;
				mark = 1;
			}
		}
		if(mark == 0){
			printf("查无此人!!!!!\n");
			feipiao++;
		}
	}

最后是公布环节,用一个Max结构体来承接选票数最高的人的结构体

//公布
	for(i=0;i<len;i++){
		printf("名字:%s, 票数:%d\n",xm[i].name,xm[i].tickets);
	}
	Max = xm[0];
	for(i=0;i<3;i++){
		if(Max.tickets < xm[i].tickets)
			Max = xm[i];
	}
	printf("**************************\n");
	printf("%s以%d票当选!!!!!!!\n弃权票:%d\n",Max.name,Max.tickets,feipiao);


完整代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct  XuanMin
{
	char name[32];
	int tickets;
};
int main()
{
	struct XuanMin xm[3];
	struct XuanMin Max;
	int i,j;
	int mark;
	int feipiao=0;
	int len = sizeof(xm)/sizeof(xm[0]);
	char tmpName[32];


	//初始化选民信息
	for(i=0;i<len;i++){
		xm[i].tickets = 0;
		printf("请输入第%d个选民的名字\n",i+1);
		scanf("%s",xm[i].name);
	}
	//唱票环节
	for(i=0;i<5;i++){\
		mark=0;
		printf("请输入你投给谁:\n");
		memset(tmpName,'\0',sizeof(tmpName));
		scanf("%s",tmpName);
		for(j=0;j<len;j++){
			if(strcmp(tmpName,xm[j].name) == 0){
				xm[j].tickets++;
				mark = 1;
			}
		}
		if(mark == 0){
			printf("查无此人!!!!!\n");
			feipiao++;
		}
	}
	//公布
	for(i=0;i<len;i++){
		printf("名字:%s, 票数:%d\n",xm[i].name,xm[i].tickets);
	}
	Max = xm[0];
	for(i=0;i<3;i++){
		if(Max.tickets < xm[i].tickets)
			Max = xm[i];
	}
	printf("**************************\n");
	printf("%s以%d票当选!!!!!!!\n弃权票:%d\n",Max.name,Max.tickets,feipiao);
	return 0;
	}


运行结果:

在这里插入图片描述


代码优化(结构体指针,函数封装)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct  XuanMin
{
	char name[32];
	int tickets;
};

struct XuanMin* initXms(struct XuanMin *p,int *np)
{
	int i;
	if(p == NULL){
		printf("请输入有几个人参选:\n");
		scanf("%d",np);
		p = (struct XuanMin*)malloc(*np*sizeof(struct XuanMin));
	}
	for(i=0;i<*np;i++){
		p->tickets = 0;
		printf("请输入第%d个选民的名字\n",i+1 );
		scanf("%s",p->name);
		p++;
	}
	printf("****************************************\n");
	return p-*np;
}
void printXms(struct XuanMin *p,int len)
{
	int i;
	for(i=0;i<len;i++){
		printf("名字:%s, 票数:%d\n",p->name,p->tickets);
		p++;
	}
}
int doVot(struct XuanMin* p,int len)
{
	int i,j;
	int feipiao = 0;
	int mark;
	char tmpName[32];
	struct XuanMin *pbak = p;
	for(i=0;i<5;i++){
		mark=0;
		printf("请输入你投给谁:\n");
		memset(tmpName,'\0',sizeof(tmpName));
		scanf("%s",tmpName);
		p = pbak;
		for(j=0;j<len;j++){
			if(strcmp(tmpName,p->name) == 0){
				p->tickets++;
				mark = 1;
			}
			p++;
		}
		if(mark == 0){
			printf("查无此人!!!!!\n");
			feipiao++;
		}
	}
	printf("****************************************\n");
	return feipiao;
}
struct XuanMin* getMax(struct XuanMin *p,int len)
{
	struct XuanMin *Max;
	int i;
	Max = p;

	for(i=0;i<len;i++){
		if(Max->tickets < p->tickets){
			Max = p;
		}
		p++;
	}
	return Max;
}
int main()
{
	struct XuanMin *xm = NULL;
	struct XuanMin *Max;
	int total = 0;
	int feipiao;
	xm = initXms(xm,&total);
	feipiao = doVot(xm,total);
	printXms(xm,total);

	Max = getMax(xm,total);
	printf("%s以%d票当选!!!!!!!\n弃权票:%d\n",Max->name,Max->tickets,feipiao);
	return 0;
}


运行结果

在这里插入图片描述


版权声明:本文为m0_46269286原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。