银行定期存储管理系统c++课程设计报告.docx

上传人:b****6 文档编号:6227901 上传时间:2023-01-04 格式:DOCX 页数:11 大小:127.69KB
下载 相关 举报
银行定期存储管理系统c++课程设计报告.docx_第1页
第1页 / 共11页
银行定期存储管理系统c++课程设计报告.docx_第2页
第2页 / 共11页
银行定期存储管理系统c++课程设计报告.docx_第3页
第3页 / 共11页
银行定期存储管理系统c++课程设计报告.docx_第4页
第4页 / 共11页
银行定期存储管理系统c++课程设计报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

银行定期存储管理系统c++课程设计报告.docx

《银行定期存储管理系统c++课程设计报告.docx》由会员分享,可在线阅读,更多相关《银行定期存储管理系统c++课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。

银行定期存储管理系统c++课程设计报告.docx

银行定期存储管理系统c++课程设计报告

课程设计报告

课程名称:

面向对象程序设计C++

设计题目:

银行定期存储管理系统

专业:

计算机科学与技术

姓名:

张洋

学号:

20130516189

指导教师:

李晓虹

 

2015年1月10日

 

1、系统需求分析

我编写的是银行定期存储管理系统。

用户资料的组成部分为:

开户时间、姓名、性别、身份证号、家庭住址、卡号、密码等。

此管理系统主要利用类和文件实现,完成的功能主要有如下八大功能模块组成。

1.1登陆

该模块主要通过保存用户键盘输入的账号,查找用户.txt文件来确定是否存在改账户。

确定账户存在后,打开用户资料文件夹下对应的文件,来读取密码,确定密码是否正确。

当全部核对正确后则登陆。

1.2开户

该模块通过在屏幕上的文字提示,提醒客户来输入信息,然后把用户输入的信息记录下来,写入用户资料文件夹里的.txt文件,把系统随机生成的卡号作为该文件名。

并把卡号写入用户.txt文件。

然后创建近期明细和用户信息文档。

并且在申请开户.txt文件内写入卡号,提交内部系统来处理。

1.3查询

该模块完成用户查看用户信息、用户资料、近期明细三个文件的查询。

此模块比较简单,通过文件逐行读入,然后输出到屏幕上。

值得注意的是,这里由于不同函数参数类型的需要,我们使用了多次类型转换。

并且,由于用户资料里有用户密码,所以我们通过strstr函数找到密码字段,然后循环continue,不把密码输出到屏幕。

1.4转账

该模块比较复杂,大体设计是用户1输入要转到用户2的卡号、金额,若余额不足则转账失败,若余额充足,我们则修改用户信息里余额这一字段的数额。

关于修改这里,我们通过getline函数把文件逐行读入,通过strstr来查找字符串“余额:

”所在的位置,然后修改后面的金额。

要注意的是,用户资料文件里有包含时间,所以不能把时间修改了,要把时间这一行的字符串跳过。

接下来就是修改近期明细文件,这一方面比较简单,把卡号,金额写入文件里即可。

1.5销户

这里是要用户确认是否销户,若确定,我们则把该卡号写入申请销户.txt文件,提交内部系统来处理。

1.6计算利率

在用户登录并确认其身份后,调用计算利率函数,计算申请时间与当前时间的时间差,再根据利率和余额计算每天的利率,最后改变当前余额的值,修改用户信息里的相关值。

1.7内部处理开户申请

我们通过读入申请开户.txt文件,然后来让内部人员决定是否同意该用户开户。

若同意则不做任何处理,若不同意则通过dos命令删除该用户开户时创立的所有文件。

1.8内部处理销户申请

销户申请和开户申请类似,只不过是同意销户的时候用dos命令删除用户的所有文件,不同意不做任何处理。

2总体设计

2.1框架结构图

图2-1

2.2对各种类的定义以及类内的成员方法以及属性的定义

在该程序中一共有四个类classBank、classDate、classAccount、classAdministrator,四个类分别对应四种不同的功能。

对于Bank类而言,在Bank类中实现的整个程序中最重要的一部分,可以说是整个系统的主体,里边包括了账号account_ID、姓名name、性别sex、住址address、密码password、余额money、利率rate、创建时间builtYears、存储至哪一年totalYears等属性,每一个都是用string类型进行存储的,因为每个长短不同,具体实现的时候会进行格式转换。

