使用C++编写完整程序1.录入全部歌手的基本信息:歌手编号及姓名。 2.10 个评委的打分随机生成,分数在 0-100 之间,歌手最后得分去掉一个最高分和最低分,求平均值。 3.显示全部歌手的信息。 4.对全部歌手按成绩排序。 5.根据歌手编号,查询该歌手全部信息。 6.添加一个歌手。 7.将全部歌手信息保存到一个文件之中。 8.建立如图 28.1 所示菜单实现上述功能。,菜单为1,输入歌手信息,2评委打分,3成绩排序4数据查询5添加歌手6写入数据文件7退出系统
时间: 2024-03-24 14:39:27 浏览: 162
以下是使用C++编写的完整程序,实现了您提出的需求:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
// 定义歌手结构体
struct Singer {
int id; // 歌手编号
string name; // 歌手姓名
double score; // 歌手得分
};
// 定义评委打分结构体
struct Score {
int id; // 评委编号
double score; // 评委打分
};
// 函数声明
void inputSingersInfo(vector<Singer>& singers); // 录入歌手基本信息
void generateScore(vector<Score>& scores); // 随机生成评委打分
void calculateScore(vector<Singer>& singers); // 计算歌手得分
void displaySingersInfo(vector<Singer>& singers); // 显示全部歌手信息
void sortSingersByScore(vector<Singer>& singers); // 对歌手按成绩排序
void searchSingerById(vector<Singer>& singers); // 根据歌手编号查询歌手信息
void addSinger(vector<Singer>& singers); // 添加一个歌手
void writeToFile(vector<Singer>& singers); // 将全部歌手信息写入文件
int main() {
vector<Singer> singers; // 歌手信息列表
int choice; // 用户选择的操作
do {
// 输出菜单
cout << "========================================" << endl;
cout << "欢迎使用歌手信息管理系统" << endl;
cout << "1. 录入歌手基本信息" << endl;
cout << "2. 评委打分" << endl;
cout << "3. 成绩排序" << endl;
cout << "4. 数据查询" << endl;
cout << "5. 添加歌手" << endl;
cout << "6. 写入数据文件" << endl;
cout << "7. 退出系统" << endl;
cout << "========================================" << endl;
// 获取用户选择
cout << "请选择需要的操作:";
cin >> choice;
switch (choice) {
case 1:
inputSingersInfo(singers);
break;
case 2:
generateScore(singers[0].scores);
calculateScore(singers);
cout << "评委打分完成!" << endl;
break;
case 3:
sortSingersByScore(singers);
displaySingersInfo(singers);
break;
case 4:
searchSingerById(singers);
break;
case 5:
addSinger(singers);
break;
case 6:
writeToFile(singers);
cout << "全部歌手信息已写入文件!" << endl;
break;
case 7:
cout << "感谢使用歌手信息管理系统,再见!" << endl;
break;
default:
cout << "无效的操作,请重新输入!" << endl;
break;
}
cout << endl;
} while (choice != 7);
return 0;
}
// 录入歌手基本信息
void inputSingersInfo(vector<Singer>& singers) {
int n; // 歌手个数
cout << "请输入歌手个数:";
cin >> n;
singers.resize(n); // 调整歌手信息列表的大小
for (int i = 0; i < n; i++) {
cout << "请输入第 " << i + 1 << " 个歌手编号:";
cin >> singers[i].id;
cout << "请输入第 " << i + 1 << " 个歌手姓名:";
cin >> singers[i].name;
// 初始化歌手得分和评委打分
singers[i].score = 0;
singers[i].scores.resize(10);
for (int j = 0; j < 10; j++) {
singers[i].scores[j].id = j + 1;
singers[i].scores[j].score = 0;
}
}
cout << "全部歌手基本信息录入完成!" << endl;
}
// 随机生成评委打分
void generateScore(vector<Score>& scores) {
srand(time(NULL)); // 初始化随机数种子
for (int i = 0; i < 10; i++) {
scores[i].score = rand() % 101; // 生成0-100之间的随机分数
}
}
// 计算歌手得分
void calculateScore(vector<Singer>& singers) {
for (int i = 0; i < singers.size(); i++) {
double sum = 0;
double maxScore = 0, minScore = 100;
for (int j = 0; j < 10; j++) {
sum += singers[i].scores[j].score;
maxScore = max(maxScore, singers[i].scores[j].score);
minScore = min(minScore, singers[i].scores[j].score);
}
singers[i].score = (sum - maxScore - minScore) / 8.0; // 去掉一个最高分和一个最低分,计算平均分
}
}
// 显示全部歌手信息
void displaySingersInfo(vector<Singer>& singers) {
cout << "编号\t姓名\t得分" << endl;
for (int i = 0; i < singers.size(); i++) {
cout << singers[i].id << "\t" << singers[i].name << "\t" << singers[i].score << endl;
}
}
// 对歌手按成绩排序
void sortSingersByScore(vector<Singer>& singers) {
sort(singers.begin(), singers.end(), [](Singer a, Singer b) { return a.score > b.score; }); // 使用Lambda表达式定义排序规则
}
// 根据歌手编号查询歌手信息
void searchSingerById(vector<Singer>& singers) {
int id;
cout << "请输入要查询的歌手编号:";
cin >> id;
for (int i = 0; i < singers.size(); i++) {
if (singers[i].id == id) {
cout << "编号\t姓名\t得分" << endl;
cout << singers[i].id << "\t" << singers[i].name << "\t" << singers[i].score << endl;
return;
}
}
cout << "没有找到编号为 " << id << " 的歌手!" << endl;
}
// 添加一个歌手
void addSinger(vector<Singer>& singers) {
Singer singer;
cout << "请输入新歌手编号:";
cin >> singer.id;
cout << "请输入新歌手姓名:";
cin >> singer.name;
// 初始化新歌手的得分和评委打分
singer.score = 0;
singer.scores.resize(10);
for (int j = 0; j < 10; j++) {
singer.scores[j].id = j + 1;
singer.scores[j].score = 0;
}
singers.push_back(singer); // 将新歌手添加到歌手信息列表中
}
// 将全部歌手信息写入文件
void writeToFile(vector<Singer>& singers) {
ofstream outFile("singers.txt"); // 打开文件
if (outFile) {
outFile << "编号\t姓名\t得分" << endl;
for (int i = 0; i < singers.size(); i++) {
outFile << singers[i].id << "\t" << singers[i].name << "\t" << singers[i].score << endl;
}
outFile.close(); // 关闭文件
}
}
```
注意,为了方便起见,以上程序并未实现函数参数的输入校验和异常处理等功能,如果您需要更为健壮的程序,还需要自行完善这些部分的代码。
阅读全文