/* 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; }