史上最强的银行系统(带文件读写版)

#include <iostream>
#include <string.h>
#include <iomanip>
#include<fstream> 
using namespace std;

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

struct Account
{
    long accNumber;   //卡号
    char accName[20]; //户主
    char accPwd[10];  //密码
    double balance;   //余额
    char flag[6];     //卡的状态
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//银行中银行卡数量
int size=0;

//欢迎界面
void welcome();
//主界面
void mainFrame();
//生成银行中自增卡号
long autoCreament();
//开户
void openAccount();
//存款
void deposit();
//取款
void withdraw();
//查询
void  query();
//销户
void closeAnAccount();
//修改密码
void updatePwd();
//转账
void transferAccount();
//输出指定卡的信息
void printAccount(Account acc);
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);
//用户选择操作
void select();
//检查密码输入是否满足长度
bool isPassLegal(char pass[]);
//检查账号状态
void checkstate(int size);
void getInformation();  //用于读取帐户数据   
void saveInformation(); //退出前保存数据   


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

void welcome()
{
    cout<<"                    "<<"+**********************************+"<<endl;
    cout<<"                    "<<"|                                  |"<<endl;
    cout<<"                    "<<"|********欢迎登陆银行系统**********|"<<endl;
    cout<<"                    "<<"|                                  |"<<endl;
    cout<<"                    "<<"+**********************************+"<<endl;
}

void mainFrame()
{
    int order;
    cout<<"                    "<<"+******************************+"<<endl;
    cout<<"                    "<<"*    1.开户     |    2.存款    *"<<endl;
    cout<<"                    "<<"*    3.取款     |    4.查询    *"<<endl;
    cout<<"                    "<<"*    5.转账     |    6.销户    *"<<endl;
    cout<<"                    "<<"*    7.修改密码 |    0.退出    *"<<endl;
    cout<<"                    "<<"+******************************+"<<endl;
    cout<<"请输入操作指令:";
    cin>>order;
    switch(order)
    {
    case 0:
        cout<<"谢谢您的使用,欢迎再次光临!"<<endl;
        break;
    case 1:
        openAccount();
        break;
    case 2:
        deposit();
        break;
    case 3:
        withdraw();
        break;
    case 4:
        query();
        break;
    case 5:
        transferAccount();
        break;
    case 6:
        closeAnAccount();
        break;
    case 7:
        updatePwd();
        break;
    default:
        cout<<"输入有误,请重新输入!"<<endl;
        break;
    }
}
//检查密码输入是否满足长度
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]<48||pass[i]>57){
                flag=false;
                break;
            }
        }
    }else{
        //不满足6-8位
        flag=false;
    }
    return flag;
}

void select()
{
    int i;
    cout<<"继续操作请按 1,退出操作请按 0.:";
    cin>>i;
    switch (i)
    {
    case 0:
        cout<<"谢谢您的使用,欢迎再次光临!"<<endl;
        break;
    case 1:
        mainFrame();
        break;
    }
}

//开户
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<<"存款成功,请选择是否继续操作。"<<endl;
            select();
		}
        else
        {
            cout<<"密码必须是纯数字,并且是6-8位"<<endl;
            openAccount();
        }
    }
    else
    {
        //2次输入的密码不一致
        cout<<"两次输入的密码不一致"<<endl;
        openAccount();
    }
}


long autoCreament()
{
    if(size==0)
    {
        return INITNUMBER;
    }
    else
    {
        return array[size-1].accNumber+1;
    }
}

//输出指定卡的信息
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)<<"******"<<setw(8)<<acc.balance<<setw(8)<<acc.flag<<"|"<<endl;
    cout<<"|----------------------------------------|"<<endl;
}

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

//存款
void deposit()
{
    long accNum;//存款的账号
    double money;//存款的金额
    int pos;
    int i;
    cout<<"请输入存款的账号:";
    cin>>accNum;
    pos=searchAccount(accNum);
	if(pos==-1)
	{
		//卡号有误
        cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
        cout<<"继续输入请按 1,退出请按0:";
		cin>>i;
		switch(i)
		{
		case 0:
			mainFrame();
			break;
		case 1: 
            deposit();
			break;
		default:
            cout<<"输入有误,请重新输入!"<<endl;
            break;
        }
	}
	else
	{
		cout<<"请输入存款金额:";
		cin>>money;
		//展示下存款前卡的信息
		cout<<"存款前卡的信息:"<<endl;
		printAccount(array[pos]);
		//找到了该卡号所对应的卡
		array[pos].balance+=money;
		//展示存款后卡的信息
		cout<<"存款后卡的信息:"<<endl;
		printAccount(array[pos]);
		cout<<"存款成功,请选择是否继续操作。"<<endl;
		select();
	}
	
}

