您的位置:首页 > 编程语言 > C语言/C++

c++模拟ATM取款机

2014-01-06 13:01 489 查看
琢磨几天终于完成了,貌似bug不少,大家提提意见
//bank.h
int confirm_password(int ii);//密码输入及验证函数
void function(int ii);//功能显示及实现函数
//void fuc_true();//不用这个函数了
float showbalance(int ii);//余额显示函数,返回余额
float drawmoney(int ii);//取款函数,计算利息
float savemoney(int ii);//存钱函数
void change_password(int ii);//修改密码程序
void trans_account(int ii);//转账模块
//**************************************************************
//**************************************************************
//template<class type,int n>
//int compare_array(type a
,type b
);//将比较两个数组元素是否一样的功能模块化,构建模板函数
//***********************************************************************************
//***********************************************************************************
//功能,对给入的两个数组比较是否一致,,数组长途要提前给定

template<class type,int n>
int compare_array(type a[],type b[])//将比较两个数组元素是否一样的功能模块化,构建模板函数
{
	int i;

	for(i=0;i<n;i++)
	{
		if(a[i]==b[i])
			continue;
		else
		{
			cout<<"错误,停止验证"<<endl;//只要有一位错误,就停止验证
			break;
		
		}
	
	}
	if(i==6)
	{
		cout<<"两数组完全一致!"<<endl;
		return 0;
	}
	else
	{
		cout<<"两数组不一致"<<endl;
		return 1;
	
	}

}

//main.cpp
#include<iostream>
#include"bank.h"
using namespace std;
char password[2][6]={{'0','0','0','0','0','0'},{'0','0','0','0','0','0'}};//全局变量,密码
float balance[2]={10000,0};//全局变量,账户余额
char name[2][6]={{'h','u','a','h','u','a'},{'m','e','n','m','e','n'}};
int account[2][6]={{1,1,1,1,1,1},{2,2,2,2,2,2}};
void main()
{
	int i=0;//作为用户标示符
	int j,k,a[6];
	char m;

	
	cout<<"欢迎来到华氏银行:";//欢迎界面
	while(1)
	{
		do{
		
			cout<<"请输入账户号:";
			for(j=0;j<6;j++)
			{
				cin>>a[j];
				cout<<a[j]<<"账户输入成功"<<endl;			
			}

			for(i=0;i<2;i++)
			{
				cout<<"******";
				j=compare_array<int,6>(a,account[i]);//?????????
				cout<<j<<"输入111111,j应为0"<<endl;
				if(j==0)
				{
					
					cout<<"账户合法"<<endl;
					break;
				}
			}
			if(j==0)
				break;
			k++;

		}while(k<3);//i=2,j=1则表示账号累计三次输入错误
		

		if(j==0)//账户正确,下一步验证密码
		{
			cout<<"请输入密码:";
			j=confirm_password(i);//验证密码
			if(j==0)//密码正确,办理业务
			{
				while(1)
				{
					cout<<"当前为"<<i<<"号顾客办理业务"<<endl;
					function(i);
					cout<<"按任意键继续办理业务,退出请按n"<<endl;
					cin>>m;
					if(m=='n'||m=='N')
						break;//业务办理完成,退出本次业务办理
				}
			}
			else if(j==1)//密码三次输入不正确,直接吞卡
				break;
		
		}
		else
			break;//三次累计输入账号错误,吞卡
		cout<<"按任意键选择其他账户继续办理业务,退出请按n"<<endl;
		cin>>m;
		if(m=='n'||m=='N')
				break;//业务办理完成,退出本次业务办理

	

	}
	cout<<"取款结束!";

}

//*************************************************************************

//bank.cpp

