[苏州大学C++] 2020春第二次考试

题目描述:
*
请各位考生从课程教学群文件中下载数据文件 account.txt,然后将数据文件
手动保存在 D 盘根文件夹下。按要求编写一个 deposit 类,用于存储文件
account.txt 中的数据。该文件中每行记录一个账户的信息,包含 4 项数据,以 tab
字符分隔,各个字段的信息如下:
第 1 列表示账户名称 name;
第 2 列表示账户存款余额 balance;
第 3 列表示账户贷款余额 loan;
第 4 列表示每次还贷金额 charge;
根据 account.txt 文件中的数据,现设计 deposit 类的结构如下,其中包含 4
个私有数据成员变量:

1
2
3
4
5
6
7
8
class deposit
{
private:
string name;
double balance, loan, charge;
public:
……
}

按以下要求编写程序

  1. deposit类包含构造函数,name默认值为“NoName”,其余参数默认值为0.0。
  2. deposit 类包含成员函数 setName,用于设置账户名称。
  3. deposit 类包含成员函数 pay,用于执行还贷操作。正常还贷操作的过程是:
    balance 减去 charge,loan 减去 charge。如果 loan 大于 charge,则还贷金额
    为 charge,否则还贷金额为 loan。如果余额 balance 大于还贷金额 charge,
    则正常还贷,并返回 true,否则不执行还贷操作,并设置账户名称为原名称
    后面加“(*)”,并返回 false。
  4. 重载后自增运算符++,用于将当前对象的每次还贷金额 charge 增加 100。
  5. 重载流输出运算符,用于显示一个对象的信息。其中,name 占 10 列并左对
    齐,balance、loan、charge 各占 15 列并精确到小数点后 2 位。
  6. 编写函数 inputData,完成数据的读入,结果存放在向量 v_acc 中。
  7. 编写函数 incData,将 v_acc 中所有账户的还贷金额增加 100。
  8. 编写函数 decData,将 v_acc 中所有账户执行一次还贷操作,返回无法完成
    还贷的账户数;
  9. 编写函数 outPut,用于把向量 v_acc 中的数据显示输出。显示格式在重载流
    输出运算符中已有表述。
    程序的 main 函数(注意:不得修改 main 函数!对 main 函数每修改
    一处扣 2 分,最多扣 10 分。)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
vector<deposit> v_acc;
string path = "d:\\account.txt";
inputData(path, v_acc);
outPut(v_acc);
cout << "-------------------------------" << endl;
incData(v_acc);
outPut(v_acc);
cout << "-------------------------------" << endl;
cout << "can not pay = " << decData(v_acc) << endl;
outPut(v_acc);
return 0;
}

*

解析:
实在是没有什么好说的,非常简单的一次考试。班级里没有低于90分的。
大概是为了防止出现大面积满分,居然因为函数说明没写够扣分了,真是有够好笑的呢。
半个小时不到就写完了。
直接附上代码供参考吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include<bits/stdc++.h>
using namespace std;
class deposit
{
private:
string name;
double balance, loan, charge;
public:
deposit(string m_name = "NoName",double m_balance = 0.0,double m_loan = 0.0,double m_charge = 0.0){
name = m_name;//构造函数
balance = m_balance;
loan = m_loan;
charge = m_charge;
}
void setName(string NAME){//设置账户名称
name = NAME;
}
bool pay(){//还贷操作
int temp = charge;
if(loan <= charge) temp = loan;
if(balance > charge) {
balance -= temp;
loan -= temp;
return true;
}else{
string NewName = name + "(*)";
this->setName(NewName);
return false;
}
}
deposit operator++(int){//后自增
deposit temp(*this);
charge += 100;
return temp;
}
string getName(){//访问私有对象
return name;
}
double getBalance(){
return balance;
}
double getLoan()
{
return loan;
}
double getCharge()
{
return charge;
}
friend ostream &operator<<(ostream &out,deposit t);//使用友元函数 重载>>
};

ostream &operator<<(ostream &out,deposit t){//输出格式
out << setw(10) << left << t.getName();
out << setw(15) << fixed << right << setprecision(2) << t.getBalance();
out << setw(15) << fixed << right << setprecision(2) << t.getLoan();
out << setw(15) << fixed << right << setprecision(2) << t.getCharge();
return out;
}

void inputData(string rfn, vector<deposit> &vec){
ifstream infile(rfn,ios::in);
if(!infile){//判断打开文件
cout << "open file error!" << endl;
return ;
}
string name;
double balance,loan,charge;
while(infile >> name >> balance >> loan >> charge){//读取
deposit temp(name,balance,loan,charge);
vec.push_back(temp);
}
infile.close();//关闭
}

void incData(vector<deposit> &vec){//还贷金额+100
for(int i = 0; i < vec.size(); i++){
vec[i]++;
}
}

void outPut(vector<deposit> vec){
for(int i = 0; i < vec.size(); i++){
cout << vec[i] << endl;
}
}

int decData(vector<deposit> &vec){//返回无法还贷数目
int cnt = 0;
for(int i = 0; i < vec.size(); i++){
if(!vec[i].pay())//如果无法还贷 统计数量
cnt++;
}
return cnt;
}

int main()
{
vector<deposit> v_acc;
string path = "d:\\account.txt";
inputData(path, v_acc);
outPut(v_acc);
cout << "-------------------------------" << endl;
incData(v_acc);
outPut(v_acc);
cout << "-------------------------------" << endl;
cout << "can not pay = " << decData(v_acc) << endl;
outPut(v_acc);
return 0;
}
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2024 Rye
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信