//取款
void withdraw()
{
    long accNum;//取款的账号
    double money;//取款的金额
    char accPwd[6];//取款账号的密码
    int pos,i;
    cout<<"请输入取款的账号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
        cout<<"继续输入请按 1,退出请按0:";
		cin>>i;
		switch(i)
		{
		case 0:
			mainFrame();
			break;
		case 1: 
            withdraw();
			break;
		default:
            cout<<"输入有误,请重新输入!"<<endl;
            break;
		}
    }
    //账号正确
    else
    {
        cout<<"请输入取款账号的密码:";//验证密码
        cin>>accPwd;
        if(strcmp(array[pos].accPwd,accPwd)==0)
        {
            cout<<"请输入取款金额:";
            cin>>money;
            if(array[pos].balance<money)
            {
                cout<<"您的余额不足,无法取出!!"<<endl;
                select();
            }
            else
            {
                //展示下取款前卡的信息
                cout<<"取款前卡的信息:"<<endl;
                printAccount(array[pos]);
                //取款后的余额
                array[pos].balance-=money;
                //展示取款后卡的信息
                cout<<"取款后卡的信息:"<<endl;
                printAccount(array[pos]);
                cout<<"取款成功,请选择是否继续操作。"<<endl;
                select();
            }
        }
        else
        {
            cout<<"输入密码有误,本次操作失败,请选择是否继续操作!!"<<endl;
            select();//返回
        }
    }
}

//查询
void  query()
{
    long accNum;//查询的账号
    char accPwd[6];//查询账号的密码
    int pos,i;
    cout<<"请输入要查询的账号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
        cout<<"继续输入请按 1,退出请按0:";
		cin>>i;
		switch(i)
		{
		case 0:
			mainFrame();
			break;
		case 1: 
            query();
			break;
		default:
            cout<<"输入有误,请重新输入!"<<endl;
            break;
		}
	}
	//账号正确
	else
	{
		cout<<"请输入要查询账号的密码:";//验证密码
		cin>>accPwd;
		if(strcmp(array[pos].accPwd,accPwd)==0)
		{
			cout<<"该卡的信息为:"<<endl;
			printAccount(array[pos]);
			cout<<"查询成功,请选择是否继续操作。"<<endl;
			select();
		}
		else
		{
			cout<<"输入密码有误,本次操作失败,请选择是否退出系统!!"<<endl;
			select();//返回
		}
	}
}

//销户
void closeAnAccount()
{
	long accNum;//销户的账号
	char accPwd[6];//销户                             账号的密码
	int pos,i;
	cout<<"请输入要销户的账号:";
	cin>>accNum;
	pos=searchAccount(accNum);
	if(pos==-1)
	{
		//卡号有误
		cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
		cout<<"继续输入请按 1,退出请按0:";
		cin>>i;
		switch(i)
		{
		case 0:
			mainFrame();
			break;
		case 1: 
			closeAnAccount();
			break;
		default:
			cout<<"输入有误,请重新输入!"<<endl;
			break;
		}
	}
	//账号存在
	else
	{
		cout<<"请输入要销户账号的密码:";//验证密码
		cin>>accPwd;
		if(strcmp(array[pos].accPwd,accPwd)==0)
		{
			array[pos].balance=0;
			strcpy(array[pos].flag, "销户");
			printAccount(array[pos]);
			cout<<"销户成功,请选择是否继续操作。"<<endl;
			select();
		}
		else
		{
			cout<<"密码输入有误,本次操作失败,请选择是否继续操作!!"<<endl;
			select();//返回
		}
	}
}

