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程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)