银行系统第一版
2015-07-16 10:29
288 查看
职员账户100~104,密码123456
客户账户10000~10100,密码123456
文件链接:http://pan.baidu.com/s/1FIO02
main.cpp
客户账户10000~10100,密码123456
文件链接:http://pan.baidu.com/s/1FIO02
main.cpp
#include<iostream> #include<fstream> //从文件中读数据包含的头文件 #include <windows.h> //system,Sleep,exit函数的调用需要的头文件 #include<conio.h> //调用getch需要用到的头文件 #include"bank.h" void back_menu() { int iBack; cout<<"\n0.返回工作菜单\n"; while((iBack=getch())!='0') { ; } } int main() { Bank a; //定义银行类 Officer * b=NULL; //定义一个职员对象指针,并初始化为NULL b=a.find_officer(); //将find_officer()返回的指针赋值给c if(b!=NULL) //首先判断b是否为空指针,如果为空直接退出 { bool q=false; q=(*b).login(); //职员登陆 if(q) //如果登陆,进入工作,否者直接退出系统 { a.load_customer_search(); //加载customer的索引 Sleep(1000); system("cls"); while(1) { int g=1; cout<<"1.工作\t"<<"2.退出"<<endl; cin>>g; switch(g) { case 1: { Customer *c=NULL; //定义客户为的指针对象,并初始化为空 int i=1; while(i!=10) { system("cls"); cout<<"*********程序员银行*********"<<endl; cout<<" 当前操作员:"<<(*b).get_name()<<endl; cout<<"1.开户\t"<<"2.存钱"<<endl; cout<<"3.取钱\t"<<"4.信息查询"<<endl; cout<<"5.转账\t"<<"6.改密"<<endl; cout<<"7.挂失\t"<<"8.解挂"<<endl; cout<<"9.销户\t"<<"10.退出"<<endl; cin>>i; switch(i) { case 1: { system("cls"); a.open_account(); back_menu(); break; } case 2: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).saveMoney(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 3: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).drawMoney(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 4: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).showCustomer(); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 5: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).transferAccount(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 6: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).changePassword(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 7: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).turnLost(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 8: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { (*c).turnUnlost(); a.save_customer(*c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 9: { system("cls"); c=new Customer; c=a.find_customer(); if(c!=NULL) { a.closeAccount(c); } else { cout<<"该账户不存在"<<endl; } delete c; back_menu(); break; } case 10: { system("cls"); cout<<"退出中"; Sleep(2000); system("cls"); exit(1); } } } } case 2: exit(1); } } } } else { cout<<"the account don't exist"; Sleep(2000); exit(1); } }bank.cpp
#include<iostream> #include<fstream> #include <windows.h> //清屏函数的调用需要的头文件 #include<conio.h> //调用getch需要用到的头文件 #include<stdlib.h> #include"bank.h" using namespace std; //**************全局函数************ int get_password() { int password=0; int m; for(int i=0; i<6;) { m=getch()-48; if(m>=0&&m<=9) { cout<<'*'; (password*=10)+=m; i++; } } return password; } //***************Bank类的成员函数的定义********************* Bank::Bank() { ifstream infile("officer.txt",ios::ate|ios::binary); if(!infile) { cerr<<"officer information load fail"; exit(1); } else { infile.seekg(ios::beg); infile.read((char*)&off_NO,sizeof(off_NO)); off=new Officer[off_NO]; int i; for(i=0; i<off_NO; i++) { infile.read((char*)&off[i],sizeof(off[i])); } infile.close(); } cus=new Customer; } Bank::Bank(int a) { off=NULL; Bank::load_customer_search(); } void Bank::open_account() //银行的开户函数 { char name[20]; //输入开户用户的信息 char idcard[18]; int password; double money=0; cout<<"******开户******"; cout<<"输入姓名:"; cin>>name; cout<<"输入身份证号:"; int i=0; char m; while((m=getch())!=13&&i<18) { cout<<m; idcard[i]=m; i++; } cout<<endl<<"输入密码:"; password=get_password(); customer_search sear; //为开户用户建立索引 sear.num=search_NO; sear.account=search_NO+10000; sear.state=true; ofstream outfile1("customersearch.txt",ios::ate|ios::binary|ios::in|ios::out); if(!outfile1) { cerr<<"文件加载失败"<<endl; exit(1); } int NO=search_NO; search_NO++; //索引的数量增加1 outfile1.seekp(ios::beg); //存入索引 outfile1.write((char*)&search_NO,sizeof(search_NO)); outfile1.seekp(NO*sizeof(sear),ios::cur); outfile1.write((char*)&sear,sizeof(sear)); outfile1.close(); delete cus_search; load_customer_search(); //将修改后的索引读入 Customer p(sear.account,name,idcard,password,money,false); //建立一个customer类, fstream outfile2("customer.txt",ios::ate|ios::binary|ios::in|ios::out); if(!outfile2) { cerr<<"文件加载失败"<<endl; exit(1); } outfile2.seekg(ios::beg); outfile2.read((char*)&cus_NO,sizeof(cus_NO)); cus_NO++; //客户的数量增加1 outfile2.seekp(ios::beg); outfile2.write((char*)&cus_NO,sizeof(cus_NO)); outfile2.seekp(NO*sizeof(p),ios::cur); outfile2.write((char*)&p,sizeof(p)); outfile2.close(); system("cls"); cout<<"\n开户成功"<<endl; cout<<"账户号码为:"<<sear.account<<endl; } void Bank::closeAccount(Customer*a) //银行类的销户函数 { system("cls"); bool k; k=(*a).login(); if(k) { if(!(*a).lost) { cus_search[cus_cur].num=cus_cur; cus_search[cus_cur].account=(*a).account; cus_search[cus_cur].state=false; if((*a).money!=0) { cout<<"取出余额:"<<(*a).money<<endl; } ofstream outfile1("customersearch.txt",ios::binary|ios::ate|ios::in|ios::out); if(!outfile1) { cerr<<"文件加载失败"<<endl; exit(1); } outfile1.seekp(ios::beg); outfile1.seekp(sizeof(int),ios::beg); outfile1.seekp(cus_cur*sizeof(cus_search[cus_cur]),ios::cur); outfile1.write((char*)&cus_search[cus_cur],sizeof(cus_search[cus_cur])); outfile1.close(); Customer p((*a).account); ofstream outfile2("customer.txt",ios::binary|ios::ate|ios::out|ios::in); if(!outfile2) { cerr<<"文件加载失败"<<endl; exit(1); } cus_NO--; outfile2.seekp(ios::beg); outfile2.write((char*)&cus_NO,sizeof(cus_NO)); outfile2.seekp(cus_cur*sizeof(p),ios::cur); outfile2.write((char*)&p,sizeof(p)); outfile2.close(); cout<<"销户成功"<<endl; } else cout<<"当前账号处于挂失状态,不能销户"<<endl; } else cout<<"密码错误"<<endl; delete cus; } void Bank::load_customer_search() //加载customer的索引 { ifstream infile("customersearch.txt",ios::ate|ios::binary); if(!infile) { cerr<<"customersearch information load fail"; exit(1); } else { int i; infile.seekg(ios::beg); infile.read((char*)&search_NO,sizeof(search_NO)); cus_search=new customer_search[search_NO]; for(i=0; i<search_NO; i++) { infile.read((char*)&cus_search[i],sizeof(cus_search[i])); } infile.close(); } } void Bank::save_customer(Customer&a) //存储用户信息 { ofstream outfile("customer.txt",ios::ate|ios::binary|ios::in|ios::out); if(!outfile) { cerr<<"save file load fail"; exit(1); } outfile.seekp(sizeof(int),ios::beg); outfile.seekp(cus_cur*sizeof(a),ios::cur); outfile.write((char*)&a,sizeof(a)); outfile.close(); delete cus; } Customer* Bank::find_customer() //查找客户的函数 { cus=new Customer; int a; cout<<"输入账号:"; cin>>a; int i=0; for(i=0; i<search_NO; i++) { if(cus_search[i].account==a&&cus_search[i].state==1) { cus_cur=i; ifstream infile("customer.txt",ios::binary); infile.read((char*)&cus_NO,sizeof(cus_NO)); infile.seekg(i*sizeof(cus[0]),ios::cur); infile.read((char*)&cus[0],sizeof(cus[0])); infile.close(); return cus; } } return NULL; } Officer* Bank::find_officer() //查找职员的函数 { int a; cout<<"输入账号:"; cin>>a; int i=0; for(i=0; i<off_NO; i++) { if(off[i].account==a) return &off[i]; } return NULL; } //*********officer类的成员函数************** Officer::Officer() //对officer的初始化 { account=-1; *name='\0'; *idcard='\0'; password=-1; } Officer::Officer(int a,char *b,char *c,int d) { account=a; for(int i=0; i<20; i++) { name[i]=b[i]; } for(int j=0; j<18; j++) { idcard[j]=c[j]; } password=d; } bool Officer::login() //登陆函数 { int in_password=0,n=0; bool b=false; while(n<3&&!b) { cout<<"输入密码:"; in_password=get_password(); if(password==in_password) { b=true; cout<<'\n'<<name<<endl; cout<<"登陆成功"<<endl; } else { cout<<"\n密码错误"<<endl; ++n; Sleep(500); system("cls"); cout<<"今日还有"<<3-n<<"次输入机会"<<endl; } } system("cls"); return b; } //***********customer类的成员函数的定义*********** Customer::Customer() { money=0; lost=false; } Customer::Customer(int a) { account=a; *name='\0'; *idcard='\0'; password=-1; money=0; lost=false; } void Customer::saveMoney() { double p_money; cout<<"输入存款金额:"; cin>>p_money; system("cls"); cout<<"姓名:"<<name<<endl; int i; cout<<"存款金额:"<<p_money<<endl; cout<< "1.确认 2.取消"<<endl; cin>>i; system("cls"); switch(i) { case 1: money+=p_money; cout<<"存款成功"<<endl; break; case 2: cout<<"取消成功"<<endl; break; } } void Customer::drawMoney() //客户类的取钱函数 { bool k; k=Customer::login(); if(k) { if(!lost) { double p_money; cout<<"输入取款金额:"; cin>>p_money; cout<<endl; if(p_money<=money) { int i; system("cls"); cout<<"取款金额:"<<p_money<<endl; cout<< "1.确认 2.取消"<<endl; cin>>i; system("cls"); switch(i) { case 1: money-=p_money; cout<<"取款成功"<<endl; break; case 2: cout<<"取消成功"<<endl; break; } } else { cout<<"余额不足"<<endl; } } else cout<<"当前账号处于挂失状态,不能取款"<<endl; } } void Customer::showCustomer() //客户类的信息查询函数 { bool k; k=Customer::login(); system("cls"); if(k) { cout<<"账号:"<<account<<endl; cout<<"姓名:"<<name<<endl; cout<<"身份证号码:"<<idcard<<endl; cout<<"余额:"<<money<<endl; cout<<"状态:"; if(lost) cout<<"挂失"<<endl; else cout<<"正常"<<endl; } } void Customer::transferAccount() //客户类的转账函数 { if(Customer::login()) { if(!lost) { Bank t(5); Customer*k; k=new Customer; cout<<"转入:\n"; k=t.find_customer(); if(k!=NULL) { double p_money; cout<<"输入转账金额:"; cin>>p_money; cout<<endl; if(p_money>0) { system("cls"); if(p_money<=money) { cout<<"转出金额:"<<p_money<<endl; cout<<"转入账号:"<<(*k).get_account()<<endl; int i; cout<<"1.确认 2.取消"<<endl; cin>>i; system("cls"); switch(i) { case 1: money-=p_money; (*k).money+=p_money; cout<<"转账成功"<<endl; break; case 2: break; } } else cout<<"余额不足"<<endl; } else cout<<"转账金额需大于0元"<<endl; } else { cout<<"你输入的账户不存在"<<endl; } t.save_customer(*k); delete k; } else { cout<<"当前账号处于挂失状态,不能转账"<<endl; } } else cout<<"密码错误"<<endl; } void Customer::changePassword() //修改密码的函数 { if(!lost) { int p,j,k; cout<<"输入原密码:"; p=get_password(); system("cls"); if(password==p) { cout<<"\n输入新密码:"; j=get_password(); cout<<"\n再次输入密码:"; k=get_password(); system("cls"); if(j==k) { password=j; cout<<"密码修改成功/n"; } else cout<<"\n两次输入的密码不相同修改失败"; } else cout<<"\n密码错误"; } else cout<<"\n当前用户处于挂失状态无法修改密码"; } void Customer::turnLost() //客户类的挂失函数 { bool k; k=Customer::login(); if(k) { if(!lost) { lost=true; cout<<"挂失成功"<<endl; } else cout<<"你账号已挂失"<<endl; } else cout<<"密码错误"<<endl; } void Customer::turnUnlost() //客户类的解挂函数 { bool k; k=Customer::login(); if(k) { if(lost) { lost=false; cout<<"解挂成功"<<endl; } else cout<<"当前账户无需解挂"<<endl; } else cout<<"密码错误"; }bank.h
#ifndef BANK_H_INCLUDED #define BANK_H_INCLUDED #include<cstring> using namespace std; class Bank; class Officer; class Customer; //定义的customer索引 struct customer_search { int num; int account; bool state; }; //***********定义的银行类*********** class Bank { private: int off_NO; //已存入的officer数量 int search_NO; //已存入的索引数量 int cus_NO; //已存在的customner账户数 int cus_cur; //当前操作的用户的索引序列 Customer *cus; //定义的Customer指针 Officer *off; //定义的Officer指针 customer_search *cus_search; //定义的customer_serach的指针 public: Bank(); //默认构造函数 Bank(int a); //重载的构造函数 void open_account(); // 开户函数 void closeAccount(Customer*a); //销户函数 void save_customer(Customer&a); //存储用户信息 void load_customer_search(); //加载customer的索引 Officer* find_officer(); //查找职员的函数, Customer* find_customer(); //查找用户的函数,并返回该用户的指针 ~Bank() {}; }; //***************定义的职员类***************** class Officer { protected: int account; //职员账号 char name[20]; //姓名 char idcard[18]; //身份证 int password; //密码 public: Officer(); //无参构造函数 Officer(int a,char* b,char* c,int d); //有参构造函数 bool login(); //用户登录函数 char* get_name() { return name; } ~Officer() {}; //析构函数用于将保存用户的交易记录,但可行性有待考虑 friend Bank; //声明为bank类的友元类 }; //**************定义的客户类******** class Customer:public Officer { private: double money; //客户的账户余额 bool lost; //挂失为true,没有挂失为false public: Customer(); //无参构造函数 Customer(int a); Customer(int a,char* b,char* c,int d,double e,bool f):Officer(a,b,c,d) //有参构造函数 { money=e,lost=f; } int get_account() { return account; } void saveMoney(); //存钱函数 void drawMoney(); //取钱函数 void showCustomer(); //信息查询函数 void transferAccount(); //转账函数 void changePassword(); //修改密码函数 void turnLost(); //挂失函数 void turnUnlost(); //解挂函数 void closeAccount(); //销户函数 ~Customer() {}; //析构函数 friend Bank ; //声明为bank的友元类 }; #endif // BANK_H_INCLUDED
相关文章推荐
- C# Programming Study #2
- 关于DownloadManager的一些问题
- 20150716,微软7月15日发布14个安全补丁
- static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别
- 学习笔记之Myeclipse学习笔记(二)_MyEclipse跟踪调试
- 【js】带按钮的js弹出框
- 遥感图像存储格式BSQ/BIL/BIP的理解
- [Android] ImageView.ScaleType设置图解
- linux更换阿里云的源的shell脚本
- 【struts2八】利用token防止表单重复提交
- python 字典的setdefault方法
- Linux大内存页Oracle数据库优化
- 有关oracle表空间查询的一些记录
- 编译一个可以运行在openwrt上的c程序
- top域名拍卖会首拍爆发:单日注册量破5000
- log4j 使用介绍
- ORA-08102的错误
- 正确处理listview的position
- c++/c编译预处理
- SQL Case when 的使用方法