您的当前位置:首页简易银行卡管理系统的开发

简易银行卡管理系统的开发

2020-07-27 来源:爱问旅游网


学 号:

软件工程 开 发 文 档

题 目 简易银行卡管理系统的开发 学 院 专 业 班 级 姓 名 指导教师

20 年

1

计算机科学与技术学院 计算机科学与技术专业

月 日

简易银行卡管理系统的开发

1.题目

简易银行卡管理系统的开发

2.可行性研究

通过对整个系统进行分析,确定其可行性: (1) 技术可行性------可行 (2) 经济可行性------可行 (3) 操作可行性------可行 (4) 法律可行性------可行

2.1系统流程图

登陆界面,显示界面信息 要能进行开户、存款、取款、挂失、解挂、修改密码、注销等操作 磁盘上文件 结束要能把信息存储 2.2 数据流图 开户 存款 取款 用户 登陆 修改密码 文档(txt格式)

挂失 解挂 销户 3.需求分析

2

3.1 数据字典

名字:用户信息表 别名: 描述:银行卡用户信息集合 定义:用户信息表=用户信息+ 用户信息+„„ 位置:磁盘文档 名字:密码 别名: 描述:对身份标志的加密 定义:密码=(字母,数字) 位置:用户信息

名字:用户信息 别名: 描述:银行卡用户信息 定义:用户信息=用户名+密码+存储金额+挂失标志 位置:用户信息表 名字:存储金额 别名: 描述:存入本银行的金额数 定义:存储金额=0{数字}5 位置:用户信息 名字:用户名 别名: 描述:唯一用户拥有的身份标志 定义:用户名=(字母,数字) 位置:用户信息 名字:挂失标志 别名: 描述:标志是否挂失 定义:挂失标志=[1|0] 位置:用户信息 3.2功能需求

其主要要实现的功能有:

(1) 开户 (2) 存款

(3) 取款

(4) 挂失/解挂 (5) 修改密码 (6) 销户

3.3数据定义

