程序设计《银行系统》
来源:互联网 发布:考研网络辅导班 编辑:程序博客网 时间:2024/05/01 01:50
主文件
main.cpp
/************************************************************ 版权所有 (C)2014, 王争取** 文件名称: main.cpp* 文件标识:无* 内容摘要:为主函数* 其它说明:无* 当前版本: V1.0* 作 者:王争取* 完成日期: 2015/07/15** 修改记录1:* 修改日期: 2015/07/15* 版本号: V1.0* 修改人: 王争取* 修改内容:**********************************************************/#include <iostream>#include "bank.h"using namespace std;/*主函数:*/int main(){ cout<<"+----------------------+\n"; cout<<"+ 欢迎光临CSDN银行 +\n"; cout<<"+----------------------+\n"; Bank b; if (pass()) { //Bank b; //原参考中多创建了一个Bank对象,造成一个诡异的Bug,详细解释见下面“注”处的链接 b.work(); } return 0;}头文件
bank.h
/************************************************************ 版权所有 (C)2014, 王争取** 文件名称: bank.h* 文件标识:无* 内容摘要:为头文件,包含User类和Bank类,两者又采取了组合形式* 其它说明:无* 当前版本: V1.0* 作 者:王争取* 完成日期: 2015/07/15** 修改记录1:* 修改日期: 2015/07/15* 版本号: V1.0* 修改人: 王争取* 修改内容:**********************************************************/#ifndef BANK_H_INCLUDED#define BANK_H_INCLUDED#include <cstring>using namespace std;const int upNum=2000; //系统最多容纳的用户数class Bank;/*User类,用于定义个人用户对象*/class User{public: void setUser(int acc, char *nam, int pw, double bal,int sta,char se,char* ID,char* add,char* ph); void showName(); void showBalance(string prompt); //显示余额,前面加上提示词prompt bool passwordIsRight(); //校验密码,输入的密码正确则返回true bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示 friend class Bank; //将Bank声明为友元类,方便其访问数据成员private: int account; //账号 int password; //密码 char name[20]; //用户名 double balance; //账户余额 char sex; //性别 char IDcard[20]; //身份证号 char address[30]; //地址 char phonenumber[20]; //电话号码 int status; //状态 0-正常 1-挂失 2-销户};/*Bank类,用于对个人用户的操作*/class Bank{public: Bank(); //开始前从文件中读数据,存在数组中 ~Bank(); //程序结束前,将数组中的数据写入到文件中 void work(); //业务驱动 void openAccount(); //开户 void cancelAccount(); //注销账户 void save(); //存款 void withdraw(); //取款 void showAccount(); //查询余额 void transferAccounts(); //转账 void reportLoss(); //挂失 void cancelLoss(); //解除挂失 void updatePassword(); //更改密码 int getUser(); //输入账号查询用户,返回用户在对象数组中的下标private: int N; //实际的用户数目 User *users; // 动态数组;};int pass(); //业务员登录int chooseInMenu(); //显示菜单并由业务员选择int inputPassword(); //返回键盘输入的密码#endif // BANK_H_INCLUDED
User类源文件
user.cpp
/************************************************************ 版权所有 (C)2014, 王争取** 文件名称: user.cpp* 文件标识:无* 内容摘要:为源文件用于对user类中所声明函数的定义* 其它说明:其对象作为bank.h的数据成员* 当前版本: V1.0* 作 者:王争取* 完成日期: 2015/07/15** 修改记录1:* 修改日期: 2015/07/15* 版本号: V1.0* 修改人: 王争取* 修改内容:**********************************************************/#include <iostream>#include "bank.h"using namespace std;void User::setUser(int acc, char* nam, int pw, double bal,int sta,char se,char* ID,char* add,char* ph){ account=acc; strcpy(name,nam); password=pw; balance=bal; sex=se; strcpy(IDcard,ID); strcpy(address,add); strcpy(phonenumber,ph); status=sta;}void User::showName(){ cout<<"户主姓名:"<<name<<endl;}void User::showBalance(string prompt){ cout<<prompt<<" "<<balance<<" 元"<<endl;}bool User::passwordIsRight(){ int iPass; bool right = true; cout<<"输入密码:"; iPass=inputPassword(); if(iPass!=password) { right = false; cout<<"输入密码错误,不能继续操作!"<<endl; } return right;}bool User::isNormalUser(){ bool normal = true; if(status!=0) { normal = false; cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能继续操作..."<<endl; } return normal;}
wokr.cpp
/************************************************************ 版权所有 (C)2014, 王争取** 文件名称: work.cpp* 文件标识:无* 内容摘要:为源函数,用于业务驱动,业务员进入银行系统* 其它说明:无* 当前版本: V1.0* 作 者:王争取* 完成日期: 2015/07/15** 修改记录1:* 修改日期: 2015/07/15* 版本号: V1.0* 修改人: 王争取* 修改内容:**********************************************************/#include <iostream>#include <fstream>#include <conio.h>#include <cstdlib>#include <cstring>#include <ctype.h>#include "bank.h"/*关于头文件的说明:*<conio>是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,*主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。*<cstdlib>是C++里面的一个常用函数库, 等价于C中的<stdlib.h>。stdlib.h可以提供一些函数与符号常量,*<cstring>主要用于字符串的操作*<ctype.h>是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),*用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节(Byte)字符,也支持宽字符*"bank.h"为用户自定义的头文件*/using namespace std;/*功能:验证用户密码返回值:密码正确,返回1; 不能通过密码验证,返回0*/int pass(){ char sNameInFile[20]; //由文件中读出的业务员用户名 char sPassInFile[20]; //文件中保存的密码,这一版本中,用字符保存密码 ifstream infile("password.txt",ios::in); if(!infile) { cout<<"password file cannot open!"<<endl; exit(1); } infile>>sNameInFile>>sPassInFile; infile.close(); char sName[20]; //业务员登录时输入的用户名 char sPass[20]; //业务员登录时输入的密码 char ch; int iTry=3; //进入系统时尝试的次数 int right = 0; //要返回的结果:0-不正确 1-正确 //进入系统,密码三次不对将退出 do { cout<<"请输入业务员用户名:"; cin>>sName; cout<<"请输入密码:"; int i=0; while((ch=getch())!='\r') //getch在接受输入后,不在屏幕上显示 { sPass[i++]=ch; putchar('*'); //接受任何字符,屏幕上只显示* } sPass[i]='\0'; fflush(stdin); cout<<endl;; if(strcmp(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0) { right = 1; break; } else { iTry--; if(iTry>0) cout<<"超过3次将退出,你还可以尝试"<<iTry<<"次!"<<endl; else { cout<<"对不起,你不能进入系统"<<endl;; } } } while(iTry); return right;}/*关于getch()的一点说明:所在头文件:conio.h函数用途:从控制台读取一个字符,但不显示在屏幕上函数原型:int getch(void)返回值:读取的字符在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)1)windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。2)unix、 linux系统中ENTER键只产生 \n ,因此getch返回10(\n)。3)MAC OS中ENTER键将产生 \r ,因此getch返回13(\r)。为避免键盘缓存区中未读出的字符影响程序,用fflush(stdin);清除输入缓存区*//*功能:显示菜单并由业务员选择返回值:用户选择的功能,范围0-9*/int chooseInMenu(){ int i; while(1) { cout<<endl;; cout<<"+----------------------------+"<<endl; cout<<"+ 1 开户 2 销户 3 存款 +"<<endl; cout<<"+ 4 取款 5 查询 6 转账 +"<<endl; cout<<"+ 7 挂失 8 解挂 9 改密 +"<<endl; cout<<"+ 0 退出 +"<<endl; cout<<"+----------------------------+"<<endl; cout<<"请输入操作指令:"; cin>>i; if(i>=0 && i<=9) break; else cout<<"请重新选择功能"<<endl;; } return i;}/*功能:输入密码返回值:整型的密码值技术说明:(1)此功能在多个模块中都要用到且功能单一,故分离出来,单独作业一个函数(2)为了便于在输入中只显示*,接受输入时以字符形式输入,而后转为对应的整型数(3)规定密码由不全为0的6位数字构成(当开头是'0'时,实际不足6位),一旦输入错误将重新输入附:在实际的系统中,密码通常用字符串描述,即使只允许出现数字字符,本例仅作为参考*/int inputPassword(){ char ch; //接收字符形式密码 int iPass=0; //要转换为数字 int i; while(1) { for(i=0; i<6; i++) { ch=getch(); //输入但不显示 putchar('*'); //输出* if(isdigit(ch)) iPass=iPass*10+(ch-'0'); else { iPass=0; break; //退出for循环后,再次接受 } } fflush(stdin); //清除键盘缓存区中已经有的输入 cout<<endl;; if(iPass==0) //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环 { cout<<"密码要求全为数字,且不能全0!"<<endl;; cout<<"请重新输入密码: "; } else break; } return iPass;}
bank.cpp
销户
存款
取款
查询
挂失
解挂
改密
转账
0 0
- 程序设计《银行系统》
- 程序设计项目实训:银行储存系统
- 程序设计实训:银行储蓄系统
- 程序设计项目——银行储蓄系统
- 程序设计项目 ——银行储蓄系统
- 【C++面向对象程序设计】20170527银行系统
- C++程序设计实践:银行前台服务系统(一)
- C++程序设计实践:银行前台服务系统(二)
- C++程序设计实践:银行前台服务系统(三)
- 程序设计基础课程实训报告:银行储蓄系统
- 程序设计项目实训——银行储蓄系统
- ##..C++程序设计项目实训——银行储蓄系统
- 大一c++程序设计实训 银行储蓄系统
- C++程序设计-第13周递归函数及银行系统程序设计上机实践项目
- 银行系统
- 银行系统
- 银行系统
- 银行系统
- 2012年5月SAT香港真题解析
- 杭电 hdu Warm up 2 (二分匹配)
- FIFO的数组实现方式
- hdu2018 (递归,记忆化递归)
- @Resource注解
- 程序设计《银行系统》
- 使用 JQueryMobile 点击超链接提示“error loading page” 错误
- 关于Java传值和传址的一些讨论
- [Jsoup] Jsoup解析中需要注意的问题
- day03--面向对象--设计模式之单例模式
- 基于Spring-SpringMVC-Mybatis的简单例子
- 极客学院java 接口使用代码笔记
- 【解决】hive与hbase表结合级联查询的问题
- Setup contiki toolchain in ubuntu 13.04