C++ 实验二

一、实验目的

1、学会定义及使用类和对象

2、理解成员访问限定符public、private、protected的含义。

3、学会使用类的构造函数和析构函数

4、学会定义及使用类的数据成员和成员函数。


二、实验内容


(一)


定义一个满足如下要求的Date类和对象。

(1)其数据成员包括day、month、year;

(2)可设置日期;

(3)用下面的格式输出日期:日/月/年;

(4)可运行在日期上加一天操作;

(5)可判断是否是闰年

(6)定义Date对象,设置时间,输出该对象提供的时间。


(二)


定义一个学生类

(1)其数据成员为:姓名、学号、总学分、平均成绩

(2)其成员函数有:

1、构造函数:能对学生类的姓名和学号进行初始化,同时应默认将学生类

 中的学分和平均成绩初始化为0。

2、Show函数: 显示该学生总学分和平均成绩。


定义一个班级类

(1)其数据成员为:学生总数,学生信息

(2)其成员函数有:

1、构造函数

2、显示所有学生信息

3、根据学生查找指定学生信息

4、增加学生信息

5、为学生添加成绩和学分,并适时修改平均成绩


(一)

#include<iostream>
using namespace std;

class Date
{
public:
    void set_date();                    //设置日期
    void print_date();                  //打印日期
    void add_date();                    //在日期上加一天
    void show_isLeapYear();            //是否为闰年
private:
    int day;
    int month;
    int year;
    bool isLeapYear();                 //判断是否为闰年
    bool judgeInputDate();             //判断输入日期是否符合规范
};

void Date::set_date()                  //设置日期
{
    cin>>day;
    cin>>month;
    cin>>year;
    while(judgeInputDate()==false)
    {
        cout<<"输入日期不符合规范!请重新输入:"<<endl;
        cin>>day;
        cin>>month;
        cin>>year;
    }
}

void Date::print_date()  //打印日期,格式:日/月/年,例如29/01/1996
{
    if(day<10)
        cout<<"0"<<day;
    else
        cout<<day;
    cout<<"/";
    if(month<10)
        cout<<"0"<<month;
    else
        cout<<month;
    cout<<"/"<<year<<endl;
}

void Date::add_date()                    //在日期上增加一天
{
    day+=1;
    if(month==2)                          //2月份要判断是否为闰年
    {
        if(isLeapYear()==true)
        {
            if(day>29)
            {
                month+=1;
                day-=29;
            }
        }
        else
        {
            if(day>28)
            {
                month+=1;
                day-=28;
            }
        }
    }
    else if((month<=7 && month%2==1) || (month>=8 && month%2==0))
    {
        if(day>31)
        {
            month+=1;
            day-=31;
        }
    }
    else
    {
        if(day>30)
        {
            month+=1;
            day-=30;
        }
    }
}

bool Date::isLeapYear()  //判断是否为闰年
{
    if((year%4==0 && year%100!=0) || year%400==0)
    {
        return true;
    }
    else
        return false;
}

void Date::show_isLeapYear()               //显示是否为闰年
{
    if(isLeapYear()==true)
    {
        cout<<year<<"年是闰年."<<endl;
    }
    else
        cout<<year<<"年不是闰年."<<endl;
}

bool Date::judgeInputDate()           //判断输入的日期是否符合规范
{
    if(month>12 || month<0 || day>=32 || day<0)
        return false;
    if(month==2)
    {
        if(isLeapYear()==true)
        {
            if(day>29)
            {
                return false;
            }
        }
        else
        {
            if(day>28)
            {
                return false;
            }
        }
    }
    else if((month<=7 && month%2==1) || (month>=8 && month%2==0))
    {
        if(day>31)
        {
            return false;
        }
    }
    else
    {
        if(day>30)
        {
            return false;
        }
    }
    return true;
}

int main()
{
    Date date;
    int k;
    cout<<"请输入日期:日 月 年"<<endl;
    date.set_date();
    while(true)
    {
        cout<<"请选择所需的功能:1、输出日期;2、加一天;3、判断是否为闰年;4、重新输入;5、退出"<<endl;
        cin>>k;
        if(k!=1 && k!=2 && k!=3 && k!=4 && k!=5)
        {
            cout<<"输入错误!请重新输入:"<<endl;
            continue;
        }
        if(k==1)
        {
            date.print_date();
        }
        else if(k==2)
        {
            date.add_date();
            date.print_date();
        }
        else if(k==3)
        {
            date.show_isLeapYear();
        }
        else if(k==4)
        {
            cout<<"请输入日期:日 月 年"<<endl;
            date.set_date();
        }
        else if(k==5)
        {
            break;
        }
    }
    return 0;
}

(二)

#include<iostream>
using namespace std;

