数据结构课程设计之银行储蓄管理.docx

上传人:b****8 文档编号:27761547 上传时间:2023-07-04 格式:DOCX 页数:28 大小:765.17KB
下载 相关 举报
数据结构课程设计之银行储蓄管理.docx_第1页
第1页 / 共28页
数据结构课程设计之银行储蓄管理.docx_第2页
第2页 / 共28页
数据结构课程设计之银行储蓄管理.docx_第3页
第3页 / 共28页
数据结构课程设计之银行储蓄管理.docx_第4页
第4页 / 共28页
数据结构课程设计之银行储蓄管理.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

数据结构课程设计之银行储蓄管理.docx

《数据结构课程设计之银行储蓄管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之银行储蓄管理.docx(28页珍藏版)》请在冰豆网上搜索。

数据结构课程设计之银行储蓄管理.docx

数据结构课程设计之银行储蓄管理

##大学

数据结构课程设计报告

题目:

活期储蓄账目管理

院(系):

计算机工程学院

学生姓名:

班级:

学号:

起迄日期:

2011.06.20-2011.06.27

指导教师:

指导教师评语:

成绩:

 

签名:

年月日

 

2010—2011年度第2学期

一、需求分析

1.问题描述:

活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:

1)能比较迅速地找到储户的账户,以实现存款、取款记账;2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

我做的系统包括以下模块:

开户模块:

要求能新建账户并且能够进一步对所建立的账户进行查询等操作。

查询模块:

能够通过账号查找,迅速的找到要查找的账户,并显示账户余额。

存取钱模块:

在迅速地查找到目的账户后,对账户余额进行修改。

销户模块:

查找到目的账户,对其销户。

2.基本功能

该系统具有以下四个部分的功能:

开户功能:

能够新建账户,并对其进行存储以备查询。

查询功能:

能够通过账号查找,迅速的找到要查找的账户,并显示账户余额。

存取钱功能:

在迅速地查找到目的账户后,对账户进行存钱取钱操作。

销户功能:

查找到目的账户,对其销户。

3.输入输出

账号值大小为long,密码、存款数额值的范围为int大小,姓名为字符串。

假定账号是从50000开始,否则输出提示错误并返回主菜单;

主菜单,输入从1-到5,依次实现开户、查询、存取钱、销户和退出功能,按其他数字键位返回主菜单。

开户的时候,账号是自动分配的,从50000开始,依次增加我这里暂定账户数上限为2000,然后需要输入用户姓名,再然后是账号密码和存储金额;对于用户姓名,是字符串类型,而账号和密码必须输入数字,开户金额10元起存,小于10元慧提示并允许重新输入开户金额。

查询的时候,首先需要输入要查询的账号,如果输入的账号小于默认起始账号,那么提示输入错误并返回主菜单;如果输入了大于默认账户的账号,那么密码核实不会通过,加入输入的密码错误,则会提示并返回主菜单。

存取钱,首先符合查询的输入要求,账号密码都正确时提示存款还是取款,此时要求存款输入s,取款输入t,否则提示错误并返回主菜单,然后输入存入或取出的金额,存款提示成功,取款如果账户余额不足,则会提示余额不足并返回主菜单。

销户的时候,也是需要首先满足查找的输入要求,然后提示确定销户吗,s是确定,c是取消,输入其他的就相当于输入了字符c,提示销户不成功并返回。

二、概要设计

1.设计思路:

每个账户是一个基本单位,可以看作是一个对象

每个储蓄账户由账号、户主名、密码和余额组成

能进行查找,能快速查找到所需要的账号,我选用的是哈希表。

查找到所需要的账号之后还能够进一步进行存取款操作,销户操作。

2.数据结构设计:

我采用的是哈希表,若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。

由此,不需比较便可直接取得所查记录。

称这个对应关系f为散列函数(Hashfunction),按这个思想建立的表为散列表。

逻辑结构:

线性结构。

存储结构:

顺序结构。

采取这种存储结构和逻辑结构的原因:

银行账号是按照顺序排列下来的,采取这种结构,便于增加账号和删除帐户,最主要的是便于查找,查找效率最高,而且不会有存储冲突。

其存储结构如下(哈希函数:

p=Num-50000):

对象

0

1

2

3

4

5

6

……

2000

账号

50000

50001

50002

50003

50004

