main.cpp
#include<iostream>
#include<fstream>
#include <windows.h> //清屏函数的调用需要的头文件
#include<conio.h> //调用getch需要用到的头文件
#include<stdlib.h>
#include <windows.h> //system,Sleep,exit函数的调用需要的头文件
#include"customer.h"
#include"officer.cpp"
using namespace std;
class Bank:public officer
{
public:
void work()
{
officer off;
customer cus;
string name;
int mima;
cout<<"+----------------------------+"<<endl;
cout<<"+ 欢迎观临程序员银行 +"<<endl;
cout<<"+----------------------------+"<<endl;
cout<<"请输入业务员用户名:";
cin>>name;
cout<<"请输入密码:";
mima=off.get_password();
cout<<endl;
if(name==off.getname1()&&mima==off.getmima1())
{
cout<<"正在进入程序员银行,请稍后!"<<endl;
Sleep(1000);
system("cls");
cout<<"+--------------------------+"<<endl;
cout<<"1.开户 "<<"2.销户"<<endl;
cout<<"3.存钱 "<<"4.取款"<<endl;
cout<<"5.信息查询 "<<"6.转账"<<endl;
cout<<"7.挂失 "<<"8.解挂"<<endl;
cout<<"9.更改密码 "<<"10.退出"<<endl;
cout<<"+--------------------------+"<<endl;
int choice;
while(cin>>choice)
{
switch(choice)
{
case 1:
cus.openAccount(); //开户
break;
case 2:
cus.cancelAccount(); //注销账户
break;
case 3:
cus.save(); //存款
break;
case 4:
cus.withdraw(); //取款
break;
case 5:
cus.showAccount(); //查询余额
break;
case 6:
cus.transferAccounts(); //转账
break;
case 7:
cus.reportLoss(); //挂失
break;
case 8:
cus.cancelLoss(); //解除挂失
break;
case 9:
cus.updatePassword(); //更改密码
break;
case 10:
{
cout<<"欢迎您再来. "<<endl;
Sleep(100);
system("cls");
cout<<"+--------------------------+"<<endl;
cout<<"1.开户 "<<"2.销户"<<endl;
cout<<"3.存钱 "<<"4.取款"<<endl;
cout<<"5.信息查询 "<<"6.转账"<<endl;
cout<<"7.挂失 "<<"8.解挂"<<endl;
cout<<"9.更改密码 "<<"10.退出"<<endl;
cout<<"+--------------------------+"<<endl;
break;
}
}
}
}
else
{
cout<<"用户名或密码错误,请重新启动!"<<endl;
}
}
};
int main()
{
Bank b;
b.work();
return 0;
}
officer.cpp
#include<iostream>
#include<fstream>
#include <windows.h> //清屏函数的调用需要的头文件
#include<conio.h> //调用getch需要用到的头文件
#include<stdlib.h>
#include <windows.h> //system,Sleep,exit函数的调用需要的头文件
using namespace std;
class officer
{
private:
string name1;
int mima1;
public:
officer(string na,int nn):name1(na),mima1(nn) {}
void setofficer()
{
cin>>name1>>mima1;
}
string getname1()
{
return name1;
}
int getmima1()
{
return mima1;
}
officer()
{
name1="liyingjie";
mima1=110;
}
~officer()
{
}
int get_password()
{
int password=0;
int m;
for(int i=0; i<3;)
{
m=getch()-48;
if(m>=0&&m<=9)
{
cout<<'*';
(password*=10)+=m;
i++;
}
}
return password;
}
};
customer.h
#ifndef CUSTOMER_H_INCLUDED
#define CUSTOMER_H_INCLUDED
#include<iostream>
#include<fstream>
#include <windows.h> //清屏函数的调用需要的头文件
#include<conio.h> //调用getch需要用到的头文件
#include<stdlib.h>
#include <windows.h> //system,Sleep,exit函数的调用需要的头文件
using namespace std;
class customer
{
private:
char name[100][10];
int mima[100];
static int n;
double jinqian[100];
int status[100];
int account[100];
int shenfen[100];
public:
customer(char na[10],int nn)
{
strcpy(name[n],na);
mima[n]=nn;
}
customer()
{
ifstream infile;
infile.open("customer2",ios::binary);
for(int i=0; i<2; i++)
{
infile.read((char*)&account[i],sizeof(account[i]));
infile.read((char*)&name[i],sizeof(name[i]));
infile.read((char*)&jinqian[i],sizeof(jinqian[i]));
infile.read((char*)&shenfen[i],sizeof(shenfen[i]));
infile.read((char*)&status[i],sizeof(status[i]));
infile.read((char*)&mima[i],sizeof(mima[i]));
cout<<"account:"<<account[i]<<endl;
cout<<"name:"<<name[i]<<endl;
cout<<"jinqian:"<<jinqian[i]<<endl;
cout<<"shenfen:"<<shenfen[i]<<endl;
cout<<"status:"<<status[i]<<endl;
cout<<"mima:"<<mima[i]<<endl;
n++;
}
}
void setcustomer()
{
cin>>name[n]>>mima[n];
}
string getname()
{
return name[n];
}
int getmima()
{
return mima[n];
}
void setname()
{
cin>>name[n];
}
void setmima(int s)
{
cin>>mima[s];
}
~customer()
{
}
int get_password()
{
int password=0;
int m;
for(int i=0; i<3;)
{
m=getch()-48;
if(m>=0&&m<=9)
{
cout<<'*';
(password*=10)+=m;
i++;
}
}
return password;
}
int passwordIsRight(int s)
{
if(mima[s])
return 1;
else return 0;
}
int inputPassword()
{
char ch; //接收字符形式密码
int iPass=0; //要转换为数字
int i;
while(1)
{
for(i=0; i<3; i++)
{
ch=getch(); //输入但不显示
putchar('*'); //输出*
if(isdigit(ch))
iPass=iPass*10+(ch-'0');
else
{
iPass=0;
break; //退出for循环后,再次接受
}
}
fflush(stdin); //清除键盘缓存区中已经有的输入
cout<<endl;;
if(iPass==0) //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
{
cout<<"密码要求全为数字,且不能全0!"<<endl;;
cout<<"请重新输入密码: ";
}
else
break;
}
return iPass;
}
void openAccount()
{
if(n==100)
{
cout<<"银行用户数已经达到上限,不能再开户";
return;
}
//下面正常办理开户业务
int acc; //账号
char nam[10]; //姓名
int shenf;
int pw; //密码
double bal; //金额
int sta; //状态
cout<<"正在开户"<<endl;
acc=10001+n;
cout<<"账号:"<<acc<<endl;
cout<<"户主姓名:";
cin>>nam;
cout<<"身份号码:";
cin>>shenf;
int iPass1, iPass2;
cout<<"密码:";
iPass1=inputPassword(); //输入密码1
cout<<"确认密码:";
iPass2=inputPassword(); //输入密码2
if(iPass1==iPass2)
{
pw=iPass1;
sta=0; //账户状态为“正常”
cout<<"存入金额:";
cin>>bal;
strcpy(name[n],nam);
mima[n]=pw;
jinqian[n]=bal;
status[n]=sta;
shenfen[n]=shenf;
account[n]=acc;
n++; //正式用户数增加1,确认了新用户已经加入
cout<<"成功开户!"<<endl;
}
else
{
cout<<"两次密码不一致,未成功开户!"<<endl; //没有N++,则读入的值无效
}
ofstream outfile;
outfile.open("customer",ios::out);
for(int i=0; i<n; i++)
{
outfile<<i+10001<<" "<<name[i]<<" "<<shenfen[i]<<" "<<mima[i]<<" "<<jinqian[i]<<" ";
}
ofstream outfile1;
outfile1.open("customer1",ios::binary);
for(int i=0; i<n; i++)
{
outfile1.write((char*)&account[i],sizeof(account[i]));
outfile1.write((char*)&name[i],sizeof(name[i]));
outfile1.write((char*)&jinqian[i],sizeof(jinqian[i]));
}
}
void cancelAccount()
{
int who; //查找到该账号在数组中对应的下标
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<name[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(who-10001))
{
cout<<"余额:"<<jinqian[who-10001]; //提示"余额"二字,显示金额
cout<<endl;
cout<<"确认销户(y/n)?";
if(tolower(getchar())=='y')
{
cout<<"余额:"<<jinqian[who-10001];
cout<<"销户成功!本次取款金额为";
jinqian[who-10001]=0; //取款后余额变0
status[who-10001]=2; //状态变为注销
}
else
{
cout<<"你取消了操作,销户失败!"<<endl;
}
fflush(stdin); //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
}
}
}
/*
功能:存款
说明:需要保证账户存在,且处于正常状态
*/
void save()
{
int who;
double money;
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
if(status[who-10001]==0)
{
cout<<name[who-10001]<<endl;
cout<<"输入存款额:";
cin>>money;
jinqian[who-10001]+=money;
cout<<"存款后,您有"<<jinqian[who-10001];
}
else if(status[who-10001]==1)
{
cout<<"该用户处于挂失状态,存款失败!"<<endl;
}
else
{
cout<<"该用户已经销户,存款失败!"<<endl;
}
}
return;
}
/*
功能:取款
说明:需要保证账户存在,且处于正常状态,另外,余额要足够取
*/
void withdraw()
{
int who;
double money;
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<name[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
cout<<"请输入密码:"<<endl;
if(passwordIsRight(who-10001))
{
cout<<"输入取款额:";
cin>>money;
if(money>jinqian[who-10001]) //亲,不玩透支
{
cout<<"余额不足,取款失败!"<<endl;
}
else
{
jinqian[who-10001]-=money;
cout<<"取款后,余额有:"<<jinqian[who-10001];
}
}
}
return;
}
/*
功能:查询账户
说明:显示账户信息
*/
void showAccount()
{
int who;
string sta[3]= {"正常","挂失","已经销户"};
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<"姓名:"<<name[who-10001]<<endl;
cout<<"身份号码:"<<shenfen[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(who-10001))
{
cout<<"余额:"<<jinqian[who-10001];
cout<<"状态:"<<sta[status[who-10001]]<<endl;
}
}
return;
}
/*
功能:转账
说明:需要保证两个账户都存在,且处于正常状态,另外,转出账户的余额要足够
*/
void transferAccounts()
{
int whoout, whoin;
double money;
cout<<"转出自";
whoout = getUser(); //根据账号查询用户,返回用户的下标
if(whoout>=0) //说明id账户存在
{
cout<<name[whoout-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(whoout-10001))
{
cout<<"输入转账金额:";
cin>>money;
if(money>jinqian[whoout-10001]) //亲,不玩透支
{
cout<<"余额不足,转账失败!"<<endl;
}
else
{
cout<<"转出到";
whoin = getUser(); //根据账号查询用户,返回用户的下标
if(whoin>=0) //说明id账户存在
{
jinqian[whoout-10001]-=money;
jinqian[whoin-10001]+=money;
cout<<"转账后,您还有"<<jinqian[whoout-10001];
}
}
}
}
return;
}
/*
功能:挂失账户
*/
void reportLoss()
{
int who;
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<name[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(who-10001))
{
if(status[who-10001]==0)
{
status[who-10001]=1;
cout<<"挂失成功"<<endl;
}
else if(status[who-10001]==1)
{
cout<<"该账户已经处于挂失状态"<<endl;
}
else
{
cout<<"该账户已销户,不能挂失"<<endl;
}
}
}
return;
}
/*
功能:解除挂失
*/
void cancelLoss()
{
int who;
who = getUser(); //根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<name[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(who-10001))
{
if(status[who-10001]==0)
{
cout<<"该账户处于正常状态,不需要解除挂失"<<endl;
}
else if(status[who-10001]==1)
{
status[who-10001]=0;
cout<<"解除挂失成功"<<endl;
}
else
{
cout<<"该账户已销户,操作无效"<<endl;
}
}
}
return;
}
/*
功能:改密码
*/
void updatePassword()
{
int who;
int iPass1, iPass2;
who = getUser();//根据账号查询用户,返回用户的下标
if(who>=0) //说明id账户存在
{
cout<<name[who-10001]<<endl;
cout<<"请输入密码:";
get_password();
cout<<endl;
if(passwordIsRight(who-10001))
{
cout<<"新密码:";
setmima(who-10001); //输入密码1
iPass1=mima[who-10001];
cout<<"确认密码:";
iPass2=inputPassword(); //输入密码2
if(iPass1==iPass2)
{
int mima3;
fstream outfile;
outfile.open("customer1",ios::out|ios::in|ios::binary|ios::ate);
for(int i=0; i<n; i++)
{
if(who-10001==n)
{
outfile.seekg((who-10001)*sizeof(mima[who-10001]),ios::beg);
outfile.read((char*)&mima3,sizeof(mima3));
cout<<mima3;
}
}
mima[who-10001]=iPass1;
outfile.seekg((who-10001)*sizeof(mima[who-10001]),ios::beg);
outfile.write((char*)&mima[who-10001],sizeof(mima[who-10001]));
outfile.seekg(0,ios::beg);
for(int i=0; i<n; i++)
{
if(i==who-10001)
{
cout<<"account:"<<account[i]<<endl;
cout<<"name:"<<name[i]<<endl;
cout<<"jinqian:"<<jinqian[i]<<endl;
cout<<"shenfen:"<<shenfen[i]<<endl;
cout<<"status:"<<status[i]<<endl;
cout<<"mima:"<<mima[i]<<endl;
}
}
cout<<"修改成功"<<endl;
}
else
{
cout<<"两次输入不同,修改失败!"<<endl;
}
}
}
return;
}
/*
功能:输入账号查询用户,返回用户在数组中的下标
入口参数:要查询用户的账号
返回值:如果该用户存在,返回该用户在数组中的下标,否则,返回一个负数(-1)
说明:
由账号自动产生,使按账号有序,本模块采用二分查找
*/
int getUser()
{
int id;
cout<<"账号:";
cin>>id;
int index=-1;
int low=0, high=n-1, mid;
while(low<=high)
{
mid = (low+high)/2;
if(account[mid]==id)
{
index=mid;
break; //找到了,立即退出循环
}
else if (account[mid]>id)
high=mid-1;
else
low=mid+1;
}
if (index<0)
cout<<"该用户不存在,本次操作失败!"<<endl;
index=index+10001; //若找到,其值在0~N-1间,否则,保持-1
return index;
}
};
int customer::n=0;
#endif // CUSTOMER_H_INCLUDED
正常运行:
开户:
销户:
存钱:
取款:
信息查询:
转账:
挂失:
更改密码:
业务员登陆界面:
以上为此程序的所有流程图,完结