学 号:
软件工程 开 发 文 档
题 目 简易银行卡管理系统的开发 学 院 专 业 班 级 姓 名 指导教师
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<<\"------------银行系统-----------------\"< cout<<\"*-------------------------------------*\"< 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<<\"*-------------------------------------*\"< 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<<\"----------进入操作界面:-------------\"< 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<<\"你输入的不是正确的金额,请重新输入!\"< 这样,如果输入的是数字,便可,若是char型或string型,那么,便会让你重新输入 。 这次的实验,便我明白了软件测试便是寻找错误的过程,而并不是证明软件正确性。使我在自己的程序中,寻找出了许多的问题,并且一一改正。这对于我往后的编程是有十分大的帮助的。 通过本次的实验,让我体会到编写一个健壮的程序并不是一个简单的事情,往往我们还得要有好的测试方法才能把程序中错误的地方找出来。这对于以后工作与生活,是有十分重要的影响的。 而且通过工程化地编写程序,使得我对于软件工程的思想有了更加进一步的了解,而且通过需求分析,总体设计,详细设计等步骤,使我编写程序更加得心应手。而测试的方法更是让我能够更加快速地找到问题并提供解决办法。 可以说,这次实验是一次十分成功的实验,使我能够熟练使用软件工程思想发现问题,分析问题并解决问题。 8.附录参考书目 (1)软件工程导论(第五版) 张海藩 编著 清华大学出版社 (2)软件工程及其应用 周苏、王文等 著 天津科学技术出版社 (3)C++ Primer Stanley B.Lippman等 著 人民邮电出版社 13 因篇幅问题不能全部显示,请点此查看更多更全内容