银行卡管理系统.doc_第1页
银行卡管理系统.doc_第2页
银行卡管理系统.doc_第3页
银行卡管理系统.doc_第4页
银行卡管理系统.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机学院软件工程课程设计 第一章 系统概述1.1目的:银行卡管理系统是采用先进的数据仓库技术帮助银行全面科学分析客户信息、挖掘客户价值的强有力的经营管理工具。它对银行加强管理、防范风险、提高收益,以客户为中心提供个性化服务,提高服务水平,最终增强核心竞争力具有现实和深远的意义。银行卡决策支持系统的重要意义在于系统已具有客户关系管理的雏形,建立了客户关系管理的核心。1.2 任务:这个银行卡系统的需要完成的功能主要有六个: 开户,存款,取款,挂失,销户,转载等功能。1.3 开发环境:在windows下用visual c+工具开发。第二章 可行性分析2.1 问题定义:开发一个简易的银行卡管理系统,这个系统的开发分两步进行,首先是简易银行卡系统的分析与设计,分析这个系统要完成什么功能,然后是银行卡系统的编码与实现。2.2 整体分析:(1) 技术可行性-可行;(2) 经济可行性-可行;(3) 操作可行性-可行;(4) 法律可行性-可行;2.3 系统流程图登陆界面,显示界面信息磁盘上文件要能进行开户、存款、取款、挂失、解挂、修改密码、注销等操作结束要能把信息存储图1-1 系统流程图开户2.4 数据流图存款取款登陆用户修改密码销户 文档(txt格式)挂失解挂图1-2 数据流图第三章 需求分析3.1功能需求这个银行卡系统的需要完成的功能主要有六个: 开户,存款,取款,挂失,销户,转载等功能:(1) 开户 : 可以接收一个新的用户,生成一个新的账号。(2) 存款 : 在输入正确的账号和密码的情况下,可以接收用户输入的存款金额,并且加上余额然后将结果置为当前金额。(3) 取款 : 在输入正确的账号和密码的情况下,可以接收用户输入的取款金额,并且用余额减去它然后将结果置为当前金额,取款金额应不大于当前金额。(4) 查询 :在输入正确的账号和密码的情况下,可以查询用户余额。(5) 挂失 : 在输入正确的账号和密码的情况下,可以进行挂失操作。当用户挂失后,再不能用这个账号进行任何操作。(6) 销户 : 在输入正确的账号和密码的情况下,可以进行消户操作。当用户销户后,该账号被永久性删除。3.2数据定义用一个结构体来定义一个银行卡,这个结构体包括银行卡的卡号,持卡人的姓名,卡上的金额,还有银行卡的挂失信息。用户名 : 开户人的名字,可以接受中英文字符。帐号 : 证明开户人身份的号码。可由用户自己指定,并且不能和已有的帐号相同。余额 : 帐号里的当前金额。挂失信息:用来说明银行卡是否已经挂失,用1表示挂失,0表示未挂失。struct Laborstring names; /字符串型-用户名string mima; /字符串型-密码long double jine; /DOUBLE型-存储金额(不能为负数)int n; /当N等于1时,说明可以正常登陆,若N等于0,说明已挂失;3.3运行要求银行卡管理系统的硬件和软件的配置如下:系统软件: Window XP/win7文档系统:txt文档3.4 数据字典名字:用户信息别名:描述:银行卡用户信息定义:用户信息=用户名+密码+存储金额+挂失标志位置:用户信息表名字:用户信息表别名:描述:银行卡用户信息集合定义:用户信息表=用户信息+用户信息+位置:磁盘文档名字:用户名别名:描述:唯一用户拥有的身份标志定义:用户名=(字母,数字)位置:用户信息名字:挂失标志别名:描述:标志是否挂失定义:挂失标志=1|0位置:用户信息名字:存储金额别名:描述:存入本银行的金额数定义:存储金额=0数字5位置:用户信息名字:密码别名:描述:对身份标志的加密定义:密码=(字母,数字)位置:用户信息第四章 总体设计4.1处理流程图本系统由三大模块组成,包括开户、基本操作和忘记密码,而基本操作又由六大子模块构成,包括查询余额、存款、取款、挂失/解挂、修改密码和销户。简易银行管理系统开户基本操作忘记密码查询余额销户修改密码挂失/解挂取款存款图4-1 处理流程图4.2模块接口说明该银行卡系统运行后会出现一个操作界面,主要有开户,存款,取款,挂失,销户,转账以及退出等操作,输入相应的数字就可以选用任意一种操作,输入另外的数字则显示输入错误。分别用函数实现开户,存款,取款,挂失,销户,转账等功能,并用一个txt文档来保存用户信息,当新开一个用户的时候就将该用户的银行卡信息写入该文档中并保存。当用户进入银行卡系统后,需要实现相应的功能的时候,该系统首先根据用户的卡号来查找该用户,然后做相应的处理,如果没有找到则提示错误。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.1 各详细设计图存款开户流程图: 存款流程图:开户输入存款金额输入用户名金额是否为负是 是用户是否存在是否真正存款 否 否两次输入密码 是 是 否存入帐号中,并显示密码是否相同否是否再次存款 是 是 是退出是否重新填写输入存储金额 否金额是否为负是取款 取款流程图: 否输入取款数额是否创建 否是否为负或大于帐户金额 是 是是否真正取款创建成功,并显示信息 否 是退出 否 取款并于存款中减去数额退出 是 否 是否再次取款 否 修改密码流程图: 注销流程图:注销修改密码两次分别输入新密码是否注销是否相同否 是 否退出注销成功 是修改成功退出挂失流程图: 解挂流程图:解挂挂失输入用户名与密码输入用户名与密码是否正确是否正确 否 否 是是否挂失 是是否已经挂失是 是解挂并显示成功 否 否挂失,并显示成功是否再次解挂 是 是是否再次挂失 否退出退出 否5.2程序描述:1. RegisterDlg过程对注册界面中输入的各项信息进行检验其合法性。若发现错误,则输出该类型错误信息,若无发现错误,则提示用户注册成功,并显示用户的用户名,卡号等信息。2. ForgetPwdDlg过程对忘记密码界面中输入的用户名和身份证号通过数据库进行核对,若数据库中存在此用户,则输出用户的用户名,卡号和密码。若发现错误,则弹出相应的错误信息。3. M_BANKDlg过程对登录界面中输入的用户名和密码通过数据库进行核对,若正确,则进入基本操作界面,若错误,则弹出相应的错误信息。4. Checkmoney过程根据登录时所输入的用户名和密码,找到其在数据库中对应的账户金额,并将其显示出来。5. SaveMoneyDlg过程对存款界面中输入的金额进行检验,若不合法,则弹出错误信息;若无误,则根据登录时所输入的用户名和密码,找到其在数据库中对应的用户,并修改账户金额,同时将其显示出来。6. DrawMoneyDlg过程对存款界面中输入的金额进行检验,若不合法,则弹出错误信息;若无误,则根据登录时所输入的用户名和密码,找到其在数据库中对应的用户,并修改账户金额,同时将其显示出来。7. LockUnlockDlg过程根据登录时所输入的用户名和密码,找到其在数据库中对应的用户权限,若处于挂失状态,则只能执行解挂操作;若处于解挂状态,则只能执行挂失操作,其他情况均为错误操作,若执行了,则系统弹出相应的错误信息。8. ModifyPwdDlg过程对修改密码界面总输入的原密码和新密码进行判断,若合法,则修改数据库中的用户密码,然后返回登录界面;若有误,则弹出相应的错误信息。9. UnaccountDlg过程根据登录时所输入的用户名和密码,找到其在数据库中对应的账户金额,并将其显示出来。用户可以根据金额选择取款或直接销户的操作。若选择销户,必须提示销户带来的严重后果,提示用户谨慎操作。若选择取款,则弹到取款界面。第六章 测试与运行记录测试用例可用等价划法:当我们打开系统,便会跳出如上的选择界面,你可以选择14种操作,当按其它任何键后,都会退出来。并非一定要是“5”键。当按“1”时:从上面我们可以得到很多信息,首先,我们账号要是一个没有被注册的。Tom已经被注册。故不能用。再就是我们输入密码要一致,不一致便会要重新输入。然后便是金额的问题,第一个,金额不能为负数。第二个,金额不能为非数字,其中都有判断。当我们按“y”确定创建账户。便会创建成功。如下:当我们进入界面,选择登陆操作,输入正确的用户名与密码。我们可以清楚看到,zhang的卡上有78块钱。我们可以选择14种操作。按其它键便会退出。当我们按“1”键时:我们存款金额,一不能为负数,二不能非数字。当真地存款确认后,我们便可发现账号上加上了我们存款数额。当按不退出账号时,我们再次进入操作界面:当我们选择“2”取款时,我们要注意的约束条件有:1.不能为负数。2.不能为非数字。3.取款金额不能超过已有金额。当满足以上三个条件且确认取款,那么便会取款成功。当我们选择修改密码时:如果两次输入新密码不一致,那么便要重新输入,直到成功。当我们用消户时:消户成功后,我们便失去了这个用户的信息。我们可以再次进入管理系统:我们发现,我们输入zhang这个用户后,提示的是“该用户不存在”,当我们退出来,对用户进行挂失:我们可以发现,挂失一次再挂失便会提示。而且,我们可以进入“labor.txt”中看一下情况:我们可以发现,tong这个用户已经挂失,后面为0当我们解挂:我们再来看“labor.txt”:我们可以看到,后面又变成了1了。好,我们先对tong进行挂失,我们再登陆看看是什么情况:当我们把已经挂失的帐号进行登陆时,我们会发现,它提示我们帐号已经挂失。我们只要对其再进行解挂,我们便又可以再次访问之。第七章 设计完成结果分析与获得的主要成果这个银行卡管理系统完成了开户,存款,取款,挂失,销户,转载等主要功能。结束语通过本次的实验,使我全面地了解了软件工程的各个阶段要完成的工作。在对问题定义以及可行性研究之后。对照于给出的需求分析。我大致在了解了要完成工作的量。利用结构化程序设计,模块独立化编写。完成了大致的编写。这次的实验,使我明白了软件测试便是寻找错误的过程,而并不是证明软件正确性。使我在自己的程序中,寻找出了许多的问题,并且一一改正。这对于我往后的编程是有十分大的帮助的。通过本次的实验,让我体会到编写一个健壮的程序并不是一个简单的事情,往往我们还得要有好的测试方法才能把程序中错误的地方找出来。这对于以后工作与生活,是有十分重要的影响的。而且通过工程化地编写程序,使得我对于软件工程的思想有了更加进一步的了解,而且通过需求分析,总体设计,详细设计等步骤,使我编写程序更加得心应手。而测试的方法更是让我能够更加快速地找到问题并提供解决办法。可以说,这次实验是一次十分成功的实验,使我能够熟练使用软件工程思想发现问题,分析问题并解决问题。参考文献(1)张海藩 软件工程导论(第五版)北京 清华大学出版社,2006(2)周苏、王文等 软件工程及其应用 天津 天津科学技术出版社,2004(3)Stanley B.Lippman C+ Primer 北京 人民邮电出版社,2007附录一:程序清单程序各功能代码如下:enum Status UNHOOKED,HOOKED;enum MenuType MAINMENU, ADM_SUBMENU, USER_SUBMENU;enum FuncType NONE, ADM_MOD, USER_MOD, OPEN_ACCOUNT, REPORT_LOSS, UNHOOKING, CLOSE_ACCOUNT, SAVING, DRAWING, INQUIRING, TRANSFERING, MODIFY_PASSWORD,EXIT;struct Date /日期结构体int month;int day;int year;struct UserInfo /用户信息结构体char userNum14;char userName15;char userID19;char password7;Date openDate;Status status;int money;struct UserNode /用户链表UserInfo userinfo;UserNode *next;/ 所用到的各个函数UserNode *head=NULL,*p=NULL;void Wait();void Save(char filename);void RemoveUserList();void GenCardNum(char cardnum,UserNode *&head);UserInfo &GetUserInfo(UserInfo &userinfo);UserNode *CreateUserList(char filename);UserNode *OpenAccount(UserInfo &userinfo);UserNode *Entry(UserNode *&head);bool CloseAccount(UserNode *&head);bool HookAccount(UserNode *&head);bool UnhookAccount(UserNode *&head);void Saving(UserNode *&);void Drawing(UserNode *&);void Inquiring(UserNode *&);void Transfering(UserNode *&);void ModifyPassword(UserNode *&);int count;void Wait()long j=0;for(double i=1000000;i0;)i=i-0.002;j+; j-;UserNode *CreateUserList(char filename)UserNode *p;int status=0;ifstream userdata(filename);if(!userdata)cout文件不存在!p-userinfo.userNum;userdatap-userinfo.userName;userdatap-userinfo.userID;userdatap-userinfo.password;userdatap-userinfo.money;userdatap-userinfo.openDate.yearp-userinfo.openDate.monthp-userinfo.openDate.day;userdatastatus;p-userinfo.status=(Status)status;p-next=head;head=p;userdata.close();return head;void RemoveUserList()for(UserNode *p2,*p1=head;p1;p1=p2)p2=p1-next;delete p1;head=NULL;UserNode *OpenAccount(UserInfo &userinfo)UserNode *p;char c;if(p=new UserNode)strcpy(p-userinfo.userNum,userinfo.userNum);strcpy(p-userinfo.userName,userinfo.userName);strcpy(p-userinfo.userID,userinfo.userID);strcpy(p-userinfo.password,userinfo.password);p-userinfo.openDate.year=userinfo.openDate.year;p-userinfo.openDate.month=userinfo.openDate.month;p-userinfo.openDate.day=userinfo.openDate.day;p-userinfo.money=userinfo.money;p-userinfo.status=userinfo.status;p-next=head;head=p;coutc;cout您的卡号为: userinfo.userNumnext;delete p;return head;bool HookAccount(UserNode *&head)char cardnum14,c;int status=1;coutcardnum;UserNode *p1=head,*p2=head-next;if(!strcmp(head-userinfo.userNum,cardnum)if(head-userinfo.status=1) cout此卡已经挂失!endl;return false;coutc;if(c=Y)head-userinfo.status=(Status)status; Save(userinfo.txt);return true;else return false;while(p2!=NULL)if(!strcmp(p2-userinfo.userNum,cardnum) break;else p1=p2;p2=p2-next;if(p2=NULL) cout此卡号不存在,无法挂失!userinfo.status=1) cout此卡已经挂失!endl;return false;coutc;if(c=Y)p2-userinfo.status=(Status)status; Save(userinfo.txt);return true;else return false;bool UnhookAccount(UserNode *&head) char cardnum14,c;int status=0;coutcardnum;UserNode *p1=head,*p2=head-next;if(!strcmp(head-userinfo.userNum,cardnum)if(head-userinfo.status=0) cout此卡没有挂失,无需解挂!userinfo.status=(Status)status;coutc;if(c=Y) Save(userinfo.txt);return true;else return false;while(p2!=NULL)if(!strcmp(p2-userinfo.userNum,cardnum) break;else p1=p2;p2=p2-next;if(p2=NULL) cout此卡号不存在,无法解挂!userinfo.status=0) cout此卡没有挂失,无需解挂!userinfo.status=(Status)status;coutc;if(c=Y) Save(userinfo.txt);return true;else return false;bool CloseAccount(UserNode *&head)int count=0;char cardnum14,code7,c;coutcardnum;UserNode *p1=head,*p2=head-next;if(p1=NULL)cout用户记录为空,无法销户!userinfo.userNum,cardnum)coutcode;count+;while(strcmp(head-userinfo.password,code)!=0 & count=3)coutcode;count+;if(count3) return false;cout用户卡号: userinfo.userNumendl;cout用户姓名: userinfo.userNameendl;cout用户身份证号: userinfo.userIDendl;cout用户密码: userinfo.passwordendl;cout用户储蓄额: userinfo.moneyendl;cout开户日期: userinfo.openDate.year年userinfo.openDate.month月userinfo.openDate.day日endl;coutc;if(c=Y)head=p2;delete p1; Save(userinfo.txt);return true;else return false;while(p2!=NULL)if(!strcmp(p2-userinfo.userNum,cardnum) break;else p1=p2;p2=p2-next;if(p2=NULL) cout此卡号不存在,无法销户!endl;return false;coutcode;count+;while(strcmp(p2-userinfo.password,code)!=0 & count3)coutcode;count+;if(count=3) return false;cout用户卡号: userinfo.userNumendl;cout用户姓名: userinfo.userNameendl;cout用户身份证号: userinfo.userIDendl;cout用户密码: userinfo.passwordendl;cout用户储蓄额: userinfo.moneyendl;cout开户日期: userinfo.openDate.year年userinfo.openDate.month月userinfo.openDate.day日endl;coutc;if(c=Y)p1-next=p2-next;delete p2; Save(userinfo.txt);return true;else return false;UserInfo &GetUserInfo(UserInfo &userinfo)char code7;int status=0;userinfo.status=(Status)status;coutuserinfo.userName;coutuserinfo.userID;coutuserinfo.password;coutcode;while(strcmp(userinfo.password,code)coutuserinfo.password;coutcode;coutuserinfo.money;coutuserinfo.openDate.yearuserinfo.openDate.monthuserinfo.openDate.day;GenCardNum(userinfo.userNum,head);return userinfo;void GenCardNum(char cardnum,UserNode *&head) cardnum14;char str1100,str2100;int n; int i=0;int bits=0;int count=0;for(UserNode *p=head;p;p=p-next)count+;n=count;dostr1i+=n%10+0;bits+;n=n/10;while(n0);for(int j=0;j=0;k-)str2bits-1-k=str1k;str2bits=0;strcat(cardnum,str2);count+;UserNode *Entry(UserNode *&head)int count=0;char cardnum14,code7;coutcardnum;UserNode *p1=head,*p2=head-next;if(p1=NULL)cout用户记录为空,无法登录!userinfo.userNum,cardnum)if(head-userinfo.status=1)cout此卡已经挂失,无法登录!endl;return NULL;coutcode;count+;while(strcmp(head-userinfo.password,code)!=0 & count=3)coutcode;count+; if(count3) return NULL;cout操作正在处理中,请稍后.userinfo.userNum,cardnum) break;else p1=p2;p2=p2-next;if(p2=NULL) cout此卡号不存在,无法登录!userinfo.status=1)cout此卡已经挂失,无法登录!endl;return NULL;coutcode;count+;while(strcmp(p2-userinfo.password,code)!=0 & count3)coutcode;count+;if(count=3) return NULL;cout操作正在处理中,请稍后.endl;Wait();return p2;void Saving(UserNode *&p)int money;char c;coutmoney;cout操作正在处理中,请稍后.userinfo.money=p-userinfo.money+money; Save(userinfo.txt);coutc;if(c=Y) cout凭条正在打印中.e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论