(精品论文)java课程设计任务书2010--参考论文_第1页
(精品论文)java课程设计任务书2010--参考论文_第2页
(精品论文)java课程设计任务书2010--参考论文_第3页
(精品论文)java课程设计任务书2010--参考论文_第4页
(精品论文)java课程设计任务书2010--参考论文_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告目录1 背景介绍21.1 业务背景21.2 技术背景22、需求分析22.1功能需求分析22.2 业务对象分析63、系统设计63.1 总体设计63.2 详细设计8四、系统实现144.1 数据库访问144.2 下机模块164.3 上机模块17五、总结与展望18六、参考文献191 背景介绍1.1 业务背景“海之星”网吧,是一个小型网吧,以前是人工记账,现需要开发一个简单的网吧计费管理系统。原人工管理的主要过程如下:客户在门口服务台,出示上机卡,若是新客户则先发新卡;管理员先查询是否有空机器,若有则根据上机卡号查到该卡对应的记录(账簿),若有余额,则分配一个空闲的机器号给客户,客户根据机器号对号入座,管理员记下客户卡号、上机机器号、上机时间。客户下机要到门口的服务台,请求下机,管理员根据当前时间、上机时间及费率计算出本次上机费用,并记录,同时将费用从卡余额中扣除,若费用不够则需充值。原手工系统主要有如下缺点:(1)手工记账,管理员工作量大,且易出错;(2)超时超费使用不能及时发现。因此需要开发一个简易计费管理软件,取代人工记账方式,由软件统一管理记录上下机、计费、上机卡、机器情况,提供简单统计功能,超时超费提醒功能等。1.2 技术背景本系统要求使用java技术开发,使用数据库(如ACCESS,SQLServer)保存数据,集成开发环境可使用支持可视化GUI界面设计的主流工具(如eclipseant beanjbuilder)。开发者应有java程序设计语言、SWING基本GUI组件、文件使用、JDBC存取数据库、使用一种集成开发工具的基本知识和技能。系统采用两层C/S体系结构,C端负责通过GUI与管理员交互、处理业务逻辑及存取数据库,S端主要是数据库系统。系统分析设计主要采用面向对象的分析设计方法。2、需求分析2.1功能需求分析系统需求分析的主要任务是从用户角度考察系统应具有哪些功能及非功能性需求,对于网吧计费管理系统,用户主要是指系统管理员,系统的主要功能是:登录、上机、下机、卡管理(发卡、删卡、充值、查询)、机器管理(添加机器、删除机器、查询状态、修改状态),统计功能(日、月费用统计),口令管理(添加用户、删除用户、修改口令),参数设置(时段费率),使用帮助。主要使用流程是:管理员登录,根据客户请求上机,根据客户请求下机。主要功能的用例(use case)描述如下:一、上机1、管理员输入空闲机器号,上网人输入口令、卡号,请求上机。2、系统验证卡号,检查卡中余额,卡状态3、系统获取当前系统时间作为上机开始时间4、系统修改该机器的使用标志为“在用”,卡标志为“在用”。5、系统记录上机信息(卡号、机器号、上机时间)6、系统提示上机成功若1中无空闲机器又请求上机的,系统提示“没用空闲机器” ;若2中卡验证未通过,提示“无此卡号”,余额不足,提示“余额不足”,卡状态为“在用”,则提示“不能一卡多用”。二、下机1、管理员选择被使用的机器号,请求下机2、系统获取系统当前时间作为下机时间;3、系统计算费用;4、系统显示应缴费用5、系统记录下机时间和此次费用;6、系统从卡中扣费,修改卡状态为“空闲”;7、系统修改该机器的状态为“空闲”;8、系统显示本次上机记录信息,提示下机成功三、登录1、管理员输入用户名和密码,请求进入系统2、系统验证用户名和密码3、系统显示主界面若一次验证不通过,则提示再输入一次,仍不通过则系统退出。四、卡维护卡有三种状态:停用、空闲、在用。(一)发新卡:1、管理员输入卡号(保证卡号唯一)2、管理员输入卡初始金额3、上网人输入用户名、口令4、管理员请求添加新卡5、系统保存卡号、金额、用户名和密码,状态为“空闲”6、系统提示添卡成功,显示卡号及金额,以便核对。7、管理员将系统生成的有卡号、用户名的纸卡给上网人。(二)充值:1、管理员输入卡号2、系统显示该卡信息(卡号、用户名、余额、状态)3、管理员核对后,输入充值金额4、系统计算并保存该卡总金额5、系统显示充值后的卡信息(卡号、用户名、余额、状态)。(三)查询卡信息:1、管理员输入卡号或请求察看所有卡信息2、系统查询卡信息(卡号、用户名、余额)并显示(四)删除卡:1、管理员输入卡号2、系统查询卡余额及状态3、若余额已结清且状态为“空闲”,则将该卡信息删除4、系统提示删除成功若有余额或“在用”则不能删除 五、机器维护机器有三种状态:停用、空闲、在用。(一)添加机器:1、管理员输入机器号,请求添加2、系统验证机器号是否重复3、系统添加机器记录信息(机器号、状态为“空闲”)4、系统提示添加成功(二)删除机器:1、管理员输入机器号,请求删除2、系统删除相应机器信息3、系统提示删除成功(三)查询机器状态:1、管理员输入机器号或请求察看所有机器信息2、系统查询并显示机器信息(机器号和状态)并显示六、管理员口令管理(一)添加用户1 管理员输入用户名、密码和确认密码,请求添加2 系统验证用户是否是新用户,两次输入的密码是否相同3 系统添加用户、密码信息4 系统提示添加成功(二)删除用户1 管理员输入用户名、密码2 系统验证用户名、密码是否正确3 系统删除用户名、密码记录4 系统提示删除成功(三)修改密码1管理员输入用户名、密码,请求修改密码2 系统验证用户名、密码是否正确3 管理员输入新密码、及确认密码4 系统保存新密码5 系统提示修改成功七、统计管理1、管理员输入起始时间,结束时间,请求按日月年汇总2、系统查询上网记录,计算、统计出时间段的总费用、人次、总上机时间等信息。3、系统显示上述信息八、参数管理(一)时段费率设置: 0:系统显示当前设置 1:管理员设置时间段(时、分)及对应的费率,请求保存 2:系统保存设置 3:系统提示保存成功(二)超时报警定时器间隔设置九、超时超费报警1、设置定时器为周期触发方式,触发间隔由参数获得,默认为30分钟2、定时器到时,系统查询当前正在上机的记录,计算其上机时间及费用,计算其卡中余额是否低于最低费用。3、系统提示已超费卡号、机器号,及超的费用本系统除了功能性需求,还有易用性、可靠性、安全性等要求,可以在实现上述功能性需求的基础上,进一步实现完善非功能性要求。2.2 业务对象分析根据上面的主要用例描述,可以分析出系统的主要业务对象,它是设计阶段核心类图的基础(不一定一一对应),这些对象必须实际存在,其行为和属性应与问题领域相关:1、上网卡: 主要维护上网卡的相关信息。卡号、密码、余额、卡用户名、卡状态(在用、空闲、停用) 2、机器:主要维护上网吧计算机的相关信息。机器号、使用标志(在用、停用、空闲)、备注3、费用记录:记录每次上机的信息。记录编号、卡号、机器号、开始上机时间,下机时间、费用 4、费率记录:起始时间、终止时间,费率5、管理员:利用14完成各种业务操作。3、系统设计3.1 总体设计一、系统体系结构一般要确定系统的体系结构,主要模块,系统运行环境(如操作系统、数据库),开发平台及语言。本系统主要运行在windows系列平台上,数据库使用ACCESS,使用eclipse开发系统。采用两层C/S体系结构。系统体系结构图如图3-1所示:图形界面SWING业务逻辑数据访问(JDBC)数据库ACCESSSQL客户端服务端 图3-1 系统体系结构图客户端分3层,图形界面层(采用java的SWING设计)负责与用户交互,业务逻辑层则根据用户的请求执行各种功能(如上、下机等),数据访问层主要根据业务逻辑层的请求通过JDBC/SQL存取数据库。数据库使用ACCESS,可根据情况使用其他数据库(如SQL Server),客户端基本不做修改,仅有的少量修改也只在数据访问层。客户端与服务端在物理上可以运行在一台机器上,也可以分别运行在不同机器上。二、系统功能模块及主要类系统的主要功能模块如图2所示:主模块登录上机下机帮助卡维护发卡充值查询删除卡机器维护添加机器删除机器查询口令维护添加用户更改口令统计参数维护删除用户图3-2 系统模块图可据此设计菜单,划分模块。系统主要类图如下:图3-3 系统类图总类图的画法基本遵循视图层、业务逻辑层、数据模型及数据库访问层的自上而下的顺序,其中视图层中的视图因为较多未画出,主要的业务逻辑控制类是BusinessManager,用户的上下机请求,通过界面的事件机制,在事件处理程序中会调用BusinessManager中的方法,然后再调用xDAO类方法,在xDAO类中一般先通过DBConnection获取连接,再通过JDBC/SQL访问数据库。CardComputerRecordManager类是“值对象”,主要是存放相应的属性,方法也是setXgetX类方法,“值对象”常作为参数在各种方法中传递。3.2 详细设计详细设计主要是关注模块一级的设计,一般有界面,核心算法及处理流程,数据库表(表、属性及表间关系)的设计。由于模块较多,下面选择几个典型模块分析设计,其中“经验共享”,揭示难点的同时,也介绍了相应的解决方法及设计经验。3.2.1 数据库设计数据库设计主要是根据分析和概要设计中发现的对象和类,确定哪些对象需要持久保存,然后将对象属性及对象间关系转化成关系表。经过分析Card、Computer、Record、Manger需要保存在数据库中,将Config参数配置信息保存在文件中。其中Card、Computer、Record的关系如下图所示:图3-4持久对象属性及关系图一条Record记录必有对应的一个Card及一台Computer,对于未用机器及卡,则没有对应的记录。将其转换为关系表时,关键是在Record中设置CARDID,COMPUTERID作为外键指向Card和Computer。共设计出四张表:表3-1 CARD 表 名称编码数据类型卡号ID(主键)VARCHAR(20)用户名USERNAME(非空)VARCHAR(20)密码PASSWORD(非空)VARCHAR(15)卡状态STATUS(非空)INTEGER余额BALANCE(非空)DOUBLE 表3-2 COMPUTER 表名称编码数据类型机器号ID(主键)VARCHAR(10)状态STATUS(非空)INTEGER备注NOTESVARCHAR(200)表3-3 Manager 表名称编码数据类型用户名USERNAME(非空)VARCHAR(20)口令PASSWORD(非空)VARCHAR(20)表3-4 RECORD 表名称编码数据类型记录号ID(主键)VARCHAR(20)卡号CARDID(非空)VARCHAR(20)机器号COMPUTERID(非空)VARCHAR(10)上机时间BEGINTIME(非空)DATE下机时间ENDTIMEDATE上机费用FEEDOUBLE3.2.2 上机模块设计一、界面设计界面设计主要是根据功能要求构建界面,界面中的每个元素均应有其作用,以支持功能的实现,界面设计还要考虑到界面风格的一致、符合一般window应用GUI的规范。设计应简洁实用,避免在细节上(如字体、颜色)耗费时间。上机模块参考界面如图3-5所示:图3-5 参考界面二、上机流程 1、初始化(1) 显示界面(2)获取空闲机器(3) 将空闲机器号加入下拉列表 2、上机处理过程:(1)验证机器号、卡号、密码是否为空(2)根据卡号、密码获取卡对象(3) 若卡对象为空则说明卡号或密码错,给出提示“卡号或密码错”,要求重输(4)判断卡状态,若卡正在使用则给出提示“不能一卡多用”(5)计算卡中余额,若低于设定值,则提示“余额不足”(6)修改卡状态为在用,修改机器状态为在用,获取上机时间,将上机时间、机器号、卡号保存到记录对象,再通过RecordDAO在库中添加一条新上网记录。(7)提示上网成功3.2.3 下机模块设计一、界面设计下机模块主要根据用户请求(报出卡号/机器号),管理员根据卡号/机器号执行下机操作,参考界面如图3-6所示,大的文本空白文本框用于显示下机记录信息。当然还有其它的设计方式,如显示当前上机的所有记录信息,选中其中一条执行下机操作。图3-6 下机模块界面二、下机流程1、管理员输入机器号或卡号,请求下机2、系统获取机器号,据机器号获取相应记录对象,要处理机器号错误的情况3、系统根据记录对象获取该记录对应的卡对象4、系统计算费用,并比较卡对象余额,若不够则提示“余额不足”,并显示余额5、系统从卡中扣费,修改卡状态为“空闲”; 系统修改该机器的状态为“空闲” ;系统更新记录信息(下机时间、费用)。6、系统显示本次上网完整的记录(Record)信息及卡余额,并提示下机成功 注: 下机处理4中修改三表的操作应作为一个“事务”完成。3.2.4 发新卡模块设计一、界面设计发卡需要输入卡号、用户名、密码、金额,参考界面如下图所示。界面设计布局应简洁一致,从用户友好性出发,提供了输入提示,增加了“确认密码”,以提醒用户记住密码,输入的密码用*号显示以提高安全性。虽然有了提示但在代码中仍需对输入进行验证,如金额不能为负值,以避免误输及恶意输入。当然从口令强度考虑,要求密码只输入数字和字母又是不妥的,相反可提示用户输入特殊字符及输入的最小字符数。所以此界面虽简单,但已涉及到界面的视觉风格、用户友好性、安全性考虑。图3-7发卡界面二、发卡流程1、系统从界面获取所有信息,依次判断是否为空2、判断金额是否大于03、判断密码和确认密码是否一致,4、判断密码和用户名是否在最小及最大长度之间5、判断卡号是否有效(唯一)6、生成Card对象,请求CardDao向Card表中添加一条新记录。7、提示卡添加成功,并显示卡号和金额三、经验共享1、输入数据的验证是难点,验证输入数据是保证程序可靠性的重要措施,例如:若不限制用户或口令长度在相应数据库表字段设定的范围内,一旦将超长的用户名写入数据库则会产生数据被截断或数据库异常,而这完全可以在用户输入时予以控制。验证输入数据的难点之一在于在验证的代码量和限制大多数常见错误间取得平衡,过多地验证代码无疑会增加编码量和难度,但没有验证或很少验证又使程序可靠性太差而难以实用。但也有一些常规经验可循,如是否限定字符数据的长度,验证是否为空、数字数据是否在范围内等,有些输入控件提供了限定输入长度等功能,应该充分利用以减少编码量。一般验证可遵循如下策略:输入前提示如何输入,输入后验证,验证不通过则再提示(如通过对话框)。输入验证的时机:可以在输入一项后立即验证该项输入是否合法,也可以全部输完后再逐项验证,某项若验证不通过,除给出提示,从用户友好性角度,还可以将焦点定位到出错项(缺点是代码复杂性增加)。验证通过后的数据在程序内部传递时,一般无需重复验证。2、卡号的获取。最基本的方式由管理员手工编号并保证卡号的唯一性,但卡一旦多了,这会成为管理员的负担,因此,可以由系统自动编号,如规定卡号从1依次递增编号,这样卡号就无需输入。可在每次增加新卡时,从卡表中获取最大ID,加1后作为新增卡的卡号。也可以获取当前时间转化成字符串作为ID,一般时间不会重复,可保证ID唯一,优点是生成ID无需访问数据库,还可以代表发卡时间。3.2.5 删除卡模块设计一、界面设计删除卡参考界面如下图所示:图3-8删除卡界面二、删除卡流程1、管理员输入卡号2、系统根据卡号,请求CardDAO查询有无该卡3、若返回的卡对象存在,则执行下一步,否则提示“卡号错误”,要求重输。4、系统从Card查询卡状态5、若为“在用”,则提示“不能删除在用卡”6、查询余额,若有则对话框提示“请结清余额”7、若余额已结清且状态为“空闲”,则将该卡信息删除8、系统提示删除成功四、系统实现系统实现主要运用集成开发环境、Java、数据库工具根据设计制做出实际的界面,编写代码,生成数据库表,进行测试,这也是初级程序员所要完成的主要任务,在此列出部分典型代码,仅供参考。4.1 数据库访问对数据库的基本操作是:增、删、改、查,数据库连接的建立、关闭,其中的难点是访问数据库的异常处理和参数化SQL,现举例如下:1、获取连接的代码:private static final String DRIVER_CLASS = sun.jdbc.odbc.JdbcOdbcDriver; /定义驱动类 private static final String DATASOURCE = jdbc:odbc:NetBarDataSource; /定义ODBC数据源 public static Connection getConnction() Connection dbConnection = null; try Class.forName(DRIVER_CLASS); dbConnection = DriverManager.getConnection(DATASOURCE); catch (Exception e) e.printStackTrace(); return dbConnection; 该代码针对JdbcOdbcDriver驱动,ODBC源名为NetBarDataSource,未支持口令验证。 2、查询代码:下面是根据用户名和口令验证卡是否有效的代码,需要注意的是查询参数值需要加单引号: public boolean isValid( Card card) boolean isValid = false; Connection dbConnection = null; PreparedStatement 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 = 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.closeConnection(dbConnection); /关闭连接 return isValid; 3、更新代码下面是更新机器状态的代码,其中SQL语句中,“id =(?)”是动态参数,具体值设置在pStatement.setString(1, computer.getId() public void updateOnUse( Computer computer) Connection dbConnection = null; PreparedStatement pStatement = null; try String strSql = update computer set Status =1 where id =(?) ; ; pStatement = dbConnection.prepareStatement(strSql); pStatement.setString(1, computer.getId(); /设置机器号id参数 pStatement.executeUpdate(); catch (SQLException sqlE) sqlE.printStackTrace(); finally ConnectionManager.closeStatement(pStatement); ConnectionManager.closeConnection(dbConnection); 4.2 下机模块在BusinessManager类中有一doCheckOut()方法是实现下机过程的关键。/* * do check out business. * param rec Record,已有机器号值 * return ComsumeDisplayInfo含有上机记录、对应卡记录 */ public static ComsumeDisplayInfo doCheckOut( Record rec) RecordDAO dao = new RecordDAO();/获取包含了下机记录及对应卡信息的ComsumeDisplayInfo ComsumeDisplayInfo result = dao.getStopCompouterRelationInfo(rec); Record record = result.getRecord(); Card card = result.getCard(); /计算本次上机的费用 int fee = calFee(record.getBeginTime(), record.getEndTime(); record.setFee(fee); /计算余额 int balance = card.getBalance() - fee; card.setId(record.getCardId(); card.setBalance(balance);/将数据写入数据库 RecordDAO dao2 = new RecordDAO(); dao2.doCheckOutDB(record, card);/返回含有上机记录、CARD记录的ComsumeDisplayInfo,供界面显示下机结果 result.setRecord(record); result.setCard(card); return result; 4.3 上机模块处理请求上机的部分代码如下,主要有界面数据(机器号、密码、卡用户号)验证代码;卡有效性、余额可用性验证。/* * deal business about click confirm button. * param e ActionEvent */ void confirmButton_actionPerformed(ActionEvent e) String cardId=; String passwordtemp = ;String computerId =;/获取机器号,并去掉空格cardId = cardIdTextField.getText().trim();/获取密码 for(int i=0;ipasswordFiled.getPassword().length;i+) passwordtemp += passwordFiled.getPassword()i;/获取机器号 computerId = computerIdCombox.getSelectedItem().toString();/判断机器号是否为空,未填或只有空格 if(computerId=null | computerId.trim().length()=0) JOptionPane.showMessageDialog(this,请选择机器号!,警告, JOptionPane.WARNING_MESSAGE ,null ); return ;/判断卡号是否为空,未填或只有空格 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 ;/生成卡对象,并设置卡用户名、口令、上机时间Card card = new Card();

温馨提示

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

评论

0/150

提交评论