实验报告五——继承

这次的实验两道题难度就不在一个水平线上

第二道存折的题目真不好搞


编一个使用派生类的程序,设计一个包含圆和圆柱的几何尺寸的类,它用内部数据建立几何形状并显示它们的尺寸、面积和体积。

关于Π的处理,应该在一开始就定义一个常量来存放Π的值

在主函数里调用的应该只有圆柱类,也就是说只有一个圆柱类的定义

#include<iostream>
#define pai 3.1415926
using namespace std;

class circle{	
  private:
    double r;
    double l;
    double s;
    
  public:
    circle(){
      r=0;
      l=0;
      s=0;
    }
  
    double count_l(){
      l=2*pai*r;
      return l;
    }
    
    double count_s(){
      s=pai*r*r;
      return s;
    }
    
    void input_circle(){
      cout<<"请输入圆的半径"<<endl;
      cin>>r; 
    }
    
};
  
class cylinder:public circle{
  private:
    double v;
    double s1;
    double h;
  
  public:
    cylinder(){
      v=0;
      s1=0;
      h=0;
    }
  
    double count_v(double s){
      v=s*h;
      return v;
    }
    
    double count_s1(double l){
      s1=(l/(2*pai))*(l/(2*pai))*pai*2+l*h;
      return s1;
    }
    
    void input_cylinder(){
      cout<<"请输入圆柱的高"<<endl;
      cin>>h; 
    }
    
};

int main(){
  
  cylinder a;
  a.input_circle();
  a.input_cylinder();
  cout<<"底面圆的周长为"<<a.count_l()<<endl;
  cout<<"底面圆的面积为"<<a.count_s()<<endl;
  cout<<"圆柱的面积为"<<a.count_s1(a.count_l())<<endl;
  cout<<"圆柱的体积为"<<a.count_v(a.count_s())<<endl;
  
  return 0;
}

定义一个存折类,并派生出信用卡类,存折类可以实现开户、存款、取款和查询余额的操作,取款金额必须小于余额,信用卡类对取款操作进行修改,允许透支一定金额。模拟5个人到银行进行存折操作,其中有两个人还进行信用卡交易的过程。试编写一个完整的程序。

设计的思路是在开户的时候增加一个是否升级信用卡的环节

在类里定义一个变量credit,如果为1便是信用卡,如果为0便是普通存折

然后在信用卡里定义一个计算取款是否超过额度的函数

钱和取款都需要重新传入进去,由于钱传入进去所以需要传出来

这段我做了比较详细的注释

#include<iostream>
#include<cstring>
using namespace std;

//清屏不会保留最后一个search语句
//所以不太美观
//为了能直观看到余额变动所以没清屏 

class passbook{
  private:
    int money;//钱 
    int reg;//帐号 
    string name;//名字 
    int password;//密码 
    int credit;//判断是否为信用卡的变量 
  
  public:
    passbook(){
      money=0;
      reg=10000;
      name="num";
      password=0;
      credit=0;
    }
  
  void account(){
    int choose;
    cout<<"请输入你的名字"<<endl;
    cin>>name;
    cout<<"请输入你的密码(最小四位最多六位)"<<endl;
    cin>>password;
    reg=reg+1;
    cout<<"请记住你的账号"<<reg<<endl; 
    cout<<"请问是否升级为信用卡 1.是/2.否"<<endl;
    cin>>choose;
    if(choose==1){
      upcredit();
    }
  }//开户的函数 
  
  void deposit(int plus){
    money=money+plus;
    search();
  }//存款的函数 
  
  void withdrawPassbook(int reduce){
    money=money-reduce;
    if(money<0){
      money=money+reduce;
      cout<<"所取金额超出余额"<<endl;
      cout<<"请重来"<<endl;
    }else if(money>=0){
      search(); 
    }
  }//存折取款的函数 
  
  void search(){
    cout<<"你的余额为"<<money<<endl;
  }//显示余额的函数 
  
  int outputreg(){
    return reg;	
  }//中间函数,用来传递账户 
  
  int outpassword(){
    return password;
  }//中间函数,用来传递密码 
  
  void upcredit(){
    credit=1;
  }//确认升级为信用卡用户(赋值为1) 
  
  int outcredit(){
    return credit;
  }//传出判断信用卡的重建变量 
  
  int outmoney(){
    return money;
  }//传出钱 
  
  void upmoney(int update){
    money=update;
  }//重新传入钱 
  
};

class Creditcard:public passbook{
  public:
    void withdrawCreditcard(int money,int reduce){
      cout<<"信用卡最大透支额度为1000"<<endl; 
      money=money-reduce;
      if(money<-1000){
        money=money+reduce;
        cout<<"所取金额超出透支额度"<<endl;
        cout<<"请重来"<<endl;
      }else if(money>=-1000){
        upmoney(money);
        search();
      }
      
    }//信用卡取款的函数 
};

int main(){

  Creditcard a[5];
  int i=0;
  int reginput=0;
  int passinput=0;
  int plus=0;
  int reduce=0;
  int choose=0;
  
  menu:
  cout<<"欢迎来到海星银行管理系统"<<endl;
  cout<<"1.开户"<<endl;
  cout<<"2.存款"<<endl;
  cout<<"3.取款"<<endl;
  cout<<"4.查询余额"<<endl;
  cin>>i;
  
  switch(i){
    case 1:{
      system("cls");
      for(i=0;i<5;i++){
     		a[i].account();
     		cout<<"是否还要继续创建账户(1.是/2.否)"<<endl; 
     		cin>>choose;
     		if(choose==1){
          continue;
        }else if(choose==2){
          break;
        }
      }
      break;
    }
     
    case 2:{
      system("cls");
      cout<<"请输入你的帐号"<<endl;
      cin>>reginput;
      cout<<"请输入你的密码"<<endl;
      cin>>passinput;
      for(i=0;i<5;i++){
        if(reginput == a[i].outputreg()){
          if(passinput == a[i].outpassword()){
            cout<<"请输入你要存款的金额"<<endl;
            cin>>plus;
            a[i].deposit(plus);
          }
        }		
      }
      break;
    }
    
    case 3:{
      system("cls");
      cout<<"请输入你的帐号"<<endl;
      cin>>reginput;
      cout<<"请输入你的密码"<<endl;
      cin>>passinput;
      for(i=0;i<5;i++){
        if(reginput == a[i].outputreg()){
          if(passinput == a[i].outpassword()){
            cout<<"请输入你要取款的金额"<<endl;
            cin>>reduce;
            if(a[i].outcredit()==0){
              a[i].withdrawPassbook(reduce);
            }else if(a[i].outcredit()==1){
              a[i].withdrawCreditcard(a[i].outmoney(),reduce);
            }
          }
        }
      }
      break;
    }//这里做一个判断,判断是存折还是信用卡,如果是存折就执行存折,否则执行信用卡 
    
    case 4:{
      system("cls");
      cout<<"请输入你的帐号"<<endl;
      cin>>reginput;
      cout<<"请输入你的密码"<<endl;
      cin>>passinput;
      for(i=0;i<5;i++){
        if(reginput == a[i].outputreg()){
          if(passinput == a[i].outpassword()){
            a[i].search();
          }
        }
      }
      break;	
    }

  }	
  goto menu;
  
  return 0;	
  
}

发表评论

您的电子邮箱地址不会被公开。