一个提款机的问题~~~~~~(求教)
这是我做的一个“模拟银行存储系统”,它模拟自动存/取款机的程序系统。首先登录的用户会得到一张新卡,里面的余额只要1元,选择登录,会输入密码(第一次登录默认密码是888),然后就可以进入系统的主界面进行操作。一共有5种操作:查询余额、存款、取款、修改密码、退出系统。
而且3次输入密码错误则会“吞卡”(必须要用一个变量进行保存);修改密码后,下一次要求输入的密码是修改后的。
现在吞卡的要求和下一次输入密码是修改后的。这两个我怎么都没弄出来,在这里求教各位高手和老师,到底这两个该怎么弄啊?还有下面这程序还有哪些不足和缺点请指点一下,供我学习!
谢谢了~~~~~~~
#include <iostream>#include <string>using namespace std;class Cargo{ public: int count; float money; void init(); float find(); float input(); float output(); int amend();};void Cargo::init(){ money=1.0;}float Cargo::find(){ cout << "您所剩的余额为:" << money << endl; return money;}float Cargo::input(){ float mi; cout << "您所要存入的钱数为:" << endl; cin >> mi; money+=mi; cout << "您所剩的余额为:" << money <<endl; return money;}float Cargo::output(){ float mo; while(true) { cout << "您所要取出的金额为:" << endl; cin >> mo; if(mo>money) { cout << "您提取的金额比余额多,请重新输入" << endl; continue; } else { money-=mo; break; } } cout << "您所剩的余额为:" << money <<endl; return money;}int Cargo::amend(){ int mm2; while(true) { cout << "请输入原密码:" << endl; cin >> mm2; if(mm2!=count) { cout << "您输入的密码不正确。" << endl; } else { cout << "请输入新密码:" << endl; cin >> count; break; } } return 0;}int main(){ char zh; int mm1; int count=888; char c; Cargo c1; c1.init(); cout << "请输入您的帐户:" <<endl; cin >> zh; cout << "你现在拥有一张新卡" <<endl; while(true) { cout << "请输入您的密码:"; cin >> mm1; if(mm1==count) { while(true) { cout << "\n***********************************"; cout << "\n 请选择你的操作"; cout << "\n a: 查询余额;"; cout << "\n c: 存款;"; cout << "\n t: 取款;"; cout << "\n o: 修改密码;"; cout << "\n q: 退出系统;"; cout << "\n***********************************"; cout << "\n 请选择:"; cin >> c; switch(c) { case 'a': c1.find(); break; case 'c': c1.input(); break; case 't': c1.output(); break; case 'o': c1.amend(); break; case 'q': return 0; default: cout << "\n您的选择有误,请重新选择!"; break; } } } else { cout << "你输入的密码有误!"; continue; } } return 0;}
//你原来的程序感觉不像是C++啊,//根本就是面向程序的, 函数的定义也...//密码使用最好用string类型的,增加了成员变量string name;#include <iostream>#include <string>using namespace std;class Cargo{public: Cargo() : money(1.0) , code("888") , name("") {} string GetCode(){return code;} void find(); void input(); void output(); void SetCode(); void SetName();private: string code;//密码; float money; string name; //用户名;};void Cargo::find(){ cout << "您所剩的余额为:" << money << endl;}void Cargo::input(){ float mi; cout << "您所要存入的钱数为:" << endl; cin >> mi; money+=mi; cout << "您所剩的余额为:" << money <<endl;}void Cargo::output(){ float mo; while(true) { cout << "您所要取出的金额为:" << endl; cin >> mo; if(mo>money) { cout << "您提取的金额比余额多,请重新输入" << endl; continue; } else { money-=mo; break; } } cout << "您所剩的余额为:" << money <<endl;}void Cargo::SetCode(){ string mm2; while(true) { cout << "请输入原密码:" << endl; cin >> mm2; if(mm2!=code) { cout << "您输入的密码不正确。" << endl; } else { cout << "请输入新密码:" << endl; cin >> code; break; } }}void Cargo::SetName(){ cout << "请输入您的帐户:" <<endl; cin >> name; cout << "你现在拥有一张新卡" <<endl;}int main(){ char zh; string mm1; char c; Cargo c1; c1.SetName(); while(true) { cout << "请输入您的密码:"; cin >> mm1; if(mm1==c1.GetCode()) { while(true) { cout << "\n***********************************"; cout << "\n 请选择你的操作"; cout << "\n a: 查询余额;"; cout << "\n c: 存款;"; cout << "\n t: 取款;"; cout << "\n o: 修改密码;"; cout << "\n q: 退出系统;"; cout << "\n***********************************"; cout << "\n 请选择:"; cin >> c; system("cls"); switch(c) { case 'a': c1.find(); break; case 'c': c1.input(); break; case 't': c1.output(); break; case 'o': c1.SetCode(); break; case 'q': return 0; default: cout << "\n您的选择有误,请重新选择!"; break; } } } else { cout << "你输入的密码有误!"; continue; } } return 0;}
[解决办法]
#include <iostream>#include <fstream>#include <cassert>#include <string>using namespace std;class Cargo{public: Cargo() : money(1.0) , code("888") , name("") {} string GetCode(){return code;} void find(); void input(); void output(); void SetCode(); void SetName(); void CopyMsg2File() const;private: string code;//密码; float money; string name; //用户名;};void Cargo::find(){ cout << "您所剩的余额为:" << money << endl;}void Cargo::input(){ float mi; cout << "您所要存入的钱数为:" << endl; cin >> mi; money+=mi; cout << "您所剩的余额为:" << money <<endl;}void Cargo::output(){ float mo; while(true) { cout << "您所要取出的金额为:" << endl; cin >> mo; if(mo>money) { cout << "您提取的金额比余额多,请重新输入" << endl; continue; } else { money-=mo; break; } } cout << "您所剩的余额为:" << money <<endl;}void Cargo::SetCode(){ string mm2; while(true) { cout << "请输入原密码:" << endl; cin >> mm2; if(mm2!=code) { cout << "您输入的密码不正确。" << endl; } else { cout << "请输入新密码:" << endl; cin >> code; break; } }}void Cargo::SetName(){ cout << "请输入您的帐户:" <<endl; cin >> name; cout << "你现在拥有一张新卡" <<endl;}void Cargo::CopyMsg2File() const{ ofstream outFile("Cargo.txt", ios::app); //以后的话直接追加:ios::app assert(outFile!=NULL); outFile<<name<<" "; outFile<<code<<" "; outFile<<money<<endl; outFile.close();}int main(){ int time=0; string mm1; char c; Cargo c1; c1.SetName(); while(true) { cout << "请输入您的密码:"; cin >> mm1; if(mm1==c1.GetCode()) { while(true) { cout << "\n***********************************"; cout << "\n 请选择你的操作"; cout << "\n a: 查询余额;"; cout << "\n c: 存款;"; cout << "\n t: 取款;"; cout << "\n o: 修改密码;"; cout << "\n q: 退出系统;"; cout << "\n***********************************"; cout << "\n 请选择:"; cin >> c; system("cls"); switch(c) { case 'a': c1.find(); break; case 'c': c1.input(); break; case 't': c1.output(); break; case 'o': c1.SetCode(); break; case 'q': c1.CopyMsg2File(); //退出系统之前将用户信息拷贝到文件中去; return 0; default: cout << "\n您的选择有误,请重新选择!"; break; } } } else { time++; cout << "你输入的密码有误!"; if(time==3) break; } } return 0;}只是改进了一下,个人觉得应该在增加一个类:取款机类。其实你现在是将用户类,取款机类混写了,所以你会觉得思路不清楚,在取款机类里面定义一个用户对象数组, void find(); void input(); void output();这些函数应该是在取款机类里面的,慢慢来吧, ^_^^_^