题目描述

在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排列,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能。

(1) 在本例中首先输入参赛选手的人数(范围为1-9个);

(2) 将选手的编号和姓名依次存入顺序表单元中;

(3) 观众通过按键进行投票,按“1”为1号选手投票,按“2”为2号选手投票,以此类推,已按零作为投票结束标志;

(4) 投票结束后进行排序,然后为每个选手计算名次,得票相同的名次也相同。

(5) 在主函数中调用菜单函数调试程序。

存储类型的定义

参赛选手信息存储类型的定义:

typedef struct node{

char name[8]; //选手姓名

int num; //选手编号

int score; //选手得分

int tax; //选手名次

}Node;

(请使用滚轮下翻)

#include

#include

typedef struct Score

{

char AthleteName[20];

char SchoolName[20];

int SchoolCode;

int Rank;

char Achievement[10];

} Score;

typedef struct Match

{

int MatchCode;

char MatchName[10];

int Top;

Score *RankList;//比赛项目里面包含着分数(储存结构层面)

} Match, *Event;

typedef struct Record

{

int MatchCode;

char MatchName[10];

int Rank;

char Achievement[10];

char AthleteName[20];

int GetScore;

} Record;

typedef struct School

{

char SchoolName[20];

int num;

int ptr;

Record *RecordList;

} School, *SchoolSheet;

typedef struct Team

{

int SchoolCode;

char SchoolName[20];

int ManTotal;

int WomanTotal;

int TeamTotal;

} Team, *All;

int n, m, w, t;

Event A;

SchoolSheet B;

All C;

int ScoreList[8] = {5, 3, 2, 7, 5, 3, 2, 1};

void Start()

{

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

printf("欢迎使用运动会分数统计系统\n");

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

return;

}

void Function()

{

printf("-----功能选择-----\n");

printf("1.初始化\n");

printf("2.清零\n");

printf("3.录入各项比赛成绩\n");

printf("4.产生学校成绩单\n");

printf("5.产生团体总分报表\n");

printf("6.结果显示\n");

printf("7.返回主界面\n");

printf("0.退出系统\n");

return;

}

void login()

{

printf("参加运动会的学校个数:");

scanf("%d", &n);

getchar();

printf("运动会的男子项目个数:");

scanf("%d", &m);

getchar();

printf("运动会的女子项目个数:");

scanf("%d", &w);

getchar();

A = (Event)malloc((w + m) * sizeof(Match));

B = (SchoolSheet)malloc(n * sizeof(School));

C = (All)malloc(n * sizeof(Team));

if (!A)

exit(1);

if (!B)

exit(1);

if (!C)

exit(1);

return;

}

void Clear()

{

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

{

(B + i)->num = 0;

(B + i)->ptr = 0;

(B + i)->RecordList = NULL;

(C + i)->SchoolCode = 0;

(C + i)->ManTotal = 0;

(C + i)->WomanTotal = 0;

(C + i)->TeamTotal = 0;

}

for (int j = 0; j < (m + w); j++)

{

(A + j)->Top = 0;

(A + j)->MatchCode = 0;

(A + j)->RankList = NULL;

}

return;

}

void Input()

{

int num = 0;

for (int i = 0; i < (m + w); i++)

{

(A + i)->MatchCode = i + 1;

printf("请输入取前几名(int),以及项目名称(char)");

scanf("%d %s", &(A + i)->Top, (A + i)->MatchName);

getchar();

num = (A + i)->Top;

(A + i)->RankList = (Score *)malloc(num * sizeof(Score));

Score *R = (A + i)->RankList;

for (int j = 0; j < num; j++)

{

(R + j)->Rank = j + 1;

printf("请输入运动员名字");

scanf("%s", (R + j)->AthleteName);

printf("请输入学校名称");

scanf("%s", (R + j)->SchoolName);

printf("请输入学校编号");

scanf("%d", &(R + j)->SchoolCode);

(B + (R + j)->SchoolCode - 1)->num++;

printf("请输入名次");

scanf("%s", (R + j)->Achievement);

}

}

return;

}

