juster数据结构实验1:中国计算机设计大赛赛事统计(附完整代码)
文章目录
1、项目概述
1.1项目主要内容
参加计算机设计大赛的n个学校编号为1n,赛事分成m个项目,项目的编号为1m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
开发平台:Visual Studio 2022 x64
语言:C++
1.2项目需求分析
1、文件的存取
2、用户界面
3、赛事数据能新增、修改和删除
4、赛事统计和查询:
- 统计各学校总分;
- 按学校编号排序,按学校的总分排序;
- 按项目对参赛学校的分数进行降序排序;
- 可以按学校编号查询某个项目的获奖情况;
2、项目设计
2.1【设计要求】
1)输入数据形式和范围:可以输入学校的名称,赛事项目的名称。
2)输出形式:有中文提示,各学校分数为整数
3)界面要求:交互设计要合理,每个功能可以设立菜单,根据提示,可以完成相关功能的要求。
4)存储结构:学生自己根据系统功能要求自己设计,但是赛事相关数据要存储在文件中。
2.2【测试数据】
要求使用全部合法数据,整体非法数据,局部非法数据。进行程序测试,以保证程序的稳定。
2.3【实现提示】
假设3<赛事项目数量<=10,学校名称长度不超过20个字符。每个赛事结束时,将其编号、名称输入,并依次输入参赛学校编号、学校名称和成绩。
2.4【设计功能函数】
void first_menu(); //一级菜单(主界面)
void Schoolmenu(); //二级菜单1:学校信息管理
void Contestmenu(); //二级菜单2:比赛项目管理
void Itemmenu(); //二级菜单3:赛事信息管理
void Prize_query(); //二级菜单4:查询学校获奖信息
void ScoreRank(); //二级菜单5:总分排行榜
void PrizeRank(); //二级菜单6:获奖排行
void printInfo (); //二级菜单7:程序信息
2.5【系统功能结构】
图1-1 系统框架设计图
图1-2 系统功能模块图
2.6 【系统业务流程图】
图1-3 程序流程图
2.6【数据结构设计】
typedef pair<int, double> id_pair;
struct Item
{
int item_id;
map<int, double> school_grade;
};
struct School
{
int school_id;
map<int, double> item_grade;
};
vector item_list;
vector school_list;
对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用动态数组。
3、测试结果
图1-4 进入系统
图1-5 添加项目
图1-6 添加学校
图1-7 添加分数
图1-8 添加分数
图1-9 按照学校查询分数
注:其他功能可以自己去实现,这里就不一一列出了。
4、项目小结
1.要思路清晰,分析需要哪些功能,要如何实现,才能更好的设计。
2.算法知识仍要巩固,即使是学过并进行实践,现在用的时候仍然不熟练,一定要深刻理解算法的每一步。
3.使用交互性的菜单栏方便,但是没有写入文件中,导致每一次都需要重新输入,可以在数据的存储方面进一步改进。
5、参考文献
以及其他网络资源
6、项目源码
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
class Project {
public:
int projectCode;
string Name;
int teamnum; //参赛队伍数量
int* jointeam = new int[10]; //参赛队伍编号
int* score = new int[10]; //参赛队伍成绩
};
class School {
public:
int schoolCode; //学校编码
string schoolName; //学校名称
int Teamnum; //参加队伍数量
int sum; //项目总分
};
int m; //项目数量
int n; //学校数量
vector<Project>project(10); //项目信息
vector<School>school(10); //学校信息
void add()
{
string temp;
for (int i = 0; i < m; i++) {
project[i].projectCode = i + 1;
cout << " 请输入第" << i + 1 << "个项目的名称:" << endl;
cin >> temp;
project[i].Name = temp;
cout << " 添加成功!" << endl;
cout << " -------------------------------------------------------" << endl;
}
for (int i = 0; i < m; i++) {
cout << " 项目编号" << project[i].projectCode << "项目名称" << project[i].Name << endl;
cout << " -------------------------------------------------------" << endl;
}
for (int i = 0; i < n; i++) {
school[i].schoolCode = i + 1;
cout << " 请输入第" << i + 1 << "个学校的名称" << endl;
cin >> temp;
school[i].schoolName = temp;
cout << " 添加成功!" << endl;
cout << " =========================================================" << endl;
}
for (int i = 0; i < n; i++) {
cout << " 学校编号 " << school[i].schoolCode << " 学校名称" << school[i].schoolName << endl;
}
for (int i = 0; i < m; i++) {
int a;
do
{
cout << " 请输入大于2的数" << endl;
cout << " 请输入参加** " << project[i].Name << " **的学校数量:" << endl;
cin >> a;
} while (a <= 1);
int b;
project[i].teamnum = a;
cout << " 请依次输入参加** " << project[i].Name << " **的学校编号:" << endl;
for (int j = 0; j < project[i].teamnum; j++) {
cin >> b;
project[i].jointeam[j] = b;
cout << " 输入成功" << endl;
cout << " ==================================================================" << endl;
}
cout << " 参加项目** " << project[i].Name << " **的学校有" << endl;
for (int j = 0; j < project[i].teamnum; j++) {
cout << project[i].jointeam[j] << " " << endl;
}
cout << "========" << endl;
cout << " 请依次输入参加** " << project[i].Name << " **的学校的分数" << endl;
for (int j = 0; j < project[i].teamnum; j++) {
int score;
cout << school[j].schoolName << endl;
cin >> score;
if (score >= 0 && score <= 100) {
project[i].score[j] = score;
cout << "输入成功!" << endl;
}
else {
cout << "您的输入有误!" << endl;
exit(0);
}
}
cout << "========" << endl;
cout << "显示如下:" << endl;
for (int j = 0; j < project[i].teamnum; j++) {
cout << "编号" << project[i].jointeam[j] << "的学校取得的成绩:" << project[i].score[j];
cout << "----------------" << endl;
}
cout << "========" << endl;
}
}
void save()
{
fstream f;
f.open("data.txt", ios::out);
for (int i = 0; i < m; i++)
{
f << project[i].projectCode << ' ' << project[i].Name << ' ' << project[i].Name << endl;
}
f << endl;
for (int i = 0; i < n; i++) {
f << school[i].schoolCode << ' ' << school[i].schoolName << endl;
}
f.close();
}
void read()
{
fstream f;
f.open("data.txt", ios::in);
for (int i = 0; i < m; i++)
{
f >> project[i].projectCode >> project[i].Name >> project[i].Name;
}
for (int i = 0; i < n; i++) { //保存学校信息
f >> school[i].schoolCode >> school[i].schoolName;
}
f.close();
}
void printByCodes() { //学校编号输出
int sum = 0;
for (int i = 0; i < n; i++) {
cout << " ------------------------------------------------------" << endl;
cout << " 学校编号" << school[i].schoolCode << endl;
cout << " 学校名称" << school[i].schoolName << endl;
cout << " ------------------------------------------------------" << endl;
for (int j = 0; j < m; j++) {
for (int k = 0; k < project[j].jointeam[k]; k++) {
if (project[j].jointeam[k] == school[i].schoolCode) {
cout << "参赛项目:" << project[j].Name << endl;
cout << "取得成绩:" << project[j].score[k] << endl;
cout << "=======" << endl;
sum += project[j].score[k];
}
}
}
cout << "学校的总分:" << sum << endl;
school[i].sum = sum;
sum = 0;
cout << " ================================================" << endl;
}
}
void printByScore() { //排序
int temp = 0;
int* temps = new int[n];
for (int i = 0; i < n; i++) {
temps[i] = school[i].sum;
}
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (temps[i] > temps[j]) {
temp = temps[i];
temps[i] = temps[j];
temps[j] = temp;
}
}
}
cout << "按照总分排序如下:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (temps[i] == school[j].sum) {
cout << "总分第" << n - i << "名的学校是" << school[j].schoolName << endl;
cout << "其总分是:" << school[j].sum << endl;
cout << "===============" << endl;
}
}
}
}
void search() { //按学校编号查询
cout << "请输入查询的学校编号" << endl;
cout << " ";
int scode;
cin >> scode;
cout << "请输入查询的项目编号" << endl;
int pcode;
cin >> pcode;
cout << "========" << endl;
int* temps = new int[project[pcode - 1].teamnum];
int len = sizeof(temps) / sizeof(int);
for (int i = 0; i < len; i++) {
temps[i] = project[pcode - 1].score[i];
}
int temp = 0;
for (int i = 0; i < len; i++) {
for (int j = i; j < len; j++) {
if (temps[i] > temps[j]) {
temp = temps[i];
temps[i] = temps[j];
temps[j] = temp;
}
}
}
cout << "========" << endl;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (project[pcode - 1].score[i] == temps[j]) {
cout << "该学校在该项目中排第" << j << "名" << endl;
}
}
}
}
void TopThree() {
//按项目编号查询取得前三名的学校
cout << "========" << endl;
cout << "请输入您想要查询的项目的编号:" << endl;
int code;
cin >> code;
int* temps = new int[project[code - 1].teamnum];
int len = sizeof(temps) / sizeof(int);
for (int i = 0; i < len; i++) {
temps[i] = project[code - 1].score[i];
}
int temp = 0;
for (int i = 0; i < len; i++) {
for (int j = i; j < len; j++) {
if (temps[i] > temps[j]) {
temp = temps[i];
temps[i] = temps[j];
temps[j] = temp;
}
}
}
cout << "========" << endl;
for (int i = 0; i < len; i++) {
for (int j = 0; j < n; j++) {
if (temps[len - 1] == project[code - 1].score[i]) {
if (school[j].schoolCode == project[code - 1].jointeam[i]) {
cout << "第一名的学校是:" << school[j].schoolName << endl;
cout << "========" << endl;
}
}
if (temps[len - 2] == project[code - 1].score[i]) {
if (school[j].schoolCode == project[code - 1].jointeam[i]) {
cout << "第二名的学校是:" << school[j].schoolName << endl;
cout << "========" << endl;
}
}
if (temps[len - 3] == project[code - 1].score[i]) {
if (school[j].schoolCode == project[code - 1].jointeam[i]) {
cout << "第三名的学校是:" << school[j].schoolName << endl;
cout << "========" << endl;
}
}
}
}
}
int main()
{
bool l = true;
do {
l = true;
cout << " -------------------------------------------" << endl;
cout << " * 欢迎使用计算机设计大赛管理系统V1.0" << endl;
cout << " * 请输入项目的个数:";
cin >> m;
if (m <= 3 || m >= 10) {
cout << " * 输入有误,重新输入" << endl;
l = false;
}
} while (l == false);
do {
l = true;
cout << " * 请输入学校的数目:";
cin >> n;
if (n <= 0) {
cout << " * 输入有误,重新输入" << endl;
cout << " ============================================" << endl;
l = false;
}
} while (l == false);
read();
while (true) {
cout << " ****************************************************** " << endl;
cout << " * 计算机设计大赛管理系统 * " << endl;
cout << " * 1.添加信息 * " << endl;
cout << " * 2.按学校编号排序输出 * " << endl;
cout << " * 3.按项目总分排序输出 * " << endl;
cout << " * 4.查询学校某个项目的获奖情况 * " << endl;
cout << " * 5.查询取得前三名的学校 * " << endl;
cout << " * 0.退出 * " << endl;
cout << " ****************************************************** " << endl;
cout << " 请输入选择:" << endl;
int option = -1;
cin >> option;
if (option != 0 && option != 1 && option != 2 && option != 3 && option != 4 && option != 5) {
cout << " 输入有误" << endl;
cout << " ======================================================" << endl;
exit(0);
}
switch (option) {
case 1:
add(); //添加信息
save();
break;
case 2:
printByCodes(); //输出信息
break;
case 3:
printByScore(); //根据分数输出
break;
case 4:
search(); //查询
break;
case 5:
TopThree(); //前三名显示
break;
case 0:
cout << "谢谢使用!" << endl;
cout << "========" << endl;
exit(0);
}
}
return 0;
}
注:资料来源于网络,侵权联系删除。