微信小程序毕业设计-大学校园二手教材与书籍拍卖系统平台项目开发实例(附源码+论文)

大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:微信小程序毕业设计
精彩专栏推荐👇🏻👇🏻👇🏻
🎀 安卓app毕业设计
🌎Java毕业设计

源码下载地址:

https://download.csdn.net/download/m0_46388260/88014773

一、项目简介

此次大学校园二手教材与书籍拍卖系统平台的开发设计主要借助微信小程序端来实现,微信小程序依托微信应用平台来实现使用,因此用户不需要额外安装应用且能够实现随时随地的应用和分享,主要的功能模块包括了书籍信息查询、竞拍信息管理以及书籍在线拍卖等内容,结合用户端的需求对于书籍信息的管理按照类别进行划分,同时考虑竞拍的公平公正性需要设定对应的竞拍结束时间、竞拍实时价格,对于竞拍入围的用户开通对应的在线支付窗口,通过以上功能模块的运行来实现二手教材及书籍拍卖系统平台的运行。

二、系统设计

2.1软件功能模块设计

此次大学校园二手教材与书籍拍卖系统的主要目的是为在校大学生创造一个在线的二手交易平台,促进和鼓励书籍及教材资源的再利用,因此结合用户端的需求此次系统平台主要通过在线竞拍的方式来实现书籍及教材资源的二次销售,借助微信小程序端实现书籍信息的发布、书籍信息在线竞拍以及在线付款等功能,此次平台的设计是针对买卖双方的双重平台,用户可以通过平台查看对应的书籍信息实现在线的竞拍,同时也可以通过平台来发布相关书籍及教材信息实现在线售卖。为了帮助学生用户更好的找到自己所需的教材信息,可以通过书籍分类的方式进行类别划分。同时考虑到竞拍环节的公平性,对于在线竞拍的书籍采用了倒计时的方式进行售卖,用户可以结合起拍价、竞价幅度等内容实现在线的竞拍,通过价格比对系统会提示入围和淘汰状态,入围的用户可以通过在线支付的方式实现书籍的购买,对于没有入围的用户则没有对应的支付界面按,利用线上流程化的操作管理来实现在线的书籍竞拍,为了便于理解,此次微信小程序大学校园校园二手教材与书籍拍卖系统功能结构图呈现内容如下图所示:在这里插入图片描述

2.2数据库设计

(1)用户信息E-R图,主要包括了登录所需的用户名及密码信息,同时还包括了对应的姓名、联系方式以及身份证号等个人数据信息。在这里插入图片描述
(2)书籍信息E-R图,主要包括了书籍的编号、图片、名称以及对应类别,作为拍卖系统还包括了书籍起拍价、当前价以及对应的竞拍结束时间等内容。在这里插入图片描述

三、系统项目部分截图

3.1系统后台界面

校园二手书籍拍卖系统后台功能模块主要包括了系统用户管理,包括了系统管理员用户以及微信用户,通过系统后台可以实现对应用户的信息管理及微信解绑操作,为了便于书籍的查询,系统后台还包括书籍类别管理、书籍信息管理、竞拍管理以及首页新闻管理,后台可以结合前端用户的信息提交及反馈进行数据的维护管理,对于竞拍信息进行后台的审核和反馈,具体系统后台界面的功能模块内容呈现如下图所示:在这里插入图片描述

3.2书籍类别管理

管理员用户可以通过系统后台的书籍类别管理来实现对应类别的新增,用户可以通过书籍信息的类别进行查找,同时管理员用户可以结合书籍的类型进行类别的新增和剔除操作,具体书籍类别管理界面如下图所示:在这里插入图片描述

3.3书籍信息界面

管理员可以通过后台查看到用户上传的书籍信息内容,同时通过后台的书籍信息进行在线审核和维护,书籍信息的内容包括了书籍名称、书籍类别、起拍价、当前价、起拍幅度以及出价次数等内容,同时对于线上的竞拍需要规定对应的结束时间,需要在规定的结束时间内完成书籍的在线竞拍。在这里插入图片描述

3.4 竞拍管理界面

管理员通过后台的竞拍管理可以实现用户端竞拍信息的查看和维护,包括了竞拍的书籍名称、书籍类别、起拍价、当前价、价格以及对应的用户账号信息,同时可以结合竞拍状态和是否支付来查看竞拍当前状态,入围的用户可以实现在线的支付,如果状态是淘汰的用户则会自动关闭支付界面,具体竞拍管理信息如下图所示:在这里插入图片描述

