下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封面作者: PanHongliangJava课程设计指导书(学生版初稿)第一章 网吧计费管理系统 目标1.1 背景介绍1.1.1业务背景仅供个人学习1.1.2技术背景1.2需求分析1.2.1功能需求分析1.2.2业务对象分析1.2.3验收测试要求1.3系统设计1.3.1总体设计1.3.2详细设计1.4系统实现1.5小结1.6展望第一章网吧计费管理系统学习目标:能使用 Java 集成开发环境,运用 Swing 设计图形界面,运用 JDBC 访 问数据库 , 掌握事件处理编程 , 了解简单两层 C/S 工程地开发及简单面向对象程 序地设计过程 , 发展基本地团队协作开发能力 .学习寄语 :虽然本工
2、程并不是一个商业工程 ,其产品也不能用来赚钱 ,但从中你 可以学到实际开发中地许多经验和技巧 , 获得一种“学有所用”、“学有所得” 地成就感,同时赢得老师和同学(同事)对你地格外尊重.在此工程地学习中 ,你不但是个学生 , 还是一个职业人 , 将与同事一起尽全力完成你所要做地工作 , 并再 次验证“天道酬勤”地真理 .我们地信念是: “不抛弃 , 不放弃”. 你地改变和收 获是老师真诚地期待 .1.1 背景介绍1.1.1业务背景“海之星”网吧 , 是一个小型网吧 , 以前是人工记帐 , 现需要开发一个简单地网 吧计费管理系统 .原人工管理地主要过程如下:客户在门口服务台 ,出示上机卡 , 若
3、是新客户则先发新卡;管理员先查询是否有空机器 , 若有则根据上机卡号查到 该卡对应地记录(账簿) , 若有余额( 5 元) , 则分配一个空闲地机器号给客 户, 客户根据机器号对号入座 , 管理员记下客户卡号、上机机器号、上机时间 . 客 户下机要到门口地服务台 , 请求下机 , 管理员根据当前时间、上机时间及费率计 算出本次上机费用 , 并记录, 同时将费用从卡余额中扣除 , 若费用不够则需充值 . 原手工系统主要有如下缺点:1 手工记帐 , 管理员工作量大 , 且易出错; 2 超时 超费使用不能及时发现 . 因此需要开发一个简易计费管理软件, 取代人工记帐方式 , 由软件统一管理记录上下机
4、、计费、上机卡、机器情况 , 提供简单统计功能 , 超时超费提醒功能等 .1.1.2技术背景本系统要求使用 java 技术开发 , 使用数据库(如 ACCESS,SQLServe)r 保存 数据, 集成开发环 境可使用 支持可视化 GUI 界面设计 地主流工具( 如 eclipseantbeanjbuilder).开发者应有 java 程序设计语言、SWING 基本 GUI组件、文件使用、JDBC 存取数据库、使用一种集成开发工具地基本知识和技能.系统采用两层 C/S 体系结构,C 端负责通过 GUI 与管理员交互、处理业务逻辑及 存取数据库 ,S 端主要是数据库系统 . 系统分析设计主要采用
5、面向对象地分析设 计方法.友情提示: 对工程有了一个最基本地认识后 , 是不是立即准备大干一场?是否要 问一问值不值得干?能不能干?商业工程一般可以从经济性、技术性、法律社 会等方面进行可行性分析 , 但本工程作为一个学习型工程显然无利可图、技术也 欠缺(事实上技术正是要学习地东西)、好在工程是合法地 . 那是否继续?当 然!因为本工程地目标不是在合法地前提下获取最大利润 , 而是习得知识和技能 , 只要你愿意 , 就可以继续进一步了解“网吧计费管理系统” ,Let s go!1.2 需求分析1.2.1功能需求分析 系统需求分析地主要任务是从用户角度考察系统应具有哪些功能及非功能性需求 , 对
6、于网吧计费管理系统 , 用户主要是指系统管理员 , 系统地主要功能是:登录、上机、下机、卡管理(发卡、删卡、充值、查询)、机器管理(添加机 器、删除机器、查询状态、修改状态) , 统计功能(日、月费用统计) , 口令管 理(添加用户、删除用户、修改口令) ,参数设置(时段费率) ,使用帮助 . 主要 使用流程是:管理员登录 ,根据客户请求上机 , 根据客户请求下机 . 主要功能地用 例(use case )描述如下:一 上机1管理员输入空闲机器号 , 上网人输入口令、卡号 , 请求上机 .2系统验证卡号 , 检查卡中余额 , 卡状态3 系统获取当前系统时间作为上机开始时间4 系统修改该机器地使
7、用标志为“在用” , 卡标志为“在用” .5 系统记录上机信息(卡号、机器号、上机时间)6 系统提示上机成功若 1 中无空闲机器又请求上机地 , 系统提示“没用空闲机器” ,2 中卡验证未通过 , 提示“无此卡号” , 余额不足 , 提示“余额不足” , 卡状 态为“在用” , 则提示“不能一卡多用” .二 下机1 管理员选择被使用地机器号 , 请求下机2 系统获取系统当前时间作为下机时间;3 系统计算费用;4 系统显示应缴费用5 系统记录下机时间和此次费用;6 系统从卡中扣费 , 修改卡状态为“空闲”;7 系统修改该机器地状态为“空闲”;8 系统显示本次上机记录信息 , 提示下机成功三 登录
8、1 管理员输入用户名和密码 , 请求进入系统2 系统验证用户名和密码3 系统显示主界面若一次验证不通过 , 则提示再输入一次 ,仍不通过则系统退出 .四 卡维护卡有三种状态:停用、空闲、在用 .发新卡:1 管理员输入卡号(保证卡号唯一)2 管理员输入卡初始金额3 上网人输入用户名、口令4 管理员请求添加新卡5 系统保存卡号、金额、用户名和密码 , 状态为“空闲”6 系统提示添卡成功 , 显示卡号及金额 , 以便核对 .7 管理员将系统生成地有卡号、用户名地纸卡给上网人 .充值:1 管理员输入卡号2 系统显示该卡信息(卡号、用户名、余额、状态)3 管理员核对后 , 输入充值金额4 系统计算并保存
9、该卡总金额5 系统显示充值后地卡信息(卡号、用户名、余额、状态) .查询卡信息:1 管理员输入卡号或请求察看所有卡信息2 系统查询卡信息(卡号、用户名、余额)并显示 删除卡:1 管理员输入卡号2 系统查询卡余额及状态3 若余额已结清且状态为“空闲” , 则将该卡信息删除4 系统提示删除成功 若有余额或“在用”则不能删除五 机器维护 机器有三种状态:停用、空闲、在用 . 添加机器:1管理员输入机器号 , 请求添加2系统验证机器号是否重复3系统添加机器记录信息(机器号、状态为“空闲”)4系统提示添加成功 删除机器:1管理员输入机器号 , 请求删除2系统删除相应机器信息3 系统提示删除成功查询机器状
10、态:1管理员输入机器号或请求察看所有机器信息2系统查询并显示机器信息(机器号和状态)并显示六 管理员口令管理添加用户1管理员输入用户名、密码和确认密码 , 请求添加2系统验证用户是否是新用户 , 两次输入地密码是否相同3 系统添加用户、密码信息4 系统提示添加成功删除用户1 管理员输入用户名、密码2 系统验证用户名、密码是否正确3 系统删除用户名、密码记录4 系统提示删除成功修改密码1 管理员输入用户名、密码 , 请求修改密码2 系统验证用户名、密码是否正确3 管理员输入新密码、及确认密码4 系统保存新密码5 系统提示修改成功七统计管理1 管理员输入起始时间(年、月、日) , 结束时间 , 请
11、求按日、月、年汇总2系统查询上网记录 , 计算、统计出时间段地总费用、人次、总上机时间 等信息.3系统显示上述信息八 参数管理时段费率设置:0 系统显示当前设置1管理员设置时间段(时、分)及对应地费率 , 请求保存2系统保存设置3系统提示保存成功 超时报警定时器间隔设置九 超时超费报警1设置定时器为周期触发方式 , 触发间隔由参数获得 , 默认为 30 分钟2定时器到时 , 系统查询当前正在上机地记录 , 计算其上机时间及费用 , 计算其卡中余额是否低于最低费用 .3系统提示已超费卡号、机器号 , 及超地费用 本系统除了功能性需求 , 还有易用性、可靠性、安全性等要求 , 可以在实现 上述功能
12、性需求地基础上 , 进一步实现完善非功能性要求 .友情提示:本文使用“用例”法分析功能性需求,属于面向对象分析(00A 法, 其实质就是从用户角度 , 通过观察、与用户交谈等方式 , 记录下用户希望如何使 用系统, 系统相应需要实现哪些功能 .分析用户需求一般由系统分析人员完成 ,其 核心能力是熟练掌握业务领域地知识和沟通地技巧 , 需求分析地最大难点在于需 求地可变性 , 最令开发人员气馁地莫过于辛苦设计实现了一个功能 , 用户突然说 不需要这个功能了 , 另一个常见地问题是隐蔽性地需求(行业惯例、日常规则) 常被用户和分析人员忽略 . 不同地需求对于客户而言重要性是不同地 , 一般需要 对
13、需求划分优先级 , 优先级高地优先设计实现 . 你能否从上述一到九大用例描述 中找出哪些用例是高优先级地?1.2.2业务对象分析根据上面地主要用例描述 , 可以分析出系统地主要业务对象 , 它是设计阶段 核心类图地基础(不一定一一对应) , 这些对象必须实际存在 , 其行为和属性应 与问题领域相关:1 上网卡:主要维护上网卡地相关信息 . 卡号、密码、余额、卡用户名、卡 状态(在用、空闲、停用)2 机器:主要维护上网吧计算机地相关信息 . 机器号、使用标志(在用、停 用、空闲)、备注3 费用记录:记录每次上机地信息 . 记录编号、卡号、机器号、开始上机时 间, 下机时间、费用4 费率记录:起始
14、时间、终止时间 , 费率5 管理员: 利用 14 完成各种业务操作 .1.2.3验收测试要求用户要求开发产品 , 产品开发完成后 , 需要交付用户验收 , 验收要求常常是合同 中地重要组成部分 , 这是一个必经地环节 , 主要思路是按照用户使用地过程测试 系统, 越频繁使用地功能越要多测试 . 本系统功能性需求验收测试地基本要求如 下: 前置条件:1除口令表有初始用户名和密码外 , 各库表为空 .2程序安装配置正确 , 能正常启动运行 .一 初始化数据1 启动程序 , 进入“卡维护” , 选“发新卡” , 输入一条数据记录 , 退出, 进入“信 息浏览” , 查看记录是否已被正确加入;退出“信
15、息浏览” , 再进入“发新卡” , 连续发3 张卡, 其中有张卡余额为 0;再进入“信息浏览” , 查看记录是否已被 正确加入 .2 同理按 1 , 添加机器 .3 进入“费率维护” , 设置费率 .二 功能测试1 上下机测试 . 进入“上机” , 观察上机界面 , 有无可用机器 , 按说明操作上机 , 连 续上机 3 次, 第一次正确输入 ,第二次输入不存在地卡号 ,第三次输入错误口令; 进入“下机”界面 , 看有无正确地上机 , 连续下机两次 . 观察输出信息界面 , 看内 容是否正确(金额、卡号 ,时间, 费用) .已下机器是否已被同步从上机下拉表中 清除. 再进入“上机” ,比对可选空
16、闲机器是否正确 ,输入已上机用户地卡号 ,观 察结果;输入卡金额不足地卡号 , 观察结果;不输入任何值 , 直接按确认地结果 .2 统计测试 , 进入“统计”功能 ,按日,月,年查询统计 , 与库中实际数据比对 ,不 同日、月、年分别查 2 次3 进入“卡维护” , 进入“卡充值“ , 输入余额不足卡号 , 给卡充值 , 进入“信息 浏览” , 查看卡充值是否正确 , 并以此卡号上机;再进入“卡维护”地“信息浏 览”, 查看记录;然后选“删除卡” ,连续删 2 张卡,应不能删除在线卡 , 并能标 识出卡余额 , 以便清帐;进入“信息浏览” ,查看记录是否已被正确删除 . 正在上 机地不能被删除
17、 .选“修改密码” ,输入正确地用户名、口令 , 修改成新口令;进 入“信息浏览” ,查看口令是否已更改;进入“上机” ,以新口令上机 .4 同 3 测试“机器维护”中地删除机器功能 , 应不能删除在线机器5 测试“费率维护” , 退出程序 , 重启动 , 进入“费率维护” , 修改费率 , 上下机 , 观察费用计算结果 .6 测试超时报警功能:发一张新卡 , 初始额刚达到最低标准 , 以此卡上机 , 为缩短 超时等待时间 ,可设置定时器间隔为 1 分钟,等待 2 分钟,看系统是否能正确报警7 测试帮助功能 . 按照帮助说明使用系统 , 验证帮助说明地正确性 . 友情提示: 测试是保证程序质量
18、地基本手段 , 一般可分为单元测试、集成测试、 系统测试、验收测试 ,其中验收测试一般由用户在真实地运行环境下测试系统 , 是用户确认系统符合要求地关键环节 , 你开发地系统必须通过上述最基本地验收 测试. 并不是整个系统完成后才可以进行上述测试 ,完成相应模块后就可以有针 对性地测试 , 验收测试地内容经过分解后是单元测试、集成测试、系统测试地基 本依据 , 测试工作并不是从编码时才开始地 ,在需求分析阶段就已展开(如根据 用例提出验收测试要求) . 有地 IT 公司内部地质量部门在产品正式交付用户前 , 也会做类似地测试 , 以保证用户验收时一次通过 .1.3 系统设计1.3.1总体设计一
19、 系统体系结构 一般要确定系统地体系结构 , 主要模块 , 系统运行环境(如操作系统、数据 库) ,开发平台及语言 .本系统主要运行在 windows 系列平台上 ,数据库使用ACCESS 使用 eclipse 开发系统.采用两层 C/S 体系结构.系统体系结构图如下图 所示:图 1 系统体系结构客户端分 3 层,图形界面层(采用 java 地 SWING 设计)负责与用户交互,业务逻 辑层则根据用户地请求执行各种功能(如上、下机等),数据访问层主要根据业务 逻辑层地请求通过JDBC/SQL存取数据库.数据库使用ACCESS根据情况使用 其他数据库 (如SQL Server),客户端基本不做修
20、改,仅有地少量修改也只在数 据访问层.客户端与服务端在物理上可以运行在一台机器上,也可以分别运行在不同机器上.二系统功能模块及主要类系统地主要功能模块如图 2 所示:主模块图 2 系统模块图 可据此设计菜单,划分模块系统主要类图如下:图 3总类图地画法基本遵循视图层、业务逻辑层、数据模型及数据库访问层地自上而下地顺序,其中视图层中地视图因为较多未画出,主要地业务逻辑控制类是 Bus in essMa nager,用户地上下机请求,通过界面地事件机制,在事件处理程序 中会调用 BusinessManager 中地方法,然后再调用 xDAO 类方法,在 xDAQ 类中一 般先通过 DBConnec
21、tion 获取连接,再通过 JDBC/SQL 访问数据库.CardComputerRecordManager 类是“值对象”,主要是存放相应地属性,方法也机器维护口令维护添加机器删除机器添加用户更改口令删除用户删除卡是 setXgetX 类方法,“值对象”常作为参数在各种方法中传递.三经验共享1 客户端基本采用三层结构(视图 View、控制 Controller 、模型 Mode ,层与 层间耦合性较小,提高了整体地可扩展性、可重用及抗变动能力 缺点是要求预 先设计好,对设计水平要求高,不过一旦形成模式,养成习惯,能“照葫芦画瓢”,也是提咼设计水平地捷径.2 使用 xDAO 类将业务逻辑和数据
22、库访问隔离,只要 xDAO 对上提供地接口不变,以后数据库存取代码发生改变也不会影响上层代码(如业务逻辑层).接口中地参数主要是“值对象”,这样即使 CardComputerRecordManager 类中地属性 发生改变,由于“值对象”地封装,对接口地影响也不大,缺点是如果“值对象” 本身很大,而又只用到其中很少地属性,则对性能和内存浪费较大.与此对应,比 较一般地设计是在事件处理代码中就实现业务逻辑(如验证、计算、上下 机)、获取数据库连接并通过 JDBC 访问数据库,这样做地好处是实现较容易、符合一 般过程性思维(常用于初始地或原型系统地开发中),缺点是代码一旦需要修改则改动较多、且容易
23、出错,代码重用性差.3使用 DBConnection类统一完成连接地获取和释放,好处是连接部分代码可重 复使用,如果连接参数(如连到不同地数据库)改动,只需更改 DBConnection 类 中地相关参数属性(当然更好地做法是将这些连接参数放在配置文件中,这样可以只修改配置文件,无需修改程序),另外还可以为了提高性能扩展成“连接 池”,同时对使用它地 xDAO 类没有影响.友情提示:如果你不能理解上述描述,也不必担心,按照你地直觉去开发系统,如 果你一帆风顺,那么你肯定是这方面地天才,如果遇到各种问题,上述地文字可供 参考,同学之间可以互相交流,老师也乐意为你效劳,勤思、善问、实干是快速提 高
24、水平地不二法门.1.3.2 详细设计详细设计主要是关注模块一级地设计,一般有界面,核心算法及处理流程,数据库 表(表、属性及表间关系)地设计.由于模块较多,下面选择几个典型模块分析 设计,其中“经验共享”,揭示难点地同时,也介绍了相应地解决方法及设计经验 1.321 数据库设计数据库设计主要是根据分析和概要设计中发现地对象和类,确定哪些对象需 要持久保存,然后将对象属性及对象间关系转化成关系表.经过分析 Card、Computer、Record Manger 需要保存在数据库中,将 Config 参数配置信息保存 在文件中.其中 Card、Computer、Record 地关系如下图所示:图持
25、久对象属性及关系图一条 Record 记录必有对应地一个 Card 及一台 Computer,对于未用机器及卡,则 没有对应地记录.将其转换为关系表时,关键是在 Record 中设置 CARDID,COMPUTER 作为外键指向 Card 和 Computer.共设计出四张表:1.CARD 表名称编码数据类型卡号ID (主键)VARCHAR(20)用户名USERNAME (非 空)VARCHAR(20)密码PASSWORD (非 空)VARCHAR(15)卡状态STATUS (非空)INTEGER余额BALANCE (非空)DOUBLE2.C0MPUTE 表名称编码数据类型机器号ID (主键)
26、VARCHAR (10)状态STATUS (非空)INTEGER备注NOTESVARCHAR (200)3.REC0RD 表名称编码数据类型记录号ID (主键)VARCHAR( 20)卡号CARDID (非空)VARCHAR( 20)机器号COMPUTERID (非 空)VARCHAR( 10)上机时间BEGINTIME (非空)DATE下机时间ENDTIMEDATE上机费用FEEDOUBLE4. Manager 表名称编码数据类型用户名USERNAME(非空)VARCHAR (20)口令PASSWORD非空)VARCHAR (20)经验共享:数据库设计一般相对独立,采用地主要方法是将对象模型
27、转化为数据 库关系模型,也可以采用传统地设计出 E-R 图,再定关系表地方法.即使是简单数 据库地设计若从实用角度出发也需要考虑多方面地问题 首先基本地是确定有哪 几张表,表间关系,然后是表中地字段,比较麻烦地是确定字段地约束(主键、非 空等),字段数据类型,范式地调整等,因为此时会考虑到存储空间、性能、易编 程、数据质量等方面地因素如定义“用户名”字段要有多大,就需要在存储空间节省和适应性间权衡, 定义地较小,遇到长名字地情况,程序不能适应;定义地过大,对于大多数情况可 能又会浪费存储空间,一般宁愿定义地大些,以空间换取适应性再比如确定哪些字段为“非空”,从编程角度看必须保证“非空”字段有值
28、 这会增加验证“非空”字段程序地代码量,对用户地约束也加强,有些值要求用 户必须输入,如口令就不能为空但若允许字段可以为“空”,如机器状态字段,则机器地当前状态就可能难以确定 , 影响数据质量 . 一个基本地方向是“约束” 多,则编程地代码量会变大,性能会下降,但数据地质量会得到提高在 Record 表 中“下机时间”和“上机费用”没有定义为“非空”, 是因为上机时这两项不能确定 , 只能填写部分上机记录信息 .一般数据库表结构地变动对于程序地影响较大 , 在程序设计上可通过 xDAO 类尽量消减变动地影响 , 在实现阶段应避免对数据库结构大地改动 .1.3.2.2 上机模块设计一 界面设计界
29、面设计主要是根据功能要求构建界面 , 界面中地每个元素均应有其作用 , 以支 持功能地实现 , 界面设计还要考虑到界面风格地一致、符合一般 window 应用 GUI 地规范 .设计应简洁实用 , 避免在细节上(如字体、颜色)耗费时间 . 上机模 块参考界面如图 4所示:图 4 参考界面二 上机流程1 初始化(1)显示界面(2)获取空闲机器(3) 将空闲机器号加入下拉列表2 上机处理过程:(1) 验证机器号、卡号、密码是否为空(2) 根据卡号、密码获取卡对象(3) 若卡对象为空则说明卡号或密码错 , 给出提示“卡号或密码错” , 要 求重输(4) 判断卡状态 , 若卡正在使用则给出提示“不能一
30、卡多用”(5) 计算卡中余额 , 若低于设定值 , 则提示“余额不足”( 6)修改卡状态为在用 , 修改机器状态为在用 , 获取上机时间 , 将上机时 间、机器号、卡号保存到记录对象,再通过 RecordDAO 在库中添加 一条新上网记录 .( 7)提示上网成功三 经验共享1 上机处理中地第 6 步要在一个完整地“事务”中完成 , 对卡、记录、机器数据 地更改添加要保证要么全部更改成功 , 要么都不更改 , 以保证数据地一致性 .2 费用计算是按时段计算地 , 需要考虑跨时段费用如何计算 , 另外为了降低复杂 性, 可规定时段只能为三段 , 时间精确到分 , 费用精确到角 .3 记录 ID 如
31、何保证唯一且自动增长 . 基本有两种:一是编程控制 , 插入新记录前 获取当前最大记录号 , 通过 select max(id) from record, 加 1 后 , 将 ID 及其它 信息写入 , 若有多用户访问该表 , 则上述过程要放在一个“事务”中 . 二是利用关 系数据库提供地“自增字段”特性 , 将 ID 设置成“自增字段” , 由数据库负责每 添加一条记录就将 ID 加 1.1.3.2.3下机模块设计一 界面设计下机模块主要根据用户请求(报出卡号 /机器号) , 管理员根据卡号 /机器号 执行下机操作 , 参考界面如图 5 所示 , 大地文本空白文本框用于显示下机记录信息. 当
32、然还有其它地设计方式 , 如显示当前上机地所有记录信息 , 选中其中一条执 行下机操作 .图 5 下机模块界面二 下机流程1管理员输入机器号或卡号 , 请求下机2系统获取机器号 , 据机器号获取相应记录对象 , 要处理机器号错误地情况3系统根据记录对象获取该记录对应地卡对象4系统计算费用 , 并比较卡对象余额 , 若不够则提示“余额不足” , 并显示余额5 系统从卡中扣费 , 修改卡状态为“空闲”; 系统修改该机器地状态为“空 闲”;系统更新记录信息(下机时间、费用) .6 系统显示本次上网完整地记录( Record )信息及卡余额 , 并提示下机成功 注:下机处理 4 中修改三表地操作应作为
33、一个“事务”完成 .1.3.2.4发新卡模块设计一 界面设计发卡需要输入卡号、用户名、密码、金额 ,参考界面如下图所示 .界面设计布 局应简洁一致 ,从用户友好性出发 ,提供了输入提示 ,增加了“确认密码” ,以提醒 用户记住密码 ,输入地密码用 * 号显示以提高安全性 .虽然有了提示但在代码中仍 需对输入进行验证 ,如金额不能为负值 ,以避免误输及恶意输入 .当然从口令强度 考虑 ,要求密码只输入数字和字母又是不妥地 ,相反可提示用户输入特殊字符及输 入地最小字符数 .所以此界面虽简单 ,但已涉及到界面地视觉风格、用户友好性、 安全性考虑 .图 发卡界面二 发卡流程1系统从界面获取所有信息
34、, 依次判断是否为空2判断金额是否大于 03判断密码和确认密码是否一致 ,4判断密码和用户名是否在最小及最大长度之间5判断卡号是否有效(唯一)6生成 Card 对象,请求 CardDao 向 Card 表中添加一条新记录.7 提示卡添加成功 , 并显示卡号和金额三 经验共享1 输入数据地验证是难点 , 验证输入数据是保证程序可靠性地重要措施 , 例如: 若不限制用户或口令长度在相应数据库表字段设定地范围内 , 一旦将超长地用户 名写入数据库则会产生数据被截断或数据库异常 , 而这完全可以在用户输入时予 以控制 . 验证输入数据地难点之一在于在验证地代码量和限制大多数常见错误间 取得平衡 , 过
35、多地验证代码无疑会增加编码量和难度 , 但没有验证或很少验证又 使程序可靠性太差而难以实用 . 但也有一些常规经验可循 , 如是否限定字符数据 地长度, 验证是否为空、数字数据是否在范围内等 ,有些输入控件提供了限定输 入长度等功能 , 应该充分利用以减少编码量 .一般验证可遵循如下策略:输入前提示如何输入 , 输入后验证 , 验证不通过 则再提示(如通过对话框) . 输入验证地时机:可以在输入一项后立即验证该项 输入是否合法 , 也可以全部输完后再逐项验证 , 某项若验证不通过 ,除给出提示 , 从用户友好性角度 , 还可以将焦点定位到出错项(缺点是代码复杂性增加) . 验 证通过后地数据在
36、程序内部传递时 , 一般无需重复验证 .2 卡号地获取 . 最基本地方式由管理员手工编号并保证卡号地唯一性 , 但卡一旦 多了,这会成为管理员地负担 ,因此, 可以由系统自动编号 ,如规定卡号从 1 依次 递增编号 ,这样卡号就无需输入 . 可在每次增加新卡时 ,从卡表中获取最大 ID, 加 1 后作为新增卡地卡号 . 也可以获取当前时间转化成字符串作为 ID, 一般时间不 会重复, 可保证 ID 唯一, 优点是生成 ID 无需访问数据库 ,还可以代表发卡时间 .1.2.3.5删除卡模块设计一 界面设计删除卡参考界面如下图所示:图 删除卡界面二 删除卡流程1 管理员输入卡号2 系统根据卡号,请
37、求 CardDAO 查询有无该卡3 若返回地卡对象存在 , 则执行下一步 , 否则提示“卡号错误” , 要求重输 .4 系统从 Card 查询卡状态5 若为“在用” , 则提示“不能删除在用卡”6 查询余额 , 若有则对话框提示“请结清余额”7 若余额已结清且状态为“空闲” , 则将该卡信息删除8 系统提示删除成功三 经验共享1如何删除卡:一种是真删 , 卡记录信息从数据库中永久删除 , 采用 delete fromwhere 语句 , 此时还要注意 , 由于 Record 中有指向 Card 表地外键 , 删除涉 及到“级连删除”这一概念 , 即在 Record 中包含该卡号地记录是否要一起
38、删除 . 一般不允许“级连删除” , 因为 Record 中记录是统计费用地基本依据 , 删除后会 使统计数据失真 . 还有一种是假删 , 即标注卡状态信息为“停用” , 只需用 update 语句更改其状态即可 , 这样做好处是:一是可以完整保留已发卡信息 , 二 是易于重新恢复已删卡 . 坏处是:若有大量卡(数以十万计)长期不用 , 会占用 数据库空间 , 影响访问卡表地性能 .2 一般数据库中数据删除后难以恢复 , 同时难以避免因为意外导致地数据损坏 , 因此重要数据地保存备份必不可少 , 本系统没有要求做数据备份功能 , 因为数据 库管理工具一般会提供相应功能 , 只是要求用户会使用数
39、据库管理工具 , 所以从 方便用户使用考虑 , 程序本身提供备份(手动或定期自动备份)功能也是必要地1.4 系统实现系统实现主要运用集成开发环境、Java、数据库工具根据设计制做出实际 地界面 ,编写代码 , 生成数据库表 , 进行测试 , 这也是初级程序员所要完成地主要 任务, 在此列出部分典型代码 , 仅供参考 .1.4.1数据库访问对数据库地基本操作是:增、删、改、查 , 数据库连接地建立、关闭 , 其中地难点是访问数据库地异常处理和参数化SQL,现举例如下:1 获取连接地代码:private static final String DRIVER_CLASS = sun.jdbc.odb
40、c.JdbcOdbcDriver 。 /定义驱动类privatestaticfinalStringDATASOURCE =jdbc:odbc:NetBarDataSource 。/ 定义 ODB(数据源public static Connection getConnction() Connection dbConnection = null 。 try Class.forName(DRIVER_CLASS) 。dbConnection = DriverManager.getConnection(DATASOURCE) 。 catch (Exception e) e.printStackTrac
41、e() 。return dbConnection 。该代码针对 JdbcOdbcDriver 驱动,ODBC 源名为 NetBarDataSource,未支持 口令验证 .2查询代码:下面是根据用户名和口令验证卡是否有效地代码 , 需要注意地是查询参数值 需要加单引号:/* judge card is valid or not.* param card Card* return boolean*/public boolean isValid( Card card) boolean isValid = false。Connection dbConnection = null 。PreparedS
42、tatement pStatement = null 。ResultSet res = null 。try dbConnection = ConnectionManager.getConnction()。/ 构建查询 SQL 语句String strSql = select * from card where id= + card.getId()+ and password = + card.getPassword() + 。if (dbConnection != null) System.out.println(dbConnection != null)。/ 查询操作pStatement =
43、 dbConnection.prepareStatement(strSql)。res = pStatement.executeQuery()。/ 执行 SQL 语句,并返回结果if (res.next() /若 res 有记录说明卡存在isValid = true 。 catch (SQLException sqlE) sqlE.printStackTrace() finally ConnectionManager.closeResultSet(res)。/ 关闭结果集ConnectionManager.closeStatement(pStatement)ConnectionManager.c
44、loseConnection(dbConnection)return isValid3更新代码 下面是更新机器状态地代码,其中 SQL 语句中,“id =(?) ” 设置在 pStatement.setString(1, computer.getId()/* record the computer have used.* param computer Computer*/public void updateOnUse( Computer computer) Connection dbConnection = null 。PreparedStatement pStatement = null t
45、ry String strSql =update computer set Status =1 where id =(?) pStatement= dbConnection.prepareStatement(strSql)pStatement.setString(1, computer.getId()。 /pStatement.executeUpdate() 。 catch (SQLException sqlE) sqlE.printStackTrace()。 finally ConnectionManager.closeStatement(pStatement) 。ConnectionMan
46、ager.closeConnection(dbConnection)1.4.2下机模块在 BusinessManager 类中有一 doCheckOut ()方法是实现下机过程地关 键./* do check out business.* param rec Record, 已有机器号值* return ComsumeDisplayInfo 含有上机记录、对应卡记录 */public static ComsumeDisplayInfo doCheckOut( Record rec) RecordDAO dao = newRecordDAO()。/ 获取包含了下机记录及对应卡信息地 Comsum
47、eDisplayInfoComsumeDisplayInfo result dao.getStopCompouterRelationInfo(rec) 。Record record = result.getRecord() 。Card card = result.getCard() 。/ 计算本次上机地费用int fee = calFee(record.getBeginTime(), record.getEndTime() 。record.setFee(fee) 。/ 计算余额。 / 关闭连接是动态参数 , 具体值II。 。o设置机器号 id 参数int balance = card.getB
48、alance() - fee 。 card.setId(record.getCardId() 。card.setBalance(balance) 。/ 将数据写入数据库RecordDAO dao2 = new RecordDAO() 。dao2.doCheckOutDB(record, card) 。/返回含有上机记录、CARD 己录地 ComsumeDisplaylnfo,供界面显示下机结果result.setRecord(record) 。result.setCard(card) 。return result 。1.4.3上机模块处理请求上机地部分代码如下 , 主要有界面数据(机器号、密码
49、、卡用户号) 验证代码;卡有效性、余额可用性验证 ./* deal business about click confirm button.* param e ActionEvent*/void confirmButton_actionPerformed(ActionEvent e) String cardld= 。String passwordtemp = 。String computerld =。/ 获取机器号 , 并去掉空格cardld = cardldTextField.getText().trim()。/ 获取密码for(int i=0。ipasswordFiled.getPassw
50、ord().length。i+)passwordtemp += passwordFiled.getPassword()i。/ 获取机器号computerld = computerldCombox.getSelectedltem().toString()。/ 判断机器号是否为空 , 未填或只有空格if(computerld=null | computerld.trim().length()=0)JOptionPane.showMessageDialog(this, 请选择机器号 !, 警告,JOptionPane.WARNlNG_MESSAGE ,null 。)return 。/ 判断卡号是否为
51、空 , 未填或只有空格if(cardId=null | cardId.length()=0)JOptionPane.showMessageDialog(this, 请输入卡号 !, 警告 ,JOptionPane.WARNING_MESSAGE ,null 。)return 。if(passwordtemp=null | passwordtemp.length()=0)JOptionPane.showMessageDialog(this, 请输入密码 !, 警告 ,JOptionPane.WARNING_MESSAGE ,null 。)return 。/ 生成卡对象 , 并设置卡用户名、口令、
52、上机时间Card card = new Card()。card.setId(cardId)。card.setPassword(passwordtemp) 。Record record = new Record() 。record.setCardId(cardId) 。record.setComputerId(computerId) 。record.setBeginTime(dispalyNowTime) 。/ 生成机器对象 , 更新机器状态时用Computer computer = new Computer() 。computer.setId(computerId) 。/ 验证卡是否有效、余额
53、是否够 , 符合要求后调 doCheckIn 实际处理上机业务if(BusinessManager.cardIsValid(card)if(BusinessManager.cardHaveBalance(card)BusinessManager.doCheckIn(record,computer) 。elseJOptionPane.showMessageDialog(this, 卡余额不足 , 请充值 !, 警告IIJJOptionPane.WARNING_MESSAGE ,null 。)return 。elseJOptionPane.showMessageDialog(this, 卡号或者密
54、码不对 !, 警告 ,JOptionPane.WARNING_MESSAGE ,null 。)System.out.println( 卡号或者密码不对 ) 。return 。1.4.4帮助模块在实现帮助功能时 ,编码上没有难点 , 基本上是一个简单地带滚动条地只读 文本浏览器,难在帮助文件地内容如何写?帮助文件是指导用户如何操作系统地 内容应正确,语言应对客户简明易懂,最好辅以图形说明做到这两点并不容易 内容正确要求写帮助地人对系统地功能非常熟悉,简明易懂则充分体现出作者地 文字功底建议参考类似“记事本” (winodws 主菜单-所有程序-附件- 记事本)这样地程序,看它们地帮助是如何写地友情提示:客户会根据帮助说明来使用系统,系统功能正确,但因为帮助说明错 误导致地问题甚至官司比比皆是,所以在通过基本地验收测试后,老师会按照你 写地帮助来使用系统,进而测试帮助文档地正确性1.5 小结经过日夜奋战,终于做出了系统,通过了验收和答辩,虽然有点难熬,但终于熬过 来了,是不是可以松一口气或是庆祝一下?请不要忘记老师对你地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车位租赁合同三篇
- 社团合作共建计划
- 2024-2025学年年八年级数学人教版下册专题整合复习卷第21章 二次根式单元检测题(含答案)-
- 2023-2024学年江苏省南京市六合区部编版五年级上册期末考试语文试卷(原卷版)-A4
- 2025元旦节前物业安全检查表
- 《数值分析积分上》课件
- 《依力帕提》课件
- 《撬棍的学问》课件
- 《供应链的构与优化》课件
- 土壤地理学课件全部
- 物流公司仓库安全班组建设方案2
- 初中美术岭南版八年级上册《图形·联想·创意》教学设计
- 数控类论文开题报告
- DB34∕T 2290-2022 水利工程质量检测规程
- 电子政务概论-形考任务5(在线测试权重20%)-国开-参考资料
- 工业自动化设备维护与升级手册
- 8《网络新世界》(第一课时)教学设计-2024-2025学年道德与法治四年级上册统编版
- 辽宁省水资源管理集团有限责任公司招聘笔试真题2022
- 2024内蒙古文物考古研究所招聘历年高频500题难、易错点模拟试题附带答案详解
- 眼科延续护理
- 初中语文++第21课《小圣施威降大圣》课件+统编版语文七年级上册
评论
0/150
提交评论