void SchoolScoreSheet()

{

for (int j = 0; j < n; j++)

{

int c = (B + j)->num;

(B + j)->RecordList = (Record *)malloc(c * sizeof(Record));

}

int num = 0;

for (int i = 0; i < (m + w); i++)

{

Score *R = (A + i)->RankList;

num = (A + i)->Top;

for (int j = 0; j < num; j++)

{

int k = 0, h = 0;

k = (R + j)->SchoolCode - 1;

strcpy((B + k)->SchoolName, (R + j)->SchoolName);

h = (B + k)->ptr;

Record *L = (B + k)->RecordList;

(L + h)->MatchCode = i + 1;

(L + h)->Rank = (R + j)->Rank;

strcpy((L + h)->MatchName, (A + i)->MatchName);

strcpy((L + h)->AthleteName, (R + j)->AthleteName);

strcpy((L + h)->Achievement, (R + j)->Achievement);

if ((A + i)->Top != 3)

(L + h)->GetScore = ScoreList[(R + j)->Rank + 2];

else

(L + h)->GetScore = ScoreList[(R + j)->Rank - 1];

(B + k)->ptr++;

}

}

return;

}

void TeamScoreSheet()

{

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

{

(C + i)->SchoolCode = i + 1;

strcpy((C + i)->SchoolName, (B + i)->SchoolName);

Record *L = (B + i)->RecordList;

for (int j = 0; j < (B + i)->num; j++)

{

if ((L + j)->MatchCode <= m)

(C + i)->ManTotal = (C + i)->ManTotal + (L + j)->GetScore;

else

(C + i)->WomanTotal = (C + i)->WomanTotal + (L + j)->GetScore;

}

(C + i)->TeamTotal = (C + i)->ManTotal + (C + i)->WomanTotal;

}

return;

}

void Show()

{

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

{

printf("\n%s的成绩单:\n", (B + i)->SchoolName);

printf("项目名\t姓名\t名次\t得分\n");

int k = (B + i)->num;

Record *L = (B + i)->RecordList;

for (int j = 0; j < k; j++)

{

printf("%s\t%s\t%d\t%d\n", (L + j)->MatchName, (L + j)->AthleteName, (L + j)->Rank, (L + j)->GetScore);

}

}

printf("团体总分报表:\n");

printf("校号\t学校名称\t男子团体总分\t女子团体总分\t团体总分\n");

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

{

printf("%d\t%-20s%d\t\t%d\t\t%d\n", (C + i)->SchoolCode, (C + i)->SchoolName, (C + i)->ManTotal, (C + i)->WomanTotal, (C + i)->TeamTotal);

}

return;

}

void logoff() //退出系统

{

printf("退出\n");

exit(0);

}

void Home()

{

Function();

while (1)

{

printf("请输入选择的功能:");

scanf("%d", &t);

getchar();

switch (t)

{

case 1:

login();//初始化

break;

case 2:

Clear();//清零

break;

case 3:

Input();//录入各项比赛成绩

break;

case 4:

SchoolScoreSheet();//产生学校成绩单

break;

case 5:

TeamScoreSheet();//产生团体总分报表

break;

case 6:

Show();//结果显示

break;

case 7:

Home();//返回主界面

break;

case 0:

logoff();//退出系统

break;

}

}

return;

}

int main()

{

Start();//打印欢迎菜单

Home();//打印选项菜单

return 0;

}

