实验2 类和对象

实验任务3

Complex.hpp
#pragma once

#include <iostream>
#include <cmath>

class Complex {
public:
    Complex(double r = 0, double i = 0) {
        real = r;
        imag = i; 
    }
    
    Complex(const Complex &x) {
        real = x.real;
        imag = x.imag;
    }
    
    double get_real() const {return real;}
    double get_imag() const {return imag;}
    
    void add(const Complex &x) {
        real += x.real;
        imag += x.imag;
    }
    
    void show() const {
        using namespace std; 
        if(real == 0 && imag == 0) {cout << 0; }
        else if(real == 0) {cout << imag << "i";}
        else if(imag == 0) {cout << real;}
        else {
            if(imag > 0){
                cout << real << " + " << imag << "i";
            }
            else if(imag < 0) {
                cout << real << " - " << -imag << "i";
            }
        }
    }
    
    friend Complex add(const Complex &c1, const Complex &c2);
    friend bool is_equal(const Complex &c1, const Complex &c2);
    friend double abs(const Complex &c1);
    
private:
    double real;
    double imag;
}; 

Complex add(const Complex &c1, const Complex &c2) {
    double real = c1.real + c2.real;
    double imag = c1.imag + c2.imag;
    return Complex(real, imag);
}

bool is_equal(const Complex &c1, const Complex &c2) {
    if(c1.real == c2.real && c1.imag == c2.imag)  
      return true;
    else
      return false;
}

double abs(const Complex &c1) {
    return sqrt(c1.real * c1.real + c1.imag * c1.imag);
}


main1.cpp
#include "Complex.hpp"

void test() {
    using namespace std;

    Complex c1(3, -4);
    const Complex c2(4.5);
    Complex c3(c1);
    
    cout << "c1 = ";
    c1.show();
    cout << endl;
    
    cout << "c2 = ";
    c2.show();
    cout << endl;
    cout << "c2.imag = " << c2.get_imag() << endl;
    
    cout << "c3 = ";
    c3.show();
    cout << endl;
    
    cout << "abs(c1) = ";
    cout << abs(c1) << endl;
    
    cout << boolalpha;
    cout << "c1 == c3 : " << is_equal(c1, c3) << endl;
    cout << "c1 == c2 : " << is_equal(c1, c2) << endl;
    
    Complex c4;
    c4 = add(c1, c2);
    cout << "c4 = c1 + c2 = ";
    c4.show();
    cout << endl;
    
    c1.add(c2);
    cout << "c1 += c2, " << "c1 = ";
    c1.show();
    cout << endl;
}

int main() {
    test();
}
View Code

 

实验任务4

//User.hpp
#pragma once

#include<iostream>
#include<string>

using namespace std;


class User {
public:
    User(string name,string passwd = "111111",string email = " "): N{name}, P{passwd}, E{email} {n++;}
    ~User() = default;    
 
    void set_email();
    void change_passwd();
    void print_info();
    static void print_n();
 
private:
    string N,P,E;
    static int n;
    
};
 
int User::n = 0;

void User::set_email()
{
    cout << "Enter email address: " ;
    cin >> E ;
    cout << "email is set successfully..." << endl;
}
 
void User::change_passwd()
{
    cout << "Enter old password: ";
    string temp;
    int i = 3;
    while(i)
    {
        cin >> temp;
        if(temp == P)
        {   
            cout << "Enter new passwd: ";
            cin >> P;  
            cout << "new passwd is set successfully..." << endl;
            break;
        }
        else 
        {
            i--;
            if(i != 0)
                cout << "password input error. Please re-enter again: " ;
        }
        if(i == 0)
        {
            cout << "password input error. Please try after a while." << endl;
        }
    }
 
}

void User::print_info()
{   
    string pp(P.size(), '*');
    cout << "name:   " << N << endl;
    cout << "passwd: " << pp << endl;
    cout << "email:  " << E << endl;
}
 
void User::print_n()
{
    cout << "there are " << n << " users." << endl;
}


//task4.cpp
#include "User.hpp"

void test() {
   using std::cout;
   using std::endl;
   
   cout << "testing 1......\n";
   User user1("Jonny", "92197", "xyz@hotmail.com");
   user1.print_info();

   cout << endl;
   cout << "testing 2......\n";
   
   User user2("Leonard");
   user2.print_info();
   user2.change_passwd();
   user2.set_email();
   user2.print_info();
   
   cout << endl;
   User::print_n();
}

int main() {
    test();
}
View Code

 

实验任务5

//account.h
class SavingsAccount {
private:
    int id;
    double balance;
    double rate;
    int lastDate;
    double accumulation;
    static double total;
    
    void record(int date, double amount);
    double accumulate(int date) const {
        return accumulation+balance*(date-lastDate);
    }
public:
    SavingsAccount(int date, int id, double rate);
    int getId() const {return id;}
    double getBalance() const {return balance;}
    double getRate() const {return rate;}
    static double getTotal() {return total;}
    void deposit(int data, double amount);
    void withdraw(int data, double amount);
    void settle(int data);
    void show() const; 
};

//account.cpp
#include "account.h"
#include <cmath>
#include <iostream>
using namespace std;

double SavingsAccount::total=0;
SavingsAccount::SavingsAccount(int date, int id, double rate): id(id), balance(0), rate(rate), lastDate(date), accumulation(0) {
    cout << date << "\t#" << id << "is created" << endl;
}
void SavingsAccount::record(int date, double amount) {
    accumulation = accumulate(date);
    lastDate = date;
    amount = floor(amount*100+0.5)/100;
    balance += amount;
    total += amount;
    cout << date << "\t#" << id << "\t" << amount << "\t" << balance << endl; 
}
void SavingsAccount::deposit(int date, double amount) {
    record(date, amount);
}
void SavingsAccount::withdraw(int date, double amount) {
    if(amount>getBalance())
      cout << "Error: not enough money" << endl;
    else
      record(date, -amount);
}
void SavingsAccount::settle(int date) {
    double interest = accumulate(date) * rate/365;
    if(interest != 0)
      record(date, interest);
    accumulation = 0;
}
void SavingsAccount::show() const {
    cout << "#" << id << "\tBalance: " << balance;
}

//5_11.cpp
#include "account.h"
#include <iostream>
using namespace std;

int main() {
    SavingsAccount sa0(1, 21325302, 0.015);
    SavingsAccount sa1(1, 58320212, 0.015);
    
    sa0.deposit(5,5000);
    sa1.deposit(25,10000);
    sa0.deposit(45,5500);
    sa1.withdraw(60,4000);
    
    sa0.settle(90);
    sa1.settle(90);
    
    sa0.show(); cout << endl;
    sa1.show(); cout << endl;
    cout << "Total: " << SavingsAccount::getTotal() << endl;
    return 0;
}
View Code

 

posted @ 2023-10-21 21:01  ~Lucky  阅读(31)  评论(0)    收藏  举报