某班从全班20人(学号1~20)中投票选举6位班委委员,每张选票内容包括:所选班委的学号,投票人学号。
基本要求用菜单选择并完成下述系统功能:
(1)输入全班的名单(姓名与学号),并可显示。
(2)选票输入:输入每张选票的投票人学号及所选班委的学号(可选6个,没有则键入空白)。
(3)输出得票前6位的当选班委名单
(4)输出6位班委名单全部选票与投票结果完全相符的投票人姓名。
(5)退出程序
#include <stdio.h>
#include <stdlib.h>
#define N 3 //定义人数
#define N2 2 //打印几个选举结果
struct student {
int xh;
//学号
char xm[10];
//姓名
int flag;
//已投票数
int flag_p;
//被投票数
int xp_xh[6];
//被选人学号
}
stu[N];
//函数功能:录入学生信息
void lr() {
int i;
for (i=0;i<N;i++) {
printf("学号:%d\n",i+1);
printf("请输入姓名:");
stu[i].xh=(i+1);
scanf("%s",&stu[i].xm);
stu[i].flag=0;
stu[i].flag_p=0;
stu[i].xp_xh[6]=0;
printf("\n");
system("cls");
}
printf("学号\t");
printf("姓名\t");
printf("票数\n");
for (i=0;i<N;i++) {
printf("%d\t",stu[i].xh);
printf("%s\t",stu[i].xm);
printf("%d\n",stu[i].flag_p);
}
}
//函数功能:投票,对数据进行操作 ,输出结果
void tp(int tpr,int tp) {
int q=0;
if (stu[tpr-1].flag<6) {
if (tpr>N || tpr<0) {
printf("输入有误!\n");
system("pause");
} else {
q = stu[tpr-1].flag;
stu[tpr-1].xp_xh[q]=(tp-1);
stu[tpr-1].flag++;
stu[tp-1].flag_p++;
}
} else {
printf("您已经投了6票!");
system("pause");
return ;
}
}
int Comp(const void *p1,const void *p2) {
return ((struct student *)p2)->flag_p - ((struct student *)p1)->flag_p;
//降序
//return ((student *)p1)->flag_p - ((student *)p2)->flag_p; //升序
}
int main() {
int xh_tpr;
//投票人学号
int xh_tp;
//被投票人学号
int k;
lr();
while(1) {
printf("请输入你的学号“100”结束投票打印结果:\n");
scanf("%d",&xh_tpr);
if (xh_tpr==100) {
system("cls");
printf("投票结果:\t");
printf("学号\t姓名\t票数\t投票数\n");
qsort(stu, N, sizeof(stu[0]), Comp);
for (k=0;k<N2;k++)
printf("\t\t%d\t%s\t%d\t%d\n",stu[k].xh,&stu[k].xm,stu[k].flag_p,stu[k].flag);
system("pause");
break;
} else {
printf("\n请输入你要投票人的学号:");
scanf("%d",&xh_tp);
tp(xh_tpr,xh_tp);
}
}
//goto start; //不需要用goto
return 0;
}