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;
}