class Student
{
public:
    Student();                              //构造函数
    ~Student(){};                           //析构函数
    void show();                            //显示学生信息
    double points;                          //总学分
double averScores;                      //平均成绩
int subjects;                               //计入成绩的科目数
    string id;                              //学号
    string name;                            //姓名
};

Student::Student()                          //学生类构造函数
{
    name="";
    id="";
    points=0;
averScores=0;
subjects=0;
}

void Student::show()                        //显示学生信息
{
    cout<<"姓名:"<<name<<endl;
    cout<<"学号:"<<id<<endl;
    cout<<"总学分:"<<points<<endl;
    cout<<"平均成绩:"<<averScores<<endl;
}

class Class
{
public:
    Class();                                 //构造函数
    ~Class(){cout<<"再见!"<<endl;};         //析构函数
    void initializeClass();                  //初始化班级
    void displayStInfo();                    //显示学生信息
    void searchSt();                         //查找学生
    void addStudent();                       //添加学生
    void scoresOperation();                  //成绩学分添加、修改
private:
    int stNumber;                            //班级人数
    int ifSearchSuccess(string s);       //查找学生返回在对象数组中的位置
    Student *students;                    //学生对象指针
};

Class::Class()                               //班级类构造函数
{
    stNumber=0;
    students=new Student[stNumber];
}

void Class::initializeClass()                //初始化班级信息
{
    int i=0;
    students=new Student[2];
    stNumber=2;
    students[0].name="aaa";
    students[0].id="123";
    students[1].name="bbb";
    students[1].id="456";
}

void Class::displayStInfo()                  //显示班里所有学生信息
{
    for(int i=0;i<stNumber;i++)
    {
        students[i].show();
        cout<<endl;
    }
}

void Class::searchSt()                       //搜索学生
{
    string s;
    cout<<"请输入要查找的学生学号:";
    cin>>s;
    int i=ifSearchSuccess(s);
    if(i<0)
    {
        cout<<endl<<"找不到该学生!"<<endl;
    }
    else
    {
        cout<<endl<<"查找成功!"<<endl<<endl;
        students[i].show();
        cout<<endl;
    }
}

void Class::addStudent()                     //添加学生
{
    stNumber+=1;
    Student *p=new Student[stNumber];
    for(int i=0;i<stNumber-1;i++)
    {
        p[i]=students[i];
    }
    cout<<"姓名:";
    cin>>p[stNumber-1].name;
    cout<<"学号:";
    cin>>p[stNumber-1].id;
    cout<<"总学分:";
    cin>>p[stNumber-1].points;
    cout<<"平均分:";
    cin>>p[stNumber-1].averScores;
    delete []students;
    students=p;
    cout<<endl<<"添加成功!"<<endl;
    students[stNumber-1].show();
    cout<<endl;
}

void Class::scoresOperation()              //对某一学生成绩学分进行操作
{
    int k;
    double sum,score,point;
    string s;
    while(true)
    {
        cout<<"输入要进行操作的学生学号:";
        cin>>s;
        int i=ifSearchSuccess(s);
        if(i<0)
        {
            cout<<endl<<"找不到该学生!"<<endl<<endl;
            continue;
        }
        while(true)
        {
            cout<<"请输入要添加的成绩:"<<endl;
            cin>>score;
            sum=students[i].averScores*students[i].subjects+score;
            students[i].subjects+=1;
            students[i].averScores=sum/students[i].subjects;
            cout<<endl<<"添加成功!"<<endl;
            students[i].show();
            cout<<endl<<"1、继续添加成绩;2、返回上一级;3、退出操作:"<<endl;
            cin>>k;
            if(k==2)
                break;
            else if(k==3)
                return;
        }
    }
}

int Class::ifSearchSuccess(string s)//搜索学生返回其在对象数组中的位置
{
    int i;
    for(i=0;i<stNumber;i++)
    {
        if(students[i].id==s)
        {
            return i;
        }
    }
    return -1;                                      //没找到返回-1
}

int main()
{
    int k;
    Class class1;
    class1.initializeClass();
    while(true)
    {
        cout<<"请选择要进行的操作:1、添加学生信息;2、显示所有学生信息;3、查找学生;4、添加成绩;5、退出:"<<endl;
        cin>>k;
        while(k!=1 && k!=2 && k!=3 && k!=4 && k!=5)
        {
            cout<<"输入错误!请重新输入:"<<endl;
            cin>>k;
        }
        if(k==1)
        {
            class1.addStudent();
        }
        else if(k==2)
        {
            class1.displayStInfo();
        }
        else if(k==3)
        {
            class1.searchSt();
        }
        else if(k==4)
        {
            class1.scoresOperation();
        }
        else if(k==5)
        {
            break;
        }
    }
    return 0;
}


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值