有无奈有快乐的银行系统----My Love.

/*
134--4班纪丽娜。
银行系统。
包括
1.开户      2.存款
3.取款      4.销户
5.查询      6.改密
7.转账      8.退出
9.挂失      0.解挂
功能!
用户名jilina
密码 123456!
*/
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
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;
void welcome();
//主界面
void mainFrame();
//生成银行中自增卡号
long autoCreament();
//开户
void openAccount();
//存款
void deposit();
//鉴定密码
void chaxunmima(char Pwd[]);
//输出指定卡的信息
void printAccount(Account acc);
//查询当前的余额
void bid();
//相应的取款
void withdrawal();
//改密
void gai();
//销户
void closed();
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);
//转账
void move();
//保存数据:
void Save();
//登入文件
void login();
void read();  //读文件
void missing();    //挂失
void finding();   //解挂
int panjine(double money);//不能存负的或取负的
int main()
{
   //欢迎界面
	welcome();
	login();
    return 0;
}
//欢迎界面
void welcome()
{
     read();//读入文件!!
    //移动到屏幕中间
    cout<<'\t'<<'\t'<<'\t'<<"+----------------------------------+"<<endl;
    cout<<'\t'<<'\t'<<'\t'<<"|                                  |"<<endl;
    cout<<'\t'<<'\t'<<'\t'<<"|         欢迎登陆银行系统         |"<<endl;
    cout<<'\t'<<'\t'<<'\t'<<"|                                  |"<<endl;
    cout<<'\t'<<'\t'<<'\t'<<"+----------------------------------+"<<endl;
}
//主菜单
void mainFrame()
{
    int order;
	cout<<endl;
    cout<<'\t'<<"*-----------------------------*"<<endl;
    cout<<'\t'<<"*     1.开户      2.存款      *"<<endl;
    cout<<'\t'<<"*     3.取款      4.销户      *"<<endl;
    cout<<'\t'<<"*     5.查询      6.改密      *"<<endl;
    cout<<'\t'<<"*     7.转账      8.退出      *"<<endl;
    cout<<'\t'<<"*     9.挂失      0.解挂      *"<<endl;
    cout<<'\t'<<"*-----------------------------*"<<endl;
	cout<<endl<<"请输入操作指令: ";
	cin>>order;
	switch(order)
	{
	case 1:

		openAccount();
		break;
	case 2:

		deposit();

		break;
	case 3:

		withdrawal();
		break;
	case 4:

		closed();

		break;
	case 5:

		bid();

		break;
	case 6:

		gai();
        break;

	case 7:

		move();
        break;

	case 8:
		cout<<endl<<"祝您心情愉快!"<<endl;
		cout<<endl<<"欢迎您下次使用!"<<endl;
		cout<<endl;
		exit(1);
		break;

    case 9:
        missing();
		break;

    case 0:
        finding();   //解挂();
		break;

	default:
		cout<<endl;
		cout<<"您输入的指令有误!  系统退出!"<<endl;
		cout<<endl;
		exit(1);
		break;
	}
}
//创建账户
void openAccount()
{
    int pan;
    cout<<endl<<"请输入户主:";
    cin>>array[size].accName;
	fflush(stdin);
    cout<<endl<<"请输入六位数字密码:";
    cin>>array[size].accPwd;
    fflush(stdin);
    chaxunmima(array[size].accPwd);
    cout<<endl<<"请输入开户金额:";
    cin>>array[size].balance;
    pan=panjine(array[size].balance);
    if(pan==0)
    {
        cout<<"金额错误!";
        mainFrame();
    }
    else
    {
    fflush(stdin);
    //
    strcpy(array[size].flag,"正常");
    //写卡号
    array[size].accNumber=autoCreament();
    printAccount(array[size]);
    Save();
    size++;
    cout<<endl<<"开户成功,按任意键返回"<<endl;
    fflush(stdin);
    getchar();
    mainFrame();
    }
}
//密码的鉴定
void chaxunmima(char Pwd[])
{
    int i;
    char a[7];

	if(strlen(Pwd)!=6)
	{
		cout<<endl<<"不是六位数字密码!请重新输入!"<<endl;
			cout<<endl<<"密码错误,按任意键返回"<<endl;
				fflush(stdin);
				getchar();
				mainFrame();
	}
	else
	{
		cout<<endl<<"请您再次输入:";
		for(i=0;i<6;i++)
		{
			cin>>a[i];
		}
		a[6]='\0';
		for(i=0;i<6;i++)
		{
			if(a[i]<48||a[i]>57)
			{
				cout<<endl<<"不是六位数字密码!请重新输入!"<<endl;
				cout<<endl<<"密码错误,按任意键返回"<<endl;
				fflush(stdin);
				getchar();
				mainFrame();

			}
		}
		if(strcmp(a,Pwd)==0)
		{
			cout<<endl<<"创建密码完成!"<<endl;
		}
		else
		{
			cout<<endl<<"前后密码输入不一致,请重新操作!"<<endl;
			cout<<endl<<"密码错误,按任意键返回"<<endl;
				fflush(stdin);
				getchar();
				mainFrame();
		}
	}
}
//实现卡号的涨
long autoCreament()
{
    if(size==0)
    {
        return INITNUMBER;
    }
    else
    {
        return array[size-1].accNumber+1;
    }
}

