问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

用c++来做一个ATM的程序

提问网友 发布时间:2022-04-23 14:34
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
2个回答
热心网友 回答时间:2023-07-19 23:48
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
using namespace std;

///////////////////////////////用户类//////////////////////////////////////
class User
{
private:
int money;
string userName;
string password;
public:
User();
~User();
User(string userName, string password);
User(string userName, string password, int money);
int saveMoney(int money);// 存款
int getMoney(int money); // 取款
int checkMoney(); // 查询余额
string getUserName(); // 取得用户名
string getPassword(); // 取得密码
};

User::User()
{
money = 0;
}

User::User(string userName, string password)
{
money = 0;
this->userName = userName;
this->password = password;
}

User::User(string userName, string password, int money)
{
this->userName = userName;
this->password = password;
this->money = money;
}

int User::saveMoney(int money)
{
this->money += money;
return this->money;
}

int User::getMoney(int money)
{
this->money -= money;
return this->money;
}

int User::checkMoney()
{
return this->money;
}

string User::getUserName()
{
return this->userName;
}

string User::getPassword()
{
return this->password;
}
/////////////////////////////////////////////////////////////////////////

///////////////////////////////////数据库类,用来存储用户//////////////////////
class DataBase
{
private:
User *users[40]; // 默认数据可最多能存放40个用户
int userNumber; // 已注册用户的数量
public:
DataBase();
~DataBase();
bool add(User *user); // 添加新用户
User * getUser(int i); // 按照索引取得用户
User * getUser(string name); // 按照用户名取得用户
int getUserNumber(); // 取得数据库中用户的数量
};

DataBase::DataBase()
{
userNumber = 0;
}

DataBase::~DataBase()
{
delete users;
}

int DataBase::getUserNumber()
{
return this->userNumber;
}
bool DataBase::add(User *user)
{
if(userNumber < 40 && getUser(user->getUserName()) == NULL) // 如果当前用户名在数据库中不存在
{
users[userNumber] = user;
userNumber++;
return true; // 返回true表示新用户添加成功
}
return false; // 返回false表示新用户添加失败
}

User * DataBase::getUser(int i)
{
if(i > 40 || i < 0) return NULL;
return users[i];
}

