🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘 要
随着信息化时代的到来,管理系统都趋向于智能化、系统化,微信小程序的学习资料销售平台也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而微信小程序的学习资料销售平台能很好地解决这一问题,轻松应对的学习资料销售平时的工作,既能提高人力物力财力,又能加快工作的效率,取代人工管理是必然趋势。
本微信小程序的学习资料销售平台以ssm作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括以下功能模块:首页、个人中心、用户管理、资料类型管理、学习资料管理、系统管理、订单管理等功能,通过这些功能的实现能够基本满足日常学习资料销售管理的操作。
本文着重阐述了微信小程序学习资料销售平台的分析、设计与实现,首先介绍开发系统和环境配置、数据库的设计,接着说明功能模块的详细实现,最后进行了总结。
**关键词:**微信小程序;学习资料销售; ssm;MySql数据库;Tomcat
第一章 绪论
1.1 研究背景
科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以创新的视角去不断方便人们的生活,推动对新知识的学习,培养自学能力,锻炼动手实践的本领。现代的微信小程序学习资料销售平台,也应该摆脱人工管理的模式,使用计算机技术来进行信息管理工作。所以本次系统设计的学习资料销售平台结合了文字、图像,并能实现学习资料销售管理的功能,这也是一般微信小程序学习资料销售平台的重要的要素。微信小程序学习资料销售平台经过几年的实践和总结正在往更深入的方向发展。由此,人们要改善系统功能迫在眉睫。随着科学技术的飞速发展,微信小程序学习资料销售平台也要不断完善其工作流程的繁杂性、多样化、管理复杂、收缴费用与设备维护繁琐等存在的问题。所以要通过计算机胜任学习资料销售管理的工作,使学习资料销售平台更加准确、方便及快捷。
因此,开发出一套高效率、低差错的学习资料销售平台是十分必要。本系统主要目的是全面实现微信小程序学习资料销售平台数字化,管理员对于用户的所有信息能够全部掌握,而用户能够对自己的学习资料销售信息能够有一个直观的了解。
1.2 研究现状
现如今,部分市场是没有提供学习资料销售平台的服务,就是新兴市场尽管实行了学习资料销售管理,但微信小程序学习资料销售平台进行的管理力量远远不够,所以有很多的学习资料销售管理工作只停留在传统的学习资料销售服务。同时,很多商家本身资金是有限再加上也缺少专业水平的工作人员,所以管理手段较为落后,也就很难提高学习资料销售的管理效率,同时也就不能很好的为用户提供更为完善的服务。现在市场管理都是通过手动来进行管理记录及操作,不但麻烦琐碎,还经常出现错误,给广大用户带来很不便,同时也需要大量的人力、物力和财力,极大的浪费了学习资料销售的资源。学习资料销售平台是学习资料销售行业的一个重要组成部分,随着学习资料销售行业的快速发展,人们慢慢地来希望微信小程序学习资料销售平台能够提供更为合理及完善的学习资料销售服务。现在,好的学习资料销售管理也成为广大用户们选择的关键。
1.3 系统实现的功能
本次设计任务是要设计一个微信小程序学习资料销售平台,通过这个系统能够满足微信小程序学习资料销售平台的管理及用户的学习资料销售功能。系统的主要功能包括:首页、个人中心、用户管理、资料类型管理、学习资料管理、系统管理、订单管理等功能。
管理员可以根据系统给定的账号进行登录,登录后可以进入微信小程序学习资料销售平台对学习资料销售所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。
该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看学习资料销售信息及对个人信息进行修改等功能。
1.4 平台的特点
本系统提供给管理员对首页、个人中心、用户管理、资料类型管理、学习资料管理、系统管理、订单管理等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证,为管理员操作提高了效率,也使其数据安全性得到了保障。
1.5 本文的组织结构
本文的组织结构如下:
1、绪论。综述了本文的研究背景,分析了微信小程序学习资料销售平台的结构;更好的从用户的角度出发,发现当今学习资料销售管理中的不足,同时要指出本次系统中的特色。
2、对系统主要的使用技术,开发环境、环境配置的介绍。介绍了本次开发所用的系统开发环境MyEclipse,还介绍了Tomcat环境配置、SSM框架和MySql环境配置。
3、系统的设计与实现。介绍了开发学习资料销售平台的思路并进行了需求分析,在需求分析的基础上进行了总体设计、详细设计以及数据库等相关方面介绍;该部分是全文的主旨。
4、系统功能模块具体实现。对开发中一些主要具体功能的实现进行描述。涉及到数据库、页面参数传递等相关知识。
5、对系统进行测试;
6、总结;对整个论文及设计过程进行总结,指出系统设计过程设计中存在的不足;后期还有待完善的地方等。
第二章开发技术与环境配置
以Java语言为开发工具,利用了当前先进的SSM框架,以MyEclipse10为系统开发工具,MySQL为后台数据库,开发的一个微信小程序学习资料销售平台。
2.1 Java语言简介
Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景,它是面向对象的,分布式的,动态的,具有平台无关性、安全性、健壮性。Java语言的基本语句语法和C++一样,但是它面向对象的技术更加彻底,因为Java要求将所有的内容都必须封装成类,把类作为程序的基本单位。由于不允许类外有变量、方法。 Java语言的分布式体现在数据分布和操作分布,它是面向网络的语言,可以处理TCP/IP协议,它也支持客户机/服务器的计算模式。Java语言的动态性是指类在运行时是动态安装的,使得Java可以动态的维护程序。Java不支持指针,对内存访问的所有操作都是通过对象实例化实现的,这样就避免了指针操作中易产生的错误,同时也预防了病毒对系统的破坏和威胁。
Java语言的编程风格与C语言非常接近,它继承了C++面向对象技术的核心,它面世之后发展迅速,非常流行,对高级C语言形成了很大的冲击。业内人士称之为"一次编译、到处执行"。当然java也有缺点,在每次执行编译后,字节码都需要消耗一定的时间,在某些程度上降低了性能。但是这并不影响java成为此次设计语言的选择。Java语言简单易学,使用它的编程时间短,功能性强,开发者学习起来更简便、更快。
2.2 微信小程序框架
微信小程序的开发框架是微信所独有的一套框架,分为View视图层和App Service逻辑层两部分。框架提供了一种类似于Web中html语言的wxml语言,作为视图层的标签语言,用于构造页面的布局。另外提供了一种类似Web中css语言的WXSS语言,作为视图层的标签样式语言,用于表述页面的显示。而在逻辑层的框架,则同样使用了JS语言。微信小程序为了使开发者专注在代码的逻辑层面和数据处理上,还专门提供了两种解决方案,一种是事件,一种是数据的传输。这两种方案都位于小程序框架的视图层和逻辑层之间。用户在视图层进行交互之后,传递到逻辑层对数据进行处理,并返回数据到视图层向用户反馈。对于微信小程序视图层的开发设计,小程序官方提供了一系列的组件,这些基本组件可以极大的帮助开发者完成视图层的开发。同时,对于逻辑层的开发,小程序官方提供了一系列API来方便开发者请求一些额外功能。
2.3 SSM框架
开发信息管理系统的主流框架是SSM(Spring + Spring MVC + MyBatis),SSM框架web层使用Spring MVC框架,使传输前后端数据变得简单;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框架;对于相关SQL操作,采用Mybatis作为持久层框架,对JDBC进行封装,使得数据库的底层面向开发者操作处于一种透明状态。
2.4 MySQL环境配置
(1)本系统的数据使用的是MySQL,所以要将MySQL安装到指定目录,如果下载的是非安装的MySQL压缩包,直接解压到指定目录就可以了。然后点击C:\Program Files\MySQL\bin\winMySQLadmin.exe这个文件其中C:\Program Files\MySQL是MySQL安装目录。输入winMySQLadmin的初始用户、密码(注:这不是MySQL里的用户、密码)随便填不必在意,确定之后右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务,再左击这个图标->winnt->start the service 启动MySQL服务。
(2)修改MySQL数据库的root密码。用cmd进入命令行模式输入如下命令:
cd C:\Program Files\MySQL\bin
MySQLadmin -u root -p password 123
回车出现Enter password: ,这是要输入原密码. 刚安装时密码为空,所以直接回车,此时MySQL 中账号 root 的密码被改为 123 安装完毕。
2.5 MyEclipse环境配置
安装完MyEclipse后选择myeclipse"Window->Preferences"
(1)配置myeclipse的jre为sun的jdk,不要用myeclipse的默认jdk:
选择"java->Installed JREs",勾中里面的"jdk1.7".
(2)配置编译的级别为6.0:
选择"Compiler->Compiler compliance level"的值为"6.0"。
(3)配置myeclipse的默认的文件编码格式为"UTF-8":
选择"General->Workspace",选中"Text file encod"下面的"Other",设置里面的值为"UTF-8"。
(4)去掉myeclipse的JSP的验证:
选择"MyEclipse->Validation",将"Build"列的所有勾都给去掉,这样在编译时因为避免了jsp的验证,所以编译的速度会快很多.
2.6 mysql数据库介绍
MySQL数据库使用的语言是SQL语言。MySQL在保存数据时是根据数据的类型和特征分开保存在不同的表中,这样当用户在需要调用的数据时,就不再需要花费大量时间去寻找数据了,只要找到对应的表,就可以找到需要的数据了。MySQL可以完美的实现对于数据库的基本操作。因为 MySQL 数据库的占用的内存少,运行快,成本低,源代码开放,可移植性强,所以越来越多的数据来源简单的项目的开发都会选择 MySQL作为数据库,而MySQL也变得越来越流行。
MySQL 有很多特性,如可移植性,多线程,灵活性等,在很多操作系统中都可以运行。它可以实现在多个线程并发执行的技术;支持MyISAM、innoDB、MEMORY、ARCHIVE四种存储引擎,而且可以使用大型数据库,为用户提供许多使用数据库的工具,比如建模工具,管理工具等。在 WEB方面的应用MySQL是最好的。
2.7 B/S架构
随着软件系统的不断改进和升级,B/S结构产品更为方便的特征体现地十分明显。对于一个中等偏大的公司来说,如果系统管理员每天要在很多台电脑之间来回查看,不断奔走,那么效率和工作量就会变得很低,但是如果使用了B/S结构,那么管理员只要对服务器进行管理就够了。
B/S结构最大的优点它不需要安装任何的软件,它所有的客户端就只是浏览器,所以只要有一台电脑并且可以上网就可以解决所有问题,客户端可以完全地不用管理员维护。无论使用系统的使用者是什么样的规模,也不管分支有多么的庞大,都不会对维护和升级的工作量造成影响,所有的维护和升级只需要操作服务器。随着B/S结构的不断发展,使用的人也不断增加,从而带动了AJAX技术的发展,和B/S结构一样,它也能在客户端上处理程序,这便缓解了服务器的负担,提高了交互性,而且实现了局部实时刷新。
第三章系统分析与设计
3.1 可行性分析
一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本网站来补充线下学习资料销售管理模式中的缺限,去解决其中的不足等,通过对本网站,不仅能使工作量不断地减少,还能使工作和管理的效率更加高。所以开发该网站能实现更大的意义和价值,网站完成后,能否达到预期效果就要通过可行性分析,分析之后,决定此系统是否开发。该微信小程序学习资料销售平台的开发设计中,对技术、经济、操作方面进行了可行性分析;
3.1.1技术可行性
本系统开发选择java语言,它被研究的目的就是在于能够为网页创建等可以看到的信息。随着移动互联网技术的不断发展和创新,java俨然已成为下一代互联网的Web标准。所以后台设计选择使用mysql数据库主要用来的建立和维护信息。对于前台开发要求应具备功能完善、易于操作等优点,后台数据库的要求则是能够建立和维护数据信息的统一性和完整性。
3.1.2操作可行性
现在随着科技的飞速发展,计算机早已经进入了人们的日常生活中,人们的工作环境也不像以前有那么多的要求,需要员工一定要到公司办公,有的工作在家也可以完成。这使得人们的工作效益有了很大的提高。操作的多样性也变高了。因此,管理的计算机化,智能化是社会发展而带来的必然趋势,各种智能的软件层出不穷,不同的软件能完成用户不同的需求,这不仅提高了工作效率还能完成一些客户特定的一些需求。本系统不仅界面简洁明了还采用可视化界面,用户只要用鼠标和键盘就可以完成对相关信息的修改,删除,添加等操作。因为这个系统的操作十分简单,方便上手,对于第一次使用系统的人,只需要很少的时间就可以上手操作。由此可见,本系统在操作上是可行的。
3.1.3经济可行性
基于微信小程序的学习资料销售平台,该网站软件开发仅需要一台普通的计算机便可完成实现开发,其成本很低。另外,作为毕业设计作品来讲,开发成本基本上可以忽略不计,且该系统软件的投入使用,可以实现更加快速高效的学习资料销售,同时还能实现对人力资源和管理资源的有效节约,该微信小程序学习资料销售平台在经济上完全可行。
3.2 系统设计规则与运行环境
软件系统的优劣很大程度上是由系统设计的完善与否决定的。世间万物都必须遵循生老病死的法则,这是大自然的规则不能违反,软件设计也一样需要遵循系统设计规则。因此,在设计过程中必须遵循系统设计规则。
规则如下:
简单性:为了扩大系统使用者的受众面,系统设计应该本着操作越简单约好的原则,这样不仅能提高系统的使用率更能够扩大系统使用面。。
针对性:一个系统针对性越强,所能提供的功能必然越完善,用户体验肯定更好,所以应该明确指定系统针对性。
实用性:实用永远是检验一个系统是否成功的唯一标准,使用的语言再高端,使用的结构再新颖但不能满足用户的要求那就是失败。
运行环境:
本系统是利用B/S结构来开发的,数据库在服务器上进行部署 Mysql即可,其他包括My Eclipse等常规开发程序。
3.3 需求分析
利用ssm、Java、MyEclipse和mysql数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个微信小程序学习资料销售平台,来进行记录用户的信息,以及系统信息的增删改查的功能,根据实现需求,系统需完成这些基本功能:
(1)系统合理显示学习资料销售平台管理界面、用户界面、购物车界面等界面。
(2)用户和管理员所有的信息都保存与数据库中。
(3)对学习资料信息能够进行查询、修改、删除、添加等操作。
3.4 总体设计
根据微信小程序学习资料销售平台的功能需求,进行系统设计。
前台功能:用户进入系统可以对我的首页、学习资料、购物车、我的等功能进行操作;在我的页面可以对我的收藏管理,用户充值,购物车,我的订单等进行操作。
后台主要是管理员,管理员功能包括首页、个人中心、用户管理、资料类型管理、学习资料管理、系统管理、订单管理等;
系统对这些功能进行整合,产生的功能结构图如下:
图3-1系统总体结构图
3.5 数据库设计与实现
在每一个系统中数据库有着非常重要的作用,数据库的设计得好将会增加系统的效率以及系统各逻辑功能的实现。所以数据库的设计我们要从系统的实际需要出发,才能使其更为完美的符合系统功能的实现。
3.5.1 数据库概念结构设计
数据库的E-R图反映了实体、实体的属性和实体之间的联系。下面是各个实体以及实体的属性。
用户注册实体属性图如下所示:
图3-2用户注册实体属性图
学习资料实体属性图如下所示:
图3-3学习资料实体属性图
3.5.2 数据库具体设计
根据E-R图,设计每张表的变量名,变量的类型及主键等如下。
表名3-1:订单
|---------------|-----------|------------|---------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| orderid | varchar | 200 | 订单编号 | | |
| tablename | varchar | 200 | 商品表名 | | xuexiziliao |
| userid | bigint | | 用户id | | |
| goodid | bigint | | 商品id | | |
| goodname | varchar | 200 | 商品名称 | | |
| picture | varchar | 200 | 商品图片 | | |
| buynumber | int | | 购买数量 | | |
| price | float | | 价格/积分 | | 0 |
| discountprice | float | | 折扣价格 | | 0 |
| total | float | | 总价格/总积分 | | 0 |
| discounttotal | float | | 折扣总价格 | | 0 |
| type | int | | 支付类型 | | 1 |
| status | varchar | 200 | 状态 | | |
| address | varchar | 200 | 地址 | | |
| tel | varchar | 200 | 电话 | | |
| consignee | varchar | 200 | 收货人 | | |
| logistics | longtext | 4294967295 | 物流 | | |
| goodtype | varchar | 200 | 商品类型 | | |
表名3-2:学习资料评论表
|----------|-----------|------------|-------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| refid | bigint | | 关联表id | | |
| userid | bigint | | 用户id | | |
| nickname | varchar | 200 | 用户名 | | |
| content | longtext | 4294967295 | 评论内容 | | |
| reply | longtext | 4294967295 | 回复内容 | | |
表名3-3:购物车表
|---------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| tablename | varchar | 200 | 商品表名 | | xuexiziliao |
| userid | bigint | | 用户id | | |
| goodid | bigint | | 商品id | | |
| goodname | varchar | 200 | 商品名称 | | |
| picture | varchar | 200 | 图片 | | |
| buynumber | int | | 购买数量 | | |
| price | float | | 单价 | | |
| discountprice | float | | 会员价 | | |
| goodtype | varchar | 200 | 商品类型 | | |
表名3-4:地址
|-----------|-----------|-----|---------------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| userid | bigint | | 用户id | | |
| address | varchar | 200 | 地址 | | |
| name | varchar | 200 | 收货人 | | |
| phone | varchar | 200 | 电话 | | |
| isdefault | varchar | 200 | 是否默认地址[是/否] | | |
表名3-5:资料类型
|---------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| ziliaoleixing | varchar | 200 | 资料类型 | | |
表名3-6:用户
|----------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| zhanghao | varchar | 200 | 账号 | | |
| mima | varchar | 200 | 密码 | | |
| nicheng | varchar | 200 | 昵称 | | |
| xingbie | varchar | 200 | 性别 | | |
| shouji | varchar | 200 | 手机 | | |
| money | float | | 余额 | | 0 |
表名3-7:学习资料
|-----------------|-----------|------------|--------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| ziliaobianhao | varchar | 200 | 资料编号 | | |
| ziliaomingcheng | varchar | 200 | 资料名称 | | |
| ziliaoleixing | varchar | 200 | 资料类型 | | |
| ziliaojianjie | longtext | 4294967295 | 资料简介 | | |
| xiangguantupian | varchar | 200 | 相关图片 | | |
| xiangguanshipin | varchar | 200 | 相关视频 | | |
| xiazailianjie | varchar | 200 | 下载链接 | | |
| faburiqi | date | | 发布日期 | | |
| thumbsupnum | int | | 赞 | | 0 |
| crazilynum | int | | 踩 | | 0 |
| clicktime | datetime | | 最近点击时间 | | |
| price | float | | 价格 | | |
表名3-8:用户表
|----------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| username | varchar | 100 | 用户名 | | |
| password | varchar | 100 | 密码 | | |
| role | varchar | 100 | 角色 | | 管理员 |
| addtime | timestamp | | 新增时间 | | CURRENT_TIMESTAMP |
表名3-9:收藏表
|-----------|-----------|-----|--------------------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| userid | bigint | | 用户id | | |
| refid | bigint | | 收藏id | | |
| tablename | varchar | 200 | 表名 | | |
| name | varchar | 200 | 收藏名称 | | |
| picture | varchar | 200 | 收藏图片 | | |
| type | varchar | 200 | 类型(1:收藏,21:赞,22:踩) | | 1 |
| inteltype | varchar | 200 | 推荐类型 | | |
表名3-10:配置文件
|-------|---------|-----|--------|----|-----|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| name | varchar | 100 | 配置参数名称 | | |
| value | varchar | 100 | 配置参数值 | | |
第四章 系统功能的具体实现
4.1小程序端
登录,用户通过输入账号和密码,并点击登录进行系统登录操作,如图4-1所示。
图4-1用户登录界面图
用户注册,在用户注册页面通过填写账号、密码、确认密码、昵称、性别、手机等信息进行注册操作;如图4-2所示。
图4-2用户注册界面图
用户登陆小程序端,可以对首页、学习资料、购物车、我的等功能进行详细操作,如图4-3所示。
图4-3小程序端首页界面图
学习资料,在学习资料页面可以查看资料图片、资料名称、价格、资料编号、资料类型、下载链接、发布日期、资料简介等信息,用户可根据自身需要进行加入购物车、立即订购或收藏等操作管理;如图4-4所示。
图4-4学习资料界面图
我的订单,在我的订单页面可以查看未支付、已支付、已发货、已完成、已取消、已退款订单等内容;并对不同类型的订单进行处理。如图4-5所示。
图4-5我的订单界面图
用户,在我的页面可以对我的收藏管理、用户充值、购物车、我的订单等详细信息进行操作,如图4-6所示。
图4-6用户功能界面图
用户信息,在用户信息页面通过填写账号、密码、昵称、性别、手机等内容进行保存操作,如图4-7所示。
图4-7用户信息界面图
4.2 后台管理员功能模块
管理员登录,管理员通过输入账号、密码,并点击登录进行系统登录操作,如图4-8所示。
图4-8管理员登录界面图
管理员登录系统后,可以对首页、个人中心、用户管理、资料类型管理、学习资料管理、系统管理、订单管理等功能进行相应操作,如图4-9所示。
图4-9管理员功能界面图
用户管理,在用户管理页面可以对索引、账号、昵称、性别、手机等内容进行详情、修改或删除等操作,如图4-10所示。
图4-10用户管理界面图
学习资料,在学习资料页面可以对索引、资料编号、资料名称、资料类型、相关图片、相关视频、下载链接、发布日期、价格等内容进行详情,修改,查看评论或删除等操作,如图4-11所示。
图4-11学习资料管理界面图
订单管理;在已支付订单页面可以对索引、订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址、电话、收货人、商品类型、下单时间等内容进行详情和发货操作,还可以对已完成订单、已发货订单、未支付订单、已取消订单、已退款订单等进行详细操作;如图4-12所示。
图4-12订单管理界面图
系统管理,在轮播图页面可以对索引、名称、图片等内容进行详情或修改等操作,如图4-13所示。
图4-13系统管理界面图
第五章 系统测试
系统测试是软件开发过程中最后一步,但也是不可或缺的重要的一步,没有人可以保证一次性编写完成的系统不会出错,而系统测试就是将自己开发的系统成为成品前的最后一步。在测试过程中需要进行严谨细致的测试,要尽可能全面地在不同情况下运行该系统,排除一切出现错误的可能。
系统测试不仅仅是发现系统潜在的BUG或错误,而更为重要的是为用户提供一个良好的体验和安全可使用的产品服务。而通过发现错误或潜在的问题,将有助于提升产品的竞争力,这也是软件测试的其中的重要目的之一。
软件测试的方法有好几种,但目前主要采用的是包括以功能为主要测试方向的黑盒测试以及以逻辑为主要测试方向的白盒测试,这是两种不同的测试方法,针对的测试侧重点不同,本课题根据实际需求情况,选择以功能为主要的黑盒测试方法,同时测试是要遵循一定的规则来执行的,一个测试要执行其执行的依据一般是由测试用例来规定的,而测试用例一般是依据需求或说明书来综合制定的,测试在硬件出厂前是十分重要的一个过程,本课题由于时间和精力的关系,选择以实现的功能作为测试要点来进行测试。具体测试过程如下:
测试用例1及测试过程:
登录:录入登录信息,账号,密码,权限,然后单击登录进行操作,会出现两种情况:一种情况是登录成功,进入用户相应的功能界面进行下一步操作;另一种情况是提示登录失败,系统会弹出一个对话框要求重新登录操作;
测试用例2及测试过程:
管理员登录:录入登录信息,管理员账号,密码,权限,然后单击登录进行操作,会出现两种情况:登录成功进入管理员具有权限的功能界面和提示登录失败。一种情况是登录成功,进入管理员界面进行下一步操作;另一种情况是提示登录失败,系统会弹出一个对话框要求重新登录操作。
总 结
在这次毕业设计中,我使用了SSM框架,选择MySQL作为后台数据库进行访问及修改。在设计开始之初,我也在苦恼于系统的逻辑功能的具体实现,因为我对于学习资料销售管理的概念还较为模糊,其间我也查询了大量的网上资料,清楚了解实际生活中学习资料销售管理主要面对的对象和管理需要完成的基本功能。
虽然在这过程中也遇到了许多的困难,主要有系统逻辑功能不合适和系统设计中出错,当在自己查阅资料无法解决之时,我也会与同学和老师进行请教和讨论,所以在这个过程之中,也让我清楚的认识到自己的不足以及团队的力量才是最大,以后不论是在学习还是工作中,都要融入到集体之中,那样自己才会成长的更快。
当然,在此次设计中,仍然存在着很多的不足,本来之前我想让其系统可以更为完美的实现角色与权限之间的控制,让系统中每一次的权限操作都进行控制,但是也因为时间的不足以及本人的能力有限,并未完成,我希望自己在以后的学习中继续完善,使这个系统更为贴近实际的操作。
参考文献
[1]杨选辉.信息系统分析与设计[J].北京:清华大学出版社.2017
[2]钱雪忠.数据库原理及应用[M].北京:北京邮电大学出版社.2017.08
[3]吴建.张旭东.java网络开发入门与实践[J].人民邮电出版社.2016
[4]贺松平.基于MVC的B/S的架构的研究及应用[D].武汉:华中科技大学.2016
[5]毕国锋.java技术的Web应用程序三层设计模型研究[J].黑龙江科技信息.2017.03
[6]青龙老贼,赵黎,方雨,刘琪.微信终极秘籍:精通小程序商业运营[M].北京:电子工业出版社,2019.
[7]戴晟晖.微信公众平台搭建、开发与实践指南[M].北京:中国铁道出版社,2016.
[8]微网.微商城细节知多少?微信小程序在未来几年的发展方向[EB/OL].2019.
[9]李刚.疯狂Ajax讲义:jQuery/ExtJS/Proto.义:jQuery/ExtJS/Prototype/DWR企业应用前端开发实战[M].3版.北京:电子工业出版社,2018.
[10]PaulDeck,林仪明,崔毅.SpringMVC学习指南[M].北京:民邮电出版社,2017
[11]王珊.数据库系统原理教程[M].北京:清华大学出版社,2018,56.
[12]求是科技.java数据库开发技术与工程实践[M].北京:人民邮电出版社,2016,131.
[13]王群,李馥娟.java数据库系统开发完全手册[M].北京:人民邮电出版社,2016.3.39-44
[14]李严,于亚芳,王国辉.java数据库开发实例解析[M].北京:电子工业出版社,2019.12.78-93
[15]王国辉、牛强、李南南java工程应用与项目实践[M].北京:电子工业出版社,2015.4.162-171.
核心代码展示
java
/**
* 公告通知
* 后端接口
* @author
* @email
* @date 2021-03-09 11:33:59
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询公告通知成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
return R.ok().put("data", news);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = newsService.selectCount(wrapper);
return R.ok().put("count", count);
}
}