




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程机票预订系统课程设计一、课程设计目的本次软件工程机票预订系统课程设计旨在通过实际项目开发,让学生深入理解软件工程的基本概念、原理和方法,掌握软件开发的全过程,包括需求分析、系统设计、编码实现、测试调试以及软件维护等环节。培养学生的团队协作能力、问题解决能力和软件工程项目管理能力,提高学生运用所学知识解决实际问题的综合能力,为今后从事软件开发相关工作打下坚实的基础。
二、需求分析2.1功能需求1.用户注册与登录:新用户能够在线注册,提供必要的个人信息(如姓名、身份证号、联系方式等),并设置登录密码。已注册用户可以使用用户名和密码登录系统。2.航班查询:用户可以根据出发地、目的地、出发日期等条件查询符合要求的航班信息,包括航班号、航空公司、出发时间、到达时间、票价等。3.机票预订:用户在选定航班后,可以进行机票预订操作。系统应记录预订信息,包括乘客姓名、身份证号、联系方式、预订航班信息等,并生成预订订单号。4.订单管理:用户可以查看自己的预订订单,包括订单状态(已预订、已支付、已出票、已取消等)、订单详情(航班信息、乘客信息等)。同时,支持对已预订订单进行取消操作。5.支付功能:与第三方支付平台集成,支持用户在线支付机票费用。支付成功后,订单状态更新为已支付。6.后台管理:管理员能够登录系统,对航班信息进行管理(添加、修改、删除航班),查看用户订单信息,处理用户投诉等。
2.2性能需求1.响应时间:系统在接收到用户请求后,应在短时间内(如3秒以内)给出响应,提供查询结果或处理预订请求等操作。2.并发处理能力:支持多个用户同时进行查询、预订等操作,确保系统在高并发情况下的稳定性和可靠性,不出现数据混乱或系统崩溃现象。3.数据准确性:确保航班信息、用户订单信息等数据的准确性,避免出现错误的票价、航班时间等信息。
2.3安全性需求1.用户认证:采用安全的加密算法对用户登录密码进行加密存储,防止密码泄露。在用户登录和敏感操作时,进行身份验证,确保只有合法用户能够进行相应操作。2.数据传输安全:在用户与系统之间进行数据传输时,采用HTTPS协议,保证数据传输过程中的保密性和完整性,防止数据被窃取或篡改。3.支付安全:与可靠的第三方支付平台合作,遵循支付平台的安全规范,确保支付过程的安全性,防止用户资金损失。
三、系统设计3.1总体设计1.系统架构:采用分层架构,包括表示层、业务逻辑层和数据访问层。表示层负责与用户进行交互,展示系统界面;业务逻辑层处理具体的业务逻辑,如航班查询、机票预订等;数据访问层负责与数据库进行交互,实现数据的存储和读取。2.模块划分:根据功能需求,将系统划分为用户注册登录模块、航班查询模块、机票预订模块、订单管理模块、支付模块和后台管理模块。每个模块负责特定的功能,相互协作完成整个系统的功能。
3.2数据库设计1.数据库ER图用户表(User):包含用户的基本信息,如用户名、密码、姓名、身份证号、联系方式等。航班表(Flight):存储航班的详细信息,包括航班号、航空公司、出发地、目的地、出发时间、到达时间、票价等。订单表(Order):记录用户的预订订单信息,关联用户表和航班表,包括订单号、用户ID、航班ID、订单状态、预订时间等。乘客表(Passenger):存储订单中的乘客信息,关联订单表,包括乘客姓名、身份证号、联系方式等。管理员表(Admin):用于存储管理员的登录信息,如用户名、密码等。2.数据库表结构用户表(User)|字段名|类型|描述||||||id|int|用户ID(主键,自增)||username|varchar(50)|用户名||password|varchar(255)|加密后的密码||name|varchar(50)|姓名||id_card|varchar(20)|身份证号||phone|varchar(11)|联系方式|航班表(Flight)|字段名|类型|描述||||||id|int|航班ID(主键,自增)||flight_number|varchar(20)|航班号||airline|varchar(50)|航空公司||departure_city|varchar(50)|出发地||arrival_city|varchar(50)|目的地||departure_time|datetime|出发时间||arrival_time|datetime|到达时间||price|decimal(10,2)|票价|订单表(Order)|字段名|类型|描述||||||id|int|订单ID(主键,自增)||user_id|int|用户ID(外键,关联User表)||flight_id|int|航班ID(外键,关联Flight表)||status|varchar(20)|订单状态(如已预订、已支付、已出票、已取消等)||booking_time|datetime|预订时间|乘客表(Passenger)|字段名|类型|描述||||||id|int|乘客ID(主键,自增)||order_id|int|订单ID(外键,关联Order表)||name|varchar(50)|乘客姓名||id_card|varchar(20)|乘客身份证号||phone|varchar(11)|乘客联系方式|管理员表(Admin)|字段名|类型|描述||||||id|int|管理员ID(主键,自增)||username|varchar(50)|用户名||password|varchar(255)|加密后的密码|
3.3详细设计1.用户注册登录模块注册功能:用户输入注册信息,系统进行格式校验(如密码强度校验、身份证号格式校验等),校验通过后将用户信息插入到用户表中。登录功能:用户输入用户名和密码,系统查询用户表进行身份验证,验证成功后生成用户会话(如使用JSESSIONID),用于后续操作的身份标识。2.航班查询模块根据用户输入的出发地、目的地、出发日期等条件,在航班表中进行查询,将符合条件的航班信息展示给用户。可以实现模糊查询、多条件组合查询等功能。3.机票预订模块用户选定航班后,系统获取用户会话信息,判断用户是否已登录。若已登录,系统检查航班余票情况,若有余票,则生成订单记录,同时在订单表和乘客表中插入相应信息。订单状态初始化为已预订。4.订单管理模块用户登录后,可以查看自己的订单列表,根据订单ID查看订单详情,包括航班信息、乘客信息、订单状态等。支持对已预订订单进行取消操作,取消后订单状态更新为已取消。5.支付模块当用户进行支付操作时,系统调用第三方支付平台接口,将订单金额等信息传递给支付平台。支付平台返回支付结果,系统根据支付结果更新订单状态为已支付或支付失败等。6.后台管理模块管理员登录系统后,可以对航班信息进行增删改查操作。查看用户订单列表,处理用户投诉等。例如,管理员可以添加新的航班信息,修改现有航班的票价、时间等信息,删除无效航班等。
四、编码实现4.1开发环境1.编程语言:选择Java作为开发语言,因为Java具有跨平台性、面向对象、安全可靠等优点,适合开发企业级应用。2.开发工具:使用Eclipse作为集成开发环境(IDE),Eclipse具有丰富的插件资源,方便进行代码编写、调试和项目管理。3.应用服务器:采用Tomcat作为应用服务器,Tomcat是一个开源的Servlet容器,具有轻量级、高效等特点,能够稳定运行JavaWeb应用。4.数据库:选用MySQL数据库,MySQL是一种常用的关系型数据库,具有性能高、成本低、可扩展性强等优点,适合存储和管理机票预订系统的数据。
4.2关键代码实现1.用户注册Servlet```java@WebServlet("/register")publicclassRegisterServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");Stringname=request.getParameter("name");StringidCard=request.getParameter("idCard");Stringphone=request.getParameter("phone");
Useruser=newUser();user.setUsername(username);user.setPassword(EncryptionUtil.encryptPassword(password));user.setName(name);user.setIdCard(idCard);user.setPhone(phone);
UserServiceuserService=newUserService();booleanresult=userService.registerUser(user);
if(result){response.sendRedirect("login.jsp");}else{request.setAttribute("error","注册失败,请重试");request.getRequestDispatcher("register.jsp").forward(request,response);}}}```2.用户登录Servlet```java@WebServlet("/login")publicclassLoginServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");
UserServiceuserService=newUserService();Useruser=userService.loginUser(username,EncryptionUtil.encryptPassword(password));
if(user!=null){HttpSessionsession=request.getSession();session.setAttribute("user",user);response.sendRedirect("index.jsp");}else{request.setAttribute("error","用户名或密码错误,请重试");request.getRequestDispatcher("login.jsp").forward(request,response);}}}```3.航班查询Servlet```java@WebServlet("/flightSearch")publicclassFlightSearchServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{StringdepartureCity=request.getParameter("departureCity");StringarrivalCity=request.getParameter("arrivalCity");StringdepartureDateStr=request.getParameter("departureDate");
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMdd");DatedepartureDate=null;if(departureDateStr!=null&&!departureDateStr.isEmpty()){try{departureDate=sdf.parse(departureDateStr);}catch(ParseExceptione){e.printStackTrace();}}
FlightServiceflightService=newFlightService();List<Flight>flights=flightService.searchFlights(departureCity,arrivalCity,departureDate);
request.setAttribute("flights",flights);request.getRequestDispatcher("flightList.jsp").forward(request,response);}}```4.机票预订Servlet```java@WebServlet("/bookTicket")publicclassBookTicketServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{intflightId=Integer.parseInt(request.getParameter("flightId"));
HttpSessionsession=request.getSession();Useruser=(User)session.getAttribute("user");
if(user!=null){FlightServiceflightService=newFlightService();Flightflight=flightService.getFlightById(flightId);
if(flight!=null&&flight.getAvailableSeats()>0){Orderorder=newOrder();order.setUser(user);order.setFlight(flight);order.setStatus("已预订");order.setBookingTime(newDate());
OrderServiceorderService=newOrderService();intorderId=orderService.createOrder(order);
Passengerpassenger=newPassenger();passenger.setOrder(order);passenger.setName(user.getName());passenger.setIdCard(user.getIdCard());passenger.setPhone(user.getPhone());
PassengerServicepassengerService=newPassengerService();passengerService.addPassenger(passenger);
flight.setAvailableSeats(flight.getAvailableSeats()1);flightService.updateFlight(flight);
response.sendRedirect("orderList.jsp");}else{request.setAttribute("error","该航班已无余票,请选择其他航班");request.getRequestDispatcher("flightDetails.jsp?flightId="+flightId).forward(request,response);}}else{response.sendRedirect("login.jsp");}}}```
五、测试调试5.1测试计划1.测试目标:验证机票预订系统的各项功能是否符合需求规格说明书的要求,检查系统在不同情况下的稳定性、可靠性和性能表现,确保系统能够正常运行,满足用户的使用需求。2.测试范围:包括用户注册登录、航班查询、机票预订、订单管理、支付功能以及后台管理等功能模块。3.测试方法:采用黑盒测试方法,通过设计测试用例来验证系统功能。同时,进行部分白盒测试,对关键代码逻辑进行覆盖测试,确保代码的正确性。4.测试人员安排:由课程设计小组的成员共同参与测试,每人负责不同功能模块的测试工作,确保全面覆盖系统功能。
5.2测试用例1.用户注册测试用例|用例编号|测试用例描述|输入数据|预期输出|||||||1|正常注册|用户名:testuser,密码:Test123456,姓名:张三,身份证号联系方式注册成功,跳转到登录页面||2|用户名已存在|用户名:已注册的用户名,密码:Test123456,姓名:张三,身份证号联系方式提示用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论