【C++面向对象】足球比赛数据统计系统(面向对象练习)

news2024/11/24 14:39:30

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


足球比赛数据统计系统(面向对象)

目录

    • 足球比赛数据统计系统(面向对象)
  • 一、设计要求
  • 二、结果展示
    • 2.1 输入比赛数据
    • 2.2 显示队伍排名
    • 2.3 显示某时间段比赛数据
    • 2.4 显示某队主客场得分
    • 2.5 退出
  • 三、程序设计
    • 3.1 定义Match结构
    • 3.2 定义TeamStats结构
    • 3.3 设计用户界面:
    • 3.4 数据输入功能
    • 3.5 实现队伍排名展示功能
    • 3.6 实现指定队伍和月份的比赛数据查询功能
  • 四、总结


一、设计要求

统计足球比赛数据,要求能用菜单实现如下功能:
(1)输入每场比赛的主队名称客队名称,比赛日期,主队得分,客队得分。 (2)按总得分从高到低排出每个队的名称,总得分,胜,和,负的次数。
(3) 根据用户要求输出某队某月 (从键盘输入队名和月份)的所有比赛数据。(4) 根据用户要求输出某队主场总得分,客场总得分。


二、结果展示

2.1 输入比赛数据

展示如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】 :

在这里插入图片描述


2.2 显示队伍排名

展示如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】 :

在这里插入图片描述


2.3 显示某时间段比赛数据

展示如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

在这里插入图片描述


2.4 显示某队主客场得分

展示如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

在这里插入图片描述


2.5 退出

展示如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

在这里插入图片描述


三、程序设计

3.1 定义Match结构

定义一个结构体Match来存储单场比赛的信息:主队名称,客队名称,比赛日期,主队得分,客队得分。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

struct Match {
    std::string home_team;  // 主场队伍名称
    std::string away_team;  // 客场队伍名称
    std::string date;       // 格式: yyyymmdd
    int home_score;         // 主场队伍分数
    int away_score;         // 客场队伍分数
};

3.2 定义TeamStats结构

定义一个结构体TeamStats来存储队伍的统计数据:总得分,胜利次数,平局次数,失利次数,主场得分,客场得分。使用vector存储所有比赛数据。使用map存储队伍的统计数据,键为队伍名称,值为TeamStats结构体。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

struct TeamStats {
    int total_points = 0;   // 队伍总积分
    int wins = 0;           // 队伍赢得的比赛次数
    int draws = 0;          // 队伍打平的比赛次数
    int losses = 0;         // 队伍输掉的比赛次数
    int home_score = 0;		// 队伍在主场(即作为主队)的比赛中累积得到的总进球数
    int away_score = 0;		// 队伍在客场(即作为客队)的比赛中累积得到的总进球数
};

3.3 设计用户界面:

设计一个简单的文本菜单,展示用户可以选择的操作。获取用户的输入来选择操作。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

 std::cout << "菜单:\n"
     << "1. 输入比赛数据\n"
     << "2. 显示队伍排名\n"
     << "3. 显示某队某月的所有比赛数据\n"
     << "4. 显示某队主场和客场总得分\n"
     << "5. 退出\n"
     << "请选择(15): ";

3.4 数据输入功能

获取用户输入的每场比赛信息。将输入的比赛数据存储到vector中。实时更新队伍的统计数据。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

 	 // 输入比赛数据
     Match match;
     std::cout << "输入主队名称: ";
     std::cin >> match.home_team;
     std::cout << "输入客队名称: ";
     std::cin >> match.away_team;
     std::cout << "输入比赛日期(yyyy-mm-dd): ";
     std::cin >> match.date;
     std::cout << "输入主队得分: ";
     std::cin >> match.home_score;
     std::cout << "输入客队得分: ";
     std::cin >> match.away_score;

     matches.push_back(match);

     // 更新统计数据
     TeamStats& home_stats = stats[match.home_team];
     TeamStats& away_stats = stats[match.away_team];

     home_stats.home_score += match.home_score;
     away_stats.away_score += match.away_score;

     if (match.home_score > match.away_score) {
         home_stats.total_points += 3;
         home_stats.wins++;
         away_stats.losses++;
     }
     else if (match.home_score < match.away_score) {
         away_stats.total_points += 3;
         away_stats.wins++;
         home_stats.losses++;
     }
     else {
         home_stats.total_points++;
         away_stats.total_points++;
         home_stats.draws++;
         away_stats.draws++;
     }

3.5 实现队伍排名展示功能

从map中提取统计数据,并存储到一个vector中用于排序。根据总得分对vector进行降序排序。以表格的形式输出每个队伍的名称,总得分,胜利次数,平局次数,和失利次数。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

   std::string team_name, year_month;
   std::cout << "输入队伍名称: ";
   std::cin >> team_name;
   std::cout << "输入年月(yyyy-mm): ";
   std::cin >> year_month;

   for (const auto& match : matches) {
       if ((match.home_team == team_name || match.away_team == team_name) &&
           match.date.substr(0, 7) == year_month) {
           std::cout << match.date << " " << match.home_team << " " << match.home_score << " - "
               << match.away_score << " " << match.away_team << "\n";
       }
   }