微信小程序首页

微信小程序首页主要包括了书籍信息、竞拍界面以及个人中心,用户可以通过微信小程序端实现竞拍书籍的浏览以及竞拍书籍的上传,同时可以通过竞拍界面实现在线的竞拍和付款,微信小程序首页还包括了拍卖新闻以及竞拍书籍的系信息和价格,大学校园二手教材及书籍拍卖小程序端呈现内容如下图所示:在这里插入图片描述

书籍信息添加

用户登录微信小程序后可以通过书籍界面实现在线的书籍信息添加,书籍信息的内容包含了书籍编号、书籍名称、书籍类别及书籍图片内容,竞拍信息包括了起拍价和当前价以及对应的竞拍结束时间,对于书籍的拍卖需要录入对应的结束时间,需要在结束时间之前完成竞拍和比价。在这里插入图片描述

书籍竞拍界面

用户可以通过竞拍界面来查看对应的书籍信息及起拍价信息,结合自身的需求可以对相关的书籍进行在线竞拍,竞拍界面提供了竞拍倒计时供用户参考,需要在规定的时间内完成书籍的竞拍,对应的书籍竞拍结果可以通过个人中心进行查看。在这里插入图片描述

用户后台界面

用户登录进入到微信小程序后可以通过我的界面实现个人资料的修改以及书籍收藏查看,同时可以查看到作为买方的我的竞拍查询以及作为卖方的我的书籍查询,查看到当前最新的竞拍信息和入围状态,同时可以通过把应用推荐给其他人的功能模块实现小程序的分享,具体个人中心界面如下图所示:在这里插入图片描述

四、论文目录

摘 要 2
Abstract 3
第一章 绪论 1
1.1研究背景 1
1.2国内外发展现状 1
1.3研究的意义 2
1.4开发工具及技术 2
1.4.1 微信小程序开发工具 2
1.4.2 Mysql数据库 2
1.4.3 JAVA语言 3
第二章 需求分析 4
2.1可行性分析 4
2.1.1技术的可行性 4
2.1.2经济的可行性 4
2.1.3操作可行性 4
2.2需求调研 4
第三章 数据库设计 6
3.1数据库的分析与设计 6
3.1.1数据库的概念结构设计 6
3.1.2数据表的逻辑结构设计 7
第四章 系统功能实现 8
4.1 系统后台界面 8
4.2书籍类别管理 8
4.3 书籍信息界面 9
4.4竞拍管理界面 9
4.5 微信小程序首页 9
4.6书籍信息添加 10
4.7书籍竞拍界面 11
4.8用户后台界面 11
第五章 系统测试 12
5.1 系统测试的意义 12
5.2 系统测试的内容 12
5.3系统测试结果 12
总结 13
致 谢 14
参考文献 15

五、部分核心代码

package com.example.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.*;
import com.example.exception.CustomException;

import com.example.service.AdminInfoService;
import com.example.service.ZhuceyonghuInfoService;


import org.springframework.web.bind.annotation.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import cn.hutool.json.JSONUtil;

import java.util.*;
import java.util.stream.Collectors;

@RestController
public class AccountController {

    @Value("${authority.info}")
    private String authorityStr;

    @Resource
    private AdminInfoService adminInfoService;
	@Resource
private ZhuceyonghuInfoService zhuceyonghuInfoService;

	






    @PostMapping("/login")
    public Result<Account> login(@RequestBody Account account,  HttpServletRequest request) {
        if (StrUtil.isBlank(account.getUsername()) || StrUtil.isBlank(account.getMima()) || account.getLevel() == null) {
            throw new CustomException(ResultCode.PARAM_LOST_ERROR);
        }
        String level = account.getLevel();
        Account login = new Account();
        if (level.equals("管理员")) {
            login = adminInfoService.login(account.getUsername(), account.getMima());
        }
		
if (level.equals("注册用户")) {
            login = zhuceyonghuInfoService.login(account.getUsername(), account.getMima());
            //yoxusxhenhe if(login.getStatus().equals("否")){return Result.error("500","帐号未审核通过,请联系管理员");}
        }

		

        request.getSession().setAttribute("user", login);
        return Result.success(login);
    }

  

    @GetMapping("/logout")
    public Result logout(HttpServletRequest request) {
        request.getSession().setAttribute("user", null);
        return Result.success();
    }

