您的位置:首页 > 其它

会读取文件的银行系统(还不完善,销户后账号不能给下位个用户使用,欢迎找BUG,继续完善)

2013-01-01 19:19 381 查看
/*
02.* 程序的版权和版本声明部分
03.* Copyright (c)2012, 烟台大学计算机学院学生
04.* All rightsreserved.
05.* 文件名称: 银行系统
06.* 作  者:刘明亮
07.* 完成日期:2013年1月1日
08.* 版本号: v1.0
09.* 输入描述:无
10.* 问题描述:无
*/
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

//银行中最大的账户数量
#define MAXACCOUNTNUMBER 20000
//银行卡的开号初始值
#define INITNUMBER 10001

struct Account
{
long accNumber;   //卡号
char accName[20]; //户主
char accPwd[10];  //密码
double balance;   //余额
char flag[6];     //卡的状态
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//银行中银行卡数量
int size=0;
//销户卡号
long num;
//欢迎界面
void welcome();
//主界面
void mainFrame();
//读取帐户数据
void getInformation();
//读入帐户数据
void saveInformation();
//生成银行中自增卡号
long autoCreament();
//根据卡号查找卡的下标
int searchAccount(long accNumber);
//卡的信息
void printAccount(Account acc);
//密码鉴定
bool isPassLegal(char pass[]);

//开户
void openAccount();
//销户
void cancel();
//取款
void withdrawal();
//存款
void deposit();
//查询
void search();
//转账
void transfer();
//改密码
void changepassword();

int main()
{
char loginName[20];
char loginPwd[20];
int i;
//欢迎界面
welcome();
for(i=0;i<3;i++)
{
cout<<"请输入用户名:";
cin>>loginName;
cout<<"请输入密码:";
cin>>loginPwd;
if(strcmp(loginName,"admin")==0&&strcmp(loginPwd,"admin")==0)
{
getInformation();
mainFrame();
break;
}else{
cout<<"用户名或密码输入错误"<<endl;
}
}

return 0;
}
//欢迎界面
void welcome()
{
cout<<" +----------------------------------+"<<endl;
cout<<" |-------欢迎登陆银行系统-----------|"<<endl;
cout<<" +----------------------------------+"<<endl;
}
//主界面
void mainFrame()
{
int order;
cout<<"|--------------------------------|\n";
cout<<"|-----------1.开户---------------|\n";
cout<<"|-----------2.销户---------------|\n";
cout<<"|-----------3.取款---------------|\n";
cout<<"|-----------4.存款---------------|\n";
cout<<"|-----------5.查询---------------|\n";
cout<<"|-----------6.转账---------------|\n";
cout<<"|-----------7.改密码-------------|\n";
cout<<"|-----------8.退出---------------|\n";
cout<<"|--------------------------------|\n";
cout<<"请输入操作指令:";
cin>>order;
switch(order)
{
case 1:
openAccount();
break;
case 2:
cancel();
break;
case 3:
withdrawal();
break;
case 4:
deposit();
break;
case 5:
search();
break;
case  6:
transfer();
break;
case 7:
changepassword();
break;
case 8:
saveInformation();
cout<<"祝您心情愉快!"<<endl;
cout<<"欢迎您下次光临!"<<endl;
break;

}
}

//根据卡号查找卡的下标
long autoCreament()
{
if(size==0)
{
return INITNUMBER;
}
else
{
return array[size-1].accNumber+1;
}
}

/*
*根据卡号查找卡的下标
* 若返回值>=0,卡号是正确
* 若返回值=-1,卡号有误
*/
int searchAccount(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++)
{
if(array[i].accNumber==accNumber)
{
//找到了这张卡
pos=i;
break;
}
}
return pos;
}

//卡的信息
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;
}

