🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。
- 代码可以私聊博主获取。🌹
- 赠送计算机毕业设计600个选题excel文件,帮助大学选题。
- 赠送开题报告模板,帮助书写开题报告。
作者完整代码目录供你选择:
- 《Springboot网站项目》400套
- 《ssm网站项目》800套
- 《小程序项目》300套
- 《App项目》500套
- 《python网站项目》600套
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目演示
摘 要
如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让管理模式进行升级,也为了更好的维护信息,校园助手的开发运用就显得很有必要。并且通过开发校园助手,不仅可以让所学的微信小程序技术得到实际运用,也可以掌握MySQL的使用方法,对自身编程能力也有一个检验和提升的过程。尤其是通过实践,可以对系统的开发流程加深印象,无论是前期的分析与设计,还是后期的编码测试等环节,都可以有一个深刻的了解。
借助于校园助手这样的工具,让信息系统化,流程化,规范化是最终的发展结果,让其遵循实际操作流程的情况下,对信息实施规范化处理,让信息通过电子的方式进行保存,无论是管理人员检索信息,可以便利化操作,真正缩短信息处理时间,节省人力和信息管理的成本。
关键字:校园助手,微信小程序技术,MySQL
第一章 绪论
1.1 选题背景
如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信息作为参考依据,也有些时候,各大企业或学校也需要使用工具宣传自身的文化理念等等,所以信息能够得到迅速传播并带给人们一定的参考价值,充分发挥信息本身的作用是很有必要的,而这些恰恰是传统模式所不能相比的。因此,借助工具让信息系统化,流程化,规范化是最终的发展结果,而这个工具则是计算机软件。本次设计实现的计算机软件校园助手,让其遵循实际操作流程的情况下,对成绩信息实施规范化处理,让成绩信息通过电子的方式进行保存,无论是管理人员检索成绩信息,维护成绩信息都可以便利化操作,真正缩短信息处理时间,节省人力和信息管理的成本。
1.2 选题意义
为了让成绩信息的管理模式进行升级,也为了更好的维护成绩信息,校园助手的开发运用就显得很有必要,因为它不仅可以让成绩信息的管理人员统一完成信息管理,而且还会在保证成绩信息处于安全状态的情况下,让成绩信息的处理流程缩短,让信息的管理工作量减少,让成绩信息的录入和后期维护缩短时间,以及节省管理成绩信息需要投入的精力与资金。由于校园助手运用的技术比较成熟,所以它本身就具备了稳定的性能,连续24小时运行都毫无压力。而且还可以保证数据处理的质量。另外,校园助手为了满足易用性的用户需求,特意在页面的设计上合理布局各元素,让重要内容和导航功能在关键区域展示,让操作系统的用户可以毫不费力的完成系统的操作。总的说来,校园助手实现了信息资源的共享,让信息可以以更好的方式进行传播,让管理员的管理水平得到提升的同时,也让成绩信息计算机化。
1.3 研究内容
根据校园助手设计与实现的流程来对整个系统进行说明。本文将从下述6个部分介绍系统。
第一部分:介绍选题的动因,包括介绍课题背景和意义等。
第二部分:介绍本系统选用的开发手段,包括编程语言,后台支持的数据库,开发类技术等。
第三部分:介绍系统的分析内容,包括投资决策必须的可行性研究,用户对功能的要求,系统运行的性能要求等知识。
第四部分:介绍系统的设计。包括对系统功能结构的设计,数据表结构设计等。
第五部分:介绍系统的实现。包括各模块实现的具体运行效果。
第六部分:介绍系统测试。包括检查系统功能,测试知识点的介绍等。
第二章 开发环境
对校园助手进行开发,需要了解开发技术的理论与实际运用,对开发工具,尤其是数据库的使用方法需要进行掌握。
2.1 springBoot框架
springBoot框架不是一个框架的名称,而是三个框架的首字母缩写,分别是Spring框架、SpringMVC框架、MyBatis框架。是目前Java开发者中学习的首选框架。
Spring框架继承了JavaEE和EJB框架的优点,在依赖注入方面去掉了臃肿的配置,在面向切面方面也简化了代码数量,提高了代码品质。依赖注解进行配置,让所有的依赖都可以通过程序的自动配置和寻找,减少了代码写作数量,提高了代码阅读性。
SpringMVC框架与Spring只是一个公司的,在底层代码结构上可以复用,但是最主要的功能是对数据提交请求进行过滤,并且对数据的返回进行过滤,不限于页面是微信小程序技术,也可以是其他的技术,更容易大型开发的集合技术。
MyBatis框架摒弃了Hibernate框架的配置臃肿方面,有时候Hibernate框架业务比较复杂的时候,代码量反而增加,性能下降,无法对底层的数据库语句优化,而MyBatis框架则有效的解决了这个方面,可以通过Java语句,对数据库操作语句进行优化,代码更简洁,执行效率更高,并且可以生产一些模块化代码,解决了开发过程中容易出现的实体映射方面的操作。
2.2微信小程序技术
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。
微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。 [1]
2.3 MYSQL数据库
MYSQL数据库起源于瑞典,但是经营不善被数据库行业老大甲骨文公司给收购了,收购了之后本以为只是为了发展Oracle数据库,然后MySQL数据库就会被雪藏,但是没想到甲骨文公司收购后对MySQL数据库进行了支持,并且让之前Oracle占据不了的中小型市场让MySQL占用,完全实现了甲骨文公司的利润增长,不管是从大型数据库还是中小型数据库,都有了自己的产品,并且可以对两种数据库的优势尽量的发挥,取长补短,MySQL数据库反而发展的越来越好。
最新版本的MYSQL数据库配备上了管理工具,因为甲骨文公司属于老牌的数据库厂商,对数据库的客户端工具自然有其他下线厂商进行研发配套,这些旁枝末节的事情并没有投入很大的精力,造成的结果就是程序开发人员还是习惯使用传统的Navicat for MySQL或者SQLyog这些MySQL数据库管理工具,大部分数据库开发调试人员还是习惯于视窗情况下看到相关数据。不管是越来越强的MySQL数据库还是市面上广泛流传的各种MySQL数据库客户端,MySQL数据库能实现本课题的开发,那么选择MySQL作为数据库是没有问题的。
2.4 HTML简介
HTML是超文本标记语言,都是用各种声明以及对称性的的特殊符号作为标记,用以浏览器解析。HTML还有一些基本标签,比如根元素标签就是<html>,而文档元数据一般都写在了<head>标签里面,标题就是浏览器左上角的显示的网页内容,用的是<title>标签描述,<body>里是很重要的,描述的是浏览器显示的可见内容,如果想要在浏览器上面显示一些数据,那么肯定是要写在<body>标签里面的。关于定义标题或者换行以及段落,都有对应的标签。基本上各个浏览器都支持调试模式,一般都是用到了键盘上面用F12就可以看到标签形式的代码。
HTML作为一种超文本标记语言,是目前学习网站必须学习的第一门语言,要熟悉里面很多种标记,这种标记就是网页专属标记,只有这样浏览器才能解析相关信息。HTML里面包含了整整一套的标签,各种标签都有自己的功能,并且可以循环嵌套这些标签,比如一个表格里套着两个小小的表格。HTML一般文件名称的后缀都是html作为后缀,文档一般叫做安卓页面,里面的描述性标记语法被称为代码。
2.5 MyEclipse开发工具
MyEclipse是功能最全面的Java IDE。Java语言发展至今,已经与好多语言相互配合,并且各种语法都不一样,实现的效果不一样,造成现在的程序开发人员需要学习很多种语言,出现问题就解决问题,这是各种新的工具产生的一些动力。刚开始的Java需要自己安装开发环境和运行环境,然后手动新建文本,一句话一句话的进行编写,这样的功底需要极其的扎实,效率也是相当的低下,所以各种文本编辑工具就开始像雨后春笋一样的冒了出来,经过互联网的传播,大家使用后经过口碑,自然优胜略汰,大浪淘沙,到现在为止MyEclipse开发工具已经牢牢地占据了Java开发的半壁江山。MyEclipse的立足就是为了企业人员用的,企业开发讲究效率,不可能让所有的开发人员来了从电脑安装软件先开始,配置环境又需要花费太久的时间,MyEclipse就解决了这样的烦恼,只要安装了软件,各种Java程序都可以进行开发,可以对各种语法自动的进行检测,有效的提示细节处错误,并且可以在写作上面让对一些整段代码的移动复制都很便利,应用部署也是一键到位。
第三章 系统分析
提前通过各种渠道,比如图书馆,电脑上的网站等渠道获取跟本系统有关联的资料,同时设计调查问卷,让系统的使用者参与调查,了解其对系统的需求,然后进行系统的分析,确定本系统的开发可行性,确定本系统的功能等内容。
3.1可行性分析
这部分内容主要从开发的角度和运行使用的角度等层面研究系统,确定是否投资系统,为进一步开展工作提供理论依据。
3.1.1技术可行性
本系统采用的技术和开发类语言都具备丰厚的理论基础,同时这些开发技术和开发语言在市面上都得到了广泛运用,很多功能实现的源码都以模块化的方式通过网络进行了公开,所以本系统可以参考这些代码实现功能。因此,系统开发技术可行。
3.1.2操作可行性
校园助手根据用户阅读习惯对系统内容进行排版布局,把系统页面中的关键位置用来设置导航条,可以方便用户第一时间找到需要的内容,同时,页面中也会设置一些提示,用于帮助用户操作系统,因此,系统操作可行。
3.1.3经济可行性
本系统需要在硬件设备上配置开发环境,就可以开展系统的开发工作。由于本系统并不是商业化程序,所以本人学习用的笔记本,或机房电脑都符合要求。对于开发环境的配置问题,可以通过网络直接下载安装,期间并不收取费用。因此,系统经济可行。
以上就是从技术,操作,经济的层面研究系统,最终确定系统可以开展。
3.2系统流程分析
图3-1 操作流程图
在校园助手里面,任何填充的数据都要经过合法性验证,具体流程见下图。只有符合条件的数据才可以保存。
图3-2 添加信息流程图
经过时间的改变,系统里面的很多数据也需要更新,更新时,同样需要检查更新的数据是否合法,具体流程见下图。只有判断符合要求的数据最终才可以保存。
图3-3 修改信息流程图
为了避免操作者大意误删数据,任何需要删除的数据,都需要反复确认,具体流程见下图。删除的数据将不会在页面中显示。
图3-4 删除信息流程图
3.3系统性能分析
用户使用系统,一是为了阅读需要的信息;二是为了享受系统提供的服务。因此一个质量较好的系统就更容易让用户频繁使用。而能够反馈系统的质量的信息就是系统的性能。常见的能够表示系统性能的指标有安全性,系统可扩展性,数据完整性等。接下来就对这些指标进行介绍。
3.3.1数据完整性
只要是系统中的数据,其长期保存在数据库里面,就要求其具备可靠性。这样才能发挥出数据具备的参考价值。一般来说,为了保证数据信息是准确的,并且可靠的,在数据处理上,包括录入数据,编辑数据等,都要求数据信息是完整登记的。同时,系统中的数据其自身需要具备完整性外,也要求数据之间产生的关系也要具备完整性。另外,在数据库中填充信息时,同样的信息应该以同样的方式出现在不同的表中。对于数据进行完整性定义,也是方便后期对数据的使用和查看。
3.3.2系统可扩展性
站在当前用户需求的角度考虑问题具有一定的局限性,由此设计的系统也一样。为了保护开发系统的财产,同时也为了让系统长远立足市场,系统开发人员就需要充分预留系统的空间,让系统在未来的日子里可以扩充功能,并进行更新和升级。这就是系统具备可扩展性的表现。
3.3.3系统安全性
系统在投入使用中,用户与系统的交互会产生数据,比如插入数据,编辑数据等操作都会产生数据。而作为系统的后台支持的数据库,主要任务就是保存这些数据。为了不让数据信息被窃取或者泄露,也是为了对系统的安全性进行保证,所以市面上也出现了很多的加密技术,其中MD5单向加密技术在系统中运用得最多。其原因有三点:
第一点,面对任意两段明文,在经过MD5加密处理后,它们的密文不一样;
第二点,面对任意一段明文,进行MD5加密处理后,其密文不变;
第三点,破解MD5加密的数据非常困难;
目前,关于MD5加密技术的代码已经可以从网站上下载,可以直接将模块化的代码在系统中直接引用。一般来说,用户注册的数据还有管理员登录系统使用的数据都是很重要的资源,所以这部分数据常常会经过加密处理,这样也就消除了系统安全上的隐患。
第四章 系统设计
设计一个系统不单单是设计系统的页面,可以说系统设计其本质是一个结合了众多设计过程的比较复杂的系统工程。一般来说,在完成系统设计时,需要了解和掌握很多设计的知识,有界面布局技术的知识,页面采用的字体和颜色的运用,还有页面空白的规范使用等,如何将这些元素进行组合,让页面可以直观表达信息内容的同时,也能维持页面整体的美观。
4.1 系统设计思想
系统开发必然需要统一设计思想。根据这个设计思想指导系统的开发,可以加快系统开发进程。根据目前用户对校园助手的需求,确定下述原则即为本系统的设计思想。
(1)实用性:本系统依照用户需求设计功能,遵循用户使用方便的原则,把用户在实际工作中的各个操作细节也充分考虑进来,让使用者在没有系统操作说明书的情况下,也能很容易的完成系统的操作。
(2)先进性:为了让本系统具备高性能,设计时,需要把目前的各种成熟技术加以考虑,比如软件开发技术也要考虑进去,比如计算机技术也需要进行考虑。对于系统结构的选择,本系统将毫不犹豫的选择成熟先进的B/S结构,方便开发的同时,对于后期的维护也提供了便利。
(3)高安全性:设计本系统时,对于一些系统的关键数据要严加看管,比如管理员本人的账号和密码,一定要加密保存在数据库里面。除此以外,也需要充分使用安全措施对用户的共享资源进行保护。
(4)可维护性:设计时,要提前考虑本系统的可维护性,因为一个便于维护的系统在后期产生的维护成本将会大大降低。维护一般包括软硬件的维护还有对于网络的维护等。
(5)可扩展性:重新开发一个新系统相比在原有系统上升级,会花费大量的资金和精力,由此,一个好的系统必定具备良好的可扩展性。在用户需求变动的情况下,可以通过系统的更新和升级来持续满足用户需求,这样的系统就具备了可扩展性。
4.2功能结构设计
这部分内容使用结构图这样的工具,显示设计结果,设计的管理员功能见下图。管理员为用户忘记密码时可以重置用户密码,管理成绩信息、商品收藏、商品订单、公告信息、及论坛信息,
图4-1 管理员功能结构图
4.3数据库设计
现如今,关系数据库已经广泛占据了市场。其具有坚实的理论基础,并且它可以很好的支持SQL这样的查询语言。所以,大部分程序的后台数据库几乎都是关系数据库。它们被用于长期对程序数据进行保存,采用的方式就是正确使用SQL语句在数据库中完成数据的插入,修改,删除等操作。
教师信息实体属性图
(2)下图是用户实体和其具备的属性。
用户实体属性图
(3)下图是公告信息实体和其具备的属性。
公告信息实体属性图
(4)下图是服务留言实体和其具备的属性。
服务留言实体属性图
(5)下图是失物招领实体和其具备的属性。
(6)下图是教师通讯录实体和其具备的属性。
教师通讯录实体属性图
(7)下图是课程信息实体和其具备的属性。
课程信息实体属性图
(8)下图是失物招领留言实体和其具备的属性。
失物招领留言实体属性图
(9)下图是寻物启事实体和其具备的属性。
寻物启事实体属性图
(10)下图是课程留言实体和其具备的属性。
论坛实体属性图
(12)下图是一卡通服务实体和其具备的属性。
一卡通服务实体属性图
(13)下图是成绩实体和其具备的属性。
成绩实体属性图
(14)下图是寻物启事留言实体和其具备的属性。
寻物启事留言实体属性图
4.3.1 数据库表结构
很多时候,在进行数据表的存储结构的设计时,都会遇到一些困扰,比如每张数据表如何命名,如何设计每张数据表里面的字段,如何为各个字段进行命名,以及如何设置字段的取值范围等信息。很多初学者,在进行表结构设计时,无论是对表进行命名,还是对字段进行命名,都是采用中文的方式,导致在编码阶段,在对数据进行操作时,总是报错,影响编码人员的开发速度,而且一旦数据表结构建立之后,后期进行修改也比较麻烦。因为设计数据表的结构,就意味着程序中需要长期保存的数据都是根据这样的结构进行保存的,在后面的使用中,无论是程序数据往数据表中写入,还是需要编辑或删除数据,都是按照这个规则进行。如此说来,设计数据库也是非常重要的任务,它关系到后面程序的开发,也关系到程序的运行使用。
通常在设计数据表结构时,会把前面设计的E-R图进行表结构的转化。把实体用来代表数据表,把其属性,也就是椭圆形代表的内容用来表示数据表中的字段,然后根据程序对于数据的存储要求,设计字段的类型和长度。比如用户的年龄可以用int(整数型),设置其长度为4或者6等。总之,数据表结构一旦建立,就可以往里面填充数据了。
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_id | Integer | 用户 | 是 |
3 | jiaoshi_id | Integer | 教师 | 是 |
4 | chengji_uuid_number | String | 成绩编号 | 是 |
5 | chengji_name | String | 成绩标题 | 是 |
6 | chengji_types | Integer | 成绩类型 | 是 |
7 | chengji_num | BigDecimal | 成绩 | 是 |
8 | chengji_text | String | 成绩备注 | 是 |
9 | chengji_delete | Integer | 逻辑删除 | 是 |
10 | insert_time | Date | 录入时间 | 是 |
11 | create_time | Date | 创建时间 | 是 |
表4.2字典表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | dic_code | String | 字段 | 是 |
3 | dic_name | String | 字段名 | 是 |
4 | code_index | Integer | 编码 | 是 |
5 | index_name | String | 编码名字 | 是 |
6 | super_id | Integer | 父字段id | 是 |
7 | beizhu | String | 备注 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.3论坛表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | forum_name | String | 帖子标题 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | jiaoshi_id | Integer | 教师 | 是 |
5 | users_id | Integer | 管理员 | 是 |
6 | forum_content | String | 发布内容 | 是 |
7 | super_ids | Integer | 父id | 是 |
8 | forum_state_types | Integer | 帖子状态 | 是 |
9 | insert_time | Date | 发帖时间 | 是 |
10 | update_time | Date | 修改时间 | 是 |
11 | create_time | Date | 创建时间 | 是 |
表4.4一卡通服务表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | fuwu_name | String | 服务名称 | 是 |
3 | fuwu_types | Integer | 服务类型 | 是 |
4 | fuwu_photo | String | 服务封面 | 是 |
5 | fuwu_content | String | 服务简介 | 是 |
6 | fuwu_delete | Integer | 逻辑删除 | 是 |
7 | insert_time | Date | 录入时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.5服务留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | fuwu_id | Integer | 服务 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | fuwu_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.6教师信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | jiaoshi_name | String | 教师名称 | 是 |
3 | jiaoshi_types | Integer | 教师类型 | 是 |
4 | jiaoshi_photo | String | 教师头像 | 是 |
5 | jiaoshi_phone | String | 联系方式 | 是 |
6 | jiaoshi_shichang | String | 工作时长 | 是 |
7 | jiaoshi_content | String | 教师简介 | 是 |
8 | jiaoshi_delete | Integer | 逻辑删除 | 是 |
9 | insert_time | Date | 录入时间 | 是 |
10 | create_time | Date | 创建时间 | 是 |
表4.7课程信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | kecheng_name | String | 课程名称 | 是 |
3 | kecheng_types | Integer | 课程类型 | 是 |
4 | kecheng_photo | String | 课程封面 | 是 |
5 | kecheng_file | String | 课件 | 是 |
6 | jiaoshi_id | Integer | 教师 | 是 |
7 | kecheng_content | String | 课程简介 | 是 |
8 | kecheng_delete | Integer | 逻辑删除 | 是 |
9 | insert_time | Date | 录入时间 | 是 |
10 | create_time | Date | 创建时间 | 是 |
表4.8课程留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | kecheng_id | Integer | 课程 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | kecheng_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.9公告信息表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | news_name | String | 公告标题 | 是 |
3 | news_types | Integer | 公告类型 | 是 |
4 | news_photo | String | 公告图片 | 是 |
5 | insert_time | Date | 添加时间 | 是 |
6 | news_content | String | 公告详情 | 是 |
7 | create_time | Date | 创建时间 | 是 |
表4.10失物招领表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | shiwuzhaoling_uuid_number | String | 失物编号 | 是 |
3 | shiwuzhaoling_name | String | 物品名称 | 是 |
4 | shiwuzhaoling_types | Integer | 物品类型 | 是 |
5 | xunwuqishi_types | Integer | 物品状态 | 是 |
6 | yonghu_id | Integer | 用户 | 是 |
7 | shiwuzhaoling_photo | String | 物品图片 | 是 |
8 | shiwuzhaoling_time | Date | 拾遗时间 | 是 |
9 | shiwuzhaoling_dizhi | String | 拾遗地址 | 是 |
10 | shiwuzhaoling_content | String | 详情 | 是 |
11 | create_time | Date | 创建时间 | 是 |
表4.11失物招领留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | shiwuzhaoling_id | Integer | 失物招领 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | shiwuzhaoling_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.12教师通讯录表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | tongxunlu_name | String | 联系人 | 是 |
3 | tongxunlu_phone | String | 联系方式 | 是 |
4 | tongxunlu_types | Integer | 类型 | 是 |
5 | tongxunlu_text | String | 备注 | 是 |
6 | tongxunlu_delete | Integer | 逻辑删除 | 是 |
7 | insert_time | Date | 录入时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.13寻物启事表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | xunwuqishi_name | String | 物品名称 | 是 |
3 | shiwuzhaoling_types | Integer | 物品类型 | 是 |
4 | xunwuqishi_types | Integer | 物品状态 | 是 |
5 | xunwuqishi_photo | String | 物品图片 | 是 |
6 | xunwuqishi_time | Date | 丢失时间 | 是 |
7 | yonghu_id | Integer | 用户 | 是 |
8 | xunwuqishi_dizhi | String | 丢失地址 | 是 |
9 | xunwuqishi_content | String | 详情 | 是 |
10 | create_time | Date | 创建时间 | 是 |
表4.14寻物启事留言表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | xunwuqishi_id | Integer | 寻物启事 | 是 |
3 | yonghu_id | Integer | 用户 | 是 |
4 | xunwuqishi_liuyan_text | String | 留言内容 | 是 |
5 | insert_time | Date | 留言时间 | 是 |
6 | reply_text | String | 回复内容 | 是 |
7 | update_time | Date | 回复时间 | 是 |
8 | create_time | Date | 创建时间 | 是 |
表4.15用户表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | yonghu_uuid_number | String | 一卡通 | 是 |
3 | yonghu_name | String | 用户姓名 | 是 |
4 | yonghu_photo | String | 头像 | 是 |
5 | yonghu_id_number | String | 身份证号 | 是 |
6 | yonghu_phone | String | 联系方式 | 是 |
7 | yonghu_email | String | 电子邮箱 | 是 |
8 | banji_types | Integer | 班级 | 是 |
9 | nianji_types | Integer | 年级 | 是 |
10 | yonghu_delete | Integer | 逻辑删除 | 是 |
11 | create_time | Date | 创建时间 | 是 |
表4.16管理员表
序号 | 列名 | 数据类型 | 说明 | 允许空 |
1 | Id | Int | id | 否 |
2 | username | String | 学生名 | 是 |
3 | password | String | 密码 | 是 |
4 | role | String | 角色 | 是 |
5 | addtime | Date | 新增时间 | 是 |
第五章 系统实现
前面做的所有工作,都是为了给系统实现做准备。在系统实现期间,需要根据设计方案执行,通过运用编码技术实现一个可以处理事务的系统。
5.1用户信息管理
如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,
还进行了对用户名称的模糊查询的条件
图5.1 用户信息管理页面
5.2 成绩信息管理
如图5.2显示的就是成绩信息管理页面,此页面提供给管理员的功能有:查看已发布的成绩信息数据,修改成绩信息,成绩信息作废,即可删除,还进行了对成绩信息名称的模糊查询 成绩信息信息的类型查询等等一些条件。
图5.2 成绩信息管理页面
5.3论坛信息管理
如图5.3显示的就是论坛信息管理页面,此页面提供给管理员的功能有:根据论坛信息进行条件查询,还可以对论坛信息进行新增、修改、查询操作等等
图5.3 论坛信息管理页面
5.1公告信息管理
如图5.4显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行新增、修改、查询操作等等。
图5.4 公告信息管理页面
结 论
从设计到制作完成,本系统已经花了三四个月时间,这期间也得到了导师的帮助。不然我不可能在这么短时间完成。校园助手的开发,是一个运用理论知识来指导实际工作的任务。尽管已经充分把大学期间,从书本上学习的知识运用了进来,但还是发现自身知识的匮乏。不过比较有收获的事情就是,通过本系统的开发,我对计算机软件的开发有了重新的见解,也知道它实现的具体流程,并且自己通过实际操作,不仅重新回顾和补充了以往学习的书本知识,也知道理论和实际操作之间的相互关系,并能够在一定环境下,让理论指导实践。项目能够完成,也代表着我自身开发能力的进步。
项目制作期间,我觉得最关键的环节就是系统的分析和设计,分析系统具备的功能需要多查找同类型系统的资料,并把用户需求进行参考,才可以得出本系统的需求。设计时也是在需求分析的基础上开展,也是对功能的具体细分,同时还有设计保存数据的数据库,不但要创建合适的数据表,也需要认真对表结构进行构思,尤其是表的字段设计,还有表关系的设计也是很关键的设计环节。因为后期的编码都是根据设计文档开展下去的。编码虽然对编程技术的要求较高,但是一些良好的编程习惯也不能忽视,比如注释代码,这样便于后期的程序维护。还有学会如何对变量取名,因为程序里面涉及到的变量有很多,一个方便记忆,又容易与其它变量区分的变量名称是非常有益的,可以节省编码和测试过程的时间。
校园助手完全根据需求文档设计制作,可以在数据处理上发挥它的优势,而且使用者也能轻松完成对系统的操作。从界面设计的角度来看,校园助手始终遵循简单大方的原则,让使用者一进入系统界面,不会产生压抑等负面情绪,而是比较愉悦的心情去操作系统。从程序编码的角度来看,本系统设计的结构比较清晰,而且编码的方式也比较规范化,在关键处也都进行了代码注释。从数据存储的角度来看,本系统选用的MySQL数据库,本身比较轻盈,但能短时间完成大量数据的处理,其提供的功能不可小觑。
作为毕设进行制作的校园助手,其缺陷也是显而易见的,只能说需求文档要求的大致功能都得到实现,但是程序的有些操作逻辑还是比较复杂,并没有进行优化,在今后的时间里,将会继续学习新技术,利用重构的方式设计本系统,使之具备更强的可扩展性,让系统日趋完善。
致 谢
大学生活真的很美好,不仅可以学到很多本专业的知识,还能在本校交到兴趣相投的朋友,还有身边授课的老师也都很好,他们虽然扮演着老师的角色,但课堂下却像朋友一样交流相处。所以,在即将毕业的时刻,我又突然很庆幸来到了这里上大学。
在大学里,我觉得自己的知识增加了很多,遇到问题可以想办法去解决,锻炼了我的知识运用能力。看到自己的成长,内心非常激动,同时也想对本校的老师表示感谢。还有对我的大学校园表示感谢,以及对我的舍友和同学表示感谢。
感谢校园的授课老师和指导我毕业的老师,他们把自身所学知识都教给了我们,我们才会获取知识并取得进步,指导我毕业的老师,在我的项目制作,和后期的文档编写阶段,都尽最大努力帮助我,对我遇到的问题,他都耐心告诉我怎么去解决,让我自己在本项目制作中,得到锻炼。我也从指导老师那里学到了很多知识,在此,感谢他的帮助和引导,我才可以在短短几个月时间设计实现我的项目。
陪着我一起努力的还有我的舍友和同学,我们多次面对面交流如何寻找资料,以及一些编程的小技巧等知识,正因为我们互相帮助,才可以节省项目制作的时间,也让我有足够的精力去完善自己制作的项目。
最后,感谢学校提供的读书环境,以及给我学习锻炼的机会。
参考文献
[1]贾树刚.校园助手的设计与实现[J].辽宁师专学报(自然科学版),2019,21(04):44-46+100.
[2]胡子豪.校园助手分析与设计[J].信息与电脑(理论版),2018(21):82-83.
[3]周伟.校园助手的设计与实现[J].科技视界,2018(25):91-92.
[4]薛茹.基于springBoot框架的安卓系统研究与应用[J].计算机产品与流通,2018(07):30.
[5]邱丹萍.安卓开发中springBoot框架的分析[J].电脑知识与技术,2020,16(17):81-82.
[6]邹红霆.基于springBoot框架的安卓系统研究与应用[J].湖南理工学院学报(自然科学版),2017,30(01):39-43.
[7]彭影.优化Java数据库访问效率的策略研究[J].计算机产品与流通,2020(02):21.
[8]李亚娟,张宝丽,秦爽,陈岩.基于微信小程序技术的动态网页开发技术研究[J].电脑知识与技术,2019,15(23):262-263.
[9]杨占胜.微信小程序中文乱码问题的探讨与解决方法[J].福建电脑,2020,36(04):36-41.
[10]刘婷.微信小程序技术发展前景研究[J].信息与电脑(理论版),2019(08):70-71.
[11]蒋睿.MySQL数据库安全研究[J].电脑知识与技术,2020,16(09):3-4+21.
[12]段震.浅谈MySQL数据库有关数据备份的几种方法[J].山西电子技术,2020(02):17-18.
[13]李瑞祥,刘伟.MYSQL数据查询技巧[J].网络安全和信息化,2019(05):70-71.
[14]刘建臣.处理MySQL访问异常故障[J].网络安全和信息化,2019(12):160-161.
[15]韩禄.计算机软件开发中影响软件质量的因素[J].信息与电脑(理论版),2020,32(18):114-116.
[16]浦天宏.计算机软件开发设计的难点和对策[J].信息与电脑(理论版),2020,32(18):117-119.
[17]卫红春.信息系统分析与设计[M].北京:清华大学出版社,2016.
[18]黎连业,王华,李淑春.软件测试与测试技术[M].清华大学出版社,2016.
[19]Konstantins Gusarovs. An Analysis on Java Programming Language Decompiler Capabilities[J]. Applied Computer Systems,2018,23(2).
[20]Tan Yiyu. A Hardware-oriented Object Model for Java in an Embedded Processor[J]. Microprocessors and Microsystems,2018.
核心代码展示
/**
* 公告通知
* 后端接口
* @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);
}
}