• 基于Java+SpringMVC+vue校园失物招领系统(毕业设计参考)


    前言介绍:

            随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。

            校园失物招领系统,主要的模块包括首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。

            要想实现校园失物招领系统的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的信息,并由此分析得出的关联信息等大量的数据都由数据库管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

            本系统的开发使获取校园失物招领系统信息能够更加方便快捷,同时也使校园失物招领系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作。

    系统设计:

    主要功能设计: 首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等相应操作管理

    系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。校园失物招领系统的整体结构设计如图所示

    功能截图:

    系统前台模块:

    用户登录:在用户注册页面通过填写用户名、密码、姓名、手机等信息完成用户注册

    系统前端首页:校园失物招领系统,在系统的首页可以查看首页、公告信息、失物信息、招领信息、交流论坛、留言反馈、个人中心、后台管理等信息进行详细操作

    公告信息:在公告信息页面中可以查看公告标题、类型、发布日期、内容、图片等信息,并进行评论、收藏等操作

    失物信息:失物信息,在失物信息页面中可以查看物品名称、图片、物品类别、丢失地点、丢失时间、用户名、姓名、手机、详细描述等信息,并进行评论操作

    招领信息:招领信息,在招领信息页面中可以查看物品名称

     招领详情页面:查看物品名称、图片、物品类别、捡拾地点、捡拾时间、用户名、姓名、手机、详细描述等信息,并进行评论操作

    交流论坛信息:交流论坛,在交流论坛页面通过填写标题、类型、内容等信息进行发布帖子或重置操作

    评论交流

    留言反馈:在留言反馈页面输入留言内容并立即提交或重置操作

    个人中心:在个人中心页面通过填写用户名、密码、姓名、性别、上传图片、手机等信息进行个人信息修改操作,根据需要对我的发布、我的收藏等进行相应操作

    普通用户后台管理:用户登录进入系统可以查看首页、个人中心、失物信息管理、招领信息管理、我的收藏管理等信息进行详细操作

    管理员后台管理:

    管理员登录进入系统之后,就可以对所有的信息进行查看,可以查看到首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等,并且还可以对其进行相应的操作管理

    公告管理:在公告信息管理页面中可以对索引、公告标题、类型、图片、发布日期等信息进行详情,查看评论,修改或删除等操作

    内容详情:

    用户管理:在用户管理页面中可以对索引、用户名、密码、姓名、性别、头像、手机等信息进行详情,修改或删除等操作

    物品类型管理:

    失物信息管理:失物信息管理,在失物信息管理页面中可以对索引、物品名称、图片、物品类别、丢失地点、丢失时间、用户名、姓名、手机等信息进行详情,修改或删除等操作

    招领信息管理:在招领信息管理页面中可以对索引、物品名称、图片、物品类别、捡拾地点、捡拾时间、用户名、姓名、手机等信息进行详情,修改或删除等操作

    留言板管理:在留言板管理页面中可以对索引、用户名、留言内容、回复内容等信息进行详情,回复,修改或删除等操作

    交流论坛管理:在交流论坛页面中可以对索引、帖子标题、用户名、状态等信息进行详情,修改或删除等操作

    系统轮播管理: 在轮播图管理页面中可以对索引、名称、值等信息进行详情,修改或删除等操作

    数据设计:

     失物信息实体属性图,如图所示:

     招领信息实体属性图,如图所示:

     交流论坛实体属性图如图所示。

    将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

    表4-1:收藏表

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    userid

    bigint

    用户id

    refid

    bigint

    收藏id

    tablename

    varchar

    200

    表名

    name

    varchar

    200

    收藏名称

    picture

    varchar

    200

    收藏图片

    type

    varchar

    200

    类型(1:收藏,21:赞,22:踩)

    inteltype

    varchar

    200

    推荐类型

    表4-2:失物信息

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    wupinmingcheng

    varchar

    200

    物品名称

    tupian

    varchar

    200

    图片

    wupinleibie

    varchar

    200

    物品类别

    diushididian

    varchar

    200

    丢失地点

    diushishijian

    datetime

    丢失时间

    xiangximiaoshu

    longtext

    4294967295

    详细描述

    yonghuming

    varchar

    200

    用户名

    xingming

    varchar

    200

    姓名

    shouji

    varchar

    200

    手机

    表4-3:留言板

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    userid

    bigint

    留言人id

    username

    varchar

    200

    用户名

    content

    longtext

    4294967295

    留言内容

    cpicture

    varchar

    200

    留言图片

    reply

    longtext

    4294967295

    回复内容

    rpicture

    varchar

    200

    回复图片

    表4-4:公告信息

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    gonggaobiaoti

    varchar

    200

    公告标题

    leixing

    varchar

    200

    类型

    tupian

    varchar

    200

    图片

    neirong

    longtext

    4294967295

    内容

    faburiqi

    date

    发布日期

    表4-5:招领信息

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    wupinmingcheng

    varchar

    200

    物品名称

    tupian

    varchar

    200

    图片

    wupinleibie

    varchar

    200

    物品类别

    jianshididian

    varchar

    200

    捡拾地点

    jianshishijian

    datetime

    捡拾时间

    xiangximiaoshu

    longtext

    4294967295

    详细描述

    yonghuming

    varchar

    200

    用户名

    xingming

    varchar

    200

    姓名

    shouji

    varchar

    200

    手机

    表4-6:用户

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    yonghuming

    varchar

    200

    用户名

    mima

    varchar

    200

    密码

    xingming

    varchar

    200

    姓名

    xingbie

    varchar

    200

    性别

    touxiang

    varchar

    200

    头像

    shouji

    varchar

    200

    手机

    表4-7:物品类别

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    wupinleibie

    varchar

    200

    物品类别

    表4-8:用户表

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    username

    varchar

    100

    用户名

    password

    varchar

    100

    密码

    role

    varchar

    100

    角色

    addtime

    timestamp

    新增时间

    表4-9:token表

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    userid

    bigint

    用户id

    username

    varchar

    100

    用户名

    tablename

    varchar

    100

    表名

    role

    varchar

    100

    角色

    token

    varchar

    200

    密码

    addtime

    timestamp

    新增时间

    expiratedtime

    timestamp

    过期时间

    表4-10:交流论坛

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    title

    varchar

    200

    帖子标题

    content

    longtext

    4294967295

    帖子内容

    parentid

    bigint

    父节点id

    userid

    bigint

    用户id

    username

    varchar

    200

    用户名

    isdone

    varchar

    200

    状态

    表4-11:招领信息评论表

    字段名称

    类型

    长度

    字段说明

    id

    bigint

    主键

    addtime

    timestamp

    创建时间

    refid

    bigint

    关联表id

    userid

    bigint

    用户id

    nickname

    varchar

    200

    用户名

    content

    longtext

    4294967295

    评论内容

    reply

    longtext

    4294967295

    回复内容

    代码实现:

    1. /**
    2. * 上传文件映射表
    3. */
    4. @RestController
    5. @RequestMapping("file")
    6. @SuppressWarnings({"unchecked","rawtypes"})
    7. public class FileController{
    8. @Autowired
    9. private ConfigService configService;
    10. /**
    11. * 下载文件
    12. */
    13. @IgnoreAuth
    14. @RequestMapping("/download")
    15. public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
    16. try {
    17. File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
    18. if (file.exists()) {
    19. response.reset();
    20. response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");
    21. response.setHeader("Cache-Control", "no-cache");
    22. response.setHeader("Access-Control-Allow-Credentials", "true");
    23. response.setContentType("application/octet-stream; charset=UTF-8");
    24. IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
    25. }
    26. } catch (IOException e) {
    27. e.printStackTrace();
    28. }
    29. }
    30. /**
    31. * 上传文件
    32. */
    33. @RequestMapping("/upload")
    34. public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
    35. if (file.isEmpty()) {
    36. throw new EIException("上传文件不能为空");
    37. }
    38. String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
    39. String fileName = new Date().getTime()+"."+fileExt;
    40. File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
    41. file.transferTo(dest);
    42. if(StringUtils.isNotBlank(type) && type.equals("1")) {
    43. ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
    44. if(configEntity==null) {
    45. configEntity = new ConfigEntity();
    46. configEntity.setName("faceFile");
    47. configEntity.setValue(fileName);
    48. } else {
    49. configEntity.setValue(fileName);
    50. }
    51. configService.insertOrUpdate(configEntity);
    52. }
    53. return R.ok().put("file", fileName);
    54. }
    55. }
    1. /**
    2. * 失物信息
    3. * 后端接口
    4. * @author
    5. * @email
    6. * @date 2022-03-06 13:11:28
    7. */
    8. @RestController
    9. @RequestMapping("/shiwuxinxi")
    10. public class ShiwuxinxiController {
    11. @Autowired
    12. private ShiwuxinxiService shiwuxinxiService;
    13. /**
    14. * 后端列表
    15. */
    16. @RequestMapping("/page")
    17. public R page(@RequestParam Map<String, Object> params,ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request){
    18. String tableName = request.getSession().getAttribute("tableName").toString();
    19. if(tableName.equals("yonghu")) {
    20. shiwuxinxi.setYonghuming((String)request.getSession().getAttribute("username"));
    21. }
    22. EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
    23. PageUtils page = shiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shiwuxinxi), params), params));
    24. return R.ok().put("data", page);
    25. }
    26. /**
    27. * 前端列表
    28. */
    29. @IgnoreAuth
    30. @RequestMapping("/list")
    31. public R list(@RequestParam Map<String, Object> params,ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request){
    32. EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
    33. PageUtils page = shiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shiwuxinxi), params), params));
    34. return R.ok().put("data", page);
    35. }
    36. /**
    37. * 列表
    38. */
    39. @RequestMapping("/lists")
    40. public R list( ShiwuxinxiEntity shiwuxinxi){
    41. EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
    42. ew.allEq(MPUtil.allEQMapPre( shiwuxinxi, "shiwuxinxi"));
    43. return R.ok().put("data", shiwuxinxiService.selectListView(ew));
    44. }
    45. /**
    46. * 查询
    47. */
    48. @RequestMapping("/query")
    49. public R query(ShiwuxinxiEntity shiwuxinxi){
    50. EntityWrapper< ShiwuxinxiEntity> ew = new EntityWrapper< ShiwuxinxiEntity>();
    51. ew.allEq(MPUtil.allEQMapPre( shiwuxinxi, "shiwuxinxi"));
    52. ShiwuxinxiView shiwuxinxiView = shiwuxinxiService.selectView(ew);
    53. return R.ok("查询失物信息成功").put("data", shiwuxinxiView);
    54. }
    55. /**
    56. * 后端详情
    57. */
    58. @RequestMapping("/info/{id}")
    59. public R info(@PathVariable("id") Long id){
    60. ShiwuxinxiEntity shiwuxinxi = shiwuxinxiService.selectById(id);
    61. return R.ok().put("data", shiwuxinxi);
    62. }
    63. /**
    64. * 前端详情
    65. */
    66. @IgnoreAuth
    67. @RequestMapping("/detail/{id}")
    68. public R detail(@PathVariable("id") Long id){
    69. ShiwuxinxiEntity shiwuxinxi = shiwuxinxiService.selectById(id);
    70. return R.ok().put("data", shiwuxinxi);
    71. }
    72. /**
    73. * 后端保存
    74. */
    75. @RequestMapping("/save")
    76. public R save(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request){
    77. shiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    78. //ValidatorUtils.validateEntity(shiwuxinxi);
    79. shiwuxinxiService.insert(shiwuxinxi);
    80. return R.ok();
    81. }
    82. /**
    83. * 前端保存
    84. */
    85. @RequestMapping("/add")
    86. public R add(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request){
    87. shiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    88. //ValidatorUtils.validateEntity(shiwuxinxi);
    89. shiwuxinxiService.insert(shiwuxinxi);
    90. return R.ok();
    91. }
    92. /**
    93. * 修改
    94. */
    95. @RequestMapping("/update")
    96. public R update(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request){
    97. //ValidatorUtils.validateEntity(shiwuxinxi);
    98. shiwuxinxiService.updateById(shiwuxinxi);//全部更新
    99. return R.ok();
    100. }
    101. /**
    102. * 删除
    103. */
    104. @RequestMapping("/delete")
    105. public R delete(@RequestBody Long[] ids){
    106. shiwuxinxiService.deleteBatchIds(Arrays.asList(ids));
    107. return R.ok();
    108. }
    109. /**
    110. * 提醒接口
    111. */
    112. @RequestMapping("/remind/{columnName}/{type}")
    113. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
    114. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    115. map.put("column", columnName);
    116. map.put("type", type);
    117. if(type.equals("2")) {
    118. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    119. Calendar c = Calendar.getInstance();
    120. Date remindStartDate = null;
    121. Date remindEndDate = null;
    122. if(map.get("remindstart")!=null) {
    123. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    124. c.setTime(new Date());
    125. c.add(Calendar.DAY_OF_MONTH,remindStart);
    126. remindStartDate = c.getTime();
    127. map.put("remindstart", sdf.format(remindStartDate));
    128. }
    129. if(map.get("remindend")!=null) {
    130. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    131. c.setTime(new Date());
    132. c.add(Calendar.DAY_OF_MONTH,remindEnd);
    133. remindEndDate = c.getTime();
    134. map.put("remindend", sdf.format(remindEndDate));
    135. }
    136. }
    137. Wrapper<ShiwuxinxiEntity> wrapper = new EntityWrapper<ShiwuxinxiEntity>();
    138. if(map.get("remindstart")!=null) {
    139. wrapper.ge(columnName, map.get("remindstart"));
    140. }
    141. if(map.get("remindend")!=null) {
    142. wrapper.le(columnName, map.get("remindend"));
    143. }
    144. String tableName = request.getSession().getAttribute("tableName").toString();
    145. if(tableName.equals("yonghu")) {
    146. wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
    147. }
    148. int count = shiwuxinxiService.selectCount(wrapper);
    149. return R.ok().put("count", count);
    150. }
    151. }

    论文参考:

    源码获取:

    大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

    打卡 文章 更新 255/  365天

  • 相关阅读:
    2024长三角快递物流展,7月8日杭州迎来快递物流科技盛宴
    基础复习——activity的跳转-启动-结束——Activity的生命周期——Activity的启动模式(配置文件里面设置&代码里面设置)——重点...
    cuda编程学习——运行错误检测(四)
    注意力机制QKV在GAT(Graph Attention Network)的体现
    机器人抓取(七、八)—— kinect 相机的 ros 服务器及 基于gqcnn 抓取 ros 服务器
    java动态合并表格
    Java中关键字packag和import的使用
    vue自动跳转模拟登陆
    setup中的nextTick函数
    KMP算法 ← C++实现
  • 原文地址:https://blog.csdn.net/chengyang_java/article/details/125455786