//输出指定卡的信息
void printAccount(Account acc)
{
    cout<<endl;
    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,pan;
    cin.sync();
    cout<<endl<<"请输入存款的账号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"卡号不存在,请重新操作"<<endl;
        //...
        deposit();
    }
	else
	{
	    cout<<endl<<"请输入存款金额:";
        cin>>money;
        pan=panjine(money);
	    if(pan==0)
	    {
	        cout<<"存款金额错误!";
	        mainFrame();
        }
	    else
	    {
        //展示下存款前卡的信息
        cout<<endl<<"存款前卡的信息:"<<endl;
        printAccount(array[pos]);
        //找到了该卡号所对应的卡
        array[pos].balance+=money;
		//展示存款后卡的信息
		Save();
        cout<<endl<<"存款后卡的信息:"<<endl;
        printAccount(array[pos]);
        cout<<endl<<"存款成功,按任意键返回"<<endl;
        fflush(stdin);
        getchar();
        mainFrame();
	    }
    }
}

//查询余额
void bid()
{
	int i;
    char a[7];
    int size,accNumber;
    cout<<endl<<"请输入您要查询的卡号:";
    cin>>accNumber;
	size=searchAccount(accNumber);
	if(size==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }
	else
	{
    cout<<endl<<"请输入您的密码:";
	for(i=0;i<6;i++)
	{
		cin>>a[i];
	}
	a[6]='\0';
	if(strcmp(a,array[size].accPwd)==0)
	{

		printAccount(array[size]);
		cout<<endl<<"查询成功,按任意键返回"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
	}
	}
}

//取款
void withdrawal()
{
	char key[7];
	int money,size,accNumber,pan1,i;
	cout<<endl<<"请输入您的卡号:";
	cin>>accNumber;
                         //寻找该卡号
	size=searchAccount(accNumber);
	if(size==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }else
	{
    if(strcmp(array[size].flag,"挂失")==0)
	{
	    cout<<"此卡已挂失,不允许取款!";
	    mainFrame();
	}else
	{
    cout<<endl<<"请输入您的密码:";
    fflush(stdin);
	for(i=0;i<6;i++)
	{
		cin>>key[i];
	}
	key[6]='\0';
    if(strcmp(key,array[size].accPwd)==0)
	{
	    cout<<endl<<"请输入您要取款的金额:";
		cin>>money;
		pan1=panjine(money);
		if(pan1==0)
		{
        cout<<"取款金额错误!";
		mainFrame();
		}else
		{
        //展示下存款前卡的信息
		cout<<endl<<"取款前卡的信息:"<<endl;
		printAccount(array[size]);
		//找到了该卡号所对应的卡
		if(array[size].balance<money)
		{
			cout<<endl<<"您的账户余额不足,无法取款!"<<endl;
			cout<<endl<<"取款失败,按任意键返回!"<<endl;
			fflush(stdin);
			getchar();
			mainFrame();
		}else
		{
			array[size].balance-=money;
			Save();
			//展示存款后卡的信息
			cout<<endl<<"取款后卡的信息:"<<endl;
			printAccount(array[size]);
			cout<<endl<<"取款成功,按任意键返回"<<endl;
			fflush(stdin);
			getchar();
			mainFrame();
		}
       }
	}else
	{
		cout<<endl<<"密码有误,请重新操作!"<<endl;
		withdrawal();
    }
   }
 }
}
//销户
void closed()
{
	char key[7];
	int i,size,accNumber;
	cout<<endl<<"请输入您要销户的卡号:";
	cin>>accNumber;
   //寻找该卡号
	size=searchAccount(accNumber);
	if(size==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }
	else
	{
	if(strcmp(array[size].flag,"挂失")==0)
	{
	    cout<<"此卡已挂失不允许销户!";
	    mainFrame();
    }
	else
	{
    cout<<endl<<"请输入您的密码:";
    fflush(stdin);
	for(i=0;i<6;i++)
	{
		cin>>key[i];
	}
	key[6]='\0';
	if(strcmp(key,array[size].accPwd)==0)
	{
		cout<<endl<<"销户前卡的信息:"<<endl;
		printAccount(array[size]);
		strcpy(array[size].flag,"销户");
		Save();
		cout<<endl<<"销户成功!"<<endl;
		printAccount(array[size]);
		cout<<"按任意键返回";
		fflush(stdin);
		getchar();
		mainFrame();
   }
	else
	{
		cout<<endl<<"密码错误,请您慎重销户!"<<endl;
		cout<<endl<<"按任意键返回"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
    }
	}
	}
}

