




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江西理工大学软件学院面向对象技术课程设计报告20122013学年第二学期课程名称 面向对象技术 设计题目 个人银行账户管理系统 专业班级 12软件机电1班 姓 名 学 号 指导教师 2013年 7 月 5 日江西理工大学软件学院课程设计报告 目 录第一章 系统分析11.1问题描述11.2用户界面要求11.3 实验环境1第二章 系统设计22.1程序各功能实现的说明22.2 面向对象设计22.2.1 主要类的设计22.2.2 主要类的说明42.3 系统总体框架62.4 系统相关页面介绍62.4.1 登录页面62.4.2 主界面页面62.4.3 储蓄卡开户页面62.4.4 存款页面62.4.5 取款页面7第四章 系统实现84.1 源代码分析84.2运行结果194.2.1帐户创建194.2.2帐户查询204.2.3存款204.2.4取款21第四章 课程设计总结22参考文献23第一章 系统分析1.1问题描述设计开发一个银行账户管理系统,账户的信息有账号(唯一),姓名,余额,身份证号码,联系方式等,模拟银行卡的一系列基本功能,包括注册开户、销户退出、存款、取款、转账、查询余额、修改密码、个人信息、退出系统等,保存为文件。要求人机界面设计友好,用户使用方便,在用户输入有误时能给出相关的出错提示,并能承受一定的错误信息。要求具有一定的安全机制,如用户在一定的时间范围内对系统未予以响应,或者用户多次输入错误的登录信息时,系统会自动给用户发出提示性信息,以便用户处理解决问题。1.2用户界面要求输入:程序正常运行后,屏幕上显示一个文字菜单(根据序号选定相应的操作项目)当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据;输出:应用程序正常运行后,要在屏幕上显示一个文字菜单;要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容,格式及结束方式等。1.3 实验环境硬件要求能运行Windows 操作系统的微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。第二章 系统设计2.1程序各功能实现的说明(1)定义一个账户类对象,实现对一个账户信息的说明功能。(2)定义账户类成员函数注册开户函数,实现注册开户功能。提供开户界面,由用户输入新账号的所有信息,并保存到文件中。(3)定义账户类成员函数用户登录函数,实现用户登录功能。输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。若卡号存在和密码不匹配或该卡号没有注册,提示该卡号已存在且密码输入错误或该卡号没有注册。(4)定义账户类成员函数存款函数,实现存款功能。选择存款功能操作进入存款界面,并提供数据输入界面,等待用户的输入存款金额。从后台数据中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据,同时将存钱的金额显示在页面上。(5)定义账户类成员函数取款函数,实现取款功能。选择取款功能操作进入取款界面,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写入文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。(6)定义账户类成员函数余额查询函数,实现余额查询功能。选择余额查询功能操作进入余额查询界面,把该卡上的余额显示到界面中。(7)定义账户类成员函数修改密码函数,实现修改密码功能。(8)定义账户类成员函数注销退出函数,实现销户退出功能。注销该登录账号返回系统主页面。(9)定义账户类成员函数首页函数,设计系统首页界面。主要导航栏有:欢迎使用储蓄卡管理(注册开户、用户登录、退出系统)。(10)定义账户类成员函数菜单函数,设计系统菜单界面。2.2 面向对象设计2.2.1 主要类的设计 Date-year : int-month : int-day : int-totalDays : int+Date(year : int, month : int, day : int) +getYear() : int+getMonth() : int+getDay() : int + getMaxDay() : int + isLeapYear() : bool + show() + operator - (date : Date) : intAccumulator-lastDate : Date-value : double-sum : double+Accumulator(date : Date, value : double) +getSum(date : Date) : double+change(date : Date, value : double)+reset(date : Date, value : double)SavingsAccount-acc : Accumulator-rate : double+SavingsAccount(date : Date, id : int, rate : double) +getRate() : double+deposit(date : Date, amount : double, desc : string)+withdraw(date : Date, amount : double, desc : string)+settle(date : Date)Account-id : string-balance : double-total : double#Account(date : Date, id : int)#record(date: Date, amount : double, desc : string)#error(msg:string)+getId() : int +getBalance() : double + deposit(date : Date, amount : double, desc : string) + withdraw(date : Date, amount : double, desc : string) + settle(date : Date) + show()+getTotal() : doubleCreditAccount-acc : Accumulator-credit : double-rate : double-fee : double -getDebt() : double+CreditAccount(date : Date, id : int, credit : double, rate : double, fee : double) +getCredit() : double +getRate() : double +getFee() : double +getAvailableCredit() : double+deposit(date : Date, amount : double, desc : string)+withdraw(date : Date, amount : double, desc : string)+settle(date : Date)+show() 图2.1 个人银行账户管理程序的类图2.2.2 主要类的说明表2.1 Account类的说明名称类别说明id数据成员账号balance数据成员账户余额total数据成员账户总金额Account()成员函数构造函数record()成员函数显示操作记录error()成员函数输出错误信息getId()成员函数访问idgetBalance()成员函数访问balancedeposit()成员函数存款withdraw()成员函数取款settle()成员函数结算利息show()成员函数输出账户信息getTotal()成员函数访问total表2.2 SavingsAccount类的说明名称类别说明acc数据成员Accumulator类子对象rate数据成员年利率SavingsAccount()成员函数构造函数getRate()成员函数访问ratedeposit()成员函数存款withdraw()成员函数取款settle()成员函数结算利息表2.3 CreditAccount类的说明名称类别说明acc数据成员Accumulator类子对象credit数据成员信用额度rate数据成员日利率fee数据成员年费CreditAccount()成员函数构造函数getCredit()成员函数访问CreditgetRate()成员函数访问rategetFee()成员函数访问FeegetAvailableCredit()成员函数计算可用信用额度deposit()成员函数存款withdraw()成员函数取款settle()成员函数结算利息show()成员函数输出账户信息表2.4 Accumulator类的说明名称类别说明lastdate数据成员累加数值的上次变更日期value数据成员被累加数值的当前值sum数据成员到上次变更被累加数值为止的按日累加总和Accumulator()成员函数构造函数getSum()成员函数计算到指定日期的累加结果change()成员函数在指定日期更改数值reset ()成员函数将累加器清零并重新设定初始日期和数值表2.5 Date类的说明名称类别说明year数据成员年month数据成员月day数据成员日totalday数据成员距基准日期的相对日期Date()成员函数构造函数getYear()成员函数访问yeargetMonth()成员函数访问monthgetDay()成员函数访问daygetMaxDay()成员函数获取当前月的天数isLeapYear()成员函数判断当前年是否为闰年show()成员函数将当前日期输出operator - ()成员函数判断当前日期与指定日期相差天数2.3 系统总体框架个人银行账户管理系统存钱页面取款页面余额页面修改密码注销页面登录界面注册开户主界页面注销退出图2.2 个人银行账户管理系统总体设计图2.4 系统相关页面介绍 2.4.1 登录页面输入卡号和密码,根据用户输入的卡号和密码,到后台文件查询,若正确则登录成功,并保存卡好信息已备后用。若卡号存在和密码不匹配或无该卡号已经注销,提示该卡号已存在或已注销,保持界面三次不变等待用户的重新输入。2.4.2 主界面页面主要导航栏有:欢迎使用储蓄卡管理(存款、取款、修改密码、转账功能、注销退出)2.4.3 储蓄卡开户页面提供开户界面,由用户输入新储蓄卡的所有信息,将该信息保存到文件中,并将开户金额作为该卡的第一次存款记录存人文件。2.4.4 存款页面从登录界面得到卡号,并提供数据输入界面,等待用户的输入存款金额。从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时将存钱的金额显示在页面上。2.4.5 取款页面从登录界面得到卡号,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上。第三章 系统实现3.1 源代码分析/main.cpp#include account.h#include using namespace std;int main()cout -个人银行账户管理系统!- endl;Date date(2011,6,1); /起始日期 /初始账户SavingsAccount sa1(date,S20130601,0.015,123);SavingsAccount sa2(date,S20130602,0.015,456);CreditAccount ca(date,C20130601,10000,0.0005,50,789);Account *accounts=&sa1,&sa2,&ca;const int n=sizeof(accounts)/sizeof(Account*);cout(d)存款 endl;cout(w) 取款endl;cout(s) 显示各账户信息 endl;cout(c)改变日期 endl;cout(n) 进入下个月 endl;cout(e)退出 endl;char cmd;do /显示日期和总金额coutendl;date.show();coutt账户总金额Account:getTotal()endl;coutendl;coutcmd;switch(cmd)cased: /存入现金coutindex;if(index=0|index=1|index=2)coutamount;accountsindex-deposit(date,amount,desc);elsecout账户号错误!;break;casew: /取出现金 coutindex;coutpwd;pass=accountsindex-getPassword();if(pare(pwd)=0)cout密码正确!endl; coutamount; accountsindex-withdraw(date,amount,desc); elsecout您输入的密码错误!endl;break;cases: /查询各账户信息for( i=0;in;i+)coutishow();coutendl;break;casec: /改变日期coutday;coutendl;if(daydate.getDay()coutdate.getMaxDay()coutInvalid day;elsedate=Date(date.getYear(),date.getMonth(),day);break;casen: /进入下个月if(date.getMonth()=12)date=Date(date.getYear()+1,1,1);elsedate=Date(date.getYear(),date.getMonth()+1,1);for(int k=0;ksettle(date);break;while(cmd!=e); return 0;/account.cpp#include account.h#include #include using namespace std;double Account:total=0;/Account类的实现Account:Account(const Date &date,const string &id,const string &pwd):id(id),balance(0),password(pwd)date.show();coutt#id createdendl;void Account:record(const Date &date,double amount,const string &desc)amount=floor(amount*100+0.5)/100; /保留小数点后两位balance+=amount;total+=amount;date.show();coutt#idtamounttbalancetdescendl;void Account:show() const coutidtBalance:balance;void Account:error(const string &msg)constcoutError(#id):msggetBalance()error(not enough money);else record(date,-amount,desc);acc.change(date,getBalance(); void SavingsAccount:settle(const Date &date)if(date.getMonth()=1)double interest=acc.getSum(date)*rate/(date-Date(date.getYear()-1,1,1); /计算年息if(interest!=0)record(date,interest,interest);acc.reset(date,getBalance();/CreditAccount类相关成员函数的实现CreditAccount:CreditAccount(const Date &date,const string &id,double credit,double rate,double fee,const std:string &password):Account(date,id,password),credit(credit),rate(rate),fee(fee),acc(date,0)void CreditAccount:deposit(const Date &date,double amount,const string &desc) record(date,amount,desc); acc.change(date,getBalance(); void CreditAccount:withdraw(const Date &date,double amount,const string &desc)if(amount-getBalance()credit)error(not enough money);else record(date,-amount,desc);acc.change(date,getDebt(); void CreditAccount:settle(const Date &date)double interest=acc.getSum(date)*rate;if(interest!=0)record(date,interest,interest);if(date.getMonth()=1)record(date,-fee,annual fee);acc.reset(date,getDebt();void CreditAccount:show() constAccount:show();couttAvailable credit:getAvailableCredit();/date.cpp#include date.h#include #include using namespace std;/namespace使下面的定义只在当前文件中有效namespace /存储平年中的某个月1日之前有多少天,为便于getMaxDay函数的实现,该数组多出一项const int DAYS_BEFORE_MONTH=0,31,59,90,120,151,181,212,243,273,304,334,365; Date:Date(int year,int month,int day):year(year),month(month),day(day)if(daygetMaxDay()coutInvalid date:;show();cout2) totalDays+; /DATE:DATEint Date:getMaxDay() constif(isLeapYear() & month=2)return 29;elsereturn DAYS_BEFORE_MONTHmonth-DAYS_BEFORE_MONTHmonth-1;void Date:show() constcoutgetYear()-getMonth()-getDay();/account.h#ifndef _ACCOUNT_H_#define _ACCOUNT_H_#include date.h#include accumulator.h#include using namespace std;class Account /账户类private:std:string id; /账号 std:string password;double balance; /余额static double total; /所有账户的总金额protected:/供派生类调用的构造函数,id为账户Account(const Date &date,const std:string &id,const std:string &pwd);/记录一笔账,data为日期,amount为金额,desc为说明void record(const Date &date,double amount,const std:string &desc);/报告错误信息void error(const std:string &msg) const;public:const std:string &getId() const return id;const std:string getPassword() return password;double getBalance() const return balance;static double getTotal()return total;/存入现金,date为日期,amount为金额,desc为款项说明virtual void deposit(const Date &date,double amount,const std:string &desc)=0;/取出现金,date为日期,amount为金额,desc为款项说明virtual void withdraw(const Date &date,double amount,const std:string &desc)=0;/结算(计算利息、年费等),每月结算一次,date为结算日期virtual void settle(const Date &date)=0;/显示账户信息virtual void show() const;class SavingsAccount:public Accountprivate:Accumulator acc;double rate;public:/构造函数SavingsAccount(const Date &date,const std:string &id,double rate,const std:string &passwod);double getRate() const return rate;/存入现金void deposit(const Date &date,double amount,const std:string &desc);/取出现金void withdraw(const Date &date,double amount,const std:string &desc);/结算利息,每年1月1日调用一次该函数void settle(const Date &date);class CreditAccount:public Account /信用账户类private:Accumulator acc; /辅助计算利息的累加器double credit; /信用额度double rate; /欠款的日利率double fee; /信用卡年费double getDebt()const /获得欠款额double balance=getBalance();return(balance0?balance:0);public:/构造函数CreditAccount(const Date &date,const std:string &id,double credit,double rate,double fee,const std:string &passwod);double getCredit() const return credit;double getRate() const return rate;double getFee() const return fee;double getAvailableCredit() const /获得可用信用额度if(getBalance()value=value;/初始化,将日期变为date,数值变为value,累加器清零void reset(const Date &date,double value)lastDate=date;this-value=value;sum=0;#endif/date.h#ifndef _DATE_H_#define _DATE_H_class Date /日期类private:int year; /年int month; /月int day; /日int totalDays; /该日期是从公元元年1月1日开始的第几天public:Date(int year,int month,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年乡村手工艺合作社法务岗位面试要点及模拟题解析
- 2025年中国电力建设集团招聘考试题库
- 2025年农村金融专业招聘考试模拟题集萃
- 抹灰工人安全培训内容课件
- 2025年临床医疗管理信息系统项目发展计划
- 2025年医用气体系统项目发展计划
- 福建省福州市2025-2026学年高三第一次质量检测数学试卷(含答案)
- 抗焦虑抑郁药物分类课件
- 2025年1月吕梁市贺昌中学第一学期高一期末学业水平测试必修一人教版2019
- 2024-2025学年广西柳州市三江侗族自治县人教版三年级下册期末考试数学试卷(含答案)
- 2025年中国物流集团国际物流事业部招聘面试经验及模拟题集
- 乡镇安全培训课件
- 2025四川省公安厅招聘辅警(448人)笔试参考题库附答案解析
- 中望CAD机械版使用手册
- 定额〔2025〕1号文-关于发布2018版电力建设工程概预算定额2024年度价格水平调整的通知
- 2024年9月28日安徽省地市级遴选笔试真题及解析
- 五运六气方剂
- 精益生产之自働化培训课件
- 施工现场岗位安全风险告知卡
- 腰椎穿刺术3PPT优秀课件
- 广州市小升初语文分析PPT学习教案
评论
0/150
提交评论