//修改密码
void updatePwd()
{
	long accNum;//要修改密码的账号
	char accPwd1[10];//原来密码
	char accPwd2[10];//重新设置的密码
	char accPwd3[10];
	int pos,i;
	cout<<"请输入要修改密码的账号:";
	cin>>accNum;
	pos=searchAccount(accNum);
	if(pos==-1)
	{
		//卡号有误
		cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
		cout<<"继续输入请按 1,退出请按0:";
		cin>>i;
		switch(i)
		{
		case 0:
			mainFrame();
			break;
		case 1: 
			updatePwd();
			break;
		default:
			cout<<"输入有误,请重新输入!"<<endl;
			break;
		}
	}
				//账号存在
				else
				{
					cout<<"请输入该账号的密码:";//验证密码
					cin>>accPwd1;
					if(strcmp(array[pos].accPwd,accPwd1)==0)
					{
						cout<<"请输入新密码:";
						cin>>accPwd2;
						cout<<endl;
						cout<<"请再次输入密码:";
						cin>>accPwd3;
						cout<<endl;
						if(strcmp(accPwd2,accPwd3)==0)
						{
							strcpy(array[pos].accPwd,accPwd2);
							printAccount(array[pos]);
							cout<<"修改密码成功,请选择是否继续操作!"<<endl;
							select();
						}
						else
						{
							cout<<"两次密码输入不同,修改密码失败,请重新修改!"<<endl;
							updatePwd();
						}
					}
					else
					{
						cout<<"输入密码有误,请选择是否继续操作!!"<<endl;
						select();;//返回
					}
				}
}

//转账
void transferAccount()
{
				long accNum1;//转出账号
				long accNum2;//转入账号
				double money;//转款的金额
				char accPwd[6];//转出账号的密码
				int pos1,pos2,i;
				cout<<"请输入转出账号:";
				cin>>accNum1;
				pos1=searchAccount(accNum1);
				if(pos1==-1)
				{
					//卡号有误
					cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
					cout<<"继续输入请按 1,退出请按0:";
					cin>>i;
					switch(i)
					{
					case 0:
						mainFrame();
						break;
					case 1: 
						transferAccount();
						break;
					default:
						cout<<"输入有误,请重新输入!"<<endl;
						break;
					}
				}
				//账号正确
				else
				{
					cout<<"请输入取款账号的密码:";//验证密码
					cin>>accPwd;
					if(strcmp(array[pos1].accPwd,accPwd)==0)
					{
						cout<<"请输入转出金额:";
						cin>>money;
						if(array[pos1].balance<money)
						{
							cout<<"您的余额不足,无法转账!!!"<<endl;
							withdraw();
						}
						cout<<"请输入转入账号:";
						cin>>accNum2;
						pos2=searchAccount(accNum2);
						if(pos2==-1)
						{
							//卡号有误
							cout<<"卡号输入有误,请选择是否继续输入!"<<endl;
							cout<<"继续输入请按 1,退出请按0:";
							cin>>i;
							switch(i)
							{
							case 0:
								mainFrame();
								break;
							case 1: 
								transferAccount();
								break;
							default:
								cout<<"输入有误,请重新输入!"<<endl;
								break;
							}
						}
						else
						{
							//展示下转账前卡的信息
							cout<<"转出账号转账前的信息:"<<endl;
							printAccount(array[pos1]);
							//展示下转账前卡的信息
							cout<<"转入账号转账前的信息:"<<endl;
							printAccount(array[pos2]);
							//展示下转账后卡的信息
							cout<<"转出账号转账后的信息:"<<endl;
							//转账后的余额
							array[pos1].balance-=money;
							printAccount(array[pos1]);
							cout<<"转入账号转账后的信息:"<<endl;
							//转账后的余额
							array[pos2].balance+=money;
							printAccount(array[pos2]);
							cout<<"转账成功,请选择是否继续操作。"<<endl;
							select();
						}
					}
					else
					{
						cout<<"输入密码有误,请选择是否继续操作!!"<<endl;
						select();;//返回
					}
				}
}


//从文件中读取数据,保存到全局数组中
void getInformation()  //用于读取帐户数据
{
	int i=0;
	ifstream infile("bank.dat",ios::in);  //以输入的方式打开文件
	if(!infile)       //测试是否成功打开
	{
		cerr<<"不好啦,找不到储户信息了!"<<endl;
		exit(0);
	}
	while(!infile.eof())
	{
        infile>>array[i].accNumber>>array[i].accName>>array[i].accPwd>>array[i].balance>>array[i].flag;
		++i;
	}
	size=i;
	infile.close();
	//accountNum=i;  //用户数目
	return;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值