void gai()
{
	char key[7],pass[7];
	int i,shu,accNumber;
	cout<<endl<<"请输入您要改密的卡号:";
	cin>>accNumber;

	//寻找该卡号
	shu=searchAccount(accNumber);
	if(shu==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }
	else
	{
	if(strcmp(array[shu].flag,"挂失")==0)
	{cout<<"此卡已挂失不允许改密!";}
	else
	{
    cout<<endl<<"请输入您的密码:";
	for(i=0;i<6;i++)
	{
		cin>>key[i];
	}
	key[6]='\0';
	if(strcmp(key,array[shu].accPwd)==0)
	{
		cout<<endl<<"请输入六位新密码:";
		for(i=0;i<6;i++)
		{
			cin>>pass[i];
		}
		pass[6]='\0';
		cout<<endl<<"请再次输入六位新密码:";
		cin>>array[shu].accPwd;
		if(strcmp(pass,array[shu].accPwd)==0)
		{
		    cout<<endl<<"修改密码成功!"<<endl;
		    Save();
			cout<<endl<<"按任意键返回"<<endl;
			fflush(stdin);
			getchar();
			mainFrame();
		}
		else
		{
			cout<<endl<<"前后密码不一致!请重新操作!"<<endl;
            cout<<endl<<"按任意键返回"<<endl;
			fflush(stdin);
			getchar();
			mainFrame();
		}

	}
	else
	{
		cout<<endl<<"密码错误!请重新操作!"<<endl;
		cout<<endl<<"按任意键返回"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
	}
	}
	}
}
void move()
{
	double money;
	char a, key[7];
	int i,shu1,shu2,ren,accNumber,pan;
	cout<<endl<<"本银行不支持跨行转账!"<<endl;
	cout<<endl<<"确认要转账吗?Y or N ?"<<endl;
	fflush(stdin);
	a=getchar();
	if(a=='y'||a=='Y')
	{
		cout<<endl<<"请输入您的卡号:";
		cin>>accNumber;

		//寻找该卡号
		shu1=searchAccount(accNumber);
		if(shu1==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }
	else
	{
		if(strcmp(array[shu1].flag,"挂失")==0)
		{cout<<"此卡已挂失,不允许转账!!!";}
		else
    {
		cout<<endl<<"请输入您的密码:";
		for(i=0;i<6;i++)
		{
			cin>>key[i];
		}
		key[6]='\0';
		if(strcmp(key,array[shu1].accPwd)==0)
		{
			cout<<endl<<"请输入您要转账的卡号:";
			cin>>ren;
			shu2=searchAccount(ren);
			if(shu2==-1)
			{
				//卡号有误
				cout<<endl<<"卡号不存在,请重新操作"<<endl;
				//...
				cout<<endl<<"转账失败,按任意键返回!"<<endl;
					fflush(stdin);
					getchar();
					mainFrame();
			}
			else
			{
				cout<<endl<<"请输入转账的金额:";
				cin>>money;
				if(array[shu1].balance<money)
				{
					cout<<endl<<"您的账户余额不足!无法转账!"<<endl;
					cout<<endl<<"转账失败,按任意键返回!"<<endl;
					fflush(stdin);
					getchar();
					mainFrame();
				}
				else
				{
				    pan=panjine(money);
				    if(pan==0)
				    {
                    cout<<"金额输入错误";
				    mainFrame();
				    }
				    else
				    {
                    array[shu1].balance-=money;
					array[shu2].balance+=money;
					Save();
					cout<<endl<<"转账完成!谢谢使用!"<<endl;
					cout<<endl<<"您当前的账户为:"<<endl;
					printAccount(array[shu1]);
					cout<<endl<<"按任意键返回"<<endl;
					fflush(stdin);
					getchar();
					mainFrame();
				    }
				}
			 }

		}else
		{
			cout<<endl<<"密码不正确!请重新操作!"<<endl;
			cout<<endl<<"按任意键返回"<<endl;
			fflush(stdin);
			getchar();
			mainFrame();
		}
    }
	}
	}
	else
	{
		cout<<endl<<"谢谢!请按任意键返回!"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
    }
}

