C++高级语言程序设计实验七-中国矿业大学
第一题
题目描述
对本章示范题的用于管理商店商品的实现程序进行完善:完成Wardrobe立柜类的具体定义与使用,并添加“帽子仓库类”以及“立柜仓库类”的定义及使用,以使程序能够对商店的这三种商品(衬衣、帽子、立柜)进行简单的管理与应用。
要对商品实现的操作有:商品的进库(增加某类商品及其库存量),商品的出库(减少某类商品及其库存量),以及某类商品总价格的计算。
源代码
#include<iostream>
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex()
{
real=0;
imag=0;
}
Complex(double r, double i)
{
real=r;
imag=i;
}
Complex AddCom(Complex c2);
void OutCom();
};
Complex Complex::AddCom(Complex c2)
{
real += c2.real;
imag += c2.imag;
return * this;
}
void Complex::OutCom()
{
if (real == 0)
cout << imag << "i";
else if (imag == 0)
cout << real;
else
cout << real << "+" << imag << "i";
}
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
Complex c1(a, b);
Complex c2(c, d);
c1.AddCom(c2);
c1.OutCom();
}
运行结果
第二题
题目描述
自定义一个简单日期类 DateType,它具有数据成员 y、m、d,用来表示当前日期的年、月、日。
而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。
class DateType {
//自定义的日期类 DateType
int y,m,d;
//数据成员,表示当前日期的年、月、日
public:
DateType(int y0=1, int m0=1, int d0=1);
//构造函数,设定年、月、日;并设置参数默认值
void IncrementDay();
//增加 1 天
bool Equal(DateType dt2);
//判断二日期是否相等
void PrintDate();
//屏幕输出日期对象的有关数据(年、月、日)
};
1、完成有参构造函数
2、完成 void IncrementDay()函数,计算天数加1后的日期。
3、完成Equal(DateType dt2)函数,判断两个日期是否相等。
4、完成打印输出函数PrintDate(),在屏幕上输出日期对象的有关数据(年、月、日)
5、编写并完成主函数,实现输入包含六个整数,说明DateType类对象dt1,dt2,分别是dt1和dt2的年月日。请先输出dt1,dt2,然后判断dt1,dt2是否相等,再对dt1,dt2分别增加一天。最后输出dt1,dt2。
注意:在IncrementDay成员函数中,当对日期增加1天后,要注意所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N(注意闰年与平年的2月份天数不一样),若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年等。
源代码
#include<iostream>
using namespace std;
class DateType{
protected:
int y;
int m;
int d;
public:
DateType(int yy=0,int mm=0,int dd=0):y(yy),m(mm),d(dd){}
void PrintDate()
{
cout << y << "-" << m << "-" << d;
}
void up()
{
int g[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(y%4==0&&y%100!=0||y%400==0) g[2] = 29;
d++;
if(d>g[m])
{
d-=g[m];
m++;
if(m>12)
{
m-=12;
y++;
}
}
}
};
class TimeType{
protected:
int h;
int m;
int s;
public:
TimeType(int hh=0,int mm=0,int ss=0):h(hh),m(mm),s(ss){}
void PrintTime()
{
cout << h << ":" << m << ":" << s;
}
int up(int ss)
{
s+=ss;
int temp = s/60;
if(temp)
{
m+=temp;
s-=60*temp;
temp=m/60;
if(temp)
{
h+=temp;
m-=60*temp;
temp=h/24;
if(temp)
{
h-=24*temp;
return temp;
}
}
}
return 0;
}
};
class DateTimeType {
DateType date;
TimeType time;
public:
DateTimeType(int y0=1, int m0=1, int d0=1, int hr0=0, int mi0=0, int se0=0):date(y0,m0,d0),time(hr0,mi0,se0){}
DateType& GetDate(){ return date; }
TimeType& GetTime(){ return time; }
void IncrementSecond(int s)
{
//如果大于24小时
if(time.up(s))
{
date.up();//日期增加一天
}
}
void PrintDateTime()
{
date.PrintDate();
cout << " ";
time.PrintTime();
cout << endl;
}
};
int main(){
DateTimeType dttm1(1999,12,31,23,59,59), dttm2;
(dttm1.GetDate()).PrintDate();
cout<<endl;
dttm1.PrintDateTime();
dttm2.PrintDateTime();
dttm1.IncrementSecond(30);
dttm1.PrintDateTime();
return 0;
}
运行截图
第三题
题目描述
设计一个学生类(CStudent),其私有数据成员:注册号、姓名、数学、外语、计算机课程的成绩。公有成员函数是:求三门课总成绩的函数 Sum;求三门课平均成绩的函数 Average;显示学生数据信息的函数 Display;设置学生数据信息的函数 SetData。
1.可按如下样式设计 CStudent类的各数据成员以及成员函数
class CStudent { //学生类 CStudent
unsigned long reg_num; //数据成员:注册号
char name[30]; //数据成员:姓名
float math, eng, comp; //数据成员:数学、英语、计算机成绩
public: //公有成员函数
float Sum(); //求三门课总成绩的函数 Sum
float Average(); //求三门课平均成绩的函数 Average
Display(); //显示学生数据信息的函数 Display
SetData (unsigned long r, char* n, float m, float e, float c) ;
//设置学生数据信息的函数 SetData
};
在主函数,通过使用“CStudent stu[150];”的语句,来说明一个CStudent类对象的数组stu,而后通过各对象stu[i]来处理并求取每一学生的总成绩、平均成绩等。
(1)输入本次欲处理的学生人数 TOTAL(小于等于 150 的正整数);
(2)输入全班 TOTAL 个学生的有关信息,依次放入对象数组的各元素 stu[i]中(通过使用“stu[i].SetData(...);”形式的语句来实现);
(3)对全班TOTAL个学生,依次通过对象stu[i]来求出其总成绩、平均成绩等(其中要使用形如“stu[i].Sum()”以及“stu[i].Average()”式样的对成员函数进行调用的语句),并同时求出全班学生总成绩最高者处于 stu 数组的下标位置idx_max,而后通过使用“stu[idx_max].Display();”来输出该学生有关的全部数据信息。
源代码
#include<iostream>
#include<string>
using namespace std;
class Person{
protected:
string name;
int age;
string sex;
public:
Person(){}
Person(string n,int a,string s):name(n),age(a),sex(s){}
void Display()
{
cout << name << " " << age << " " << sex;
}
};
class Student:public Person{
protected:
int regnum;
string department;
public:
Student(){}
Student(string n,int a,string s,int r,string d)
{
name=n;age=a;sex=s;regnum=r;department=d;
}
void Display()
{
Person::Display();
cout << " " << regnum << " " << department;
}
};
class GraduateStudent:public Student{
protected:
string advisor;
public:
GraduateStudent(){};
GraduateStudent(string n,int a,string s,int r,string d,string ad):Student(n,a,s,r,d),advisor(ad){}
void Display()
{
Student::Display();
cout << " " << advisor;
}
};
class Teacher:public Person{
protected:
string course;
string post;
public:
Teacher(string n,int a,string s,string c,string p):Person(n,a,s),course(c),post(p){}
void Display()
{
Person::Display();
cout << " " << course << " " << post;
}
};
int main()
{
cout << "== per1.Display() => name,age,sex" << endl;
Person per1("sun",42,"M");
per1.Display();cout << endl;
cout << "== stu1.Display() => name,age,sex,Reg_Number,department" << endl;
Student stu1("guo",22,"F",1001,"comp");
stu1.Display();cout << endl;
cout << "== teach1.Display() => name,age,sex,course,post" << endl;
Teacher teach1("fang",38,"M","english","professor");
teach1.Display();cout << endl;
cout << "== gStu.Display() => name,age,sex,Reg_Number,department,advisor" << endl;
GraduateStudent gStu("wu",25,"M",1021,"comp","wei");
gStu.Display();
return 0;
}