一、实验目的
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;
}