题目描述
采用面向对象思想实现手机取款的过程
假设银行账户有卡号、绑定手机号、动态密码、余额等属性,包含获取各种属性、校验动态密码、取款操作。属性全是整数数据。
使用对象数组来保存n个银行账户。
用户通过手机取款的步骤如下:(一般在主函数实现)
1、用户输入手机号,在n个银行账户中找到相应的银行账户。
如果查找成功则往下执行,否则输出信息“手机号不存在”,不再往下执行;
2、用户输入动态密码,然后校验动态密码的是否正确
如果密码正确则往下执行,否则输出信息“密码错误”,不再往下执行;
3、用户输入取款金额,然后执行取款操作
如果余额不足就拒绝取款并给出信息“卡号XXX--余额不足”;如果取款成功给出信息“卡号XXX--余额YYY”,其中XXX表示卡号,YYY表示余额
上述描述只是方便说明,可以一次输入所有数据再执行各个操作。
输入
第一行输入n,表示有n个账户
下一行输入第一个账户的信息:卡号、绑定手机号、动态密码、余额
连续输入n行
接着输入k,表示要执行k次取款操作
下一行输入手机号、动态密码、取款金额
连续输入k行
输出
输出k行,每行输出操作结果
输入样例1
5 1001 138111 111 1000 1002 135222 222 200 1003 136333 333 300 1004 133444 444 400 1005 132555 555 500 4 136333 333 600 133444 444 300 133555 555 200 138111 222 900
输出样例1
卡号1003--余额不足 卡号1004--余额100 手机号不存在 密码错误
思路分析
题目考查类与类对象数组相关知识,难度一般。
按照题目要求,我们需要使用对象数组,所以我们用new来申请堆内存,并在这个对象数组用完之后用delete进行堆内存的释放。
稍微有点麻烦的就是手机号不存在的时候就不能往下执行要直接跳出来,手机号存在但密码不正确的时候也不能往下执行了也要直接跳出来,还有就是取款的时候余额不足就不要输出余额,这里都是要特别小心的地方,判断条件要考虑周全。
我这里判断手机号是通过设置一个tag变量来记录,判断密码是否正确和余额是否足够都是通过布尔值来判断的。
AC代码
代码语言:javascript复制#include<iostream>
using namespace std;
class account
{
private:
int card,phone,password,money;
public:
int num()
{
return phone;
}
int cardnum()
{
return card;
}
int saving()
{
return money;
}
void getdata()
{
cin>>card>>phone>>password>>money;
}
bool check(int password)
{
return this->password==password;
}
bool take(int money)
{
this->money-=money;
return this->money>=0;
}
};
int main()
{
int n,t,i,phone,password,money,tag=0;
cin>>n;
account *acc=new account[n];
for(i=0;i<n;i )
acc[i].getdata();
cin>>t;
while(t--)
{
tag=0;
cin>>phone>>password>>money;
for(i=0;i<n;i )
if(acc[i].num()==phone)
{
tag=1;
if(acc[i].check(password))
{
if(acc[i].take(money))
cout<<"卡号"<<acc[i].cardnum()<<"--余额"<<acc[i].saving()<<endl;
else
cout<<"卡号"<<acc[i].cardnum()<<"--余额不足"<<endl;
break;
}
else
cout<<"密码错误"<<endl;
break;
}
if(tag==0)
cout<<"手机号不存在"<<endl;
}
delete[] acc;
return 0;
}