🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘要
随着互联网的高速发展,线上管理成为当代人们管理事物的重要手段之一;戒烟网站的开发也迫在眉睫。所以采用B/S模式, MySQL数据库以及通过java技术来开发此网站的目的是建立一个戒烟网站,这样可以有效地解决戒烟管理混乱的局面。本网站设计了2种角色:管理员,用户。通过此网站,用户可以对首页,用户分享,论坛交流,公告文章,个人中心,后台管理等功能进行操作;管理员可以对网站所有功能进行管理,包括管理用户的基本信息。该网站大大提高戒烟效率,节约了大量的时间和精力。
**关键字:**戒烟网站;java技术;
1 绪论
1.1项目背景
随着社会的不断进步,生活水平的不断提高,计算机和网络技术的发展以及戒烟管理质量的提高,利用计算机网站管理的普及,戒烟信息的管理发生了革命性的变化,在此情况下开发一款戒烟网站,于是乎变得非常合乎时宜。
1.2项目意义
戒烟网站,是为了管理者方便管理而设计的。它是戒烟的一个重要组成部分。
在互联网技术广泛普及社会生活中各个领域的今天,使用传统的管理方式也将成为过去时,而网络管理则是人们向往的一个重要领域。基于网络的戒烟管理是传统管理过程的延伸,加上数据库技术的利用,大大简化了传统管理的过程。基于java技术的戒烟可以借助于互联网进行,因此在线戒烟的管理将不受地方限制,只要在有网络的地方就可以进行,使在线戒烟管理的灵活性得到了大大拓展。
此网站可以完成对首页,个人中心,用户管理,用户分享管理,论坛交流,系统管理等功能,以适应管理者提高管理工作效率的需要。
1.3项目研究的目的和方法
1.3.1项目的研究目的
为了加强用户与管理者之间的交流,提高大家的及时性和有效性,增加大家交流的方便性,所以开发出管理员,用户为主要角色的戒烟网站。
1.3.2开发方法及步骤
1、可行性分析
可行性分析的目地在于用最短的时间、最小的代价去最大化的确定问题并解决问题。
2、技术可行性
由于现代网络的飞速发展,开发一个戒烟网站用以方便大众是十分可行的。本网站使用java语言、Visual Studio设计开发用户界面,并使用MySQL进行数据存储。
3、经济可行性
戒烟网站是本人自行开发的,参考文献、JAVA都是通过学校图书馆图书查阅,本人本身就有一台电脑,所以在经济完全没有问题。
4、操作可行性
现如今,计算机网络已经十分普及,而本网站可以在Windows XP/VISTA/7/8/10操作网站上运行,而且本网站操作界面美观、简洁、大方,操作简单,容易上手。
5、需求分析
通过深入了解现有的戒烟设计开发、运行和设计模式,收集多方面切实可行的资料,对利用网络学习需求进行深入调研,确定出该戒烟网站具备的目标、功能、性能。
6、数据库设计与实现
根据业务需求、信息需求、和处理需求,确定信息网站的数据结构、数据操作。建立E---R 图,进行数据库设计,建立完备的数据库网站。
7、测试与维护
对网站每一个功能模块程序进行测试。
2 开发平台介绍
2.1平台开发环境
2.1.1硬件平台
硬件设备设计是根据网站的设计需求,确定网站物理设备方案,所设计的硬件设备方案在能够充分满足网站前提下,还应满足网站的效率、可靠性、安全性和适应性等性能要求,并具有较高的性价比,实际操作中硬件平台如下:
硬件环境(访问者):建议用户采用较高配置硬件资源。
硬件环境(开发者):Intel(R) Core(TM) i3处理器,2G内存,100G磁盘空间。
2.1.2软件平台
软件平台是网站开发和运行所必需的环境。设计和选择高效、实用、方便、功能齐全的软件平台,对网站的开发具有十分重要的意义。在结合了实际开发的需求并且充分考虑各种软件平台的性能以及适用范围和对软件平台的运用能力,本网站的软件平台选择如下:
操作网站:本网站在Windows 7以及JAVA语言、Visual Studio设计开发用户界面,并使用MySQL进行数据存储,操作网站下进行开发,在目前市面上使用的操作网站上能够成功运行。
浏览器:由于浏览器很多,故先满足主流浏览器的兼容问题,如IE ,Firefox ,Chrome的兼容问题。IE浏览器是Window网站自带的浏览器,使用量高。目前IE7,8,9,10下兼容但在IE6下部分采用div+css布局的HTML页面不兼容。
2.2相关技术
2.2.1 B/S结构
随着软件网站的不断改进和升级,B/S结构产品更为方便的特征体现地十分明显。对于一个中等偏大的公司来说,如果网站管理员每天要在很多台电脑之间来回查看,不断奔走,那么效率和工作量就会变得很低,但是如果使用了B/S结构,那么管理员只要对服务器进行管理就够了。
B/S结构最大的优点它不需要安装任何的软件,它所有的客户端就只是浏览器,所以只要有一台电脑并且可以上网就可以解决所有问题,客户端可以完全地不用管理员维护。无论使用网站的使用者是什么样的规模,也不管分支有多么的庞大,都不会对维护和升级的工作量造成影响,所有的维护和升级只需要操作服务器。随着B/S结构的不断发展,使用的人也不断增加,从而带动了AJAX技术的发展,和B/S结构一样,它也能在客户端上处理程序,这便缓解了服务器的负担,提高了交互性,而且实现了局部实时刷新。
2.2.2 Java语言简介
Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景,它是面向对象的,分布式的,动态的,具有平台无关性、安全性、健壮性。Java语言的基本语句语法和C++一样,但是它面向对象的技术更加彻底,因为Java要求将所有的内容都必须封装成类,把类作为程序的基本单位。由于不允许类外有变量、方法。 Java语言的分布式体现在数据分布和操作分布,它是面向网络的语言,可以处理TCP/IP协议,它也支持客户机/服务器的计算模式。Java语言的动态性是指类在运行时是动态安装的,使得Java可以动态的维护程序。Java不支持指针,对内存访问的所有操作都是通过对象实例化实现的,这样就避免了指针操作中易产生的错误,同时也预防了病毒对网站的破坏和威胁。
Java语言的编程风格与C语言非常接近,它继承了C++面向对象技术的核心,它面世之后发展迅速,非常流行,对高级C语言形成了很大的冲击。业内人士称之为"一次编译、到处执行"。当然java也有缺点,在每次执行编译后,字节码都需要消耗一定的时间,在某些程度上降低了性能。但是这并不影响java成为此次设计语言的选择。Java语言简单易学,使用它的编程时间短,功能性强,开发者学习起来更简便、更快。Java的主要特性有以下几个:
1.面向对象
面向对象有四个特点:封装、继承、多态、抽象。抽象是指忽略一个问题中的次要部分,关注主要部分。多态是指对同一种消息做出的不同反应。继承是指在原有的父类方法基础上增加自己独有的方法,而不改变原来父类。
2.平台无关性
Java编译出来的是字节码,直接由虚拟机执行。在任何平台上,只要有Java虚拟机,Java代码都能运行。
3.可靠性和安全性
Java对内存的访问都必须通过对象的实例变量来实现,避免了指针中出现的错误。
- 多线程
Java提供了多线程功能,利用编程实现同一时间同时工作的功能。
2.2.3 Vue.js介绍
采用JavaScript框架进行构建Vue用户界面。这个框架和其他的框架最大不同就是,Vue采取自下而上的应用。Vue比较容易上手,可以很好的进行现有的项目结合。另外一个方面是,和当前的先进的各种工具结合起来时,可以很好的为比较复杂的应用页面进行控制。
Vue.js用来构建用户界面的框架。和其他的框架不同的地方是,该框架主要是使用一种从下而上的开发设计方式。其主要的作用是关注核心图层,学习起来非常方便,可以和现有的各种网站进行融合。另外,Vue有着强大的驱动能力,可以完全采用单文件整合。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架------它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
2.2.4 MySql数据库
MySQL数据库使用的语言是SQL语言。MySQL在保存数据时是根据数据的类型和特征分开保存在不同的表中,这样当用户在需要调用的数据时,就不再需要花费大量时间去寻找数据了,只要找到对应的表,就可以找到需要的数据了。MySQL可以完美的实现对于数据库的基本操作。因为 MySQL 数据库的占用的内存少,运行快,成本低,源代码开放,可移植性强,所以越来越多的数据来源简单的项目的开发都会选择 MySQL作为数据库,而MySQL也变得越来越流行。
MySQL 有很多特性,如可移植性,多线程,灵活性等,在很多操作网站中都可以运行。它可以实现在多个线程并发执行的技术;支持MyISAM、innoDB、MEMORY、ARCHIVE四种存储引擎,而且可以使用大型数据库,为用户提供许多使用数据库的工具,比如建模工具,管理工具等。在 WEB方面的应用MySQL是最好的。
2.2.5 MySQL环境配置
本网站的数据使用的是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服务。
修改MySQL数据库的root密码。用cmd进入命令行模式输入如下命令:
cd C:\Program Files\MySQL\bin
MySQLadmin -u root -p password 123
回车出现Enter password: ,这是要输入原密码. 刚安装时密码为空,所以直接回车,此时MySQL 中账号 root 的密码被改为 123 安装完毕。
2.2.6 Ssm框架
开发信息管理网站的主流框架是SSM(Spring + Spring MVC + MyBatis),SSM框架web层使用Spring MVC框架,使传输前后端数据变得简单;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框架;对于相关SQL操作,采用Mybatis作为持久层框架,对JDBC进行封装,使得数据库的底层面向开发者操作处于一种透明状态。
3需求分析
软件需求分析是软件生命周期中的关键步骤。通过软件需求分析,把软件功能和性能总体概念描述为具体的软件需求规格说明书,进而建立软件开发的基础。软件需求分析同时也是一个不断认识和逐步细化的过程。通过软件需求分析,准确地回答了"网站必须做什么"。
在本次网站分析过程中采用结构化分析方法,结构化分析方法是面向数据流进行需求分析的方法,其核心思想是分解、简化问题,将物理与逻辑表示分开,对网站进行数据与逻辑的抽象,其描述工具是数据库表和(ER)表,以表格的方式来描述数据。
3.1对功能上的需求
用户要通过本网站查询和处理信息,必须先输入用户名和密码进行登陆。为了避免其他不相关人员都可以获得登陆权限,登陆网站注册过程,所有用户的登陆信息将事先由管理人员直接对数据库进行录入。
用户可以对首页,用户分享,论坛交流,公告文章,个人中心,后台管理等功能进行操作;
管理员可以对网站所有功能进行管理,包括管理用户的基本信息。
3.2对性能的规定
1.设计规范要求:
- 项目开发规范统一:模块划分,代码编写均遵照命名规范文档;
- 程序安全并要有良好的可扩展性;
- 用户界面简洁明了、操作简单实用。
2.精度及灵活性要求:
该管理网站要能在较高精度下完成操作者发出的命令,并且在操作员发出错误的指令时给予警告或提示,而非陷入不响应状态。
3.时间特性要求:
- 响应时间:所有查询操作均在0.2s内完成;
- 更新处理时间:所以更新操作均在0.2s内完成。
3.3网站现状分析
网站使用用户的数量直接决定了用户信息管理者的工作量,毫无疑问,管理者的工作量较大较繁琐。通过总结出网站当前对用户管理的工作状态得以下分析:
(1)统筹规划,如果网站在信息化管理中不够全面,缺少综合性、网站性、整体性,那不可避免的需要投入大量人力物力来规划整理信息。引入信息化管理方式无疑可以达到节省信息管理成本的目的不仅减少资源浪费还可以使戒烟信息变得井井有条,成为市场竞争中的一大优势。
(2)要循序渐进,做事不能心急,一步一个脚印,都不可能一步到位,就算信息管理网站也一样,要让网站发挥最大效率还是应该多调研,多听取用户和管理者的意见,并进行必要的统筹规划,有组织有目的地设计网站功能,团结各个部门发挥主观能动性。
(3)信息安全措施不到位
隐私权神圣不可侵犯,这是中华人民共和国宪法赋予我们的权利,人和人都不能侵犯我们的正当权益,而网络用户信息管理存在极大安全隐患,信息泄露的案列不在少数,加强信息安全措施是完善网络信息管理过程中不可避免的一环。
(4)资源不能充分共享
资源共享是网络的一大特点,没有共享就没有社交,网络也就失去了他应有的魅力,如果能够实现用户信息共享,无疑对于用户的发展存在不可或缺的帮助。
(5)现有网站可扩展性不高。
如今科学技术发展飞速,随着而来的就是技术更新,那势必会给软件更新带来挑战,因此,网站必须具备良好的开放性和可扩充性,为了不落后于时代,这是必备特色之一。
基于上述分析,戒烟网站应该切合实际,做到确实有效,集体表现为:一是网站能够整理并集合归类用户信息,防止用户信息混乱,难以整理;二是网站要安全稳定,不能泄露用户信息,造成隐私泄露,不仅伤害用户利益更是对经营者名誉的损毁;三是网站要具有良好的开放性,不仅要方便定期的维护维修,更要方便及时增加新功能,保证先进的时代契合性。经过详细的讨论论证,确定网站的总体要求。
3.4网站设计规则与运行环境
软件网站的优劣很大程度上是由网站设计的完善与否决定的。世间万物都必须遵循生老病死的法则,这是大自然的规则不能违反,软件设计也一样需要遵循网站设计规则。因此,在设计过程中必须遵循网站设计规则。
规则如下:
简单性:为了扩大网站使用者的受众面,网站设计应该本着操作越简单约好的原则,这样不仅能提高网站的使用率更能够扩大网站使用面。
针对性:一个网站针对性越强,所能提供的功能必然越完善,用户体验肯定更好,所以应该明确指定网站针对性。
实用性:实用永远是检验一个网站是否成功的唯一标准,使用的语言再高端,使用的结构再新颖但不能满足用户的要求那就是失败。
运行环境:
本网站是利用B/S结构来开发的,数据库在服务器上进行部署 Mysql即可,其他包括My Eclipse等常规开发程序。
4网站设计
4.1总体设计
根据戒烟管理功能需求,进行网站设计。
CSS+DIV进行页面布局。CSS+DIV 是一种网页的布局方法,这一种网页布局方法有别于传统的HTML网页设计语言中的表格(Table)定位方式,真正地达到了w3c内容与表现相分离,但是不是很兼容老版本的浏览器。
使用 JAVA 母版页可以为应用程序中的页创建一致的布局,各个模块继承母版页。
系统主要功能包括首页,个人中心,用户管理,用户分享管理,论坛交流,系统管理等;
网站对这些功能进行整合,产生的功能结构图如下:
图4-1 网站总体结构图
4.2数据库设计
4.2.1概念模型设计
概念模型是对现实中的问题出现的事物的进行描述,ER图是由实体及其关系构成的图,通过E-R图可以清楚地描述网站涉及到的实体之间的相互关系。
用户管理实体图如图4-2所示:
图4-2用户管理实体图
用户分享管理实体图如图4-3所示:
图4-3用户分享管理实体图
论坛交流实体图如图4-4所示:
图4-4论坛交流实体图
4.2.2数据库表结构
数据库的逻辑结构设计是把上面的设计用逻辑表格的形式加以表示,并对数据的类型进行定义,在整个过程中必须严格定义每一个具体的数据,形成数据字典,如下表所示:
表4-1:用户分享
|-----------------|-----------|------------|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| fenxiangbiaoti | varchar | 200 | 分享标题 | | |
| fenxiangleixing | varchar | 200 | 分享类型 | | |
| fenxiangtupian | varchar | 200 | 分享图片 | | |
| fenxiangshipin | varchar | 200 | 分享视频 | | |
| fenxiangriqi | date | | 分享日期 | | |
| fenxiangneirong | longtext | 4294967295 | 分享内容 | | |
| yonghuming | varchar | 200 | 用户名 | | |
| sfsh | varchar | 200 | 是否审核 | | 否 |
| shhf | longtext | 4294967295 | 审核回复 | | |
表4-2:收藏表
|-----------|-----------|-----|--------------------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| 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 | 推荐类型 | | |
表4-3:公告文章
|--------------|-----------|------------|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| title | varchar | 200 | 标题 | | |
| introduction | longtext | 4294967295 | 简介 | | |
| picture | varchar | 200 | 图片 | | |
| content | longtext | 4294967295 | 内容 | | |
表4-4:论坛交流
|----------|-----------|------------|-------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| title | varchar | 200 | 帖子标题 | | |
| content | longtext | 4294967295 | 帖子内容 | | |
| parentid | bigint | | 父节点id | | |
| userid | bigint | | 用户id | | |
| username | varchar | 200 | 用户名 | | |
| isdone | varchar | 200 | 状态 | | |
表4-5:用户分享评论表
|----------|-----------|------------|-------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| refid | bigint | | 关联表id | | |
| userid | bigint | | 用户id | | |
| nickname | varchar | 200 | 用户名 | | |
| content | longtext | 4294967295 | 评论内容 | | |
| reply | longtext | 4294967295 | 回复内容 | | |
表4-6:配置文件
|-------|---------|-----|--------|----|-----|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| name | varchar | 100 | 配置参数名称 | | |
| value | varchar | 100 | 配置参数值 | | |
表4-7:用户
|------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| addtime | timestamp | | 创建时间 | | CURRENT_TIMESTAMP |
| yonghuming | varchar | 200 | 用户名 | | |
| mima | varchar | 200 | 密码 | | |
| xingming | varchar | 200 | 姓名 | | |
| xingbie | varchar | 200 | 性别 | | |
| touxiang | varchar | 200 | 头像 | | |
| shouji | varchar | 200 | 手机 | | |
表4-8:用户表
|----------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| username | varchar | 100 | 用户名 | | |
| password | varchar | 100 | 密码 | | |
| role | varchar | 100 | 角色 | | 管理员 |
| addtime | timestamp | | 新增时间 | | CURRENT_TIMESTAMP |
表4-9:token表
|---------------|-----------|-----|------|----|-------------------|
| 字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
| id | bigint | | 主键 | 主键 | |
| userid | bigint | | 用户id | | |
| username | varchar | 100 | 用户名 | | |
| tablename | varchar | 100 | 表名 | | |
| role | varchar | 100 | 角色 | | |
| token | varchar | 200 | 密码 | | |
| addtime | timestamp | | 新增时间 | | CURRENT_TIMESTAMP |
| expiratedtime | timestamp | | 过期时间 | | CURRENT_TIMESTAMP |
5网站详细设计与实现
5.1网站功能模块
戒烟网站,在网站首页可以查看首页,用户分享,论坛交流,公告文章,个人中心,后台管理等内容,并进行详细操作;如图5-1所示。
图5-1网站首页界面图
用户注册,在用户注册页面通过填写用户名,密码,确认密码,姓名,手机等信息进行注册操作,如图5-2所示。
图5-2用户注册界面图
用户分享,在用户分享页面可以查看分享标题,分享日期,用户名等内容,并进行收藏操作,如图5-3所示。
图5-3用户分享界面图
个人中心,在个人中心页面通过填写用户名,密码,姓名,性别,上传图片,手机等内容进行更新信息操作,并根据需要对我的发布,我的收藏进行详细操作;如图5-4所示。
图5-4个人中心界面图
5.2管理员功能模块
管理员进入网站前在登录页面根据要求填写用户名,密码等信息,点击登录进行登录操作,如图5-5所示。
图5-5管理员录界面图
管理员登陆网站后,可以查看首页,个人中心,用户管理,企业管理,岗位类型管理,招聘信息管理,应聘信息管理,用户评价管理,企业评价管理,论坛交流,网站管理等功能,还能对每个功能逐一进行相应操作,如图5-6所示。
图5-6管理员功能界面图
用户管理,在用户管理页面可以对索引,用户名,姓名,性别,头像,手机等内容进行详情,修改和删除操作,如图5-7所示。
图5-7用户管理界面图
用户分享管理,在用户分享管理页面可以对索引,分享标题,分享类型,分享图片,分享视频,分享日期,用户名,审核回复,审核状态,审核等内容进行详情,修改和删除等操作,如图5-8所示。
图5-8用户分享管理界面图
论坛交流管理,在论坛交流管理页面可以对索引,贴子标题,用户名,状态等内容进行详情,修改,查看评论和删除等操作,如图5-9所示。
图5-9论坛交流管理界面图
系统管理,在公告文章页面可以对索引,标题,图片等内容进行详情,修改和删除等操作,如图5-10所示。
图5-10系统管理界面图
5.3用户功能模块
用户登陆网站,可以查看首页,个人中心,用户分享管理,我的收藏管理等功能,还能对每个功能逐一进行相应操作,如图5-11所示。
图5-11用户功能界面图
用户分享管理,在用户分享管理页面可以对索引,分享标题,分享类型,分享图片,分享视频,分享日期,用户名,审核回复,审核状态等内容进行详情,修改,查看评论和删除等操作,如图5-12所示。
图5-12用户分享管理界面图
网站的调试和测试
调试其实也是一个相当重要的过程,对于编程完成的功能,并不一定很完善,很多时候不像程序员想象中那么顺利,有很多漏洞都是在调试过程中发现的。测试前,我们首先要清空数据库中的所有数据,然后输入少量的数据进行测试。测试过程中有些功能并不是像构思好的那样顺序执行,并且有时网站会很不稳定,所以测试帮助我们发现错误并对程序做一些修改和完善。
本网站的测试应从用户注册测试开始,然后再进行用户登录测试,对网站的各个模块的功能进行测试,查看是否与需求说明上要求的功能一致。有时候少写一条语句、session未执行或者数据库的某些字段名字改掉了而造成引用不成功这样的小错误是常有的,有时删掉了一些方法但是忘记在前台页面上删除会引发一些错误或者Mysql语句不正确之类的错误都也是比较常见的。
在本网站的测试中我遇到了几个比较"纠结"的问题,最开始是SQL语句部分总是提示user附近有语法错误,怎么都不能做数据库的查询,就是在user表创建时,软件会在表名外加上一个"[]",导致我的表名总是错误无法查询;MysqlL还有一个我自己造成的问题,就是我无意中把Mysql的登录名给删掉了,导致我没有办法链接到数据库,后来在老师的帮助下我才意识到问题出在这个地方,最后还是重新装的SQL这写问题也就都没有了。最后在做信息推送的查询/修改功能时也遇到了很大的问题,后台语句的逻辑和SQL语句都没有错误,网站也按照逻辑顺序提示修改成功,可是就是数据库中的内容没有修改,后来发现每做一个操作页面会刷新,就刷新成了数据库中原来的值,Mysql语句确实update成功了,只是修改的是原来的数据,所以看起来没有任何修改,我通过在页面加载方法中添加if (!IsPostBack){ }方法,这样就解决了页面刷新的问题。还有一个比较麻烦的问题就是模糊查询和类型查询的综合查询,一开始只定义了全局变量,总是查询失败,后来通过打断点测试,发现全局变量的值不易保存,后来改成了session变量,查询就成功了。当然遇到的问题不止这三个,还有很多的小问题,不过在模块测试时一一解决了。
调试是一个需要耐心和细心的工作,所以只是大体上执行一下是不会发现漏洞的,应该把每个功能都多调试几次,把可能的顺序或方法都试验一遍,往数据库中多添加一些东西,多次重复调用,尽可能地找出问题,这样才能够使网站更加完善。并且我认为当发现问题并解决问题的时候会体会到很大的成就感和快乐!这种感觉更鼓励我继续努力!
结 论
顺利如期的完成本次毕业设计给了我很大的信心,让我了解专业知识的同时也对本专业的发展前景充满信心。
本次设计采用的是JAVA技术,实现了基于B\S模式下的戒烟网站。该网站由管理员,用户;两个角色组成,主要实现的功能有首页,个人中心,用户管理,用户分享管理,论坛交流,系统管理;
不足及尚待解决的问题:
(1)由于采用的是B/S架构造成网站的代码冗余较多。
(2)网站界面不够美观,可以适当多使用jQuery、AJAX等技术。
在此网站的开发过程中我深深的体会到开发流程的重要性,尤其是框架的选择,因为一旦开发过程中需求发生变化,对代码的修改会变的十分复杂困难,很可能就要推到重来,更对以后的维护带来相当不便,所以说一个好的设计对项目是十分重要的。在此网站的开发过程中一些技术上的困难,需要花费大量时间去问去学去找,也大大的提高了自学的能力,同时也发现了IT这行需要不停的学习,毕竟技术在不断的进步。
参考文献
[1]孙卫琴,李洪成.《Tomcat 与 Java Web 开发技术详解》.电子工业出版社,2017年6月
[2]BruceEckel.《Java编程思想》. 机械工业出版社,2016年10月
[3]FLANAGAN.《Java技术手册》. 中国电力出版社,2018年6月
[4]孙一林,彭波.《Java数据库编程实例》. 清华大学出版社,2018年8月
[5]LEE ANNE PHILLIPS.《巧学活用HTML4》.电子工业出版社,2017年8月
[6]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2017年9月
[7]耿祥义,张跃平.《JSP实用教程》. 清华大学出版社,2016年5月
[8]孙涌.《现代软件工程》.北京希望电子出版社,2015年8月
[9]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2018年2月
[10]Brown等.《JSP编程指南(第二版)》. 电子工业出版社 ,2018年3月
[11]清宏计算机工作室.《JSP编程技巧》. 机械工业出版社, 2017年5月
[12]朱红,司光亚.《JSP Web编程指南》.电子工业出版社, 2015年9月
[13]赛奎春.《JSP工程应用与项目实践》. 机械工业出版社, 2017年8月
[1] 柏亚军.JSP编程基础及应用实例集锦.人民邮电出版社,2016
[2] 武延军 黄飞跃.精通JSP编程技术.人民邮电出版社,2017
[3] 薛东.我国电子商务的现状与问题探析.内江科技,2018
[4] 于海霞.电子商务网站的设计与实现.科技资讯,2019
[5] Karl Moss.Java Servlet开发人员指南.清华大学出版社,2016
[6] 陈海山.深入Java Servlet网络编程.清华大学出版社,2018
[7] 蔡剑 景楠.Java Web应用开发.清华大学出版社,2018
[8] 王国辉 牛强.JSP信息系统开发实例精选.机械工业出版社,2017
[9] 赵森.中文SQL Server 2005程序设计教程.冶金工业出版社,2016
[10] liuguoyan. Design and implementation of family financial management. [J/OL]]. Shandong: shandong university. 2018.
[11] zhongliwei.Web version traffic movie violation inquiry system.[J/OL] modern technology manufacturing and equipment.
[12]Dai ma. Web application of SSH2 composite framework based on J2EE architecture. [D] soochow university. 2017.10.01.
核心代码展示
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);
}
}