下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 购物系统的需求分析和类划分购物系统本身是一个十分复杂的系统, 有很多细节问题如果深究 会更加复杂, 并且一般购物系统都是网页类型的, 要有一个友好的界面, 但是作为一个简单项目,该项目只是为了给 JAVA初学者介绍一下开发 的基本思想, 以及面向对象时应该怎样去设计框架和实现流程,所以只 是基于 eclipse 开发的一个简单的项目, 并没有 GUI的参与, 并且很多 细节问题作为后续研究, 整体的设计比较简单,但是足以说明很多设计 思想和设计理念,那么下面对基本的需求进行分析。作为一个简单的购物系统, 至少需要具备以下功能 (这些功能分 布在不同级的菜单中):(1)用户登录功能、用户账
2、号密码修改功能,暂时不提供注册 功能;(2)用户成功登录后,需要具备客户信息的管理功能、购物结 算功能以及一些抽奖活动等;(3)客户信息管理功能下面又可以分出很多功能,比如说:查 询、修改、增加等;(4)购物结算功能下面又可以分出很多功能,比如说:商品选 购、付款、账单等;(5)抽奖活动下面又可以设计出多种的抽奖形式,从而进一步 划分为许多新的功能模块。6)在一级菜单中要提供退出系统的功能,在二级菜单中要提供注销登录的功能,其他级菜单都要能够返回上一级菜单。上面的这些功能都是一些比较基本的功能, 那么如果按照面向流 程的思想来设计, 就会划分很多功能模块, 然后按照流程一步步走就行, 但是现在
3、我们采用面向对象的思想来设计, 那么应该如何考虑设计框架 呢?面向对象的主要思想就是将一些需求抽象为许多类, 然后建立这些 类之间的联系,通过不同类之间的协同合作,就可以实现所有的功能。 所以,现在的主要任务就是如何合理地抽象出这些类, 以及这些类要实 现什么功能, 类之间的联系又是什么?下面通过本次设计的结构对这一 过程进行分析。( 1)StartSMS 类:用于系统的启动。我们的系统肯定需要一个 启动类,这个类里面包含了 main 方法,用来启动这个系统,这个类是 最顶层的,所以不能牵涉太多底层的细节实现,只需要实现一些顶层的 基本流程就行,主要还是要调用底层其他类的一些方法来实现功能。(
4、 2)Data 类:用来存放我们的所有数据信息,本次设计主要存 放的是已经预存的一些可供购买的商品信息和已经注册的会员信息。 为 什么需要这个类呢?大家想一想, 在面向对象的设计中,我们的数据比 较多,肯定不能零散地到处定义、任意修改,这样会使得系统的聚合程 度太低,容易出现很多错误,并且难以进行后期功能扩展和错误修改, 所以我们要把用到的一些公有的数据进行归类,然后放在一个类中,并 且在该类中提供对这些数据进行操作的方法。(3)Menu类:用于显示及处理各级菜单。既然我们设计的是一 个购物系统,那么即使再简单,也需要一个基本的菜单,用来和用户进 行交互,由于菜单的比较多,并且各级菜单之间层层
5、相连,所以我们需 要对菜单进行统一管理,故而出现了菜单类。注意,这里的菜单只是一 些顶层的菜单显示和基本的功能调用, 具体底层的算法还是需要更加底 层的类来实现的。(4)Manager 类:用于存储用户的账户和密码。 既然我们需要用 户登录,那么肯定需要一个单独的类来管理用户的账户和密码,从而使 系统的独立性更强一些。 本次设计的用户只有一个账户和密码,只允许 修改账户和密码,但是不允许注册。(5)VerifyEqual 类: 用于验证登录信息。 这个类相当于是把登 录这项功能抽象成了一个类, 这个实现其实并不是非常必要, 但是为了 使得系统功能划分更加清晰, 所以设计了此类,用来对登录信息和
6、已有 的账户和密码进行校验,从而给出校验结果。(6)CustManagement类:用于客户信息的管理,该类实现了底 层的一些功能,比如说查询、修改、增加等。当我们进入到客户信息管 理这个菜单的时候, 肯定需要对客户信息进行许多操作,为了方便管理 这些操作,并考虑到后续的扩展性,这里把客户信息管理的所有功能都 抽象出来,放在此类中, 上一级菜单通过调用该类中的方法实现客户信 息的管理。7)Pay 类:用于处理购物和结算操作。 该类和上面的类存在的原理基本一致,当客户选择进行购物的时候,肯定要有很多操作,比如 说买什么、多少钱、付款、找零等,这些功能比较零碎,所以我们对其 进行集中管理,从而抽象
7、出该类, 对购物和结算的菜单选项的底层算法 进行实现,上一级菜单通过调用该类的方法实现购物和结算功能, 并且 可以返回上一级菜单。( 8)GiftManagement 类:用于处理抽奖活动的相关功能。这个 类和( 6)、(7)中的类存在的理由基本一致,该类对抽奖活动进行了 统一管理,上一级菜单只需要通过调用该类的方法就可以实现抽奖的功 能。( 9)Gift 类:用于管理礼物。既然设计了抽奖环节,那么肯定 需要礼物,那么我们会给出什么样的礼物呢, 我们总不能每一样礼物都 详细列出来吧,这样十分冗余,也很麻烦,所以我们干脆抽象出一个礼 物类,把礼物的一些属性:礼物名称和价格等保存成该类的成员变量,
8、 然后就可以很方便的管理该类, 需要什么样的礼物就直接新建一个礼物 对象,然后对该对象的属性进行修改和管理即可, 这样的实现类似于一 个接口,但是又和接口完全不一样,功能差不多。总之, 上面的类都是经过一些功能模块划分后抽象出来的, 有些 地方也并不一定合理,主要还是需要看需求, 根据不同的需求制定不同 的方案。在这里,我想就” Gift 类“再强调一点,这个类的设计十分符 合面向对象的思想,举个例子来看,如果购物系统中需要很多礼物,比 如手机、电脑、移动电源等,那么如果我们一个个写这些礼物,会使得 系统代码十分冗余, 因为礼物的属性基本一样,所以我们就可以抽象成 一个类, 从而在需要什么礼物
9、的时候只定义一个对象, 然后赋予一定的 属性即可,比如需要手机、电脑,那么我们只需要 new一个 Gift 类的 对象,然后在需要手机的时候设置其属性为手机, 在需要电脑的时候设 置其属性为电脑, 需要什么设置什么即可,这样就使得我们的代码得到 了简化,也使得结构比较清晰。在更为复杂的系统中,其实礼物用接口 来实现更为合理, 这样就可以根据该接口实现不同的礼物类,从而满足 不同的需求,就类似于我们的电脑上的 USB接口,只需要这个接口,我 们就可以插上很多各种各样的外围设备,道理差不多。2. 购物系统的类之间的关系和流程(用图示法表示)下图是我用 Microsoft Office Visio
10、2003 画图工具画出的这 9 个类之间的关系。从上图中可以清晰地看出来各类之间的关系, 大致关系和流程如 下所述:(1)StartSMS 类是启动类, 内含 main 方法, 这个类里面定义了 VerifyEqual 类和 Data 类的对象,用来存储数据和验证信息, 同时 Data 类中包含了 Manager 类,用来存储预存的用户账号信息,然后在 main 方法中通过一定的逻辑, 去调用 Menu类中的 showLoginMenu() 方法,用 于处理一级菜单 - 登录修改流程;( 2)如果登录成功,就调用 Menu类中的 showMainMenu()方法, 用于处理二级菜单 - 购物系
11、统的主流程,如果登录失败 3 次,就直接 退出系统;(3) 在 Menu类中的 showMainMenu()方法中, 通过选择不同的二 级菜单选项,从而调用 Menu类中的 showCustMMenu()方法来处理客户信 息管理流程或者调用 Menu类中的 showSendMenu()方法来处理抽奖活动 流程,亦或者调用 Pay 类中的 calcPrice() 方法来处理购物结算流程;(4) 如果选择了二级菜单中的客户信息管理选项,那么就会调 用 Menu类中的 showCustMMenu()方法,这个方法会调用 CustManagement 类中的各种方法,用以处理客户信息管理的不同操作;(
12、5) 如果选择了二级菜单中的购物结算选项, 那么就会调用 Pay 类中的 calcPrice() 方法,从而处理购物结算的流程,注意在 Pay 类中 的 getDiscount() 方法是用来根据客户会员信息来计算打折率的;(6) 如果选择了二级菜单中的真情回馈选项,即抽奖活动,那 么就会调用 Menu类中的 showSendMenu()方法,这个方法会调用 GiftManagement 类中的各种方法,用以处理抽奖活动的不同操作;注意到在 CustManagement类和 GiftManagement 类中都有一个returnLastMenu() 方法,该方法是用来返回上一级菜单使用的3.
13、代码实现需要说明的一点是这些代码都应该放在包下StartSMS 类java view plaincopy1. package2. import3./*4. * 该类是这个系统的主方法类,用于启动购物系统5. *6. * author7. *8. */9. publicclass StartSMS 10. /*11. *空构造方法12. *13. */14. public StartSMS() 15. 16. /*17. *系统主方法18. *19. *param args20. */21. publicstaticvoid main(String args) 5.请选择 , 输入数字 : );
14、1.登 录 系 统 nn );2.tttt2.更改 管 理 员 信 息 nn )3.tttt3.退出 nn );4.*n );quals( n ) ppend(custNok).append( tt )显示二级菜单, 即系统的主菜单, 这个方法里面包含了对这个菜单处理的所有流程*/publicvoidshowMainMenu()客户信息 管 理 n );tttt2. 购 物 结 算 n );tttt3. 真 情 回 馈 n );tttt4. 注 销 n );* * * * * * * *n );显示所有客户信息n );tttt2. 添 加 客 户 信 息 n );tttt3. 修 改 客 户
15、信 息 n );tttt4. 查 询 客 户 信 息 n );* * * * * * * *n );请选择 , 输入数字或按 n 返回上一级菜单 : );Scanner scanner = new Scanner;boolean flag = true;do 幸运大 放 送n );tttt2. 幸 运抽奖 n );tttt3. 生 日问候 n );* * *n );请选择 , 输入数字或按 n返回上一级菜单 : );Scannerscanner = newScanner;.append( tt ).append(custBirthk).append(custScorek).toString()
16、;j = k; break; k+; while ( true ); 改 会 员 生 日 .n );tttt2. 修 改 会 员 积 分 .n );..1.12.*n );..6.17.18.请选择,输入数字: );switch () case
17、 1: ppend(custNoj).append( tt ).append(custB irthj).append( tt ).append(custScorej).toStri ng();flag = true ;break;j+; while (true );if (!flag)抱歉,没有你查询的会员信息。 );n 要继续查询吗( y/n ) : ); ppend(custNoj).append(tt).append(custBirthj).append(tt).append(custScorej).toString();ppend(d4).append()int i();Scanner
18、 scannert 请输入会员号:);new Scanner;ppend(s2).append(n ).append(s).append(goodsNamel).append( t ).toString(););*n.append( t ).append( ¥ ).append(d).append( tt ).append(k).append( tt ).append( ¥).append(d * ( double ) k).append( t ).toString();t 是否继续y/n );s1(); while ( y );d2d1 * d4;ppend( n 折扣:t ).append
19、(d4).toString();StringBuilder().append( 金额总计 :t¥ ).append(d2).toString(); 实际交费 :t ¥);20. int i1 = (int)d2/ 100)* 3;21.int j1 = 0;22.do 23.if (j1 =24.break;25.if (custNoj1 =i)26.custScorej1= custScorej1 + i1;27.StringBuilder().append( 本次购物所获的积分是: )28.append(i1).toString();29.break;30.31.j1+;32.while( true );33.n请n返回上一级菜单 : );34.if ().equals( n )1.quals( n ) 2.quals(s) 3.s1 = ( newStringBuilder().append(s1).append(custNoi).append(4.n).toString();5.flag = true6.7.quals(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中船动力集团2026届春季校园招聘备考题库含完整答案详解【全优】
- 2026甘肃兰州城关区《卫生职业教育》杂志社招聘备考题库附参考答案详解【黄金题型】
- 2026浙江国检检测技术股份有限公司第一轮招聘员工5人备考题库附参考答案详解(轻巧夺冠)
- 2026中国电信量子公司春季博士招聘备考题库含答案详解(轻巧夺冠)
- 2026云南红河州石屏嘉胜能源有限责任公司招聘5人备考题库(网校专用)附答案详解
- 2026湖南长沙市芙蓉区招聘中小学教师41人备考题库及完整答案详解(夺冠)
- 2026中共宁波市鄞州区委党校招聘事业编制教师2人备考题库(浙江)【突破训练】附答案详解
- 2026浙江嘉兴市平湖市教育局校园招聘教师52人备考题库(第三批)附完整答案详解(夺冠系列)
- 2026平安财险甘孜县支公司农险客户经理招聘备考题库(四川)(名校卷)附答案详解
- 2026云南玉溪市文化馆城镇公益性岗位招聘3人备考题库及参考答案详解【轻巧夺冠】
- 2023年8月广西桂林市七星区专职化社区工作者招聘聘前(第七批)笔试历年典型考题及考点剖析附答案带详解
- 中西医结合思路与方法学课件
- JTS-201-2011水运工程施工通则
- 黑素体与皮肤色素沉着关系研究
- GB/T 19665-2024红外成像人体表面测温筛查仪通用规范
- 丽水职业技术学院单招《职业技能测试》参考试题库(含答案)
- 检验科实验室生物安全培训课件
- 义务教育语文课程标准2001版
- 物理学(高职)全套教学课件
- 八中龙兴分校工程设计建设项目设计说明
- 2023年(电力行业)电力设备交接和预防性试验规程
评论
0/150
提交评论