/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:樊露露 * 完成日期:2012 年12月27日 * 版本号:v1.1 * * 输入描述:无 * 问题描述:银行系统 * 程序输出:银行各种业务 * 问题分析: * 算法设计:略 */ #include <iostream> #include <string.h> #include <stdio.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 Deposit(); //存款类型 void depositmodle(); //取款 void withdraw(); //查询 void search(); //修改密码 void updatePassword(); //转账 void transferAccounts(); //销户 void close(); //输出指定卡的信息 void printAccount(Account acc); //根据卡号查找卡在数组中的下标 bool isPassLegal(char pass[]); int searchAccount(long accNumber); 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) { mainFrame(); break; }else{ cout<<"用户名或密码输入错误"<<endl; } } return 0; } //欢迎 void welcome() { cout<<"+----------------------------------+"<<endl; cout<<"+----------------------------------+"<<endl; cout<<"|-------欢迎登陆银行系统-----------|"<<endl; cout<<"+----------- V 1.1-----------------+"<<endl; cout<<"+----------------------------------+"<<endl; } //主界面 void mainFrame() { int order; cout<<"|----------------------------|"<<endl; cout<<"|-------1.开户---------------|"<<endl; cout<<"|-------2.存款(活期)-------|"<<endl; cout<<"|-------3.存款(死期)-------|"<<endl; cout<<"|-------4.取款---------------|"<<endl; cout<<"|-------5.销户---------------|"<<endl; cout<<"|-------6.查询---------------|"<<endl; cout<<"|-------7.转账---------------|"<<endl; cout<<"|-------8.修改密码-----------|"<<endl; cout<<"|-------9.退出---------------|"<<endl; cout<<"|----------------------------|"<<endl; cout<<"请输入操作指令"<<endl; cin>>order; switch(order){ case 1: openAccount(); break; case 2: deposit(); break; case 3: Deposit(); break; case 4: withdraw(); break; case 5: close(); break; case 6: search(); break; case 7: transferAccounts(); break; case 8: updatePassword(); break; case 9: cout<<"|----------------------------------------|"<<endl; cout<<"|-------------您已成功退出---------------|"<<endl; cout<<"+----------------------------------------+"<<endl; cout<<"|-------------欢迎下次光临---------------|"<<endl; cout<<"|----------------------------------------|"<<endl; break; default: 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; fflush(stdin); getchar(); mainFrame(); }else{ cout<<"密码必须是6位纯数字"<<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)<<acc.accPwd<<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){ //找到了这张卡 pos=i; break; } } return pos; } //存款(活期) void deposit() { long accNum;//存款的账号 double money;//存款的金额 int pos,i=0,num; cout<<"请输入存款的账号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1){ //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; //... deposit(); }else{ //展示下存款前卡的信息 cout<<"请确认存款前的银行卡信息,若正确请按1,错误请按2:"<<endl; printAccount(array[pos]); cin>>num; if(num==1&&strcmp(array[pos].flag,"正常")==0){ cout<<"请输入存款金额:"; cin>>money; //找到了该卡号所对应的卡 array[pos].balance+=money; //展示存款后卡的信息 cout<<"存款后卡的信息:"<<endl; printAccount(array[pos]); cout<<"存款成功,按任意键返回"<<endl; fflush(stdin); getchar(); mainFrame(); }else{ cout<<"此账户处于异常状态,禁止存款!"; cout<<"按任意键退出:"; fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } } } //存款(死期) void Deposit() { char arr[10]; int t; cout<<"请输入户主:"; cin>>array[size].accName; cout<<"请输入密码:"; cin>>array[size].accPwd; cout<<"请再次输入密码:"; cin>>arr; if(strcmp(array[size].accPwd,arr)==0){ if(isPassLegal(arr)){ cout<<"两次密码输入一致,请继续。"<<endl; depositmodle(); cout<<"请您输入存款代号(1-6):"; cin>>t; if(t>=7){ cout<<"选择存款类型错误!请重新选择."; depositmodle(); }else{ cout<<"请存款输入金额:"; cin>>array[size].balance; switch(t){ case 1: strcpy(array[size].flag,"3个月"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; case 2: strcpy(array[size].flag,"6个月"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; case 3: strcpy(array[size].flag,"一年"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; case 4: strcpy(array[size].flag,"二年"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; case 5: strcpy(array[size].flag,"三年"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; case 6: strcpy(array[size].flag,"五年"); array[size].accNumber=autoCreament(); printAccount(array[size]); break; default: break; } } } else { cout<<"密码必须是纯六位的数字!"<<endl; openAccount(); } //写卡号 size++; cout<<"存款成功,按任意键返回"<<endl; }else{ cout<<"两次密码输入不一致!请重新输入!"<<endl; openAccount(); } fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } //取款 void withdraw() { long account; char password[10]; int pos,i; double money; cout<<"-----欢迎来到取款页面-----"<<endl; for(i=0;i<3;i++) { cout<<"请输入账号:"; cin>>account; cout<<"请输入密码:"; cin>>password; pos=searchAccount(account); if(strcmp(array[pos].flag,"正常")==0) { if(pos>=0&&strcmp(password,array[pos].accPwd)==0) { cout<<"请输入取款金额:"; cin>>money; if(money<=array[pos].balance) { cout<<"取款前卡的信息:"<<endl; printAccount(array[pos]); array[pos].balance-=money; cout<<"取款后卡的信息:"<<endl; printAccount(array[pos]); } else { cout<<"卡内余额不足!按任意键返回!"; } fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; }else{ cout<<"用户名或密码输入错误"<<endl; } } else { cout<<"此账号处于异常状态,不能进行此操作!"; cout<<"按任意键退出!"; fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } } } //查询 void search(){ long account; char password[10]; int i,pos; cout<<"-----欢迎来到查询页面-----"<<endl; for(i=0;i<3;i++) { cout<<"请输入账号:"; cin>>account; cout<<"请输入密码:"; cin>>password; pos=searchAccount(account); if(strcmp(array[pos].flag,"正常")==0) { if(pos>=0&&strcmp(password,array[pos].accPwd)==0) { cout<<"您的银行卡信息为:"<<endl; printAccount(array[pos]); fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } else{ cout<<"用户名或密码输入错误"<<endl; } } else { cout<<"此账号处于异常状态,不能进行此操作!"; cout<<"按任意键退出!"; fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; cout<<""; } } } //存款类型 void depositmodle() { cout<<"=====存款期限====="<<endl; cout<<"1. 3个月"<<endl; cout<<"2. 6个月"<<endl; cout<<"3. 一年"<<endl; cout<<"4. 二年"<<endl; cout<<"5. 三年"<<endl; cout<<"6. 五年"<<endl; } //修改密码 void updatePassword() { long account; char password[10],pwd1[10],pwd2[10]; int i,pos; cout<<"-----欢迎来到修改密码页面-----"<<endl; for(i=0;i<3;i++) { cout<<"请输入账号:"; cin>>account; cout<<"请输入密码:"; cin>>password; pos=searchAccount(account); if(strcmp(array[pos].flag,"正常")==0) { if(pos>=0&&strcmp(password,array[pos].accPwd)==0) { cout<<"请输入新密码:"; cin>>pwd1; cout<<"请确认新密码:"; cin>>pwd2; if(strcmp(pwd1,pwd2)==0){ strcpy(array[pos].accPwd,pwd1); cout<<"密码修改成功!按任意键退出!"<<endl; printAccount(array[pos]); break; } else{ cout<<"两次密码输入不一致,请重新输入。"; } } else{ cout<<"用户名或密码输入错误"<<endl; } } else { cout<<"此账号处于异常状态,不能进行此操作!"; cout<<"按任意键退出!"; } } fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } //转账 void transferAccounts() { long Account1,Account2; char password[10]; int pos1,pos2,i,num; double money; cout<<"请输入账号:"; cin>>Account1; for(i=0;i<3;i++) { cout<<"请输入密码:"; cin>>password; pos1=searchAccount(Account1); if(strcmp(array[pos1].flag,"正常")==0) { if(pos1>=0&&strcmp(password,array[pos1].accPwd)==0) { cout<<"请输入对方账号:"; cin>>Account2; pos2=searchAccount(Account2); if(pos2==-1) { cout<<"对方账户不存在!请重新输入!"; } else { cout<<"请确认对方账户是否正确,若正确请按1,否则按2:"<<endl; cout<<"|------------------------|"<<endl; cout<<setiosflags(ios::left)<<"|"<<setw(8)<<"卡号"<<setw(8)<<"户主"<<setw(8)<<"状态"<<"|"<<endl; cout<<setiosflags(ios::left)<<"+------------------------+"<<endl; cout<<setiosflags(ios::left)<<"|"<<setw(8)<<array[pos2].accNumber<<setw(8)<<array[pos2].accName<<setw(8)<<array[pos2].flag<<"|"<<endl; cout<<"|------------------------|"<<endl; cin>>num; if(num==2) { cout<<"按任意键退出!"; break; } else { cout<<"请输入转账金额:"; cin>>money; if(money<=array[pos1].balance) { array[pos1].balance-=money; array[pos2].balance+=money; cout<<"转账成功,按任意键退出!"; printAccount(array[pos1]); break; } else { cout<<"您的余额不足,转账失败!按任意键退出!"; break; } } } } else { cout<<"您输入密码或账号有误,请重新输入:"; } } else { cout<<"此账号处于异常状态,不能进行此操作!"; cout<<"按任意键退出!"; } } fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } //销户 void close() { long Account; char password[10]; int pos,i; cout<<"请输入要销户的账号:"; cin>>Account; pos=searchAccount(Account); for(i=0;i<3;i++) { cout<<"请输入密码:"; cin>>password; if(pos>=0&&strcmp(password,array[pos].accPwd)==0) { array[pos].balance=0; strcpy(array[pos].flag,"销户"); printAccount(array[pos]); break; } else { cout<<"密码或账号错误,请重新输入!"; } } fflush(stdin); getchar(); mainFrame(); cout<<"请输入操作指令:"; } 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位 flag=false; } return flag; }