投票程序(作业)

该程序设计了一个选举系统,用于根据特定的积分规则计算三个候选人(X、Y、Z)的得分。投票者可以自定义编号顺序,若有重复编号的票视为无效。程序通过结构体存储投票数据,统计每个候选人的得分,并确定最高分者为年度先进工作者。用户可以选择输入投票信息、查看分数或结果,或退出系统。
摘要由CSDN通过智能技术生成

[说明及要求]

设有代码号为X、Y、Z的3个候选人竞选年度先进工作者,积分方法如下:投票者在选票上对他们的编号的填写顺序分极为5.3.2时,若投票人数为4,输入投票内容为(1) XYZ; (2) ZXY; (3) ZYX ;(4) YZX ;候选人等分为X:12 ; Y:13 ; Z:15 ,则Z为年度先进工作者。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输入哪位是年度先进工作者。要求投票者在选票上对他们的编号的填写顺序可自行设定,同一张票上写有两个相同代号视为无效票。

[提示]

(1) 定义结构体成员表示投票及得分。

(2) 若采用二维数组,可考虑行方向对应一张投票,列方向对应各候选人得分。

(3) 编写main函数进行演示,可考虑函数调用。

#include<stdio.h>

#include<stdlib.h>

#define PEOPLE 3

#pragma warning(disable : 4996)

struct vote

{

char a1;

char a2;

char a3;

}voteman[20];

struct abc

{

char name;

int ticket;

}number[PEOPLE];

void select();

void grade(struct vote p[], struct abc number[], int n)

{

int i;

number[0].ticket = 0;

number[1].ticket = 0;

number[2].ticket = 0;

for (i = 0; i < n; i++)

{

if ((p[i].a1 == p[i].a2) || (p[i].a1 == p[i].a3) || (p[i].a2 == p[i].a3))

{

printf("同一张票上写有两个相同代号视为无效票!!!\n");

continue;

}

else

{

switch (p[i].a1)

{

case 'X':

{

number[0].ticket += 5;

if (p[i].a2 == 'Y')

{

number[1].ticket += 3;

number[2].ticket += 2;

}

else

{

number[1].ticket += 2;

number[2].ticket += 3;

}

break;

}

case'Y':

{

number[0].ticket += 3;

if (p[i].a2 == 'X')

{

number[1].ticket += 5;

number[2].ticket += 2;

}

else

{

number[1].ticket += 2;

number[2].ticket += 5;

}

break;

}

case'Z':

{

number[0].ticket += 2;

if (p[i].a2 == 'X')

{

number[1].ticket += 5;

number[2].ticket += 3;

}

else

{

number[1].ticket += 3;

number[2].ticket += 5;

}

break;

}

}

}

}

select();

}

void iresult(struct abc number[])

{

if (number[0].ticket == 0 && number[1].ticket == 0 && number[2].ticket == 0)

{

printf("请先投票!!!\n");

select();

}

else

{

if (number[0].ticket >= number[1].ticket && number[0].ticket >= number[2].ticket)

{

printf("X的得分最高,当选年度先进工作者!\n");

}

else if (number[1].ticket >= number[0].ticket && number[1].ticket >= number[2].ticket)

{

printf("Y的得分最高,当选年度先进工作者!\n");

}

else

{

printf("Z的得分最高,当选年度先进工作者!\n");

}

select();

}

}

int input(struct vote voteman[])

{

int i, people;

printf("请输入投票人数:");

scanf("%d", &people);

printf("请输入投票结果:\n");

for (i = 0; i < people; i++)

{

getchar();

printf("(%d)", i + 1);

scanf("%c%c%c", &voteman[i].a1, &voteman[i].a2, &voteman[i].a3);

}

grade(voteman, number, people);

}

void voteout(struct abc number[], int n)

{

int i;

if (number[0].ticket == 0 && number[1].ticket == 0 && number[2].ticket == 0)

{

printf("请先投票!!!\n");

select();

}

else

{

for (i = 0; i < PEOPLE; i++)

{

switch (i)

{

case 0:

printf("X候选人的票数和为:%d\n", number[i].ticket);

break;

case 1:

printf("Y候选人的票数和为:%d\n", number[i].ticket);

break;

case 2:

printf("X候选人的票数和为:%d\n", number[i].ticket);

}

}

select();

}

}

void select()

{

int n;

printf("请输入选择:");

scanf("%d", &n);

switch (n)

{

case 1:

input(voteman);

break;

case 2:

voteout(number, PEOPLE);

break;

case 3:

iresult(number);

break;

case 4:

printf("再见!\n");

break;

default:

printf("Error!!!\n");

select();

}

}

void mainmenu()

{

printf("\n\n\n\n");

printf("\t\t|-----------------------------------------|\n");

printf("\t\t| |\n");

printf("\t\t| ====================== |\n");

printf("\t\t| 欢迎光临投票系统 |\n");

printf("\t\t| ====================== |\n");

printf("\t\t| |\n");

printf("\t\t| 1.输入选票人数及信息 |\n");

printf("\t\t| 2.查看分数 |\n");

printf("\t\t| 3.查看结果 |\n");

printf("\t\t| 4.退出系统 |\n");

printf("\t\t|-----------------------------------------|\n");

select();

}

int main()

{

mainmenu();

return 0;

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值