/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: fibnacci.cpp
* 作 者:高古尊
* 完成日期:2013 年12月18日
* 版本号: v1.0
*
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:
*/
#include <iostream>
#include <cstdio>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <iomanip>
using namespace std;
//声明一个银行卡的类型
struct Account
{
long accNumber; //卡号
string accName;//户主
string password;//密码
double balance;//余额
string identity;//身份证号
int state;//状态 0:正常 -1:挂失 -2:冻结 -3:销户
};
//银行可以开的卡的数量
Account array[20000];
//表示卡号的初始值
long Number=10001;
//表示银行中已开卡的数量
int size=0,l;
void welcome();//欢迎界面
bool findAnAccount();//查找一个帐号在数组中的位置
void readData();//把储户信息从文件中读到结构体数组中
void writeData();//把储户信息从结构体数组中写入磁盘文件
void mainFrame();//主界面
void openAccount();//开户
void changeAccount(int );//销户,挂失,改密
void getcash(int );//得到键盘录入的存款(取款)金额
void dispAnAccount();//显示一个帐号的帐户信息
bool key(int );//密码验证
void status();//卡的状态
void zanting();//暂停一下
string getpass(int );//输入限制
void kongge(int );//空格对齐
void zhuanzhang();//转账
bool jianyan();//验证身份证,姓名等信息是否与卡上相符
void changestate(int);//销户,解挂,解冻等操作
int main()
{
readData();
welcome();//欢迎界面
return 0;
}
void welcome()
{
kongge(25);
cout<<"+----------------------+"<<endl;
kongge(25);
cout<<"+ 欢迎使用银行储蓄系统 +"<<endl;
kongge(25);
cout<<"+----------------------+"<<endl;
if(key(1))
{
mainFrame();
}
else
{
cout<<endl;
}
}
void mainFrame()
{
char order,ch;
kongge(18);
cout<<"+--------------------------------------+"<<endl;
kongge(18);
cout<<"+ 开户 请按1 销户 请按2 存款 请按3 +"<<endl;
kongge(18);
cout<<"+ 取款 请按4 查询 请按5 挂失 请按6 +"<<endl;
kongge(18);
cout<<"+ 改密 请按7 解挂 请按8 解冻 请按9 +"<<endl;
kongge(18);
cout<<"+ 转账 请安x 退出 请按0 +"<<endl;
kongge(18);
cout<<"+--------------------------------------+"<<endl;
cout<<"请输入操作指令:";
while(1)
{
ch=getch();
if((ch>='0'&&ch<='9')||ch=='x')
{
order=ch;
putch(ch);
break;
}
}
cout<<endl;
cout<<endl;
switch(order)
{
case '1':
openAccount();//开户
zanting();//暂停一下
mainFrame();
break;
case '2':
changestate(1);//销户
break;
case '3':
if(findAnAccount())
{
if(array[l].state==0)
{
getcash(1);//存款
writeData();
zanting();//暂停一下
mainFrame();
}
else
{
cout<<"该卡处于";
status();//卡的状态
cout<<endl;
mainFrame();
}
}
else
{
mainFrame();
}
break;
case '4':
changestate(6);//取款
break;
case '5':
if(findAnAccount())
{
dispAnAccount();//显示一个帐号的帐户信息
zanting();//暂停一下
mainFrame();
}
else
{
mainFrame();
}
break;
case '6'://挂失
changestate(2);
break;
case '7'://改密
changestate(3);
break;
case '8'://解挂
changestate(4);
break;
case '9'://解冻
changestate(5);
break;
case 'x':
changeAccount(7);//转账
break;
default:
cout<<"系统错误!"<<endl;
}
}
void openAccount()//开户
{
string num;
l=size;
array[size].state=0;
array[size].accNumber=Number++;
cout<<"请输入户主姓名:";
cin>>array[size].accName;
cout<<endl;
cout<<"请输入身份证号码:";
array[size].identity=getpass(18);
cout<<endl;
cout<<"请输入密码:";
array[size].password=getpass(6);
cout<<endl;
cout<<"请再次输入密码:";
num=getpass(6);
cout<<endl;
cout<<"请输存款金额:";
cin>>array[size].balance;
if(num==array[size].password)//判断两次密码是否一样
{
l=size;
dispAnAccount();
size++;
writeData();
cout<<"开户成功!"<<endl;
}
else
{
cout<<"开户失败!"<<endl;
mainFrame();
}
}
void changeAccount(int a)//销户或挂失
{
switch (a)
{
case 1:
if(key(2))
{
array[l].balance=0;
array[l].state=-3;
dispAnAccount();
cout<<"注销成功!"<<endl;
}
else
{
cout<<"注销失败!"<<endl;
}
mainFrame();
break;
case 2:
if(key(2))
{
array[l].state=-1;
dispAnAccount();
cout<<"挂失成功!"<<endl;
openAccount();
}
else
{
cout<<"挂失失败!"<<endl;
mainFrame();
}
break;
case 3:
if(key(2))
{
cout<<"请输入新的秘密";
array[l].password=getpass(6);
cout<<endl;
cout<<"修改密码成功!"<<endl;
mainFrame();
}
else
{
cout<<"修改密码失败!"<<endl;
mainFrame();
}
break;
case 4:
if(key(2))
{
array[l].state=0;
dispAnAccount();
cout<<"解挂成功!"<<endl;
}
else
{
cout<<"解挂失败!"<<endl;
mainFrame();
}
break;
case 5:
if(key(2))
{
array[l].state=0;
dispAnAccount();
cout<<"解冻成功!"<<endl;
}
else
{
cout<<"解冻失败!"<<endl;
mainFrame();
}
break;
case 6:
if(key(2))
{
getcash(2);//取款
}
else
{
array[l].state=-2;
mainFrame();
}
break;
case 7:
if(key(2))
{
zhuanzhang();//转账
}
else
{
array[l].state=-2;
mainFrame();
}
break;
default:
cout<<"系统错误!"<<endl;
}
}
void getcash(int a)//得到键盘录入的存款(取款)金额
{
int i=3;
double mony;
if(a==1)
{
while(i--)
{
cout<<"请输入存款金额:";
cin>>mony;
if(mony>=0)
{
array[l].balance=array[l].balance+mony;
cout<<"余额为:"<<setiosflags(ios::fixed)<<setprecision(2)<<array[l].balance<<endl;
cout<<"存款成功!"<<endl;
break;
}
else
{
cout<<"输入有误!"<<endl;
}
}
}
else
{
while(i--)
{
cout<<"请输入取款金额:";
cin>>mony;
if(mony>=0)
{
if(mony>array[l].balance)
{
cout<<"余额不足!"<<endl;
}
else
{
array[l].balance=array[l].balance-mony;
cout<<"余额为:"<<setiosflags(ios::fixed)<<setprecision(2)<<array[l].balance<<endl;
cout<<"取款成功!"<<endl;
break;
}
}
else
{
cout<<"输入有误!"<<endl;
}
}
}
}
void dispAnAccount()//显示一个帐号的帐户信息
{
cout<<"+-----------------------------------------------------------------------------+"<<endl;
cout<<"+"<<setw(10)<<"卡号"<<setw(1)<<'|'<<setw(10)<<"户主"<<setw(1)<<'|'<<setw(20)<<"身份证号"<<setw(1)<<'|'<<setw(15)<<"金额"<<setw(1)<<'|'<<setw(10)<<"状态"<<setw(1)<<'|'<<endl;
cout<<"+-----------------------------------------------------------------------------+"<<endl;
cout<<"+"<<setw(10)<<array[l].accNumber<<setw(1)<<'|'<<setw(10)<<array[l].accName<<setw(1)<<'|'<<setw(20)<<array[l].identity<<setw(1)<<'|'
<<setw(15)<<setiosflags(ios::fixed)<<setprecision(2)<<array[l].balance<<setw(9)<<setw(1)<<'|'<<setw(10);
status();
cout<<setw(1)<<'|'<<endl;
cout<<"+-----------------------------------------------------------------------------+"<<endl;
}
bool key(int n)
{
bool f=false;
int i=3;
string name,key;
switch(n)
{
case 1://操作人员的录的验证
while(i--)
{
cout<<"请输入用户名:";
cin>>name;
cout<<"请输密码:";
key=getpass(6);
if((key!="111111")||(name!="gaoguzun"))
{
cout<<"用户名或密码输入错误。"<<endl;
}
else
{
f=true;
break;
}
}
break;
case 2://取款验证
while(i--)
{
cout<<"请输密码:";
key=getpass(6);
if(key!=array[l].password)
{
cout<<"密码输入错误。"<<endl;
}
else
{
f=true;
break;
}
}
break;
}
return f;
}
void writeData()//把储户信息从结构体数组中写入磁盘文件
{
int n;
ofstream outfile("bank.txt",ios::out);
if(!outfile)
{
cout<<"文件打开失败!";
}
else
{
for(n=0; n<size; n++)
{
outfile<<array[n].accNumber<<setw(10)<<array[n].accName<<setw(30)<<array[n].identity<<setw(10)<<array[n].password<<setw(10)<<array[n].balance<<setw(10)<<array[n].state<<endl;
}
outfile.close();
}
}
void readData()//把储户信息从文件中读到结构体数组中
{
int n=0;
ifstream infile("bank.txt",ios::in);
while(1)
{
infile>>array[n].accNumber>>array[n].accName>>array[n].identity>>array[n].password>>array[n].balance>>array[n].state;
if(array[n].accName!="\0")
{
Number=array[n].accNumber+1;
n++;
}
else
{
size=n;
infile.close();
break;
}
}
}
bool findAnAccount()//查找一个帐号在数组中的位置
{
int i,num;
bool f=true;
cout<<"请输入要查寻的卡号:";
cin>>num;
if(num>array[size-1].accNumber||num<array[0].accNumber)
{
cout<<"该卡尚未使用!"<<endl;
f=false;
}
else
{
for(i=0; i<size; i++)
{
if(num==array[i].accNumber)
{
l=i;
break;
}
}
}
cout<<endl;
return f;
}
void status()//卡的状态
{
switch(array[l].state)
{
case 0:
cout<<"正常";
break;
case -1:
cout<<"挂失";
break;
case -2:
cout<<"冻结";
break;
case -3:
cout<<"销户";
break;
default:
break;
}
}
void zanting()//暂停一下
{
cout<<"请按任意键键返回主菜单..."<<endl;
getch();
}
string getpass(int n)//密码,身份证,选择限制
{
char pass[20]="",ch;
int i=0;
while(i<n)
{
ch=getch();
if((ch>='0'&&ch<='9')||ch=='x')
{
pass[i]=ch;
if(n==6)//密码
{
putch('*');
}
else
{
putch(ch);
}
}
i++;
}
cout<<endl;
return pass;
}
void kongge(int n)//空格对齐
{
int i;
for(i=0; i<n; i++)
{
cout<<' ';
}
}
void zhuanzhang()
{
int i=3;
double mony;
while(i--)
{
cout<<"请输入转账金额:";
cin>>mony;
if(mony>array[l].balance)
{
cout<<"余额不足!"<<endl;
}
else
{
break;
array[l].balance=array[l].balance-mony;
}
}
if(findAnAccount())
{
if(array[l].state==0)
{
array[l].balance=mony+array[l].balance;
cout<<"转账成功!"<<endl;
}
else
{
cout<<"该卡处于";
status();//卡的状态
cout<<"状态!";
mainFrame();
}
}
}
bool jianyan()//验证身份证,姓名等信息是否与卡上相符
{
bool f=true;
string name,identity;
cout<<"请输入户主姓名:";
cin>>name;
cout<<endl;
cout<<"请输入身份证号码:";
identity=getpass(18);
cout<<endl;
if(name!=array[l].accName||identity!=array[l].identity)
{
f=false;
}
return f;
}
void changestate(int n)//销户,解挂,解冻等操作
{
if(findAnAccount())
{
if(jianyan())
{
if(array[l].state==0)
{
changeAccount(n);
zanting();//暂停一下
writeData();
}
else
{
cout<<"该卡处于";
status();//卡的状态
cout<<endl;
}
}
else
{
cout<<"信息与此卡不符!"<<endl;
}
}
mainFrame();
}
银行储蓄系统
最新推荐文章于 2022-03-27 20:34:26 发布