struct Labor{

string names; //字符串型---用户名 string mima; //字符串型---密码

long double jine; //DOUBLE型---存储金额(不能为负数) int n; //当N等于1时,说明可以正常登陆,若N等于0,说明已挂失 };

3.4运行要求

银行卡管理系统的硬件和软件的配置如下:

系统软件: Window XP/win7 文档系统:txt文档

4.总体设计

3

4.1处理流程图 开户 取款 存款 修改密码 销户 退出 登陆 开始 挂失 解挂 退出 4.2模块接口说明

LaboNode*CreateLabList(char filename[],LaboNode*phead);

//将文件中的数据转换成链表存储,文件乃是用的TXT文档,其中存有用户数据信息,返回的是链表表头

void Save(char filename[],LaboNode*ph);

//保存至文件中,即完成打操作后,系统保存你完成修改的信息 void Lossof(LaboNode*phead);

//挂失,你先得输入正确的用户名与密码才能挂失。 void DisLossof(LaboNode*phead);

//取消挂失,得输入正确的用户名与密码。

void Regis(LaboNode*phead);

//注册帐号,用户名要没有注册过的,密码二次输入要一致 LaboNode*Query(LaboNode*phead);

//登陆查询,返回的是你输入用户名与密码正确的那个结点,你便可以在下面对其进行操作。

void Deposit(LaboNode*p);

//存款,P乃是登陆中所得的那个结点 存款不能为负

void Withdraw(LaboNode*p);

//取款,P乃是登陆中所得的那个结点 取款不能为负且不能大于卡上余额

void Revise(LaboNode*p);

//修改密码,P乃是登陆中所得的那个结点, 删除时要两次输入密码,且两次密码要一致 LaboNode*Cancel(LaboNode*phead,LaboNode*p);

//注销。从链表中把P结点删除,

此处有phead.故而将会于链表之上直接删除 void Operate(LaboNode*phead,LaboNode*p);

//登陆后进行的操作,如:取款,存款,修改密码,消户。

5.详细设计

4

void Operate(LaboNode*phead,LaboNode*p){//登陆后进行的操作

string s=\"n\";

cout<<\"------------银行系统-----------------\"<labor.jine<<\"元\"<while(s==\"n\"){ //登陆后进入的界面

cout<<\"*-------------------------------------*\"<cout<<\"*--1.存款请按“1” 2.取款请按“2”--*\"<cin>>s;

else if(s==\"2\")Withdraw(p);//取款 else if(s==\"3\")Revise(p);//修改密码

else if(s==\"4\")phead=Cancel(phead,p);//消户

else break; }

int main(){//主函数 string i=\"2\LaboNode*phead=NULL; LaboNode*p1=NULL;

phead=CreateLabList(\"labor.txt\把文件中的数据转换成链表 while(st==\"y\"){

LaboNode*p=NULL; //进入界面

cout<<\"*-------------------------------------*\"<>s;cout<cout<<\"*----------请选择下列操作:-----------*\"<cout<<\"*-----开户请按“1” 登陆请按“2”----*\"<>i;

if(i==\"1\")Regis(phead);//开户

else if(i==\"2\")p=Query(phead);//登陆,其中有存款等等一系列操作 else if(i==\"3\")Lossof(phead);//挂失 else if(i==\"4\")DisLossof(phead);//解挂 else break;

if(p!=NULL){

cout<<\"----------进入操作界面:-------------\"<5

Operate(phead->pnext,p); //登陆后进行的操作,如:取款,存款,修改密码,消户 Save(\"labor.txt\保存

cout<<\"再次进入管理系统页面请按“y”否则请按“n”\"; cin>>st; cout<开户流程图: 存款流程图: 开户 输入用户名 是 用户是否存在 否 两次输入密码 否 密码是否相同 是 是 输入存储金额 是 金额是否为负 是 否 否 否 是否创建重 新 填 是 写 创建成功,并显示信息 否 退出

存款 输入存款金额 是 金额是否为负 否 是否真正存款 是 是 否 存入帐号中,并显示 是 是否再次存款 否 退出 取款流程图: 取款 输入取款数额 是 是否为负或大于帐户金额 否 是 是否真正取款 退出 是 否 取款并于存款中减去数额 否 是否再次取款 6

修改密码流程图: 注销流程图: 修改密码 两次分别输入新密否 是 修改成功退出 注销 是否注销 是否相同 是 否 注销成功 退出 挂失流程图: 解挂流程图: 输入用户名与密码 输入用户名与密码 否 否 是否正确 是否正确 是 是 是否挂失 是 是否已经挂失 是 否 否 解挂并显示成功 并显示成功 是 是 挂失, 是否再次解挂 是否再次挂失 否 否 退出 退出 挂失 解挂 6.测试和结果说明

测试用例可用等价划法:

当我们打开系统,便会跳出如上的选择界面,你可以选择1~4种操作,当按其它任何键后,都会退出来。并非一定要是“5”键。 当按“1”时:

7

从上面我们可以得到很多信息,首先,我们帐号要是一个没有被注册的。Tom已经被注册。故不能用。再就是我们输入密码要一致,不一致便会要重新输入。然后便是金额的问题,第一个,金额不能为负数。第二个,金额不能为非数字,其中都有判断。 当我们按“y”确定创建帐户。便会创建成功。如下:

当我们进入界面,选择登陆操作,输入正确的用户名与密码。我们可以清楚看到,zhang的

8

卡上有78块钱。我们可以选择1~4四种操作。按其它键便会退出。 当我们按“1”键时:

我们存款金额,一不能为负数,二不能非数字。当真地存款确认后,我们便可发现帐号上加上了我们存款数额。当按不退出帐号时,我们再次进入操作界面:

当我们选择“2”取款时,我们要注意的约束条件有:1.不能为负数。2.不能为非数字。3.取款金额不能超过已有金额。

9

当满足以上三个条件且确认取款,那么便会取款成功。 当我们选择修改密码时:

如果两次输入新密码不一致,那么便要重新输入,直到成功。 当我们用消户时:

消户成功后,我们便失去了这个用户的信息。我们可以再次进入管理系统:

我们发现,我们输入zhang这个用户后,提示的是“该用户不存在”,当我们退出来,对用户进行挂失:

10

我们可以发现,挂失一次再挂失便会提示。而且,我们可以进入“labor.txt”中看一下情况:

我们可以发现,tong这个用户已经挂失,后面为0 当我们解挂:

我们再来看“labor.txt”:

11

我们可以看到,后面又变成了1了。好,我们先对tong进行挂失,我们再登陆看看是什么情况:

我们只要对其再进行解挂,我们便又可以再次访问之。

当我们把已经挂失的帐号进行登陆时,我们会发现,它提示我们帐号已经挂失。

7.总结与展望

通过本次的实验,使我全面地了解了软件工程的各个阶段要完成的工作。在对问题定义以及可行性研究之后。对照于给出的需求分析。我大致在了解了要完成工作的量。

利用结构化程序设计,模块独立化编写。完成了大致的编写。

于其过程中,我也遇到很多问题,首先是,对于输入密码的“*”号显示问题,我在加入头文件:#include 写有如下代码:

string Qumi() {//输入密码

string Cmima;

char ch;

while((ch=getch())!=13) {

Cmima+=ch;

cout<<\"*\"; }

cout<这样,便可用星号显示密码,保证了密码的保密性质。

还有一个十分重要的问题便是在输入金额时必用double型,但若错误输入char或string类型怎么办?我便又加入了头文件:#include 写有如下代码:

long double intstring() {//输入金额

string str; long double n;

ints1:cin>>str;

12

if(str==\"0\")return 0;

n = atoi(str.c_str()); { }

cout<<\"你输入的不是正确的金额,请重新输入!\"<goto ints1; } return n;

这样,如果输入的是数字,便可,若是char型或string型,那么,便会让你重新输入 。 这次的实验,便我明白了软件测试便是寻找错误的过程,而并不是证明软件正确性。使我在自己的程序中,寻找出了许多的问题,并且一一改正。这对于我往后的编程是有十分大的帮助的。

通过本次的实验,让我体会到编写一个健壮的程序并不是一个简单的事情,往往我们还得要有好的测试方法才能把程序中错误的地方找出来。这对于以后工作与生活,是有十分重要的影响的。

而且通过工程化地编写程序,使得我对于软件工程的思想有了更加进一步的了解,而且通过需求分析,总体设计,详细设计等步骤,使我编写程序更加得心应手。而测试的方法更是让我能够更加快速地找到问题并提供解决办法。

可以说,这次实验是一次十分成功的实验,使我能够熟练使用软件工程思想发现问题,分析问题并解决问题。

8.附录参考书目

(1)软件工程导论(第五版) 张海藩 编著 清华大学出版社 (2)软件工程及其应用 周苏、王文等 著 天津科学技术出版社 (3)C++ Primer Stanley B.Lippman等 著 人民邮电出版社

13

因篇幅问题不能全部显示,请点此查看更多更全内容