/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院
* All rightsreserved.
* 文件名称:1.cpp
* 作 者:李慧慧
* 完成日期:2012年12月27日
* 版 本 号: v1.0
* 输入描述: 无
* 问题描述:略
* 程序输出: 银行系统的操作程序
* 问题分析:略
*/
#include <iostream>
#include <string.h>
#include<iomanip>
#include <stdio.h>
using namespace std;
//银行中最大的账户数量
#define MAXACCOUNTNUMBER 100000
//银行卡的开号初始值
#define INITNUMBER 10001
struct Account
{
long accNumber; //卡号
char accName[20]; //户主
char accPwd[10]; //密码
double balance; //余额
char flag[6]; //卡的状态
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//银行中银行卡数量
int size=0;
//欢迎主界面
void welcome();
//登录
void login();
//主界面
void work();
//选择操作指令
void choose();
//开户
void openAccount();
//生成自增卡号
long autoCreament();
//输出指定卡的信息
void printAccount(Account acc);
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);
//校验密码必须是6-8位,而且是纯数字
bool isPassLegal(char pass[]);
//存款
void deposit();
//取款
void draw();
//查询
void demand();
//销户
void close();
//退出
void quit();
int main()
{
welcome();
login();
work();
choose();
return 0;
}
void welcome()
{
cout<<"+--------------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<"| 欢迎使用储蓄业务综合平台 |"<<endl;
cout<<"| |"<<endl;
cout<<"+--------------------------------------------+"<<endl;
}
void login()
{
int i;
char loginname[10];
char loginPwd[10];
for(i=0;i<3;i++)
{
cout<<"请输入管理员账号:";
cin>>loginname;
cout<<endl;
cout<<"请输入管理员密码:";
cin>>loginPwd;
cout<<endl;
if(strcmp(loginname,"admin")==0&&strcmp(loginPwd,"admin")==0)
{
cout<<endl;
break;
}
else
{
if(i<2)
{
cout<<"用户名或密码错误,请重新输入,您还有"<<2-i<<"次机会";
cout<<endl;
}else{
cout<<"对不起,您连续3次错误,退出系统!";
cout<<endl;
return;
}
}
}
}
void work()
{
cout<<"+------------------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<"| 1: 开户 2: 存款 |"<<endl;
cout<<"| 3:取款 4:查询 |"<<endl;
cout<<"| 5:销户 6:退出 |"<<endl;
cout<<"| |"<<endl;
cout<<"+------------------------------------------------+"<<endl;
}
void choose()
{
char i;
cout<<"请输入操作指令:"<<endl;
cin>>i;
switch(i)
{
case'1':
openAccount();
break;
case'2':
deposit();
break;
case'3':
draw();
break;
case'4':
demand();
break;
case'5':
close();
break;
case'6':
quit();
break;
default:
cout<<"对不起,输入错误!"<<endl;
break;
}
}
void openAccount()
{
char Pwd1[10],Pwd2[10];
cout<<"请输入户主:";
cin>>array[size].accName;
cout<<"请输入密码:";
cin>>Pwd1;
cout<<"请再次输入密码:";
cin>>Pwd2;
//验证2次输入的密码是否一致
if(strcmp(Pwd1,Pwd2)==0)
{
//2次密码一致
if(isPassLegal(Pwd1))
{
//密码是合法
//
strcpy(array[size].accPwd,Pwd1);
cout<<"请输入金额:";
cin>>array[size].balance;
strcpy(array[size].flag,"正常");
//写卡号
array[size].accNumber=autoCreament();
printAccount(array[size]);
size++;
cout<<"开户成功,按任意键返回"<<endl;
fflush(stdin);//清空缓存区
getchar();
work();
choose();
}
else
{
cout<<"密码必须是纯数字,并且是6-8位"<<endl;
openAccount();
}
}
else
{
cout<<"两次密码输入不一致"<<endl;
openAccount();
}
}
bool isPassLegal(char pass[])
{
bool flag=true;
int len=strlen(pass),i;
if(len<9&&len>=6){
//满足6-8位
for(i=0;i<len;i++){
if(pass[i]<48||pass[i]>57){
flag=false;
break;
}
}
}else{
//不满足6-8位
flag=false;
}
return flag;
}
long autoCreament()
{
if(size==0){
return INITNUMBER;
}else{
return array[size-1].accNumber+1;
}
}
//输入卡的信息
void printAccount(Account acc)
{
cout<<"|----------------------------------------|"<<endl;
cout<<setiosflags(ios::left)<<"|"<<setw(8)<<"卡号"<<setw(8)<<"户主"<<setw(8)<<"密码"<<setw(8)<<"金额"<<setw(8)<<"状态"<<"|"<<endl;
cout<<setiosflags(ios::left)<<"+----------------------------------------+"<<endl;
cout<<setiosflags(ios::left)<<"|"<<setw(8)<<acc.accNumber<<setw(8)<<acc.accName<<setw(8)<<acc.accPwd<<setw(8)<<acc.balance<<setw(8)<<acc.flag<<"|"<<endl;
cout<<"|----------------------------------------|"<<endl;
}
/*根据卡号查找卡的下标
* 若返回值>=0,卡号是正确
* 若返回值=-1,卡号有误
*/
int searchAccount(long accNumber)
{
int i,pos;
for(i=0;i<size;i++)
{
if(array[i].accNumber==accNumber)
{
pos=i;//找到了这张卡
break;
}
else{
pos=-1;
}
}
return pos;
}
//存款
void deposit()
{
long accNum,accNum1;//存款的账号
double money;//存款的金额
int pos;
cout<<"请输入存款账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
cout<<"账号有误,请重新输入账号"<<endl;
deposit();
}
cout<<"请再次输入账号:";
cin>>accNum1;
if(accNum!=accNum1)
{
cout<<"两次输入的账号不一致,请确认后再次输入"<<endl;
}
else{
////输出存款前的信息
cout<<"存款前卡的信息"<<endl;
printAccount(array[pos]);//找到了这张卡所对应的卡
cout<<"请输入您要存款的金额:"<<endl;
cin>>money;
array[pos].balance+=money;
//输出存款后的信息
cout<<"存款后卡的信息"<<endl;
printAccount(array[pos]);
cout<<"存款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
work();
choose();
}
}
//取款
void draw()
{
long accNum;//取款的账号
double money;//取款的金额
int pos,i;
Account Pwd;
cout<<"请输入取款账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
//卡号有误
cout<<"卡号有误,请重新输入账号"<<endl;
draw();
}
else
{
for(i=0;i<3;i++)
{
cout<<"请输入密码:";
cin>>Pwd.accPwd;
if(strcmp(array[pos].accPwd,Pwd.accPwd)==0)
{
break;
}
else
{
if(i<2)
{
cout<<"密码错误,请请确认后重新输入,您还有"<<2-i<<"次机会";
cout<<endl;
}
else
{
cout<<"您连续3次输入错误,退出系统!";
cout<<endl;
return;
}
}
}
}
//输出取款前的信息
cout<<"取款前卡的信息"<<endl;
printAccount(array[pos]);//找到了这张卡所对应的卡
cout<<"请输入取款金额";
cin>>money;
if(array[pos].balance<money)
{
cout<<"您的余额不足,请重新输入取款金额"<<endl;
cout<<"*****按任意键返回*****"<<endl;
draw();
}
else
{
array[pos].balance-=money;
}
//输出取款后的信息
cout<<"取款后卡的信息"<<endl;
printAccount(array[pos]);
cout<<"取款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
work();
choose();
}
//查询
void demand()
{
int i,pos;
long accNum;
Account Pwd;
cout<<"请输入查询账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
cout<<"卡号有误,请重新输入账号"<<endl;
demand();
}
else
{
for(i=0;i<3;i++)
{
cout<<"请输入密码:";
cin>>Pwd.accPwd;
if(strcmp(array[pos].accPwd,Pwd.accPwd)==0)
{
break;
}
else
{
if(i<2)
{
cout<<"密码错误,请请确认后重新输入,您还有"<<2-i<<"次机会";
cout<<endl;
}
else
{
cout<<"您连续3次输入错误,退出系统!";
cout<<endl;
return;
}
}
}
}
cout<<"您卡的信息如下"<<endl;
printAccount(array[pos]);
cout<<"*****按任意键返回*****"<<endl;
fflush(stdin);
getchar();
work();
choose();
}
void close()
{
int i,pos;
long accNum,accNum2;
Account Pwd;
cout<<"请输入销户账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
cout<<"卡号有误,请重新输入账号"<<endl;
close();
}
cout<<"请再次输入账号:";
cin>>accNum2;
if(accNum!=accNum2)
{
cout<<"两次输入的账号不一致,请确认后再次输入"<<endl;
}
else
{
for(i=0;i<3;i++)
{
cout<<"请输入密码:";
cin>>Pwd.accPwd;
if(strcmp(array[pos].accPwd,Pwd.accPwd)==0)
{
break;
}
else
{
if(i<2)
{
cout<<"密码错误,请请确认后重新输入,您还有"<<2-i<<"次机会";
cout<<endl;
}
else
{
cout<<"您连续3次密码输入错误,销户失败!"<<endl;
cout<<"*****按任意键返回*****"<<endl;
fflush(stdin);
getchar();
work();
choose();
return;
}
}
}
}
cout<<"销户前卡的信息"<<endl;
printAccount(array[pos]);//找到了这张卡所对应的卡
cout<<"您将进行销户!"<<endl;
getchar();
array[size].balance=0;
strcpy(array[size].flag,"异常");
strcpy(array[size].accName,"异常");
cout<<endl<<"销户后卡的信息:"<<endl;
printAccount(array[size]);
cout<<endl<<"销户成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
work();choose();
}
void quit()
{
cout<<"谢谢使用,欢迎下次光临。"<<endl;
return;
}
/*
* 程序的版权和版本声明部分
* Copyright (