#include<iostream>
#include"bank.h"
using namespace std;
extern char password[2][6];
extern float balance[2];
extern char name[2][6];
extern int account[2][6];
/****************************************************************************/
//密码输入和验证
int confirm_password(int ii)
{
	cout<<"您是"<<ii<<"号顾客,请输入密码"<<endl;
	char pass_word[6];//存输入密码,方便验证
	int i,j=0;//j表示输密码次数
	do{
	for(i=0;i<6;i++)
	{
		cin>>pass_word[i];
	}
//************************************************************
//此段程序为第一次直接判断,现改为模板函数
/*	for(i=0;i<6;i++)
	{
		if(pass_word[i]==password[i])	
			continue;
		else
		{
			cout<<"密码错误,停止验证"<<endl;//只要有一位错误,就停止验证
			break;
		
		}
	
	}
	if(i==6)
	{
		cout<<"密码正确!"<<endl;
		return 0;
	}
	else
	{
		cout<<"密码错误,请重新输入"<<endl;
		j++;
	
	}                                                      */
//******************************************************************
	i=compare_array<char,6>(password[ii],pass_word);
	if(i==0)
		return 0;

	}while(j<3);
	cout<<"密码"<<j<<"次后还是错了"<<endl;
	return 1;
}
/***************************************************************/
//功能界面显示
void function(int ii)
{
			
			cout<<ii<<"号顾客选择功能"<<endl;
			int j;
			cout<<"请选择功能编号(0-4):"<<endl;
			cout<<"1.查询"<<endl<<"2.取款"<<endl<<"3.存款"<<endl<<"4.转账"<<endl<<"5.修改密码"<<endl<<"0.退出"<<endl;
			cin>>j;
			cout<<"谢谢,你选择了"<<j<<"号功能"<<endl;
	
	switch(j)
	{
		case 1:showbalance(ii);break;
		case 2:drawmoney(ii);break;
		case 3:savemoney(ii);break;
		case 4:trans_account(ii);break;
		case 5:change_password(ii);break;

		case 0:cout<<"谢谢,欢迎下次再来"<<endl;break;
		default:cout<<"输错,不要急!"<<endl;	
	
	}
//	return 0;
}
//*********************************************************************************

//显示余额
float showbalance(int ii)
{
	cout<<ii<<"号顾客余额为"<<balance[ii]<<endl;
	return balance[ii];//返回余额

}

//*********************************************************************************
float drawmoney(int ii)
{
	
	cout<<ii<<"号顾客取款"<<endl;
	int j,i,m,k;//k为取款金额,m为活期存款天数
	//float current_balance;
	cout<<"请输入存款种类,活期请输入0,定期请输入1:";
	cin>>j;

	if(j==0)
	{
		cout<<"请输入存款天数:";
		cin>>m;
		balance[ii]+=0.005/360*m;//当这里没有乘balance时,应该得10000.00138,但是输出为10000,因为我设置balance为单精度,
		                     //只能保留6位有效数字,故后面的138都已经直接忽略了
		cout<<ii<<"号顾客当前余额"<<balance[ii]<<endl;
	
	}
	else if(j==1)
	{
		cout<<"请输入定期存期:三个月请输入1;六个月请输入2;一年请输入3;两年请输入4;三年清输入5;五年请输入6:";
		cin>>i;
		
		switch(i)
		{
			case 1:balance[ii]+=0.031/12*3*balance[ii];break;
			case 2:balance[ii]+=0.033/12*6*balance[ii];break;
			case 3:balance[ii]+=0.035/12*1*balance[ii];break;
			case 4:balance[ii]+=0.044/12*2*balance[ii];break;
			case 5:balance[ii]+=0.050/12*3*balance[ii];break;
			case 6:balance[ii]+=0.055/12*5*balance[ii];break;
		}
		cout<<balance[ii]<<"**************"<<endl;
	
	}
	else
	{
		cout<<"输入错误"<<endl;
		return balance[ii];
	}
	cout<<"请输入取款金额:";
	cin>>k;
	cout<<"您共取款"<<k<<"元"<<endl;
	balance[ii]-=k;
	cout<<ii<<"号顾客余额是"<<balance[ii]<<"元"<<endl;
	return balance[ii];//返回余额
	
}
//****************************************************************************
float savemoney(int ii)
{
	
	cout<<ii<<"号顾客存钱"<<endl;
	int i;
	cout<<"请输入存钱数(这里定义的是整型):";
	cin>>i;
	balance[ii]+=i;
	showbalance(ii);
	return balance[ii];

}

//****************************************************************************