//保存文件
void Save()
{
	ofstream outfile("银行数据.txt",ios::out);
	if(!outfile)
	{
		cout<<endl<<"open error!"<<endl;
		exit(1);
	}else
	{
	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 login()
{
    char bankname[10]="jilina";
	char bankpassword[10]="123456";
	 int  i;
	for(i=0;i<3;i++)
	{
		cout<<"请输入用户名:";
		char name[10]={0};
		cin>>name;
		cout<<"请输入密码:";
		char password[10]={0};
		cin>>password;
		if (strcmp(bankname,name)!=0||strcmp(bankpassword,password)!=0)
		{
			if(i==2)
			{
				cout<<"您输入的错误次数太多,不允许继续操作!"<<endl;
				break;
			}
			cout<<"用户名或则密码错误请重新输入:" <<endl;
		}
		else{
			mainFrame();
			break;
		}
	}
}
void read()
{   //读文件
	ifstream infile("银行数据.txt",ios::in);        //文件目标
	if(!infile)
	{
		cerr<<endl<<"open error!"<<endl<<endl;
		exit(1);
	}
    while(infile>>array[size].accNumber>>array[size].accName>>array[size].accPwd>>array[size].balance>>array[size].flag)                //依次检索文件
	{size++;}
	infile.close();
}
void missing()
{
	char key[7];
	int i,size,accNumber;
	cout<<endl<<"请输入您要挂失的卡号:";
	cin>>accNumber;
    //寻找该卡号
	size=searchAccount(accNumber);
	if(strcmp(array[size].flag,"挂失")==0)
	{
	    cout<<"您已经挂失,不能再执行此操作!"<<endl;
	    mainFrame();

	}else
	{
    cout<<endl<<"请输入您的密码:";
    fflush(stdin);
	for(i=0;i<6;i++)
	{
		cin>>key[i];
	}
	key[6]='\0';
	if(strcmp(key,array[size].accPwd)==0)
	{
		cout<<endl<<"挂失前卡的信息:"<<endl;
		printAccount(array[size]);
		strcpy(array[size].flag,"挂失");
		Save();
		cout<<"挂失成功!"<<endl;
		//Save();
		cout<<endl<<"挂失后卡的信息:"<<endl;
		printAccount(array[size]);
		cout<<"按任意键返回";
		fflush(stdin);
		getchar();
		mainFrame();
   }
	else
	{
		cout<<endl<<"密码错误!"<<endl;
		cout<<endl<<"按任意键返回"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
    }
	}
}
void finding()
{
	char key[7];
	int i,size,accNumber;
	cout<<endl<<"请输入您要解挂的卡号:";
	cin>>accNumber;
   //寻找该卡号
	size=searchAccount(accNumber);
	if(size==-1)
	{
	    cout<<"查无此卡!";
	    mainFrame();
    }
	else
	{
	if(strcmp(array[size].flag,"挂失")==0)
	{
    cout<<endl<<"请输入您的密码:";
    fflush(stdin);
	for(i=0;i<6;i++)
	{
		cin>>key[i];
	}
	key[6]='\0';
	if(strcmp(key,array[size].accPwd)==0)
	{
		cout<<endl<<"解挂前卡的信息:"<<endl;
		printAccount(array[size]);
		strcpy(array[size].flag,"正常");
		Save();
		cout<<"解挂成功!"<<endl;
		printAccount(array[size]);
		cout<<"按任意键返回";
		fflush(stdin);
		getchar();
		mainFrame();
   }
	else
	{
		cout<<endl<<"密码错误!"<<endl;
		cout<<endl<<"按任意键返回"<<endl;
		fflush(stdin);
		getchar();
		mainFrame();
    }
  }else
  {
      cout<<"您的卡未挂失!";
      cout<<"按任意键返回";
      fflush(stdin);
      getchar();
      mainFrame();
  }
  }
}
int panjine(double money)//不能存负的或取负的
{
    int pan;
    if(money<0)
    {pan=0;}
    else
    {pan=1;}
    return pan;
}


猜你喜欢

转载自blog.csdn.net/u012369599/article/details/17675627