java 运动会分数统计_数据结构题目-运动会分数统计
题目描述
在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排列,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能。
(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 运动会分数统计_数据结构题目-运动会分数统计相关推荐
- java mongo分组统计_探秘 Dubbo 的度量统计基础设施 - Dubbo Metrics
对服务进行实时监控,了解服务当前的运行指标和健康状态,是微服务体系中不可或缺的环节.Metrics 作为微服务的重要组件,为服务的监控提供了全面的数据基础.近日,Dubbo Metrics 发布了2. ...
- java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...
基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...
- java链表的用法_数据结构(java语言描述)链表的使用
1.定义node类,实现Node结点的构造函数(空结点和指定数值的结点),基本的获取结点的指针域,数据域,设置指针域,数据域. package class2; public class Node { ...
- java冒泡测试代码_数据结构与算法—冒泡排序(Java实现)
[toc] 冒泡排序 程序代码package com.uplooking.bigdata.datastructure;import java.util.Arrays;public class Bubb ...
- java冒泡法优化_数据结构java版之冒泡排序及优化
冒泡排序的时间用大O表示法是O(N^2). 传统的冒泡排序: /** * @param total 要排序的数组长度 */ public void sort(int total){ int num[] ...
- 数据结构java学生成绩排序_数据结构学习--Java简单排序
冒泡排序需要元素每次遍历都从最底部向上冒泡,找到适合的位置后,该位置之后的元素继续向上冒,这样一趟排序结束后,将冒出最大或者最小值. 选择排序需要元素从0号位开始向上遍历一遍,并将最小值放到0号位上, ...
- 校运动会mysql索引_大学生春季运动会的数据库,保存了比赛信息的三个表如下:运动员...
先写出一个含有最高成绩表temp(对项目进行分组求最高分,不会单独显示运动员id了,因此之后要联结这个原grade表才能有运动员id才能再联结sporter来确定name): (select item ...
- linux 统计_聊聊 Linux 的内存统计
写在前面 本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法. 开始阅读这篇文章前,请先简单阅读下面的几篇文章. <进程眼中的线性地址空间> <线程眼 ...
- 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
本篇讲解一下 如何在Vue 中使用 Echarts + 百度地图 统计 博客访问量 并且通过QQWry 解析 ip 地址 利用Echarts 展示出来 效果图如下: 1.纯真Ip地址库 QQWry 这 ...
最新文章
- sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
- Jmeter分布式压测方案
- tfrecord可以以列表的形式传入多个路径
- python读excel表格
- Python面向对象编程Day 25部分知识点
- 初学视觉学习笔记----用摄像头获取图片
- Android客户端打包方案分享
- mocha 测试 mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDrive
- 机器学习中的距离和损失函数
- 局域网网络风暴检测工具_【思唯网络学院】从原理到配置,最全的VLAN说明就在这了!...
- SCPPO(二十二):读取配置文件---程序猿必不可少的技能
- C++开发的应用方向有哪些?
- linux 输入--输出--重定向 stdin/stdout/stderr
- Android9王者荣耀卡顿,王者荣耀卡顿掉帧?教你如何让王者荣耀流畅爆表
- http-server介绍及使用
- python--leetcode448. Find All Numbers Disappeared in an Array
- ems与nms_求教OMC、EMS、NMS的区别和不同?
- Docker中成功安装修罗Xiunobbs论坛步骤
- 技术水平真的很重要!技术详细介绍
- LiveNVR监控摄像头Onvif/RTSP接入流媒体平台如何配置默认用户账户及用户密码