3.6 实现指定队伍和月份的比赛数据查询功能

获取用户输入的队伍名称和年月。遍历存储的比赛数据,匹配队伍名称和日期,输出符合条件的比赛信息。

代码如下【关注 测试开发自动化 回复 足球比赛数据统计系统 公众号获取源码】:

    // 显示某队主场和客场总得分
    std::string team_name;
    std::cout << "输入队伍名称: ";
    std::cin >> team_name;

    TeamStats& team_stats = stats[team_name];

    std::cout << "主场总得分: " << team_stats.home_score << "\n";
    std::cout << "客场总得分: " << team_stats.away_score << "\n";

四、总结

本项目是一个用C++编写的简单控制台应用程序,目的是统计和查询足球比赛的数据。程序具备输入比赛信息,展示队伍排名,查询特定队伍在特定月份的比赛数据,以及查询某队的主场和客场总得分等功能。

在数据存储方面,代码使用标准模板库(STL)的vector和map容器。其中,vector用于存储所有比赛的数据,而map则用于以队伍名称为键存储队伍的统计数据。此外,定义了两个结构体Match和TeamStats来组织比赛和队伍统计数据。

用户界面部分包含一个简单的文本菜单,通过std::cout输出选项,用户可以通过输入相应的数字选择执行的操作。代码通过循环来运行此菜单,直到用户选择退出。
对于数据输入功能,代码接收用户输入的比赛信息,并将其存储在vector中。同时,更新相应队伍的统计数据。

在队伍排名展示方面,代码提取map中的统计数据,将其存入vector,然后使用排序算法按得分排序。之后,以表格形式输出每个队伍的名称,总得分,胜利次数,平局次数和失利次数。
查询功能允许用户输入队伍名称和月份,然后通过遍历比赛数据,找到符合条件的比赛,并输出相关信息。而在得分查询部分,代码从队伍统计数据中检索主场和客场得分,并输出。

总的来说,此程序是一个基于控制台的足球比赛数据统计和查询工具,它展示了如何使用C++的基本数据结构和算法来实现实用的功能。虽然简单,但它为学习和理解C++编程提供了一个很好的示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IoT】硬件产品经理:从入门到精通(卫朋)

目录 介绍 出版过程 CSDN学院 下单方式 个人介绍 介绍 2023 年已经过去了一半。 作为阶段小目标&#xff0c;这本书也如期发布了。 先来看看封面&#xff0c;这里也要感谢编辑们的辛苦付出。 ​ 出版过程 出版本身其实是一件比较严肃的事情。 过去的一年多时间&#…

进程的基本概念解读

目录 什么是进程 PCB OS中用于管理控制的数据结构 进程控制块PCB的作用 进程控制块中的信息 前趋图 背景 作用 表示 示例 程序的顺序执行 程序顺序执行的特征 程序的并发执行 程序的并发执行的特征 例题解读 进程的三种基本状态 进程的三种状态之间的转换 进…

linux下RabbitMQ的使用

文章目录 linux下RabbitMQ的使用首先docker启动网页打开网址&#xff1a;用户名和密码登录创建exchanges:创建Queues增加Queues的Bind linux下RabbitMQ的使用 首先docker启动 su rootsudo docker run -d --hostname rabbitsvr --name rabbit -p 5672:5672 -p 15672:15672 -p …

Uniform的理解

Uniform&#xff1a;一种从Cpu的应用&#xff0c;向Gpu中的着色器发送数据的方式&#xff0c;它是全局的&#xff0c;可以被任意着色器程序在任意阶段访问。 若声明了一个Uniform却没用过&#xff0c;编译器会默认移除这个变量&#xff0c;导致编译出的版本并不包含它&#xff…

配置本地的application-dev.yml读取nacos上面的配置

我想配置本地的application-dev.yml读取nacos上面的配置&#xff0c;我应该在配置文件里怎么写&#xff1f;并且在nacos里怎么建立 在本地的application-dev.yml文件中&#xff0c;您可以使用Spring Cloud Nacos来读取Nacos上的配置。以下是在配置文件和Nacos中设置的步骤&…

servlet+JSP与SpringBoot+Vue项目交互——servlet访问Vue页面

问题 servletJSP与SpringBootVue项目交互——servlet访问Vue页面 详细问题 笔者前一段时间开发一个项目&#xff0c;使用的技术框架是servletJSP&#xff0c;现阶段开发的项目技术框架为SpringBootVue&#xff0c;笔者现在需要输入servletJSP的路由地址&#xff08;登录页面…

3DTiles Next研究

3DTiles Next是Cesium发布的下一代3DTiles规范。 元数据 在这一代规范中&#xff0c;更重视元数据&#xff08;metadata&#xff0c;如建筑物ID或者类型等&#xff09;&#xff0c;通过这些元数据可以对3dtiles进行样式调整或者过滤显示。 关于详细的元数据规范介绍看这里。 …

