当前位置: 代码迷 >> 综合 >> 利用上次作业中已定义的日期类 Date, 设计学生类 Student,私有数据成员包括学号和姓名 int id; char name[20]; 和表示入学日期时间对象 Date enrollDa
  详细解决方案

利用上次作业中已定义的日期类 Date, 设计学生类 Student,私有数据成员包括学号和姓名 int id; char name[20]; 和表示入学日期时间对象 Date enrollDa

热度:86   发布时间:2023-12-05 20:29:23.0

利用上次作业中已定义的日期类 Date, 设计学生类 Student,私有数据成员包括学号和姓名 int
id; char name[20]; 和表示入学日期时间对象 Date enrollDate; 以及统计学生对象数目的静态成员
s_number。公有成员函数实现以下功能:

  1. 定义默认构造函数与有参构造函数,实现对所有数据成员的初始化,默认学生对象的名字是
    “ssdut”,默认入学日期为 2020 年 9 月 20 日,默认的学号为 2020001(入学年份与 number 的组
    合) ,每创建一个对象则 s_number与学号自增 1,例如 2020002。
    请大家思考给构造函数的设计,注意合理性 、易用性和 使用的灵活性。
  2. 显示学生相关信息的 show(), 按清晰格式输出学生的所有信息
  3. 获取 s_number的静态成员函数 getNum();
    请给出完整的类定义,并在 main()中进行测试。
int main() 
{
     Student s1;   s1.show(); Student s2("Susan"); s2.show(); Date d3(2020, 2, 29); d3.print(); Student s3("Lily",d3); s3.show(); Date d4(2019,2,29);    // 测试当日期无效时,程序的处理 d4.print(); Student s4("Jack", d4); s4.show(); Student s5("Mike",2020, 3, 21); s5.show(); std::cout << "The number of student is: " << Student::s_getNum() << 
std::endl; }

代码如下:

#include <iostream>
#include <string.h> using namespace std;class Date {
    int year, month, day;
public:Date(int year_, int month_, int day_) :year(year_), month(month_), day(day_) {
    }Date(int year_, int month_) :year(year_), month(month_) {
    }Date(int year_) :year(year_) {
    }Date() {
    }bool set(int y, int m, int d) {
    if (y >= 0 && m > 0 && m <= 12 && d > 0) {
    switch (m) {
    case 1:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 3:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 5:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 7:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 8:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 10:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 12:if (d <= 31) {
    year = y;month = m;day = d;return true;}else return false;case 4:if (d <= 30) {
    year = y;month = m;day = d;return true;}else return false;case 6:if (d <= 30) {
    year = y;month = m;day = d;return true;}else return false;case 9:if (d <= 30) {
    year = y;month = m;day = d;return true;}else return false;case 11:if (d <= 30) {
    year = y;month = m;day = d;return true;}else return false;case 2:if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && d <= 29) {
    year = y;month = m;day = d;return true;}else if (d <= 28) {
    year = y;month = m;day = d;return true;}else return false;}}else return false;}void print() {
    if(set(year,month,day)){
    cout << month << '/' << day << '/' << year << endl;}else cout<<"invalid date"<<endl;}int judge() {
    int deltam;switch (month) {
    case 1:deltam = 0;break;case 2:deltam = 31;break;case 3:deltam = 59;break;case 4:deltam = 90;break;case 5:deltam = 120;break;case 6:deltam = 151;break;case 7:deltam = 181;break;case 8:deltam = 212;break;case 9:deltam = 243;break;case 10:deltam = 273;break;case 11:deltam = 304;break;case 12:deltam = 334;break;}if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) && month > 2) {
    deltam++;}return deltam + day;}
};class Student
{
    
public:Student();Student(const char* name_);Student(const char* name_, Date enrollDate_);Student(const char* name_, int y, int m, int d);~Student();void show() {
    cout << "name:" << name << endl << "id:" << id << endl;enrollDate.print();}static int s_getNum() {
    return s_number;}
private:int id;char name[20];Date enrollDate;static int s_number;
};int Student::s_number = 0;Student::Student()
{
    s_number++;id = 2020000 + s_number;strcpy(name, "ssdut");Date d(2020, 9, 20);enrollDate = d ;
}Student::Student(const char* name_) {
    s_number++;id = 2020000 + s_number;strcpy(name, name_);Date d(2020, 9, 20);enrollDate = d ;
}Student::Student(const char* name_, Date enrollDate_):enrollDate(enrollDate_) {
    s_number++;id = 2020000 + s_number;strcpy(name, name_);
}Student::Student(const char* name_, int y, int m, int d) :enrollDate(y, m, d) {
    s_number++;id = 2020000 + s_number;strcpy(name, name_);
}Student::~Student()
{
    
}int main() {
    Student s1;s1.show();Student s2("Susan");s2.show();Date d3(2020, 2, 29);d3.print();Student s3("Lily", d3);s3.show();Date d4(2019, 2, 29);    // 测试当日期无效时,程序的处理 d4.print();Student s4("Jack", d4);s4.show();Student s5("Mike", 2020, 3, 21);s5.show();cout << "The number of student is: " << Student::s_getNum() <<endl;
}
  相关解决方案