【c++】2020大一下第二次考试

    技术2026-04-18  3

    解析: 考题本身非常简单,需要注意书写格式(特别是我被扣分的注释QAQ)。

    考试题目

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

    class deposit { private: string name; double balance, loan, charge; public: …… }

    按以下要求编写程序

    deposit 类包含构造函数,name默认值为“NoName”,其余参数默认值为0.0。deposit 类包含成员函数setName,用于设置账户名称。deposit 类包含成员函数pay,用于执行还贷操作。正常还贷操作的过程是:balance 减去charge,loan 减去charge。如果loan 大于charge,则还贷金额为charge,否则还贷金额为loan。如果余额balance 大于还贷金额charge,则正常还贷,并返回true,否则不执行还贷操作,并设置账户名称为原名称后面加“(*)”,并返回false。重载后自增运算符++,用于将当前对象的每次还贷金额charge 增加100。重载流输出运算符,用于显示一个对象的信息。其中,name 占10 列并左对齐,balance、loan、charge 各占15 列并精确到小数点后2 位。编写函数 inputData,完成数据的读入,结果存放在向量v_acc 中。编写函数 incData,将v_acc 中所有账户的还贷金额增加100。编写函数 decData,将v_acc 中所有账户执行一次还贷操作,返回无法完成还贷的账户数;编写函数 outPut,用于把向量v_acc 中的数据显示输出。显示格式在重载流输出运算符中已有表述。

    程序的main 函数(注意:不得修改main 函数!对main 函数每修改 一处扣2 分,最多扣10 分。)

    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; }

    考试代码

    //1927405148,凌珑 #include<iostream> #include<sstream> #include<istream> #include<fstream> #include<string> #include<vector> #include<algorithm> #include<iomanip> using namespace std; class deposit { private: string name; double balance, loan, charge; public: //1、构造函数,name默认值为“NoName”,其余参数默认值为0.0 deposit(string tempname = "NoName", double tempbalance = 0.0, double temploan = 0.0, double tempcharge = 0.0) { name = tempname; balance = tempbalance; loan = temploan; charge = tempcharge; } //2、成员函数setName,用于设置账户名称 void setName(string tempname) { name = tempname; } //3、成员函数pay,用于执行还贷操作 bool pay() { if (loan > charge && balance > charge) {//正常还款,还款金额为charge balance -= charge; loan -= charge; return true; } else if(loan <= charge && balance > charge){//还清贷款,还款金额为loan balance -= loan; loan -= loan; return true; } else {//不执行还款操作 name = name + "(*)"; return false; } } //4、重载后自增运算符++,用于将当前对象的每次还贷金额charge增加100 deposit operator++(int) { deposit temp(*this); this->charge += 100; return temp; } //5、友元函数重载<<,用于显示一个对象的信息 friend ostream& operator<<(ostream& out, const deposit& t) { out << left << setw(10) << t.name << right << setw(15) << fixed << setprecision(2) << t.balance <<//这个的right是为了和参考样例一致,怕扣分 right << setw(15) << fixed << setprecision(2) << t.loan << right << setw(15) << fixed << setprecision(2) << t.charge; return out; } }; //6、函数 inputData,完成数据的读入,结果存放在向量v_acc中 void inputData(string path, vector<deposit>& v_acc) { fstream data(path, ios::in);//打开文件 if (!data) { cout << "wrong!"; //不能打开则输出"wrong!" return; } string tempname; double tempbalance, temploan, tempcharge; while (data >> tempname >> tempbalance >> temploan >> tempcharge) { deposit temp(tempname, tempbalance, temploan, tempcharge); v_acc.push_back(temp); } data.close();//关闭文件 } //7、函数 incData,将v_acc 中所有账户的还贷金额增加100 void incData(vector<deposit>& v_acc) { for (vector<deposit>::iterator it = v_acc.begin(); it != v_acc.end(); it++) { (*it)++; } } //8、函数 decData,将v_acc 中所有账户执行一次还贷操作,返回无法完成还贷的账户数 int decData(vector<deposit>& v_acc) { int sum = 0; for (vector<deposit>::iterator it = v_acc.begin(); it != v_acc.end(); it++) { bool judge=(*it).pay(); if (!judge) {//如果不能完成一次还贷操作 sum++; } } return sum; } //9、函数 outPut,用于把向量v_acc 中的数据显示输出 void outPut(vector<deposit>& v_acc) { for (vector<deposit>::iterator it = v_acc.begin(); it != v_acc.end(); it++) { cout << *it << endl; } } 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; }
    Processed: 0.009, SQL: 9