1. 程式人生 > >有無奈有快樂的銀行系統----My Love.

有無奈有快樂的銀行系統----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;
}