现在的位置: 首页 > 综合 > 正文

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

2012年09月26日 ⁄ 综合 ⁄ 共 8091字 ⁄ 字号 评论关闭
/*    
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();  
}  













抱歉!评论已关闭.