    @GetMapping("/auth")
    public Result getAuth(HttpServletRequest request) {
        Object user = request.getSession().getAttribute("user");
        if(user == null) {
            return Result.error("401", "未登录");
        }
        return Result.success(user);
    }

    @GetMapping("/getAccountInfo")
    public Result<Object> getAccountInfo(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.success(new Object());
        }
        String level = account.getLevel();
        if (level.equals("管理员")) {
            return Result.success(adminInfoService.findById(account.getId()));
        }
		if (level.equals("注册用户")) { return Result.success(zhuceyonghuInfoService.findById(account.getId())); }


        return Result.success(new Object());
    }

    @GetMapping("/getSession")
    public Result<Map<String, String>> getSession(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.success(new HashMap<>(1));
        }
        Map<String, String> map = new HashMap<>(1);
        map.put("username", account.getUsername());
        return Result.success(map);
    }

    @GetMapping("/getAuthority")
    public Result<List<AuthorityInfo>> getAuthorityInfo() {
        List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
        return Result.success(authorityInfoList);
    }

    /**
     * 获取当前用户所能看到的模块信息
     * @param request
     * @return
     */
    @GetMapping("/authority")
    public Result<List<Integer>> getAuthorityInfo(HttpServletRequest request) {
        Account user = (Account) request.getSession().getAttribute("user");
        if (user == null) {
            return Result.success(new ArrayList<>());
        }
        JSONArray objects = JSONUtil.parseArray(authorityStr);
        for (Object object : objects) {
            JSONObject jsonObject = (JSONObject) object;
            if (user.getLevel().equals(jsonObject.getStr("level"))) {
                JSONArray array = JSONUtil.parseArray(jsonObject.getStr("models"));
                List<Integer> modelIdList = array.stream().map((o -> {
                    JSONObject obj = (JSONObject) o;
                    return obj.getInt("modelId");
                })).collect(Collectors.toList());
                return Result.success(modelIdList);
            }
        }
        return Result.success(new ArrayList<>());
    }

    @GetMapping("/permission/{modelId}")
    public Result<List<Integer>> getPermission(@PathVariable Integer modelId, HttpServletRequest request) {
        List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);
        Account user = (Account) request.getSession().getAttribute("user");
        if (user == null) {
            return Result.success(new ArrayList<>());
        }
        Optional<AuthorityInfo> optional = authorityInfoList.stream().filter(x -> x.getLevel().equals(user.getLevel())).findFirst();
        if (optional.isPresent()) {
            Optional<AuthorityInfo.Model> firstOption = optional.get().getModels().stream().filter(x -> x.getModelId().equals(modelId)).findFirst();
            if (firstOption.isPresent()) {
                List<Integer> info = firstOption.get().getOperation();
                return Result.success(info);
            }
        }
        return Result.success(new ArrayList<>());
    }

    @PutMapping("/updateMima")
    public Result updateMima(@RequestBody Account info, HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        if (account == null) {
            return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
        }
        String oldMima = SecureUtil.md5(info.getMima());
        if (!oldMima.equals(account.getMima())) {
            return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
        }
        info.setMima(SecureUtil.md5(info.getNewMima()));
        String level = account.getLevel();
        if (level.equals("管理员")) {
            AdminInfo adminInfo = new AdminInfo();
            BeanUtils.copyProperties(info, adminInfo);
            adminInfoService.update(adminInfo);
        }
		
if (level.equals("注册用户")) {
            ZhuceyonghuInfo zhuceyonghuInfo = new ZhuceyonghuInfo();
            BeanUtils.copyProperties(info, zhuceyonghuInfo);
            zhuceyonghuInfoService.update(zhuceyonghuInfo);
        }



        info.setLevel(level);
        info.setUsername(account.getUsername());
        // 清空session,让用户重新登录
        request.getSession().setAttribute("user", null);
        return Result.success();
    }
    @PostMapping("/resetMima")
    public Result resetMima(@RequestBody Account account) {
        String level = account.getLevel();
        if (level.equals("管理员")) {
            AdminInfo info = adminInfoService.findByUserName(account.getUsername());
            if (info == null) {
                return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
            }
            info.setMima(SecureUtil.md5("123456"));
            adminInfoService.update(info);
        }



        return Result.success();
    }
}


获取源码或论文

如需对应的论文或源码,也可以下方微信联系我

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值