Spark SQL生产优化经验--任务参数配置模版

大表扫描 特殊case说明&#xff1a;当任务存在扫event_log表时需注意&#xff0c;若对event_log表进行了过滤&#xff0c;且过滤比很高&#xff0c;如下图的case&#xff0c;input为74T&#xff0c;但shuffle write仅为3.5G&#xff0c;那么建议提高单partition的读取数据量&a…

Redis数据库高可用之RDB和AOF持久化

Redis数据库高可用、RDB和AOF持久化、性能管理 一、Redis 高可用二、Redis 持久化Ⅰ、持久化的功能Ⅱ、两种持久化方式Ⅲ、RDB 和 AOF 的区别 三、RDB 持久化Ⅰ、触发条件Ⅱ、执行流程 四、AOF持久化Ⅰ、开启AOFⅡ、执行流程 五、RDB 和 AOF 的优缺点Ⅰ、RDB 持久化Ⅱ、AOF 持久…

金鹰优化算法,附MATLAB代码,直接复制

金鹰优化算法&#xff08;golden eagle optimizer, GEO&#xff09;是于2020年提出的新型智能优化算法&#xff0c;该算法建立于金鹰个体 捕食过程中的巡航和攻击行为之上&#xff0c;通过平衡两者关系&#xff0c;帮助函数寻找最优值&#xff0c;已经在许多方面得到了应用。 关…

Google 将为高端 Chromebook 推出独立品牌

说起 Chromebook&#xff0c;一般大家的第一印象就是价格便宜、配置不高、做工普通&#xff0c;所选的材料也都是以塑料为主&#xff0c;产品主打的市场也是学生和教育群体。在不少人看来&#xff0c;Chromebook 就是一个配备了功能齐全的浏览器&#xff0c;外加一定的文件管理…

GOLANG进阶:Viper,Mysql,Swagger

GOLANG从浅入深必须学习的一些工具包 1.Viper&#xff1a; Viper 是一个完整的 Go 应用程序配置解决方案&#xff0c;优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下&#xff1a; 支持 JSON/TOML/YAML/HCL/envfile/Java proper…

数据结构--栈在函数递归中的调用

数据结构–栈在函数递归中的调用 void func2(int x) {int n, m;//... }void func1(int a, int b) {int x;//...func2(x);x 5201314;//... }int main() {int a, b, c;//...func1(a, b);//... }函数调用的特点:最后被调用的函数最先执行结束(LIFO) 函数调用时&#xff0c;需要用…

【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

文章目录 1 引言2 卷积神经网络概述2.1 卷积神经网络的背景介绍2.2 CNN的网络结构2.2.1 卷积层2.2.2 激活函数2.2.3 池化层2.2.4 全连接层 2.3 CNN的训练过程图解2.4 CNN的基本特征2.4.1 局部感知&#xff08;Local Connectivity&#xff09;2.4.2 参数共享(Parameter Sharing)…

顶点数据加入颜色数据

顶点着色器代码&#xff1a; #version 330 core layout(location 0) in vec3 aPos; layout(location 1) in vec3 aColor; out vec3 ourColor; void main(){gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0f);ourColoraColor; }片段着色器代码&#xff1a; #version 330 cor…

11-切片有什么用?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 11-切片有什么用&#xff1f;

学习 vue3版本

文章目录 创建各种函数setup注意点 ref函数总结 reactive总结 响应式vue2vue3总结 ref与reactive的比较计算属性监视watch的value的问题 watchEffect函数生命周期Hooks函数总结 toRef总结 其他CompositionApishallowReactive与shallowRefreadonly与shallowReadonlytoRaw与markR…

React Antd Form.List 组件嵌套多级动态增减表单 + 表单联动复制实现

Antd Form.List 组件嵌套多级动态增减表单 表单联动复制实现 一、业务需求 有一个页面的组件&#xff0c;其中一部分需要用到动态的增减 复制表单&#xff0c;然后就想起 了使用 Antd 的 Form.List 去完成这个功能。 这个功能的要求是&#xff1a; 首先是一个动态的表单&…

事后多重比较案例分析

一、案例介绍 由单因素方差分析案例中&#xff0c;为研究郁金对低张性缺氧小鼠存活时间的影响&#xff0c;将36只小鼠随机生成A、B以及 C 三组&#xff0c;每组12个&#xff0c;雌雄各半&#xff0c;分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃&#xff0c;各组小鼠均…

08-C++学习笔记-类与对象

&#x1f51f;&#x1f512; 08-C学习笔记-类与对象 在本篇学习笔记中&#xff0c;我们将详细讲解C中的类与对象的概念和相关知识。类是C中一种重要的数据类型&#xff0c;它允许我们自定义数据结构和相应的操作。 &#x1f4da; C类与对象详细讲解 ✨类的概念 类是一种用户…