还有包括了开户voidadd_Account(Bank*bank)、销户voiddelete_Account(Bank*bank,Administrator*admin)、查找voidinquiry_bank(Administrator*admin,Bank*bank)、显示信息voidshow_bank(Bank*bank)、存款voidsave_money(Administrator*admin,Bank*bank)、取款voiddraw_money(Administrator*admin,Bank*bank)、计算利率voidcomculat_Rate(Bank*bank,Administrator*admin)等方法,含括了基本上所有的账户操作,其中的开户和销户进行操作的时候会进行内部处理。

而且所有的文件都是存储到.txt的项目源文件夹下的,方便程序员查看每一步的操作。

其中在属性中有一个建立日期builtYears和存储至哪一年totalYears都是Date-类的对象。

Date类的定义以及其中的类的属性了成员方法的定义,Date类包含了年year、月month、日day、时h、分m、秒s等成员属性,因为这些属性都占用字节比较小,所以基本上都用的是int作为数据类型进行操作的,该类算是以Bank类为主题的辅助Bank类的一个辅助类,用于获取系统当前时间以及输入要存储的年份的时候使用其类的属性进行变量辅助。

其中的方法都是返回一个日期的相关量的,有一个计算年差的方法intdistance(constDate&date)const是为了辅助Bank类中计算利率的时候用的。

在用户类中,主要是为了用户登录使用的一个进入系统的用户类,可以说是一个周转站用于进行Bank类中的方法进行的入口类。

3、详细设计

在银行定期存储管理系统中,我负责的是系统时间的调用和开户模块。

3.1.系统时间的调用

(1)设计思路:

首先创建一个Date类,私有成员为日期的具体日

期,成员函数的作用是获取具体年、月、日、时、分、秒、星期几。

isLeapYear()函数是判断是否为闰年;Distance()函数是计算时间

差的函数,为当前日期减去公元一月一日的日期差。

time_tcurtime=time(0);tmtim=*localtime(&curtime);tm其实是一

个结构体,里面有时间的信息。

年月日时分秒,相关信息可以自行查看。

由于time_t类型的数据其实是一个unsigned的数字,不能区分出时分

时分秒年月日。

Localtime这个函数就是将time_t的数据转换成tm这

样的结构体,这样做是为了更好地当前时间的年月日时分秒。

(2)相关代码:

#include"Bank.h"

#ifndef_DATE_H_

#define_DATE_H_

classDate{

friendclassBank;

private:

intyear;//年

intmonth;//月

intday;//日

inth;//时

intm;//分

ints;//秒

intdayOfWeek;//星期几

inttotalDays;//公元元年一月一日开始的第几天

public:

Date();

intgetMaxDay()const;//获得当月一共有多少天

intgetYear()const{returnyear;}

intgetMonth()const{returnmonth;}

intgetDay()const{returnday;}

intgetS()const{returns;}

intgetM()const{returnm;}

intgetH()const{returnh;}

intgetDOW()const{returndayOfWeek;}

//判断是否为闰年

boolisLeapYear()const{

returnyear%4==0&&year%100!

=0||year%400==0;

}

//计算日期差

intdistance(constDate&date)const{

returntotalDays-date.totalDays;

}

voidshow()const;

};

#endif

#include"Date.h"

#include

#include

usingnamespacestd;

//intDate:

:

totalDays=0;//总天数设定为0

//获取系统的日期时间

namespace{

//存储木平年的某个月1日之前有多少天

constintDAYS_BEFORE_MONTH[]={0,31,59,90,120,151,181,212,243,27

3,304,334,365};

}

Date:

:

Date(){

time_tcurtime=time(0);

tmtim=*localtime(&curtime);

day=tim.tm_mday;

month=tim.tm_mon+1;

year=tim.tm_year+1900;

h=tim.tm_hour;

m=tim.tm_min;

s=tim.tm_sec;

dayOfWeek=tim.tm_wday;

intyears=year-1;

totalDays=years*365+years/4-years/100+years/400+DAYS_BEFORE_MO

NTH[month-1]+day;

if(isLeapYear()&&month>2){

totalDays++;

}

}

voidDate:

:

show()const{

cout<

"<

}

3.2开户模块

(1)设计思路:

该模块通过在屏幕上的文字提示,提醒客户来输入信息,然后

把用户输入的信息记录下来,写入用户资料文件夹里的.txt文件,把系统

随机生成的卡号作为该文件名。

并把卡号写入用户.txt文件。

然后创建近

期明细和用户信息文档。

并且在申请开户.txt文件内写入卡号,提交内部

系统来处理。

开户成功系统会自动输出“1305104+随机4位”的银行卡号,

银行卡号以及用户信息都会写入用户资料文档中。

(2)相关代码:

//新建用户

voidBank:

