<pre class="cpp" name="code">/***********************************************************
* 版权所有 (C)2015,晓凡.
*
* 文件名称:main.cpp
* 文件标识:无
* 内容摘要:该代码为主函数
* 其它说明:无
* 当前版本: V1.0
* 作 者:李晓凡
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: 李晓凡
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "Cstring"
#include "fstream"
#include "bank.h"
using namespace std;
//主函数什么都没有哦 构造和析构很强大的
int main()
{
}
/***********************************************************
* 版权所有 (C)2015,晓凡.
*
* 文件名称:bank.h
* 文件标识:无
* 内容摘要:该代码为类的声明和函数的调用
* 其它说明:无
* 当前版本: V1.0
* 作 者:李晓凡
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: 李晓凡
* 修改内容:创建
**********************************************************/
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "Cstring"
#include "fstream"
using namespace std;
void outsalefile();
void outusefile();
bool IDstate(); //判断状态
void Password(); //用户登陆认证
void Point_out(); //展示功能
void Choose(); //选择功能
void Open(); //开户
void Cancel(); //销户
void Save(); //存钱
void Draw(); //取钱
void Display(); //展示信息
void Transfer(); //转账
void Report_loss(); //挂失
void Hanging_solution(); //解挂
void Transkey(); //改密
void Stop(); //退出
class Yunxing //保存人数以及输出文件类
{
public:
Yunxing();
~Yunxing()
{
outsalefile();
outusefile();
}
int person;//用户人数
};
class Bank //银行用户类
{
public:
long int Numb;
long int Key;
string Name;
string IDcard;
string Address;
double Dollar;
int state;//0:正常;1:挂失;已销户:2;
};
#endif // BANK_H_INCLUDED
/***********************************************************
* 版权所有 (C)2015,晓凡.
*
* 文件名称:bank.cpp
* 文件标识:无
* 内容摘要:该代码为UserData类的声明和Admin结构体的声明
* 其它说明:无
* 当前版本: V1.0
* 作 者:李晓凡
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: 李晓凡
* 修改内容:创建
**********************************************************/
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include "bank.h"
using namespace std;
Bank bank[1000]; //声明 1000用户 未用动态数组
long int numb; //定义一个用户号码 这样一来可以改变此变量来改变相同号码的账号信息,不用改变用户组信息
/*********************************************************
* 功能描述:Yunxing的构造函数 读取文件 运行登陆界面函数
* 输入参数:j:选择开户还是登陆
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
Yunxing::Yunxing() //构造函数,负责运行开始初始化
{
ifstream infile("Banksaleman.txt",ios::in); //以读入的形式打开Banksaleman.txt文件
if(!infile) //如果不能读取,强制退出
{
cout<<"open 1error"<<endl;
exit(1);
}
infile>>person; //将文件里的用户总人数信息读入到程序
infile.close();//取消读取联系
ifstream inPfile("Bankman.txt",ios::in);//以读入的形式打开Bankman.txt文件
if(!inPfile) //不能打开文件,强制退出
{
cout<<"open 2error"<<endl;
exit(1);
}
for(int i=0; i<person; i++) //读取到总人数多少,便读入多少人的信息
{
inPfile>>bank[i].Numb>>bank[i].Key>>bank[i].Name>>bank[i].IDcard>>bank[i].Address>>bank[i].Dollar>>bank[i].state;
}
inPfile.close();
int j;
cout<<"请选择 0 登录用户 ,1 开户"<<endl;
cin>>j;
if(j==0)
Password(); //选择登陆
else if(j==1) //选择开户
Open();
}
Yunxing sale; //声明一个总人数对象
/*********************************************************
* 功能描述:用于输出用户人数到文件的函数
* 输入参数:无
* 输出参数:sale.person
* 返回值:无
* 其它说明:无
************************************************************/
void outsalefile() //开始程序输出信息到文件
{
ofstream outfile("Banksaleman.txt",ios::out);//读取Banksaleman.txt文件
if(!outfile) //如果打开失败,强制退出
{
cout<<"open error"<<endl;
exit(1);
}
outfile<<sale.person; //把总用户人数信息读入到文件
outfile.close(); //关闭此文件
}
/*********************************************************
* 功能描述:用于输出用户信息的函数
* 输入参数:无
* 输出参数:用户信息
* 返回值:无
* 其它说明:无
************************************************************/
void outusefile()
{
ofstream outfile("Bankman.txt",ios::out); //以输出的形式打开用户文件
if(!outfile) //如果不能打开,强制退出
{
cout<<"open error"<<endl;
exit(1);
}
for(int i=0; i<sale.person; i++) //有多少人,输出多少人的信息
{
outfile<<bank[i].Numb<<" "<<bank[i].Key<<" "<<bank[i].Name<<" "<<bank[i].IDcard<<" "<<bank[i].Address<<" "<<bank[i].Dollar<<" "<<bank[i].state<<endl;
}
outfile.close();
}
/*********************************************************
* 功能描述:用户登录时判断账号是否存在,密码是否正确,三次循环不正确退出
* 输入参数:numb 账号,key 密码 ,x表示输入退出还是选择解挂或者重新开户
* 输出参数:无
* 返回值:无
* 其它说明:若登陆成功判断用户状态,为0正常运行进入功能界面
为1表示已经挂失 可选择退出或者解挂 为2表示已注销 可选择重新开户或者退出
************************************************************/
void Password()
{
int i,x;//i用于循环,x用于状态判断
long int key;
cout<<"欢迎登陆银行系统,请输入您的账号和密码:"<<endl;
for(i=0; i<3; i++)
{
cin>>numb; //号码从622000开始 都以622为开头
if(numb>=622000 && numb<623000) //判断号码存在
{
cin>>key;
if (bank[numb-622000].Key==key && bank[numb-622000].Numb==numb) //判断账号密码正确
{
cout<<"登陆成功,正在判断您的用户状态..."<<endl;
if(bank[numb-622000].state==0) //判断状态为正常
{
Point_out();
Choose();
}
else
{
if(bank[numb-622000].state==1) //判断状态为挂失
{
cout<<"您的银行卡已经挂失"<<endl;
cout<<"请选择:0:退出 , 8解挂"<<endl;
cin>>x;
if(x==0)
Stop();//退出
else if(x==8)
{
cout<<"开始解挂..."<<endl;
Hanging_solution();//解挂
}
}
else if(bank[numb-622000].state==2) //判断状态为销户
{
cout<<"对不起,您的用户名已经注销"<<endl;
cout<<"请选择 0:退出,1 :重新开户"<<endl;
cin>>x;
if(x==0)
Stop();
else if(x==1)//重新开户
{
cout<<"正在重新开户..."<<endl;
bank[numb-622000].state=0;
cout<<"重新开户成功"<<endl;
Display();
}
}
else cout<<"状态异常"<<endl;
}
break;
}
}
else cout<<"账号不存在";
}
if(i==3)
{
cout<<"用户登录错误,退出"<<endl;
exit(1);
}
}
/*********************************************************
* 功能描述:展示功能的界面
* 输入参数:无
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
void Point_out()
{
cout << "请选择您需要的功能: " << endl;
cout << "+ 销户:2 存款:3 取款:4 +" << endl;
cout << "+ 信息:5 转账:6 挂失:7 +" << endl;
cout << "+ 解挂:8 改密:9 退出:0 +" << endl;
}
void Choose()
{
int number;
cin >> number;
switch (number)//功能选择
{
case 2:
Cancel();//销户
break;
case 3:
Save();//存钱
break;
case 4:
Draw();//取钱
break;
case 5:
Display();//显示个人信息
break;
case 6:
Transfer();//转账
break;
case 7:
Report_loss();//挂失
break;
case 8:
Hanging_solution();//解挂
break;
case 9:
Transkey();//改密
break;
case 0:
Stop();
break;
}
}
/*********************************************************
* 功能描述:开户
* 输入参数:个人资料,姓名,身份证,地址,密码
存款金额,状态自动赋值为0表示正常,两次输入密码三次不相同退出
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
void Open()
{
int i;
cout<<"请输入你的姓名"<<endl;
cin>>bank[sale.person].Name;
cout<<"请输入你的身份证"<<endl;
cin>>bank[sale.person].IDcard;
cout<<"请输入您的家庭住址"<<endl;
cin>>bank[sale.person].Address;
int key;
//验证两次密码是否相等
for(i=0; i<3; i++)
{
cout<<"请输入您的密码"<<endl;
cin>>bank[sale.person].Key;
cout<<"请再次输入密码"<<endl;
cin>>key;
if(bank[sale.person].Key==key)
{
cout<<"输入正确"<<endl;
break;
}
else
cout<<"请重新输入"<<endl;
}
//如果密码设置正确,存入底额后开户成功
if(i<3)
{
cout<<"请输入您要存入的钱数"<<endl;
cin>>bank[sale.person].Dollar;
bank[sale.person].Numb=sale.person+622000;
bank[sale.person].state=0;
numb=sale.person+622000;
sale.person++;
cout<<"*****开户成功,******"<<endl;
cout<<endl;
Point_out();
Choose();
}
else
{
cout<<"对不起,开户失败"<<endl;
Stop();
}
}
/*********************************************************
* 功能描述:销户
* 输入参数:i
* 输出参数:无
* 返回值:无
* 其它说明:i选择确定销户还是退出
************************************************************/
void Cancel()
{
int i;
cout<<"您确定要注销本账户吗?"<<endl;
cout<<"0:确定 ,其他键取消"<<endl;
cin>>i;
if(i==0)
{
cout<<"您的余额为:"<<bank[numb-622000].Dollar<<endl;
cout<<"余额全部返还"<<endl;
bank[numb-622000].Dollar=0;
bank[numb-622000].state=2;
cout<<"用户已注销,退出服务,如需其他服务,请重新登录系统"<<endl;
Stop();
}
else
{
cout<<"服务已取消"<<endl;
Point_out();
Choose();
}
}
/*********************************************************
* 功能描述:存钱,不用多说
* 输入参数:无
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
void Save()
{
double dollar;//声明存款数额
cout << "请输入存款金额: " << endl;
cin >> dollar;//输入存款数额
bank[numb-622000].Dollar += dollar;//存款数额保存到信息中
cout<<"存款成功"<<endl;
Point_out();
Choose();
}
/*********************************************************
* 功能描述:取钱
* 输入参数:无
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
void Draw()
{
int dollar;
cout << "请输入取款金额: "<< endl;
cin >> dollar;
bank[numb-622000].Dollar -= dollar;
cout<<"取款成功"<<endl;
Point_out();
Choose();
}
/*********************************************************
* 功能描述:个人信息显示
* 输入参数:无
* 输出参数:无
* 返回值:无
* 其它说明:无
************************************************************/
void Display()
{
cout << "尊敬的 " << bank[numb-622000].Name << " 先生您好,您是第" << sale.person<< "位用户" << endl;
cout<<"您的账号为"<<bank[numb-622000].Numb<<endl;
cout<<"您的身份证号码为:"<<bank[numb-622000].IDcard<<endl;
cout<<"您的家庭 住址为:"<<bank[numb-622000].Address<<endl;
cout << "您的当前账户余额为: "<< bank[numb-622000].Dollar << endl;
if(bank[numb-622000].state==0)
cout<<"您的账户当前状态为:正常"<<endl;
else if(bank[numb-622000].state==1)
cout<<"您的账户当前状态为:挂失"<<endl;
else if(bank[numb-622000].state==2)
cout<<"您的账户当前状态为:已注销"<<endl;
Point_out();
Choose();
}
/*********************************************************
* 功能描述:转账
* 输入参数:输入对方账号和转账金额
* 输出参数:对方姓名来确定是否转账正确
* 返回值:无
* 其它说明:无
************************************************************/
void Transfer()
{
int i;
double dollar;
long int num;
cout << "请输入转账金额" << endl;
cin >> dollar;
cout<<"请输入转账账号"<<endl;
cin>>num;
if(num>=sale.person+622000 || num<622000)
cout<<"账号不存在,转账取消"<<endl;
else
{
cout<<"您要转入账户的姓名是:"<<bank[num-622000].Name<<endl;
cout<<"输入 0确定,1取消"<<endl;
cin>>i;
if(i==0)
{
if(bank[num-622000].state==0)
{
bank[numb-622000].Dollar -= dollar;
bank[num-622000].Dollar +=dollar;
cout<<"转账成功"<<endl;
}
else if(bank[num].state==1)
cout<<"对不起,您所转账账户已经挂失,转账取消"<<endl;
else if(bank[num].state==2)
cout<<"对不起,您所转账账户已注销.转账取消"<<endl;
}
else cout<<"转账已取消"<<endl;
}
Point_out();
Choose();
}
/*********************************************************
* 功能描述:挂失
* 输入参数:i 确定是否挂失
* 输出参数:无
* 返回值:无
* 其它说明:就是把个人状态赋值为1
************************************************************/
void Report_loss()
{
int i;
cout<<"您是否要挂失 0 确定,1取消"<<endl;
cin>>i;
if(i==0)
{
bank[numb-622000].state=1;
cout<<"挂失成功,退出"<<endl;
exit(1);
}
else cout<<"功能取消"<<endl;
Point_out();
Choose();
}
/*********************************************************
* 功能描述:解挂
* 输入参数:当然要输入账号和密码啦
* 输出参数:无
* 返回值:无
* 其它说明:三次输入错误退出
************************************************************/
void Hanging_solution()
{
cout<<"请输入您的用户名和密码"<<endl;
int key,i,numbe;
for(i=0; i<3; i++)
{
cin>>numbe;
cin>>key;
if(numbe>=622000 && numbe<623000)
{
if(bank[numbe-622000].state==0)
{
cout<<"用户状态为正常"<<endl;
break;
}
else
{
if (bank[numbe-622000].Key==key)
{
cout<<"解挂成功"<<endl;
bank[numb-622000].state=0;
break;
}
else
{
cout<<"对不起。您的输入有误,无法解挂"<<endl;
}
}
}
else cout<<"账号不存在,请重新输入"<<endl;
}
if(i==3)
{
cout<<"退出"<<endl;
Stop();
}
Point_out();
Choose();
}
/*********************************************************
* 功能描述:改密
* 输入参数:密码两次输入必须相同
* 输出参数:无
* 返回值:无
* 其它说明:三次错误退出
************************************************************/
void Transkey()
{
int key,key1,key2,i;
cout<<"请输入原密码:"<<endl;
for(i=0; i<3; i++) //由于已经用密码登陆,故再次输入密码不再需要用户账号
{
cin>>key;
if(bank[numb-622000].Key==key)
{
while(1) //密码已经认证,改密时不需要限制次数
{
cout<<"请输入您的修改密码,如不需要输入0退出"<<endl;
cin>>key1;
if(key1==0)
{
Point_out();
Choose();
}
cout<<"请再次输入"<<endl;
cin>>key2;
if(key1==key2)
{
bank[numb-622000].Key=key1;
cout<<"输入正确,改密成功"<<endl;
break;
}
else
{
cout<<"两次输入密码不符,请重新输入"<<endl;
cout<<"请输入您的修改密码"<<endl;
cin>>key1;
cout<<"请再次输入"<<endl;
cin>>key2;
}
}
break;
}
else
cout<<"原密码输入不正确,请重新输入"<<endl;
}
if(i==3)
{
cout<<"对不起,您的密码输入三次错误,服务退出"<<endl;
Stop();
}
Point_out();
Choose();
}
/*********************************************************
* 功能描述:用于强制退出的函数
* 输入参数:无
* 输出参数:无
* 返回值:无
* 其它说明:为什么要多次一举制造此函数喃 当然是界面友好化
************************************************************/
void Stop()
{
cout<<"程序退出,欢迎下次光临"<<endl;
exit(1);
}
</pre><pre class="cpp" name="code">初始文件
存款取款个人信息
改密
挂失
解挂
开户
销户
未开户前其他功能总览
开户之后