第二版银行储蓄系统
来源:互联网 发布:博拉网络上市最新消息 编辑:程序博客网 时间:2024/04/27 08:24
代码:
#include <iostream>#include <iomanip>#include <windows.h>#include <cstring>#include <fstream>#include <cstdlib>#include <conio.h>#include <ctype.h>using namespace std;const int upnum=2000;//系统最多容纳的用户数class Bank;class User{public: void setUser(int acc,string na,int pw,double mon,double bal,string id,int sta); void showName(); void showBalance(string prompt);//显示账户余额 bool psaaWordISRight();//判断密码是否正确 bool ISNormalUser();//存款,取款,转账等功能需要账户处于正常状态,判断账户是否处于正常状态 friend class Bank;//将Bank设为User的友元类private: int account;//账号 int password;//密码 string name;//名字 double balance;//余额 double money;//未加利率的金额 string identificant;//身份证号 int status;//账户状态:0—正常,1—挂失,2—销户};class Bank{public: Bank();//从文件中读取数据 ~Bank();//程序结束时将数据存入文件中 void work();//业务驱动 void openAccount();//开户 void cancelAccount();//销户 void save();//存款 void withdraw();//取款 void showAccount();//显示余额 void transferAccount();//转账 void reportLoss();//挂失 void canlelLoss();//解除挂失 void updatePassword();//修改密码 int getUser();//输入账号查询用户,返回用户在对象数组的下表private: int N;//实际用户数目 static double rate;//利率 User users [upnum];//User数组};double Bank::rate=0.0225;int pass();//业务员登录int chooseInMenu();//显示菜单并由业务员选择int intputPassword();//返回键盘输入的密码int m=0;//记录明细业务Bank::Bank(){ ifstream infile("account.txt",ios::in); if(!infile) { cerr<<"open error!"<<endl; exit(1); } int i=0; int acc; int pw; string na; double bal; string id; int sta; double mon; while (infile>>acc>>na>>pw>>bal>>id>>sta) { users[i].setUser(acc,na,pw,mon,bal,id,sta); i++; } N=i; infile.close();}Bank::~Bank(){ ofstream outfile("account.txt",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } int i; for(i=0; i<N; i++) { outfile<<users[i].account<<" "; outfile<<users[i].name<<" "; outfile<<users[i].password<<" "; outfile<<users[i].balance<<" "; outfile<<users[i].identificant<<" "; outfile<<users[i].status<<" "<<endl; } outfile.close();}void Bank::work()//work函数对业务进行判断{ int ichoice; do { ichoice=chooseInMenu(); switch(ichoice) { case 1: openAccount(); //开户 break; case 2: cancelAccount(); //销户 break; case 3: save(); //存款 break; case 4: withdraw(); //取款 break; case 5: showAccount(); //查余额 break; case 6: transferAccount(); //转账 break; case 7: reportLoss(); //挂失 break; case 8: canlelLoss(); //解除挂失 break; case 9: updatePassword(); //修改密码 break; case 0: cout<<"+++++欢迎再次您使用++++++"<<endl; } } while(ichoice);}void Bank::openAccount(){ if(N==upnum) { cout<<"银行用户数目已达上限,不能在开户!"<<endl; return ; } int acc; int pw; string na; double mon; double bal; string id; int sta; int ipw1,ipw2; int year; acc=10001+N; cout<<"正在开户......"<<endl; acc=10001+N; cout<<"账号:"<<acc<<endl; cout<<"请输入户主的名字:"; cin>>na; cout<<"请输入身份证号:"; cin>>id; cout<<"请输入密码:"; ipw1=intputPassword(); cout<<"确认密码:"; ipw2=intputPassword(); if(ipw1==ipw2) { pw=ipw1; sta=0; cout<<"存入金额:"; cin>>bal; ofstream outfile1("expence_record.txt",ios::app);//打开文件录入账号和账号之间的存取明细 if(!outfile1) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } outfile1<<acc<<" 存入 "<<acc<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<bal<<" 元"<<endl; outfile1.close();//关闭文件 ofstream outfile2("account.txt",ios::app);//打开文件存将用户信息存入文件 if(!outfile2) { cerr<<"account.txt file cannot open!"<<endl; exit(1); } outfile2<<acc<<" "<<na<<" "<<ipw1<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<bal<<" "<<id<<" "<<sta<<endl; outfile2.close();//关闭文件 cout<<"请输入要存入的期限(年):"; cin>>year; double sum=bal+bal*double(year)*rate; cout<<"期限到时,您将拥有"; cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum<<"元"<<endl; users[N].setUser(acc,na,pw,mon,sum,id,sta); N++; cout<<"成功开启!"<<endl; } else { cout<<"两次密码不一致,开启账户失败!"<<endl; }}void Bank::cancelAccount()//销户函数{ int who; who=getUser(); if(who>=0) { users[who].showName(); if(users[who].psaaWordISRight()) { users[who].showBalance("余额"); cout<<"确认销户(y/n)?"; if(tolower(getchar())=='y') { users[who].showBalance("销户成功!,本次取款金额为"); users[who].balance=0; users[who].status=2; } else { cout<<"您取消了此操作,销户失败"<<endl; } fflush(stdin); //清理键盘缓存区已有的输入 } }}void Bank::save()//函数账户存钱{ int who,year; double money; who=getUser();//输入所要存款的用户账号 if(who>=0) { if(users[who].status==0)//判断账户的是否挂失状态 { users[who].showName(); if(users[who].psaaWordISRight()) { cout<<"请输入存入的金额:"; cin>>money; ofstream outfile("expence_record.txt",ios::app); if(!outfile) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } outfile<<users[who].account<<" 存入 "<<users[who].account<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<money<<" 元"<<endl; outfile.close(); ifstream infile("expence_record.txt",ios::in);//录入开户后存钱明细 if(!infile) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } cout<<users[who].account<<" 存入 "<<users[who].account<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<money<<" 元"<<endl; infile.close(); cout<<"请输入要存入的期限(年):"; cin>>year; double sum=money+money*double(year)*rate; cout<<"期限到时,您将拥有"<<setiosflags(ios::fixed)<<setprecision(2)<<sum<<"元"<<endl; } } else if(users[who].status==1) { cout<<"该用户的账户处于挂失状态,存款失败!"<<endl; } else { cout<<"该用户的账户已经销户,存款失败!"<<endl; } } return;}void Bank::showAccount()//余额及账单显示函数{ int who; string sta[3]= {"正常","挂失","已经销户"}; who=getUser(); if(who>=0) { users[who].showName(); if(users[who].psaaWordISRight()) { users[who].showBalance("余额有"); cout<<"状态为"<<sta[users[who].status]<<endl; cout<<"是否要查看您的每一笔账单(y/n)?"; char ch; cin>>ch; if(ch=='y') { cout<<"您的账单如下:"<<endl; ifstream infile("expence_record.txt",ios::in); if(!infile) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } int r1,r4; string r2,r3,r5; while(infile>>r1>>r2>>r3>>r4>>r5) { if(r1==users[who].account) cout<<r1<<" "<<r2<<" "<<r3<<" "<<r4<<" "<<r5<<" 元"<<endl; } infile.close(); } } } return ;}void Bank::withdraw()//取款函数{ int who; double money; who=getUser(); if(who>=0) { if(users[who].ISNormalUser()) { users[who].showName(); if(users[who].psaaWordISRight()) { cout<<"输入取款额"; cin>>money; if(money>users[who].balance)//判断所取钱的金额是否大于本有金额 { cout<<"对不起,您的余额不足!"<<endl; } else { users[who].balance-=money; users[who].showBalance("取款后,您还有"); ofstream outfile("expence_record.txt",ios::app); if(!outfile) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } outfile<<users[who].account<<" 取款 "<<users[who].account<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<money<<" 元"<<endl; outfile.close(); } } } } return ;}void Bank::transferAccount()//转账函数{ int whoout,whoin; double money; whoout=getUser(); cout<<"转出自"; if(whoout>=0) { if(users[whoout].ISNormalUser()) { users[whoout].showName(); if(users[whoout].psaaWordISRight())//判断所输入的密码是否正确 { cout<<"请输入转入的金额:"; cin>>money; if(money>users[whoout].balance)//判断往外转出的账户的金额是否足够 cout<<"金额不足,转账失败!"<<endl; else { cout<<"转出到:"; whoin=getUser(); if(whoin>=0) { if(users[whoin].ISNormalUser()) { users[whoout].balance-=money; users[whoin].balance+=money; users[whoout].showBalance("转账户,您有"); ofstream outfile("expence_record.txt",ios::app); if(!outfile) { cerr<<"expence_record file cannot open!"<<endl; exit(1); } outfile<<users[whoin].account<<" 转账到 "<<users[whoout].account<<" "<<setiosflags(ios::fixed)<<setprecision(2)<<money<<" 元"<<endl; outfile.close(); } } } } } } return ;}void Bank::reportLoss()//挂失函数{ int who; who=getUser(); if(who>=0) { users[who].showName(); if(users[who].psaaWordISRight()) { if(users[who].status==0) { users[who].status=1; cout<<"挂失成功!"<<endl; } else if(users[who].status==1) cout<<"该账户已经挂失!"<<endl; else cout<<"该账户已经销户,操作失败!"<<endl; } } return;}void Bank::canlelLoss()//解除挂失{ int who; who=getUser(); if(who>=0) { users[who].showName(); if(users[who].psaaWordISRight()) { if(users[who].status==0)//原来账户状态为0,表示状态正常,1表示挂失状态,2表示销户状态 { cout<<"该用户处于正常状态,不需要解除挂失!"<<endl; } else if(users[who].status==1) { users[who].status==0; cout<<"解除挂失成功"<<endl; } else { cout<<"该用户已销户,操作失败!"<<endl; } } } return ;}void Bank::updatePassword()//更新密码{ int who; int iPass1,iPass2; who=getUser(); if(who>=0) { users[who].showName(); if(users[who].psaaWordISRight()) { cout<<"新密码:"<<endl; iPass1=intputPassword();//输入新密码 cout<<"确认密码:"<<endl; iPass2=intputPassword(); if(iPass1==iPass2)//进行新密码确认 { users[who].password=iPass1; cout<<"密码修改成功!"<<endl; } else cout<<"两次输入的不同,修改失败!"<<endl; } }}int Bank::getUser()//返回函数,对文件中的用户信息进行搜索返回一个大于等于0的数表示找到,否则未找到{ int id; cout<<"账号:"; cin>>id; int idex=-1; int low=0,high=N-1,mid; while (low<=high) { mid=(low+high)/2; if(users[mid].account==id) { idex=mid; break; } else if(users[mid].account>id) high=mid-1; else low=mid+1; } if(idex<0) cout<<"此用户不存在,本次操作失败!"<<endl; return idex;}void User::setUser(int acc,string na,int pw,double mon,double bal,string id,int sta){ account=acc; password=pw; name=na; money=mon; balance=bal; identificant=id; status=sta;}void User::showName()//显示户主姓名{ cout<<"户主姓名:"<<name<<endl;}void User::showBalance(string prompt){ cout<<prompt<<" "<<balance<<"元"<<endl;}bool User::psaaWordISRight()//判断密码是否正确{ int iPass; bool right=true; cout<<"请输入密码:"<<endl; iPass=intputPassword(); if(iPass!=password) { right=false; cout<<"密码输入错误,操作失败!"<<endl; } return right;}bool User::ISNormalUser()//判断用户是否为正常状态{ bool normal=true; if(status!=0) { normal=false; cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能进行操作!"<<endl; } return normal;}int main(){ cout<<endl; cout<<" +-------------------------------------------+"<<endl; cout<<" + +"<<endl; cout<<" + 欢迎来到c++银行 +"<<endl; cout<<" + +"<<endl; cout<<" +-------------------------------------------+"<<endl; if(pass())//pass()函数对银行业务员进行账号判断 { Bank b; b.work(); } return 0;}int intputPassword()//输入密码{ char ch; int iPass=0;//转换为数字 int i; while(1) { for(i=0; i<6; ++i) { ch=getch(); putchar('*'); if(isdigit(ch)) { iPass=iPass*10+(ch-48); } else { iPass=0; break; } } fflush(stdin);//清理键盘缓存区已有的输入 cout<<endl; if(iPass==0) { cout<<"密码要求全为数字且不能都是0!"<<endl; cout<<"请重新输入!"; } else break; } return iPass;}int chooseInMenu(){ int i; while (1) { cout<<endl; cout<<" + 请您选择办理的业务选项: +"<<endl; cout<<" +----------------------------+"<<endl; cout<<" + 1.开户 2.销户 3.存款 +"<<endl; cout<<" + 4.取款 5.查询 6.转账 +"<<endl; cout<<" + 7.挂失 8.解挂 9.改密 +"<<endl; cout<<" + 0.退出 +"<<endl; cout<<" +----------------------------+"<<endl<<endl; cout<<"请选择您所需要办理的业务序号:"; cin>>i; if(i>=0&&i<=9) break; else cout<<"输入有误,请您重新选择功能!"<<endl; } return i;}int pass()//验证密码是否正确{ char sNameInFile[20]; char sPassInFile[20]; ifstream infile("password.txt",ios::out); if(!infile) { cerr<<"password file cannot open!"<<endl; exit(1); } infile>>sNameInFile>>sPassInFile; infile.close(); char sName[20]; char sPass[20]; char ch; int itry=3; int right=0; do { cout<<"请输入业务员用户名:"<<endl; cin>>sName; cout<<"请输入密码"<<endl; int i=0; while((ch=getch())!='\r') { sPass[i++]=ch; putchar('*'); } sPass[i]='\0'; fflush(stdin); cout<<endl; if(strcmp(sName,sNameInFile)==0&&strcmp(sPass,sPassInFile)==0)//判断业务员的账户和密码是否都正确 { right=1; break; } else { itry--; if(itry>0) { cout<<"超过3次将会退出,您还可以尝试"<<itry<<"次!"<<endl; } else { cout<<"对不起,您不能进入系统!"<<endl; } } } while(itry); return right;}
登陆:
对已存在用户进行销户:
对所选账户进行存款:
取款:
查询:
转账:
两次转账余额减少显示并储存!
挂失:
解挂:
改密:
退出
0 0
- 第二版银行储蓄系统
- 银行储蓄系统
- 银行储蓄系统
- 银行储蓄系统指导
- 银行储蓄系统...
- 银行储蓄系统
- 银行储蓄系统
- Odi银行储蓄系统
- 课程设计-银行储蓄系统
- 第一版 银行储蓄系统
- 银行储蓄系统
- 课程设计-银行储蓄系统
- 银行储蓄系统
- 银行储蓄系统
- 课程设计-银行储蓄系统。
- 课程设计--银行储蓄系统
- 模拟银行储蓄系统
- 银行储蓄系统
- android studio安装
- 精度: 3%+3个字 什么意思
- 黑马程序员——第六天(包)
- input清除默认样式及兼容问题的解决方法
- A星算法(VC版源码)
- 第二版银行储蓄系统
- 排序算法之三路划分的快速排序
- C结构体之位域(位段)
- 即时通信中消息消息推送方法及系统
- QTP 应用DOM ,web测试不再困难
- 课程设计—银行储蓄系统
- Contains Duplicate II
- UVA 11889-Benefit
- HDOJ-4089 Activation(概率DP)