团队作业-系统设计
一、完善需求规格说明书
根据上一周的上台答辩,我们从同学们,助教身上了解到我们项目的不足之处,现有如下两点:
1.身份证和姓名如何对接?需要些什么接口?
2.电子图书怎么做到的,从网上下载还是自己做?
经过小组的讨论,以我们现在的知识水平来说,第一个问题我们选择将被认证人的“公民身份号码”、“姓名”等数据通过电信运营商的网络通道传送至公安部“全国人口信息社会应用平台”进行比对,返回“一致”或“不一致”的比对结果;第二个问题我们则采用向用户提供网上现有的pdf链接,让用户可以自主进行访问,下载。
二、编码规范
2.1、 包命名规范
包(packages):采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xxx(可以是公司域名或者个人命名),三级包名根据应用进行命名,四级包名为模块名或层级名。
包名 | 说明 |
---|---|
com.xxx.library.view | 自定义的窗口界面类等 |
com.xxx.library.db | 数据库操作 |
2.2、类命名规范
类(classes):名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的,则单词缩写的每个字母均应大写。
类名 | 说明 |
---|---|
MainWin | 程序主窗口界面 |
JoinWin | 注册窗口 |
LoginWin | 登入窗口 |
AdminWin | 管理员个人中心窗口 |
PersonalWin | 用户个人中心窗口 |
Database | 数据库操作类 |
2.3、变量命名规范
变量(variables)采用小驼峰命名法。
公开的常量:定义为静态final,名称全部大写。
控件的命名:
变量名 | 说明 |
---|---|
pnlXxx | 窗口(JPanel) |
btnXxx | 按钮(JButton) |
lblXxx | 标签(JLabel) |
txtXxx | 文本框(JTextField) |
jtaXxx | 文本域(JTextArea) |
pwdXxx | 密码框(JPasswordField) |
radXxx | 单选框(JRadioButton) |
chkXxx | 复选框(JCheckBox) |
cmbXxx | 组合框(JComboBox) |
jspXxx | 滚动面板(JScrollPane) |
jdlXxx | 对话框(JDialog) |
mnubXxx | 菜单栏(JMenuBar) |
mnuXxx | 菜单(JMenu) |
mnuiXxx | 菜单项(JMenuItem) |
2.4、方法命名规范
方法(methods):动词或动名词,采用小驼峰命名法。
// 这里的方法我觉得等我们代码写完再写吧,现在还不知道有哪些方法。
2.5、注释规范
为了减少他人阅读你代码的痛苦值,请在关键地方做好注释。
2.5.1、类注释
每个类完成后应该有作者姓名的注释,对自己的代码负责。
2.5.2、方法注释
每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释,在方法前一行输入 /** + 回车 eclipse会帮你生成模板,我们只需要补全参数即可。
三、数据库设计
3.1、ER图
3.2、物理模型
四、项目的后端架构设计
4.1、架构体系
图解:
表示层:包括所有与客户机交互的边界对象,如窗口,网页等。
功能层:实现程序的处理逻辑和规则。
数据层:实现对数据库的存储,查询和更新。
流程:
三级功能的表示层配置在客户端,功能层和数据层分别放在不同的服务器上。用户在用户机的系统界面上输入数据并发出业务处理请求。功能层服务器的业务处理程序接受请求,进行处理。在需要进行数据存取的时候,向数据层服务器发出数据存取请求。服务器将执行数据库连接,查找和存取操作,并把结果进行返回功能层服务器。功能层服务器业务处理结束将数据返回给客户端。客户机对返回的数据进行处理,在表示层上进行输出。
优势:
C/S架构一般面向相对固定的用户群, 对信息安全的控制能力很强。相比于C/S两层构架大大降低了客户端的负荷,减轻了系统维护和升级的成本和工作量。在增加新的业务量处理时可以在装有功能层的服务器。系统的灵活性和伸缩性变得很强,随着系统规模的扩大这种优势会变得更加明显。所以选择三层C/S构架。
4.2、功能原理
用户填写完数据后,通过按钮监听来实现相关的方法/类,相关方法/类通过实现PreparedStatement接口来执行SQL语句,传送给数据库,数据库再通过ResultSet接口返回值显示在相对应的地方。
五、确定团队Alpha版本要实现的功能
5.1、WBS图
5.2、实现功能
5.2.1、核心功能
消息通知:属必要的杀手功能,采取“差异化”办法,产生同类产品比不了的功能或优势,全力投资在该功能上。
浏览、搜索、借阅、注册/登录、缴纳押金、书籍管理,属于必要的外围功能,采取“抵消”的办法,快速地达到“和别人都差不多”的地步,对于大家都看重的功能,采取“优化”办法,达到行业最佳
5.2.2、非核心功能
续借:属于辅助的外围功能,采取“抵消”的办法,以最低成本维持该功能。
5.2.3、功能描述
优先级 | 功能 | 用户故事描述 |
---|---|---|
1 | 浏览 | 作为一个用户,可以在主界面浏览书籍,以便于查询各种书籍的情况 |
1 | 搜索 | 作为一个用户,可以在主界面搜索书籍,以便于找到自己想要的书 |
2 | 借阅 | 作为一个用户,可以在自由借阅书籍,以便于获取自己所需的资源 |
3 | 注册 | 作为一个新用户,可以注册新账号,以便于登录系统 |
3 | 登录 | 作为一个用户,可以登录,以便于方便借阅书籍 |
4 | 缴纳押金 | 作为一个用户,可以缴纳押金,以便于借阅书籍 |
5 | 续借 | 作为一个用户,可以在借书期限将至时进行续借,以便于继续阅读 |
6 | 消息 | 作为一个用户,可以在查看消息情况,以便于不会错过书籍到期提醒 |
7 | 书籍管理 | 作为一个管理员,可以对书籍进行管理,以便于学生借书 |
六、关键技术与难点
6.1、关键技术
关键技术:
(1)图形界面与数据库的连接实现对数据库的系统功能等操作。
(2)服务端实现身份验证,消息提示,提供支付渠道等功能。
(3)实现代码对硬件的控制。
6.2、难点
难点一:答辩中提到的关于身份证与姓名的匹配问题。
解决方法:在《全国人口信息社会应用平台WebService接口调用规范V2.3-4777》pdf文档中有详细讲到关于如何使用Web Services服务接口的方法与格式样例可供参考。
难点二:在实现押金,购买电子书等所用到的第三方支付认证需要注册公司和对公账户等详细信息
解决方法:通过展示支付二维码的方式在前期模拟支付环境,后续开发尾声完整实现第三方服务。
难点三:如何实现代码对硬件的控制
解决方法:代码对硬件的控制主要在于图书馆内部仪器识别电子图书证或实体图书证上的二维码或者条形码。学习Google开源的Zxing能够通过摄像头基础实现扫码功能。简化修改投入项目使用。
难点四:对于盈利的电子书,如果手动检测该文件是否安全并设置链接储存于数据库中。操作时间冗长,并不能保证链接是否不会失效。
解决方法:图书馆的电子书主要由扫描设备将印刷型图书输到计算机加工生成特色性电子书。而对于相关网站出版的电子,我们认为应该获取授权支付相关费用。然后可以在该模块设置链接,直接从官方数据库中获取需要的电子书。
七、团队管理
7.1、本次任务分工及工作量比例
成员 | 分工情况 | 比例 |
---|---|---|
蔡振翼 | 完善说明书、后端架构设计、团队管理、撰写博客 | 35 |
谢孟轩 | 分析关键技术与难点 | 15 |
林凯 | 确定团队Alpha版本要实现的功能 | 15 |
肖志豪 | 制定团队的编码规范 | 10 |
吴文清 | 数据库的设计 | 15 |
刘华强 | 制定团队的编码规范 | 10 |