OPP实验四

任务2、

1【成绩存储在     Gradecale对象初始化时,调用基类构造函数产生的对象中】【都是通过基类的接口访问的成绩】【input 通过pushback() 接口存入】

2、【分母是人数,用来算均分 】【会有影响,影响除法的精度】【*1.0会将int转换成double,提高精度】

3、【缺少成绩的修改删除】

 

任务3、

1、【成绩存储在子类的grades对象中】【通过grades所属的vector类的接口访问】【调用的接口是属于grades自身的】

2、【实现需求的方式有很多种,要找到适合的方式】

任务4、

 1、【下面的输入的开始不能是回车,丢掉前面的所有回车字符,知道第一个非回车开始录入】

 

2、【将上次输入的\n 吃掉,使得下面输入中不会出现这个字符】

 

任务5、

 

 1 #include<iostream>
 2 #include<string>
 3 
 4 template<typename T>
 5 class GameResourceManager
 6 {
 7    private:
 8       T resource;
 9    public:
10       GameResourceManager(T r):resource(r){}
11       T get(){return resource;}
12       void update(T r){
13          resource+=r;
14          if(resource<0)resource=0;
15       }
16 
17 };

 

任务6、

 1 #include<iostream>
 2 #include<string>
 3 #include <iomanip>
 4 using namespace std;
 5 
 6 class info
 7 {
 8 private:
 9    string nickname;
10    string contact;
11    string city;
12    int n;
13 public:
14    info(string nickname,string contact,string city,int i):nickname(nickname),contact(contact),city(city),n(i){
15    }
16    void Display()
17    {
18       cout<<"------------------------------liveshow------------------------------"<<endl;
19       
20       cout<<"名字: "<<nickname<<endl
21           <<"联系方式: "<<contact<<endl
22           <<"城市: "<<city<<endl
23           <<"人数: "<<n<<endl;
24       
25       cout<<"------------------------------liveshow------------------------------"<<endl;
26    }
27 
28    int Get_n(){return n;}
29 };

 

 1 #include "expension.hpp"
 2 #include <iostream>
 3 #include<vector>
 4 #include<limits>
 5 #include<string>
 6 using namespace std;
 7 vector<info> Myinfo_Arry;
 8 const int capacity=100;
 9 
10 void input_information(int& sumPeople_num)
11 {
12       string nickname,contact,city; int people_num=0;
13       cout<<"start input:"<<endl;
14       cout<<"昵称"<<setfill(' ')<<setw(20);
15       cout<<"联系方式"<<setw(20)<<setfill(' ');
16       cout<<"所在城市"<<setw(30)<<setfill(' ');
17       cout<<"预定参加人数";
18       cout<<endl;
19   while(1)
20     {
21         cin>>nickname;
22         //检查是否退出
23         if(nickname=="q")
24           return;
25       
26         cin.ignore(numeric_limits<streamsize>::max(),' ');
27         cin>>contact;
28         cin.ignore(numeric_limits<streamsize>::max(),' ');
29         cin>>city;
30         cin.ignore(numeric_limits<streamsize>::max(),' ');
31         cin>>people_num;
32         info t(nickname,contact,city,people_num);//存储信息
33         if(sumPeople_num+t.Get_n()>capacity)
34         {
35           cout<<"only "<<capacity-sumPeople_num<<" places left. input faulted"<<endl;
36           return;
37         }
38         sumPeople_num+=t.Get_n();
39         Myinfo_Arry.push_back(t);
40     }  
41 }
42 
43 void DisplayInformation()
44 {
45     for(long long unsigned i=0;i<Myinfo_Arry.size();i++)
46     {
47           Myinfo_Arry[i].Display();
48     } 
49 }
50 int main()
51 {   cout<<"Please input q to exit."<<endl;
52     cout<<"Please input u to update."<<endl;
53     int sumPeople_num=0;
54     input_information(sumPeople_num);
55       //cin.ignore(numeric_limits<streamsize>::max(),'\n');
56      // cin.ignore(numeric_limits<streamsize>::max(),' ');
57       string command;
58       cin>>command;
59       if(command.compare("q")==0)
60       {
61          cout<<"remain number: "<<capacity-sumPeople_num<<endl;
62          DisplayInformation();
63          return 0;
64       }
65       else if(command.compare("u")==0)
66       {
67         input_information(sumPeople_num);
68       }
69       DisplayInformation();
70       return 0;
71 }

 

任务7、

设计了一个基类Account来描述共性,SavingsAccount和 creditAccount继承基类

原有的 record 和 error 成员函数的访问控制权限修改为 protected

deposit、withdraw、settle被放在了需要对应功能的类中

CreditAccount类中重载了Account类中的Show函数来适应本类的需要

 

【预期】简洁的操作,高效的性能,系统性的安全。

类的结构是很复杂的,这个复杂的结构导致在构建代码的时候,会出现各种各样的问题,也会有很多数据安全性的问题,值得我们思考。

 

posted @ 2024-11-21 15:24  Mthe  阅读(0)  评论(0编辑  收藏  举报