:

add_Account(Bank*bank){

system("cls");//清屏函数

stringpassword_copy;

cout<<"\t\t-------------请输入个人信息:

------------"<

cout<<"请输入姓名:

";

cin>>bank->name;

cout<<"请输入性别:

";

cin>>bank->sex;

cout<<"请输入身份证号:

";

cin>>bank->ID;

cout<<"请输入您的住址:

";

cin>>bank->address;

cout<<"请输入密码:

";

cin>>bank->password;

while((bank->password.length()!

=6)){

cout<<"请输入密码:

";

cin>>bank->password;

}

cout<<"请再次输入密码:

";

cin>>password_copy;

if(bank->password!

=password_copy){

while(bank->password!

=password_copy){

cout<<"前后密码不一致,请重新输入:

";

cin>>password_copy;

}

}

srand(time(0));//设置随机数种子

longnum_=((rand()%9000+1000));//随机后四位的账号

charnum[5];

itoa(num_,num,10);//数字转换字符数组

stringstr=num;//字符数组转换字符串

bank->account_ID="1305104";

bank->account_ID.append(num);//最后几位存入到卡号中

cout<<"用户创建成功!

"<

for(inti=0;i<10;i++){

cout<<"|||";

_sleep(0.5*1000);//每次延迟0.5秒

}

相关函数解释:

srand(time(0));就是给这个算法一个启动种子,也就是算法的随机种子数,有这个数以后才可以产生随机数。

itoa()函数有3个参数:

第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数,代码中是将数字转换为字符数组。

std:

:

stringstreamsfile;

sfile<<"用户资料\\";

sfile<account_ID;

sfile<<".txt";

std:

:

stringstrfile=sfile.str();

//创建用户的资料文档,写入相关数据

std:

:

stringstreamsfile_1;//创建字符串输出流

sfile_1<<"用户信息\\";

sfile_1<account_ID;

sfile_1<<".txt";

std:

:

stringstrfile_1=sfile_1.str();//返回输出流生成的字符串

ofstreamf_2in(strfile_1.c_str());

//创建近期明细文档

std:

:

stringstreamsfile_2;//创建字符串输出流

sfile_2<<"近期明细\\";

sfile_2<account_ID;

sfile_2<<".txt";

std:

:

stringstrfile_2=sfile_2.str();//返回输出流生成的字符串

ofstreamf_3in(strfile_2.c_str());

f_3in.close();

//将银行卡账号写入总文档中

ofstreamfin;

fin.open("用户.txt",ios_base:

:

app);//打开文档并输入到末尾

fin<account_ID<

fin.close();

以上代码是用C++流的输入输出来创建用户资料,用户信息,近期明细3个文件夹。

用户资料用来存储姓名,性别,身份证号,住址,密码这些个人信息。

用户信息和近期明细两个文件的创建方法与用户资料是一样的。

用户信息用来存储银行卡余额及存入时间。

近期明细存储用户近期银行卡收入支出情况。

std:

:

stringstreamsfile;是创建字符串输出流的一个对象sfile,将3个类型不同的字符串合并,返回输出流生成的字符串。

然后生成.TXT文档,3个文档的创建方法相同。

4、系统调试

4.1问题一:

如何读取当前的系统时间?

解决方法:

查找资料找到time_tcurtime=time(0);相关代码并解决。

问题二:

一些函数的参数类型不同,如何统一?

解决方法:

强制类型转换,例如学会了itoa函数的使用方法。

问题三:

如何使用C++流的输入输出来读取文件,保存数据?

解决方法:

std:

:

stringstreamsfile;创建字符串输出流,把3个不同的

字符串合并一起,最后返回输出流生成的字符串。

便可创建一个.txt文档,

用来保存用户个人信息。

4.2屏幕截图

图4-2-1

图4-2-2

图4-2-3

5、结果分析

该课程设计的目的采用面向对象的程序设计语言,开发实现一个应用程序,学生更好的掌握面向对象程序设计语言及其开发工具,掌握如何使用面向对象的程序设计语言设计一个小的软件系统。

通过该课程设计培养学生分析和解决实际问题的能力,培养学生综合应用基本概念,基本原理,和技术方法的能力,真正做到学以致用,使课本上抽象的理论,方法与具体的实践应用相结合。

6、结论与体会

这次的课程设计实验是对我们C++语言学习成果的一次大考验。

自己动手,发现问题和解决问题。

并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。

但是,我相信在今后的学习中,一定能把它解决好。

整理后进行综合应用,最后对所需资料及要编的程序进行整理得出最后程序。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1