SSD3设计报告模版_第1页
SSD3设计报告模版_第2页
SSD3设计报告模版_第3页
SSD3设计报告模版_第4页
SSD3设计报告模版_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、XXXX系统报告软件学院组长姓名贾春辉班级软件1005学号20103471姓名顾刚班级软件1006学号20103499姓名刘宇飞班级软件1005学号20102376姓名徐茜班级软件1006学号20103523课程名称面向对象程序设计(SSD3) 成绩指导教师签字时间东北大学软件学院2011年11月11日系统概述对所设计的软件系统进行描述,包括功能性和其他非功能性的与设计相关的内容。我们小组所做的是自动处方跟踪系统,自动处方跟踪系统方便了用户和店的使用以及药房对药物的管理,大大提高了在现实中药房的工作效率。系统所包括的功能:1.用户登录,管理员登录,非用户注册2.用户对自己的历史处方进行查询,取

2、该处方的药品,删除处方,添加处方,使用替代药物的功能3用户以及非用户可以在药房中查询某种特定的药物4管理员对用户信息查询,药房里需要进货药物的查询5管理员对所有药房中药物的查询,更新药方中的药品系统设计 对系统设计进行描述,在此需要有系统的UML类图,以及其它的设计信息,并对系统设计进行描述。此次的项目选择我们是依据教材课后的三个系统中选择的处方自动跟踪系统,首先我们小组对其进行用户需求分析,明确用户需要哪些功能以及药房内药物的初始化和管理的内容。对于用户我们小组分析的是:(一)类分析首先用户要有自己的信息:姓名,密码,电话号码,生日,保险公司的名字,以及在该保险公司的保单号。所以我们定义了C

3、ustomer类,与此同时我们定义了CustomerDataBase(集合类)来作为Customer的容器,CustomerDataBase类提供了添加用户,得到特定用户。也可以提供用户信息反馈的功能,为此要有一个得到所有用户信息的字符串来方便信息的保存。由于用户和管理员都要用到CustomerDataBase,这个是属于用户和管理员都要调用的,使用单例模式来定义CustomerDataBase.药物:名称,剂量,药房内的库存,其替代药物,药物在市场上的流通状态来表现该药的性质,所以定义了Drug类,当然Drug类只有他自己的个人属性对于其他的数量的我们又定义了DrugItem类,DrugIt

4、em继承了Drug类,DrugItem中有的数量是他自己特有的属性,这个类是(集合)药房(DrugStore)中集合对象的类,整个药房在系统中只有一个,而且供用户和管理员共同调用,所以也使用单例模式来得到DrugStore的实例化对象。我们还定义了DrugCatalog类来作为药品的集合(纯粹Drug对象的集合)。来供处方Prescription中药品的调用并添加到该处方(方便处方药品的初始化)。处方:处方的ID,开该处方的医生姓名,医生的电话,处方的开方日期,处方的有效期,该处方医生允许取药的次数。为此我们定义了Prescription类,因为每个处方有多个药品,所以我们定义了一个容器类Pr

5、escriptionItems来放处方中的药品。容器类PrescriptionItems中的元素对象是通过PrescriptionDrug类来实例化的,PrescriptionDrug有自己的quantity属性 其与DrugItem类相似不过DrugItem实例化的是药房内药品(每个药品在药方中的库存),而PrescriptionDrug定义的是处方中的药品极其每种药品的数量(单位:盒,瓶),两者的数量也是不同的,故定义了PrescriptionDrug和DrugItem来分别表示处方中和药房中的药品。Prescription的容器是History即每个用户的历史处方记录,该类提供了得到每个

6、药方ID,添加处方,删除处方,而History所定义的对象是每个Customer对象是私有属性,即每个用户都有历史处方记录。经过小组的初始分析和在编写系统的过程中总共定义了21个类, 下面的图所示提供了该系统的主要的10个类的关系图。部分类没有在类图中显示。System中的功能主要是通过Customer(用户登陆后的界面所定义的类),(管理员登录后的界面所定义的类),是来初始化系统中数据的类,GUI(系统的开始界面同时也是整个系统的主函数)来实现里面的功能的。(二)功能分析及设计三个界面:系统界面,用户登录后的界面,管理员界面首先,程序运行之后,会出现一个简单的窗口,在这个窗口中,有3个选择方

