C++银行账户管理系统课程设计报告.doc_第1页
C++银行账户管理系统课程设计报告.doc_第2页
C++银行账户管理系统课程设计报告.doc_第3页
C++银行账户管理系统课程设计报告.doc_第4页
C++银行账户管理系统课程设计报告.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计基础(C+) 课程设计报告 设计题目:银行账户管理程序 学生姓名: 专 业:计算机科学与技术 班 级:2010 级 01 班 学 号:2010813622 指导老师: 完成日期:2011 年 1 月 10 日合肥工业大学计算机与信息学院一、需求和规格说明设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。 基本要求 程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。二、设计定义一个结构账户信息结构体 AccountInfos存储账户信息信息,定义一个CBank(银行类)和CConsumer(账户类)。CBank类主要提供的功能有开户,销户、登录、转账、账户查询、文件读写等。CConsumer类主要做账户信息的数据操作,存款、取款、修改密码、显示账户信息等。软件完全遵循面向对象的程序设计开发,对类进行封装。属性和方法定义结构体类型成员名描述AccountInfosintnID开户帐号stringsPasswd用户密码stringsName用户姓名stringsIDNumber身份证号stringsCompany单位stringsTel电话号码stringsAddr地址stringfMoney存款银行类: 对账户进行管理操作. 例如开户、注销、查询、保存、读取等 类名成员类别类型成员名描述CBank属性intm_nAccountNum用户数方法intAccountIsExist (int nID)检测账户是否存在存在返回account数组下标,不存在返回-1voidDelAccount ()账户注销voidExitBank ()退出系统voidGetTime ()返回当前时间voidLoadAccount ()从文件读取账户信息voidLoginAccount ()账户登陆voidMenuShow ()显示主操作菜单voidQueryAccount ()查询账户voidSaveAccount ()写账户信息到文件voidSetAccount ()账户开户voidShowAccount(CConsumer* pConsumer)显示查询用户的信息voidTransfer (int n)转账 账户类: 对账户信息的存储和功能操作,例如取款、存款、转账、密码变更等。类名成员类别类型成员名描述CConsumer属性AccountInfosm_AccountInfo 账户信息结构体方法intAddMoney (float fMoney)增加存款 voidChangePasswd ()密码变更 voidDecMoney (float fMoney)减少存款 voidDisplayInfo ()显示账户信息 voidFetchMoney ()取款 voidSaveMoney ()存款stringGetAddr ()获取地址stringGetCompany ()获取单位IntGetID ()获取账户ID stringGetIDNumber ()获取身份证号 FloatGetMoney ()获取存款 stringGetName获取用户姓名 stringGetPasswd ()获取账户密码 stringGetTel ()获取电话号码 三、用户手册程序运行后,出现如上图界面。根据提示输入相应的操作序号进入相应的功能。1、 用户开户: 在命令行内输入1 按回车键,进入开户向导,根据系统提示输入相应的数据,最后开户成功系统会给出提示。2、账户登录: 在命令行内输入2按回车键,进入账户登陆,根据提示输入开户的账户id和密码进入用户菜单(如下图)用户可根据提示进行取款、存款、转账、修改密码等操作。3、账户注销: 在命令行内输入3按回车键,进入账户注销,账户注销需要输入注销账户的密码。4、查询账户:在命令行内输入4按回车键,进入查询账户模式,账户查询可根据账户ID和用户名查询,用户查询可查询所有相同用户名的账户信息。5、退出系统:在命令行内输入5按回车键,将退出本系统。四、调式及测试程序运行时,首先开户,开户后登录用户进入用户菜单,才能选择其他的服务,程序本身包含很多除错功能,当用户有不当 操作时程序会自动提示,并提示用户重新选择服务。 CBank类中的账户类数组定义长度为20,所以本程序理论上最多支持20个用户开户,当然根据需要也可对数组长度进行扩充,支持更多的用户。在实际测试中加入20用户测试无错,程序运行正常。进一步改进1、在用户进行开户时信息输入时,不能捕获用户按下的ESC键中断输入回到主菜单,下一步可考虑在开一个线程监听用户的按键操作进行处理。2、对于用户来说存款数目应是无限制的,但在此程序中金钱使用的float型存储,所以每个帐户最大可存储 3.4*10(38)元,不过对于一般用户完全足够了。附录源程序/ stdafx.h#include /输入输出头文件#include /字符串操作头文件 #include /函数system()头文件#include /时间函数#include /文件操作的类和方法using namespace std;/* 刷新输入缓冲区 */inline void CinClear()/cin.sync(); /清除缓存区的数据流cin.clear(); /清除错误状态cin.ignore(1024,n ); /跳过无效数据;/* 账户信息 */typedef struct AccountInfos int nID; /* 开户帐号 */ string sPasswd; /* 用户密码 */ string sName; /* 用户姓名 */string sIDNumber; /* 身份证号 */string sCompany; /* 单位 */string sTel;/* 电话号码 */string sAddr; /* 地址 */float fMoney;/* 存款 */AccountInfos()nID = 0;sPasswd = ;sName = ;fMoney = 0;sIDNumber = ;sCompany = ;sTel = ;sAddr = ;AccountInfos;/#代码分页#/Bank.h/* * 银行类 * 对账户进行管理操作. * 例如开户、注销、查询、保存、读取等 */#include Consumer.hclass CBank public:CBank();virtual CBank();public:void SetAccount(); /账户开户void DelAccount(); /账户注销void Transfer(int n); /转账void LoginAccount(); /登录void ExitBank();/ 退出系统void MenuShow();/菜单显示void SaveAccount(); /保存信息到文件void LoadAccount(); /从文件读取信息int AccountIsExist(int nID); /判断账户是否存在void QueryAccount(); /查询账户void GetTime(); /获取当前时间protected:CConsumer *account20; static int m_nAccountNum;/账户数void ShowAccount(CConsumer *pConsumer);char DoVerify(const char* pszSrc);bool IsIDNumber(string sIdNumber); /验证身份证bool IsTelPhone(string sTel); /验证电话号码;/#代码分页#/ Bank.cpp#include stdafx.h#include Bank.hCBank:CBank()CBank:CBank()/* 用户数 */int CBank:m_nAccountNum = 0;/* * 写账户信息到文件 */void CBank:SaveAccount()ofstream outfile(bank.dat, ios:out);int n=0;outfilem_nAccountNum ;for( ; nm_nAccountNum; n+ )outfileGetID() ;outfileGetPasswd() ;outfileGetName() ;outfileGetIDNumber() ;outfileGetCompany() ;outfileGetTel() ;outfileGetAddr() ;outfileGetMoney() ;outfile.close(); /* * 从文件读取账户信息 */void CBank:LoadAccount()ifstream infile(bank.dat,ios:in);if( !infile )cerr读取错误,无资料文件!m_nAccountNum; /账户数for( int n = 0; n accountInfo.nID;infileaccountInfo.sPasswd;infileaccountInfo.sName;infileaccountInfo.sIDNumber;infileaccountInfo.sCompany;infileaccountInfo.sTel;infileaccountInfo.sAddr;infileaccountInfo.fMoney;CConsumer *acc = new CConsumer(accountInfo); accountn = acc; infile.close();cout读取资料成功!endl;/* * 转账 * param n 账户类数组下标. */void CBank:Transfer(int n)int nID;string sName;coutnID; CinClear();int i = AccountIsExist(nID);if( i 0 ) coutendl帐号不存在!endl; cin.get();return ; coutsName; if ( sName != accounti-GetName() )CinClear();coutendl您输入的帐号与用户名不对应,操作取消!endl按回车键返回endl;return;float fTranMoney;coutfTranMoney;while( fTranMoney=0 )CinClear();cout请输入正确的金额(元)endl;cout;cinfTranMoney;if( accountn-GetMoney() fTranMoney ) coutendl对不起,金额不够!DecMoney(fTranMoney);accounti-AddMoney(fTranMoney);coutendl恭喜,您成功向帐号为GetID()用户名为GetName()的帐户转入fTranMoney(元)!endl按回车键返回endl;cin.get();return;/* * 显示主操作菜单 */void CBank:MenuShow()int cmd;dosystem(cls); cout*endl;cout* 银行账户管理系统V0.1 *endl;cout* *endl;cout* 1) 用户开户 *endl;cout* *endl;cout* 2) 账户登陆 *endl;cout* *endl;cout* 3) 帐户注销 *endl;cout* *endl;cout* 4) 查询账户 *endl;cout* *endl;cout* 5) 退出系统 *endl;cout* *endl;cout* 说明:请您输入相应的操作序号进行操作 *endl;cout* *endl;cout*endl;/从文件读取账户信息,并写入account中LoadAccount();GetTime();cout;cincmd; while( cmd 6 ) CinClear();cout请输入正确的操作序号!endl;cout;cincmd;CinClear(); switch(cmd)case 1: /用户开户SetAccount(); break;case 2: /账户登陆LoginAccount(); break;case 3: /帐户注销DelAccount();break;case 4: /查询账户QueryAccount();break;case 5: /退出系统ExitBank();break;case 6:GetTime();break; cin.get();while(true);/* 检测账户是否存在* param nID 账户ID* return 存在返回account数组下标,不存在返回-1*/int CBank:AccountIsExist(int nID)bool bflag = false; int i = 0; while( i GetID() bflag = true; /账户存在else i+; if ( bflag )return i;elsereturn -1;/* * 账户登陆 */void CBank:LoginAccount()int nID; coutnID; CinClear();int i = AccountIsExist(nID);if( i 0 ) coutendl帐号不存在,按回车键继续!endl; return ; coutpasswd;if( passwd!=accounti-GetPasswd() ) coutendl密码错误,按回车键继续!DisplayInfo();cin.get();int cmd;dosystem(cls); cout*endl;cout* 银行账户管理系统-用户菜单 *endl;cout* *endl;cout* 1) 账户信息 *endl;cout* *endl;cout* 2) 取款 *endl;cout* *endl;cout* 3) 存款 *endl;cout* *endl;cout* 4) 转账 *endl;cout* *endl;cout* 5) 修改密码 *endl;cout* *endl;cout* 6) 返回主菜单 *endl;cout* *endl;cout* 说明:请您输入相应的操作序号进行操作 *endl;cout* *endl;cout*endl;coutendl;cincmd;switch(cmd)case 1: /账户信息accounti-DisplayInfo();break;case 2: /取款accounti-FetchMoney();SaveAccount();break;case 3: /存款accounti-SaveMoney();SaveAccount();break;case 4: /转账Transfer(i);SaveAccount();break;case 5: /修改密码accounti-ChangePasswd();SaveAccount();break;case 6: /返回主菜单return;CinClear();while(true);/* * 18位身份证最后一位校验码计算 * param pszSrc 身份证号码 */char CBank:DoVerify(const char* pszSrc) int iS = 0; int iW=7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2; static char szVerCode=10X98765432; int i; for(i=0;i17;i+) iS += (int)(pszSrci-0) * iWi; int iY = iS%11; return szVerCodeiY;/* * 判断身份证合法性 * param sIdNumber 身份证号码 */bool CBank:IsIDNumber(string sIdNumber)int l = sIdNumber.length();if ( l != 18 & l != 15)coutendl身份证长度不合法,请重新输入!endl;return false;else if( l = 18 )char x=DoVerify(sIdNumber.c_str();if (sIdNumberl-1 != x)coutendl错误的身份证号码,请重新输入! 16 | l 7 )coutendl电话号码长度不合法,请重新输入!endl;return false; for(int i=0; il; i+)int isnum=isdigit(sTeli);if( isnum=0 )coutendl电话号码包含非法字符串,请重新输入!endl;return false; return true;/* * 账户开户 */void CBank:SetAccount()char ch;coutendl是否确定开户:(Y/N) endl;cout;cinch;while( ch!=n & ch!=N & ch!=Y & ch!=y)cout;cinch;if( ch=y | ch=Y )AccountInfos accountInfo;memset(&accountInfo, 0 ,sizeof(AccountInfos);coutendlaccountInfo.nID) CinClear();coutendl开户号只能为整数,请重新输入!endl; coutendl= 0 )CinClear();coutendl账户已存在,请重新输入!endl; coutendlaccountInfo.nID;coutendlaccountInfo.sPasswd;coutendlaccountInfo.sName;do CinClear();coutendlaccountInfo.sIDNumber; while( !IsIDNumber(accountInfo.sIDNumber);coutendlaccountInfo.sCompany;do CinClear();coutendlaccountInfo.sTel; while( !IsTelPhone(accountInfo.sTel);coutendlaccountInfo.sAddr;coutendlaccountInfo.fMoney) coutendl存入金额只能为数字,请重新输入!; coutendl请输入存入金额(元):;CinClear(); while( accountInfo.fMoney = 0 )cout存入金额不能小于0,请输入正确的存入金额!endl;cinaccountInfo.fMoney;CConsumer * acc = new CConsumer( accountInfo ); accountm_nAccountNum = acc; coutendl恭喜,开户成功!endl; m_nAccountNum+;SaveAccount();cin.get();return;return;/* * 账户注销 */void CBank:DelAccount() int nID; coutendlnID;int i = AccountIsExist(nID);if( i 0 ) CinClear();coutendl帐号不存在,按回车键继续!endl; return ; coutpasswd;if( passwd!=accounti-GetPasswd() ) coutendl密码错误,按回车键继续!endl; return ;for(int n=i; n m_nAccountNum; n+) accountn = accountn+1; accountm_nAccountNum-1 = NULL; m_nAccountNum-; coutendl注销成功,按回车键继续!endl; SaveAccount();cin.get();return; /* * 查询账户 */void CBank:QueryAccount()int cmd;int nID;string sName;system(cls);cout1:按帐号查询endl;cout2:按用户名查询endl;cout3:返回主菜单endl;docout请您输入相应的操作序号:;cout;cincmd;while( cmd 3 ) CinClear();cout请输入正确的操作序号:;cout;cincmd;switch (cmd)case 1:coutnID; CinClear();int i = AccountIsExist(nID);if( i 0 ) cout帐号不存在!endl; elseShowAccount(accounti); break;case 2:int n=0;coutsName; CinClear();for ( int i=0; i GetName() = sName)ShowAccount(accounti);n+;if ( n = 0)coutendl用户名为sName的账户不存在!endlendl; elsecout查询到用户名为sName的账户n个!endlendl; break;case 3:return;break;while( cmd != 3 );/* * 显示查询用户的信息 * param *pConsumer 要显示的账户类 */void CBank:ShowAccount(CConsumer *pConsumer)cout*endl;cout* 帐号:GetID()endl;cout* 余额: GetMoney()(元)endl;cout*-endl;cout* 用户姓名:GetName()endl;cout* 身份证号:GetIDNumber()endl;cout* 工作单位:GetCompany()endl;cout* 电话:GetTel()endl;cout* 地址:GetAddr()endl;cout*endltm_year+1900;int month=T-tm_mon+1;int day=T-tm_mday;int hour=T-tm_hour+8;int min=T-tm_min;int sec=T-tm_sec;coutyear年month月day日 hour:min:secendl;/* * 退出系统 */void CBank:ExitBank()coutendl感谢您使用银行账户管理系统,欢迎下次光临!endl;exit(0);/#代码分页#/ Consumer.h/* * 账户类 * 对账户信息的存储和功能操作. * 例如取款、存款、转账、密码变更等。 */class CConsumer public:CConsumer();CConsumer( AccountInfos AccountInfo );/构造函数初始化virtual CConsumer();public:/* 获取账户ID */ int GetID()return m_AccountInfo.nID;/* 获取账户密码 */string GetPasswd()return m_AccountInfo.sPasswd;/* 获取用户姓名 */string GetName()return m_AccountInfo.sName; /* 获取身份证号 */string GetIDNumber()return m_AccountInfo.sIDNumber; /* 获取单位 */string GetCompany()return m_AccountInfo.sCompany;/* 获取电话号码 */string GetTel()return m_AccountInfo.sTel;/* 获取地址 */string GetAddr()return m_AccountInfo.sAddr; /* 获取存款 */ float GetMoney()return m_AccountInfo.fMoney; void SaveMoney();/存款 void FetchMoney(); /取款void DisplayInfo(); /显示账户信息 void ChangePasswd(); /密码变更 void AddMoney(float fMoney); /增加存款 void DecMoney(float fMoney); /减少存款private:AccountInfos m_AccountInfo; /账户信息结构体;/#代码分页#/ Consumer.cpp#include stdafx.h#include Consumer.hCConsumer:CConsumer()memset(&m_AccountInfo, 0, sizeof(AccountInfos); CConsumer:CConsumer(AccountInfos AccountInfo)/账户信息结构体复制m_AccountInfo = AccountInfo;CConsumer:CConsumer()/* * 显示账户信息 */void CConsumer:DisplayInfo()/执行清屏命令system(cls); cout*en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论