//开户
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<<"开户成功,按Enter返回。"<<endl;
fflush(stdin);
getchar();
mainFrame();
}else{
cout<<"密码必须是6位的纯数字!"<<endl;
openAccount();
}
}else{
//2次输入的密码不一致
cout<<"两次输入的密码不一致!"<<endl;
openAccount();
}
}

//密码鉴定
bool isPassLegal(char pass[])
{
bool flag=true;
int len=strlen(pass),i;
if(len==6){
//满足6位
for(i=0;i<len;i++){
if(pass[i]<'0'||pass[i]>'9'){
flag=false;
break;
}
}
}else{
//不满足6位
flag=false;
}
return flag;
}

//销户
void cancel()
{
char key[7];
int i,pos,accNumber;
cout<<"请输入要销户的账号:";
cin>>accNumber;
num=accNumber;
//寻找该卡号
pos=searchAccount(accNumber);
cout<<"请输入密码:";
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[pos].accPwd)==0)
{
array[pos].balance=0;
strcpy(array[pos].flag,"不存在");
strcpy(array[pos].accName,"不存在");
cout<<"销户成功,请按Enter返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<"密码错误,请按Enter返回"<<endl;
fflush(stdin);
getchar();
mainFrame();

}
}

//取款
void withdrawal()
{
long accNum;//取款的账号
double money;//取款的金额
int pos,i;
Account key;
cout<<"请输入取款的账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
//卡号有误
cout<<"卡号不存在,请重新输入卡号"<<endl;
//...
withdrawal();
}
else
{
for(i=1;i<4;i++)
{

cout<<"请输入密码:";
cin>>key.accPwd;
if(strcmp(array[pos].accPwd,key.accPwd)==0)
{
break;
}
else
{
if(i<3)
{
cout<<"密码错误!请核对后重新输入\n";
cout<<"您还有"<<3-i<<"次机会重新输入密码。"<<endl;
}
else
{
cout<<"密码错误超过3次,退出系统……\n";
exit(0);
}

}
}
}
cout<<"请输入取款金额:";
cin>>money;
//展示下取款前卡的信息
cout<<"取款前卡的信息:"<<endl;
printAccount(array[pos]);
if(array[pos].balance<money)
{
cout<<"您的余额不足,请重新输入取款账号和密码:"<<endl;
cout<<"------按任意键返回------"<<endl;
withdrawal();
}
else
{
//找到了取卡号所对应的卡
array[pos].balance-=money;
}
//展示存款后卡的信息
cout<<"取款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"取款成功,按enter键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();

}

