资源描述
辽 宁 工 业 大 学
《C++语言程序设计》课程设计(论文)
题目: 个人银行管理系统
院(系):
专业班级:
学 号:
学生姓名:
指导教师:
教师职称:
起止时间:2011.12。12-2011。12.25
课程设计(论文)任务及评语
院(系): 教研室:软件教研室
学 号
学生姓名
专业班级
课程设计(论文)题目
个人银行管理系统
课程设计(论文)任务
程序设计的任务与要求:
(1). 掌握面向对象程序设计语言C++的基本语法
(2). 掌握C++面向对象设计的思想
(3). 掌握VC++6。0与DEV C++ 开发工具的使用
(4)。 运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告.
指导教师评语及成绩
成绩: 指导教师签字:
年 月 日
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
目 录
第1章 课程设计目的与要求 1
1。1 设计目的 1
1.2实验环境 1
1。3预备知识 1
1。4设计要求 1
第2章 课程设计内容 2
2.1 课题描述 2
2。2 系统设计 2
2。2。1功能分析 2
2。2。2面向对象设计 2
2.2.2类成员描述 2
2.3程序实现 2
2.3。1源码分析 2
2。3。2运行结果 2
第3章 课程设计总结 3
参考文献 4
第1章 课程设计目的与要求
1。1 设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度.
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力.
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力.
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1。2实验环境
硬件要求能运行Windows 操作系统的微机系统.C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件.
1.3预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4设计要求
1。仔细分析设计题目,画出程序流程图,编写程序源代码。
2。积极上机调试源程序,增强编程技巧与调程能力。
3。认真书写课程设计预习报告,课程设计说明书.
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章 课程设计内容
2.1 课题描述
熟悉C++工程开发的过程、头文件和源文件之间的关系,掌握类、继承及派生、虚函数、多态性在C++面向对象程序设计中的体现,掌握一个类的对象作为另外一个类的成员的实现方法。掌握子类对象与父类对象的关系,熟悉C++中流的使用,养成良好的编程习惯。在掌握C++面向对象程序设计方法的基础上,使用VC++6。0结合课本内容完成以下内容的实现:完成个人银行账户管理程序的编写、编译、调试、运行,完成基类Account、子类SavingsAccount及CreditAccount的声明及定义.实现Accumulator类及Date类。利用C++中流的概念实现账户信息的存储。在Account类中添加数据成员:Password,并对应编写该数据成员的get函数。在主函数中实现账户对象创建时从键盘输入构造函数需要的信息。在输出及需要用户输入的时候要给出相应的提示信息。
2.2 系统设计
2。2.1功能分析
个人银行账号管理模块:
1。主界面
主要导航栏有:个人银行账号管理系统,已存入三个账户的信息,有六个服务包括存款、取款、显示个账户信息、改变日期、进入下个月、退出。
2。显示个账户信息页面
显示您的账户序号、账号和收支平衡,在第二行显示日期和账户总额。
3。存款页面
显示请选择您的账户序号,输入账户序号之后,显示请输入您的存款金额,从后台数据库中找到该用户余额记录,修改余额,并将该存款事件的相应信息写人数据库,同时在下面显示您的存款日期、账号,存入的金额,总金额.
4取款页面
取款页面和存款页面提示的信息相似,提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的余额则不能取款,或者将新的余额写人文件,并将本次取款事件写入文件同时将取钱的金额显示在页面上.
2。2。2面向对象设计
Date
-year : int
-month : int
-day : int
-totalDays : int
+Date(year : int, month : int, day : int)
<<const>>
+getYear() : int
<<const>>
+getMonth() : int
<<const>>
+getDay() : int
<<const>> + getMaxDay() : int
<<const>> + isLeapYear() : bool
<<const>> + show()
<<const>> + operator - (date : Date) : int
Accumulator
-lastDate : Date
-value : double
-sum : double
+Accumulator(date : Date, value : double)
<<const>> +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)
<<const>>
+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)
<<const>>#error(msg:string)
<<const>>+getId() : int
<<const>> +getBalance() : double
<<abstract>> + deposit(date : Date, amount : double, desc : string)
<<abstract>> + withdraw(date : Date, amount : double, desc : string)
<<abstract>> + settle(date : Date)
<<virtual>> <<const>> + show()
<<static>>+getTotal() : double
CreditAccount
-acc : Accumulator
-credit : double
-rate : double
-fee : double
<<const>> -getDebt() : double
+CreditAccount(date : Date, id : int, credit : double, rate : double, fee : double)
<<const>> +getCredit() : double
<<const>> +getRate() : double
<<const>> +getFee() : double
<<const>> +getAvailableCredit() : double
+deposit(date : Date, amount : double, desc : string)
+withdraw(date : Date, amount : double, desc : string)
+settle(date : Date)
<<const>>+show()
2.2.2类成员描述
Start
cin>>count
I=1
I<=accountNum
Bank[i].account==count
I++
end
选择服务
存
款
取
款
显示个账户信息
改
变
日期
进入下月
个人银行账号管理系统
账户创建
账户查询
退出账户
账户序号
存款金额
2.3程序实现
2.3.1源码分析
#include ”account。h”
#include 〈iostream>
using namespace std;
int main(){
cout<〈" --—--——-个人银行账户管理系统!-—-——-— ”<〈endl;
Date date(2011,6,1); //起始日期
//初始账户
SavingsAccount sa1(date,"S3755271”,0。015,"123");
SavingsAccount sa2(date,”02342342",0.015,”456");
CreditAccount ca(date,”C5392394”,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{ //显示日期和总金额
cout〈〈endl;
date.show();
cout〈〈"\t账户总金额"<〈Account::getTotal()〈〈endl;
cout<<endl;
cout〈<"请选择服务:";
int index,day,i;
double amount;
string desc,pwd,pass;
cin>〉cmd;
switch(cmd){
case’d’: //存入现金
cout〈<"请选择您的账户序号(0/1/2):”;
cin>>index;
if(index==0||index==1||index==2){
cout〈<”请输入您的存款金额:”;
cin>〉amount;
accounts[index]->deposit(date,amount,desc);
}
else
cout<<”账户号错误!”;
break;
case'w’: //取出现金
cout<<"请选择您的账户序号(0/1/2):”;
cin〉>index;
cout〈〈"请输入您的密码:";
cin〉〉pwd;
pass=accounts[index]->getPassword();
if(pare(pwd)==0){
cout<〈”密码正确!”<〈endl; cout〈<"请输入您的取款金额:”;
cin>>amount; accounts[index]->withdraw(date,amount,desc);
} else
cout〈<"您输入的密码错误!”<<endl;
break;
case’s': //查询各账户信息
for( i=0;i<n;i++){
cout〈〈”["〈<i〈〈"]”;
accounts[i]—〉show();
cout〈〈endl;
}
break;
case’c’: //改变日期
cout<〈"输入要改的日期:”;
cin〉>day;
cout〈〈endl;
if(day〈date。getDay())
cout〈〈”You connot specify a previous day”;
else if(day〉date。getMaxDay())
cout<〈”Invalid day”;
else
date=Date(date。getYear(),date.getMonth(),day);
break;
case'n’: //进入下个月
if(date.getMonth()==12)
date=Date(date.getYear()+1,1,1);
else
date=Date(date.getYear(),date.getMonth()+1,1);
for(int k=0;k<n;k++)
accounts[k]-〉settle(date);
break;
}
}while(cmd!='e’);
return 0;
}
#include ”account.h”
#include <cmath〉
#include <iostream>
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();
cout<〈”\t#"<<id<〈" created”<〈endl;
}
void Account::record(const Date &date,double amount,const string &desc){
amount=floor(amount*100+0。5)/100; //保留小数点后两位
balance+=amount;
total+=amount;
date。show();
cout〈〈”\t#”〈<id<<”\t"〈<amount<<"\t”<〈balance<<"\t"〈〈desc〈〈endl;
}
void Account::show() const {cout〈<id〈<”\tBalance:"〈〈balance;}
void Account::error(const string &msg)const{
cout〈<”Error(#"〈〈id<<"):”<<msg〈〈endl;
}
//SavingsAccount类相关成员函数的实现
SavingsAccount::SavingsAccount(const Date &date,const std::string &id,double rate,const std::string &password)
:Account(date,id,password),rate(rate),acc(date,0){}
void SavingsAccount::deposit(const Date &date,double amount,const string &desc){
record(date,amount,desc);
acc。change(date,getBalance());
}
void SavingsAccount::withdraw(const Date &date,double amount,const string &desc){
if(amount〉getBalance()){
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() const{
Account::show();
cout<〈"\tAvailable credit:"<<getAvailableCredit();
}
#include "date.h"
#include 〈iostream〉
#include 〈cstdlib>
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(day〈=0||day〉getMaxDay()){
cout<<”Invalid date:";
show();
cout〈〈endl;
exit(1);
}
int years=year-1;
totalDays=years*365+years/4-years/100+years/400+DAYS_BEFORE_MONTH[month-1]+day;
if(isLeapYear() && month>2)
totalDays++;
} //DATE::DATE
int Date::getMaxDay() const{
if(isLeapYear() && month==2)
return 29;
else
return DAYS_BEFORE_MONTH[month]—DAYS_BEFORE_MONTH[month-1];
}
void Date::show() const{
cout<〈getYear()<<"-”<<getMonth()〈〈”—"<〈getDay();
}
#ifndef _ACCOUNT_H_
#define _ACCOUNT_H_
#include ”date。h"
#include "accumulator.h"
#include 〈string〉
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 Account{
private:
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(balance<0?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()〈0)
return credit+getBalance();
else
return credit;
}
//存入现金
void deposit(const Date &date,double amount,const std::string &desc);
void withdraw(const Date &date,double amount,const std::string &desc);
//结算利息和年费,每月1日调用一次该函数
void settle(const Date &date);
void show() const;
};
#endif//_ACCOUNT_H_
#ifndef _ACCUMULATOR_H_
#define _ACCUMULATOR_H_
#include ”date.h"
class Accumulator{ //将某个数值按日累加
private:
Date lastDate; //上次变更数值的日期
double value; //数值的当前值
double sum; //数值按日累加之和
public:
//构造函数,date为开始累加的日期,value为初始值
Accumulator(const Date &date,double value):lastDate(date),value(value),sum(0){}
//获得日期date的累加结果
double getSum(const Date &date)const{
return sum+value*(date-lastDate);
}
//在date将数值变更为value
void change(const Date &date,double value){
sum=getSum(date);
lastDate=date;this—>value=value;
}
//初始化,将日期变为date,数值变为value,累加器清零
void reset(const Date &date,double value){
lastDate=date;this-〉value=value;sum=0;
}
};
#endif
#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,int day); //用年、月、日构造日期
int getYear() const {return year;}
int getMonth() const {return month;}
int getDay() const {return day;}
int getMaxDay() const; //获得当月有多少天
bool isLeapYear() const { //判断当年是否为闰年
return year%4==0&&year%100!=0||year%400==0;
}
void show() const; //输入当前日期
int operator-(const Date &date) const{ //计算两个日期之间差多少天
return totalDays-date。totalDays;
}
};
#endif //_Date_H_
2.3。2运行结果
a. 帐户创建
b. 帐户查询
c. 存款
d. 取款
第3章 课程设计总结
此次C++课程设计,在指导教师的精心教导下,我学会了如何用C++编写一个简单的
程序。首先要对程序的设计要求有一个明确的认识,然后系统设计与功能分析,最后是代码设计与调试。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适合规模的程序;进一步加深对C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
通过两周的C++实训课程,我深切的体会到了编程的乐趣,在此次实训中,我也看到了许多自己的不足,不仅是知识上的,还有思考能力等方面都需要进一步提高.在编程过程中,思维是占主要的,所以不断的练习编程,是提高自己能力的有效途径。
在编写程序中,细节决定成败,我经常粗心的写错语句或是打错符号,然后就不能得到想要的结果,这是以后学习工作中应该注意的问题。当然,在此次实训中,我也遇到了一些麻烦,例如刚开始建立的三个账户不能放在一个数组中进行操作,但是通过查资料了解到可以用虚函数来处理。还有一些目前还存在的问题,如实现的功能不够完善,界面不够美观等,都有待以后进一步学习改善。
尽管大家很认真了,但仍有些不足之处,这也正暴露了我们学习中的诸多漏洞,在今后仍得继续努力,踏踏实实的学好基础知识。
参考文献
1。黄品梅 主编 《C++程序设计教程-化难为易地学习C++》 北京:机械工业出版社
2。王珊珊、张志航 编著 《C++程序设计教程》 北京:机械工业出版社
3。郑莉、董渊 编著 《C++语言程序设计》 北京:清华大学出版社
4。黄迪明 主编 《C++语言程序设计基础》 北京:电子工业出版社
5.钱能 主编 《C++程序设计教程》 北京:清华大学出版社
6.徐孝凯 编著 《C++语言程序设计》 北京:清华大学出版社
7。吴访升 编著 《C++程序设计》 北京: 机械工业出版社
8.Decoder 主编 《C/C++程序设计》 北京:中国铁道出版社
9.陈国建 编著 《C++语言从入门到精通》 北京:机械工业出版社
10。邬延辉、王小权 编著 《C++程序设计教程:基于案例》 北京:机械工业出版社
13
展开阅读全文