50005

50006

……

50002000

抽象数据类型线性表的定义如下:

ADTList

{

数据对象:

D={A_Name//用于存储帐户姓名

A_Num//用于存储帐户的账号

A_Overmongy//用于存储帐户余额

PassWord//用于存储帐户密码

}

基本操作:

{

NewAcount()

初始条件:

线性表P存在

操作结果:

给线性表的一个基本单位的A_Name,PassWord,A_OverMoney赋初值。

Search()

初始条件:

线性表存在。

操作结果:

输入要查找的账号,验证密码,如果验证成功,则给出该结点的A_Name,A_OverMone等信息,否则返回主菜单。

ChangeMoney()

初始条件:

线性表P存在,输入要查找的账号,验证密码,如果验证成功,则对结点的A_OverMoney进行修改数值操作,否则返回主菜单。

DeleteAcount()

初始条件:

线性表P存在

操作结果:

输入A_Num的值及PassWord值并进行验证,如果匹配,则将该结点所有信息清零。

}

}

3.软件结构设计:

 

三、详细设计

1.定义程序中所有用到的数据及其数据结构,及其基本操作的实现;

数据类型:

constboolOK=1;

constboolNO=0;

Depositor

{

voidDisp()

{

cout<

}

voidGetValue()

{

A_Num=Count_OP+50000;//记录新建结点的位置

cin>>A_Name>>PassWord>>A_OverMoney;

if(A_OverMoney<10)

reinput;

}

voidSaveORGet()//存钱或者取钱

{

cin>>jud;

if(jud=='s')//存钱

{

cin>>change_amount;

A_OverMoney+=change_amount;

}

elseif(jud=='t')//取钱

{

cin>>change_amount;

A_OverMoney+=change_amount;

}

else

{

cout<<输入错误;

}

}

boolChechPassWord()

{

cin>>x;//输入密码

if(x==PassWord)

{

Disp();

returnOK;

}

else

{

cout<<密码错误;

returnNO;

}

}

voidDestroy()//销户

{

A_Num=0;

A_Name="";

A_OverMoney=0;

PassWord=Random;

}

}

2.主函数和其他函数的伪码算法;

全局函数:

voidNewAcount_Num()

{

p[Count_OP].GetValue();

p[Count_OP].Disp();

Count_OP+=1;//增加一个记录

}

voidChangeMoney()

{

cin>>no;

k=no-50000;

if(k>0)

{

if(p[k].CheckPassWord()=OK)//验证密码

{

p[k].A_SaveORGet();

}

elseif(p[k].CheckPassWord()=NO)

cout<<密码错误;

}

elsecout<<不存在的账户;

}

voidDeleteAcount()

{

cin>>no;

k=no-50000;//哈希函数的使用

if(k>0)

{

if(p[k].CheckPassWord()=OK)//验证密码

{

cin>>ch;

if(ch=='s')

p[k].Destroy();

}

elsecout<<未删除;

}

elsecout<<账号输入错误;

}

主函数:

voidmain()

{

switch(choice)

{

case1:

NewAcount_Num();break;

case2:

search_Num();break;

case3:

ChangeMoney_Num();break;

case4:

DeleteAcount_Num();break;

case5:

exit(0);

default:

{gotoloop1;system("cls");}

}

}

3.主要函数的程序流程图,

各个成员函数流程图:

 

 

成员函数:

 

4.画出函数之间的调用关系图。

 

四、调试分析

实际完成的情况说明(完成的功能,支持的数据类型等);

要求的功能全部完成。

程序的性能分析,包括时空分析;

本程序使用的是哈希表查找方法,所以,查找速度还是比较快的,时间复杂度为。

上机过程中出现的问题及其解决方案;

1、本来想用结构体的,但是我对类比较了解,所以就用了类;可是后来在主函数里面调用全局功能函数,没法实现,因为属性都是私有的。

于是我便想出了用全局函数调用类成员函数,进而改变类属性的方法。

而后来发现,这样是整个程序的结构也更加的清晰。

2、本来想设计两种查找方法:

账号查询和姓名查询的。

但是后来发现用姓名查询不太符合实际。

所以就保留了账号查询方法。

3、最初的设计没有密码,后来在某同学的提醒下,我决定也加上密码,然后就在类属性里面加入了PassWord,可是问题是,密码都是暗文,如何使输入时显示暗文,这个问题我没有解决。

