diff --git a/Untitled3.cpp b/Untitled3.cpp new file mode 100644 index 0000000..f1b0102 --- /dev/null +++ b/Untitled3.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include + +using namespace std; + +const int MAX_STUDENTS = 100; // 最大学生数 + +struct StudentScore { + string name; + int score; +}; + +int main() { + StudentScore students[MAX_STUDENTS]; + int numStudents = 0; // 实际学生数 + + // 读取文件数据 + ifstream inFile("student_scores.txt"); + if (inFile.is_open()) { + while (inFile >> students[numStudents].name >> students[numStudents].score) { + numStudents++; + } + inFile.close(); + cout << "已从文件中读取 " << numStudents << " 个学生成绩数据." << endl; + } else { + cout << "无法打开文件,将从头开始." << endl; + } + + while (true) { + cout << "=== 学生成绩信息管理系统 ===" << endl; + cout << "1. 录入学生成绩" << endl; + cout << "2. 修改/删除学生成绩" << endl; + cout << "3. 查看统计信息" << endl; + cout << "4. 退出系统" << endl; + cout << "请输入您的选择(1-4): "; + + int choice; + cin >> choice; + + switch (choice) { + case 1: { // 录入学生成绩 + if (numStudents == MAX_STUDENTS) { + cout << "已达到最大学生数,无法继续录入." << endl; + break; + } + cout << "请输入学生姓名: "; + cin >> students[numStudents].name; + cout << "请输入学生成绩(0-100): "; + while (!(cin >> students[numStudents].score) || students[numStudents].score < 0 || students[numStudents].score > 100) { + cout << "无效的成绩,请重新输入(0-100): "; + cin.clear(); + cin.ignore(numeric_limits::max(), '\n'); + } + numStudents++; + cout << "学生成绩录入成功!" << endl; + break; + } + case 2: { // 修改/删除学生成绩 + if (numStudents == 0) { + cout << "当前没有任何学生成绩数据." << endl; + break; + } + cout << "请输入要修改/删除的学生编号(0-" << numStudents - 1 << "): "; + int index; + cin >> index; + if (index < 0 || index >= numStudents) { + cout << "无效的编号!" << endl; + break; + } + cout << "学生姓名: " << students[index].name << ", 当前成绩: " << students[index].score << endl; + cout << "1. 修改成绩" << endl; + cout << "2. 删除学生" << endl; + cout << "请输入您的选择(1-2): "; + int subChoice; + cin >> subChoice; + if (subChoice == 1) { + cout << "请输入新的成绩(0-100): "; + while (!(cin >> students[index].score) || students[index].score < 0 || students[index].score > 100) { + cout << "无效的成绩,请重新输入(0-100): "; + cin.clear(); + cin.ignore(numeric_limits::max(), '\n'); + } + cout << "成绩修改成功!" << endl; + } else if (subChoice == 2) { + for (int i = index; i < numStudents - 1; i++) { + students[i] = students[i + 1]; + } + numStudents--; + cout << "学生信息删除成功!" << endl; + } else { + cout << "无效的选择!" << endl; + } + break; + } + case 3: { // 查看统计信息 + if (numStudents == 0) { + cout << "当前没有任何学生成绩数据." << endl; + break; + } + int maxScore = 0, minScore = 100; + int totalScore = 0; + for (int i = 0; i < numStudents; i++) { + if (students[i].score > maxScore) { + maxScore = students[i].score; + } + if (students[i].score < minScore) { + minScore = students[i].score; + } + totalScore += students[i].score; + } + double avgScore = static_cast(totalScore) / numStudents; + cout << "学生成绩统计信息:" << endl; + cout << "最高分: " << maxScore << endl; + cout << "最低分: " << minScore << endl; + cout << "平均分: " << fixed << setprecision(2) << avgScore << endl; + break; + } + case 4: { // 退出系统 + // 保存数据到文件 + ofstream outFile("student_scores.txt"); + if (outFile.is_open()) { + for (int i = 0; i < numStudents; i++) { + outFile << students[i].name << " " << students[i].score << endl; + } + outFile.close(); + cout << "学生成绩数据已保存到文件." << endl; + } else { + cout << "无法打开文件,学生成绩数据未保存." << endl; + } + cout << "程序已退出." << endl; + return 0; + } + default: + cout << "无效的选择,请重试." << endl; + break; + } + } + + return 0; +}