User * DataBase::getUser(string userName)
{
for(int i = 0; i < userNumber; i++)
{
User *user = getUser(i);
if(user->getUserName() == userName) return user;
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////

DataBase database;
int welcom();
// 注册
User * user_register();
User * user_login();
int exit();
int user_process();
void init(string fileName);
void saveInfo(string fileName);
int main()
{
string fileName = "info.txt";
int state;
int user_state;
User *user;
init(fileName);
do
{
state = welcom();
switch(state)
{
case 1:
user = user_register(); // 用户注册
if(NULL != user)
{
cout<<"\n注册成功\n";
do
{
user_state = user_process();
switch(user_state)
{
case 1:// 存钱
{
cout<<"输入存钱金额:";
int num;
cin>>num;
cout<<"余额为:"<<user->saveMoney(num)<<endl;;
}
break;
case 2:// 取钱
{
cout<<"输入取钱金额:";
int num;
cin>>num;
cout<<"余额为:"<<user->getMoney(num)<<endl;
}
break;
case 3:// 查看余额
{
cout<<"余额为:"<<user->checkMoney()<<endl;
}
break;
case 4:
{
cout<<"请输入转账的用户名:";
string name;
cin>>name;
User *rUser = database.getUser(name);
if(NULL == rUser) cout<<"查无此人"<<endl;
else
{
int rMoney;
cout<<"请输入转账的用金额:";
cin>>rMoney;
if(rMoney > user->checkMoney()) cout<<"你没那么多钱啊!"<<endl;
else
{
user->saveMoney(-rMoney);
rUser->saveMoney(rMoney);
}
}
}
break;
case 5://返回
user_state = 0;
default: break;
}
} while(user_state);
user = NULL;
}
else cout<<"\n注册失败\n";
break;
case 2:
user = user_login(); // 用户登陆
if(NULL != user)
{
cout<<"登陆成功"<<endl;
do
{
user_state = user_process();
switch(user_state)
{
case 1:// 存钱
{
cout<<"输入存钱金额:";
int num;
cin>>num;
cout<<"余额为:"<<user->saveMoney(num)<<endl;;
}
break;
case 2:// 取钱
{
cout<<"输入取钱金额:";
int num;
cin>>num;
cout<<"余额为:"<<user->getMoney(num)<<endl;
}
break;
case 3:// 查看余额
{
cout<<"余额为:"<<user->checkMoney()<<endl;
}
break;
case 4:// 转账
{
cout<<"请输入转账的用户名:";
string name;
cin>>name;
User *rUser = database.getUser(name);
if(NULL == rUser) cout<<"查无此人"<<endl;
else
{
int rMoney;
cout<<"请输入转账的用金额:";
cin>>rMoney;
if(rMoney > user->checkMoney()) cout<<"你没那么多钱啊!"<<endl;
else
{
user->saveMoney(-rMoney);
rUser->saveMoney(rMoney);
}
}
}
break;
case 5://返回
user_state = 0;
default: break;
}
} while(user_state);
user = NULL;
}
else cout<<"\n登陆失败\n";
break;
case 3:
state = exit();
break;
default: break;
}
}
while(state);
saveInfo(fileName);
return 0;
}

int welcom()
{
cout<<"\t\t**********欢迎使用ATM系统**********\n";
cout<<"\t\t* 1.用户注册 *\n";
cout<<"\t\t* 2.用户登录 *\n";
cout<<"\t\t* 3.退出系统 *\n";
cout<<"\t\t***********************************\n";
int num;
cin>>num;
return num;
}

// 注册
User * user_register()
{
string userName;
string password;
cout<<"请输入账号:";
cin>>userName;

if(NULL != database.getUser(userName)) // 如果用户名存在
return NULL; // 注册失败

cout<<"请输入密码:";
cin>>password;

User *user = new User(userName, password);
database.add(user);

return user; // 注册成功
}

User * user_login()
{
string userName;
string password;
cout<<"请输入账号:";
cin>>userName;
cout<<"请输入密码:";
cin>>password;

User *user = database.getUser(userName);
if(NULL != user) // 如果用户存在
if(user->getPassword() == password)
return user; // 如果密码匹配则登陆成功

return NULL; // 如果用户不存在
}

int exit()
{
return 0; // 退出系统
}

int user_process()
{
cout<<"\t\t******************************\n";
cout<<"\t\t* 请选择操作类型 *\n";
cout<<"\t\t* 1.存 钱 *\n";
cout<<"\t\t* 2.取 钱 *\n";
cout<<"\t\t* 3.查 看 余 额 *\n";
cout<<"\t\t* 4.转 账 *\n";
cout<<"\t\t* 5.返 回 *\n";
cout<<"\t\t******************************\n";

int num;
cin>>num;
return num;
}

///////////////////////将用户信息从info.txt中取出/////////////////////////
void init(string fileName)
{
ifstream infile(fileName.c_str(), ios::in);
char ch[100];
vector<string> v_user_info;
while(infile.getline(ch, 100)) // 一次读取一行内容,假设一行最多有100个字符
{
string str(ch);
v_user_info.push_back(str);
}
for(int i = 0; i < v_user_info.size(); i += 3)
{
string name = v_user_info.at(i);
string pass = v_user_info.at(i + 1);
string mony = v_user_info.at(i + 2);
User *user = new User(name, pass, atoi(mony.c_str()));
database.add(user);
}
}

void saveInfo(string fileName)
{
ofstream outfile(fileName.c_str(), ios::out);
outfile.seekp(0, ios::beg);
int len = database.getUserNumber();
for(int i = 0; i < len; i++)
{
User *user = database.getUser(i);
string name = user->getUserName();
string pass = user->getPassword();
int money = user->checkMoney();
char ch[65535];
string moneystr(itoa(money, ch, 10));
outfile.write(name.c_str(), name.size());
outfile.write("\n", 1);
outfile.write(pass.c_str(), pass.size());
outfile.write("\n", 1);
outfile.write(moneystr.c_str(), moneystr.size());
outfile.write("\n", 1);
}
}来自:求助得到的回答
热心网友 回答时间:2023-07-19 23:48
你在课程设计吗?

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

用C#编写一个自动取款机(ATM)模拟程序 什么是ATM系统 ATM自动取款机的使用程序 ATM模拟程序 银行卡atm 取款程序 用c++编写ATM程序 ATM机取款的操作程序是怎样的。 ATM取款机程序 这种行李箱的锁坏了可以修吗? 行李箱的密码锁坏了可以换新的吗? 旅行箱密码忘记,锁坏了,还可以换一个吗?? 行李箱密码锁坏了怎么办可不可以换哎 我的行李箱的嗯锁扣坏了能换一个不? 我密码箱锁坏了,能换新的吗 windows10 中文输入法只能输入一个字母,不管哪种中文输入法都是这样,英... win10输入法的问题,不能打汉字,只能打字母? 键盘出现打不出汉字,打出来的全是字母,怎么处理? win10中文打字只显示字母怎么办? 大神求教,明基卓威ec1-a鼠标,右侧会透光么?是不是有问题啊?? 卓威为什么不出2k 240或144的屏幕? 在C语言中ATM自动取款机的功能程序怎么写啊? 就是用JAVA编写一个ATM的程序 用C语言一个ATM取款机的程序代码(用循环语句) JAVA 模拟ATM柜员机模拟程序 怎样用JAVA编写一个ATM简单的应用程序 用C++模拟ATM柜员机程序 只狼这个,一直说要去那柿子,我背包里的这个不是吗?为什么不能给他 只狼游戏里有了鲜柿子干柿子的话,要给谁?? 老哥们只狼怎么才能触发她要柿子的那个剧情啊? 《只狼》鲜柿子在哪? 只狼鲜柿子干柿子有什么用? 只狼干柿子和鲜柿子有什么用? 飞雪玉花的歌词 飞雪玉花歌词 只狼有没有大佬刷出来过柿子?我现在柿子不够了,贼急! 《秦时明月》的插曲《飞雪玉花》的歌词? 在只狼里干柿子到底是要怎么拿啊? 求秦时明月的插曲《飞雪玉花》(人唱版)的歌词?急!速! 游戏只狼普通柿子在哪? 跪求秦时明月飞雪玉花的全部词?就是带上金戈铁马笑谈间后面两段的,要时间,精确到秒的。
Top