文章目录

  • 一、问题描述和基本要求
  • 二、问题分析和任务定义
    • 1.数据结构的选取
    • 2.问题分析
    • 3.功能分析
  • 三、逻辑设计
    • 1.变量的类型说明:
    • 2.变量说明
    • 3.函数说明
    • 4.抽象数据结构
  • 四、物理结构
    • 1.存储结构
    • 2.模块设计
    • 3.函数设计
    • 4.算法流程图
  • 五、测试数据
  • 六、具体函数实现

一、问题描述和基本要求

【问题描述】
参加计算机设计大赛的n个学校编号为1n,赛事分成m个项目,项目的编号为1m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
【基本要求】
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
【设计要求】
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,可以完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
【测试数据】
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
【实现提示】
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩.

二、问题分析和任务定义

1.数据结构的选取

本项目使用结构体作为数据结构,分别用学校(school)、团队(team)、项目(project)来表示比赛的相关信息。

2.问题分析

本题目中,并没有给我们相关的比赛信息,所以需要我们自己去输入或用随机数生成,但要能保存在数据里,留待下一次的取用,同时要注意题目对相关数量的要求。
项目project尽量在3-10个左右
学校school要能保证使每个项目至少10只队伍
团队team要保证每个学校不能超过六个
注意每个team只能选一个项目

3.功能分析

(1)能够随时添加相关信息;
(2)照学校编号或名称查询,学校的总分输出;
(3)按学校编号查询学校某个项目的获奖情况;
(4)可以按项目编号查询取得前三名的学校(注意并列的情况);
(5)可以查询任意项目的总分;

三、逻辑设计

1.变量的类型说明:
school类 name(名字)、length(参赛队伍数量)、sum(学校总分)
team类 score(团队得分)、jud(参加的项目)
project类 score(项目得分)、sum(项目总分)
2.变量说明
sch[n] 参加比赛的学校(School类型)
te[i] 参加的队伍(Team类型)
pro[m] 赛事项目(project类型)
3.函数说明
readdata() 读取文件里的比赛信息
input() 添加新的参赛学校和队伍
readdata() 读取文件里的比赛信息,通过fstream来完成
schoolsum() 计算学校总分排名
evschoolsum() 按照学校编码查询总分
prothree() 按项目编号查询取得前三名的学校
evprosum() 计算项目总分
schoolaw() 按学校编号查询学校某个项目的获奖情况
4.抽象数据结构
ADT 计算机设计大赛赛事统计Data学校列表schools<School>项目列表projects<Project>队伍列表teams<Team>Operation界面设计输入:无功能:输出主菜单交互界面输出:主菜单交互界面读取数据输入:无功能:读取文件中的比赛信息输出:无添加学校/队伍输入:学校/队伍信息功能:将输入的信息存入对应的结构体数组中输出:无输出学校/项目总分输入:无功能:输出学校/项目总分输出:学校/项目总分输出任意学校的总分 输入:学校编号功能:根据编号输出学校总分输出:学校总分输出所有学校总分,总分降序输出输入:无功能:降序输出所有学校总分输出:所有学校总分通过学校编号查询各项目总分降序输出输入:学校编号功能:查询该学校所有项目分数,并且降序输出输出:学校所有项目分数 按学校编号查询学校某个项目的获奖情况输入:学校编号和项目编号功能:查询该学校对应项目的获奖情况输出:该学校对应项目的获奖情况按项目编号查询取得前三名的学校  输入:项目编号功能:查询该项目取得前三名的学校输出:该项目取得前三名的学校编号退出程序输入:N功能:退出程序输出:无
end ADT

四、物理结构

1.存储结构

1.定义结构体school类和team类,并在school类中存放team类数组
2.定义结构体project类表示项目

2.模块设计

1.主函数模块
2.读取数据和输入模块
3.计算总分降序输出模块
4.获得项目排名模块

3.函数设计
伪代码:
1.school类:name(名字)、length(参赛队伍数量)、sum(学校总分);
2.team类: score(团队得分)、jud(参加的项目);
3.project类:score(项目得分)、sum(项目总分);
4.sch[n];
5.te[i];
6.pro[m];
7.readdata(){读取文件里的比赛信息,通过fstream来完成}
8.input(){添加比赛信息}
9.evschoolsum(){查询各个学校的总分,并降序输出}
10.schoolsum(){按编号查询学校总分}
11.prothree(){按项目编号查询取得前三名的学校}
12.evprosum() {计算项目总分 }
13.schoolaw(){按学校编号查询学校某个项目的获奖情况}
4.算法流程图