密码本来想定义成string类型的,但是,根据实际,还是定义成了int型的。

4、当用户忘记密码时怎么办?

可以查询,开户的所有信息在文件里面也可以查询。

5、用户开户时存入负数怎么办?

干脆模仿银行开户时必须存入10元的做法,如果用户开户时输入金额小于10元,则提示并让用户重新输入。

6、用户查询的时候需要输入账号,假如用户输入的账号小于50000怎么办,输入的账号大于50000但是没有开过户怎么办?

我在查询的时候加了一判断语句,如果输入账号小于50000则提示错误,返回主菜单。

如果输入的账号不存在,那么其密码未初始化,无论输入任何密码,几乎不可能正确。

7、存取款的时候,编程出了点小错误:

无论密码输入对能存取钱,输入错误也能提示输入错误,但是也能存取钱,经检查发现,是未把存取款处理语句放到判断执行语句里面。

8、存取款的时候,如果用户输入s或者t之外的字符,就会出现错误,我的解决办法:

用if-elseif-else语句。

9、存取款如果用户输入负值怎么办?

跟开户的处理办法一样。

10、在构造函数的定义中我发现,其实最好不要给PassWord初始化,因为,不给他初始化,它会有一个不确定的值,这样,后面如果用户输入的账号不是已开户的账号时,在密码验证的那一步不会通过。

程序中可以改进的地方说明;

1.密码输入改为暗码。

2.密码限制,不能无限输入。

3.从文件读取之前存入的信息。

我只是写入到文件了,这里的作用也只能是备份信息的。

4.未做到:

一次输入密码之后选择存取款、查询等功能。

五、测试结果

开户:

查询:

存款:

销户:

六、用户手册

双击该程序:

出现以下界面:

你可以选择开户操作,查询操作,存取款操作,销户操作。

输入各个功能对应的数字,并按下回车。

(1)输入1,按下回车,出现以下界面:

接下来您需要输入所开户的姓名,然后按回车,接着会提示让您创建密码,您需要输入不是以零开头的7位以下的数字作为您的密码,否则您的账户可能会丢失。

接下来,请输入您要存储的金额,请输入非零开头的7位以下的数字,否则您的存款可能会丢失。

创建完账户会有以下提示,您需要按下回车以返回主菜单。

(2)返回主菜单后,您可以进行查询您的存款,输入2按回车,根据提示,输入您的账号,和密码,如果输入错误,程序会给出您具体操作提示,您需要根据提示进行操作。

(3)之后您还可以进行存取款操作,在主菜单选择3,输入账号和密码,出现以下界面,

现在您需要输入s或者t,输入s表示您要存款,t则是要取款,其他字符,会返回主菜单,

假设要取钱,您就输入t,然后,输入要取出的金额就是了。

(4)如果要销户,您需要在主界面选择4,输入账号,输入密码,选择确定,账户就会被删掉,删掉的账户不可以再利用。

七、体会与自我评价

银行活期储蓄管理系统制作心得与体会

两周的时间,就做了这么一个系统,而且还漏洞百出,不能应用到银行里面去。

由此可见,编程这条路还是很漫长的,就像老师说的:

c语言学完了,就以为自己会编程了,其实不然,现在学的还只是基础入门的东西,真正的实用的软件目前还是做不出来。

这是我最大的感慨。

这两周的时间里,除了这些感慨,当然我也学到了很多品德和知识,编程或者说软件开发,绝对不是随笔,需要有计划、有目的的去做,首先得需要进行结构的设计,我要做的软件需要哪些功能,要实现这些功能需要什么样的逻辑结构,各个结构之间怎么连接,应该使用什么样的存储结构,这都需要事先设计好。

各个部分分别用于什么样的用途,这需要在设计过程中做记录的,否则真的很容易忘记。

编程的过程中,需要集中精力,要清晰明白地记着自己做到哪里了,这一部分是什么功能,它跟其他的部分是什么关系,都要综合考虑,否则,很容易才出现牵一发而动全身的麻烦。

有时候,我遇到问题,会想是不是vs编译器的问题,但是经过这次课程设计,我懂得了,编译器出现问题的概率真的是很小很小,而自己考虑不周到的概率确实非常的大,所以,以后要全面、仔细考虑各种问题。

