本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。
系统的选题背景和意义
选题背景: 随着社会的发展和教育水平的提高,大学生竞赛在中国的高校中越来越受到重视。大学生竞赛作为一种重要的学术交流和实践能力培养的途径,对于提升学生综合素质、培养创新精神和实践能力具有重要意义。然而,目前大学生竞赛存在着信息不对称、资源分配不均等问题,导致很多学生无法及时了解到适合自己的竞赛项目,错失了参与的机会。
选题意义: 针对以上问题,我们开发了基于微信小程序的Linda大学生竞赛平台。该平台旨在为大学生提供一个便捷、全面的竞赛信息发布和查询平台,帮助学生更好地了解和参与各类竞赛活动。首先,通过平台,学生可以及时获取到最新的竞赛信息,包括竞赛时间、地点、报名方式等,避免了信息不对称的问题。其次,平台还提供了丰富的竞赛资源,包括往年获奖作品、优秀案例等,供学生参考和借鉴,提升自己的竞赛水平。此外,平台还提供了在线报名和参赛指导等功能,方便学生报名参赛并获得相关指导。
通过Linda大学生竞赛平台,我们希望能够搭建起一个全面、高效的大学生竞赛交流平台,促进学生之间的交流与合作,提升学生的综合素质和实践能力。同时,该平台也有助于推动大学生竞赛的发展,促进各高校之间的竞争与合作,为培养更多具有创新精神和实践能力的优秀人才做出贡献。
以上选题背景和意义内容是根据本选题撰写,非本作品实际的选题背景、意义或功能。各位童鞋可参考用于写开题选题和意义内容切勿直接引用。本作品的实际功能和技术以下列内容为准。
技术栈:
本项目的技术栈主要包括前端Vue、后端Java程序语言开发、SSM框架和MySQL5.7数据库。
Vue是一种轻量级的JavaScript框架,能够快速构建交互式的用户界面。Vue提供了易于使用的API,使得开发者可以非常容易地创建组件化、可复用的代码。
Java是一种跨平台的编程语言,拥有丰富的库和工具生态系统,广泛用于企业级应用开发。Java在后端服务开发方面拥有强大的性能和可伸缩性,并且能够很好地与其他技术栈集成,如Spring、Hibernate、MyBatis等。
SSM框架是Spring、SpringMVC和MyBatis三个框架的结合体,其整合了各自优势,形成了完整的Web开发框架。本系统客户端向服务器发送请求,SpringMVC拦截请求交给相应的控制器(Controller)处理,使用注解或配置文件定义URL和方法映射,控制器调用Service层中的业务逻辑处理方法,Service层处理完毕后将结果返回给控制器,控制器根据返回的结果选择适当的视图(View)进行展示,视图渲染完成后返回给客户端的过程。
MySQL5.7是一种开源的关系型数据库管理系统,在数据存储和管理方面表现优异。它能够轻松地集成到任何技术栈中,如Java、Python、Ruby等。除此之外,MySQL还具备高可靠性、高稳定性、易扩展性和强数据安全性等特点。
我们选择Vue、Java、SSM框架和MySQL5.7作为本作品的技术栈,具有语言间的无缝协作、代码复用性强、开发效率高、性能高等诸多优势。
3.1需求分析
利用Java语言、Spring Boot框架和mysql数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个基于微信小程序的Linda大学生竞赛平台,来进行记录用户的信息,以及系统信息的增删改查的功能,根据实现需求,系统需完成这些基本功能:
(1)系统合理显示首页、个人中心、用户管理、学科类别管理、校外竞赛管理、校内竞赛管理、学习资源管理、购买订单管理、分享讨论、系统管理等界面。
(2)用户和管理员所有的信息都保存与数据库中。
(3)对大学生竞赛平台信息能够进行查询、修改、删除、添加等操作。
本系统采用自上往下的方法开发,基本定位如下功能:
本课题要求实现一套基于微信小程序的Linda大学生竞赛平台,系统主要包括管理员模块和用户模块功能模块。
图3-1管理员用例图
(2)用户用例图如下所示:
图3-2用户用例图
3.2系统可行性分析
可行性分析是在进行初步调查之后,对系统开发的必要性和可行性的研究。针对本系统,主要从经济可行性,技术可行性,运行可行性,社会可行性,法律可行性等方面来论证,具体分析如下:
经济可行性
由于本系统是作为毕业设计系统,且系统本身存在一些技术层面的缺陷,并不能直接用于商业用途,只想要通过该系统的开发提高自身学术水平,不需要特定服务器等额外花费。所有创造及工作过程仅需在个人电脑上就能实现,使用到的软件大多为开源软件,所以经济成本并不高,可以轻易实现。
技术可行性
本系统的开发使用java作为系统开发的开发语言,开发框架选择Spring Boot,而B/S结构决定了本系统的兼容性和多用户可操作性,此外选择MySql作为数据库不仅提高了数据安全性更保障了数据的可操作性。
运行可行性
本系统作为以java作为开发语言的系统,而且选用B/S结构则决定了要操作本系统仅需要占用很小的资源,并没有过多地硬件配置要求,目前市面上只要能正常运行浏览器的智能手机都可以正常运行使用该系统。
社会可行性
管理者效率的增加,以及在管理过程中出现错误的可能性的大大减少,也是为学校更好的发展铺平道路,也让学校更好的服务大众。这理应得到各界的一致认可。
法律可行性
本系统绝不违反任何相关的法律法规。
3.3系统流程分析
3.3.1操作流程
图3-3登录流程图
3.3.2添加信息流程
添加信息流程图,如图所示:
图3-4添加信息流程图
3.3.3删除信息流程
删除信息流程图,如图所示:
图3-5删除信息流程图
4系统总体设计
4.1系统结构
小程序基于微信小程序的Linda大学生竞赛平台,它是一个由人、手机、电脑及其他组件构成的,一种能够收集、存储、加工、传送信息的系统。该系统可以帮助决策者找出当前急需解决的问题,然后将信息快速的反馈,使管理人员能够以最快的时间知道目前的现状,进行更进一步的计划。
当前MIS系统结构目前存在两种较为流行的结构:C/S和B/S两种。
C/S结构的系统:C/S结构就是客户机服务器结构,它可以法派任务到Client端和Server端来进行,充分利用两端硬件环境的优势,来降低系统的通讯的花费。客户端主要作用是处理人机交互,执行客户端应用程序,收集数据以及向服务器发送任务请求。服务器基本作用是执行后台程序,它主要对客户机的请求申请进行反馈,除此之外,它的作用还包括:数据服务预约储系统的共享管理、通讯管理、文件管理等等。
B/S结构的系统:这种网络结构简化了客户端,并把系统功能实现的中心集中到服务器上,在这种模式中,只需要一个浏览器就可以了。这种结构将很多的工作交于WEB服务器,只通过浏览器请求WEB服务,随后根据请求返回信息。
通常在只在学校网内部使用,采用C/S。而使用不仅限于内网的情况下使用B/S。考虑到本管理系统的一系列需求,所以,该系统开发使用B/S结构开发。其主要功能结构如下图所示。
图4-1 系统总体功能结构图
4.2数据库设计
数据库设计是指为系统提供最优化的数据库模式,使得应用程序能够有效的存储数据,满足用户的各类需求。
4.2.1 数据库概念结构设计
概念结构设计是根据用户需求形成的。用最常的E-R方法描述数据模型进行数据库的概念设计,首先设计局部的E-R模式,最后各局部ER模式综合成一个全局模式。然后再把概念模式转换成逻辑模式。将概念设计从设计过程中独立开来,设计复杂程度降低,不受特定DBMS的限制。
1.所有实体和属性的定义如下所示。
管理员信息属性图如下图4-2所示。
图4-2 管理员信息实体属性图
校外竞赛信息实体属性图,如图4-3所示:
图4-3校外竞赛信息实体属性图
用户信息实体属性图,如图4-4所示:
图4-4用户信息实体属性图
购买订单信息实体属性图,如图4-5所示:
图4-5购买订单信息实体属性图
5.1管理员服务端功能模块
管理员登录,管理员通过登录页面输入用户名,密码,选择角色等信息即可进行系统登录,如图5-1所示。
图5-1管理员登录界面图
管理员登录进入基于微信小程序的Linda大学生竞赛平台可以查看首页、个人中心、用户管理、学科类别管理、校外竞赛管理、校内竞赛管理、学习资源管理、购买订单管理、分享讨论、系统管理等内容进行详细操作,如图5-2所示。
图5-2管理员功能界面图
用户管理,在用户管理页面可以查看学号、用户姓名、性别、年龄、头像、用户手机、学院等信息,并可根据需要对用户管理进行修改或删除等操作,如图5-3所示。
图5-3用户管理界面图
以下是用户信息代码;
<el-row >
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="学号" prop="xuehao">
<el-input v-model="ruleForm.xuehao"
placeholder="学号" clearable :readonly="ro.xuehao"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="学号" prop="xuehao">
<el-input v-model="ruleForm.xuehao"
placeholder="学号" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="密码" prop="mima">
<el-input v-model="ruleForm.mima"
placeholder="密码" clearable :readonly="ro.mima"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="密码" prop="mima">
<el-input v-model="ruleForm.mima"
placeholder="密码" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="用户姓名" prop="yonghuxingming">
<el-input v-model="ruleForm.yonghuxingming"
placeholder="用户姓名" clearable :readonly="ro.yonghuxingming"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="用户姓名" prop="yonghuxingming">
<el-input v-model="ruleForm.yonghuxingming"
placeholder="用户姓名" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="select" v-if="type!='info'" label="性别" prop="xingbie">
<el-select :disabled="ro.xingbie" v-model="ruleForm.xingbie" placeholder="请选择性别">
<el-option
v-for="(item,index) in xingbieOptions"
v-bind:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<div v-else>
<el-form-item class="input" label="性别" prop="xingbie">
<el-input v-model="ruleForm.xingbie"
placeholder="性别" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="年龄" prop="nianling">
<el-input v-model="ruleForm.nianling"
placeholder="年龄" clearable :readonly="ro.nianling"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="年龄" prop="nianling">
<el-input v-model="ruleForm.nianling"
placeholder="年龄" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="24">
<el-form-item class="upload" v-if="type!='info' && !ro.touxiang" label="头像" prop="touxiang">
<file-upload
tip="点击上传头像"
action="file/upload"
:limit="3"
:multiple="true"
:fileUrls="ruleForm.touxiang?ruleForm.touxiang:''"
@change="touxiangUploadChange"
></file-upload>
</el-form-item>
<div v-else>
<el-form-item v-if="ruleForm.touxiang" label="头像" prop="touxiang">
<img style="margin-right:20px;" v-bind:key="index" v-for="(item,index) in ruleForm.touxiang.split(',')" :src="$base.url+item" width="100" height="100">
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="用户手机" prop="yonghushouji">
<el-input v-model="ruleForm.yonghushouji"
placeholder="用户手机" clearable :readonly="ro.yonghushouji"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="用户手机" prop="yonghushouji">
<el-input v-model="ruleForm.yonghushouji"
placeholder="用户手机" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="学院" prop="xueyuan">
<el-input v-model="ruleForm.xueyuan"
placeholder="学院" clearable :readonly="ro.xueyuan"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="学院" prop="xueyuan">
<el-input v-model="ruleForm.xueyuan"
placeholder="学院" readonly></el-input>
</el-form-item>
</div>
</el-col>
</el-row>
学科类别管理,在学科类别管理页面可以查看学科类别等信息,并可根据需要对学科类别管理进行修改或删除等操作,如图5-4所示。
图5-4学科类别管理界面图
校外竞赛管理,在校外竞赛管理页面可以查看竞赛名称、学科类别、封面图片、竞赛时间等信息,并可根据需要对校外竞赛管理进行修改或删除等操作,如图5-5所示。
图5-5校外竞赛管理界面图
以下是校外竞赛代码;
<el-row >
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="竞赛名称" prop="jingsaimingcheng">
<el-input v-model="ruleForm.jingsaimingcheng"
placeholder="竞赛名称" clearable :readonly="ro.jingsaimingcheng"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="竞赛名称" prop="jingsaimingcheng">
<el-input v-model="ruleForm.jingsaimingcheng"
placeholder="竞赛名称" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="select" v-if="type!='info'" label="学科类别" prop="xuekeleibie">
<el-select :disabled="ro.xuekeleibie" v-model="ruleForm.xuekeleibie" placeholder="请选择学科类别">
<el-option
v-for="(item,index) in xuekeleibieOptions"
v-bind:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
<div v-else>
<el-form-item class="input" label="学科类别" prop="xuekeleibie">
<el-input v-model="ruleForm.xuekeleibie"
placeholder="学科类别" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="24">
<el-form-item class="upload" v-if="type!='info' && !ro.fengmiantupian" label="封面图片" prop="fengmiantupian">
<file-upload
tip="点击上传封面图片"
action="file/upload"
:limit="3"
:multiple="true"
:fileUrls="ruleForm.fengmiantupian?ruleForm.fengmiantupian:''"
@change="fengmiantupianUploadChange"
></file-upload>
</el-form-item>
<div v-else>
<el-form-item v-if="ruleForm.fengmiantupian" label="封面图片" prop="fengmiantupian">
<img style="margin-right:20px;" v-bind:key="index" v-for="(item,index) in ruleForm.fengmiantupian.split(',')" :src="$base.url+item" width="100" height="100">
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="date" v-if="type!='info'" label="竞赛时间" prop="jingsaishijian">
<el-date-picker
format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd"
v-model="ruleForm.jingsaishijian"
type="date"
placeholder="竞赛时间">
</el-date-picker>
</el-form-item>
<div v-else>
<el-form-item class="input" v-if="ruleForm.jingsaishijian" label="竞赛时间" prop="jingsaishijian">
<el-input v-model="ruleForm.jingsaishijian"
placeholder="竞赛时间" readonly></el-input>
</el-form-item>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item v-if="type!='info'" label="内容" prop="neirong">
<editor
style="min-width: 200px; max-width: 600px;"
v-model="ruleForm.neirong"
class="editor"
action="file/upload">
</editor>
</el-form-item>
<div v-else>
<el-form-item v-if="ruleForm.neirong" label="内容" prop="neirong">
<span v-html="ruleForm.neirong"></span>
</el-form-item>
</div>
</el-col>
</el-row>
校内竞赛管理,在校内竞赛管理页面可以查看竞赛名称、学院、封面图片、竞赛时间等信息,并可根据需要对校内竞赛管理进行修改或删除等操作,如图5-6所示。
图5-6校内竞赛管理界面图
学习资源管理,在学习资源管理页面可以查看资源名称、封面图片、价格、发布时间等信息,并可根据需要对学习资源管理进行修改或删除等操作,如图5-7所示。
图5-7学习资源管理界面图
以下是学习资源代码;
<el-row >
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="资源名称" prop="ziyuanmingcheng">
<el-input v-model="ruleForm.ziyuanmingcheng"
placeholder="资源名称" clearable :readonly="ro.ziyuanmingcheng"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="资源名称" prop="ziyuanmingcheng">
<el-input v-model="ruleForm.ziyuanmingcheng"
placeholder="资源名称" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="24">
<el-form-item class="upload" v-if="type!='info' && !ro.fengmiantupian" label="封面图片" prop="fengmiantupian">
<file-upload
tip="点击上传封面图片"
action="file/upload"
:limit="3"
:multiple="true"
:fileUrls="ruleForm.fengmiantupian?ruleForm.fengmiantupian:''"
@change="fengmiantupianUploadChange"
></file-upload>
</el-form-item>
<div v-else>
<el-form-item v-if="ruleForm.fengmiantupian" label="封面图片" prop="fengmiantupian">
<img style="margin-right:20px;" v-bind:key="index" v-for="(item,index) in ruleForm.fengmiantupian.split(',')" :src="$base.url+item" width="100" height="100">
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="input" v-if="type!='info'" label="价格" prop="jiage">
<el-input v-model="ruleForm.jiage"
placeholder="价格" clearable :readonly="ro.jiage"></el-input>
</el-form-item>
<div v-else>
<el-form-item class="input" label="价格" prop="jiage">
<el-input v-model="ruleForm.jiage"
placeholder="价格" readonly></el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<el-form-item class="date" v-if="type!='info'" label="发布时间" prop="fabushijian">
<el-date-picker
format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd"
v-model="ruleForm.fabushijian"
type="date"
placeholder="发布时间">
</el-date-picker>
</el-form-item>
<div v-else>
<el-form-item class="input" v-if="ruleForm.fabushijian" label="发布时间" prop="fabushijian">
<el-input v-model="ruleForm.fabushijian"
placeholder="发布时间" readonly></el-input>
</el-form-item>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item v-if="type!='info'" label="资源介绍" prop="ziyuanjieshao">
<editor
style="min-width: 200px; max-width: 600px;"
v-model="ruleForm.ziyuanjieshao"
class="editor"
action="file/upload">
</editor>
</el-form-item>
<div v-else>
<el-form-item v-if="ruleForm.ziyuanjieshao" label="资源介绍" prop="ziyuanjieshao">
<span v-html="ruleForm.ziyuanjieshao"></span>
</el-form-item>
</div>
</el-col>
</el-row>
购买订单管理,在购买订单管理页面可以查看订单编号、资源名称、封面图片、价格、学号、用户手机、用户姓名、购买时间、备注、是否支付、审核回复、审核状态、审核等信息,并可根据需要对购买订单管理进行修改或删除等操作,如图5-8所示。
图5-8购买订单管理界面图
分享讨论,在分享讨论页面可以查看帖子标题、用户名、状态等信息,并可根据需要对分享讨论进行详情,修改或删除等操作,如图5-9所示。
图5-9分享讨论界面图
系统管理,在系统管理页面可以查看名称、值等信息,进行详情、修改,并且可以发布竞赛资讯等操作,如图5-11 5-12所示。
图5-11轮播图管理界面图
图5-12竞赛资讯界面图
5.2用户微信端功能模块
用户注册,在注册页面可以填写学号、密码、确认密码、用户姓名、性别、年龄、用户手机、学院等信息,进行注册,如图5-13所示。
图5-13用户注册界面图
用户登录,在登录页面填写账号、密码进行登录如图5-14所示。
图5-14用户登录界面图
用户登录到基于微信小程序的Linda大学生竞赛平台可以查看首页、校外竞赛、校内竞赛、分享讨论、我的等内容,如图5-15所示。
图5-15用户首页功能界面图