五、测试数据


六、具体函数实现

1.schoolsum()

void schoolsum()                                                       //根据编号查询学校总分
{int a;cout << "目前共有" << n << "个学校参赛" << endl;cout << "请输入需要查询总分的学校编号(1-" << n << ")" << endl;while (true){cin >> a;if (!cin.good()||a<1 || a>n)cout << "输入编号有误,请重新输入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}cout << "该学校的总分为" << sch[a - 1].sum << endl;
}

2.evschoolsum()

void evschoolsum()                                            //各学校总分,降序输出
{int a[100];int b[100];for (int i = 0; i < n; i++)a[i] = sch[i].sum;sort(a, a + n);                                           //对数组排序for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (sch[j].sum == a[i])b[i] = j;}}cout << "学校编号" <<" " << "学校名称" << "    " << "总分" << endl;for (int i = 0; i < n; i++)                                            //降序输出{cout << "   " << b[n-i-1]+1 <<"        " <<sch[b[n-i-1]].name<< "          " << a[n - i - 1] << endl;}
}

3.evprosum()

void evprosum()                                                 //项目总分
{cout << "项目" << "    " << "总分" << endl;for (int i = 0; i < 6; i++){cout << " " << i+1 << "         " << pro[i].sum << endl;}
}

4.scevprosum()

void scevprosum()                                              //根据学校编号查询各个项目得分
{int x;cout << "请输入所需要查询的学校编号(1-" << n << ")" << endl;while (true){cin >> x;if (!cin.good()||x<1 || x>n)cout << "输入编号有误,请重新输入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}int a[20];int b[20];for (int i = 0; i < sch[x - 1].length; i++)a[i] = sch[x - 1].te[i].sc;sort(a, a + sch[x - 1].length);                                 //对数组排序for (int i = 0; i < sch[x - 1].length; i++){for (int j = 0; j < sch[x - 1].length; j++){if (sch[x-1].te[j].sc == a[i])b[i] = sch[x - 1].te[j].jud;}}cout << "项目编号" << "    " << "总分" << endl;for (int i = 0; i < sch[x - 1].length; i++)                      //降序输出{cout << "   " << b[sch[x - 1].length - i - 1]  <<"          " << a[sch[x - 1].length - i - 1] << endl;}
}

5.prothree()

void prothree()                                                    //根据编号查询项目的前三名
{int x;int y = 0;int a[100];int b[3];cout << "请输入需要查询排名的项目编号(1-6)" << endl;while (true){cin >> x;if (!cin.good()||x < 1 || x>6)cout << "输入编号有误,请重新输入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}for (int i = 0; i < n; i++)a[i] = pro[x-1].score[i];sort(a, a + n);for (int i = n-1; i > n-4; i--){for (int j = 0; j < n; j++){if (pro[x-1].score[j] == a[i])b[y++] = j+1;}}if (b[0] == b[1]){cout << "该项目的第一名为: 学校" << b[0] <<"和学校"<<b[1]<< endl;cout << "该项目的第二名为: 学校" << b[1] << endl;}else if (b[1] == b[2]){cout << "该项目的第一名为: 学校" << b[0] << endl;cout << "该项目的第二名为: 学校" << b[1] << "和学校" << b[2] << endl;}else if(b[0]==b[1]==b[2]){cout << "该项目的第一名为: 学校" << b[0] << "和学校" << b[1] <<"和学校"<<b[2]<< endl;}else{cout << "该项目的第一名为: 学校" << b[0] << endl;cout << "该项目的第二名为: 学校" << b[1] << endl;cout << "该项目的第三名为: 学校" << b[2] << endl;}
}

6.schoolaw()

void schoolaw()                                                                     //查询任意学校任意项目获奖情况
{int a;int b;int jud = 0;cout << "请输入所需要查询的学校编号(1-" <<n <<")" << endl;while (true){cin >> a;if (!cin.good()||a<1 || a>n)cout << "输入编号有误,请重新输入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}cout << "请输入需要查询的项目编号(1-6)" << endl;while (true){cin >> b;if (!cin.good()||b < 1 || b>6)cout << "暂无该编号项目,请重新输入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}int c[100];for (int i = 0; i < n; i++)c[i] = pro[b-1].score[i];sort(c, c + n);for (int i = n - 1; i > n - 4; i--){if(pro[b-1].score[a-1]==c[i]){cout<<"该学校在该项目中获得第"<<abs(i-n)<<"名"<<endl;jud = 1;break;}}if (jud == 0)cout << "该学校在该项目中没有获奖" << endl;
}

以上代码均能ac。

中国计算机设计大赛赛事统计预习报告相关推荐

  1. 数据结构课程设计预习——项目1:中国计算机设计大赛赛事统计

    项目1: 中国计算机设计大赛赛事统计 问题描述 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项,项目的编号为1-m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表.( ...

  2. 预习:中国计算机设计大赛赛事统计

    项目: 中国计算机设计大赛赛事统计 一.问题描述 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项,项目的编号为1-m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表. ...

  3. 数据结构课程设计:中国计算机设计大赛赛事统计

    目录 项目1:计算机大赛赛事统计 一.问题分析和任务定义 二.逻辑设计 数据结构定义 抽象数据类型 三.物理设计 存储结构 结构框架 项目1:计算机大赛赛事统计 一.问题分析和任务定义 (1)每个项目 ...

  4. 项目一:中国计算机设计大赛赛事统计

    目录 一.问题分析和任务定义 [问题描述] [基本要求] [设计要求] [测试数据] [实现提示] 二.数据结构的选择和概要设计 [所需数据] [约束条件] [实现功能] [数据结构的选择] 三.详细 ...

  5. 数据结构课程设计——中国计算机设计大赛赛事统计

    [问题描述] 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表. [基本要求] 1)每个比赛项目至 ...

  6. 数据结构课程设计——项目1:中国计算机设计大赛赛事统计

    1.问题描述 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表. 2.基本要求 1)每个比赛项目至 ...

  7. 项目1:中国计算机设计大赛赛事统计

    [问题描述] 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表. [基本要求] 1)每个比赛项目至 ...

  8. 中国大学生计算机设计大赛赛事管理系统——预习

    一.问题定义描述及要求 1. 问题描述 实现赛务相关的数据管理及信息服务,该系统能够为省级赛事管理解决以下问题: 1)能够管理各参赛队的基本信息(包含参赛队编号,参赛作品名称,参赛学校,赛事类别,参赛 ...

  9. 中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗

    ‍‍中国大学生计算机设计大赛是我国高校面向本科生最早的赛事之一,自2008年开赛至今,一直由教育部高校与计算机相关教指委等或独立或联合主办.大赛的目的是以赛促学.以赛促教.以赛促创,为国家培养德智体美 ...

最新文章

  1. 给Linux系统/网络管理员的nmap的29个实用例子
  2. element-ui介绍
  3. POJ - 3294 Life Forms(二分+后缀数组)
  4. 移动开发者选项手机如何打开真机调试模式
  5. 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model
  6. java的集合应用_Java之集合类应用总结
  7. eclipse maven打包_maven的通俗易懂的用法
  8. 阿里巴巴在宁成立江苏总部
  9. C#不同窗体间通信,数据传递
  10. mathematica 如何在数组中等间隔插入元素
  11. Openbox自定义键盘(lxde-rc)
  12. ISO27001(BS7799/ISO17799)国标
  13. php ueditor mysql_PHP Ueditor 富文本编辑器
  14. [论文笔记] 视频广告理解的多模态框架
  15. 嵌入式开发中三种操作系统的分析与比较
  16. 国内科技巨头的区块链布局:BAT多领域布局,迅雷领跑主链
  17. HiveSQL percentile和percentile_approx 函数计算千分数
  18. 【python】文件读取写 open的方式with的方式 异常报错处理
  19. 系统动力学专拓考试重点总结
  20. keil出现no source“: Error: command-line: #564: cannot open解决方法

热门文章

  1. word 章节、图片(带章节)、公式自动编号
  2. 云计算学习 - 基本概念
  3. 人工智能、数据挖掘、机器学习和深度学习之间,主要有什么关系?
  4. 每天巧得支付宝大额红包,以后再也不用天天“褥羊毛”了,可以天天“吃羊肉”了哦!
  5. 这位新同事又矮又重,凭啥是阿里P8?
  6. eclipse光标变成黑色闪烁方块解决方案
  7. cfg桩设备型号_cfg桩 锚杆钻机型号大全
  8. 深度学习-07(图像分类、常用数据集、利用CNN实现图像分类、图像分类优化)
  9. 机器学习算法(十三):word2vec
  10. LaTex 之 TexLive 2020 + TexStudio 的安装及其他软件推荐