编程过程中,还有一个看似不是问题却不容忽略的大问题,就是很多同学不会休息,我中午一般不休息,但是下午编程的效率确实很低。

编程过程需要高度集中注意力,所以,好好休息时必要的。

 

源代码

#include"iostream"

#include"windows.h"

#include"fstream"

#include"iomanip"

#include"string"

constboolOK=1;

constboolNO=0;

usingnamespacestd;

intCount_OP=0;//用来记录新建储户的位置

ofstreamoutput("储户信息.bat");

ifstreaminput("储户信息.bat");

////////////////////////////////////////////////////////////////////////////////////////////////////////////

////每个账户是一个基本单位,可以看作是一个对象。

///

///每个储蓄账户由账号、户主名组成,此外还要包括该储户的当前金额。

(当然如果可以的话,还应该包括交易记录。

///

////能进行搜索,我要求既能通过账号搜索,又能通过姓名搜索。

///

////我想,账号搜索用哈希表。

///

////假设账号共五位,从50000到50020,对象是从0-20,那么哈希函数为i=A_Num-50000;///

////////////////////////////////////////////////////////////////////////////////////////////////////////////

classDepositor

{

private:

longintA_Num;//储蓄帐号

stringA_Name;//储户姓名

doubleA_Overmoney;//储蓄余额

intPassWord;//用户密码

public:

Depositor()

{

A_Num=0;

A_Name="";

A_Overmoney=0;

}

voidGetValue()

{

//output<<"alskdjf;laks"<

A_Num=Count_OP+50000;

cout<<"您的账号是"<

cin>>A_Name;

cout<<"请为您的账户创建密码"<

cin>>PassWord;

loop2:

cout<<"请输入您要存储的金额"<

cin>>A_Overmoney;

if(A_Overmoney<10)

{cout<<"对不起,开户最少10元,请重新输入"<

}

voidA_SaveORGet()//存钱或者取钱(类成员函数)。

{

charjud;

doublechange_amount;

loop1:

cout<<"存钱还是取钱?

存-s,取-t"<

cin>>jud;

if(jud=='s')

{

re1:

cout<<"请输入要存入的金额"<

cin>>change_amount;

if(change_amount<0)

{cout<<"输入金额错误,请重新输入"<

else{

A_Overmoney+=change_amount;

cout<<"存钱成功,存入"<

}

elseif(jud=='t')

{

re2:

cout<<"请输入要取出的钱"<

cin>>change_amount;

if(change_amount>A_Overmoney||change_amount<0)

{cout<<"金额不足"<

else{A_Overmoney-=change_amount;

cout<<"取钱成功,取出"<

}

else{cout<<"输入错误,返回重试"<

}

boolJud()

{

if(A_Num==0)

{returnNO;}

else{returnOK;}

}

//验证密码,如果正确会输出当前详情

boolCheckPassWord()

{

longintx;

cout<<"请输入该账户的密码"<

cin>>x;

if(x==PassWord)

{Disp();returnOK;}

else{cout<<"密码错误,请返回重试"<

}

voidDisp()

{

cout<

cout<

cout<

}

voidWrite_inFile()

{

ofstreamoutput("储户信息.bat",ios:

:

app|ios:

:

out);

output<

}

voidDestroy()

{

A_Num=0;

A_Name="";

A_Overmoney=0;

PassWord=0;

}

};

Depositorp[2000];//存储用户数上限;

voidNewAcount_Num();

voidsearch_Num();

voidChangeMoney_Num();

voidDeleteAcount_Num();

voidmain()

{

loop1:

cout<<"本行账号从50000开始。

"<

cout<<"请选择要进行的操作"<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

intchoice;

cin>>choice;

for(intm=0;m<10;m++)

printf("\a");

switch(choice)

{

case1:

NewAcount_Num();break;

case2:

search_Num();break;

case3:

ChangeMoney_Num();break;

case4:

DeleteAcount_Num();break;

case5:

exit(0);

default:

{gotoloop1;system("cls");};

}

system("pause");

system("cls");

gotoloop1;

system("pause");

}

voidsearch_Num()

{

longintno;

cout<<"输入您要查询的账号"<

cin>>no;

longintk=no-50000;

if(k>=0)

{

p[k].CheckPa

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

当前位置:首页 > PPT模板 > 其它模板

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

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