🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
采用原始的用纸张书写相关信息,不仅仅容易造成数据的损坏和丢失,最重要的是书写过的内容如何更快速的分发,快速的被整理出来得到汇总的数据。用纸张书写的信息在传递过程中不能实时更新,在这个快速发展的时代是会被淘汰的。本次课题用互联网信息技术作为媒介,针对中国古建筑介绍信息的管理,开发中国古建筑介绍网站来进行相关数据信息的管理和分发,可以在最短的时间内响应操作,最重要的是数据移植起来非常方便,可以做无人动态备份设置,只要有数据更新就可以指定备份到相应的位置进行存放关键数据,在效率上面是比传统的纸张书写方便很多。
中国古建筑介绍网站可以实现用户在线查看古建筑的视频,发布对古建筑的留言,参与论坛交流,管理员管理古建筑信息,回复用户对古建筑的留言,管理论坛帖子和公告等功能,系统选用当前最先进的Spring boot框架开发技术和Java开发语言,可以让中国古建筑介绍网站在使用效果上面达到很好的预期。
关键词:中国古建筑介绍网站;Spring boot框架;Java
第1章 绪论
1.1 选题动因
当前国内的经济快速发展,有互联网的一份功劳。通过互联网的信息传播优势,可以实时更新最新数据,计算机软件解决用户实际问题,互联网实现信息传递,让每个实体行业都感受到了互联网的魅力。小到路面买菜,大到一个国家的春节运输数据,都通过互联网的更新,互联网已经变成了一个产业链,围绕着人们生活的方方面面。国内通过不间断的九年义务教育,现在社会识字率很高,基本上操作软件都没有什么困难。互联网的蓬勃发展,离不开背后的设计者和开发者,每个计算机应用都有客户端和管理端,所有的用户都只能看到自己相关的数据,具体用户数据的汇总以及数据安全问题,都由专门人员进行负责。互联网让所有人的都可以在虚拟的世界里有自己的数据留存。本次课题对于中国古建筑介绍数据管理方面,通过计算机相关技术开发一款中国古建筑介绍网站来实现数据的存储与管理。
1.2 目的和意义
任何一款软件,都需要解决特定的事情。小到一个博客网站,能解决用户想要发表的一些观点内容,大到一些ERP应用,打通各个生成环节之间的数据,或者是更大的软件系统,全国人口户籍信息等。人们的日常生活会发生各种各样的事情,如何用数据的形式来记录人们的日常生活,并且可以长时间内为人们的生活和工作提供便利的条件,这是一个很有研究意义的事情。目前市面上办公行业最流行的还是用电脑办公,而采用电脑办公一般有两种使用方法,一种是使用特定的软件来实现某些功能,如果电脑出现故障,只能重新购买或者换台电脑,安装好指定软件才能正常使用,另一种是采用每台电脑都有的浏览器,只要一个地址就能访问,并且可以通过浏览器来进行办公。软件平台化,数据安全化,是软件行业的一个趋势。中国古建筑介绍网站的设计是跟得上时代潮流的软件。
1.3 论文结构安排
本文共分为六章,主要描述中国古建筑介绍网站从开发到实现的具体过程。
第1章:介绍系统的选题动因和意义;
第2章:介绍系统选用的开发语言,开发技术等内容;
第3章:介绍系统的功能和非功能需求以及系统流程;
第4章:介绍系统的数据库和功能的设计;
第5章:介绍系统的实现界面;
第6章:介绍系统的测试特点和功能测试。
第2章 开发环境与技术
2.1 Java语言
Java语言不仅仅是一种语言,也是一种平台,采用Java语言和规则开发的程序在Java平台的虚拟机里进行运行,完美的让Java变成了高级程序员开发语言之中的常青树。所有的程序开发人员都喜欢一种可以减少工作量的开发过程,这样能提升工作的效率。Java语言不是平白无故的诞生的,也是站在了巨人的肩膀之上,那个巨人就是C语言。C语言可以操作内存指针,功能是很强大,对各种开发阶段都有一个很好的支持,执行效率是最高的语言,但是学习成本很高。正常开发人员的开发过程完全是围绕着复杂的业务逻辑来进行处理的,没事都要搞一下垃圾回收,这样真的很麻烦,Java就想到了一种自动垃圾回收机制和忽略程序开发人员对内存的操作,让程序开发人员的注意力都集中到业务开发上来,这样极大的提高了开发效率,深受广大开发人员的喜爱。让高明C语言程序员做底层最麻烦最啰嗦的操作,研究出一种Java的虚拟机环境,让Java公司的人员着重与规则的建立和与机器内存的沟通,让使用Java的程序员完全不用考虑以后会在哪个平台运行,一次开发,可以任意运行,省时省力的Java就是这么强大。
2.2 Navicat简介
Navicat是专业的数据库管理工具,可以对各种类型的数据库进行管理,提高数据库开发者的开发效率。当我们学习SQL的规则以及语句命令的时候,会发现需要使劲的记住各种单词的组合结构以及各种语法,需要花费我们大量的精力来学习,这样一个人学习浪费一个人的时间,好多人学习浪费的就是社会资源了,那么有没有一种工具可以提高数据库的初学者以及后续的开发者使用效率呢,这个就是Navicat软件。Navicat提供了针对各种数据库的操作版本以及可以满足各种用户的需求,比如协同合作,可以让多个数据库管理人员管理多个线上的数据库,也可以管理本地数据库,只需要把相应的数据库连接保存就行,不需要写代码,对数据库表内容操作也有很显眼的操作步骤,只要能看懂中文就能够使用,对数据库表结构的创建使用,不用任何命令,完全能满足使用要求,能减少学习的时间成本。Navicat有商业版和免费版,商业版自然功能能强大,价钱也不菲,免费版则需要自己去Navicat官网申请了,不过一般软件都有免费的试用期,在试用期期间也足够使用了。
2.3 Spring boot 框架
Spring Boot框架主要是Spring配置臃肿的主要解决方案。长期以来,Java主要作为平台而存在,只是提供最基础也是最基本的实现逻辑,如果采用原生的Java提供的方法来进行项目开发,会导致开发的过程无限期延长,复杂度增加,维护增加百倍困难。所以当今开发者需要开发一些Java平台的应用程序时,不免会选择一些已经存在的比较好用的框架了方便开发,这样可以提高开发效率,Spring Boot框架则是现在最流行的Java项目的开发框架之一。
2.4 Vue框架
Vue是国人进行创造的,在国内只要是学习有关网页开发的学习了基础知识之外,必然会学习Vue。首先在Vue官网上会发现文档很详细,最主要的是创造者与学习者都是国内人士,在沟通上面没有障碍,也不需要翻译国外的一些东西,学习起来很轻松。Vue主要是对前端页面数据进行绑定的,当然,数据绑定不算是一个稀罕的东西,问题是渐进式框架的含义,不管对Vue的熟练程度如何,如果有些页面功能感觉使用其他的技术更熟练,完全不需要全面使用Vue框架,这一点是最友好的。要知道只要是框架,必然是要学习很多的东西,都是国外翻译过来的,本身就有交流隔阂,并且框架在使用过程中必须按照框架来进行描述,如果有时候忘记了可能都想不到如何更改,但是在使用Vue的过程中,如果发现有些地方还是用简单的JavaScript或者原生的操作更简单,可以直接不使用Vue即可。
第3章 系统分析
在系统分析阶段,需要对基本的需求进行流程的确定和细分,需要阅读大量的相关资料,才能科学的分析系统的功能实现,如果没有系统分析,只是盲目的确定功能模块,将不利于后续的功能确定。
3.1可行性分析
虽然功能点感觉可以实现,但是感觉毕竟是感觉,还是需要从一些其他的角度来进行可行性分析的,这是一个科学的分析环节。
(1)运行可行性
项目的开发和运行是需要一定的硬件基础,比如像当初的XP系统就有点古老了,不适合作为开发使用的环境。目前主流的操作系统是Windows10和Windows11,正好自己有相关的电脑,并且硬件上面符合开发和运行的条件,硬盘采用的也是固态硬盘,完全可以快速的搭建运行环境。
(2)经济可行性
经济上分析主要是针对项目的开发以及运行阶段可能用到的经济投入进行分析,现有设备符合开发和运行需求,技术上用开源免费的,所以经济上的考虑可以忽略不计。
(3)技术可行性
自己在学校就学习了相关的软件开发技术,并且可以通过这些技术在网络上面找到类似的功能进行学习,不需要太多的技术成本投入。
通过上面三个角度分析,更加提升了自己的开发信息,不需要额外的考虑太多复杂的投入,只需要按部就班的实现中国古建筑介绍网站的开发即可。
3.2 系统非功能需求
系统分析的过程也需要对系统非功能方面进行分析,因为能够对系统运行之后的最终目标产生影响的过程不仅有对系统的功能分析这一步骤,也包括对系统的非功能层面的分析这一步骤,这两者都是不可缺少的。像确定系统具体能够提供的功能点这样的分析属于功能分析,而功能扩展性,操作性等描述系统性能的分析就属于系统非功能层面上的分析。
(1)系统要有可扩展性的特点
本系统的开发是首次开发的产品,在投入市场经过市场使用之后,会在其上进行再次开发,常见的包括功能模块的新增,角色的新增等内容,这些都是属于二次开发。因此,功能可扩展性这样的性能特点本系统就要具备,而且还要在系统的层次结构设计上尽可能清晰,在扩展类型的设计上,对程序的接口设计,还有对程序抽象类的设计尽可能科学合理。
(2)系统要有自适应性的特点
系统就是为了解决一些特定问题而被人为进行开发,投入使用后,跟系统打交道也是通过人机交互,只要是人为操作系统,就会出现一些人为错误,所以,系统的自适应性特点就需要在人为操作出现问题时表现出系统的纠错能力。而这一指标也被程序员看重,他们通常会设置智能提示来反馈给用户问题,或者编写一些验证数据的代码来提升系统的纠错能力。
(3)系统要有较强的操作性的特点
为了避免系统在处理具体事务时产生处理流程混乱的现象,或者是避免一个系统到处可见超级链接,影响使用者使用系统。就有必要遵循较高的系统操作性方面的标准,从而合理布局系统功能,让用户在使用系统功能时能够一气呵成。
(4)系统要有易用性的特点
系统提供的不同功能能够解决不同问题,对于使用者来讲,当一个系统功能点太多时,会非常耗费寻找功能的时间,所以这就要求系统的界面设计要合格,这就需要在功能模块上进行整合,避免功能模块上出现冗余现象,也需要尽可能的实现人性化的操作界面,也要对系统界面的美观度以及界面展示的功能点提出要求。毕竟每个功能都是用户与系统界面进行数据交互,所以合理的界面设计还是非常重要的。系统通常是让用户通过界面输入数据来获取信息,当遇到用户错误的数据输入现象,或者是表单数据输入项太多,用户漏掉了某些数据项的数据输入这样的情形时,系统应当及时提醒用户。当遇到系统的输出数据比较多时,系统也应合理规划数据布局,或者是通过报表形式呈现输出的数据。让使用者使用较短时间就能通过产品说明书操作系统,或者经人简单指点也能与系统进行无障碍数据交互。
3.3 系统功能需求
为了方便使用者访问中国古建筑介绍网站,系统在使用者的使用权限上划分比较明确,不同权限分配不同的功能。中国古建筑介绍网站的权限设置有管理员,用户两种操作权限。
中国古建筑介绍网站分配给管理员的功能通过图3.1进行展示。管理员需要在古建筑管理模块增删改查古建筑信息,在论坛管理模块查看帖子内容和帖子回复,在用户管理模块增删改查用户信息等。
图3.1 管理员用例图
中国古建筑介绍网站分配给用户的功能通过图3.2进行展示。用户在古建筑信息模块可以查看系统推荐的古建筑信息,可以播放古建筑的相关视频,可以发布对古建筑的留言等。
图3.2 用户用例图
3.4 系统流程分析
(1)添加信息流程如图3.3所示。
图3.3 添加信息流程
中国古建筑介绍网站在开发过程中,就已经提前设置了各个功能的操作逻辑以及验证判断信息,所以任何一个能够完整运行的系统,无论用户怎么操作系统的功能,系统都会根据预先设置的规则以及处理不同事务的逻辑进行操作。比如说系统的添加功能,用户根据信息提示,填写相应的数据,如果用户登记的数据格式不对,比如应该登记的数值数据,被用户登记了文本数据,系统就会提示用户及时更正。因此,能够正常提交的用户录入的数据,证明其登记的数据相对来说比较准确。
(2)修改信息流程如图3.4所示。
图3.4 修改信息流程
系统的某项数据是由众多字段组成,所以修改数据相对录入数据比较省时间,只需更改有错误的字段数据即可。
(3)查询信息流程如图3.5所示。
图3.5 查询信息流程
中国古建筑介绍网站可以保存的数据信息有很多,如果只是人为查找数据,将会产生巨大的工作量,因此为了方便使用者,系统提供数据查询功能,用户只要在查询功能区登记要查询数据的关键字,中国古建筑介绍网站就会查询出完整的用户需要的数据信息并显示。
第4章 系统设计
系统设计必须参考当前社会最主流的页面设计,因为不主流的就是已经被淘汰的,随着软件设计多年发展,已经有了完整的设计理念。
4.1 界面设计原则
针对界面的模块以及操作部分,有些规则是需要提前设定的。
第一点:前后台主界面必须统一。统一的有整个网站的上部以及下部,中间显示关键内容,后台的菜单栏必须在左侧。颜色也要统一,不能有很明显的突兀,产生视觉厌恶的效果。
第二点:导航条必须美化。界面统一后,导航就是一个门户入口,就像大门一样,非常的引人注目,如果导航条不美化,随便弄一个导航条会与界面不匹配,并且有种设计不上档次的感觉。
第三点:输入框必须格式统一,并且相关核心数据要尽量的放到前面,要符合人们的正常认知。比如用户的属性有账号密码或者性别电话或者详细说明等这些,一般设定详细说明的为补充部分,尽量放到最下面,不能说把姓名或者电话放到最下面,这样一方面是页面布局不美观,另一方面就是违反人们的日常生活认知。
第四点:界面设计必须要考虑用户对象,他们可能对计算机的认知也就仅仅处于操作使用阶段,尽量要用贴合人们日常生活和操作的习惯设计到项目里面使用。
4.2 功能结构设计
站在使用者的角度来分析中国古建筑介绍网站的详细功能,最后使用结构图来展示设计结果。
管理员功能结构设计见图4.1。管理员管理古建筑信息,管理论坛帖子,管理公告,管理用户等。
图4.1 管理员功能结构图
用户功能结构设计见图4.2。用户查看古建筑的介绍信息,发布对古建筑的留言,在论坛模块发布帖子,查看帖子,评论帖子等。
图4.2 用户功能结构图
4.3 数据库设计
能满足当前项目数据所需要的数据库模式采用的是关系型数据库。首先关系型数据库发展历史悠久,功能完善,性价比也比较高,不管是开发成本还是使用成本都可以接收,不需要重新创建一种新的数据模型。
4.3.1 数据库E-R图设计
数据需要提前设计清楚,如何简单明了的表示数据实体与属性之间的关系,目前最优解决方法是采用画E-R图的方式来进行描述,用E-R图的好处有以下几点:
第一点:数据筛选,有时候用文字描述的数据不太直观,当用E-R来描述的时候可以更直观的看到数据之间的关系,有助于清空冗余的数据表达,让数据更清晰;
第二点:可以通过优化的E-R对数据进行优化,能提前对数据量进行预估,提前设定相关规则,避免数据混乱;
第三点:可以提高数据的完整性,当E-R画出的过程也是对文字逻辑的梳理过程,有助于大脑的理解;
第四点:优化好的数据在检索方面可以人为的提高检索效率;
本章主要表达各个数据模型直接有任何关系,通过E-R图可以更清楚的判断,有助于提高数据存储格式等一系列的后续操作的效率,优化开发步骤。
(1)图4.3为古建筑留言实体图。
图4.3 古建筑留言实体图
(2)图4.4为用户实体图。
图4.4 用户实体属性图
(3)图4.5为古建筑实体图。
图4.5 古建筑实体属性图
(4)图4.6为管理员实体图。
图4.6 管理员实体属性图
(5)图4.7为上述实体间关系E-R图。
图4.7 实体间关系E-R图
4.3.2 数据库表结构设计
三大范式基本上概括了数据库设计的必要规范,只有符合三大范式的数据才是合理的数据。
范式第一条:表与表之间,字段与字段之间,每个名字都不能产生混淆的概念,必须不一样,必须确保唯一性的存在。
范式第二条:在满足第一条范式的前提上要对主键进行规定,不能这个表的主键在第一列,后面的表的主键位置列数就变了,这样不可以,必须保证统一,让主键在相同列上。
范式第三条:满足前两条范式的同时,如果获取数据,必须可以通过主键就能查询到相关数据,尽量不要跨表获取。
三大范式是继续关系,每一个范式都要继承前面范式的要求,就像盖房子一样,必须先打地基,然后再在上面做其他事情,范式就是这样。通过三大范式要求的数据,不仅能规范数据库的设定,还可以提高数据库检索效率。
下面展示设计的中国古建筑介绍网站的数据表结构。
表4.1 用户表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
int(11) |
主键 |
不允许空 |
username |
varchar(200) |
账户 |
允许空 |
password |
varchar(200) |
密码 |
允许空 |
yonghu_name |
varchar(200) |
用户姓名 |
允许空 |
yonghu_phone |
varchar(200) |
用户手机号 |
允许空 |
yonghu_id_number |
varchar(200) |
用户身份证号 |
允许空 |
yonghu_photo |
varchar(200) |
用户头像 |
允许空 |
sex_types |
int(11) |
性别 |
允许空 |
yonghu_email |
varchar(200) |
用户邮箱 |
允许空 |
create_time |
timestamp |
创建时间 |
允许空 |
表4.2 论坛表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
int(11) |
主键 |
不允许空 |
forum_name |
varchar(200) |
帖子标题 |
允许空 |
yonghu_id |
int(11) |
用户 |
允许空 |
users_id |
int(11) |
管理员 |
允许空 |
forum_content |
longtext |
发布内容 |
允许空 |
super_ids |
int(11) |
父id |
允许空 |
forum_state_types |
int(11) |
帖子状态 |
允许空 |
insert_time |
timestamp |
发帖时间 |
允许空 |
update_time |
timestamp |
修改时间 |
允许空 |
create_time |
timestamp |
创建时间 |
允许空 |
表4.3 古建筑表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
int(11) |
主键 |
不允许空 |
gujianzhu_name |
varchar(200) |
古建筑名称 |
允许空 |
gujianzhu_uuid_number |
varchar(200) |
古建筑编号 |
允许空 |
gujianzhu_photo |
varchar(200) |
古建筑照片 |
允许空 |
gujianzhu_address |
varchar(200) |
古建筑地点 |
允许空 |
gujianzhu_types |
int(11) |
古建筑类型 |
允许空 |
gujianzhu_video |
varchar(200) |
古建筑视频 |
允许空 |
gujianzhu_content |
longtext |
古建筑介绍 |
允许空 |
gujianzhu_delete |
int(11) |
逻辑删除 |
允许空 |
insert_time |
timestamp |
录入时间 |
允许空 |
create_time |
timestamp |
创建时间 |
允许空 |
表4.4 公告表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
int(11) |
主键 |
不允许空 |
gonggao_name |
varchar(200) |
公告名称 |
允许空 |
gonggao_photo |
varchar(200) |
公告图片 |
允许空 |
gonggao_types |
int(11) |
公告类型 |
不允许空 |
insert_time |
timestamp |
公告发布时间 |
允许空 |
gonggao_content |
longtext |
公告详情 |
允许空 |
create_time |
timestamp |
创建时间 |
允许空 |
表4.5 古建筑留言表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
int(11) |
主键 |
不允许空 |
gujianzhu_id |
int(11) |
古建筑 |
允许空 |
yonghu_id |
int(11) |
用户 |
允许空 |
gujianzhu_liuyan_text |
longtext |
留言内容 |
允许空 |
insert_time |
timestamp |
留言时间 |
允许空 |
reply_text |
longtext |
回复内容 |
允许空 |
update_time |
timestamp |
回复时间 |
允许空 |
create_time |
timestamp |
创建时间 |
允许空 |
表4.6 管理员表
字段 |
类型 |
注释 |
允许空 |
id (主键) |
bigint(20) |
主键 |
不允许空 |
username |
varchar(100) |
用户名 |
不允许空 |
password |
varchar(100) |
密码 |
不允许空 |
role |
varchar(100) |
角色 |
允许空 |
addtime |
timestamp |
新增时间 |
不允许空 |
第5章 系统实现
系统实现就是把项目的功能点准确清晰的描述起来。对项目的功能设计和数据库表的设计,只是概念性设计的一个阶段,系统实现则是对所有设计好的功能的具体呈现。当设计变成现实可操作的功能,就需要用文字与图片的形式对应起来,这样可以更直观的感受系统实现的具体操作。
5.1 管理员功能实现
5.1.1 论坛管理
论坛管理界面如图5.1所示。
图5.1 论坛管理界面
论坛管理包括的基本信息有身份,姓名,帖子标题等信息。作为管理员,其可以在论坛管理界面删除帖子,对论坛帖子的回复内容进行查看。
5.1.2 古建筑管理
古建筑管理界面如图5.2所示。
图5.2 古建筑管理界面
古建筑管理包括的基本信息有古建筑名称,古建筑地点,古建筑视频等信息。作为管理员,其可以在古建筑管理界面修改古建筑信息,删除古建筑信息,新增古建筑信息等。
5.1.3 用户管理
用户管理界面如图5.3所示。
图5.3 用户管理界面
用户管理包括的基本信息有用户手机号,用户头像,用户邮箱等信息。作为管理员,其可以在用户管理界面为指定用户的账户重置密码,或者修改用户的信息,查询用户等。
5.1.4 古建筑留言管理
古建筑留言管理界面如图5.4所示。
图5.4 古建筑留言管理界面
古建筑留言管理包括的信息有古建筑名称,留言内容,用户姓名等信息。作为管理员,其需要在古建筑留言管理界面对指定的留言进行回复。
5.1.5 公告管理
公告管理界面如图5.5所示。
图5.5 公告管理界面
公告管理包括的基本信息有公告名称,公告发布时间等信息。作为管理员,其可以在公告管理界面修改公告的内容等信息,或者删除公告。
5.2 用户功能实现
5.2.1 在线论坛
在线论坛界面如图5.6所示。
图5.6 在线论坛界面
用户在在线论坛界面可以查看帖子的内容,可以点击“发布帖子”链接进行新帖子内容的编辑和发布,另外,用户每次查看帖子内容之后,可以评论帖子。
5.2.2 古建筑信息
古建筑信息界面如图5.7所示。
图5.7 古建筑信息界面
用户在古建筑信息界面除了可以查看该古建筑信息的地点,古建筑名称等介绍信息之外,还可以查看界面右侧系统推荐的古建筑信息。
5.2.3 播放视频
播放视频界面如图5.8所示。
图5.8 播放视频界面
用户在本界面可以通过播放视频的方式来了解更多关于古建筑的相关信息,该视频支持在线播放,也支持下载视频。
5.2.4 发布留言
发布留言界面如图5.9所示。
图5.9 发布留言界面
用户在本界面可以编辑留言内容,然后提交,该留言的内容一旦成功提交之后,就会立刻显示在界面上方进行公开显示。
5.2.5 个人中心
个人中心界面如图5.10所示。
图5.10 个人中心界面
用户在个人中心界面可以更改个人信息,也可以更改密码。
第6章 系统测试
测试环节一般在程序开发完成后需要进行的环节。这个环节主要是针对不同的测试要点设定不同的测试方法,用测试方法来发现程序运行的问题所在,只有发现问题才能解决问题,所以说系统测试是一个很重要的环节。
6.1 系统测试的特点
系统测试根据科学的划分有以下三个特点。
第一点:功能的测试。程序主要就是为了实现设计的功能,在用户的角度上测试各个功能模块的实现以及各个功能模块之间的联系,并且实现零误差,操作性良好等一些特点。
第二点:流程的测试。程序的操作流程必须符合设计过程中业务的需求,如果在业务流程上面说不过去,那么程序就是无用的。
第三点:测试要科学。科学的测试能减少测试的时间和环节,能降低出错的几率,提高开发效率。
综合来讲,系统测试的特点就是让需求从设计尽快的变成出符合正常使用的应用程序,是程序开发过程中不可缺少的一个部分。
6.2 功能测试
功能测试是一件很重要的任务环节,通过功能测试可以有效的看到程序设计是否符合设计预期。
(1)登录功能测试
登录基本上是所有软件都会有的功能,见微知著,不能因为所有软件都有的功能就不进行测试,恰好登录是所有软件功能的一个开端,只有合理合法的登录才是一个程序的品质保障。下面是登录测试表。
表6.1 登录功能测试表
测试功能 |
测试数据 |
预期结果 |
实际结果 |
是否通过测试 |
使用管理员角色进行登录 |
用户名:输入管理员的正确账号xiaohua 密码:输入管理员的正确密码xiaohua,最后点击“登录”按钮提交信息 |
系统跳转到管理员的功能操作界面 |
系统登录成功,管理员进入指定操作界面 |
是 |
使用管理员角色进行登录 |
用户名:输入管理员的错误账号huahua 密码:输入管理员的正确密码xiaohua,最后点击“登录”按钮提交信息
|
系统清空所有的输入信息,并提示账号有误 |
系统登录失败,界面仍然停留在登录界面 |
是 |
使用管理员角色进行登录 |
用户名:输入管理员的正确账号xiaohua 密码:输入管理员的错误密码huahua,最后点击“登录”按钮提交信息 |
系统清空密码输入信息,并提示请输入正确的密码 |
系统登录失败,界面仍然停留在登录界面 |
是 |
使用管理员角色进行登录 |
用户名:输入管理员的账号有特殊字符xiaohu% 密码:输入管理员的正确密码xiaohua,最后点击“登录”按钮提交信息 |
系统提示账号存在非法字符,请输入正确的账号 |
系统登录失败,界面仍然停留在登录界面 |
是 |
(2)古建筑查询功能测试
查询是所有程序必备的功能,任何程序的信息录入,都是为了可以及时的对数据进行处理,处理的过程可以不用肉眼看到,但是信息的查询结果就必须符合设计的要求,根据设定条件查询数据是一件常规操作。查询测试操作如下。
表6.2 古建筑查询功能测试表
测试功能 |
测试数据 |
预期结果 |
实际结果 |
是否通过测试 |
测试系统的古建筑查询功能 |
古建筑名称:输入古建筑名称关键字,比如古建筑名称4,最后点击“查询”按钮提交信息 |
系统显示出与查询关键字相匹配的信息 |
系统可以成功查询指定信息 |
是 |
测试系统的古建筑查询功能 |
古建筑名称:输入含有特殊字符的信息,比如&%*,最后点击“查询”按钮提交信息 |
系统清空查询输入框中的信息,然后提示存在非法字符 |
系统不能实现查询功能,仍停留在查询界面 |
是 |
测试系统的古建筑查询功能 |
古建筑名称:输入数据库中不存在的古建筑名称关键字,比如故宫,最后点击“查询”按钮提交信息 |
系统提示信息不存在 |
系统不能查询信息,仍停留在查询界面 |
是 |
6.3 测试结果分析
中国古建筑介绍网站经过了几轮测试,并且已经修复了测试中提交的各种问题,经过几轮回归测试,暂时没有发现其他问题,符合设计预期。
结 论
截至目前,中国古建筑介绍网站已经初步完成。此系统根据使用者需求划分为多个功能模块,其中包括古建筑管理,论坛管理,公告管理,古建筑留言管理等功能。通过数据库MySQL技术实现了数据的存储与管理,运用Java编程技术不仅可以高效,安全开发中国古建筑介绍网站,还可以保证中国古建筑介绍网站的健壮性,同时可以满足已经开发的中国古建筑介绍网站实现跨平台运用。总而言之,中国古建筑介绍网站从无到最终的实现,其开发过程完全遵循软件开发规范进行,期间的需求分析,设计,实现等工作都有相应的理论知识进行支撑,所以开发的中国古建筑介绍网站具有一定的使用价值和社会价值,其可以简单的针对性的处理一些数据问题,包括录入数据,检索数据,更改数据等。而且开发所用成本比较低,带给使用者的便利可是非常大的,因为此系统在保证数据信息安全可靠的前提下,可以批量进行数据处理,真正实现无纸化操作。
中国古建筑介绍网站开发前期参考了网上很多的资料,也借鉴了一些相似系统的开发方案,但是此系统把功能需求的重点还是放在使用者身上,以使用的用户的要求为前提条件进行研究和开发。其具有的特点如下:
第一个特点就是中国古建筑介绍网站性能稳定,使用者操作系统,提交任何功能操作的请求,系统都会在短时间给出反馈,同时,系统经过多次检测,其出故障的几率比较小,几乎可以保证7*24小时运行,就算系统真的出现故障了,由于各个功能相互独立,不会导致其它功能无法正常操作,整个系统还是不容易崩溃,能够保证运行稳定。
第二个特点就是系统预先设立了一些可供二次开发的接口,这些接口都是根据相应的规范进行设计的,为今后中国古建筑介绍网站的权限新增以及功能扩展提供了便利。
第三个特点就是系统的整体布局合理,重要的功能都会展示在界面的顶部或者左侧区域,字体设置的大小,粗细以及颜色的搭配都是以引人注目为目的,便于使用者及时发现,从而达到快速导航的目的。另外系统展示的图片大小合理,分类明确。
中国古建筑介绍网站尽管已经开发完成,也具备需求分析中所要求的功能,并能够无故障运行,但是系统本身还是一个初步形成的模型,里面还存在很多不足。
首先是数据库中有很多重复数据,导致数据库占用过多存储空间。
其次是系统的后台代码不够简洁,有很多重复的代码片段,有很多事务处理的逻辑不是很严密。
最后是系统的界面风格采用的CSS模板样式比较单一,不够丰富。
综上所述,中国古建筑介绍网站还需要更多的精力和时间上的投入来进行研究和完善。对我自己也要要求技术上以及理论知识上的进一步提升。
参考文献
[1]杜春.旅游景点评论的情感分析和可视化系统研究及实现[J].信息与电脑(理论版),2022,34(24):154-157.
[2]解俊.旅游景点导视系统的交互设计研究[J].居业,2020,(02):50+52.
[3]张科.计算机软件开发JAVA编程语言应用分析[J].科技风,2020(01):66.
[4]彭影.优化Java数据库访问效率的策略研究[J].计算机产品与流通,2020(02):21.
[5]邹青松.计算机软件Java编程特点及其技术运用[J].黑龙江科学,2020,11(06):62-63.
[6]赵光亮,舒小松.Navicat for MySQL平台中的SQL语言分析与应用[J].无线互联科技,2017,(19):74-75.
[7]朱运乔.基于SpringBoot+SSM框架的Web应用系统搭建与实现[J].电脑编程技巧与维护,2019(10):23-25.
[8]王丹,孙晓宇,杨路斌,高胜严.基于SpringBoot的软件统计分析系统设计与实现[J].软件工程,2019,22(03):40-42.
[9]褚建萍.基于Vue的数据可视化系统研究[J].电子技术与软件工程,2022,(18):234-237.
[10]姜全坤.基于Vue的通用后台管理系统设计与实现[J].现代信息科技,2022,6(08):33-35+38.
[11]朱庆国.计算机应用技术和信息管理的整合分析[J].网络安全技术与应用,2019(10):6-7.
[12]尹希垚.软件开发信息管理系统设计及应用[J].电子技术与软件工程,2019(19):53-54.
[13]韩禄.计算机软件开发中影响软件质量的因素[J].信息与电脑(理论版),2020,32(18):114-116.
[14]浦天宏.计算机软件开发设计的难点和对策[J].信息与电脑(理论版),2020,32(18):117-119.
[15]Siyi Liu.Explore Java Language and Android Mobile Software Development[J].International Journal of Frontiers in Engineering Technology,2021,3.0(2.0).
[16]Anonymous.LDRA;LDRA Adds Java Language and Certification Support[J].Computer Weekly News,2010.
致 谢
不经意间,我的本科学习生涯即将结束。想想自己这四年来的求学生活,虽然充满辛酸,但也有许多幸福的时刻。四年来,我不仅学会了许多专业知识,也在校结识了许多朋友,还认识了很多非常优秀的老师,也得到过他们的无私帮助。尽管毕业意味着结束大学生涯,但对我来说却又是步入社会的新开始,将会开启一段新征程。在毕业论文写作的尾声,我想感谢许多人。
首先需要感谢父母和家人,我能考入这所大学,并能够安心学习知识,是你们在背后默默的付出,为我的生活提供后勤保障,也是你们常常教育我好好做人,认真做事,也总是你们在我灰心丧气时提供心理上的安慰与鼓励,也是你们在我满足现状的时候,激励我,让我要挑战自己,不要甘于现状,这样我才能够一直保持学习的热情。总之,感谢你们在背后为我做的一切。
这四年来,有大部分时间都是老师和同学陪着我一起度过。我的老师们主要是传授给我各种知识,其中也包括文档排版,软件安装等知识。这些知识对我来说非常有用,谢谢你们!
与同学们的相互交流和陪伴中,让我在毕业论文写作中少了很多焦虑,并能够安心写作。所以这些同学们,我也是非常感谢你们!
我的指导老师从开题以来,一直严格要求我认真对待自己选择的课题,并从多方面进行指导,包括专业知识理论,也包括心理上的开导等,在任何时候,只要我的课题还在进展中,您就会定期询问我已经完成了课题的多少内容了,下一步该如何开展等问题,遇到问题找导师,您也从来没让人失望过。所以,当我能够把毕业作品呈现出来的那一刻,我内心是非常激动的,也是非常感谢您。您就是我今后道路的好榜样,这不仅仅是您渊博的学识让我无比钦佩,也是您给学生指导时给人的感觉一直都是那么的平易近人,这也让我很感动。再次谢谢您,我的导师!
核心代码展示
/**
* 公告通知
* 后端接口
* @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);
}
}