将客 2024-06-17 21:15 采纳率: 96.6%
浏览 1
已结题

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

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
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<<"按学号删除学生记录"<<endl;

  • 写回答

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 为相应的变量名。

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月17日
  • 已采纳回答 6月17日
  • 创建了问题 6月17日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价