定义一个学生类,设计公有成员函数:构造函数,复制构造函数等构造函数,输出学生基本信息函数,修改学生基本信息函数
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
// 构造函数
Student(int id, string name) : stu_id_(id), name_(name)
{
++num_students_; // 学生人数加 1
}
// 复制构造函数
Student(const Student &other) : stu_id_(other.stu_id_), name_(other.name_)
{
++num_students_; // 学生人数加 1
}
// 输出学生基本信息的函数
void DisplayInfo() const
{
cout << "学号: " << stu_id_ << ", 姓名: " << name_ << endl;
}
// 修改学生基本信息的函数
void SetInfo(int id, string name)
{
stu_id_ = id;
name_ = name;
}
// 返回是否有挂科记录
bool IsFail() const
{
return is_fail_;
}
// 返回学生学号
int GetStuId() const
{
return stu_id_;
}
// 输入学号、各课程号与成绩,并同时修改成员 is_fail_、num_lessons_
void InputScore();
// 输出各课程号与成绩
void DisplayAll() const;
// 输出挂科课程
void DisplayFail() const;
// 将各课程成绩升序,使得课程号序号与成绩对应升序排列,并输出
void Sort();
private:
static int num_students_; // 学生人数(静态成员数据)
const int stu_id_; // 学号(常数成员数据)
string name_; // 姓名(常数成员数据)
int lesson_ids_[5]; // 各课程号(1门课 ==> 设最多 5 门课程)
float scores_[5]; // // 各课程成绩(1 门课 ==> 存储 5 门课成绩)
bool is_fail_; // 是否挂科标志
int num_lessons_; // 已输入的课程数
};
// 定义学生类的友元类:教师类
class Teacher
{
public:
// 修改学生的各科课程成绩
void ModifyScore(Student &student, int lesson_id, float score);
// 输出挂科学生名单
void DisplayFailStudents() const;
// 输出所有学生名单
void DisplayStudents() const;
};
int Student::num_students_ = 0; // 初始化静态成员数据
// 输入学号、各课程号与成绩,并同时修改成员 is_fail_、num_lessons_
void Student::InputScore()
{
cout << "输入课程数: ";
cin >> num_lessons_;
for (int i = 0; i < num_lessons_; ++i)
{
cout << "输入第 " << i + 1 << " 门课的课程号和成绩: ";
cin >> lesson_ids_[i] >> scores_[i];
}
}
// 输出各课程号与成绩
void Student::DisplayAll() const
{
for (int i = 0; i < num_lessons_; ++i)
{
cout << "课程号: " << lesson_ids_[i] << ", 成绩: " << scores_[i] << endl;
}
}
// 输出挂科课程
void Student::DisplayFail() const
{
cout << "挂科课程: ";
for (int i = 0; i < num_lessons_; ++i)
{
if (scores_[i] < 60)
{
cout << lesson_ids_[i] << " ";
}
}
cout << endl;
}
// 将各课程成绩升序,使得课程号序号与成绩对应升序排列,并输出
void Student::Sort()
{
// 冒泡排序
for (int i = 0; i < num_lessons_; ++i)
{
for (int j = 0; j < num_lessons_ - i - 1; ++j)
{
if (scores_[j] > scores_[j + 1])
{
swap(scores_[j], scores_[j + 1]);
swap(lesson_ids_[j], lesson_ids_[j + 1]);
}
}
}
cout << "按成绩升序排列后的课程号和成绩: " << endl;
for (int i = 0; i < num_lessons_; ++i)
{
cout << "课程号: " << lesson_ids_[i] << ", 成绩: " << scores_[i] << endl;
}
}
// 修改学生的各科课程成绩
void Teacher::ModifyScore(Student &student, int lesson_id, float score)
{
for (int i = 0; i < student.num_lessons_; ++i)
{
if (student.lesson_ids_[i] == lesson_id)
{
student.scores_[i] = score;
return;
}
}
}
// 输出挂科学生名单
void Teacher::DisplayFailStudents() const
{
cout << "挂科学生: " << endl;
for (int i = 0; i < Student::num_students_; ++i)
{
if (students_[i].IsFail())
{
students_[i].DisplayInfo();
}
}
}
// 输出所有学生名单
void Teacher::DisplayStudents() const
{
cout << "学生: " << endl;
for (int i = 0; i < Student::num_students_; ++i)
{
students_[i].DisplayInfo();
}
}
int main()
{
// 定义一个班,班级有 10 位学生
Student students[10];
// 基本信息的设置
for (int i = 0; i < 10; ++i)
{
students[i].SetInfo(10000 + i, "学生 " + to_string(i + 1));
}
// 传入课程号和成绩
for (int i = 0; i < 10; ++i)
{
students[i].InputScore();
}
// 定义一个教师
Teacher teacher;
// 修改学生的各科课程成绩
teacher.ModifyScore(students[0], 1001, 90);
teacher.ModifyScore(students[0], 1002, 80);
teacher.ModifyScore(students[1], 1001, 70);
teacher.ModifyScore(students[1], 1002, 60);
teacher.ModifyScore(students[2], 1001, 50);
teacher.ModifyScore(students[2], 1002, 40);
teacher.ModifyScore(students[3], 1001, 30);
teacher.ModifyScore(students[3], 1002, 20);
teacher.ModifyScore(students[4], 1001, 10);
teacher.ModifyScore(students[4], 1002, 0);
// 输出挂科学生名单
teacher.DisplayFailStudents();
// 输出所有学生名单
teacher.DisplayStudents();
return 0;
}
main.cpp:
#include
#include
#include"Student.h"
using namespace std;
void main()
{
int i;
Student a[3];
for(i=0;i<3;i++)
{
cin>>a[i].age>>a[i].name;
a[i].Input(a[i].age,a[i].name);
}
for(i=0;i<3;i++)
{
a[i].Output();
}
}
student.h
#pragma once
#include
#include
using namespace std;
class Student
{
public:
int age;
string name;
int Input(int a, string str);
int Output();
};
Student.cpp
#include “Student.h”
using namespace std;
#include
int Student::Input(int a, string str)
{
a=age;
str=name;
return 0;
}
int Student::Output()
{
cout<<age<<"__"<<name<<endl;
return 0;
}