java 运动会分数统计_数据结构题目-运动会分数统计相关推荐

  1. java mongo分组统计_探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics

    对服务进行实时监控,了解服务当前的运行指标和健康状态,是微服务体系中不可或缺的环节.Metrics 作为微服务的重要组件,为服务的监控提供了全面的数据基础.近日,Dubbo Metrics 发布了2. ...

  2. java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...

    基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...

  3. java链表的用法_数据结构(java语言描述)链表的使用

    1.定义node类,实现Node结点的构造函数(空结点和指定数值的结点),基本的获取结点的指针域,数据域,设置指针域,数据域. package class2; public class Node { ...

  4. java冒泡测试代码_数据结构与算法—冒泡排序(Java实现)

    [toc] 冒泡排序 程序代码package com.uplooking.bigdata.datastructure;import java.util.Arrays;public class Bubb ...

  5. java冒泡法优化_数据结构java版之冒泡排序及优化

    冒泡排序的时间用大O表示法是O(N^2). 传统的冒泡排序: /** * @param total 要排序的数组长度 */ public void sort(int total){ int num[] ...

  6. 数据结构java学生成绩排序_数据结构学习--Java简单排序

    冒泡排序需要元素每次遍历都从最底部向上冒泡,找到适合的位置后,该位置之后的元素继续向上冒,这样一趟排序结束后,将冒出最大或者最小值. 选择排序需要元素从0号位开始向上遍历一遍,并将最小值放到0号位上, ...

  7. 校运动会mysql索引_大学生春季运动会的数据库,保存了比赛信息的三个表如下:运动员...

    先写出一个含有最高成绩表temp(对项目进行分组求最高分,不会单独显示运动员id了,因此之后要联结这个原grade表才能有运动员id才能再联结sporter来确定name): (select item ...

  8. linux 统计_聊聊 Linux 的内存统计

    写在前面 本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法. 开始阅读这篇文章前,请先简单阅读下面的几篇文章. <进程眼中的线性地址空间> <线程眼 ...

  9. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示

    本篇讲解一下 如何在Vue 中使用 Echarts + 百度地图 统计 博客访问量 并且通过QQWry 解析 ip 地址 利用Echarts 展示出来 效果图如下: 1.纯真Ip地址库 QQWry 这 ...

最新文章

  1. sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
  2. Jmeter分布式压测方案
  3. tfrecord可以以列表的形式传入多个路径
  4. python读excel表格
  5. Python面向对象编程Day 25部分知识点
  6. 初学视觉学习笔记----用摄像头获取图片
  7. Android客户端打包方案分享
  8. mocha 测试 mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDrive
  9. 机器学习中的距离和损失函数
  10. 局域网网络风暴检测工具_【思唯网络学院】从原理到配置,最全的VLAN说明就在这了!...
  11. SCPPO(二十二):读取配置文件---程序猿必不可少的技能
  12. C++开发的应用方向有哪些?
  13. linux 输入--输出--重定向 stdin/stdout/stderr
  14. Android9王者荣耀卡顿,王者荣耀卡顿掉帧?教你如何让王者荣耀流畅爆表
  15. http-server介绍及使用
  16. python--leetcode448. Find All Numbers Disappeared in an Array
  17. ems与nms_求教OMC、EMS、NMS的区别和不同?
  18. Docker中成功安装修罗Xiunobbs论坛步骤
  19. 技术水平真的很重要!技术详细介绍
  20. LiveNVR监控摄像头Onvif/RTSP接入流媒体平台如何配置默认用户账户及用户密码

热门文章

  1. H5表单验证2(h5自带验证美化)
  2. Odoo 模型字段自动计算(compute)
  3. 问题:Xcode8更新之后模拟器找不到了
  4. 计算机黑屏如何重启,电脑黑屏,小编教你电脑黑屏重启还是黑屏怎么办
  5. D1net阅闻:Facebook视频直播功能正式开放
  6. 关于A5:SQL Mk-2(A5M2)的安装和使用
  7. 解释SAR/INSAR/DINSAR的概念
  8. qt界面崩溃与假死问题
  9. WebStorm设置px转换rem插件
  10. RL 实践(0)—— 及第平台辛丑年冬赛季【Rule-based policy】