歌手比赛评分系统 您所在的位置:网站首页 唱歌比赛评委打分表 歌手比赛评分系统

歌手比赛评分系统

2024-06-25 14:46| 来源: 网络整理| 查看: 265

(一) 需求和规格说明

对一次歌手比赛的成绩进行管理,功能要求:

1、输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算

出总成绩和平均成绩(去掉最高分,去掉最低分)。

2、显示主菜单如下:

1)输入选手数据

2)评委打分

3)成绩排序(按平均分)

4)数据查询

5)追加选手数据

6)写入数据文件

7)退出系统。

(二) 设计

根据上述需求,运用链表存储歌手的数据,

1.数据的生成

歌手比赛选手首先我们需要歌手的基本信息,将每一位用户的编号、姓名输入系统中,然后进行评委打分,之后我们对数据进行处理分析,计算出总分和平均值,并以.txt文件的格式储存起来。

2.数据的存储结构

考虑到一个宿舍的人员是有限的,所以可以用链表进行存储。宿舍的人员设计为结构体变量:struct singer{

long lNum;

char name[20];

float fScore[10];

float sum1, sum2, max, min, average;

struct singer *pNext;

};

其中包含选手编号、姓名、评委打分、总分(去除最高分和最低分)、最高分数、最低分数和平均分。然后我们在主函数当中定义一个结构指针struct singer *spHead,作为链表的头结点,然后依次创建下一个结构体对他们进行遍历输入存储。

3.功能的设计

函数功能的介绍

接收选手数据 :struct singer *CreatLiList(void);

评委打分:void score(struct singer *);

遍历输出数歌手数据:void TraverLiList(struct singer *);

追加选手数据:int AppendNode(struct singer *,long , char *, float*);

删除数据:int DeleteNode(struct singer *,long);

搜索数据:int SearchNode(struct singer *,long );

退出系统,删除链表数据:struct singer *ReleaseLiList(struct singer *);

链表数据根据平均分排序:struct singer* SortList(struct singer* );

将数据写入文件:将数据写入文件:void input(struct singer *);

输入选手数据

用户选择功能1之后,我们对输入的歌手的编号和姓名进行统计存储,直到用户输入-1时,我们默认接受数据完毕,返回主程序功能页面。

评委打分

用户选择功能1之后,我们要根据用户输入的歌手的编号先对链表进行查找,如果歌手编号输入错误,则提醒用户重新输入。找到该歌手之后,提醒用户输入的10评委的打分成绩,同时将他们存进结构体里面的数组,我们一边接受一边对成绩进行统计,将总分最高分和最低分计算出来,然后用总分减去最高分和最低分,然后除以8得到歌手的实际平均分数,这将作为我们下一步进行排序的重要依据。

(3)成绩排序(按平均分)

根据第二部统计出的平均分数,我们对链表数据进行插入排序。

思路: 插入排序,顾名思义就是在两个节点之间插入另一个节点,并且保持序列是有序的。如果当前要将节点cur插入到节点pre之后,我们只需要知道cur的前驱和插入位置(其实就是要插在哪个节点之后)就可以了。

(4)歌手数据查询

      根据输入编号,对链表进行遍历循环,直到找到相应的歌手编号,并对他的成绩和个人信息进行输出。

追加选手数据

      输入待追加的选手编号,我们将开辟在链表的最后开辟新的结构体变量内存单元,并对选手的姓名和评分进行录入。

(6)写入数据文件

  我们对歌手信息进行接受整理和排序之后将歌手的信息存入桌面下的txt文件中例如:C:\\Users\\fengling\\Desktop\\歌手比赛打分数据统计.txt。这样可以在桌面打开,然后查看歌手排序好的信息。

(7)遍历显示数据

考虑到对歌手的信息可能进行多次的修改,我们要检测程序运行的准确性。所以每一步操作之后,都可以选择功能7,对选手数据进行遍历输出。

删除选手数据

    考虑到对歌手可能退赛并没有参加比赛也没有相应的分数,所以我们可以从链表中删除该选手的编号和姓名信息,达到节约内存、方便显示管理的目的。

退出系统

     退出系统时对链表内存进行释放,然后结束退出程序循环。

代码 #include #include #include #include #include using namespace std; struct singer{ long lNum; char name[20]; float fScore[10]; float sum1, sum2, max, min, average; struct singer *pNext; }; const int SIZE = sizeof(struct singer); //界面优化 class Interface { private: int line;//操作数的行数 string *name; static int nowline; public: void GetMessage(int line1,string *name1) { line=line1; name=new string [line]; name=name1; } static void AddNowLine() { nowline++; } void ShowHead() { ShowSpace(); for(int i=0;i lNum != lArg){ spCur = spCur -> pNext; } if (spCur ->lNum == lArg){ cout pNext; //断开节点cur cur->pNext = tmp->pNext; //插入 tmp->pNext = cur; cur = pre->pNext; //继续处理下一个节点 } else{ //无需插入 pre = pre->pNext; cur = cur->pNext; } } cout pNext; } //将数据写入文件 void input(struct singer *); void input(struct singer *sp) { fstream outFile; outFile.open("C:\\Users\\fengling\\Desktop\\歌手比赛打分数据统计.txt", ios::out); if (!outFile){ cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有