1、编号: 商丘工学院毕业论文(设计)题目: 在线车辆租赁系统的设计与实现 系 别 : 信息与电子工程学院 专 业 : 软 件 技 术 姓 名 : 邵 香 香 成 绩 : 指导教师 : 王 艳 丽 摘 要租赁汽车走进社区,走进生活,成为当今生活中不可缺少的一部分。随着汽车租赁业的发展,加强管理和规范管理促进汽车租赁业健康发展的重要推动力。汽车租赁业为道路运输车辆一种新的融资服务形式、广大人民群众一种新的出行消费方式和汽车生产厂家一种新的汽车营销渠道,在我国迎来良好的发展机遇,但同时也确实有许多问题的需要研究和探讨。本系统主要完成对车辆租赁的管理,包括添加、删除、修改,查询以及用户管理等五个方面。系
2、统可以完成对各类信息的浏览、查询、添加、修改、删除等功能。系统的核心是添加、修改和删除三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成添加或删除操作时系统会自动地完成车辆租赁信息的修改。查询功能也是系统的核心之一。此外,系统有完整的用户添加、删除和密码修改功能。本论文包括需求分析、系统设计、程序设计、系统测试及存在的问题等方面,较为系统地介绍了“在线车辆租赁系统”课题开发的整个过程。关键词:车辆租赁;数据库;管理系统目 录一 绪 论11.1 前言11.2 系统开发环境及开发平台介绍11.2.1 系统开发环境11.2.2 系统开发平台简介1二 系统分析32.1 任务描述32.2 UM
3、L用例图简介3三 系统概要设计63.1 系统的总体框架63.2 数据库的设计63.2.1 数据库SQL Server 2008简介63.2.2 数据库设计93.3 功能模块的设计(前台)113.3.1 用户注册模块113.3.2 用户登录模块133.3.3 用户信息模块143.3.4 汽车列表模块143.3.5 出租车预定模块153.4 功能模块的设计(后台)153.4.1 管理员信息模块153.4.2 用户管理模块163.4.3 分类管理模块173.4.4 车俩管理模块183.4.5 出租车管理模块253.4.6 车辆出租订单管理模块263.4.7 出租车预定订单管理模块28结束语29参考文
4、献30一 绪 论1.1 前言现代科学的发展,使计算机进入几乎一切领域。从科学研究到工农业生产,从企业生产管理到家庭生活,各行各业都广泛地使用着计算机。当今社会的数据信息管理离不开计算机技术的支持。如何实现对数据信息快捷、有效、使用的管理,是软件开发业追求的目标。今天,随着社会生产的发展,人民生活水平的提高,汽车租赁已成为一个极具市场潜力的行业,面对飞速发展的租赁市场,传统的人工租赁管理方式在进行繁多的业务信息处理时显得极不适应,因此,人们对于运用计算机来辅助协调和管理租赁工作的需求正在逐步提高。1.2 系统开发环境及开发平台介绍1.2.1 系统开发环境1.硬件环境(1)CPU:Dual T23
5、90 1.86GHz 1.87GHz;(2)内存:2GB;(3)硬盘:160GB。2.软件环境(1)操作系统:Windows 7;(2)数据库:SQL Server 2008; (3)开发工具集:Visual Studio 2008;(4)浏览器:IE 8.0。1.2.2 系统开发平台简介本系统利用微软的Visual Studio 2008作为系统开发环境,利用SQL Server 2008数据库作为数据存储系统,根据软件工程的思想开发而成。Microsoft Visual Studio2008 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft
6、开发智能客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。Microsoft SQL Server是一种典型的关系型数据库管理系统,可以在许多操作系统上运行,它使用Transact-SQL语言完成数据操作。由于Microsoft SQL Server是开放式的系统,其它系统可以与它进行完好的交互操作。目前最新版本的产品为Microsoft SQL Server 2008,它具有可靠性、可伸缩性、可用性、可管理性等特点,为用户提供完整的数据库解决方案。二 系统分析2.1 任务描述课题以某汽车租赁应用背景,通过研究当前
7、汽车租赁系统的管理现状、存在问题以及现实需求,设计一个针对汽车租赁管理工作的在线汽车租赁系统。该系统能够提供较为完备的功能,除了传统的汽车租赁管理系统所拥有的汽车基本信息管理、日常业务管理之外,还能给客户提供在线租用汽车,并且能宣传企业自身。针对于现在某些时段叫出租车难,打电话叫出租车时间不好把握,网站还会添加出租车预定功能,能让客户在理想的时间内叫到出租车并且到达目的地。2.2 UML用例图简介创建用例图之前首先要确定系统的参与者。(1)在车辆租赁系统中,需要客户的参与。客户可以提出预定请求,预定请求得到确认后可以取车,租赁期限到期后还应该将车辆返还给租赁商。(2)租赁公司的员工则需要处理顾
8、客的预定申请,并在汽车返还时对车辆状况进行检查。(3)出租车司机在接收到员工的通知之后,需要在客户所要求的时间点去客户指定的地点去接客户。由以上分析可以看出,所有的动作都是围绕客户和公司员工进行的。因此,系统中的参与者主要有两大类:客户和员工。1、客户参与的用例图客户参与的用例主要有以下几个,如图7所示。(1)预定车辆用例:客户在取车之前首先应该预定车辆。(2)取车用例:如果客户的车辆预定得到确认,要在确定的日期到前台取车。(3)还车用例:客户应该在规定时间还车。Reserve The carGet the carby callOn the webFill the order formincl
9、udereturn the carReturn with fineextendcustomer图2-1 客户参与的用例图用例说明:(1)Reserve The car:预定车辆的用例。(2)By call:电话预定用例。这是从预定扩展出来的一种用例方式。(3)on the web:网络预定用例。这是从预定扩展出来的一种用例方式。用户可以从该公司的主页上提交预定申请。(4)Fill the order form:填写预定申请表的用例。如果客户在网上预定,必须完成预定申请表。(5)get the car:取车用例。(6)return the car:还车用例。(7)return with fine
10、:缴纳罚金用例。客户如果不能按时还车将缴纳罚金。2、员工参与的用例图员工参与的用例包括以下几个,如图8所示。(1)登陆系统用例:公司员工输入工作号和密码可以登陆系统。(2)处理预定申请用例:普通员工可以处理客户的预定申请。(3)将预定的车交付客户用例。(4)结束租赁业务用例:用户还车,技术人员确认车辆无误后,工作人员可以确定该租赁交易结束。Reserve processGive the car to customerincludeEnd bussinessCheck the car The carQuery customer order record Refuse requestAccept
11、requestincludeincludeincludeSystem login图2-2 员工参与的用例图用例说明:(1)system login:系统登陆用例。(2)reserve process:预定处理用例。(3)Query customer order record:查询客户预定历史记录用例。工作人员可以把客户的历史记录作为判断是否接受客户请求的一个依据。(4)refuse request:拒绝预定请求用例。工作人员可以根据情况拒绝客户的预定请求,例如客户历史记录不良,没有所需车辆等。(5)accept request:接受预定请求用例。工作人员可以在核对客户情况及车辆状态后,可以接受
12、客户的请求。(6)give the car to customer:将预定的车交付客户用例。(7)check the car:检查车辆状况用例。技术人员可以对车辆进行检查,可以确定车辆是否被破坏。(8)end the business:结束租赁业务用例三 系统概要设计3.1 系统的总体框架图3-1 系统后台总体框架3.2 数据库的设计3.2.1 数据库SQL Server 2008简介SQL Server 是一个关系数据库管理系统。 它最初是由Microsoft、 Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后
13、,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNIX 操作系统上的应用。SQL Server 2008 是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本该版本继承了SQL Server 所有版本的优点同时又比它增加了许多更先进的功能具有使用方便可伸缩性好与相关软件集成程度高等优点可跨越从运行Microsoft Windows 7 的膝上型电
14、脑到运行Microsoft Windows 2008 的大型多处理器的服务器等多种平台使用。SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、 Sybase、 Microsoft SQL Server、 Access等等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于
15、它们的系统。但是,标准的SQL命令,比如Select、 Insert、 Update、 Delete、 Create和 Drop常常被用于完成绝大多数数据库的操作。MS SQL Server 就是用的Transact- SQL。SQL语言有着非常突出的优点,SQL语言是非过程化的语言、统一的语言、是所有关系数据库的公共语言。非过程化语言:SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL 语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句
16、的输入。统一的语言:SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。所有关系数据库的公共语言:由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。SQL为许多任务提供了命令,其中包括:查询数据、在表中插入、修改和删除记录、建立、修改和删除数据对象、控制对数据和数据对象的存取、保证数据库一致性和完整性等。以前的数据库管理系统为上述各类操作提供单独的语言,而SQL 将全部任务统一在一种语言中。SQL功能强大,是一种完
17、备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,概括起来,它可以分成以下几组:DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据;DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象;DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。DML组可以细分为以下的几个语句:SELECT:用于检索数据;INSERT:用于增加数据到数据库;UPDATE:用于从数据库中修改现存的数据;DELETE:用于从数据库中删
18、除数据。DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX。数据定义语言DDL:它是用来创建和修改数据库结构的一种语句,包括 Create、Alter和Drop 语句。数据操作语言DML:包括数据查询与数据更新。数据查询主要是由Select语句完成,这一点不再赘述。而数据更新所造成的风险大大超过数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和它们的更改不至
19、于影响其它用户的作业。用于修改数据库内容的 SQL 语句主要有以下三个:Insert,向一个表中加入新的数据行;Update,更改数据库中已经存在的数据;Delete,从一个表中删除数据行;Insert标准语法:INSERT INTO table_name (col1, col2.) VALUES(value1, value2.)。Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自数据库自身的行,在某些特定的状态下,这是非常有用的。多行 Insert 语句为拷贝数据提供了
20、一种紧凑而高效的方法。Update语句用于更新单表中选定行的一列或多列的值。要更新的目标表在语句中定义,Set子句则指定要更新哪些列并计算它们的值。Update语句总是包含Where语句,而且Update语句比较危险,所以您必须明确地认识到Where语句的重要性,Where语句被用来指定需要更新的行。3.2.2 数据库设计表3-1 管理员信息表表名Admin备注管理员表编号01列名类型(精度)默认值允许空约束条件说明Admin_IDInt无NoPK管理员IDAdmin_NameNvarchar(20)无No无登录名Admin_PwVarchar(50)无No无登录密码补充说明Admin_ID
21、规则:自动增长表3-2 用户信息表表名User备注用户信息表编号02列名类型(精度)默认值允许空约束条件说明User_IDInt无NoPK用户IDUser_NameNvarchar(20)无No无用户姓名User_LoginNameNvarchar(100)无No无用户登录名User_PwNvarchar(100)无No无用户密码User_PhoneNvarchar(50)无No无手机User_NumberNvarchar(50)无No无身份证号ReqisterTimedatetimegetdate()No无注册时间补充说明User_ID 规则:自动增长表3-3 汽车类别表表名Category
22、备注汽车类别表编号03列名类型(精度)默认值允许空约束条件说明Category_IDInt无NoPK类别IDCategory_NameNvarchar(50)无No无类别名补充说明Category_ID 规则:自动增长表3-4 汽车信息表表名Car备注汽车信息表编号04列名类型(精度)默认值允许空约束条件说明Car_IDInt无NoPK汽车IDCategory_IDInt无NoFK类别IDCar_NameNvarchar(50)无No无汽车名PriceFloat无No无价格Car_ImgurlNvarchar(100)无No无图片DescriptionNvarchar(1000)无No无描述Q
23、uantityInt无No无库存补充说明Car_ID 规则:自动增长表3-5 订单信息表表名Order备注订单信息表编号05列名类型(精度)默认值允许空约束条件说明Order_IDInt无NoPK订单IDUser_IDInt无NoFK用户IDCar_IDInt无NoFK汽车IDStartTimedatetime无No无取车时间EndTimedatetime无No无还车时间CreateTimedatetimegetdate()No无下单时间StatusInt0No无订单状态TotalFloat无No无价格DepositFloat无No无押金补充说明Order 规则:自动增长 Status的值所代
24、表的含义 0:未取车 1:已取车 2:已还车 2:已还车 3:订单取消表3-6 订单信息表表名Text备注出租车信息表编号06列名类型(精度)默认值允许空约束条件说明Text_IDInt无NoPK出租车IDText_NumberNvarchar(50)无No无出租车牌照Text_PhoneNvarchar(50)无No无司机电话Text_NameNvarchar(50)无No无司机名补充说明Text_ID 规则:自动增长 表3-7 出租车预定订单表表名OrderText备注出租车预定订单表编号07列名类型(精度)默认值允许空约束条件说明OrderText_IDInt无NoPK订单IDUser_
25、IDInt无NoPK用户IDText_IDInt无NoPK出租车IDStatusint无No无订单状态Timedatetime无No无时间AddressNvarchar(200)无No无地址CreateTimedatetimegetdate()No无下单时间补充说明OrderText_ID 规则:自动增长 Status的值所代表的含义 0:未通知司机 1:已通知司机 3.3 功能模块的设计(前台)3.3.1 用户注册模块未注册用户可以浏览网站,查看汽车,但如果想要租用汽车,需要先拥有一个账号并且登录。用户可以通过点击登录页面的注册按钮或者网页右上角的注册按钮进行账号的注册。代码示例:#regi
26、on 获取页面数据 public Model.MDL_User GetModel(Model.MDL_User model) model.User_LoginName = tbUser_LoginName.Text; model.User_Pw = tbUser_Pw.Text; model.User_Number = tbUser_Number.Text; model.User_Name = tbUser_Name.Text; model.User_Phone = tbUser_Phone.Text; return model; #endregion #region 点击注册 protect
27、ed void btnSubmit_Click(object sender, EventArgs e) BLL.BLL_User bll_User = new BLL.BLL_User(); Model.MDL_User mdl_User = new Model.MDL_User(); PubTool.ScriptClass scp = new PubTool.ScriptClass(); try string codes = this.txtVerify.Text.ToString(); if (codes != SessionCheckCode.ToString()/检测验证码是否输入正确
28、 scp.Alert(验证码错误); return; if (bll_User.HasUserLoginName(tbUser_LoginName.Text, -1)/检测登录名是否已被使用 scp.Alert(tbUser_LoginName.Text + 已被使用!); return; bll_User.Add(GetModel(mdl_User); scp.Alert(添加成功!); BLL.Helper.href(login.aspx); catch (Exception ex) scp.Alert(ex.Message); #endregion3.3.2 用户登录模块拥有账号的用户可
29、以在登录界面登录,享受更多的权限操作。代码示例:#region 点击登录 protected void btnLogin_Click(object sender, EventArgs e) PubTool.ScriptClass scp = new PubTool.ScriptClass(); BLL.BLL_User bll_User = new BLL.BLL_User(); Model.MDL_User mdl_User = new Model.MDL_User(); try string codes = this.tbVerCode.Text; if (codes != Session
30、CheckCode.ToString()/检测验证码是否输入正确 scp.Alert(验证码错误!); return; if (bll_User.UserLogin(tbUserName.Text.Trim(), tbPassword.Text.Trim()/检测密码和登录名是否正确 mdl_User = bll_User.GetModelByLoginName(tbUserName.Text); int User_ID = mdl_User.User_ID; SessionBLL.Config.User_IDSession = mdl_User.User_ID; SessionBLL.Con
31、fig.User_NameSession = tbUserName.Text.Trim(); scp.Redirect(User.aspx); else scp.Alert(用户名或密码错误!); catch (Exception ex) scp.Alert(ex.ToString(); #endregion3.3.3 用户信息模块已登录的用户通过点击右上角的用户名或者查看订单,可以修改密码信息和查看历史订单记录,并且能取消未取车的订单。3.3.4 汽车列表模块用户能查看汽车信息,点击左侧导航能筛选出不同类别的汽车信息。已登录的用户通过点击租用进入租用汽车订单界面,填写信息,租用车辆。3.3.
32、5 出租车预定模块已登录的用户可以在该页面填写信息,点击确认按钮,预定出租车。如果用户未登录,则会链接到登录页面。3.4 功能模块的设计(后台)3.4.1 管理员信息模块可以查看所有的管理员账号信息。通过点击添加按钮,可以添加新的管理员账号。点击重置密码,一般管理员可以修改除主管理员外的其它管理员密码,主管理员可以删除自身以外所有管理员账号。添加和修改信息代码示例: #region 获取页面数据 / / 获取页面数据 / / 实体 / 完成修改后的实体 public Model.MDL_Admin GetModel(Model.MDL_Admin model) model.Admin_Name
33、 = tbAdmin_Name.Text; model.Admin_Pw = tbAdmin_Pw.Text; return model; #endregion #region 点击保存 protected void btnFinish_Click(object sender, EventArgs e) BLL.BLL_Admin bll_Admin = new BLL.BLL_Admin(); Model.MDL_Admin mdl_Admin = new Model.MDL_Admin(); PubTool.ScriptClass scp = new PubTool.ScriptClass
34、(); if (whatDo = add) if (bll_Admin.HasAdminName(tbAdmin_Name.Text, -1) scp.Alert(tbAdmin_Name.Text + 已存在,不允许再添加!); return; bll_Admin.Add(GetModel(mdl_Admin); scp.ClickParentPageButton(btnRefresh); scp.AlertAndClose(添加成功!); /执行修改操作 else if (whatDo = update) if (tbAdmin_Name.Text = Admin_Name) mdl_Ad
35、min = bll_Admin.GetModel(Admin_ID); bll_Admin.Update(GetModel(mdl_Admin); scp.ClickParentPageButton(btnRefresh); scp.AlertAndClose(修改成功!); else scp.Alert(您没有权限修改!); #endregion3.4.2 用户管理模块 可以查看所有的用户信息。通过点击添加按钮,可以添加新的用户账号,以便于一些没有拥有账号的客户直接在店里办理租车业务。点击修改,可以修改用户信息。通过点击删除,可以删除一些恶意的用户账号。可以对用户姓名或身份证号进行模糊查询。
36、添加和修改信息代码示例:/ / 获取用户信息列表 / / 查询的信息 / 每页面行数 / 要跳转到的页码 / 分页信息返回数据结构 public PubTool.DB.PageRetClass GetPaperPageList(string search, int pageSize, int goPage) PubTool.DB.PageClass pageClassCs = new PubTool.DB.PageClass(Command.ConfigProvider.CarRentalconn); StringBuilder strSql = new StringBuilder(); st
37、rSql.Append(select *); strSql.Append( from User); strSql.Append( where 1=1 ); if (search.Trim() != ) strSql.Append(and (User_Name like % + search + % or User_Number like % + search + %) ); strSql.Append( order by User_ID asc); return pageClassCs.getPageDataForBase(strSql.ToString(), null, pageSize, goPage); 3.4.3 分类管理模块可以查看所有的车辆分类信息。通过点击添加按钮,可以添加新的车辆类别。点击修改,可以修改类别信息。通过点击删除,可以删除没有属于该类别的车辆的类别信息。删除信息代码示例: #region 多功能事件 protected void btncomand_Click(object sender, EventArgs e) BLL.BLL_Category bll_Category = new BLL.BLL_Category(); PubTool.ScriptClass scp = new PubTool.ScriptClass(); /