汽车维修管理系统研究毕业论文_第1页
汽车维修管理系统研究毕业论文_第2页
汽车维修管理系统研究毕业论文_第3页
汽车维修管理系统研究毕业论文_第4页
汽车维修管理系统研究毕业论文_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

汽车维修管理系统研究毕业论文目录绪论 11引言 21.1汽车维修管理系统 21.2汽车维修管理系统的开发背景和目的 21.3汽车维修管理系统的价值 32程序开发的技术基础 42.1JSP技术 42.2JAVA基础 42.2.1JAVA语言 42.2.2JAVA语言的特点 52.3SSH框架 53系统概要设计 73.1系统设计分析 73.2功能模块需求 73.2.1部门管理 73.2.2员工管理 83.2.3角色管理 83.2.4角色分配 93.2.5零件种类管理 93.2.6零件管理 103.2.7车辆管理 103.3性能要求 114数据库设计 124.1数据库逻辑结构 124.2数据库分析 135汽车维修管理系统的详细设计 185.1用户登录和密码修改的设计 185.1.1用户登录的设计 185.1.2密码修改 185.1.3退出系统 195.2部门和员工管理的设计 195.2.1部门管理的设计 195.2.2员工管理 215.3角色管理和角色分配的设计 215.3.1角色管理 215.3.2角色分配的设计 225.4菜单模块的设计 225.5维修单管理的设计 236汽车维修管理系统的实现 256.1用户登录和密码修改的实现 256.1.1用户登录的实现 256.1.2密码修改的实现 266.1.3退出系统 276.2部门和员工管理的实现 276.2.1部门管理的实现 276.3角色管理和角色分配的实现 286.3.1角色管理的实现 296.3.2角色分配的实现 306.4菜单模块的实现 316.5维修单管理的实现 326.6数据库连接 33总结 35致谢 36参考文献 37绪论从接受毕业设计任务到设计完成用了二个月的时间。整个设计要求对oracle数据库应用系统的基本实现方法以及实现技术、工具有一定的了解。而且,在设计员工培训教材管理子系统时,需要对功能需求考虑完善。虽然我以前也做过类似应用系统的设计开发,但通过本次设计还是受益匪浅。在整个设计过程中,系统的整体构架很早就完成了,接下来的细节问题却使我颇伤脑筋。随着设计程度的不断深入,又遇到了一些早期没有想到的问题。为了解决这些问题,有时还要对几个模块进行大幅度的修改。在设计中,还需要进行细致的测试工作,以发现程序的错误和功能上的不足。由于时间和个人技术关系,本系统还有一些不足和值得改进的地方,比如说查询功能,可以进行多关键字的匹配功能,这样查询的灵活性就会有明显的提高,同时系统的多个地方还可以应用AJAX技术来减轻系统的负担。通过这次毕业设计,提高了我在系统整体设计上的能力,增长了分析、解决问题的经验,对一些知识有了更深一步的掌握。可以说,这次毕业设计既锻炼了我动脑分析问题的能力,又锻炼了我动手解决实际问题的能力,这将对我以后的学习起到不可估量的作用。通过毕业设计这次磨砺,我的能力也提高了。所以它对于我们来说有着十分重要的意义。我会运用从中得到的宝贵经验来指导我今后的学习和工作,不断的实践,不断地学习,让自己变得更加充实自己,更适合于软件行业发展的需要。1引言1.1汽车维修管理系统本系统适合小型汽车维系公司的使用,满足用户的基本需求。系统比较简单,使用简单,系统的流程是,首先对系统进行初始化,插入一些必要的数据,如模块记录,权限记录,部门记录,管理员账户,给管理员分配角色。用管理员登录,再通过管理员进行添加部门,添加员工并给用户分配部门和添加必要的信息。可以在角色管理模块的角色管理添加角色,在添加角色是给角色分配权限。在同角色分配模块给员工分配角色。只有分配了角色的员工才可以使用系统的功能,否则不会看到任何模块。库存物品的管理,系统给物品分类,每个物品属于一个物品种类,每个物品都有库存量,采购价,市场价等属性。1.2汽车维修管理系统的开发背景和目的随着汽车迅速进入千家万户,我国汽车维修业也进入了发展的黄金时期,汽车维修业和汽车保修设备行业在市场的洗礼中开始由传统的劳动密集型向资金技术密集型、由生产型向服务型过渡,形成了利润丰厚的汽车后市场。目前,全国汽车维修行业有一二类企业30多万家,从业人员近300万人,每年都在以10%左右的速度快速增长。国营、集体、股份制、私营、个体、中外合资等多种经济成分的汽车维修企业在共同发展,4S店、特约维修服务站、综合维修厂、快修连锁店、专项维修店等多样化的经营方式各展其长,形成了一个门类齐全、品种多样,分布广泛,服务方便,能够满足不同消费层次需求的汽车维修市场体系。中国汽车市场发展潜力巨大,特别是私人汽车消费,在未来20年将持续高速增长。中国汽车保有量的快速增长将直接带动国内汽车维修保养市的发展,按照一个完全成熟的国际化的汽车市场的利润测算,中国汽车维修保养市场的利润总额约为2153.55亿元。除了汽车电子领域1000亿人民币的市场,汽保行业仍有超过千亿元人民币的市场。中国的汽保行业在未来的5-10年中有着无限广阔的发展空间。与此同时维修企业的计算机管理系统在维修企业的内部管理当中也起到很重要的作用,能在数秒钟内从上万份客户档案中找出你所需要的某个车的报修历史记录,能从上万个零配件中找出某个零配件的库存情况及存放地点,能实现网上订货,方便快捷。在如此激烈的竞争环境中,企业内部管理体系为我们赢得了宝贵的时间。杭州汽车维修行业计算机信息系统是全方位、全天候、全过程的汽车维修服务体系,它加强了汽车维修企业与行业管理部门之间的数据传递和信息交流,提高政府行政效率和工作质量,实现汽车维修行业信息公开共享。信息共享逐步将汽车维修行业计算系统和企业内部管理系统两个自主开发独立运行的信息平台慢慢的紧密联系起来。信息共享是两个信息平台发展的趋势,经过加强提高,今后在汽车维修行业信息网中能方便快捷的了解到企业的基本信息,以及一些特定经营的基本信息和数据,能了解到各个车辆的报修信息,对车辆信息实现透明化管理。车辆信息的开放式管理是个突破性的革命,为车辆的再交易提供了一个理性的依据。随着杭州汽车维修行业计算机信息系统的更深一步的建设,必将更好地服务于汽车维修企业,进一步推动汽车维修行业健康有序的向前发展。1.3汽车维修管理系统的价值该系统可以节约员工的工作时间,提高劳动效率,方便管理,库存量的统计,进而快速进行财务的统计,知道每一笔钱的来龙去脉,及时了解公司的运营状况,可以依据系统的运行结果,改变库存量,和库存结构,及时满足客户的要求。系统对客户进行汽车保养提示,包括短信通知,电话通知和邮件通知。这样可以保持与客户之间的关系,使得客户的回头率增加。达到保持老客户,吸引新客户的效果。该系统可以了解员工的工作效率,每天维修了多少辆车,每辆车的问题,分析,和所用材料,最后用户的满意程度,依据这些信息给员工发放工作,奖金和升职。这样就可以进行有条不紊大的运作。2程序开发的技术基础2.1JSP技术JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠。客户端客户端服务器端发送请求JSP页面是否是第一次次Servlet(JAVA)Java字节码NJVMY编译返回到客户端图2-1jsp运行机制2.2JAVA基础2.2.1JAVA语言Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。2.2.2JAVA语言的特点Java是一个面向对象的编程语言有封装、继承、抽象、多态等4个主要的特点。封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部分的“高内聚、第耦合”,防住程序相互依赖而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰。抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在当前目标有关的方面。继承是类之间的一种关系,提高了软件的可重用性和可扩展性。在定义和实现一个类的时候,可以在一个已经存在的类基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原有的方法使之更适合特殊的需要,这就是继承。多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。对父类的继承和接口的不同实现就是多态的具体表现。2.3SSH框架SSH框架是(struts2、Spring、hibernate)是进行J2EE开发时是常用的框架,struts2工作在表现层(进行页面的跳转),spring作用在业务逻辑层,通过DI(依赖注入)给JavaBean注入属性。Hibernate是一个持久层实现框架,进行对象的保存。Struts2是一个MVCStruts2是Struts的下一代产品,是在struts和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2只有很小的变化。Spring的一个最大的目的就是使J2EE开发更加容易。同时,Spring之所以与Struts、Hibernate等单层框架不同,是因为Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(PlainOldJavaObject)对象提供企业级的服务。JPA全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。3系统概要设计3.1系统设计分析汽车维修管理系统,顾名思义就是汽车维修行业使用的一个系统。使用系统的用户有工作人员、客户和领导。不同的用户对系统有不同的权限,所以要有一个权限管理,实现权限的精确控制,使得每个操作都有权限的控制。汽车维修管理系统是一个公司在使用,因为公司是有不同的部门组成的,不同的部门有不同的职能,而同一个部门的人的权限大多是相同的,所以可以给每个部门赋予一组权限,这就需要角色管理。因为该系统主要是为了提高工作效率和更好的为客户服务,可以需要一个客户管理,就是记录客户的信息和客户的车辆信息。在维修车辆完或者开始维修车辆时需要填写维修信息(维修时间、车辆号牌、维修原因、所用零件等信息)汽车维修管理系统汽车维修管理系统部门员工管理角色管理零部件管理客户管理部门管理员工管理角色管理角色分配零件管理车主管理车辆管理维修单管理零件种类管理图3-1系统功能结构图3.2功能模块需求3.2.1部门管理部门管理负责添加部门,修改部门,删除部门,查询部门,每一个用户都属于一个部门,可以通过部门查看来知道部门有哪些用户。图3-2部门管理3.2.2员工管理部门管理负责添加部门,修改部门,删除部门,查询部门,每一个用户都属于一个部门,可以通过部门查看来知道部门有哪些用户。图3-3员工管理3.2.3角色管理角色管理是创建系统需要的角色,并给角色设置权限,使得角色拥有相应的权限,再把角色赋予用户。用户就用户了该角色的权限。如果某一个模块没有任何权限选择时,该模块就不会显示。图3-4角色管理3.2.4角色分配角色分配是给用户分配角色,可以给用户分配多个角色,用户就拥有了多个角色的所有权限。当没有给用户分配角色时,用户就看不到任何模块,用户基本不能使用该系统。但可以修改密码。角色分配角色分配给用户添加角色给用户删除角色图3-5角色分配3.2.5零件种类管理零件种类管理是对零件进行分类,这样方便库存管理,知道哪种物品有多少。图3-6零件种类管理3.2.6零件管理零件管理是要添加的物品,这些物品是维修的时候给维修车辆替换的零件,每个零件都有详细信息,包刮零件名称,所属种类,价格,库存量等信息。该模块有零件的添加,零件的修改,零件的查询,零件的删除。在添加零件时要给零件选择零件种类。图3-7零件管理3.2.7车辆管理零件管理是要添加的物品,这些物品是维修的时候给维修车辆替换的零件,每个零件都有详细信息,包刮零件名称,所属种类,价格,库存量等信息。该模块有零件的添加,零件的修改,零件的查询,零件的删除。在添加零件时要给零件选择零件种类。车主管理车主管理车主添加车主删除车主查看车主修改图3-8车主管理3.3性能要求硬件环境 CUP:intelcorei5或其他 内存:2G 硬盘:250G软件环境 操作系统:windows98/2000/XP/7开发工具:Myeclipse8.6/PLSQLWeb服务器:Tomcat6.0数据库:Oracle11g4数据库设计4.1数据库逻辑结构数据库设计要遵循一些规则,一个好的数据库满足一些严格的约束和要求。尽量分离各实体对应的表,一个实体对应一个表,搞清楚该实体有哪些属性,对应有哪些字段,以及各实体之间有何种联系。在本系统中,员工与角色是多对多的关系,角色与权限是多对多的关系。E-R图向关系模型的转换:1、E-R图由实体、实体的属性和实体之间的联系三个要素组成2、将E-R图转换为关系模型:将实体、实体的属性和实体之间的联系转化为关系模式。角色实体角色实体员工实体部门实体权限实体车主实体维修配件单实体维修单车实体体车辆实体拥有1N菜单实体对应NN对应NN对应对应N11对应N1拥有1N1对应零件零件种类拥有N1包含N1菜单ID名称称主键父ID主键id链接页面备注名称地址显示顺序是否显示目录级别别是否叶子名称备注账户姓名密码性别开始时间完成时间原因所用时间数目号牌号码生成工厂姓名地址电话名称价格库存名称描述最大库存主键ID主键ID图4-1数据库设计E-R图4.2数据库分析维修系统的主要对象是员工和客户(车主),每个员工都有一个部门,所以要有部门表和员工表。部门表包含部门信息,员工表示员工的相关信息。每个用户都要拥有一个角色,只有拥有了角色,才能使用系统。每个角色都要分配权限,所有要有角色表和权限表,在创建维修单是要知道所维修的车辆和该车辆的车主,车主和车辆时一对多的关系,一个车主可以拥有多个车辆,一个车辆只能属于一个车主,下面的表都是通过程序自动生成的。下面是本系统的所有表:部门表(department)记录部门信息,通过该表可以知道有多少部门,和部门所在地址和部门的人员。表4-1部门表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键nameVarchar2(50)NONULL部门名称addressVarchar2(120)YESNULL部门地址bzVarchar2(120)YESNULL备注员工表(Employee)记录员工信息,可以知道该员工所属的部门,和该员工所拥有的角色组。一个员工只属于一个部门,员工和部门之间是多对一的关系。一个员工可以拥有多个角色,员工和角色之间是多对一的关系。表4-2员工表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键usernameVarchar2(50)NONULL账户passwordVarchar2(50)NONULL密码realnameVarchar2(50)NONULL备注sexVarchar2(10)YESNULL性别(男和女)degreeVarchar2(20)YESNULL学历SchoolVarchar2(100)YESNULL学校PhoneVarchar2(15)YESNULL电话号码EmailVarchar2(20)YESNULL邮箱department_idnumber(11)NONULL所属部门菜单表(Menutreep)记录系统所有的模块,每个模块都有模块名称,上级菜单id,是否是叶子菜单,菜单的显示顺序,是否显示标记,和菜单级别。表4-3菜单表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键nameVarchar2(50)NONULL标题菜单名称parentidVarchar2(10)NONULL上级菜单IDLeafVarchar2(10)NONULL是否链接页面linkPageVarchar2(120)NONULL链接页面showfalgVarchar2(10)NONULL是否显示ShowidVarchar2(10)NONULL菜单显示顺序catalogidVarchar2(1)NONULL目录级别权限表(SystemPrivilege)记录该系统所有的权限,每个权限都对应一个菜单表ID,和该权限的在角色授权时相识的名字,和权限判断是用的名称。该表的数据是在使用系统前,由开发人员添加的。表4-4权限表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键moduleVarchar2(10)NONULL菜单表的IDprivilegeVarchar2(50)NONULL权限的名称(英文)nameVarchar2(50)NONULL权限的名称(中文)角色表(PrivilegeGroup)是该系统所拥有的角色,角色表记录了角色的名称和角色的描述,和角色拥有的所有权限,角色表权限表之间是多对的多的关系。表4-5角色表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键nameVarchar2(50)NONULL角色名称bzVarchar2(150)NONULL角色描述角色和权限的关联表(PS),该表在程序里没有对应的实体,是在注解中配置的,是通过程序生成的。该表记录了权限和角色之间的对应关系表4-6角色表和权限表之间的关联表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键IDprivilegeGroup_Idnumber(11)NO外键NULL角色IDsystemPrivilege_idnumber(11)NO外键NULL权限Id员工和角色的关联表(EG),员工和角色之间是多对多的关系,一个员工可以拥有多个角色,一个角色可以属于多个用户。该表记录叫员工表和角色表之间的对应关系。这样可以通过用户找他拥有的所有角色,还可以通过角色查找使用该角色的所有员工。这一样就实现了依据角色管理。表4-7员工表与角色之间的关系表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键IDemployee_Idnumber(11)NO外键NULL员工IDprivilegeGroup_idnumber(11)NO外键NULL角色ID零件种类表(Kind)是记录所有零配件并给它们分类,方便查找和管理。一个零件种类可以拥有多个零件,零件种类和零件之间是一对多的关联关系。零件中有零件名字和描述字段。表4-8零件种类表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键NameVarchar2(10)NONULL零件种类名称bzVarchar2(200)NONULL描述零件种类零件表(part)记录了零件的名称,所属零件种类和零件价格,库存等基本信息。表4-9零件表字段类型是否空是否主键默认值描述idnumber(11)NO是NULL主键NameVarchar(10)NO否NULL零件名称ColorVarchar(10)YES否NULL零件颜色MaxcountNumber(5)NO0最大库存量minCountnumber(5)NO0最小库存量Marketpricenumber(5)NO0市场价格Sellpricenumber(5)NO0销售价格Basepricenumber(5)NO0采购价格BzVarchar2(200)YESNULL对商品的描述Kind_idnumber(11)NO外键NULL零件所属种类车主表(Owner)记录了车主的进行,方便客户维护。表4-10车主表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键NameVarchar2(10)NONULL零件种类名称addressVarchar2(150)YESNULL地址PhoneVarchar2(15)YESNULL电话号码车辆表(car)记录了所有需要维修的车辆,每个车辆对应一个车主。表4-11车辆表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键hphmVarchar2(10)NONULL零件种类名称factoryVarchar2(150)YESNULL地址Owner_idnumber(15)YES外键NULL电话号码维修表单(RepairOrder)是对每辆车维修的记录,每辆维修车辆不要填写维修工,维系时间和维修配件单。维修表单和维修零件的对应关系是一对多的关系。表4-12维修表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键NameVarchar2(10)NONULL零件种类名称Car_idnumber(11)NONULL维修车辆Emploee_idnumber(11)NONULL维修工StartTimeDateNONULL维修开始时间endtimeDateNONULL维修完成时间MoneyNumber(5)NO0每小时维修费用Munnumber(2)NO0维修所用时间ztVarchar2(1)NO0状态SumNumber(6)YES0总费用NoFuNumber(6)YES0欠费数目表4-13配件表字段类型是否空是否主键默认值描述idnumber(11)NO主键NULL主键timeDateNONULL操作时间czryVarchar2(10)NONULL操作人员CznrVarchar2(10)NONULL操作内容5汽车维修管理系统的详细设计5.1用户登录和密码修改的设计维修表单(RepairOrder)是对每辆车维修的记录,每辆维修车辆不要填写维修工,维系时间和维修配件单。维修表单和维修零件的对应关系是一对多的关系。5.1.1用户登录的设计为了提高系统的安全性,没有登录的用户是不能进入系统,密码错误或者用户不存在的用户也不能进入系统。登录系统后就进入系统主要面,并且显示用户可以操作的菜单项。用户登录验证分为客户端验证和服务端验证输入用户名输入用户名输入密码填写用户名?否是填写密码?否是客户端校验开始校验进入登录页面提交到服务端得到用户名和密码是否空?查询指定用户名的记录返回登录页面进入主页面页面是否是否有记录无密码是否相同?否有是登录成功,把用户对象放到session中服务端校验图5-1用户登录流程图5.1.2密码修改密码是用户登录系统的钥匙,所以密码非常重要,密码有时经常会被他人知道,所有需要对密码进行修改。修改密码的前提是用户需要登录,修改密码时要输入原始密码,和新密码,防止他人在用户离开是修改密码。开始开始用户登录是否登录?否填写员密码,新密码和确认密码填写完整?提交是从session得到密码密码相同?失败否通过session得到员工ID是新密码空?是修改用户密码成功图5-2密码修改流程图5.1.3退出系统在使用完系统后,就要安全退去系统,退出系统就是把当前的session设置为不可用,并跳到登录页面。5.2部门和员工管理的设计5.2.1部门管理的设计部门管理就是对部门的添加、修改、删除和分页查看。添加部门时要添加部门名称、部门地址、和备注。在页面加载完毕时就调用DWR得到总记录数,因为页面中固定了没有显示的个数,所以可以得到每也显示的记录范围和总页数。分页查看和删除部门分页查看和删除部门分页查看得到部门的总记录数从页面得到每页显示数得到第一页显示记录在页面显示记录删除部门得到部门ID通过DWR依据部门ID删除记录。通过回调函数在页面提示是否删除成功图5-3分页显示和删除部门在进行部门的添加和修改时,都会弹出一个对话框,当是添加部门时,对话框中的文本框是空的,需要填写信息,当是修改部门信息是,对话框中大的文本框就有信息,可以修改,单部门名称是不可修改的。添加和修改部门添加和修改部门点击新建或者编辑部门dept.id是否为0通过SQL得到id为dept.id的记录,给dept赋值否是通过Struts标签显示信息给dept=null新建时dept.id为0,编辑时为记录的ID值,在处理类里有dept属性。图5-4部门的添加和修改的流程图5.2.2员工管理每一个要使用该系统的用户,都需要在员工表中有记录,所以对员工的管理就是对员工进行添加、修改、查看和删除。5.3角色管理和角色分配的设计5.3.1角色管理的设计角色管理及时依据公司的需要创建不同的角色,如果某一个角色不再使用时可以删除该角色,如果某个角色被分配给了某一个用户,就不能对其进行删除。在一点击进入角色管理就会看到所有的角色,可以对其进行修改,修改该角色所对所有模块拥有的权限。查看和删除与部门管理类型,都是通过分页查看和DWR异步调用删除,角色管理精确到系统的每一个操作。添加角色时除了要填写角色名称和备注,还要为该角色选择权限,没有选择权限的角色在分配给用户时,用户就只能进行登录、密码修改和退出系统的操作,否则除非还拥有其他的角色。修改角色是会依据角色的ID从数据库中得到角色的名称和备注信息,再到菜单表中的所有的叶子菜单,然后依据叶子菜单的ID到权限表中查找该菜单所拥有的权限。在页面中显示叶子菜单和器对应的权限。由于是修改角色,角色可能依据拥有的对某些菜单的权限,所有还要显示哪些菜单的哪些权限是拥有的。角色的添加和修改角色的添加和修改角色的添加角色的修改显示要填写的角色信息和选择权限显示角色信息和其拥有的角色填写信息完整填写?完整填写?修改信息NN更新查询信息更新查询信息YY图5-5角色管理的添加和修改的工作流程图5.3.2角色分配的设计在创建好角色后就可以把角色分配给用户,每一个用户可以拥有多个角色,一个角色可以分配给多个用户,角色与用户之间是一种多对多的关系。如果没有给用户分配任何角色,用户就不能正确使用系统。角色分配就是用户点击要授权的用户,然后弹出一个对话框,该对话框中显示用户信息,和所有的角色。用户不能修改用户信息,只能选择或者取消角色,也可以不选择任何角色。点击确认就可以保存角色分配。NN用户授权得到用户实体依据用户ID查角色拥有角色?得到系统所有角色显示角色并选中拥有的角色Y显示所有角色N选择角色点击保存拥有角色?删除用户拥有的角色选择角色?Y添加用户拥有的角色用户授权完成NY图5-6角色分配流程图5.4菜单模块的设计在登录成功后,就会在主页面的左面显示当前用户所能使用的菜单,这些菜单是通过系统自动生成的,每个父级菜单都有叶子菜单,叶子菜单就可以进行操作。依据当前用户的id得到用户拥有的所有角色,再依据角色查询每个角色所用的权限,然后根据每个权限管理的菜单模块从而的到当前用户可以操作哪些模块,对于用户来说,就是页面上显示的树形菜单。只知道到模块集合还不能在页面中显树形菜单,只有找出模块之间的树型关系才能显示树型结构的菜单。YYNYNY开始得到用户拥有的角色用户ID下一个权限?下一个角色?得到角色的权限集合包含权限的模块?模块ID添加到模块集合完成N执行前创建一个空的模块集合Set<Integer>图5-7得到模块id集合的流程图在得到模块id集合后,就可以依据集合得到集合内部之间的关系,哪个模块是哪个模块式父菜单。再依据父子菜单关系生成JSONArray。首先依据模块集合得到菜单集合,在循环判断每个菜单是否是目录级菜单,如果不是继续往下循环,当菜单式目录菜单时,在循环内再次循环菜单集合,判断菜单的上级目录是否是本目录,如果是就把菜单添加到上层循环的对象下。5.5维修单管理的设计维修管理单是系统的主要的模块也是系统核心模块,前面的所有模块都是为该模块服务的。在修改和添加汽车维修单时,要填写维修的车辆,车辆的主人是谁,该信息是不洗添加和修改的,系统自动填写,方便查看。每个车辆维修都要一个维修工,是通过select选择的,先选择维修部门,在选择维修人员。为了显示维修车辆所有的费用,要填写维修工维修的时间,和每小时的工资。那一段时间维修该车辆,和车辆维修原因,这个是必须的。如果车辆的零件坏了,就必须替换零件,零件种类的选择,零件的选择,零件所用数目填写,添加零配件,删除添加错误零件,修改添加所用零件的数目(是通过添加相同配件来实现的),不能直接对以添加的配件进行数目的修改,显示添加所用的零配件信息,把这些功能都在维修单页面中,这样设计的好处是方便用户的操作,提高工作效率。YYNNYN维修单所需零配件的管理配件的删除添加配件得到要删除的id从session删除指定id的零配件点击保存时,把session中的信息保存到数据库选择零配件添加数目数目是整数?数目大于库存?Session中有相同配件?修改已有配件的数目添加新配件到session把session中的信息保存到数据库图5-8维修所需要零配件管理流程图6汽车维修管理系统的实现6.1用户登录和密码修改的实现6.1.1用户登录的实现在登录页面上输入用户名和密码,用户名和密码都不能为空,当用户不存在时就提示用户名不存在,密码不正确也会有相应的提示。登录成功会进入系统主页面。在登录页面中有一个表单的,username和password两个文本框,在单击进入,表单就提交到action对应的路径中,在action中有username和password两个属性,在action获得页面中值在通过反射给成员属性复制。Actionbean中依赖注入了业务逻辑层的Bean,通过业务逻辑Bean校验登录是否成功。图6-1用户登录界面实现功能主要代码如下://先判断用户名和密码是否为空,如果为空需要给出用户相应的提示if("".equals(username.trim())||null==username)returnif("".equals(password.trim())||null==password)return//当用户名和密码都不会空是,依据用户名username查找的记录,通过JPA的内//部实现的SQL语句如下:“Select*fromEmployeeewheree.Realname=‘”+username+”’”;//如果返回的记录集为空,这表明用户名不正确或不存在。//如果得到的记录集不为空,就得到第一个记录的密码passwd。判断密码是否//相同。if(password.equals(passwd))//如果相同则登录成功,如果不同表示密码不正确,在客户端会给出提示。6.1.2密码修改的实现在进行密码修改是用户必须登录,否则不能修改密码,会提示用户没有登录。在填写信息是,如果填写不完整或者填写两次输入的密码不一致时都会给去提示。图6-2密码修改界面原密码输入不正确时会弹出提示框,在修改成功时也会给出提示,但不会关闭对话框。图6-3密码修改成界面实现上面功能的主要代码如下://首先是从session的得到当前用户employee=(Employee)request.getSession().getAttribute("employee")//判断用户是否登录if(employee==null)returnmsg=“用户没有登录,请从新登录”;//判断原密码old是否输入正确If(!old.equals(employee.getPassword()))returnmsg=”原密码不正确”//修改密码,保存更新,返回密码修改成功employee.setPassword(password);//调用业务逻辑层的类更新记录employeeService.update(employee);//JPA内部实现更新密码的SQL如下updateEmployeesetpassword=?whereid=?6.1.3退出系统退出系统就是得到当前会话,并设置会话不可用,在设置完成后跳到登录页面。实现该功能的代码如下://通过struts2中的类得到当前会话HttpSessionsession=ServletActionContext.getRequest().getSession();if(session!=null){//如果session不为空,就设置session不可用 session.invalidate();}//再通过Struts2跳转到登录页面。6.2部门和员工管理的实现6.2.1部门管理的实现部门的分页查看和异步删除,在页面加载完毕时调用DWR得到所有部门的总数,因为每一显示20条记录,在页面中有id为Pages、PageCount、count、PageSize的span标签,<span/>的innerHTML属性分别记录当前页数、总页数、总记录数、每页显示个数,本系统的PageSize是在页面设置的,是不变的。每次加载页面是都会显示第一页的记录.图6-4部门管理的分页查询界面实现上述功能的主要代码如下://在页面加载完毕时就会调用DWR,得到所有部门的总数countselectcount(*)fromDepartment;//设置页面的显示的总记录数document.getElementById(“count”).innerHTML=count//设置页面的显示的总页面,这是ExtJS才是使用$(“”)的作用相当于//document.getElementById(“”),Math.ceil()是得到大于等于该数值的最小//整数$("PageCount").innerHTML=Math.ceil(count/($("PageSize").innerHTML));//得到首条记录和最后一条记录start=(PageCount-1)*PageSize+1;end=start+PageSize-1;//得到首页记录,通过设置第一条记录和最后一条记录select*from(selectrownumr,*fromtwherer<=?)wherer>=?//依据部门的id异步删除部门的SQL如下deletefromDepartmentwhereid=?6.3角色管理和角色分配的实现角色管理和角色分配是一个整体,如果没有角色管理中创建角色,怎么会有角色分配给用户。它们共同实现了权限的控制。6.3.1角色管理的实现在点击新建角色时,系统就会查询菜单表,得到所有叶子菜单的记录集合List<Menutree>,再依据每个叶子菜单得到其菜单下的权限记List,然后把叶子菜单和权限记录映射形成Map<Menutree,List<SystemPrivilege>>。在页面中通过struts2的<s:iterator/>显示每个菜单,然后再通过<s:iterator/>显示每个菜单所拥有的权限。图6-5角色添加界面实现功能的主要代码如下://得到所有叶子菜单集合List<Menutree>menutreesselect*fromMenutreepmwherem.leaf=‘true’orderbym.showid;//依据菜单的ID,查询权限表得到每个菜单的权限集合List<SystemPrivilege>select*fromSystemPrivilegeswheres.module=?//把叶子菜单与其权限集合映射成Map<Menutree,List<SystemPrivilege>>mapmap.add(menutree,systemPrivilegelist);//在页面中通过struts2标签显示菜单和对其的权限,每行形式一个叶子菜单<s:iteratorvalue="map.keySet()"id="vkey"><s:iteratorvalue="map.get(#vkey)"><s:iterator/><s:iterator/>//在填写好信息和选择权限后,通过如下代码得到选择的权限IDrequest.getParameter(“”+systemPrivilege.getId());//先保存角色信息,再保存角色拥有的权限insertintorole(bz,name,id)values(?,?,?);insertintops(role_id,privileges_id)values(?,?);//修改权限与添加权限类似6.3.2角色分配的实现角色分配是建立用户和角色之间的关联关系(多对多的关系),因为是多对多关系,所以在用户和角色之间有一个关联表。当点击角角色分配时,就弹出用户授权界面,上半显示用户的账户和姓名,下面显示系统的所有角色,每行显示3个角色。这里只能选择或者取消角色,不能修改用户信息,只有在员工管理模块才能修改用户信息。图6-6角色分配界面图实现上面功能的主要代码如下://依据用户id得到用户实体对象user的JPA内部SQL语句select*fromemployeeewhilee.id=?;//查询所有的角色roles的代码roles=privilegeGroupService.getScrollData().getResultlist();//JPA内部执行的sql语句,再把返回的结果集转换成List集合select*fromrole;//在点击保存后,在类中通过请求的参数确定哪些角色被选中。request.getParameter(""+roles.get(i).getId())//删除要授权用户在eg表的所有记录deletefromegwhereemployee_id=?//因为不能修改用户信息,所有只需要保存角色和用户之间的关系记录。insertintoeg(employee_id,role_id)values(?,?)6.4菜单模块的实现在登录成功后,主页面的左面显示的界面如下,除了功能菜单目录,其他部分都是依据用户的权限显示的。图6-7菜单界面实现上面功能的主要代码://得到当前用户employee所拥有的所有角色rolesroles=employee.getGroups();//通过JPA实现的查询的内部SQLselectrole_idfromegwhereemployee_id=?//依据角色得到角色拥有的权限,进而得到可见菜单ID集合Set<Integer>s再依据s得到菜单集合list<Menutree>ms;selectPRIVILEGES_IDfrompgwhererole_id=?selectmodulefromSYSTEMPRIVILEGEwhereid=?//遍历菜单集合,判断菜单是否是目录级别的for(inti=0;i<ms.length;i++){if(ms.get(i).getCatalogid()==1){//(1表示一级菜单)for(intj=0;j<mstemp.length;j++){if(mstemp.get(j).getParentid()==ms.get(j).getId())//查找以及目录菜单下的子菜单}}//得到JSONArray后,通过response返回到客户端response.getWriter().write(jSONArray.toString());//在客户页面中通过Ext.tree.TreeLoader的dataUrl属性加装并显示树型菜单6.5维修单管理的实现在添加所用零件时,是把添加的零配件放到session中,在点击页面中的确定按钮时把session中的信息保存到数据库中。这里用到的技术是AJAX异步调用,达到的效果是页面局部刷新,好处是不会从新加载所有的页面,从而减小服务器的负担,提高性能。在修改维修单时,依据要修改维修单的ID的维修单对象,在页面中通过struts2的<s:property/>标签显示信息。在部门下拉列表中设置改变事件,当列表中的值改变是就会调用DWR得到该部门对应的所有员工的List<Employee>集合,返回到页面调用回调在员工列表中显示对用部门下的员工。时间信息显示通过<fmt:formatDate/>格式化时间。系统中的页面中的数据与后台是通过sturts2框架或者DWR框架与后台关联。图6-8维修单修改界面实现上面功能的主要代码如下://依据要修改维修单的ID得到维修单对象orderRepairOrderorder=orderService.find(order.getId())//JPA内部实现的SQL语句是:select*fromrepairOrderwherer.id=?;//依据维修单的ID得到给修改所有的零配件itemsSet<Item>items=newHashSet<Item>();Set<Item>items=order.getItems();//sql语句是:select*fromitemitwhereit.order_id=?此sql语句得到的是一个结果集ResultSet,然后遍历此结果集放入items.//把零配件放到session中,session属性的名称为维修车的IDsession.setAttribute(""+order.getCar().getId(),items);//删除、添加零配件是先修改session,在保存时修改数据库记录items.Remove(item);//删除零配件items.add(item);//添加零配件//如果添加零配件已经有这修改其数目。//在保存零配件时,如果session中的零配件与数据库的记录不同就删除数据记//录,deletefromItemwhereid=?;insertintoItem(num,part_id,order_id,id)values(?,?,?,?);//如果相同保存session中的零配件,就不修该维修配件信息,如果以前没有就//执行下语句insertintoItem(num,part_id,order_id,id)values(?,?,?,?);6.6数据库连接本系统使用JPA链接数据库,使用XML配置文件与底层数据库链接。把数据库的内容显示在界面上,界面上的信息保存在数据库中,实现数据间的传递与存储。具体的配置文件如下:<persistence-unitname="test"transaction-type="RESOURCE_LOCAL"><properties><propertyname="hibernate.dialect"value="org.hibernate.dialect.OracleDialect"/><propertyname="hibernate.connection.driver_class"value="oracle.jdbc.driver.OracleDriver"/><propertyname="hibernate.connection.username"value="ncjk"/><propertyname="hibernate.connection.password"value="ncjk"/><propertyname="hibernate.connection.url"value="jdbc:oracle:thin:@:1521:orcl"/><propertyname="hib

温馨提示

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

评论

0/150

提交评论