void change_password(int ii)
{
	int i;
	char j;
	
	cout<<ii<<"号顾客修改密码"<<endl;
	
	char pass_word1[6],pass_word2[6];//两个数组来存放用户先后两次输入新密码,方便比较
	
	while(1)
	{
		cout<<"请输入新密码:"<<endl;
		for(i=0;i<6;i++)
			cin>>pass_word1[i];
		cout<<"请再次输入新密码:"<<endl;
		for(i=0;i<6;i++)
			cin>>pass_word2[i];
		for(i=0;i<6;i++)//验证前后两次密码是否一致
		{
			if(pass_word1[i]==pass_word2[i])	
				continue;
			else
			
				break;
		
			
	
		}
		if(i==6)
		{
		
			for(i=0;i<6;i++)
				password[ii][i]=pass_word2[i];//在全局变量中修改新密码
			cout<<"两次输入密码一致,修改成功"<<endl;
			cout<<"当前密码:";
			for(i=0;i<6;i++)
				cout<<password[ii][i];
		}
		else

			cout<<"两次输入密码不一致,修改无效"<<endl;//只要有一位错误,修改无效
		cout<<"任意键继续,退出请按n"<<endl;
		cin>>j;
		if(j=='n'||j=='N')
			break;
		else ;//else可以省略掉,这里写了也无妨,分号表示空语句,什么都不做就行了

	

	}

}
//***********************************************************************************
//***********************************************************************************
//功能,对给入的两个数组比较是否一致,,数组长途要提前给定
/*
template<class type,int n>
int compare_array(type a[],type b[])//将比较两个数组元素是否一样的功能模块化,构建模板函数
{
	int i;

	for(i=0;i<n;i++)
	{
		if(a[i]==*(b+i))	
			continue;
		else
		{
			cout<<"错误,停止验证"<<endl;//只要有一位错误,就停止验证
			break;
		
		}
	
	}
	if(i==6)
	{
		cout<<"两数组完全一致!"<<endl;
		return 0;
	}
	else
	{
		cout<<"两数组不一致"<<endl;
		return 1;
	
	}

}
*/
void trans_account(int ii)
{
	cout<<ii<<"号顾客进行转账操作"<<endl;
	char x;
	float t;//做中转钱数用
	int m[6],n[6],j;//存转账账号
	int i,s;//i还是用来标记用户
	while(1)
	{
		cout<<"输入您要转账的账号:"<<endl;
		for(j=0;j<6;j++)
			cin>>m[j];
		cout<<"请再次输入转账账号:"<<endl;
		for(j=0;j<6;j++)
			cin>>n[j];
		j=compare_array<int,6>(m,n);
		if(j==0)
		{
			cout<<"两次输入转账账号一致,现在验证账号是否合法"<<endl;
			for(i=0;i<2;i++)//两次循环来验证账号是否合法,因为这里只有两个账号
			{
				cout<<"******";
				j=compare_array<int,6>(m,account[i]);//在比较的时候,不一致会提示:错误,停止验证,两数组不一致
				cout<<j<<"账户合法,j应为0"<<endl;
				if(j==0)
				{	
					cout<<i<<"号账户合法,请输入转账金额,单精度型"<<endl;	
					s=i;
					cin>>t;
					balance[ii]-=t;
					balance[i]+=t;
					cout<<"转账完成"<<endl;

					break;	//转账完成后,立刻跳出for循环,就直接到了下一次输入转账账号了
				}	
			}
//*******************************************************************************************
			if(j==0)//账户合法,转账完成后
			{
				cout<<"按任意键继续转账,退出请按n"<<endl;
				cin>>x;
				if(x=='n'||x=='N')
					break;
			}
			else if(j==1)//两次输入一致,但是账户不合法
			{
				cout<<"账户不合法,按任意键重新输入,退出请按n"<<endl;
				cin>>x;
				if(x=='n'||x=='N')
					break;
				
			
			}
		
		

		
		}
		else if(j==1)
		{
			cout<<"两次输入账号不一致,按任意键重新输入,退出请按n"<<endl;
			cin>>x;
			if(x=='n'||x=='N')
				break;

		}
	

	}

	cout<<"转账结束!"<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: