摘 要
随着社会经济的发展,二手车交易市场逐渐兴起。在互联网与信息及时高速发展的背景下,设计与实现嗒嗒二手车服务交易平台是顺应时代和二手车市场发展的必然选择,该平台的实现能够解决传统二手汽车市场信息获取困难和不对称、交易瑕疵和无保障等问题,为卖家买家提供一个二手汽车看车和交易的渠道,和二手汽车信息及订单的管理工具,能够增强买卖双方信任度,让买家及时准确了解二手车的真实情况,提高二手汽车交易成功的机率。
本文通过市场调研,根据实际要求决定采用Java语言、JavaScript、AJAX、MyBatis技术、Tomcat服务器和SpringBoot+jsp框架等,使用MySQL数据库,主要分析二手汽车的用户需求、存在的交易问题和市场需求趋势,设计一个嗒嗒二手车服务交易平台,该平台具有的系统界面的用户友好性、响应式设计让本系统适配各种屏幕大小和设备,同时支持多种语言,方便不同国家和地区的用户使用和交易。同时系统运行实现了用户二手车信息发布、浏览与服务交易买卖的功能。该系统大致分为用户注册与登录、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价等功能模块。用户通过信息注册登录平台,通过平台,买家用户能够根据自己的需求,查询符合条件的二手车辆信息,通过车辆的数据对比,进行看车预约和交易预约,进而在卖家用户同意交易创建订单的时候查询订单信息并行支付,和对交易进行评价。卖家用户也可以发布自己要出售的二手车的详细信息,订单完成后,查看自己的车辆评价信息。管理能够对所有用户和二手车服务交易信息进行管理。
本系统经过功能测试,实现了检测完毕包括但不限于用户登录、用户注册及汽车资讯、二手汽车等增减删查测试,通过功能测试,发现了系统中存在的漏洞,并对系统进行完善升级,现系统完全可以正常运行,确保能够为嗒嗒二手车服务交易平台,为用户提供良好的使用体验,并在在后期推广运营中提供强力的技术支撑。
关键词:Springboot+jsp 嗒嗒二手车服务交易平台 Java
ABSTRACT
With the development of the social economy, the second-hand car trading market is gradually emerging. In the context of the rapid and timely development of the Inter*** and information, the design and implementation of the Tata second-hand car service trading platform is an inevitable choice to adapt to the times and the development of the second-hand car market. The realization of this platform can solve the problems of the traditional second-hand car market information acquisition difficulties and asymmetries, transaction flaws and insecurity, provide a second-hand car viewing and trading channel for sellers and buyers, as well as second-hand car information and order management tools, can enhance the trust between buyers and sellers, enable buyers to a***urately understand the real situation of second-hand cars in a timely manner, and improve the probability of su***essful second-hand car transactions.
This article conducts market research and, based on actual requirements, decides to use Java language, JavaScript, AJAX, MyBatis technology, Tomcat server, and SpringBoot+JSP framework. Using MySQL database, the main focus is on analyzing the user needs, existing transaction problems, and market demand trends of second-hand cars. A Dada second-hand car service trading platform is designed, which has a user-friendly and responsive system interface that allows the system to adapt to various screen sizes and devices. At the same time, it supports multiple languages, making it convenient for users from different countries and regions to use and trade. At the same time, the system has implemented the functions of user second-hand car information publishing, browsing, and service transaction buying and selling. The system is roughly divided into functional modules such as user registration and login, used cars, car type, car viewing appointment, transaction appointment, transaction order, and transaction evaluation. Users can log in to the platform through information registration, and through the platform, buyer users can search for eligible second-hand vehicle information a***ording to their needs. By ***paring vehicle data, they can make car viewing and transaction reservations. Then, when the seller user agrees to create an order for the transaction, they can query the order information and make parallel payments, as well as evaluate the transaction. Seller users can also post detailed information about the used cars they want to sell, and after the order is ***pleted, view their vehicle evaluation information. Management can manage all user and second-hand car service transaction information.
This system has undergone functional testing and has ***pleted testing, including but not limited to user login, user registration, car information, and used car information. Through functional testing, vulnerabilities have been discovered in the system, and the system has been improved and upgraded. The system is now fully operational, ensuring a good user experience for the Dada used car service trading platform and providing strong technical support for future promotion and operation.
Key words: Springboot+JSP Dada Second hand Car Service Trading Platform Java
目 录
第一章 绪论
1.1项目背景
1.2项目意义
1.3国内外研究现状
1.4开发工具介绍
1.4.1Java编程语言
1.4.2MySQL数据库
1.4.3JSP技术
1.4.4Springboot框架
第二章 需求分析
2.1系统概述
2.2系统功能需求
2.3系统性能需求
2.4可行性分析
2.5开发环境
3.1系统总体设计
3.2功能模块设计
3.3数据库设计
第四章 详细设计及实现
4.1前台界面设计与实现
4.2后台功能设计与实现
4.3数据库连接
第五章 系统测试
5.1测试任务及目的
5.2测试计划
5.3测试用例
5.4测试结论
结 论
谢 辞
参考文献
附 录
第一章 绪论
1.1项目背景
随着社会经济的发展,二手车交易市场逐渐兴起。在互联网与信息及时高速发展的背景下,设计与实现嗒嗒二手车服务交易平台是顺应时代和二手车市场发展的必然选择,该平台的实现能够解决传统二手汽车市场信息获取困难和不对称、交易瑕疵和无保障等问题,为卖家买家提供一个二手汽车看车和交易的渠道,和二手汽车信息及订单的管理工具,能够增强买卖双方信任度,让买家及时准确了解二手车的真实情况,提高二手汽车交易成功的机率。
本文通过市场调研,根据实际要求决定采用Java语言、JavaScript、AJAX、MyBatis技术、Tomcat服务器和SpringBoot框架等,使用MySQL数据库,主要分析二手汽车的用户需求、存在的交易问题和市场需求趋势,设计一个嗒嗒二手车服务交易平台,该平台具有的系统界面的用户友好性、响应式设计让本系统适配各种屏幕大小和设备,同时支持多种语言,方便不同国家和地区的用户使用和交易。同时系统运行实现了用户二手车信息发布、浏览与服务交易买卖的功能。该系统大致分为用户注册与登录、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价等功能模块。用户通过信息注册登录平台,通过平台,买家用户能够根据自己的需求,查询符合条件的二手车辆信息,通过车辆的数据对比,进行看车预约和交易预约,进而在卖家用户同意交易创建订单的时候查询订单信息并行支付,和对交易进行评价。卖家用户也可以发布自己要出售的二手车的详细信息,订单完成后,查看自己的车辆评价信息。管理能够对所有用户和二手车服务交易信息进行管理。
1.2项目意义
研究二手车交易市场的意义在于深入了解这一领域的发展趋势、市场现状和交易特点,从而有针对性地提出解决方案和改进建议,促进该市场的健康发展。具体来说,嗒嗒二手车服务交易平台的设计与实现对洞察市场需求、促进交易安全、改进平台服务和促进行业规范等多方面都具有积极的研究意义。通过嗒嗒二手车服务交易平台的设计与实现,可以深入了解消费者需求、购买行为和偏好,帮助卖家更好地制定营销策略和推广方案,提高市场竞争力;能够帮助识别交易过程中存在的安全隐患和风险,提出相应的安全保障措施和建议,保障买家和卖家的权益,降低交易风险。同时通过研究用户对二手车交易平台的需求和反馈,能够不断改进平台功能、提升用户体验,增加平台吸引力和降低交易成本。此外还可以推动政府、卖家和社会各方共同协作,建立行业规范和标准,提升整个二手市场市场的信誉度和可持续性发展。总的来说,嗒嗒二手车服务交易平台的开发对于促进交易市场的发展、提升服务水平和确保交易安全都具有重要的意义。
1.3国内外研究现状
目前,国内外已经有一些二手车交易平台的设计与实现。例如国内的瓜子二手车、人人车等。这些平台通过提供详细的车辆信息、真实的车辆状况报告、全面的车辆检测和评估等,提高了二手车交易的透明度和可信度。除了已经提到的瓜子二手车和人人车,国内还有其他一些知名的二手车交易平台,例如58安居客的二手车频道、赶集网的二手车频道、太平洋汽车网等。这些平台在二手车交易市场有一定的影响力,通过提供更多的车源信息和买卖双方之间的联系方式,帮助买家和卖家更快速地进行交易。国外的eBay、Autotrader、Craigslist和CarMax等。这些平台也通过提供全面的车辆信息、车辆检测和评估等服务,努力提高交易的可信度和安全性。
此外,还有一些研究人员和学者对二手车交易市场进行了相关研究。他们研究了二手车交易市场的发展趋势、交易过程中的信息不对称问题以及如何提高买家和卖家的信任度等。他们提出了一些解决方案和建议,以促进二手车交易市场的健康发展。通过对国内外研究现状的了解,可以为嗒嗒二手车服务交易平台的设计和实现提供一定的借鉴和参考,使其能够更好地满足用户的需求,提高交易的安全性和用户体验感。
1.4开发工具介绍
1.4.1Java编程语言
Java是一种流行的编程语言,能够面向对象的高级编程语言,具有简单、可移植、安全和高性能等特点,在软件开发领域广泛应用。其可移植性得益于Java虚拟机(JVM),使得Java程序可以在不同平台上运行,只需编写一次代码。Java注重安全性,提供了字节码验证、异常处理和访问控制等安全机制,确保程序的稳定和安全,能够帮助开发者轻松构建可靠、可移植和安全的应用程序。
1.4.2MySQL数据库
MySQL是一个开源的关系型数据库管理系统(RDBMS),它是目前世界上最流行的数据库之一。MySQL由瑞典公司MySQL AB开发,并于2000年正式发布。它被广泛应用于各种规模的应用程序,从小型个人项目到大型企业级应用程序。由于MySQL具有灵活性、可靠性和性能优势,它在各种场景下都得到广泛应用,包括网站、企业级应用程序、移动应用程序、数据分析和物联网等。MySQL可以使用关系模型来组织数据,并使用结构化查询语言(SQL)进行数据库管理和数据操作;运行在多个操作系统上,包括Windows、Linux、MacOS等;支持横向和纵向扩展,可以通过添加更多的服务器节点或增加硬件资源来处理更大规模的数据和负载。
1.4.3JSP技术
JSP能以模板化的方式简单、高效地添加动态网页内容。可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签JSTL),而且支持可扩展功能的自定义标签。并且有良好的工具支持,继承了Java语言的相对易用性和跨平台优势,实现“一次编写,处处运行”。因为支持Java及其相关技术的开发平台多,网站开发人员可以选择在最适合自己的系统平台上进行JSP开发。并且可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。
1.4.4Springboot框架
Spring Boot是一个基于Spring的开源框架,它通过简化配置和快速启动内嵌式服务器,帮助开发人员快速搭建基于Spring的应用程序。Spring Boot引入了“约定优于配置”的理念,提供了许多开箱即用的功能和插件,使得开发者能够更加专注于业务逻辑的开发,而不用花费太多精力在配置上。并且能够通过自动配置和约定优于配置的原则,大大简化了应用程序的配置过程,支持内嵌式的服务器,例如Tomcat、Jetty等,可以快速启动和运行应用程序,方便开发和部署。
第二章 需求分析
2.1系统概述
本嗒嗒二手车服务交易平台首先根据使用该网站的用户的角色的不同分为:买家用户,卖家用户,管理员。
本网上嗒嗒二手车服务交易平台根据用户需求主要分为三个模块:买家用户,卖家用户,管理员。
其中买家用户模块主要实现买家用户的注册登录,能够查看前台首页、系统公告、汽车资讯,以便及时了解相关系统信息和最新汽车市场情况,可以搜索和浏览二手汽车信息,实现预约看车和预约交易操作,并可在个人中心的交易单进行支付,完成交易;并对自己的个人首页、看车预约、交易预约、交易订单、交易评价等信息进行管理。
买家用户角色的用例展示如图2-1所示。
图2-1 买家用户角色用例图
卖家用户模块主要实现用户的注册登录,能够查看前台首页、系统公告、汽车资讯,以便及时了解相关系统信息和最新汽车市场情况,可以搜索和浏览二手汽车信息,可进行评价,并可在点击个人中心的二手汽车进行发布自己的二手汽车信息,发布的二手车信息会在系统导航栏的二手汽车页面展示出来;并对自己的个人首页、二手汽车、看车预约、交易预约、交易订单、交易评价、收藏等信息进行管理。
买家用户角色的用例展示如图2-2所示。
图2-2 卖家用户角色用例图
管理员模块主要负责管理平台上的主页、公共管理、用户管理、资讯管理、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价等,可以进行新增、修改、删除、查询等操作,同时可以对系统账号的个人信息和密码进行管理。
管理员角色的用例展示如图2-3所示。
图2-3 管理员角色用例图
2.2系统功能需求
根据嗒嗒二手车服务交易平台功能需求分析,主要划分为了买家用户模块、卖家用户和管理员模块这三大模块。具体如下:
买家用户模块:
- 注册登录:游客可以通过注册成为系统用户,使用账号密码可进行登录,使用系统功能。
- 注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现其他操作,就必须有这个系统用户的账号,如果没有账号的话,可以在注册以后登录进行相关的操作,同时用户还可以通过“我的账户”这以按钮对个人信息以及操作的信息进行管控。
- 首页:买家用户登录后,可以在首页浏览轮播图、最新汽车资讯,方便快速了解汽车市场的情况。
- 系统公告:买家用户可以在系统公告模块查看系统发布的所有系统公告,包括关于我们、联系方式、网站介绍等内容,以便及时了解相关系统公告。
- 汽车资讯:买家用户可以在汽车资讯模块查看系统发布的所有汽车资讯,支持汽车资讯热门推荐,点击某一篇可浏览详细信息,并可以进行点赞、收藏和评论,及时了解和收藏最新汽车市场信息。
- 二手汽车:买家用户可以在二手汽车模块查看发布的所有二手汽车信息,包括汽车名称、汽车类型、汽车类型、卖价、行程、卖家用户、卖价电话、卖家地址、汽车介绍等详细信息,可以对在相关二手汽车下进行评论,并且用户可以实现预约看车和预约交易操作,填写相关信息进行提交。同时,可以通过汽车名称、汽车类型、汽车类型、卖家名称进行搜索,并同搜索条件下对比信息。
- 我的账户:买家用户可以在我的账户模块查看自己的个人资料信息,并能够修改密码和修改资料,方便管理自己的账户信息;密码修改以后需使用新密码进行登录;用户还可以修改包括头像、昵称、邮箱、买家姓名、买家电话等资料信息。
- 个人中心:卖家用户可对个人中心进行管控,包括个人首页、看车预约、交易预约、交易订单、交易评价、收藏等功能。例如:
- 买家用户可以在个人首页查看个人资料信息。
- 可以在看车预约,查看自己提交的看车预约详情信息,并对看车预约信息进行审核和回复。
- 通过交易预约,查看自己提交的交易预约详情信息,并对交易预约信息进行审核和回复,同时可以进行同意交易操作,提交相关同意交易信息。
- 点击交易订单,可以查看卖家用户同意交易后生成的交易订单详情信息。实现在线支付操作,并且可以进行对其进行评价。
- 在交易评价里,可以查看自己提交的交易评价信息。
卖家用户模块:
- 注册登录:可以注册成为卖家用户,卖家用户的注册信息需经过管理员审核才可以登录成功,使用系统功能,同时还可以通过“我的账户”这以按钮对个人信息以及操作的信息进行管控。
- 首页:卖家用户登录后,可以在首页浏览轮播图、汽车资讯等信息,方便快速了解当前市场的情况。
- 系统公告:卖家用户可以在系统公告模块查看系统发布的所有系统公告,包括关于我们、联系方式、网站介绍等内容,以便及时了解相关系统公告。
- 汽车资讯:卖家用户可以在汽车资讯模块查看系统发布的所有汽车资讯,支持汽车资讯热门推荐,点击某一篇可浏览详细信息,并可以进行点赞、收藏和评论,及时了解和收藏最新汽车市场信息。
- 二手汽车:卖家用户可以在二手汽车模块查看发布的所有二手汽车信息详情信息,还可以对在相关二手汽车下进行评论。
- 我的账户:卖家用户可以在我的账户模块查看自己的个人资料信息,并能够修改密码和修改资料,方便管理自己的账户信息;密码修改以后需使用新密码进行登录;用户还可以修改包括头像、昵称、邮箱、卖家名称、卖家电话、卖家地址等资料信息。
- 个人中心:卖家用户可对个人中心进行管控,包括个人首页、二手汽车、看车预约、交易预约、交易订单、交易评价、收藏等功能。例如:
- 卖家用户可以在个人首页查看个人资料信息;
- 卖家用户可在二手汽车功能里添加自己的二手车信息,包括汽车名称、汽车类型、卖价、卖家名称、卖家电话等,以便能够更好的交易自己的二手汽车,并可以查看相关二手汽车的评论
- 可以在看车预约,查看买家用户提交给自己的看车预约详情信息,并对看车预约信息进行审核和回复
- 通过交易预约,查看买家用户提交给自己的交易预约详情信息,并对交易预约信息进行审核和回复,同时可以进行同意交易操作,提交相关同意交易信息
- 点击交易订单,可以查看自己的交易订单详情信息。
- 在交易评价里,可以查看买家用户提交给自己的交易评价信息。
- 收藏功能可以对自己收藏的汽车资讯的信息进行管理。
管理员模块:
- 登录:管理员账号密码由系统直接生成,可以随时进入到系统中,使用系统各项管理操作,同时还可以对个人信息和修改密码进行管控。
- 公共管理:管理员可以对首页的轮播图和系统公告进行管理,保证系统首页轮播图和系统公告的及时更新,方便及时通知用户相关信息,维护系统信息。
- 用户管理:管理员可以在系统用户模块对系统用户进行管理,包括买家用户、卖家用户和管理员,可以进行添加新用户、修改用户信息、删除用户、查询用户等操作,同时审核卖家用户的注册信息,以保证系统的安全和正常运行。
- 资讯管理:管理员可以发布、管理和删除平台的系统的汽车资讯,包括发布封面图、标题、分类、标签、描述、正文等内容,并对资讯进行分类,以便用户能够及时知悉汽车资讯,了解当前市场情况。
- 二手汽车:管理员可以管理所有二手汽车信息,可以通过汽车名称、汽车类型、汽车类型,卖家名称搜索已发布的二手汽车信息,并且可以添加新的二手车信息、修改二手车信息、删除二手车信息、查询二手车信息等操作,还可以查看详情信息和评论信息,以确保二手汽车的及时更新和准确性。
- 汽车类型:管理员可以对汽车类型进行管理,可以添加、修改、删除和查询汽车类型信息,方便用户根据类型进行搜索对比二手汽车信息。
- 看车预约:管理员可以查看和管理所有看车预约详情信息,可以通过汽车名称、车辆品牌、看车日期搜索提交的所有看车预约信息,并添加、修改、删除和查询相关看车预约,以确保看车顺利进行。
- 交易预约:管理员可以管理所有交易预约信息,可以通过汽交易编号、汽车名称、车辆品牌、交易日期搜索提交的所有交易预约信息,并且可以添加、修改、删除和查询交易预约信息和同意交易操作,以确保交易顺利安全进行和完成。
- 交易订单:管理员可以管理所有交易订单信息,可以通过汽交易编号、汽车名称、车辆品牌、交易日期搜索提交的所有交易订单信息,查看交易评价,以便能及时调整升级系统和管理卖家二手车交易信息,修改支付状态,以确保交易顺利完成。
- 交易评价:管理员可以查看并管理所有的交易评价信息,添加新的交易评价、修改交易评价、删除交易评价、查询交易评价等操作。
- 个人信息:管理员可以看查看和管理个人信息,可以修改个人信息。
- 修改密码:管理员可以修改账号密码,修改成功之后需要使用新的密码进行登录。
2.3系统性能需求
系统性能需求是指对一个系统的性能需求进行分析和定义的过程。在进行性能需求分析时,因此嗒嗒二手车服务交易平台的设计与实现主要需要考虑以下几个方面的性能需求:
响应时间:响应时间是指系统在接收到请求后,作出响应的时间。根据具体的业务需求和用户体验要求,可以确定系统在不同场景下的响应时间要求。
吞吐量:吞吐量是指系统在一定时间内处理的事务或请求的数量。根据业务需求和用户量的估计,可以确定系统需要支持的最大吞吐量。
并发用户数:并发用户数是指系统在同时使用的用户数量。根据预期的用户量和并发访问需求,可以确定系统需要支持的最大并发用户数。
可扩展性:可扩展性是指系统在面对用户量增加或并发访问需求增加时,能否通过增加硬件资源或调整系统架构来满足需求。根据预期的用户增长和扩展计划,可以确定系统需要具备的可扩展性要求。
故障处理能力:系统对故障的处理能力是指在出现错误或故障时,系统能够快速、准确地识别、定位并处理故障的能力。根据业务的重要性和对故障处理的要求,可以确定系统需要具备的故障处理能力。
安全性:系统在性能需求分析中,也需考虑安全方面的需求,如数据的保密性、完整性和可用性等。根据具体的安全需求和合规要求,可以确定系统需要满足的安全性需求。
通过对这些性能需求进行详细分析和定义,可以为嗒嗒二手车服务交易平台的设计和开发提供指导,确保系统在满足预期的性能需求的同时,具备良好的性能和可靠性。
2.4可行性分析
2.4.1技术可行性
嗒嗒二手车服务交易平台选择采用合适的Java语言、JavaScript、AJAX、MyBatis技术、Tomcat服务器和基于SpringBoot+jsp框架等,结合可靠的MySQL数据库来实现系统的功能需求,来支持嗒嗒二手车服务交易需求。具备界面友好、操作简单、数据安全、系统稳定可扩展,并通过计算机来编写代码和设计页面,和使用Tomcat服务器,来保证相应硬件设备的稳定性和扩展性。同时,所使用的开发工具都能够从网上免费下载,费用低且可行,能够节省开发成本。此外,开发团队只要具备Web开发经验和相关领域知识,就能够能够高效地进行系统设计与开发。所以从技术角度分析具有可行性。
2.4.2运行可行性
嗒二手车服务交易平台在系统开发阶段进行充分的测试和调试工作,因此确保系统在正式投入使用时各个运行阶段过程都能够正常运行;该平台稳定高和可靠强,能够避免出现系统崩溃或数据丢失等问题。另外,考虑到未来平台可能会有更多的用户和交易量,嗒嗒二手车服务交易平台还具备良好的可扩展性和数据安全性,能够方便地进行水平扩展或功能扩展,实现二手车服务交易服务和管理。同时,使用者只要具备一定的电脑知识即可使用普通电脑运行进入嗒嗒二手车服务交易平台,使用系统功能。所以从运行角度分析具有可行性。
2.5开发环境
为了更好的实现系统功能,嗒嗒二手车服务交易平台根据开发团队的偏好或者公司要求,选择常见的操作系统,如Windows、Linux、MacOS等;并采用Java语言、JavaScript、AJAX、MyBatis技术,选择Spring Boot作为后端框架,结合jsp作为前端页面开发,配合Tomcat服务器和MySQL数据库,来实现嗒嗒二手车服务交易平台。
第三章 总体设计
3.1系统总体设计
本系统采用模块化的方式进行网站结构设计,主要模块有买家用户模块,卖家用户模块,管理员模块,通过正确地处理模块之间的内部联系、调用关系和数据关系以实现整个系统的功能。
买家用户模块和卖家用户在未注册时可查找汽车资讯、二手汽车等信息。
其中买家用户注册登录后,除了快速搜索和浏览系统公告、汽车资讯、二手汽车等信息,方便快速了解当前系统和市场的情况外,还可以对汽车资讯,进行点赞、收藏和评论操作;并且可以对二手汽车进行搜索对比信息,及进入详情页面进行预约看车和预约交易操作,可在个人中心查看和管理个人首页、看车预约、交易预约、交易订单、交易评价、收藏等信息。
而卖家用户模块的注册信息需经过管理员审核才可以登录,,登录后能够查看前台首页、系统公告、汽车资讯,以便及时了解相关系统信息和最新汽车市场情况,并且可以搜索和浏览二手汽车信息,可进行评价,可以点击个人中心的二手汽车进行发布自己的二手汽车信息,发布的二手车信息会在系统导航栏的二手汽车页面展示出来;并对自己的个人首页、二手汽车、看车预约、交易预约、交易订单、交易评价、收藏等信息进行管理,审核看车预约、看车预约、交易预约,同时可以同意交易,创建订单。
管理员模块主要负责管理平台上的主页、公共管理、用户管理、资讯管理、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价等,可以进行新增、修改、删除、查询等操作,审核各项信息,包括审核、看车预约、交易预约、交易订单等信息。同时,可以对系统账号的个人信息和密码进行管理。
3.2功能模块设计
3.2.1前台功能模块设计
通过分析嗒嗒二手车服务交易平台功能需求和用户需求,可以划分为前台用户和后台管理两大模块。前台界面具有界面简介、大方、友好,操作简单、高效、便捷的特点。前台功能模块主要包括买家和卖家两大部分,其中买家用户具有注册登录、首页、系统公告、汽车资讯、二手汽车、我的账户、个人中心(个人首页、看车预约、交易预约、交易订单、交易评价、收藏)等功能。卖家用户则具有注册登录、首页、系统公告、汽车资讯、二手汽车、我的账户、个人中心(个人首页、二手汽车、看车预约、交易预约、交易订单、交易评价、收藏)。
前台功能模块图如图3-1所示。
图3-1 前台功能功能模块图
3.2.1后台管理功能模块设计
通过分析嗒嗒二手车服务交易平台功能需求和用户需求,可以划分为前台用户和后台管理两大模块。后台管理功能模块全面便捷,主要包括登录、主页、公共管理、用户管理、资讯管理、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价、个人信息、修改密码等功能。
后台管理功能模块图如图3-2所示。
图3-2 后台管理功能功能模块图
3.3数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。根据前面的数据流程图,结合系统的功能模块设计,设计出符合系统的各信息实体,主要包括公共管理、用户管理、资讯管理、首页(二手汽车、分类列表、订单列表、交易订单)等。具体的数据库E-R图如图3-3所示。
图3-3 数据库总体E-R图
通过上一小节中嗒嗒二手车服务交易平台中总E-R关系图上得出一共需要创建很多个数据表。
在此我主要罗列几个主要的数据库表结构设计。
(1)买家用户表
买家用户用户表含有买家用户ID、买家姓名、买家电话、审核状态、用户ID、创建时间、更新时间等属性。如表3-1所示。
表3-1 买家用户表结构表(buyer_user)
| 字段 |
类型 |
主键 |
外键 |
注释 |
| buyer_user_id |
int |
是 |
买家用户ID |
|
| buyer_name |
varchar |
买家姓名 |
||
| buyers_phone_number |
varchar |
买家电话 |
||
| examine_state |
varchar |
审核状态 |
||
| user_id |
int |
用户ID |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(2)卖家用户表
卖家用户表含有注册卖家用户ID、卖家名称、卖家电话、卖家地址、资格截图、审核状态、用户ID、创建时间、更新时间等属性。如表3-2所示。
表3-2 卖家用户表结构表(seller_customers )
| 字段 |
类型 |
主键 |
外键 |
注释 |
| seller_customers_id |
int |
是 |
卖家用户ID |
|
| seller_name |
varchar |
卖家名称 |
||
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| qualification_screenshot |
varchar |
资格截图 |
||
| examine_state |
varchar |
审核状态 |
||
| user_id |
int |
用户ID |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(3)二手汽车表
二手汽车表含二手汽车ID、汽车名称、汽车类型、汽车图片、车辆品牌、卖价、行程(千米)、卖家用户、卖家名称、卖家电话、卖家地址、汽车介绍、点击数、创建时间、更新时间等属性。如表3-3所示。
表3-3 二手汽车表结构表(secondhand_car )
| 字段 |
类型 |
主键 |
外键 |
注释 |
| secondhand_car_id |
int |
是 |
二手汽车ID |
续表
| 字段 |
类型 |
主键 |
外键 |
注释 |
| car_name |
varchar |
汽车名称 |
||
| car_type |
varchar |
汽车类型 |
||
| car_pictures |
varchar |
汽车图片 |
||
| vehicle_brand |
varchar |
车辆品牌 |
||
| selling_price |
int |
卖价 |
||
| journey_kilometers |
int |
行程(千米) |
||
| seller_customers |
int |
卖家用户 |
||
| seller_name |
varchar |
卖家名称 |
||
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| introduction_to_automobiles |
longtext |
汽车介绍 |
||
| hits |
int |
点击数 |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(4)看车预约表
看车预约表含有看看车预约ID、汽车名称、汽车类型、汽车图片、车辆品牌、卖价、行程(千米)、卖家用户、卖家名称、卖家电话、卖家地址、看车用户、买家姓名、买家电话、看车日期、备注内容、审核状态、审核回复、创建时间、更新时间等属性。如表3-4所示。
表3-4 看车预约表结构表(car_viewing_appointment)
| 字段 |
类型 |
主键 |
外键 |
注释 |
| car_viewing_appointment_id |
int |
是 |
看车预约ID |
|
| car_name |
varchar |
汽车名称 |
||
| car_type |
varchar |
汽车类型 |
||
| car_pictures |
varchar |
汽车图片 |
||
| vehicle_brand |
varchar |
车辆品牌 |
||
| selling_price |
int |
卖价 |
||
| journey_kilometers |
int |
行程(千米) |
||
| seller_customers |
int |
卖家用户 |
续表
| 字段 |
类型 |
主键 |
外键 |
注释 |
| seller_name |
varchar |
卖家名称 |
||
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| car_viewing_users |
int |
看车用户 |
||
| buyer_name |
varchar |
买家姓名 |
||
| buyers_phone_number |
varchar |
买家电话 |
||
| car_viewing_date |
date |
看车日期 |
||
| remarks |
text |
备注内容 |
||
| examine_state |
varchar |
审核状态 |
||
| examine_reply |
varchar |
审核回复 |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(5)交易预约表
交易预约表含有交易预约ID、交易编号、汽车名称汽车类型、汽车图片、车辆品牌、卖价、行程(千米)、卖家用户、卖家名称、卖家电话、卖家地址、买家用户、买家姓名、买家电话、交易日期、交易备注、审核状态、审核回复、创建时间、更新时间等属性。如表3-5所示。
表3-5 交易预约表表结构表(transaction_reservation)
| 字段 |
类型 |
主键 |
外键 |
注释 |
| transaction_reservation_id |
int |
是 |
交易预约ID |
|
| transaction_number |
varchar |
交易编号 |
||
| car_name |
varchar |
汽车名称 |
||
| car_type |
varchar |
汽车类型 |
||
| car_pictures |
varchar |
汽车图片 |
||
| vehicle_brand |
varchar |
车辆品牌 |
||
| selling_price |
int |
卖价 |
||
| journey_kilometers |
int |
行程(千米) |
||
| seller_customers |
int |
卖家用户 |
||
| seller_name |
varchar |
卖家名称 |
续表
| 字段 |
类型 |
主键 |
外键 |
注释 |
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| buyer_user |
int |
买家用户 |
||
| buyer_name |
varchar |
买家姓名 |
||
| buyers_phone_number |
varchar |
买家电话 |
||
| transaction_date |
date |
交易日期 |
||
| transaction_notes |
text |
交易备注 |
||
| examine_state |
varchar |
审核状态 |
||
| examine_reply |
varchar |
审核回复 |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(6)交易订单表
交易订单表含有交易订单ID、交易编号、汽车名称、汽车类型、汽车图片、车辆品牌、卖价、行程(千米)、卖家用户、卖家名称、卖家电话、卖家地址、买家用户、买家姓名、买家电话、交易日期、交易备注、车辆档案、支付状态、支付类型、创建时间、更新时间等属性。如表3-6所示。
表3-6 交易订单表表结构表(transaction_order)
| 字段 |
类型 |
主键 |
外键 |
注释 |
| transaction_order_id |
int |
是 |
交易订单ID |
|
| transaction_number |
varchar |
交易编号 |
||
| car_name |
varchar |
汽车名称 |
||
| car_type |
varchar |
汽车类型 |
||
| car_pictures |
varchar |
汽车图片 |
||
| vehicle_brand |
varchar |
车辆品牌 |
||
| selling_price |
int |
卖价 |
||
| journey_kilometers |
int |
行程(千米) |
||
| seller_customers |
int |
卖家用户 |
||
| seller_name |
varchar |
卖家名称 |
续表
| 字段 |
类型 |
主键 |
外键 |
注释 |
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| buyer_user |
int |
买家用户 |
||
| buyer_user |
int |
买家用户 |
||
| buyer_name |
varchar |
买家姓名 |
||
| buyers_phone_number |
varchar |
买家电话 |
||
| transaction_date |
date |
交易日期 |
||
| transaction_notes |
text |
交易备注 |
||
| vehicle_file |
varchar |
车辆档案 |
||
| pay_state |
varchar |
支付状态 |
||
| pay_type |
varchar |
支付类型: 微信、支付宝、网银 |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
(7)交易评价表
交易评价表含有交易评价ID、交易编号、汽车名称、汽车类型、汽车图片、车辆品牌、卖价、行程(千米)、卖家用户、卖家名称、卖家电话、卖家地址、买家用户、买家姓名、买家电话、交易日期、车辆档案、评价内容、创建时间、更新时间等属性。如表3-7所示。
表3-7 交易评价表表结构表(transaction_evaluations)
| 字段 |
类型 |
主键 |
外键 |
注释 |
| transaction_evaluations_id |
int |
是 |
交易评价ID |
|
| transaction_number |
varchar |
交易编号 |
||
| car_name |
varchar |
汽车名称 |
||
| car_type |
varchar |
汽车类型 |
||
| car_pictures |
varchar |
汽车图片 |
||
| vehicle_brand |
varchar |
车辆品牌 |
||
| selling_price |
int |
卖价 |
||
| journey_kilometers |
int |
行程(千米) |
续表
| 字段 |
类型 |
主键 |
外键 |
注释 |
| seller_customers |
int |
卖家用户 |
||
| seller_name |
varchar |
卖家名称 |
||
| sellers_phone_number |
varchar |
卖家电话 |
||
| seller_address |
varchar |
卖家地址 |
||
| buyer_user |
int |
买家用户 |
||
| buyer_name |
varchar |
买家姓名 |
||
| buyers_phone_number |
varchar |
买家电话 |
||
| transaction_date |
date |
交易日期 |
||
| vehicle_file |
varchar |
车辆档案 |
||
| evaluation_content |
text |
评价内容 |
||
| create_time |
datetime |
创建时间 |
||
| update_time |
timestamp |
更新时间 |
第四章 详细设计及实现
4.1前台界面设计与实现
4.1.1用户登录界面
买家用户注册后可以使用账号密码可进行登录,使用系统功能;用户登录时按照要求输入用户名和密码,系统中函数在数据库中查询用户名和密码若有匹配的则进入系统买家用户页面,否则证明非该网站用户,跳回网站首页。
用户登录流程图如下所示。
图4-1 用户登录流程图
用户登录页面设计如下图所示。
图4-2 登录页面设计
4.1.2用户注册界面
可以通过注册成为买家用户和卖家用户,使用账号密码可进行登录,使用系统功能,卖家用户的注册信息需经过管理员审核通过,才可使用账号密码可进行登录,使用系统功能,并可对个人信息和密码进行管理等功能。
用户注册流程图如下所示。
图4-3 用户注册流程图
用户注册页面设计如下图所示。
图4-4 用户注册页面设计
4.1.3首页界面
卖家用户和卖家用户登录后,可以在首页浏览轮播图、汽车资讯等信息,方便快速了解当前市场的情况。
例如,首页查看流程图如下所示。
图4-5 首页查看流程图
例如,这里以买家用户的首页页面为例,页面设计如下图所示。
图4-6 买家用户的首页页面设计
4.1.4买家用户二手汽车界面
买家用户可以在二手汽车模块查看发布的所有二手汽车信息,包括汽车名称、汽车类型、汽车类型、卖价、行程、卖家用户、卖价电话、卖家地址、汽车介绍等详细信息,可以对在相关二手汽车下进行评论,并且用户可以实现预约看车和预约交易操作,填写相关信息进行提交。同时,可以通过汽车名称、汽车类型、汽车类型、卖家名称进行搜索,并同搜索条件下对比信息。
买家用户二手汽车预约看车和预约交易流程图如下所示。
图4-7 买家用户户二手汽车预约看车和预约交易流程图
买家用户二手汽车详情页面设计如下图所示。
图4-8 买家用户二手汽车详情页面设计
4.1.5买家用户个人中心界面
买家用户可对个人中心进行管控包括个人首页、看车预约、交易预约、交易订单、交易评价、收藏等功能。例如:
买家用户可以在个人首页查看个人资料信息。可以在看车预约,查看自己提交的看车预约详情信息,并对看车预约信息进行审核和回复。通过交易预约,查看自己提交的交易预约详情信息,并对交易预约信息进行审核和回复,同时可以进行同意交易操作,提交相关同意交易信息。点击交易订单,可以查看卖家用户同意交易后生成的交易订单详情信息。实现在线支付操作,并且可以进行对其进行评价。在交易评价里,可以查看自己提交的交易评价信息。
例如,买家用户个人中心交易订单支付流程图如下所示。
图4-9 买家用户个人中心交易订单支付流程图
买家用户个人中心页面设计如下图所示。
图4-10 买家用户个人中心页面设计
4.1.6卖家用户个人中心界面
卖家用户可对个人中心进行管控,包括个人个人中心、二手汽车、看车预约、交易预约、交易订单、交易评价、收藏等功能。例如:
卖家用户可以在个人个人中心查看个人资料信息;卖家用户可在二手汽车功能里添加自己的二手车信息,包括汽车名称、汽车类型、卖价、卖家名称、卖家电话等,以便能够更好的交易自己的二手汽车,并可以查看相关二手汽车的评论。可以在看车预约,查看买家用户提交给自己的看车预约详情信息,并对看车预约信息进行审核和回复。通过交易预约,查看买家用户提交给自己的交易预约详情信息,并对交易预约信息进行审核和回复,同时可以进行同意交易操作,提交相关同意交易信息点击交易订单,可以查看自己的交易订单详情信息。在交易评价里,可以查看买家用户提交给自己的交易评价信息。收藏功能可以对自己收藏的汽车资讯的信息进行管理。这里以二手紫车
例如,个人中心二手汽车添加流程图如下所示。
图4-11 卖家用户个人中心二手汽车添加流程图
卖家用户个人中心二手汽车页面设计如下图所示。
图4-12 卖家用户个人中心二手汽车页面设计
例如,个人中心看车预约、交易预约审核流程图如下所示。
图4-13 个人中心看车预约、交易预约审核流程流程图
例如,卖家个人中心看车预约详情页面设计如下图所示。
图4-14 卖家个人中心看车预约详情页面设计
4.2后台功能设计与实现
4.2.1管理员登录模块
管理员账号密码由系统直接生成,可以随时进入到系统中,使用系统各项管理操作,同时还可以对个人信息和修改密码进行管控。
管理员登录流程图如下所示。
图4-15 管理员登录流程图
管理员登录页面设计如下图所示。
图4-16 管理员登录页面设计
4.2.2公共管理界面
管理员可以对首页的轮播图和系统公告进行管理,保证系统首页轮播图和系统公告的及时更新,方便及时通知用户相关信息,维护系统信息。
公共管理流程图如下所示。
图4-17 公共管理流程图
公共管理页面设计如下图所示。
图4-18 公共管理页面设计
4.2.3用户管理界面
管理员可以在系统用户模块对系统用户进行管理,包括买家用户、卖家用户和管理员,可以进行添加新用户、修改用户信息、删除用户、查询用户等操作,同时审核卖家用户的注册信息,以保证系统的安全和正常运行。
用户管理流程图如下所示。
图4-19 用户管理流程图
用户管理页面设计如下图所示。
图4-20 用户管理页面设计
4.2.4资讯管理界面
管理员可以发布、管理和删除平台的系统的汽车资讯,包括发布封面图、标题、分类、标签、描述、正文等内容,并对资讯进行分类,以便用户能够及时知悉汽车资讯,了解当前市场情况。
例如,资讯管理流程图如下所示。
图4-21 管理员资讯管理流程图
管理员资讯管理页面设计如下图所示。
图4-22 管理员资讯管理页面设计
4.2.5二手汽车界面
管理员可以管理所有二手汽车信息,可以通过汽车名称、汽车类型、汽车类型,卖家名称搜索已发布的二手汽车信息,并且可以添加新的二手车信息、修改二手车信息、删除二手车信息、查询二手车信息等操作,还可以查看详情信息和评论信息,以确保二手汽车的及时更新和准确性。。
例如,二手汽车流程图如下所示。
图4-23 管理员二手汽车流程图
管理员二手汽车页面设计如下图所示。
图4-24 管理员二手汽车页面设计
4.2.6交易订单界面
管理员可以管理所有交易订单信息,可以通过汽交易编号、汽车名称、车辆品牌、交易日期搜索提交的所有交易订单信息,查看交易评价,以便能及时调整升级系统和管理卖家二手车交易信息,修改支付状态,以确保交易顺利完成。
例如,交易订单流程图如下所示。
图4-25 管理员交易订单流程图
管理员交易订单页面设计如下图所示。
图4-26 管理员交易订单页面设计
4.3数据库连接
数据库连接是指应用程序与数据库之间建立的连接,通过该连接可以进行数据的读取、写入和修改操作。JDBC连接:JDBC是Java语言访问数据库的标准API。通过JDBC连接,可以使用Java程序访关系型数据库MySQL。使用JDBC连接数据库的主要步骤包括加载数据库驱动、建立连接、创建Statement对象、执行SQL语句、处理结果。从Springboot+jsp架构的原理可知,二手汽车推荐系统分析系统的各大模块的实现均需要对数据库的数据进行操作,具体包括查询数据、写入数据、更新数据和删除数据。
数据库流程图如下图所示。
图4-28 数据库查询流程图
数据库配置文件关键代码如下:
db = SQLAlchemy()
app = Springboot+jsp(__name__, static_folder='static')
# 数据库链接配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@127.0.0.1:3306/projectxxxxx'
app.secret_key = 'v&#prqo7t*(!ktb+8r=+83@#_$n1pg_xig$j=6v^r3#$i)wx87'
db.init_app(app)
app.config['UPLOAD_FOLDER'] = 'static/upload'
第五章 系统测试
5.1测试任务及目的
测试是为了发现在开发的程序中所存在的问题,测试这一工作是非常艰巨的,而又是非常困难的,这一部分在程序的设计中占有很大比例,可以说一个程序的开发工作量要是占据了百分至六十,那么剩下的百分之四十必然是测试这一部分,甚至更高。所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
软件测试和开发过程有着密切的联系,它们都需要遵循严格的管理学原则,以确保软件的可靠性和可用性。因此,为了验证嗒嗒二手车服务交易平台的有效性,我们需要对其各个功能模块的运行情况和性能进行严格的检查和验证。一旦检查结果出现问题,我们将立即采取措施,并尽快纠正,从而为用户提供更加优质的服务。
5.2测试计划
测试计划是软件测试过程中的一个关键文档,用于指导测试活动的执行。它提供了测试范围、测试目标、测试策略、测试任务、测试资源和时间安排等信息,以确保测试工作可以按照既定的计划进行。
对于嗒嗒二手车服务交易平台的设计与实现,以下是具体的测试计划:
简要介绍测试计划的目的和背景,以及所涉及的软件系统或模块的概述。明确测试的目的,例如验证系统的功能正确性、性能测试、安全性测试等。明确测试的范围,包括被测系统的模块、功能和性能指标等。定义测试方法和技术,包括黑盒测试、白盒测试、集成测试、回归测试等。列出具体的测试任务和测试活动,包括测试用例设计、测试环境搭建、测试数据准备、测试执行和缺陷管理等。明确测试所需的人员、设备、工具和环境等资源,并进行资源分配和安排。制定测试的时间表和计划安排,包括测试开始时间、结束时间、里程碑和关键节点等。识别可能的测试风险和问题,并提供相应的风险管理策略和措施。定义缺陷报告、缺陷分类、缺陷优先级和缺陷解决流程等。定义何时结束测试,在什么条件下可以发布软件。
5.3测试用例
5.3.1登录模块测试用例
管理员、买家用户、卖家用户登录后才能使用全部系统功能。下表是系统登录功能测试用例,检测了用户名和密码的不同的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表5-1 系统登录功能测试用例
| 用例名称 |
用户登录系统 |
| 目的 |
测试用户通过正确的用户名和密码可否登录功能 |
| 前提 |
未登录的情况下 |
| 测试流程 |
1) 进入登录页面 2) 输入正确的用户名和密码 |
| 预期结果 |
用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
| 实际结果 |
实际结果与预期结果一致 |
5.3.2注册模块测试用例
用户需要经过注册用户系统账号,才能够进行登录。下表是注册功能测试用例,检测了各种数据的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表5-2 注册功能测试用例
| 用例名称 |
用户注册系统 |
||
| 目的 |
测试用户通过正确的输入用户名、密码以及个人信息进行账号注册 |
||
| 前提 |
未拥有系统账号 |
||
| 测试流程 |
1) 进入注册页面 2) 输入正确的注册信息 |
||
| 预期结果 |
注册信息正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入(卖家用户注册信息还需要管理员审核) |
||
| 实际结果 |
实际结果与预期结果一致 |
5.3.3创建数据模块测试用例
在系统中,创建功能也是基础功能之一,因此创建功能的测试很有代表性。在此章节主要列举在创建时各种情况下系统结果的测试。由于系统涉及创建功能操作过多,因此将多处统称创建功能。
表5-4 创建数据功能测试用例
| 用例名称 |
系统使用者进行创建数据 |
| 目的 |
测试系统使用者通过正确输入信息进行创建数据 |
| 前提 |
登录的情况下 |
| 测试流程 |
1) 系统使用者进入系统页面,进行创建数据 2) 输入正确的数据信息 |
| 预期结果 |
数据信息输入正确的时候,提示创建数据成功,反之则显示错误信息,提示重新输入,创建数据失败 |
| 实际结果 |
实际结果与预期结果一致 |
5.3.4修改数据模块测试用例
在系统中,修改功能是系统主要实现功能,因此修改功能的测试很有代表性。在此章节主要列举在修改时各种情况下系统结果的测试。由于系统涉及修改功能操作过多,因此将多处数据表记录修改和状态修改统称修改功能。
表5-4 修改数据功能测试用例
| 用例名称 |
系统使用者进行修改数据 |
| 目的 |
测试系统使用者对可修改的数据项进行修改通过正确输入信息进行修改数据 |
| 前提 |
登录的情况下 |
| 测试流程 |
1) 系统使用者进入系统页面,进行修改数据 2) 输入正确的数据信息 |
| 预期结果 |
数据信息输入正确的时候,提示修改数据成功,反之则显示错误信息,提示重新输入,修改数据失败 |
| 实际结果 |
实际结果与预期结果一致 |
5.3.5查询数据模块测试用例
在系统中,查询功能是使用系统使用最多也是最基础的功能,因此查询功能的测试很有代表性。在此章节主要列举在查询时各种情况下系统结果的测试。。
表5-5 查询数据功能测试用例
| 用例名称 |
系统使用者进行查询数据 |
| 目的 |
测试系统使用者对可查询的数据项输入正确信息进行查询数据 |
| 前提 |
登录的情况下 |
| 测试流程 |
1) 系统使用者进入系统页面,进行查询数据 2) 全部查询以及输入关键词查询 |
| 预期结果 |
数据信息输入正确的时候,提示查询数据成功,反之则显示错误信息,提示重新输入,查询数据失败 |
| 实际结果 |
实际结果与预期结果一致 |
5.3.6删除数据模块测试用例
在系统中,删除功能是使用系统使用最多也是最基础的功能,因此删除功能的测试很有代表性。在此章节主要列举在删除时各种情况下系统结果的测试。。
表5-6 删除数据功能测试用例
| 用例名称 |
系统使用者进行删除数据 |
| 目的 |
测试系统使用者对可删除的数据项进行删除 |
| 前提 |
登录的情况下 |
| 测试流程 |
1) 系统使用者进入系统页面,进行删除数据 2) 选择数据进行删除 |
| 预期结果 |
选择可删除的数据删除,提示删除数据成功,反之则删除数据失败 |
| 实际结果 |
实际结果与预期结果一致 |
5.4测试结论
在本次测试的过程主要针对用户登录和注册,及所有功能下的添加操作,修改操作、查询操作和删除操作进行测试,并以真实数据一一进行相关功能项目的输入,涵盖了所有的功能、模块或需求,按照计划进行了全面的测试,最终能够保证每个项目涉及的功能都是能够正常运行,对发现的缺陷的进行修改完善,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。
结 论
在对嗒嗒二手车服务交易平台进行设计与开发时,我们选择采用Java语言、JavaScript、AJAX、MyBatis技术、Tomcat服务器和SpringBoot+jsp框架等,使用MySQL数据库,构建了一个便捷、高效的嗒嗒二手车服务交易平台。
在系统的开发过程中,我们充分利用了springboot+jsp框架的优势,如自动配置、快速开发等特点,加快了项目的迭代和部署速度。同时,借助springboot+jsp提供的丰富的生态系统,我们引入了一些常用的第三方库和组件,增强了系统的功能和性能。实现平台系统界面的用户友好性,同时响应式设计让本系统适配各种屏幕大小和设备,能够支持多种语言,方便不同国家和地区的用户使用和交易,提供了了包括但不限于公共管理、用户管理、资讯管理、二手汽车、汽车类型、看车预约、交易预约、交易订单、交易评价等功能。
此外,由于我们受到了技术水平的限制,在有限的时间,只能够将系统功能模拟时的功能实现,在许多功能方面仍然存在很大的弊端,而这些弊端需要不断的测试,不断的总结,不断的改进。
因此,嗒嗒二手车服务交易平台仍有进一步的改进空间。在未来系统运行中,我们可以继续优化系统的用户界面和提升交互体验,使系统界面和体验更加直观友好。还可以引入更多的智能化技术,提升用户的个性化体验,以及提高管理员的管理水平和服务质量。
谢 辞
时间过得飞快,马上就要毕业了,学生活在这个时候即将划上一个句号,但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。
回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还历历在目。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有收获也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。
最后,我要特别感谢指导论文设计的老师。本论文是在他的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和精深的理论水平都使我受益匪浅。老师无论在理论上还是在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向老师表示衷心的感谢和崇高的敬意,谢谢他细心而又耐心地辅导,使得我得以顺利的完成毕业设计开发工作,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了我很大的帮助,在此一并表示感谢。
参考文献
- 王艳红.浅谈二手车市场业务的发展战略与实施[J].全国流通经济,2023,(24):157-160.DOI:10.16834/j.***ki.issn1009-5292.2023.24.033.
- 马庆.计算机软件开发中JAVA编程语言的应用[J].山西电子技术,2023,(06):84-86+98.
- 柏卫忠.“互联网+”背景下国内二手车市场商业模式创新研究[J].时代汽车,2023,(23):166-168.
- 殷梅雨,肖月,周慧珍.基于“互联网+”的校园二手交易平台发展对策研究[J].现代商贸工业,2023,44(23):23-25.DOI:10.19311/j.***ki.1672-3198.2023.23.008.
- 谭艳容,习剑遥,姜攀.基于区块链技术的二手交易交流平台的设计与实现[J].电脑编程技巧与维护,2023,(10):35-39.DOI:10.16184/j.***ki.***prg.2023.10.041.
- 杨华,徐扬.MySQL数据库对中文编码支持的探讨[J].网络安全和信息化,2023,(10):157-160.
- Wei G ,Jing L ,Xiaoru Y , et al.Dynamic decisions between sellers and consumers in online second-hand trading platforms: Evidence from C2C transactions[J].Transportation Research Part E,2023,177
- 袁琳琳.浅析Java语言在计算机软件开发中的应用[J].信息记录材料,2023,24(09):81-83.DOI:10.16009/j.***ki.***13-1295/tq.2023.09.006.
- 王川,高凤英,蔡则天等.高校二手书籍交易平台研究与设计——以内蒙古大学为例[J].科技创业月刊,2023,36(05):176-179.
- 李顺,康雄杰.当前经济背景下校园二手交易平台的构建——以邵阳学院为例[J].财富时代,2023,(05):88-90.
- 王志亮,纪松波.基于SpringBoot的Web前端与数据库的接口设计[J].工业控制计算机,2023,36(03):51-53.
- 操龙斌.二手车交易市场经营模式分析[J].汽车测试报告,2023,(03):158-160.
- 高耀,许诺,李博等.基于Web的新型校园二手交易平台实践研究——以“校易集市”为例[J].中国商论,2023,(01):130-132.DOI:10.19699/j.***ki.issn2096-0298.2023.01.130.
- 李浩明.二手车交易平台的设计与实现[J].现代信息科技,2022,6(23):21-24.DOI:10.19850/j.***ki.2096-4706.2022.23.006.
- 张宇航,刘琪,陈攀龙等.“互联网+”大学校园交易二手互助平台发展规划[J].商业经济,2022,(12):182-184.DOI:10.19905/j.***ki.syjj1982.2022.12.051.
- 汤立融.上海转籍二手车物流网络优化研究[D].上海财经大学,2021.DOI:10.27296/d.***ki.gshcu.2021.000440.
- 刘朝晖.二手车电商平台消费迷雾[J].新民周刊,2021,(10):60-65.
- 郁洁.江苏省二手车市场发展状况研究[J].统计科学与实践,2020,(12):22-25.
- Chen G ,Xu J .Design and implementation of efficient Learning platform based on SpringBoot Framework[J].Journal of Electronics and Information Science,2020,6(1):
- Chen J ,Jian C ,Hailan P .Design of Man Hour Management Information System on SpringBoot Framework[J].Journal of Physics: Conference Series,2020,1646(1):012136-.
附 录
附录一:《大连交通大学毕业设计(论文)软件使用说明书》
使用电脑端登录即可
附录二:《大连交通大学毕业设计(论文)软件程序源代码》
连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:
server:
port: 5000
servlet:
context-path: /api
spring:
mvc:
static-path-pattern: /upload/**
resources:
static-locations: file:此处填写地址/project93355/server/src/main/resources/static
datasource:
jdbc:mysql://127.0.0.1:3306/projectxxxxx?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
driver-class-name: ***.mysql.cj.jdbc.Driver
type: ***.alibaba.druid.pool.DruidDataSource
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: ALWAYS
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
redis:
host: 127.0.0.1
port: 6379
password:
database: 2
lettuce:
pool:
max-idle: 30
min-idle: 10
max-active: 30
max-wait: 10000
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: ***.project.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
use-column-label: true
map-underscore-to-camel-case: false
lazy-loading-enabled: true
aggressive-lazy-loading: false
use-generated-keys: true
项目启动文件Application.java,代码如下:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableJpaRepositories
@MapperScan("***.project.demo.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
登陆拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:
package ***.project.demo.config;
@Configuration
@Slf4j
public class WebAppConfig implements WebMv***onfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//登录拦截的管理器
InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
//拦截的地址
registration.addPathPatterns("/**");
//根据需要拦截,一般设置所有地址拦截,放行公共连接
}
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
}
登陆接受管理器,在interceptor文件夹下的LoginInterceptor.java文件,控制请求头代码如下:
package ***.project.demo.interceptor;
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
private String tokenName = "x-auth-token";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader(this.tokenName);
setHeader(request, response);
log.info("[请求接口] - {} , [请求类型] - {}",request.getRequestURL().toString(),request.getMethod());
if (request.getRequestURL().toString().contains("/api/user/login")){
return true;
}
else if (request.getRequestURL().toString().contains("/api/user/state")){
return true;
}
else if (request.getRequestURL().toString().contains("/api/user/register")){
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
//更新token
}
@Override
public void after***pletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
private void failure(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setHeader("Content-type", "application/json;charset=UTF-8");
response.setStatus(401);
response.sendRedirect("https://www.baidu.***");
}
private void setHeader(HttpServletRequest request, HttpServletResponse response) {
//跨域的header设置
response.setHeader("A***ess-control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("A***ess-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
response.setHeader("A***ess-Control-Allow-Credentials", "true");
response.setHeader("A***ess-Control-Allow-Headers", request.getHeader("A***ess-Control-Request-Headers"));
response.setHeader("A***ess-Control-Max-Age", "1800");
//防止乱码,适用于传输JSON数据
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.setStatus(HttpStatus.OK.value());
}
}
组装sql语句,在constant文件夹下的FindConfig.java文件,代码如下:
package ***.project.demo.constant;
public class FindConfig {
public static String PAGE = "page";
public static String SIZE = "size";
public static String LIKE = "like";
public static String ORDER_BY = "orderby";
public static String FIELD = "field";
public static String GROUP_BY = "groupby";
public static String MIN_ = "_min";
public static String MAX_ = "_max";
public static String SQLHWERE = "sqlwhere";
}
项目采用三层架构controller(每一个实体对应一个controller),entity(项目表实体),service
,Controller 均继承自BaseController,注入两个对象,一个是实体类(以Auth为例),另一个是其AuthService:
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
Controller用于spring控制请求的地址
新增一条数据,通过post传入一个json对象,然后经过request.getReader(),最后经过readBody()转成一个Map,含有String和Object,key用的是字段名,Object存放数据,最终得到Map,insert用拼装sql,读取body,组装成一个insert对象,runCountSql()语句,代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return su***ess(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return su***ess(1);
}
修改一个数据,原理与add基本一致,不同点在于通过readConfig()读取关键字,以及通过readQuery()获取URL后面?指定位置的标识,转成Map对象后,执行update操作,同样通过拼接的sql语句执行,执行过程读取query,toWhereSql()语句完成数据库操作,body为修改对象的值,代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return su***ess(1);
}
删除一条数据,通过readQuery(),获取URL后面的对象地址,删除FROM具体的table,query删除查询FindConfig语句,代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return su***ess(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
通过请求的参数获取一条数据,通过readQuery(),获取URL后面的对象地址,查询FindConfig语句,select筛选Map对象,FIELD为查询字段,未传输的情况下传入“*”,代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return su***ess(jsonObject);
} else {
return su***ess(null);
}
}
通过请求的参数获取列表数据,代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return su***ess(map);
}
获取某个组下面的数量,代码如下:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Integer value= service.selectSqlToInteger(service.groupCount(service.readQuery(request), service.readConfig(request)));
return su***ess(value);
}
获取某个组下面的总计值,代码如下:
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Integer value = service.selectSqlToInteger(service.sum(service.readQuery(request), service.readConfig(request)));
return su***ess(value);
}
图片/文件/视频等的上传方法通过MultipartFile,代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "/src/main/resources/static/";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return su***ess(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
注册页UserController.java,传入user对象,并将"user_id"、 "state"、 "user_group"、"login_time"、"phone"、"phone_state"、 "username"、"nickname"、"password"、"email"、"email_state"、"avatar"、"create_time"输入,重点是 "username"、"nickname"、"password"必须输入,通过获取username,数据库查询是否有该用户,如果存在,则提示“用户已存在”,否则执行将UserId置为空(数据库表中该字段已设置自动递增),代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return su***ess(1);
}
注册页password则使用了MD5加密,代码如下:
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return re_md5;
}
登录页,首先传入"username"、"email"、"phone"、"password",用户可通过用户名、邮箱、手机号进行登陆,通过判断resultList来确定查询结果,然后执行查询用户组UserGroup,用户组里面不存在,依然报“用户不存在”,执行完以上代码,最后涉及到用户带有“审核”的,会查询examine_state(用户的审核状态),数据库表user_group中含有source_table和source_field进行查询,以上步骤完成,对输入的密码进行存储Token到数据库,匹对账号和密码,数据库中的A***essToken为令牌,用于身份认证,其代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
A***essToken a***essToken = new A***essToken();
a***essToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
a***essToken.setUser_id(byUsername.getUserId());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(a***essToken.getToken(), a***essToken,duration);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", a***essToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return su***ess(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
找回密码,接收用户输入的用户名、密码、验证码,并进行条件判断,代码如下:
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
List list = service.selectBaseList(service.select(query, service.readConfig(request)));
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return su***ess(1);
}
return error(70000,"用户不存在");
}
修改密码,通过请求data,获取旧密码,并将新密码重新赋值,期间都是需要通过加密,代码如下:
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
int count = service.selectBaseCount(service.count(query, service.readConfig(request)));
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return su***ess(1);
}
return error(10000,"密码修改失败!");
}
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-