C++程序设计课程设计-歌手比赛系统

2022/6/7

一、大型实验的内容

歌手比赛系统用于对歌手比赛的成绩进行管理,要求完成的主要的功能包括菜单实现功能选择、进行若干场次的唱歌比赛信息管理。可以完成输入、追加、修改和删除选手数据,进行评委打分,计算总成绩和平均成绩并能按照单个评委成绩、总成绩进行排序等工作。要求使用学习过的C/C++程序设计的知识完成歌手比赛系统的设计与实现。

二、运行环境

歌手比赛系统在Visual Studio 2019平台下开发。
操作系统:
Windows 10
硬件环境:
处理器:11th Gen Intel® Core™ i7-1165G7 @ 2.80GHz 2.80 GHz
内存:16.0 GB
系统类型:64位操作系统

三、实验课题分析

3.1 歌手比赛系统的主要功能

歌手比赛系统主要功能为:菜单功能选择、选手数据管理、评委打分管理、唱歌比赛信息管理,可以计算出总成绩和平均成绩(去掉最高分,去掉最低分),并能按照单个评委成绩,总成绩进行排序等工作。详细的系统功能结构为图1所示。
在这里插入图片描述
系统各模块的功能具体描述为:

1、菜单功能选择
选择功能,输入需要的功能,成功后进行相应的功能模块。第一次登录要从文件读入所有的信息,包括选手评委信息和成绩信息。
退出登录的时候则要保存当前系统的所有状态,包括选手评委信息和成绩信息。

2、选手数据管理
可以查看每个选手的编号和姓名,以及评委成绩。
可以输入、追加、修改和删除选手数据。

3、评委打分管理
输入每个选手的数据包括编号、姓名、十个评委的成绩,进行打分。
能够计算出总成绩和平均成绩(去掉最高分,去掉最低分),并能按照单个评委成绩,总成绩进行排序。

4、唱歌比赛信息管理
可以进行若干场次的唱歌比赛信息管理。
进入选择状态,根据提示依次输入唱歌比赛的基本信息,进入选择的比赛。

3.2 系统分析及设计

系统涉及对象有三个基本类:菜单类、歌手类和比赛类。

可以采用面向对象的方式实现歌手比赛系统,根据不同的需求,使用对象分为菜单以及比赛和歌手。

分别设计菜单类、比赛类、歌手类实现功能。
用文本文件进行数据的保存,需要保存的数据主要包括歌手编号、歌手姓名、歌手总分和平均分和各评委打分。实现所有的文本操作相关的功能。

3.3系统的实现

(1)类的编写
系统工程名为:歌手比赛系统。包含了menu类和singer类。menu类实现主菜单转换,singer类储存歌手数据(编号、姓名、总分、平均分以及个评委打分)
具体类结构声明如下:

  • menu类:
class menu {
public:
	void inter();//总场次选择
	void run();//运行
	void compete(int x);//比赛功能实现
	void write();//写入数据
	competition com[5];//五场比赛
};
  • singer类:
class singer {
public:
	int num;//编号
	string name;//姓名
	double score[pw];//评委打分
	double sum;//总成绩
	double ave;//平均成绩
	singer* next;
	void mark();//计算总分和平均分
	singer();//构造函数
};

(2)链表的使用
系统实现采用文件的输入输出流对文本数据进行读取与写入,但是由于歌手编号、歌手姓名、歌手总分和平均分和各评委打分都是一个数据的集合,于是对数据的存储组织使用了单向链表。
因为歌手比赛系统在输入、追加、修改、删除、查询、排序的时候都需要处理大量的数据,所以使用链表十分必要。在singer类的基础上定义一个对应的competition类来管理每场比赛歌手数据,具体的结构声明如下:

class competition {
public:
	competition();//构造函数
	~competition();//析构函数
	void input();//输入
	void add();//追加
	void revise();//修改
	void deletee();//删除
	void search();//查询
	void pwdf();//评委打分
	void sortt();//排序
	singer* sorttt(singer* head);//快速排序
	singer* head;//链表
	int num;//歌手人数
};

在运用时,令当前歌手的next结点指向新的歌手结点,即结点的指针next保存新的歌手结点的地址,以此类推,所有歌手数据就通过链表的形式串联起来了。

歌手比赛系统的信息的管理就具体表现为链表的操作。拿歌手数据来说,歌手数据的输入、追加、修改、删除、查询、排序与链表的输入、追加、修改、删除、查询、排序对应。

四、实验调试、测试、运行记录及分析

遇到的问题及解决方法如下:

问题1:

问题描述:开始修改评委打分后无法同步修改总成绩和平均成绩。
解决方法:没有重新计算导致的错误,在修改段添加分数计算函数mark()。

问题2:

问题描述:排序后编号姓名与成绩无法匹配。
解决方法:singer类中数据比较多,更改采用快速排序的快慢指针直接修改。

问题3:

问题描述:运行结束退出系统时,显示两次“已退出系统”。
解决方法:由于是再次在compete()函数里运行run()再执行退出,先退出run()函数会在compete()函数内再次判断,需在重新回到上一个界面代码段直接写入return结束程序。

五、实验总结

我设计的歌手比赛系统基本满足任务书的功能要求,类的结构和关系清晰,功能完善,而且在批量数据存储上采用了链表,在空间的利用率、集合数据操作(添加和删除)上具有优势。也能支持多种模式的数据处理。
存在的缺点主要是对于比赛场次管理方面,只能利用于已知固定场次的比赛数据管理。数据读写只能按比赛场次顺序写入.txt。
通过这次C++的大型实验,我深刻的明白到:课本知识与实践能力相结合的重要性。要深刻熟练掌握系统知识与具体实践之间的关系。实践是认识的来源。认识是主体对客体的能动的反映,这种反映只有在实践中、在主体和客体的相互作用中才能实现。实践是认识发展的动力。认识产生于实践的需要,推动人们不断进行新的探索和研究。实践是检验认识的真理性的唯一标准。只有把主观和客观联系起来加以比较和对照的东西,才能检验主观认识与客观事物是否相符合。唯一能够满足这一要求的,就是处在主观和客观交汇点上的实践。实践是认识的目的。认识从实践中来,最终还要回到实践中去。因此,我们需要坚持一切从实际出发,实事求是,充分发挥主观能动性,不断解放思想,与时俱进,以求真务实的精神探求事物的本质和规律,用科学的理论武装头脑、指导实践。

六、附录:源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闻闻闻闻笛声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值