• 关于#c++#的问题:在while(true)添加cout<<"按学号删除学生记录"<<endl


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 将客 2024-06-17 21:15 采纳率: 96.3% 浏览 1 首页/ 编程语言 / 已结题 关于#c++#的问题:在while(true)添加cout<<"按学号删除学生记录"< #include #include #include #include using namespace std; class Date { public: void SetDate() { cout << "请输入年份:"; cin >> year; cout << "请输入月份:"; cin >> month; cout << "请输入日期:"; cin >> day; } int GetYear() { return year; } int GetMonth() { return month; } int GetDay() { return day; } private: int year; int month; int day; }; class Student { public: void InputStudent(Date &birthday) { ofstream outfile("student.txt", ios::app); cout << "请输入学号:"; cin >> num; cout << "请输入姓名:"; cin >> name; birthday.SetDate(); cout << "请输入性别:"; cin >> gender; cout << "请输入三门课成绩:"; cin >> score1 >> score2 >> score3; double average = (score1 + score2 + score3) / 3.0; int max_score = max({score1, score2, score3}); int min_score = min({score1, score2, score3}); outfile << num << " " << name << " " << birthday.GetYear() << " " << birthday.GetMonth() << " " << birthday.GetDay() << " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << " " << max_score << " " << min_score << endl; cout << "学生信息录入成功!" << endl; outfile.close(); } void DisplayAllStudents() { ifstream infile("student.txt"); string line; while (getline(infile, line)) { cout << line << endl; } infile.close(); } void FindStudentByNum(int findnum) { ifstream infile("student.txt"); int num; string line; bool found = false; while (infile >> num) { if (num == findnum) { getline(infile, line); cout << num << " " << line << endl; found = true; break; } getline(infile, line); } infile.close(); if (!found) { cout << "未找到学号为 " << findnum << " 的学生" << endl; } } void AlterDateByNum(int findnum) { // 实现修改日期的方法 // 省略具体实现代码 fstream file("student.txt"); ofstream temp("temp.txt"); int num; string name, gender, line; int year, month, day, score1, score2, score3; double average; bool found = false; while (file >> num >> name >> year >> month >> day >> gender >> score1 >> score2 >> score3 >> average) { if (num == findnum) { Date newDate; newDate.SetDate(); temp << num << " " << name << " " << newDate.GetYear() << " " << newDate.GetMonth() << " " << newDate.GetDay() << " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << endl; found = true; cout << "已成功修改学号为 " << num << " 的学生的出生日期!" << endl; } else { temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << endl; } } file.close(); temp.close(); remove("student.txt"); rename("temp.txt", "student.txt"); if (!found) { cout << "未找到学号为 " << findnum << " 的学生" << endl; } } void AlterScoreByNum(int findnum) { // 实现修改成绩的方法 // 省略具体实现代码 fstream file("student.txt"); ofstream temp("temp.txt"); int num; string name, gender, line; int year, month, day, score1, score2, score3; double average; bool found = false; while (file >> num >> name >> year >> month >> day >> gender >> score1 >> score2 >> score3 >> average) { if (num == findnum) { int newScore1, newScore2, newScore3; cout << "请输入新的三门课成绩: "; cin >> newScore1 >> newScore2 >> newScore3; double newAverage = (newScore1 + newScore2 + newScore3) / 3.0; int newMax = max({newScore1, newScore2, newScore3}); int newMin = min({newScore1, newScore2, newScore3}); temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " " << newScore1 << " " << newScore2 << " " << newScore3 << " " << newAverage << " " << newMax << " " << newMin << endl; found = true; cout << "已成功修改学号为 " << num << " 的学生成绩!" << endl; } else { temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << endl; } } file.close(); temp.close(); remove("student.txt"); rename("temp.txt", "student.txt"); if (!found) { cout << "未找到学号为 " << findnum << " 的学生" << endl; } } private: int num; string name; string gender; int score1, score2, score3; }; int main() { Student stu; Date birthday; int findnum; int choice; while (true) { cout << "***欢迎进入学生管理系统***" << endl; cout << "1. 录入学生信息" << endl; cout << "2. 浏览全部学生记录" << endl; cout << "3. 按学号查找学生记录" << endl; cout << "4. 按学号修改出生日期" << endl; cout << "5. 按学号修改学生成绩" << endl; cout << "6. 退出系统" << endl; cout << "请选择功能:"; cin >> choice; switch (choice) { case 1: stu.InputStudent(birthday); break; case 2: stu.DisplayAllStudents(); break; case 3: cout << "请输入要查找的学生学号:"; cin >> findnum; stu.FindStudentByNum(findnum); break; case 4: cout << "请输入要修改日期的学生学号:"; cin >> findnum; stu.AlterDateByNum(findnum); break; case 5: cout << "请输入要修改成绩的学生学号:"; cin >> findnum; stu.AlterScoreByNum(findnum); break; case 6: cout << "感谢使用,再见!" << endl; return 0; default: cout << "无效的选项,请重新选择。" << endl; break; } } return 0; } 在这段代码里面添加一个实现按一个按学号删除学生记录的功能,即添加一个void DeletestudentIDByNum(int findnum)函数,添加一个case 7:cout<<请输入要删除的学生学号>>;cin>>findnum;在while(true)添加cout<<"按学号删除学生记录"<

    1条回答 默认 最新

    • 阿里嘎多学长 2024-06-17 21:27
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      要在您的C++学生管理系统中添加按学号删除学生记录的功能,您可以按照以下步骤进行:

      1. 编写新的成员函数 DeleteStudentByID(int findnum): 这个函数将检查文件中是否存在具有指定学号的学生记录,并将其删除。
      void Student::DeleteStudentByID(int findnum) {
          fstream file("student.txt");
          ofstream temp("temp.txt");
          string line;
          int num;
          bool found = false;
      
          // 读取原始文件并写入临时文件,跳过要删除的记录
          while (file >> num) {
              getline(file, line); // 读取剩余的行
              if (num != findnum) {
                  temp << num << " " << line << endl; // 写入临时文件,除了要删除的记录
              } else {
                  found = true; // 标记找到要删除的记录
              }
          }
      
          file.close();
          temp.close();
      
          if (found) {
              remove("student.txt"); // 删除原始文件
              rename("temp.txt", "student.txt"); // 重命名临时文件为原始文件名
              cout << "已成功删除学号为 " << findnum << " 的学生记录!" << endl;
          } else {
              cout << "未找到学号为 " << findnum << " 的学生记录。" << endl;
          }
      }
      
      1. main() 函数的 while (true) 循环中添加新的选项: 在循环的选项列表中添加一行输出语句,并在 switch 语句中添加 case 7: 部分。
      int main() {
          // ... 省略其他代码 ...
      
          while (true) {
              cout << "***欢迎进入学生管理系统***" << endl;
              cout << "1. 录入学生信息" << endl;
              cout << "2. 浏览全部学生记录" << endl;
              cout << "3. 按学号查找学生记录" << endl;
              cout << "4. 按学号修改出生日期" << endl;
              cout << "5. 按学号修改学生成绩" << endl;
              cout << "6. 退出系统" << endl;
              // 添加新的选项
              cout << "7. 按学号删除学生记录" << endl;
              cout << "请选择功能:";
              cin >> choice;
              switch (choice) {
                  // ... 省略其他case ...
                  case 7:
                      cout << "请输入要删除的学生学号:";
                      cin >> findnum;
                      stu.DeleteStudentByID(findnum);
                      break;
                  // ... 省略其他case ...
              }
          }
          return 0;
      }
      

      通过这些更改,您的系统将能够让用户通过输入学号来删除对应的学生记录,并从文件中永久移除这些信息。记得在实际代码中替换 stufindnum 为相应的变量名。

      展开全部

      本回答被题主选为最佳回答 , 对您是否有帮助呢?
      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    java面试题整理《集合篇》一
    一个项目设置两个Git地址,实现同时推送到两个Git仓库
    Android开发中System.currentTimeMillis()与SystemClock.uptimeMillis()
    SpringBoot + React Ant Design 实现图片上传到Minio 中
    一文教你处理SpringBoot统一返回格式
    MySQL高级-SQL优化-小结
    Windows平台下OpenCV的编译与安装
    【docker系列】docker-compose的YAML配置文件v2、v3版本详解
    C++ Reference: Standard C++ Library reference: C Library: cwchar: getwchar
    Java反射
  • 原文地址:https://ask.csdn.net/questions/8120015