《数据库综合实验报告格式模版(3000字).doc》由会员分享,可在线阅读,更多相关《数据库综合实验报告格式模版(3000字).doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中南民族大学计算机科学学院数据库综合实验报告题 目 汽车租赁管理系统年 级2010级专 业软件工程指导教师 徐科 陈幼均 小组成员(姓名学号) (马寄10065052) (闪珊珊10065019)(佘潇10065013) 实验类型 综合型2012 年 月 日前言一、 目的1、目前市场上相关系统并不多,毕竟汽车租赁行业也算是个新兴的产业,但由于它的飞速发展,市场也看到了它的设计价值,不过大都大同小异,一般市场上的汽车租赁管理系统多是针对汽车租赁的业务处理的一种系统,其它管理层面也有涉及,只是比较简略,一般包括基本设置、综合管理、业务处理、查询报表、统计排行以及系统管理等模块,优点在于业务处理模块
2、比较结合实际,所以对于日常的汽车租赁管理系统已经不成问题,但缺点也是存在的。如汽车照片的存储仍然采取相对路径的存储,用户密码的安全性做得不够,系统的扩展性也不是很全等。2、我们决定利用所学知识设计一个汽车租赁管理系统,主要是针对汽车租赁的基本设置、综合管理、业务处理、查询报表、统计排行以及系统管理进行全面管理的系统,而并不再是只注重于业务处理,并且我们将解决一些问题,如汽车照片用二进制进行存取,用户密码进行双重加密,基本设置模块更好地体现系统的扩展性,报表的打印,sql语句利用视图跟存储过程,以增强系统的访问安全性,试图完善汽车租赁管理系统的安全性跟扩展性,让其更人性化,更好地服务于汽车租赁公
3、司。3、数据库是一门理论性和实践性都很强的面向实际应用的课程,它是计算机科学技术中发展最快的领域之一。数据库综合实验要求学生在学习完程序设计语言、数据结构、操作系统等课程后,综合利用所学计算机软件知识完成一个数据库应用系统的设计。是一个重要的教学实践环节,是对学生所学知识的掌握和应用程度的一个全面地、综合地考察。4、在学生初步具备了一定的软件程序设计基础上,本课程设计针对日常应用中的实际问题,要求学生完成一个相对完整的数据库应用系统,培养学生运用数据库理论知识和数据库技术解决实际应用问题的能力,巩固和加深所学理论知识,初步掌握一个完整数据库应用系统的开发过程和方法。加深对数据库系统、软件工程、
4、程序设计语言的理论知识的理解和应用水平;通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。培养相关专业专业本科学生科学研制、开发数据库应用系统的基本能力,为计算机在本专业领域的应用奠定基础。二、 项目背景概述1、项目实施环境(注:包括开发、运行环境)运行环境:windows7系统开发环境:netbeans,mysql2、项目人员及其分工马寄 详细设计、概要设计、测试闪珊珊 详细设计、概要设计、测试佘潇 需求分析 查阅资料、测试李继强 需求分析 查阅资料、测试3、项目实施计划此次实验项目自10月25日起开始进行开发(1)、第一周进行
5、需求分析a 、组员一起通过市场调研,了解想要租车的客户的需求。b 、然后用word列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,可以初步定义好少量的界面。c 、组员一起深入了解和分析需求,根据经验和需求用word或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。(2)、第二周进行概要设计a 、小组成员到图书馆借阅相关参考书籍b 、对系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理进行概要设计等,为软
6、件的详细设计提供基础。(3)、第三周进行详细设计a 、在概要设计的基础上,对进行软件系统的详细设计。在详细设计中,描述实 现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计,以便进行编码和测试。保证软件的需求完全分配给整个软件。详细设计必须足够详细认真,能够根据详细设计报告进行编码。大概进行一周半左右的时间。(4)、第四周到第六周进行编码a 、编码比较任务量比较大,需要借阅相关参考书籍b 、根据软件系统详细设计报告中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目
7、标系统的功能、性能、接口、界面等方面的要求。(5)、第7周进行测试并写出实验报告三、需求分析1、概述1. 1、管理员权限管理员登录之后可以进行客户信息管理、员工信息管理、操作管理、租赁合同部分、损坏报告和车辆管理共六个部分。1. 2、客户权限客户登录之后可以查询那些车辆可以租借,那些不可以租借,还可以查询自己的租借记录。2、功能需求管理员权限比较多,登录之后可以进行客户信息管理、员工信息管理、操作管理、租赁合同部分、损坏报告和车辆管理共六个部分。1.1. 客户信息管理部分a、对来公司租车或与公司有长期租车业务关系的个人/单位进行登记和管理。b、只有把客户的信息存入数据库之后才能向该客户提供其他
8、业务服务。c、需要存入的客户的信息主要有客户的姓名、住址(省、市、区、街道、门牌号)、电话号码等。1.2. 员工管理部分a、记录员工的各项信息,如姓名、住址(省、市、区、街道、门牌号)、电话号码等。1. 3操作管理部分a、管理员可以对各个功能模块进行查询、删除、增加、修改更新等操作1.4 租赁协议查询部分a、可以查询所有的租赁协议。b、可以按条件查询某一范围内的租赁协议,也可以输入精确条件定位一个租赁协议1.5 损坏报告部分a、可以对用户租借的车辆进行损坏检查,以及相应的赔偿等等b、当客户把车还回公司后,公司员工需要对车进行检修,以便发现由客户造成的对车辆的损害。c、公司也规定对车辆定时地做一
9、些检修工作,以便发现并解除车辆身上的安全隐患。 d、每一次车辆检修的结果,都生成一个“损坏报告”并存入数据库。e、损坏报告中一个很重要的字段是“损坏程度(损坏星级)”。损坏程度由一个15的数值表示,值越大,表示车辆的受损程度越深。1. 6车辆管理部分a、该部分可以实现增加车辆、修改车辆信息、报废车辆、查询车辆的操作。b、查询车辆信息时,可以不输入任何条件直接查询,这样得到的是所有的车辆的信息。 c、可以输入车辆制造厂、车型等条件缩小查询结果集。d、可以修改车辆的所属部门,以实现车辆的部门间调度。e、可以修改车辆的日租金,以便适应物价的变化。f、在损坏报告中对车辆的损坏程度做出评级。车辆报废部分
10、可以把那些损坏最严重的车筛选出来,再进行报废处理(即把车辆信息从数据库删除)。g、不可以对损坏程度未达到最严重的车进行删除操作。数据字典1.1. 用户=使用系统的人用户(user)=用户编号+用户名+用户级别+密码+注册时间1.2. 客户=租车的人客户(client)= 客户编号+客户姓名+客户所在街道+城市+省份+邮编+电话+电子邮件1.3. 员工=描述员工职能员工(employee)=员工编号+员工姓名+性别+出生日期+员工家庭所在街道+员工家庭所在成城市+员工家庭所在省份+工作电话+职位+月薪+雇佣日期+所属部门1.4. 部门=描述部门职能部门(outlet)=部门编号+部门所在街道+部
11、门所在市+部门所在省份+部门邮编+部门电话+部门经理1.5. 车辆=描述车辆属性车辆(vehicle)=车辆编号+制车场+车型+车外壳颜色+车容量+日租金+所属部门1.6. 损坏报告=描述车辆当前状态损坏报告(faultreport) =车辆编号+检查日期+检查时间+评语+损坏程度+检查员工编号3其它需求(包括安全、性能需求)3.1、综合管理a、此模块主要对客户以及汽车的具体信息进行管理,分为客户管理和及汽车管理。 b、汽车管理:管理员可以对租赁公司现已拥有的汽车的具体信息进行查看,修改信息或者删除档案(当汽车报废或不再租赁时),也可添加新购进的汽车的具体信息,以便更快地投入租赁市场,方便客户
12、了解,以便做出更好的租赁选择。c、普通客户管理:管理员对客户的资料可以进行查看。3.2、业务管理a、此模块提供对汽车日常业务进行管理,包括汽车预租/出租/续租,汽车维修,还车结算,催车还交以及事故登记。b、汽车预租:员工可以根据客户需求帮其预租汽车,可以查看及修改预租的相关信息,但是不可以删除客户之前已经预租的汽车,管理员可以修改以及取消客户之前已经预租的汽车,可以查看已经预租汽车的情况等。c、汽车出租:员工可以根据客户的需求出租汽车,可以查看及修改出租的相关信息,但也不可以删除已经出租的汽车,而管理员则可以修改,查看以及删除出租汽车的相关情况。当汽车出租时可以打印相关合同,双方签订合同。d、
13、汽车续租:在客户出租汽车的还车时间三天之前可前往汽车租赁公司办理汽车续租手续,员工在检查完汽车的相关情况后,可根据实际情况调整还车时间以便达到续租的目的。e、汽车维修:员工可以进行记录汽车相关维修情况,修改,删除维修记录。 f、还车结算:员工对来还车的客户进行查询,统计其它费用(如事故费,罚金费等),算出总费用,收款后返回客户押金以及客户抵押件等。g、催车还交:员工可以根据出租汽车的还车时间,催促那些还车时间快到了的客户及时还车以免交罚金。h、事故登记:员工应该根据所出租的汽车发生的事故的具体情况登记入表,以便以后查询,也可修改或删除信息。 3.3、查询报表a、此模块分为加油记录查询,维修记录
14、查询,汽车预租查询,汽车出租查询,还车结算查询,事故记录查询,单车租赁查询,汽车资料查询以及客户资料查询。b、此模块可对客户,员工以及汽车相关业务的情况进行查询,对查询到的相关信息可以生成相应的excel文件以及打印报表,尤其是汽车资料查询还可以生成显示照片的报表等。3.4、客户需要提前预订车辆。a、车辆出租由于下述原因而变得复杂。b、需要提交司机的信息:全名,生日,驾照号码,驾照等级。 c、要记录第三方付款人。d、确认用户是否签订碰撞损失免责书,责任保险,个人事故保险。e、签订租车协议。协议号,客户名,租赁类型,车辆序号,车辆价格,汽车离店时间,里程,预期换车的时间等信息。 3.5、还车由于
15、下述原因而变得复杂。a、油箱不满要计油费到附加费用中。b、若汽车出现事过(受损,客户伤亡等),确认用户是否签订碰撞损失免责书,责任保险,个人事故保险,没有签订的要计入相应的费用到附加费用中。c、登记归还日期,时间,里程等信息。 d、系统计算相应的收费数目。满足上述需求的系统还需要要包括以下几个模块。 (1)系统用户管理模块。(2)日常业务管理模块。 (3)车辆信息管理模块。 (4)客户会员管理模块。四、数据库设计本系统数据库名称为test,数据库中包括:登录信息表(login)车辆信息表(vehicle)员工信息表(employee)客户信息表(client)租赁协议报告表(rentalagr
16、eement)损坏报告表(faultreport)批发商表(outlet)。各表数据结构如下:1、er模型根据需求分析的结果,我们设计规划出的实体有如下:employee实体,client实体,faultreport实体,rentalagreement实体,outlet实体,vehicle实体各实体的e-r图描述如下:2、客户管理部分e-r图根据需求分析给出的数据流图,参照数据字典中的详细描述, 2.1、给出客户管理部分的分e-r图:2. 2、租车管理部分e-r图根据需求分析给出的数据流图,参照数据字典中的详细描述,给出租车管理部分的分e-r图:2.3 车辆检修管理部分e-r图2.4 租赁协议
17、查询部分e-r图3. 5、 车辆购入、查询、信息修改部分e-r图3、数据需求:系统外部:实物或信:处理4、数据流图:4.1、数据流图1图2 顶层数据流图4.2、数据流图2:图3 0层数据流图4.3、数据流图3图4 1层数据流图a4.4、数据流图4图5 一层数据流图b4.5、数据流图5图6 一层数据流图c4.6、数据流图6图7 二层数据流图a4.7、数据流图7图8 二层数据流图c4.8、数据流图8图9 二层数据流图d4.9、数据流图10图10二层数据流图e五、应用程序设计1、应用程序框架设计 1.1、系统结构此汽车租赁管理系统主要实现6个大的功能模块:综合管理、业务管理,基本设置,查询报表、统计
18、排行、系统维护。每个模块有分成多详细的功能子模块。详情如下图3-1所示:2、功能模块设计 2.1、登录界面a、当输入密码之后可以正常进入b、当输入错误的用户名之后,界面如图所示4. 2、管理员功能能模块 a、主界面包括“车辆信息”、“员工信息”、“客户信息”、“合同信息”、“损坏记录”五个模块。新添车辆错误信息记录错误信息车辆修好之后,删除损坏信息删除损坏信息成功新增员工信息员工信息增加成功新添客户信息添加成功删除客户信息删除客户信息成功新添车辆车辆信息添加成新合同增加添加合同信息成功六、调试与分析1、当输入汽车信息的时候,结果却不能正确显示,如图,结果没有显示,插入不成功调试分析原因:数据库
19、新建的关于损坏记录的表(faultreport)与代码中的表的名字不一样。导致虽然能运行,但不能正确插入。改了名字之后,正常插入。总结1、这次课程设计我们组设计的是一个汽车租赁管理系统,通过这次可视化编程课程设计,我了解了一个完整的数据库系统设计的步骤,掌握了租车公司汽车租赁系统的业务流程及管理,巩固了我在课堂上所学的理论知识,更进一步的了解了面向对象编程的基本思想,并且对可视化编程工具及sql server2005软件的应用有了更进一步的掌握,掌握了界面设计、c#语言编写代码设计各功能模块的步骤,并学会了vs2008及用sql server2005建立的数据库连接的代码设计,开拓了自己的知识
20、面,同时也让我看到了自己的不足,很多东西单独用可以做出来,可是连贯起来就出现了很多错,还有很多不足,需要努力。2、当然这次设计在学哥学姐以及同学的帮助下也有了很大的收获和体会,见证了一个系统的诞生,虽然不复杂,但它可以实现一些基本的功能,很有成就感,是理论与实践的一次完美的结合,而且也学到很多课本上没有涉及到的知识,对编程经验也起到了累积作用,也是第一次了解了一个系统诞生所要经过的流程,前期、设计、完成、后期一个也不能少,不像平时只用编一个程序,至于需求和维护没有涉及,这次课程设计就像一次工作的体验,从头到尾不遗余力的把它完成。体会就是自己在这次设计当中遇到了很多问题,一开始的时候根本无从下手
21、、什么都不会,但是通过和小组成员的讨论,查阅资料、网上查询等有了基本俩凭借,遇到的问题也和其他同学进行交流、探讨,问题得以一一解决。总之,在这次程序设计中,我学会到了很多以前没有了解到的知识,当然系统还有很多不足,比如车辆信息管理的删除操作没有实现等,这还需要在以后的学习中慢慢改进。参考文献 mysql技术内幕,姜承尧著 机械工业出版社mysql 4从入门到精通 (美) ian gilfillan著 电子工业出版社mysql高级配置和管理 卢湘江, 李向荣, 晏子编著 清华大学出版社netbeans 6.0程序开发技术详解 许勇, 王黎等编著 清华大学出版社netbeans ide 6高级编程
22、 (美) adam myatt等著 清华大学出版社附录1、操作数据库代码2、4、import java.sql.drivermanager;5、import java.sql.sqlexception;6、import java.sql.statement;7、8、/*9、 * to change this template, choose tools | templates10、 * and open the template in the editor.11、 */12、13、/*14、 *15、 * author 马寄 闪珊珊16、 * time 2012-11-16 13:3517、
23、* for do database18、 */19、public class dodatabase 20、 static resultset rs;21、 static statement stmt;22、23、 public void connectmysql()/对数据库进行连接24、 try 26、 / 加载mysql jdbc驱动程序 /27、28、29、30、 / class.forname(org.gjt.mm.mysql.driver); system.out.println(成功添加驱动包!); catch (exception e) system.out.print(添加驱动
24、失败!);31、 32、 try 33、 java.sql.connection connect = drivermanager.getconnection(34、 jdbc:mysql:/localhost:3306/test, root, 654869);35、/ 连接url为 jdbc:mysql/服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码 s36、 system.out.println(成功连接数据库!);37、38、 stmt = connect.createstatement();39、40、为表的名称41、42、 / system.out.println(pas
25、sword);43、 catch (exception e) 44、 system.out.print(获取数据出错!);45、 46、47、48、 49、 /*执行sql语句的同时,返回游标rs,把结果放到rs中50、 * 参数:sql51、 * return rs;52、 */53、 public resultset do_sql(string sql) throws sqlexception54、55、 rs = (resultset) stmt.executequery(sql);56、 return rs;57、 58、59、 /*登录时候对数据库的操作函数60、 * 无参数61、
26、* return null;62、 */63、 public void get_login_id_password() throws sqlexception/64、65、 rs = (resultset) stmt.executequery(select id,password from login );66、67、 68、 /*管理员注册69、 * 操作:对数据库login表进行插入操作70、 * 参数:id,password71、 * return null;72、 */73、 public void insert_id_password(string id,string passwor
27、d) throws sqlexception 74、75、 stmt.executequery(insertlogin(id,password)values(+id+,+password+) );76、 77、78、 /*判断车辆的出租状态 / into79、 * 操作:对合同表和车辆表的连接查询80、 *参数:无81、 * return rs;返回rs集合82、 */83、 public resultset judge_car_state() throws sqlexception84、85、 rs=(resultset) stmt.executequery(select rentalno,
28、vehicle.vehlicenseno from rentalagreement,vehicle where rentalagreement.vehlicenseno=vehicle.vehlicenseno; );86、 while(rs.next()87、88、 89、 return rs;90、 91、92、2、员工信息import java.sql.sqlexception;import java.util.logging.level;import java.util.logging.logger;/* to change this template, choose tools |
29、templates* and open the template in the editor.*/* author 马寄闪珊珊* time 2012-11-23 16:23* for 对错误报告进行插入和更新数据*/public class fault_info_ui extends javax.swing.jframe /* creates new form fault_info_ui*/public fault_info_ui() /* this method is called from within the constructor to initialize the form.* wa
30、rning: do not modify this code. the content of this method is always* regenerated by the form editor.*/suppresswarnings(unchecked)jlabel1 = new javax.swing.jlabel();jlabel2 = new javax.swing.jlabel();jlabel3 = new javax.swing.jlabel();jlabel4 = new javax.swing.jlabel();jlabel5 = new javax.swing.jlab
31、el();jtextfield1 = new javax.swing.jtextfield();jtextfield2 = new javax.swing.jtextfield();jtextfield3 = new javax.swing.jtextfield();jtextfield4 = new javax.swing.jtextfield();ok = new java.awt.button();exit = new java.awt.button();setdefaultcloseoperation(javax.swing.windowconstants.dispose_on_clo
32、se);jlabel1.settext(车辆编号);jlabel2.settext(检查日期);jlabel3.settext(评价);jlabel4.settext(员工号);jlabel5.setfont(new java.awt.font(宋体, 0, 18); / noi18njlabel5.settext(请仔细输入错误报告信息);ok.setlabel(ok);ok.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(java.awt.event.actionevent
33、evt) okactionperformed(evt););exit.setlabel(exit);exit.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(java.awt.event.actionevent evt) exitactionperformed(evt););javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane(); getcontentpane().setlayou
34、t(layout);layout.sethorizontalgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup().addgap(37, 37, 37).addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgap(59, 59, 59).addgroup(layout.createparallelgroup(
35、javax.swing.grouplayout.alignment.trailing, false)javax.swing.grouplayout.alignment.leading)javax.swing.grouplayout.alignment.leading)javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, 194, short.max_value).addcontainergap(javax.swing.grouplayout.default_size,short.max_
36、value).addgroup(javax.swing.grouplayout.alignment.trailing,layout.createsequentialgroup().addgap(0, 0, short.max_value).addgap(19, 19, 19).addgroup(javax.swing.grouplayout.alignment.trailing,layout.createsequentialgroup().addcontainergap(119, short.max_value).addgap(83, 83, 83);layout.setverticalgro
37、up(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading).addgroup(layout.createsequentialgroup().addcontainergap().addgap(66, 66, 66).addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default
38、_size, javax.swing.grouplayout.preferred_size).addgap(24, 24, 24).addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addgap(21, 21, 21).addgroup(layout.cr
39、eateparallelgroup(javax.swing.grouplayout.alignment.baseline)javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addgap(24, 24, 24).addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)javax.swing.grouplayout
40、.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size).addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading, false).addgap(0, 75, short.max_value);java.awt.dimension screensize = java.awt.toolkit.getdefaulttoolkit().getscreensize(); se
41、tbounds(screensize.width-416)/2, (screensize.height-488)/2, 416, 488);/ </editor-fold>private void okactionperformed(java.awt.event.actionevent evt) / todo add your handling code here:if(operate_ui.state.equals(insert)/执行对数据库的插入操作string sql=insert into+ +jtextfield1.gettext().tostring()+,+jtex
42、tfield2.gettext().tostring()+, +jtextfield3.gettext().tostring()+ +, +jtextfield4.gettext().tostring()+);try dodatabase.stmt.execute(sql); catch (sqlexception ex) logger.getlogger(car_info_ui.class.getname().log(level.severe, null, ex);if(operate_ui.state.equals(update)string sql=update faultreport
43、set+vehlicenseno=+jtextfield1.gettext().tostring()+,+datachecked=+jtextfield2.gno=+jtextfield4.gettext().tostring()+wherevehlicenseno=+jtextfield1.gettext().tostring()+;try dodatabase.stmt.execute(sql);/执行对数据库的更新操作 catch (sqlexception ex) logger.getlogger(car_info_ui.class.getname().log(level.severe
44、, null,ex);jtextfield1.settext(null);jtextfield2.settext(null);jtextfield3.settext(null);jtextfield4.settext(null);private void exitactionperformed(java.awt.event.actionevent evt) / todo add your handling code here:fault_info_ui.this.dispose();/ variables declaration - do not modifyprivate java.awt.
45、button exit;private javax.swing.jlabel jlabel1;private javax.swing.jlabel jlabel2;private javax.swing.jlabel jlabel3;private javax.swing.jlabel jlabel4;private javax.swing.jlabel jlabel5;public static javax.swing.jtextfield jtextfield1;public static javax.swing.jtextfield jtextfield2;public static javax.swing.jtextfield jtextfield3;public static javax.swing.jtextfield jtextfield4;private java.awt.button ok;/ end of variables declaration3、读表代码import java.sql.sqlexception;import javax.swing.table.defaulttablemodel;/* to change this templa
限制150内