简易的账户管理系统.docx
- 文档编号:11905565
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:19
- 大小:106.71KB
简易的账户管理系统.docx
《简易的账户管理系统.docx》由会员分享,可在线阅读,更多相关《简易的账户管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
简易的账户管理系统
课程设计说明书
课程名称:
软件设计模式
设计题目:
简易的账户管理系统
院系:
计算机科学与信息工程学院
学生姓名:
学号:
专业班级:
指导教师
2014年6月
课程设计任务书
设计题目
简易的账户管理系统
学生姓名
所在院系
计算机科学与信息工程学院
专业、年级、班
设计要求:
1.设计一个应用场景,最少使用所学过的三种设计模式解决一个实际问题。
2.应用场景设计要合理,模式选择要适当。
学生应完成的工作:
1.应用场景:
简易的账户管理系统,实现用户排队与基本信息注册问题、用户名不允许重复注册问题和不同的用户的填写信息,采用了装饰模式、建造者模式、单件模式和模板方法模式。
2.设计模式:
装饰模式、建造者模式、单件模式和模板方法模式。
(1)装饰模式:
实现用户排队单信息。
(2)建造者模式:
生成用户要填写的基本信息。
(3)单件模式:
解决重复注册或登录问题。
(4)模板方法模式:
不同用户的信息。
3.实现代码:
代码由JAVA语言实现。
参考文献阅读:
[1]徐宏喆,侯迪等著,实用软件设计模式教程,清华大学出版
[2]Y.DanielLiang著,JAVA语言程序设计基础篇,机械工业出版社
工作计划:
1.审题,查阅资料,进行设计前的必要资料准备(3天)。
2.把程序完整运行出来(4天)。
3.增加改进程序(3天)。
4.写课程设计报告(3天)。
5.提交课程设计报告(1天)。
任务下达日期:
2014年6月9日
任务完成日期:
2014年6月22日
指导教师(签名):
学生(签名):
一、系统目标
1.设计目的
设计模式的提出,是面向对象程序设计演化过程中一个重要的里程碑,设计模式使得人们可以更加简单和方便地去复用成功的软件设计和体系结构,从而能够帮助设计者更快更好地完成系统设计。
希望通过本次课程设计,可以更加了解设计模式的概念、设计模式的基本要素、设计模式的原则和设计模式的类型,以及各种设计模式的特点和适用情形,会根据不同的场景去灵活运用各种模式,加深对软件设计课程的理解。
通过运用设计模式来解决实际系统中遇到的问题,巩固所学的理论知识,提高程序设计能力,从而具备利用计算机编程分析解决综合性实际问题的初步能力。
2.需求描述
现如今银行存取款越来越方便简易,尤其是排队器的出现为我们带来了极大的便利。
了解银行的各部分工作流程是很有必要的,本次课程设计选择了“简易的账户管理系统”,应用所学到的四种设计模式来解决用户排队、注册等问题,将设计模式的具体内容与实际的问题相结合,实现系统的相应功能。
系统中总共用到四种设计模式,分别是装饰模式,建造者模式,单件模式、模板方法模式。
二、系统模式选择
1.需求分析
装饰模式提供了一个简易的排队单信息,建造者模式用来让用户填写账户单的基本信息。
单件模式解决一个账户信息同时被多个用户填写或登录的问题,这是不被允许的。
模板方法模式是通过把不变的行为转移到基类,去除子类中重复代码来体现它的优势,模板方法模式解决了填写不同用户信息的问题。
2.选用设计模式
根据需求分析,简易的账户管理系统可以采用了四种设计模式,分别是装饰模式,建造者模式,单件模式和模板方法模式。
(1)装饰模式
装饰模式是一种结构型设计模式,装饰模式提供了一种给类添加功能的方法。
它通过动态的组合对象,可以给原有的类添加新的代码,而无需修改现有的代码。
输出排队单上的基本信息,包括头部信息,正文和脚注信息,解决排队时需要做得工作问题。
模式结构图如下:
(2)建造者模式
建造者模式是一种创建型设计模式,采用建造者模式的主要原因是它将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
该模式主要解决用户填写的账户单基本信息问题。
模式结构图如下:
(3)单件模式
单件设计模式是一种创建型设计模式,每个系统中都会有好多对象,它们在同一时刻只能被一个线程所访问。
采用单件模式的主要用来解决用户名重复问题。
模式结构图如下:
(4)模板方法模式
模板方法模式是一种行为型设计模式,该模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
该模式主要用来解决不同用户填写信息问题。
模式结构图如下:
三、系统设计
1.系统功能模块设计
a:
装饰模式,输出排队单上的基本信息。
b:
建造者模式,用户填写的账户单基本信息。
c.单件模式,解决用户名重复问题。
d:
模板方法模式,不同用户填写信息。
系统流程图如下:
2.系统模块类图
系统流程图:
3.系统控制函数
importjava.util.Scanner;
publicclassMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
while(true){
System.out.println("");
System.out.println("请仔细填写表单上的数据");
System.out.println("欢迎来到荣氏银行");
System.out.println("1。
装饰模式(账户排队)");
System.out.println("2.建造者模式(用户登陆详细信息)");
System.out.println("3.单件模式(是否重复登陆)");
System.out.println("4.模板方法模式(登陆不同的用户)");
System.out.println("0(退出)");
intnumber;
Scannerinput=newScanner(System.in);
number=input.nextInt();
if(number==0)
{
break;
}
if(number==1){
System.out.println("装饰模式\n");
billDecoratorbill=newheader1bill(newfooter2bill(newfooter1bill(newconcreteBill())));
bill.printBill();
}
if(number==2){
System.out.println("建造者模式\n");
Directordirector=newDirector();
//Buildera=newAdvanced();
Builderb=newCommon();
//director.Construct(a);
//LandingAdvanced=a.GetLanding();
//Advanced.show();
director.Construct(b);
LandingCommon=b.GetLanding();
Common.show();
}
if(number==3){
System.out.println("单件模式\n");
Singletons1=Singleton.GetInstance();
Singletons2=Singleton.GetInstance();
System.out.println();
}
if(number==4){
System.out.println("第一人填写的信息:
");
Slip1s1=newSlip1();
s1.FillItem1();
s1.FillItem2();
System.out.println("\n第二人填写的信息:
");
Slip2s2=newSlip2();
s2.FillItem1();
s2.FillItem2();
}
}
}
}
四、系统实现
1.装饰模式
装饰模式主要包含:
bill类,headerbill类,footerbill类用来实现头部信息,正文,脚注的输出。
bill类用来实现正文对象,headerbill类用来实现头部信息对象,footerbill类用来实现脚注信息对象。
//装饰模式
abstractclassbill{
publicabstractvoidprintBill();
}
classconcreteBillextendsbill{
@Override
publicvoidprintBill(){
//TODOAuto-generatedmethodstub
System.out.println("请自动排队,这是您的排队号:
***\n");
}
}
abstractclassbillDecoratorextendsbill{
protectedbillxpobj;
publicbillDecorator(billobj){
xpobj=obj;
}
publicabstractvoidprintBill();
}
classheader1billextendsbillDecorator{
publicheader1bill(billobj){
super(obj);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidprintBill(){
//TODOAuto-generatedmethodstub
System.out.println("荣氏银行\n");
xpobj.printBill();
}
}
classheader2billextendsbillDecorator{
publicheader2bill(billobj){
super(obj);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidprintBill(){
//TODOAuto-generatedmethodstub
System.out.println("\n");
xpobj.printBill();
}
}
classfooter1billextendsbillDecorator{
publicfooter1bill(billobj){
super(obj);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidprintBill(){
//TODOAuto-generatedmethodstub
xpobj.printBill();
System.out.println("排队时间:
*****\n");
}
}
classfooter2billextendsbillDecorator{
publicfooter2bill(billobj){
super(obj);
//TODOAuto-generatedconstructorstub
}
@Override
publicvoidprintBill(){
//TODOAuto-generatedmethodstub
xpobj.printBill();
System.out.println("您的前面还有人在排队,请稍等\n");
}
}
装饰模式测试
2.建造者模式
建造者模式主要包含:
Landing类用来将各部分内容显示在一个集合里,Builder是一个抽象类,将各部分信息加进来,Common类用来生成普通用户的账单信息。
Director类用来指挥建造者builder对象。
//建造者模式
classLanding{
java.util.List
publicvoidadd(Stringpart){
parts.add(part);
}
publicvoidshow(){
System.out.println("\n用户表单数据:
");
for(inti=0;i System.out.println(parts.get(i)); } } } abstractclassBuilder{ publicabstractvoidAddName();//添加姓名 publicabstractvoidAddID();//添加账号 publicabstractvoidAddPassword();//添加密码 publicabstractvoidAddOthers();//添加其他的验证信息 publicabstractLandingGetLanding();//生成用户登陆验证表单 } classCommonextendsBuilder{ privateLandingCommon=newLanding(); @Override publicvoidAddName(){ //TODOAuto-generatedmethodstub Common.add("您的姓名: ###(请仔细核对)"); } @Override publicvoidAddID(){ //TODOAuto-generatedmethodstub Common.add("您的ID号: #####(请仔细核对)"); } @Override publicvoidAddPassword(){ //TODOAuto-generatedmethodstub Common.add("您的密码: #######(请仔细核对)"); } @Override publicvoidAddOthers(){ //TODOAuto-generatedmethodstub Common.add("其他: ###########(请填写您的真实信息)"); } @Override publicLandingGetLanding(){ //TODOAuto-generatedmethodstub returnCommon; } } classDirector{ publicvoidConstruct(Builderbuilder){ builder.AddName(); builder.AddID(); builder.AddPassword(); builder.AddOthers(); } } 建造者模式测试: 3.单件模式 单件模式主要包含: Singleton类,进行加锁机制,如果该用户未被注册或登录,则允许;反之则不允许操作。 //单件模式 publicclassSingleton{ privatestaticSingletoninstance; privatestaticObjectmyLock=newObject(); privateSingleton(){} publicstaticSingletonGetInstance(){ if(instance==null){ lock(myLock); { if(instance==null){ instance=newSingleton(); System.out.println(""); } else{ System.out.println("账号已经被登录,不允许被再次登录"); } } } else{ System.out.println("帐号已经被登录,不允许再次被登陆"); } returninstance; } privatestaticvoidlock(ObjectmyLock){ //TODOAuto-generatedmethodstub System.out.println(); } } 单件模式测试: 4.模板方法模式 模板方法模式主要包含: Slip类,用来刻画用户登录信息的模板,Slip1类是第一个使用模板的用户,Slip2类是第二个使用模板的用户。 abstractclassSlip{ publicvoidFillItem1(){ System.out.println("用户登陆信息必填! "); System.out.println("请输入验证码"); System.out.println("请正确的输入信息: "+Item1()); } publicvoidFillItem2(){ System.out.println("您的姓名: "); System.out.println(Item2()); } protectedStringItem1(){ return""; } protectedStringItem2(){ return""; } } classSlip1extendsSlip{ protectedStringItem1(){ return"#*#*#*"; } protectedStringItem2(){ return"荣开放"; } } classSlip2extendsSlip{ protectedStringItem1(){ return"*#*#*#"; } protectedStringItem2(){ return""; } } 模板方法模式测试: 五、系统设计总结 1.实现的功能和优点 该系统主要实现账户注册和登陆的工作流程,以及账户的批量注册。 运用的设计模式有装饰模式,建造者模式,单件模式和模板方法模式。 使用装饰模式实现了子系统组件对客户的屏蔽,因而减少了客户处理的对象数目并且使子系统使用起来更加方便;建造者模式使得产品的内部表象可以独立地变化,客户不知道产品内部的细节,每一个Builder都相互独立,而与其他的Builder无关,构建的代码与表示代码分开; 该管理系统的优点就是基本实现了排队机制和账户注册的基本功能,程序简单易懂,代码的复用率高,合理的运用了这四种设计模式,各个模块的层次结构都比较清晰,如果想要添加新的模块,不需要更改很多代码,直接在原有代码基础上进行继承实现就行,减少了开发成本。 2.不足之处和改进方向 不足之处就是在本系统中功能只是在简单的输出,没有用界面显示出来。 功能也不是很完善,有些具体细节还为达到要求,使用的设计模式也比较少,每个模块的功能还可以进一步完善和加强。 改进方向: 可以做成带系统界面,使用户使用起来更加简单方便快捷。 3.完成心得 设计简易的账户管理系统花了虽然花费了一些时间,但是学到了很多东西,通过设计和实现此系统,初步掌握了面向对象程序设计的基本思维,以及设计模式的特点和使用情形,了解了设计模式的原则即单一职责原则、开放封闭原则、里氏代换原则和依赖倒置原则。 要想程序的复用性高,后期维护方便就必须在进行设计的时候,采用合适的设计模式,将具体类的抽象出来,较好的提高系统的可扩展性。 在模式设计上,主要还是得理解各个模式的基本思想和特点,以及各个模式的各种适用场景,针对具体的场景然后采用相应的设计模式进行设计,开发、编码、实现和测试。 通过设计模式的运用更加深入的理解了设计模式的思想。 实训期间,学到了很多东西,不仅使我在理论上对软件设计课程有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,对我来说受益非浅。 除此以外,我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。 这次实训对于我以后学习、找工作也真是受益菲浅,在这短短的几天中相信这些宝贵的经验会成为我今后职业道路的重要的基石。 六、参考文献 参考文献 [1]实用软件设计模式教程,徐宏喆,侯迪等著,清华大学出版 [2]JAVA语言程序设计基础篇,Y.DanielLiang著,机械工业出版社 指导教师评语: 1、课程设计报告: a、内容: 不完整□完整□详细□ b、方案设计: 较差□合理□非常合理□ c、实现: 未实现□部分实现□全部实现□ d、文档格式: 不规范□基本规范□规范□ 2、考勤: 全勤□缺勤次 课程设计报告成绩: ,占总成绩比例: 80% 考勤成绩: ,占总成绩比例: 20% 总成绩: 指导教师签字: 年月日 出师表 两汉: 诸葛亮 先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。 然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。 诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 宫中府中,俱为一体;陟罚臧否,不宜异同。 若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下: 愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。 将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督: 愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。 先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。 侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也 。 臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。 先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。 后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。 先帝知臣谨慎,故临崩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 账户 管理 系统