求C语言编写ATM机程序的,几个调用函数,小弟谢谢诸位大哥

求C语言编写ATM机程序的,几个调用函数,小弟谢谢诸位大哥,第1张

1、if(amt < 10)return

2、

long checkInt(char amtstr)

{

long errflag = 0;

char p = NULL;

//查找小数点

p = strstr(amtstr, "");

p++;

for(i = 0; i < strlen(p);i++)

{

if(p[0] != 0)

{

errflag = 1;

break;

}

}

p = NULL;

if(1 == errflag)

{

fprintf(stderr, "金额必须为整数");

return -1;

}

return 0;

}

因为你用的scanf("%ld",&m);所以会把40赋值给m,如果你要判断的话,可以利用

ltoa函数来先将数字转换成对应的字符串,如果不知道这个函数怎么用的自己上网查。

接着判断这个字符串是不是有小数点,可以用函数strchr(str,'');不清楚用法的话也可以上网查。

至于自动返回上层,因为你把所有的步骤都写到了一个函数中,所以这是没有很好的办法回到上一个,虽然有个goto的用法,不过不推荐用,你应该把每个可以分开的步骤都封装成一个函数,然后主函数中来调用这些函数,这样的程序比较整体,而且容易排错。

#include <iostream>

using namespace std;

///////////////////////////////用户类//////////////////////////////////////

class User

{

private:

int money;

string userName;

string password;

public:

User();

~User();

User(string userName, string password);

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;

}

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;

}

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();

int main()

{

int state;

int user_state;

User user;

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://返回

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://返回

user_state = 0;

default: break;

}

} while(user_state);

user = NULL;

}

else cout<<"\n登陆失败\n";

break;

case 3:

state = exit();

break;

default: break;

}

}

while(state);

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 != databasegetUser(userName)) // 如果用户名存在

return NULL; // 注册失败

cout<<"请输入密码:";

cin>>password;

User user = new User(userName, password);

databaseadd(user);

return user; // 注册成功

}

User user_login()

{

string userName;

string password;

cout<<"请输入账号:";

cin>>userName;

cout<<"请输入密码:";

cin>>password;

User user = databasegetUser(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\n";

int num;

cin>>num;

return num;

}

大体是这样的:

机器正常服务画面,

如果有个客户插卡进来后,读卡器传感器检测到了,就会通知sp(系统),有卡进来了。接着SP向读卡器发送一个关闭闸门命令,将闸门关掉,防止其他的卡再插进来。接着SP发送一个读卡的指令,读卡器硬件开始读卡,接着将读出的结果放在一串字节流中,返回给SP,SP会分析该返回字节流,因为其格式都是硬件手册里面定义好的,哪一位表示什么都是固定的。SP根据各个位的意思进行分析,从而知道是否成功,并且该字节流里面还包括1、2、3磁道的数据,SP根据字节流的位置可以将磁道依次取出,放到一个变量中存起来,以便ATMC中使用。(如果该卡的格式不符合硬件手册里面定义好的,则出现退卡“对不起,不支持贵卡”),读完卡后,读卡器就先停下来,出现“安全确认”或者“输入密码”的画面,卡保留在里面。接着,用户进入功能选择画面,“查询”、“转帐”和“改密”、“取款”(进入此画面不进行密码校验)。当客户选择了“取款”后,客户输入取款金额,ATM会先向主机发送一个报文,确认密码是否正确,正确则将客户的钱扣掉,ATM等待主机返回报文,如果返回的信息是一切OK,则ATM开始出钞了。

#include <stdioh>

void main()

{

char c, s[100];

int i = 0;

while((c=getch())!='\r')

{

s[i] = c;

printf("");

i++;

}

s[i]='\0';

printf("\n你的输入字符为:%s\n", s);

}

输入完成按回车,会显示你输入的内容。

scanf会直接回显输入的字符,无法实现你所需要的功能,要用缓冲字符输入用getchar

以上就是关于求C语言编写ATM机程序的,几个调用函数,小弟谢谢诸位大哥全部的内容,包括:求C语言编写ATM机程序的,几个调用函数,小弟谢谢诸位大哥、c语言编的ATM取款机程序,有个问题请教大家、用c++编写ATM程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9970203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存