//存款
void deposit()
{
long accNum;//存款的账号
double money;//存款的金额
int pos;
cout<<"请输入存款的账号:";
cin>>accNum;
cout<<"请输入存款金额:";
cin>>money;
pos=searchAccount(accNum);

if(pos==-1){
//卡号有误
cout<<"卡号不存在,请重新输入卡号:"<<endl;
deposit();
}else{
//展示下存款前卡的信息
cout<<"存款成功!"<<endl<<"存款前卡的信息:"<<endl;
printAccount(array[pos]);
//找到了该卡号所对应的卡
array[pos].balance+=money;
//展示存款后卡的信息
cout<<"存款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"存款成功,按Enter返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
//查询
void search()
{
long accNum;//查询的账号
int pos,i;
Account key;
cout<<"请输入查询的账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1 ||accNum==num)//|| strcpy(array[size].accName,"不存在"))
{
//卡号有误
cout<<"卡号不存在,请重新输入卡号:"<<endl;
//...
search();
}else{
for(i=1;i<4;i++)
{

cout<<"请输入密码:";
cin>>key.accPwd;
if(strcmp(array[pos].accPwd,key.accPwd)==0)
{
break;
}
else
{
if(i<3)
{
cout<<"账号或密码错误!请核对后重新输入\n";
cout<<"您还有"<<3-i<<"次机会重新输入账号和密码。"<<endl;
}
else
{
cout<<"密码错误超过3次,退出系统……\n";
exit(0);
}

}
}
//展示卡的信息
cout<<"您的卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"查询成功,按Enter返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
//修改密码
void changepassword()
{
long accNum;//账号

int pos,errornum=0;
char pwd[10],pwd1[10],pwd2[10],pwd3[10];
for(errornum=0;errornum<3;errornum++){
cout<<"请输入账号:";
cin>>accNum;
pos=searchAccount(accNum);
cout<<"请输入密码:";
cin>>pwd;

if(strcmp(array[pos].accPwd,pwd)==0&&pos!=-1)
{
if(strcmp(array[pos].flag,"正常")==0)
{
cout<<"请输入原密码:";
cin>>pwd1;
cout<<"请输入新密码:";
cin>>pwd2;
cout<<"请确认新密码:";
cin>>pwd3;
if(strcmp(array[pos].accPwd,pwd1)==0&&strcmp(pwd2,pwd3)==0&&isPassLegal(pwd2))
{
strcpy(array[pos].accPwd,pwd3);
cout<<"改密成功!"<<endl;
printAccount(array[pos]);//打印改密后卡的信息
break;
}else
{
cout<<"您输入的密码有误!";
}
}
else
{
cout<<"卡的状态异常,无法操作!";
}
}else
{
cout<<"账号或密码输入错误!"<<endl;
}

}
cout<<"按Enter返回主菜单。"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
//转账
void transfer()
{
long accNum1,accNum2;
int pos1,pos2,errornum=0;
double money;
char pwd[10];
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入您的账号:";
cin>>accNum1;
pos1=searchAccount(accNum1);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos1].accPwd,pwd)==0&&pos1!=-1)
{
if(strcmp(array[pos1].flag,"正常")==0)
{
//转账前卡的信息
cout<<"转账前卡的信息:"<<endl;
printAccount(array[pos1]);
cout<<"请输入转账金额:";
cin>>money;
cout<<"请输入要转入的账号:"<<endl;
cin>>accNum2;
pos2=searchAccount(accNum2);
if(pos2!=-1&&strcmp(array[pos2].flag,"正常")==0)
{
array[pos1].balance-=money;
array[pos2].balance+=money;
cout<<"转账成功!"<<endl;
cout<<"您成功的向"<<accNum2<<"账号转入"<<money<<"钱"<<endl;
cout<<"转账后您卡的信息:"<<endl;
printAccount(array[pos1]);

break;
}else{
cout<<"您输入的账号有误或状态异常,转账失败!"<<endl;
break;
}
}else{
cout<<"卡的状态异常,无法进行操作!";
break;
}
}
else{
cout<<"账号或密码错误!";
}
}
cout<<"按Enter返回主菜单"<<endl;
fflush(stdin);
getchar();
mainFrame();
}

//退出时,将变化了的数据保存到文件中,下次运行,接着上次的业务继续办下去
void saveInformation() //退出前保存数据
{
ofstream outfile("bank.txt",ios::out);  //以输入的方式打开文件
if(!outfile)       //测试是否成功打开
{
cerr<<"不好啦,储户信息保存不了了!"<<endl;
exit(1);
}
for(int i=0;i<size;i++)
{
outfile<<array[i].accNumber<<"  "<<array[i].accName<<" "<<array[i].accPwd<<" "<<array[i].balance<<" "<<array[i].flag<<endl;

}
outfile.close();

}
//从文件中读取数据,保存到全局数组中
void getInformation()  //用于读取帐户数据
{
ifstream infile("bank.txt",ios::in);  //以输入的方式打开文件
if(!infile)       //测试是否成功打开
{
cerr<<"不好啦,找不到储户信息了!"<<endl;
exit(1);
}

while(!infile.eof())
{
infile>>array[size].accNumber>>array[size].accName>>array[size].accPwd>>array[size].balance>>array[size].flag;
size++ ;
}
size-=1;
infile.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