7、式分别为:系统界面: 登录:管理员登录,用户登录。(我们在这里将管理员用户均设置为Person的子类,并且使用策略模式,其中管理员为AdminXiali,pwd-000000),为了区分是管理员还是顾客,我们要求在每个管理员的名字上均加上Admin作为前缀。登录失败会给出相应的提示信息,一旦登录成功后,父窗口会消失,展现一个新的窗口注册:在这里主要是为了用户注册,实现了用户注册那么我们也就相当于实现了管理的注册,道理是一样的。用户注册时所要填写是用户名和密码,填写自己的姓名和密码,密码会以*号的形式遮盖,并提供密码匹配窗,只有两次密码使用一致才可以进行注册,考虑到现在大家会使用昵称,所以不对姓

8、名进行检测纠正,但是如果注册的顾客为已有顾客那么,我们会给出相应的提示。其他的信息是系统默认的查询药品信息:这个功能几乎是贯穿整个系统的,因为我们考虑到有些顾客没有在这里注册,但是提供了他对药品查询的功能。将根据指定的药品代码进行查找,如果该药物市场流通,则全部显示,药品不流通,则给出提示,此药物在本店已经不再流通。 用户界面:注:当输入的用户名和密码正确后系统判断是用户还是管理员,若是用户则跳到此界面 用户的信息在界面的左上角会显示和该用户的基本信息(不包括用户的密码显示),在历史记录的JList内显示的是每个处方的ID号码。 当点击的时候在历史处方信息内会显示该处方的基本信息,在处方药物J

9、List里面会显示该处方的药物以及处方需要该药物的数量(单位:盒,瓶)。当点击该处方药物中JList的药物时在其右面的文本区域会显示该药物的信息,在该药物的替代药物中的JList中会显示该药物的替代药物,点击替代药物的时候其信息也在边的文本区域显示,如果用户想使用该药物的替代药物在选中替代药物后点击替换通用药物按钮就会将该药物的替代药物取代原药物(默认取代后的药物数量和原药物的数量一致)。用户想取药的时候点击取该药方的按钮(当药方中的药物没有的时候,系统会提示该药物药房没有库存,这时候用户可以选择其替代药物进行替代,如果允许取药次数为零的时候系统也会提示该药方不可以再取药),当用户不需要某种处

