2301_80928674 2023-12-07 16:20 采纳率: 100%
浏览 4
已结题

初始化列表问题以及对象引用数据在不同文件的处理

1.设计一个类,成员变量包括学号、姓名、性别、年龄、2门或更多的成绩;
2.完成以下功能:
(1)由键盘输入学生个数 n ;
(2)键盘输入每个学生的学号等基本信息;
(3)计算每个学生的平均成绩;
(4)判断每个学生是否有不及格的课程;
(5)输出每个学生的基本信息、平均成绩、是否及格;
3.要求
1.类声明放在头文件(*. h )中;
2.成员函数定义放在源文件(*. cpp )中;
3.主函数放在源文件( file . cpp )中

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-07 19:09
    关注

    【以下回答由 GPT 生成】

    首先,我们可以创建一个名为"Student"的类来表示一个学生对象。在类的声明中,我们需要包含学号、姓名、性别、年龄和成绩的数据成员。然后,我们可以编写成员函数来实现功能的要求。

    以下是一个可能的解决方案:

    // Student.h
    
    #ifndef STUDENT_H
    #define STUDENT_H
    
    #include <string>
    #include <vector>
    
    class Student {
    public:
        // 构造函数
        Student();
        // 设置学生基本信息
        void setBasicInfo(int id, const std::string& name, const std::string& gender, int age);
        // 添加学生的一门成绩
        void addScore(double score);
        // 计算平均成绩
        double calculateAverageScore() const;
        // 判断是否有不及格的课程
        bool hasFailedCourse() const;
        // 输出学生的基本信息、平均成绩和是否及格
        void displayInfo() const;
    
    private:
        int studentId;
        std::string studentName;
        std::string studentGender;
        int studentAge;
        std::vector<double> scores;
    };
    
    #endif
    
    // Student.cpp
    
    #include "Student.h"
    #include <iostream>
    
    Student::Student() {
        studentId = 0;
        studentName = "";
        studentGender = "";
        studentAge = 0;
    }
    
    void Student::setBasicInfo(int id, const std::string& name, const std::string& gender, int age) {
        studentId = id;
        studentName = name;
        studentGender = gender;
        studentAge = age;
    }
    
    void Student::addScore(double score) {
        scores.push_back(score);
    }
    
    double Student::calculateAverageScore() const {
        if (scores.empty()) {
            return 0.0;
        }
    
        double sum = 0.0;
        for (double score : scores) {
            sum += score;
        }
        return sum / scores.size();
    }
    
    bool Student::hasFailedCourse() const {
        for (double score : scores) {
            if (score < 60) {
                return true;
            }
        }
        return false;
    }
    
    void Student::displayInfo() const {
        std::cout << "学号:" << studentId << std::endl;
        std::cout << "姓名:" << studentName << std::endl;
        std::cout << "性别:" << studentGender << std::endl;
        std::cout << "年龄:" << studentAge << std::endl;
        std::cout << "平均成绩:" << calculateAverageScore() << std::endl;
        std::cout << "是否及格:" << (hasFailedCourse() ? "不及格" : "及格") << std::endl;
    }
    
    // main.cpp
    
    #include "Student.h"
    #include <iostream>
    
    int main() {
        int numStudents;
        std::cout << "请输入学生数量:";
        std::cin >> numStudents;
    
        std::vector<Student> students;
        for (int i = 0; i < numStudents; i++) {
            int id;
            std::string name;
            std::string gender;
            int age;
            std::cout << "请输入第 " << (i+1) << " 个学生的学号:";
            std::cin >> id;
            std::cout << "请输入第 " << (i+1) << " 个学生的姓名:";
            std::cin >> name;
            std::cout << "请输入第 " << (i+1) << " 个学生的性别:";
            std::cin >> gender;
            std::cout << "请输入第 " << (i+1) << " 个学生的年龄:";
            std::cin >> age;
    
            Student student;
            student.setBasicInfo(id, name, gender, age);
    
            for (int j = 0; j < 2; j++) {
                double score;
                std::cout << "请输入第 " << (j+1) << " 门成绩:";
                std::cin >> score;
                student.addScore(score);
            }
    
            students.push_back(student);
        }
    
        for (const Student& student : students) {
            student.displayInfo();
        }
    
        return 0;
    }
    

    这个解决方案中,我们创建了一个头文件"Student.h"来包含类的声明,并在头文件中使用了宏保护来防止头文件被重复包含。头文件中包含了类的数据成员和成员函数的声明。

    然后,我们在源文件"Student.cpp"中实现了类的成员函数。通过实现类的成员函数,我们可以让这些函数在不同的源文件中实现,而不是都写在主函数"main.cpp"中。

    在主函数"main.cpp"中,我们首先接受键盘输入的学生数量,并使用一个循环来逐个输入每个学生的基本信息和两门成绩。然后,我们将每个学生对象存储在一个向量中,并在最后遍历向量来输出每个学生的基本信息、平均成绩和是否及格。

    这个解决方案满足了问题的要求,并提供了一个良好的代码组织结构,使得类的声明和实现可以分离在不同的文件中,提高了代码的可读性和可维护性。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 创建了问题 12月7日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境