实验2 类与对象

 

3.实验任务3

 1 #pragma once
 2 
 3 #include <iostream>
 4 #include <cmath>
 5 
 6 class Complex {
 7 public:
 8     Complex(double r = 0, double i = 0) : real(r), imag(i) {}
 9 
10     double get_real() const {
11         return real;
12     }
13 
14     double get_imag() const {
15         return imag;
16     }
17 
18     void add(const Complex &c) {
19         real += c.get_real();
20         imag += c.get_imag();
21     }
22 
23     void show() const {
24         std::cout << real;
25         if (imag > 0) {
26             std::cout << " + " << abs(imag) << "i";
27         }
28         else if (imag < 0) {
29             std::cout << " - " << abs(imag) << "i";
30         }
31     }
32 
33     friend Complex add(const Complex &c1, const Complex &c2);
34     friend bool is_equal(const Complex &c1, const Complex &c2);
35     friend double abs(const Complex &c);
36 
37 private:
38     double real;
39     double imag;
40 };
41 
42 Complex add(const Complex &c1, const Complex &c2) {
43     return Complex(c1.get_real() + c2.get_real(), c1.get_imag() + c2.get_imag());
44 }
45 
46 bool is_equal(const Complex &c1, const Complex &c2) {
47     return c1.get_real() == c2.get_real() && c1.get_imag() == c2.get_imag();
48 }
49 
50 double abs(const Complex &c) {
51     return sqrt(pow(c.get_real(), 2) + pow(c.get_imag(), 2));
52 }
complex.hpp
 1 #include "complex.hpp"
 2 
 3 // 复数类Complex: 测试
 4 void test() {
 5     using namespace std;
 6 
 7     Complex c1(3, -4);
 8     const Complex c2(4.5);
 9     Complex c3(c1);
10 
11     cout << "c1 = ";
12     c1.show();
13     cout << endl;
14 
15     cout << "c2 = ";
16     c2.show();
17     cout << endl;
18     cout << "c2.imag = " << c2.get_imag() << endl;
19 
20     cout << "c3 = ";
21     c3.show();
22     cout << endl;
23 
24     cout << "abs(c1) = ";
25     cout << abs(c1) << endl;
26 
27     cout << boolalpha;
28     cout << "c1 == c3 : " << is_equal(c1, c3) << endl;
29     cout << "c1 == c2 : " << is_equal(c1, c2) << endl;
30 
31     Complex c4;
32     c4 = add(c1, c2);
33     cout << "c4 = c1 + c2 = ";
34     c4.show();
35     cout <<endl;
36 
37     c1.add(c2);
38     cout << " c1 += c2, " << " c1 = ";
39     c1.show();
40     cout << endl;
41 }
42 
43 int main(){
44     test();
45 }
main.cpp

 

4.实验任务4

 1 #ifndef USER_H
 2 #define USER_H
 3 
 4 #include <iostream>
 5 #include <string>
 6 #include <vector>
 7 
 8 class User {
 9 private:
10     std::string name;
11     std::string password;
12     std::string email;
13     static int n;
14 
15 public:
16     static void print_n();
17 
18     User(std::string x, std::string y = "111111", std::string z = "      ")
19         : name(x), password(y), email(z) {
20         ++n;
21     }
22 
23     ~User() {
24         --n;
25     }
26 
27     void set_email() {
28         std::string a;
29         std::cout << "Enter email address: ";
30         std::cin >> a;
31         email = a;
32         std::cout << "Email is set successfully..." << std::endl;
33     }
34 
35     void change_password() {
36         int count = 0;
37         std::string b, c;
38         std::cout << "Enter old password: ";
39         std::cin >> b;
40         while (b != password) {
41             count++;
42             std::cout << "Password input error. Please re-enter it: ";
43             std::cin >> b;
44             if (count >= 2) {
45                 std::cout << "Password input error. Please try again after a while." << std::endl;
46                 break;
47             }
48         }
49         if (b == password) {
50             std::cout << "Enter new password: ";
51             std::cin >> c;
52             password = c;
53             std::cout << "New password is set successfully..." << std::endl;
54         }
55     }
56 
57     void print_info() {
58         std::string masked_password(password.size(), '*');
59         std::cout << "Name: " << name << std::endl;
60         std::cout << "Password: " << masked_password << std::endl;
61         std::cout << "Email: " << email << std::endl;
62     }
63 };
64 
65 int User::n = 0;
66 
67 void User::print_n() {
68     std::cout << "There are " << n << " users" << std::endl;
69 }
70 
71 #endif
User.hpp
 1 #include "User.hpp"
 2 #include <iostream>
 3 
 4 
 5 void test(){
 6       using std::cout;
 7       using std::endl;
 8 
 9       cout << "testing 1......\n";
10       User user1("Jonny", "92197", "xyz@hotmail.com");
11       user1.print_info();
12 
13       cout << endl
14            << "testing 2......\n\n";
15 
16       User user2("Leonard");
17       user2.change_password();
18       user2.set_email();
19       user2.print_info();
20 
21       cout << endl;
22       User::print_n();
23  }
24 
25  int main(){
26   test();
27  }
task4.cpp

 

 

