琢磨几天终于完成了,貌似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[n],type b[n]);//将比较两个数组元素是否一样的功能模块化,构建模板函数
//***********************************************************************************
//***********************************************************************************
//功能,对给入的两个数组比较是否一致,,数组长途要提前给定
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;
}