10、方的时候可以选中该药方的ID然后点击删除该药方就可以删除药方的信息。如上两幅图所示是添加新处方的功能,在新加处方内填写处方的信息,处方信息输入不完全的时候会显示错误提示信息并要求你重新输入(药物的内容按照“药物名称_数量”的格式填写,如果该药物在药房内没有的话就提示用户药房内没有该药物(新加处方的药物必须是药房内有的,如果不是的话就不能成功添加该处方)。当点击添加新的处方按钮时其就会添加到处方历史记录的JList内,点击查看就可以看到新添加处方的信息。点查询药物功能,输入药物名称,点击查询该药物按钮,如果药房中存在该药物则显示该药物的信息,如果没有的话会提示药房没有该药物。信息的保存:点击保存

11、按钮,系统会把信息写入文件内(系统默认的文件)保存用户信息总共用到了六个文件:CustomerDB.txt Prescription.txt PrescriptionItems.txt主文件1.txt 2.txt 3.txt备份文件退出:点击退出则从该界面退出返回到主界面。 管理员界面:输入用户名和密码后系统判断为管理员的时候界面会跳转到管理员界面管理员:负责对药物的管理-1-查看所有药物信息(包括流通的何不流通的,但是会给出相应的信息表达),2-查看需要更新的药物信息(将市场上流通的和药品数量低于5kg的信息显示出来),3-更新所有的药物(将市场流通的药物全部设置为满即100kg),4-查看

12、顾客信息(显示出所有顾客的姓名,电话号码,生日,保险公司名称,保单号),5-添加某种新的药物(如果该药物存在则给出相应的提示,不存在则添加,若果该药物存在并且已经不流通,则进行询问是否使其进行流通,根据回复提示给出相应的操作),6-指定的市场不流通的药物并设置为false(我们给每个药物提供了一个流通状态的属性,在本店中可以流通,那么就设置为true,否则设置为false,但是我们不会删除该药物的信息)。 系统会自动保存更新后的信息。文件:Drugs.txt Admin.txt 主文件 D.txt A.txt备份文件管理员退出后,那么父窗口会再次出现。问题集锦1.对于文件读取和写入,一开始想到

13、的是每次点击保存文件保存或登录则进行文件读取,但是这样频繁性的读取文件不会加快程序速度反而增大了程序的耗时行,因此经内部讨论我们决定全部成员在程序开始运行时进行初始化,然后在程序的结束的时候进行文件保存,考虑到每次调试的程序操作相同主要是为了进行调试方便,我们将文件读取和保存放在不同的文件中。2.对于文件的操作,遇到的最大的问题是readline()返回值是什么,然后根据返回值确定是否达到文件结尾,尝试了-1,不成功,然后查了查API,知道了readline()返回值会为空,read()是-1.3.对于窗口的布局设计问题,开始的时候想把一个窗口的关闭去导致另一个窗口打开,但是在actionli

14、stener中只能够实现框架的dispose,而且这个方式是放弃了对该框架的句柄,然后等待垃圾回收器去默认的调用fianalizer方法将其释放,这样做就增大了对内存的消耗,同时很容易产生空指针异常,经过上网查询,我们发现窗口一个windowlistener方法,在这个方法中,使用setvisible就可以实现我们想要的方法。4.在对Customer对象完整的初始化的时候遇到了很大的问题,因为Customer对象实例化的内容很多,不仅包括用户的基本信息,还有用户历史处方的初始化,处方的初始化同时还要有处方药物的初始化,三者要同时进行初始化才能将完整的用户信息初始化,然后才能添加到用户容器Cus

15、tomerDataBase单例模式的对象中,为此想了很多办法来解决这个问题,都没有实现预期的效果。研究了一下用户信息的模块化分配和标记信息来判断其归属对象,最后想到了解决办法:Customer:张三_123_1562345897_1991年9月19日_No1209389_太平洋保险公司Prescription:PrescriptionItems:B007_感冒灵_3D001_白加黑_3A003_止咳糖浆_2A001_阿莫西林_2A001_白加黑_3D002_阿莫西林_4C003_感冒灵_9C003_阿莫西林_5如上面格式所示分别写在三个文件里,在类FileCustomerLoader中定义该文

16、件读取的方法,用户名标记处方,处方ID标记处方中的药物,利用字符串利用StringTokenizer分割后得到的初始字符串来判断将其给每个对象进行实例化,利用三重循环并成功读取文件的信息将Customer对象完整实例化。然后成功将Customer对象添加到单例模式下的CustomerDataBase对象中。 5.在事件处理的时候,添加处方和删除处方遇到的共性问题是:点击添加的时候系统错误:prescription空指针,因为此时的时候系统还是默认你选择了处方记录中的处方ID但是没有没有选择,而且我预期的效果是点击删除或添加处方后此时处方信息中不显示,处方药物和替代药物都是空显示,如同用户成功登

17、陆到该界面的时候那种没有任何选中状态,为此我尝试了好久,那么既然再添加或删除的时候默认选择了那么我就添加一个JList. isSelectionEmpty()来判断JList内是否被选中然后在执行事件的处理.然后将其他的文本区域和JList都设置为空,class RemovePrescription implements ActionListener public void actionPerformed(ActionEvent event) if(historyList.getSelectedValue()!=null) String Id=(String)historyList.getSe

18、lectedValue(); Prescription prescription=customer.getHistory().getPrescription(Id); customer.getHistory().removePrescription(prescription); historyList.setListData(customer.getHistory().getPrescriptionIDs(); customerinformationPanel.removeAll(); customerinformationPanel.setVisible(false); customerin

19、formationPanel.setVisible(true); String emperty=new String1; emperty0=; toReplaceDrugList.setListData(emperty); prescriptionItemList.setListData(emperty); else statusTextArea.setText(Please select a prescription.); 但是发现使用后还有一个问题就是该List还是可以被选中的,然后就会出现空指针的异常,所以接下来解决的是如何让其不被选中而又处于空内容的状态,思考以后决定用List. setVisible(false)来让其不能被选中因此不会出现空指针的异常情况

温馨提示

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

评论

0/150

提交评论