基于java的网上购票系统的设计与实现_第1页
基于java的网上购票系统的设计与实现_第2页
基于java的网上购票系统的设计与实现_第3页
基于java的网上购票系统的设计与实现_第4页
基于java的网上购票系统的设计与实现_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

页(共39页)1绪论1.1网上购票系统研究的背景和目的1.1.1研究背景长途客运灵活、机动、方便,但是不便于管理。随着目前社会的高速发展,流动人口的人直线增长,导致每当节假日车站拥挤、混乱,由于不知道买的车票发车的具体时间,所以车站的滞留乘客多,存在极大的安全隐患。乘客进站时持票率低,影响了车站的整体秩序。而导致这种现象的原因之一就是传统的窗口售票方式不利于大众购票。如今互联网在人们的生活工作中有着越来越重要的地位。如今我国的网民数已到达了7.51亿之多,如果利用互联网进行网上售票,将会给乘客带来很大的便利,极大的提高车站的工作效率,降低车站的滞留乘客数,降低车站运营成本。1.1.2研究目的随着社会的高速发展,科技水平的提升,互联网技术已经渗透到了我们生活的各方各面,在提高效率的同时也极大的方便了人民群众。利用已经发展成熟的互联网技术、电子商务、移动终端设备等技术实现网上购票,可以给人们带来巨大的便利,所以实现网上购票是有着重大意义的。通过互联网渠道可以方便快捷的给人们传递最新的通知,避免了乘客因不能及时得到消息而错过买票的时间。网上购票避免了车站窗口买票人数过多,极大的降低了拥挤踩踏事故的发生几率。同时也更加利于管理,降低了盗窃的发生。和传统的窗口售票相比,网上购票极大的提高了售票的效率,同时也降低了工作人员的工作压力,节约了车站的运营成本。1.2国内现状及发展如今我国的网民数已到达了7.5亿,半年新增加的网民数达到了1992万人之多。互联网普及率高达54%。互联网已成为推动我国经济社会发展的重要力量。以互联网为代表的数字技术正在加速与经济社会各领域深度融合,成为促进我国消费升级、经济社会转型、构建国家竞争新优势的重要推动力。互联网和各领域的融合给我们生活带来了巨大的变化,早在2016年,12306网上售票占比超过60%。随着我国网民人数的不断增加,互联网技术的不断提升,网上售票已经是发展的必然趋势。随着互联网的普及,移动支付发展,流动人口的增加,人们生活节奏的加快,网络售票将逐步取代传统的售票方式,给我们带来更多的便利。1.3可行性分析可行性分析的主要目的就是根据对系统的调查,判断该系统是否能够实现和是否值得实现。避免在已经开始开发该系统后才发现该系统不值得实现,从而浪费大量的人力和财力。可行性分析主要从资源、时间、技术、经济、社会等方面进行分析。一、资源可行性资源可行性主要是看是否具备开发该系统的设备,如今具备处理器为Intel(R)Core(TM)i5-4200MCPU@2.50GHz,内存为4G,硬件空间为1000GB的计算机。安装有MySQL数据库。以Java为开发语言,以Windows10为开发环境。二、时间可行性本次毕业设计从2017年1月开始准备,到毕业答辩还有两个月。以现在的掌握的技术知识和项目经验可以完成。三、技术可行性已经掌握开发该系统所需的基本技术知识:Java、CSS、JavaScript,框架:Spring、SpringMVC、MyBatis。因此可以达到技术的可行性。四、经济可行性开发该系统所需的环境、数据库、开发工具都是免费的,所以成本低。因此,该系统能获得较好的收益/投资比,可达到经济可行性。五、社会可行性社会可行性主要是看是否合法,是否给社会和用户带来好处。开发该系统就是为了解决传统售票给乘客带来不便的问题,所以开发该系统是为人民服务的。因此从社会出发肯定是可行的。2开发前准备2.1网上购票系统开发环境及所用工具网上购票系统选择操作平台是Windows7。微软公司开发的Windows7操作系统具有革命性变化。该系统使人们能够更加简单便捷的操作电脑,它具有超强的硬件兼容性,更加个性和智能的界面,简单易操作的系统使人们更容易上手。该系统是用Java开发的。Java已经是非常成熟的编程语言,它是纯面向对象编程的语言,具有平台无关性。Java提供了许多内置类库,所以能够极大的简化开发人员的设计工作,缩短项目开发所需时间。Java还支持对Web应用开发,并且具有很好的安全性和健壮性[6]。该系统使用MySQL数据库。它支持多种操作系统,如FreeBSD、Linux、MAC、Windows等,它具有处理上千万条记录的能力,还支持常见的SQL语句规范,具有较高的可移植性。它的安装非常简单,运行效率高,还有丰富信息的网络支持、调试、管理,优化简单等优点。开发工具是用的Eclipse,服务器用的是Tomcat。2.2软件安装与配置一、Eclipse的下载安装Eclipse直接在官网下载,无需复杂的安装,直接解压就可以用,eclipse.exe就是Eclipse的启动程序。二、jdk的下载安装在官网(/technetwork/java/downloads/index.html)下载Java。然后配置jdk,在计算机的属性里选择“高级系统配置”,然后选择“高级”,再选择“环境变量”。新建一个系统变量“JAVA_HOME”,值为jdk的安装目录。再找到“Path”变量,在值的最后添加“%JAVA_HOME%\bin;”。再新建一个“.;%JAVA_HOME%\lib\tools.jar;”变量。三、MySQL数据库下载及安装在官网(/downloads/)下载MySQL数据库。用MySQL安装包安安装方式,运行MySQL5.7.17数据库安装包,在选择安装目录的路径中和JDK一样不得出现中文字符以及空格,根据提示依次点击“next”进行配置完成数据库安装。但在安装过程中,可能会提示“MicrosoftVisualC++2013Runtime64bitsisnotinstalled”,因为系统的MicrosoftVisualC++软件版本太旧,无法继续安装MySQL,需要更新运行库后才能安装。在数据库成功安装后,再进行对NavicatPremium的安装,此软件安装方式比较简单,直接点击下一步直到完成即可。四、链接MySQL数据库连接MySQL:打开可视化程序Navicat,链接MySQL数据库。点击软件左上角的“连接”,选择“MySQL”,在弹出的窗口中依次设置好“用户名”和“密码”,这将是以后项目设计中JDBC连接数据库的用户名及密码。同时,对新建的用户进行权限设定,之后此次设计中涉及的所有创建的数据库、表以及数据库操作都只在这个用户下进行。3系统需求分析3.1系统功能需求分析网上购票系统实现了用户登录、注册、订票、退票、个人信息查询和修改、超级管理员登录、用户管理、管理员账户管理、管理员登录、车票信息发布、订单查询与管理等功能。主要分为登录注册模块、车票购买与查询模块、订单查询与退订模块、个人信息查询与修改模块、车票信息发布与查询模块、用户管理模块[7]。当用户账号登录时,选择要进行的查询车票、订购、退订、个人信息查询等操作。当管理员登录时,可以根据左侧的选项栏,选择要进行的车票信息发布及查询、用户查询、个人信息查询等操作。超级管理员登录,有用户管理、管理员管理、个人信息查询及修改等功能[8]。一、登录注册模块按照规定在输入框里输入用户信息进行用户注册,其中密码和用户名都必须大于6位,手机号码必须符合手机号码格式。管理员,超级管理员和普通用户登录,都是在登录界面输入正确的用户名和密码进行登录。二、车票购买与查询模块用户登录:用户可在购买界面按条件查询相关的车票,然后选择相应的车票进行购买。三、订单查询与退订模块用户登录:用户可在订单查询界面查看自己所订购的车票信息,并可进行退票操作。管理员和超级管理员也可以在车票管理界面查看相应车票的订单详情四、个人信息查询与修改模块无论数用户还是管理员都可以在个人信息界面对自己的相关信息进行查询,并可修改。五、车票信息发布与管理模块管理员账户登录:可在车票信息发布界面发布车票信息,主要是起始地、时间、单价、总数等信息。发布后并可在车票管理界面对其修改。六、用户管理模块管理员和超级管理员登录后,都有普通用户管理的权限。只有超级管理员登录时才有管理员账户管理的权限。3.2系统功结构图和流程图图3-1系统功能结构图图3-2系统功能流程图一、登录注册模块在注册界面输入用户信息,其中包括用户名、密码、真实姓名、手机号码、性别,用户名和密码都必须大于6位。注册成功后悔跳转到首界面。在登录界面输入正确的用户名和密码,点击登录跳转到搜索界面。如果输入错误的用户名和密码,点击登录会有相应的提示。二、车票购买与查询模块:登录成功后输入车票的起始地进行车票查询,然后选择要买时间段的车票,输入你要买的张数,点击订购,购买成功。三、订单查询与管理模块登录成功后在右上角的个人中心里选择订单详情按钮,就会跳转到订单详情界面。管理员账户登录,可在车票管理界面查看该车票的订单详情,在用户管理界面查看该用户的订单详情。四、个人信息查询与管理模块点击右上角的个人中心按钮,选择个人信息,进入个人信息界面,可以查看自己的相关信息,可以对其进行修改。五、车票信息发布与管理模块管理员账户登录,进入首页后点击左侧的车票信息发布按钮,进入车票信息发布界面。输入车票的相关信息,然后点击保存。点击车票查询按钮,进入车票查询界面,该界面显得的是所有的车票信息,可对车票进行删除操作。六、用户管理模块管理员登录拥有对普通用户管理的功能,点击普通用户管理可查看普通用户信息,和订单详情。当时超级管理员登录时不仅拥有普通用户管理管理功能,同时还拥有管理员账户管理功能,可查看管理员信息和删除管理员。3.3数据库分析设计3.3.1数据库的逻辑设计表与实体的ER图:图3-3用户实体图图3-4起始地实体图图3-5订单实体类图图3-6车票信息实体类图3-7实体间ER图3.3.2数据库物理设计新建数据库buytickets,新建表address、order、user、tickets_message。address保存的是出发地和目的地。order表保存的是订单信息。tickets_message表保存的是发布车票的信息。表结构表格如下:图3-8起始信息表(address表)id:数据的唯一标识;e_address(目的地):保存到达的地方;s_address(出发点):用来保存出发地点;station*保留字段。图3-9订单表(order表)id:数据的唯一标识;tm_id1(车票id):保存对应车票的id;u_id1(用户id):用来保存用户的id;number1(购买张数):用来保存购买车票的张数;Station*是保留字段。图3-10用户表(user表)id:数据的唯一标识;username:用户名;password:密码;name:真实姓名;sex:性别;phonenumber:手机号码;Station1:用户类型区别字段;Station2-3:保留字段。图3-11车票信息表(tickets_message表)id:数据的唯一标识;address_id(出发地id):保存的是出发地对应的id;time(时间):保存的车票的发车时间;price(价格):保存的是车票的单价;tickets_total(车票总数):保存的是发布车票的数量;Station1:到达地id:保存目的地的id号;Station2-3:保留字段。3.4系统所需框架一、SSM框架SSM框架是SpringMVC,Spring和MyBatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,Controller层,Service层,DAO层四层。使用SpringMVC负责请求的转发和视图管理。Spring实现业务对象管理,MyBatis作为数据对象的持久化引擎[2]。二、Mybatis逆向工程该项目还用了MyBatis的逆向工程,逆向工程就是根据数据库的表,逆向生成Java代码。该项目用逆向工程生成Java文件如图:图3-12逆向工程目录截图它能自动生成SSM所需的Pojo文件和Mapper文件,**Mapper.xml文件生成了常用的增、删、改、查的SQL代码,使开发更加快速简便。4系统详细设计和功能实现4.1登录界面和注册界面实现4.1.1注册界面的实现用户注册是用户根据注册界面填写相关信息并保存到user表。根据注册界面输入框提示的相关要求填写注册信息。注册界面截图:图4-1注册界面截图界面实现主要后台代码: Useruser=newUser(); user.setName(name); user.setPassword(password); BigIntegerpn=newBigInteger(phonenumber); user.setPhonenumber(pn); user.setSex(sex); user.setUsername(username); UserExampleuserExample=newUserExample(); UserExample.Criteriacriteria=userExample.createCriteria(); criteria.andUsernameEqualTo(username); List<User>users=userService.selectByExample(userExample); if(users.size()==0||users==null){ userService.insertSelective(user); mv.setViewName("login"); }else{ mv.addObject("message","用户已存在"); mv.setViewName("register"); } returnmv; }4.1.2登录界面的实现根据登录界面输入框的提示填写用户名和密码,然后点击登录进行登录验证。登录界面截图如下:图4-2登录界面截图主要实现代码: if(users.size()==0||users==null){ mv.addObject("message","用户不存在"); mv.setViewName("login2"); }elseif(users.size()==1){ for(Useruser:users){ if(user.getStation1()==1||user.getStation1()==2){ if(user.getPassword().equals(password)){ intuid=userService.selectIDByName(username); session=request.getSession(); session.setAttribute("uid",uid); mv.addObject("username",user.getName()); mv.addObject("station1",user.getStation1()); mv.setViewName("admin/adminindex"); }else{mv.addObject("message2","密码错误"); mv.setViewName("login2");} }else{if(user.getPassword().equals(password)){ intuid=userService.selectIDByName(username); session=request.getSession(); session.setAttribute("uid",uid); session.setAttribute("name",user.getName()); mv.addObject("username",username); mv.setViewName("index2"); }else{mv.addObject("message2","密码错误"); mv.setViewName("login2");}}}}4.2普通用户登录4.2.1用户订票界面当用户登录系统进入的界面就是用户订票界面,根据选择的起始地查出对应的车票,然后进行订购。车票订购界面:图4-3订单界面截图主要实现代码: intnumber2=Integer.parseInt(number); Doubleprice2=Double.parseDouble(price); intticketsTotal2=Integer.parseInt(ticketsTotal); intnumber3=ticketsTotal2-number2; session=request.getSession(); session.setAttribute("e_address",e_address); session.setAttribute("s_address",s_address); session.setAttribute("price",price); session.setAttribute("time",time); session.setAttribute("number2",number2); Doubleallmonye=number2*price2; session.setAttribute("allmonye",allmonye); intuid1=(Integer)session.getAttribute("uid"); inttmid1=(Integer)session.getAttribute("tmid"); Orderssorder12=newOrderss(); order12.setNumber1(number2); order12.setTmId1(tmid1); order12.setuId1(uid1); orderssService.insert(order12); ticketsMessageService.updatetickets_totalByid(number3,tmid1);4.2.2订单查询界面点击右上角的个人信息按钮,选择订单查询按钮,然后就进入你订单查询界面,该界面显示了你所订购的所有车票。可对车票进行退票操作。订单查询界面:图4-4订单查询截图主要实现代码:OrderssExampleorderssExample=newOrderssExample();OrderssExample.Criteriacriteria=orderssExample.createCriteria(); intuid=(Integer)session.getAttribute("uid"); criteria.andUId1EqualTo(uid); List<VOorder>vOorder=newArrayList<VOorder>();List<Orderss>orderlistorderssService.selectByExample(orderssExample); for(Orderssorderss:orderlist){ VOordervOorder2=newVOorder(); IntegertmId1=orderss.getTmId1(); TicketsMessageselectByPrimaryKey=ticketsMessageService.selectByPrimaryKey(tmId1); IntegeraddressId=selectByPrimaryKey.getAddressId(); Integerstation1=selectByPrimaryKey.getStation1(); vOorder2.setId(orderss.getId()); vOorder2.setEaddress(addressService.selectEAddressById(station1)) vOorder2.setSaddress(addressService.selectSAddressById(addressId) vOorder2.setNumber(orderss.getNumber1()); vOorder2.setPrice(selectByPrimaryKey.getPrice()); vOorder2.setTime(selectByPrimaryKey.getTime()); Doubleallmonye=orderss.getNumber1()*selectByPrimaryKey.getPrice(); vOorder2.setAllmonye(allmonye); vOorder.add(vOorder2);} mv.addObject("vOorder",vOorder);4.2.3用户个人信息修改界面点击右上角的个人中心按钮,然后在选择个人信息,会弹出个人信息的弹出框,在点击修改,就可以对自己的各种信息进行修改[4]。个人信息修改界面:图4-5用户信息修改界面主要实现代码: //获取当前用户的id intid=(Integer)session.getAttribute("uid"); Useruser=newUser(); user.setId(id); user.setName(name); user.setSex(sex); user.setPhonenumber(phonenumber2); user.setUsername(username); user.setPassword(password); userService.updateByPrimaryKeySelective(user);4.3管理员用户登录当管理员用户登录时,进入的是网上购票的后台管理系统,有发布起始地、发布车票、查看车票、用户管理、个人信息查看等功能。4.3.1地址发布界面用管理员账号登录,点击添加地址按钮,跳转到添加地址界面。添加地址界面:图4-6添加地址截图主要实现代码: if(e_address.equals("")&&s_address.equals("")){ mv.addObject("result","地址不能都为空!"); }elseif(!e_address.equals("")&&s_address.equals("")){ if(a==0){ addressService.insert(address); mv.addObject("result","目的地保存成功!"); }else{ mv.addObject("result","目的地保已存在!"); } }elseif(e_address.equals("")&&!s_address.equals("")){ if(b==0){ addressService.insert(address); mv.addObject("result","出发地保存成功!"); }else{ mv.addObject("result","出发地保已存在!"); } }else{ if(a==0&&b!=0){ address.setsAddress(null); addressService.insert(address); }elseif(a!=0&&b==0){ address.seteAddress(null); addressService.insert(address); }elseif(a==0&&b==0){ addressService.insert(address); }else{ mv.addObject("success","保存失败"); } } mv.setViewName("admin/addaddress"); returnmv; }4.3.2车票发布界面车票发布是,管理员或者超级管理员登录,在车票发布界面,输入出发地点、到达地点、时间、数量、价格,进行车票的发布。车票发布界面截图:图4-7车票添加界面截图主要实现代码: java.text.SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Datedate=formatter.parse(time); TicketsMessageticketsMessage=newTicketsMessage(); ticketsMessage.setAddressId(s_id); ticketsMessage.setStation1(e_id); Doubleprice2=Double.parseDouble(price); ticketsMessage.setPrice(price2); intticketsTotal2=Integer.parseInt(tickets_total); ticketsMessage.setTicketsTotal(ticketsTotal2); ticketsMessage.setTime(date); ticketsMessageService.insert(ticketsMessage); System.out.println("*****"+date+"******"+s_id+"**********"+e_id); mv.setViewName("admin/addticketsmessage"); returnmv; }4.3.3车票管理界面车票管理界面可以对已经发布出去的车票进行查看,也可查看该车票订购情况。车票管理界面:图4-8车票管理界面截图主要实现代码:List<VOTicketsMessage>volist=newArrayList<VOTicketsMessage>(); for(TicketsMessageticketsMessage:list){ VOTicketsMessagevoTicketsMessage=newVOTicketsMessage(); Integers_id=ticketsMessage.getAddressId(); Integere_id=ticketsMessage.getStation1(); Stringeaddress=addressService.selectEAddressById(e_id); Stringsaddress=addressService.selectSAddressById(s_id); voTicketsMessage.setEaddress(eaddress); voTicketsMessage.setSaddress(saddress); voTicketsMessage.setPrice(ticketsMessage.getPrice()); Datetime2=newDate(); time2=ticketsMessage.getTime(); Timestamptimestamp=newTimestamp(time2.getTime()); voTicketsMessage.setTime(timestamp); voTicketsMessage.setTicketsTotal(ticketsMessage.getTicketsTotal() System.out.println(voTicketsMessage); volist.add(voTicketsMessage); }4.3.4普通用户管理界面进入管理员系统后可点击左边的普通用户管理可以查看相关信息。界面截图:图4-9普通用户管理截图主要代码: UserExampleuserExample=newUserExample(); UserExample.Criteriacriteria=userExample.createCriteria(); criteria.andStation1EqualTo(0); List<User>listuser=userService.selectByExample(userExample); mv.addObject("user",listuser); mv.setViewName("admin/usermanage");4.3.5个人信息查看点击个人信息按钮,然后点击查看,就可以查看相关的自己的注册信息,并做出修改。个人信息查看界面:图4-10个人信息查看界面截图4.4超级管理员登录超级管理员账号只有一个,超级管理员拥有普通管理功能的同时还有管理员管理、添加管理员账户功能。4.4.1管理员账户管理超级管理员登录之后,有管理员账户管理的权限,可查看管理员信息,并可删除管理员账户。管理员管理界面:图4-11管理员管理界面主要实现代码://获取要删除账户的id intuid=newInteger(request.getParameter("uid")); userService.deleteByPrimaryKey(uid);//删除该用户 //创建查询条件 UserExampleuserExample=newUserExample(); UserExample.Criteriacriteria=userExample.createCriteria(); criteria.andStation1EqualTo(1); //查询出所有的管理员用户 List<User>listuser=userService.selectByExample(userExample); mv.addObject("user",listuser);4.4.2添加管理员账户添加管理员账号和注册普通用户时填的信息是相同的,输入姓名、密码、性别、手机号码、用户名、密码,完成添加管理员账号。添加管理员账户界面:图4-12添加管理员账户界面主要实现代码: Useruser=newUser();user.setName(name); user.setPassword(password); BigIntegerpn=newBigInteger(phonenumber); user.setPhonenumber(pn);user.setSex(sex); user.setUsername(username);user.setStation1(1); UserExampleuserExample=newUserExample(); UserExample.Criteriacriteria=userExample.createCriteria(); criteria.andUsernameEqualTo(username); List<User>users=userService.selectByExample(userExample); if(users.size()==0||users==null){ userService.insertSelective(user); mv.addObject("resultmessage","添加管理员完成"); }else{ mv.addObject("resultmessage","管理员已经存在");}5系统测试5.1普通用户功能测试注册用户:图5-1用户注册在注册界面输入用户信息,其中包括用户名、密码、真实姓名、手机号码、性别,用户名和密码都必须大于6位。注册成功后悔跳转到首界面

温馨提示

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

评论

0/150

提交评论