黄瓜687 2022-01-05 19:53 采纳率: 50%
浏览 86
已结题

C语言程序设计,要带注释,投票系统

某班从全班20人(学号1~20)中投票选举6位班委委员,每张选票内容包括:所选班委的学号,投票人学号。
基本要求用菜单选择并完成下述系统功能:
(1)输入全班的名单(姓名与学号),并可显示。
(2)选票输入:输入每张选票的投票人学号及所选班委的学号(可选6个,没有则键入空白)。
(3)输出得票前6位的当选班委名单
(4)输出6位班委名单全部选票与投票结果完全相符的投票人姓名。
(5)退出程序

  • 写回答

1条回答 默认 最新

  • 神仙别闹 2022-01-05 20:28
    关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 创建了问题 1月5日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路