有無奈有快樂的銀行系統----My Love.
阿新 • • 發佈:2019-01-11
/* 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; }