5.实验任务5

 1 //account.h
 2 #ifndef __ACCOUNT_H__
 3 #define __ACCOUNT_H__
 4 class SavingsAccount {            //储蓄账户类
 5     private:
 6         int id;                    //帐号
 7         double balance;            //余额
 8         double rate;            //存款的年利率
 9         int lastDate;            //上次变更余额的时期
10         double accumulation;    //余额按日累加之和
11         static double total;    //所有帐户的总金额
12         //记录一笔账,date为日期,amount为金额,desc为说明
13         void record(int date, double amount);
14         //获得到指定日期为止的存款金额按日累积值
15         double accumulate(int date) const {
16             return accumulation + balance * (date - lastDate);
17         }
18     public:
19         //构造函数
20         SavingsAccount(int date, int id, double rate);
21         int getId() const {return id;}
22         double getBalance() const {return balance;}
23         double getRate() const {return rate;}
24         static double getTotal() {return total;}
25         void deposit(int date, double amount);        //存入现金
26         void withdraw(int date, double amount);        //取出现金
27         //结算利息,每年1月1日调用一次该函数
28         void settle(int date);
29         //显示账户信息
30         void show() const;
31 };
32 #endif //__ACCOUNT _H__
account.h
 1 //account.cpp
 2 #include "account.h"
 3 #include <cmath>
 4 #include <iostream>
 5 using namespace std;
 6 
 7 double SavingsAccount::total = 0;
 8 //SavingsAccount类相关成员函数的实现
 9 SavingsAccount::SavingsAccount(int date, int id, double rate)
10     : id(id), balance(0), rate(rate), lastDate (date), accumulation(0) {
11     cout << date << "\t#" << id << " is created" << endl;
12 }
13 void SavingsAccount::record(int date, double amount) {
14     accumulation = accumulate(date);
15     lastDate = date;
16     amount = floor(amount * 100 + 0.5) / 100;        //保留小数点后两位
17     balance += amount;
18     total += amount;
19     cout << date << "\t#" << id << "\t" << amount << "\t" << balance << endl;
20 }
21 void SavingsAccount::deposit(int date, double amount) {
22     record(date, amount);
23 }
24 void SavingsAccount::withdraw(int date, double amount) {
25     if ( amount > getBalance())
26         cout << "Error: not enough money" << endl;
27     else
28         record(date, - amount);
29 }
30 void SavingsAccount::settle(int date) {
31     double interest = accumulate(date) * rate / 365;
32 //计算年息
33     if (interest != 0)
34         record(date, interest);
35     accumulation = 0;
36 }
37 void SavingsAccount::show() const {
38     cout << "#" << id << "\tBalance: " << balance;
39 }
account.cpp
 1 //5_11.cpp
 2 #include "account.h"
 3 #include <iostream>
 4 using namespace std;
 5 int main() {
 6     //建立几个帐户
 7     SavingsAccount sa0(1, 21325302, 0.015);
 8     SavingsAccount sa1(1, 58320212, 0.015);
 9     //几笔账目
10     sa0.deposit(5, 5000) ;
11     sa1.deposit(25, 10000);
12     sa0.deposit(45, 5500);
13     sa1.withdraw(60, 4000);
14     //开户后第90天到了银行的计息日,结算所有账户的年息
15     sa0.settle(90);
16     sa1.settle(90);
17     //输出各个帐户信息
18     sa0.show();cout << endl;
19     sa1.show();cout << endl;
20     cout << "Total:" << SavingsAccount::getTotal() << endl;
21     return 0;
22 }
5_11.cpp

 

posted @ 2023-10-22 19:13  崎膺  阅读(14)  评论(0编辑  收藏  举报