(java毕业设计+b/s架构)小太阳鲜花网站的设计与实现(附源码+论文)

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

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 安卓app毕业设计
🌎微信小程序毕业设计

一、项目简介

随着移动互联网的快速发展,人们线上消费习惯的养成,电商朝着垂直领域细分市场如生鲜、母婴等。随着人民收入水平提高以及消费升级的浪潮来临,人们对于品质生活的追求不断提高,从而使得鲜花需求从节假日、礼品逐渐延伸至日常生活中来,整个鲜花电商市场需求增加;同时,鲜花市场供给能力提升,鲜花生产数量和生产面积逐渐提升,品种也日益丰富。
然而鲜花绿植市场是一个非常传统的市场,一直以来这个市场就以集中在线下的方式进行,供需双方信息不通畅。中间的流转层级多,不仅造成花材的高耗损,且批发商的加价既压缩了上游花农的利润空间,并最终转移到消费者手中,由消费者承担。本系统采用B/S架构,基于Java进行搭建,采用互联网思维和技术,实现鲜花的线上销售新模式。

二、系统设计

2.1主要功能模块功能设计

1、鲜花展示模块:对鲜花进行分类管理,包括增删改查等功能。
2、鲜花文化模块:比如鲜花的使用文化、什么情况下使用什么花等。
3、销售管理模块:查看订单状态,可以进行交易或取消交易等功能;
4、库存管理模块:管理每种分类的总数量和每类中每一种鲜花的数量;
5、顾客管理模块:主要包括用户个人信息的管理,即登录注册、购买情况等;
6、查询与统计模块:对本系统的重要的数据进行数据统计并可视化(如:鲜花最受欢迎的鲜花等等)。

2.2数据库设计

结合业务需求和功能模块设计,需要对数据库进行规划设计。以减少数据冗余、避免数据维护异常、节约存储空间、高效访问为目的,按照一般的设计步骤,首先结合需求和功能模块,设计数据库的页表。

三、系统项目部分截图

3.1注册登陆功能

用户通过系统提供的注册、登陆功能,实现使用其它核心功能的目的。应用逻辑为用户点击进入系统,选择登陆类型是学生、老师或者管理员,管理员使用默认Admin账户而无需注册。
选择类型后,已注册用户输入账户和密码进行用户登陆;新用户点击“注册”按钮进行用户注册,注册后通过用户名、密码实现登陆。
注册时用户编写账户、密码等信息,并编辑密码并进行二次确认,如果用户名合法且两次密码一致,则注册成功,用户注册信息写入数据库进行保存。
登录模块,用户输入用户名和密码后,由系统调用数据库相关信息,与用户输入的信息进行比较,如果结果一致,则认定为合法用户,登录成功。该模块实现方式及实现效果如下:在这里插入图片描述

3.2鲜花信息展示

商家可以通过该功能编辑鲜花信息,发布鲜花照片、分类、名称、花语、价格等,用户可以通过该功能进行浏览,根据需要购买心仪的花束。具体实现效果如下图所示:在这里插入图片描述

3.3系统管理员功能

系统管理员拥有系统的最高权限,主要用于系统维护、管理,通过admin账户进行登陆。登陆后,系统在页面上有系统后台入口,进入后可以跳转至后台管理页面。
后台管理系统可以实现对个人中心、用户管理、花分类管理、鲜花信息管理、系统管理和订单管理等,可以对上述信息进行查看、修改、管理和删除。从而便于管理员全面掌握系统运行状态,并结合需要对系统进行维护。
该模块实现方式及实现效果如下:在这里插入图片描述

四、论文目录

1.概述 6
1.1鲜花的历史 6
1.2国内外研究现状 7
1.3题背景及研究意义 9
1.4论文结构 11
2.需求和可行性分析 13
2.1需求分析 13
2.2系统可行性分析 13
3.项目技术简介 15
3.1 Java和JavaScript 15
3.1.1 Java程序语言 15
3.1.2 JavaScript 16
3.2 B/S架构 17
3.3 Vue.js 和node.js 20
3.3.1 Vue.js 21
3.3.1 node.js 21
3.4 Mysql数据库 22
3.5 JSP 24
4.系统设计实现 27
4.1 设计原则 27
4.2 开发工具及环境 28
4.2.1IntelliJ IDEA安装 28
4.2.2配置JAVA运行环境 33
4.2.3 node.js 安装 37
4.2.4 vue.js安装 42
4.3 主要功能模块功能设计 43
4.4数据库设计 44
4.5系统实现及实现效果 46
4.5.1注册登陆功能 46
4.5.2鲜花信息展示 47
4.5.3系统公告展示 48
4.5.4购买及支付功能 48
4.5.5个人中心 49
4.5.6系统管理员功能 50
5.软件测试 51
5.1 基本概念 51
5.2 软件测试的基本方法 52
5.3软件测试的原则 52
5.4测试用例 53
5.5测试结果 55
6.总结与展望 55
6.1 研究总结 55
6.2 展望 55
参考文献 57
致 谢 58

五、部分核心代码

4.1 用户部分

package com.example.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.UserInfo;
import com.example.service.UserInfoService;
import com.example.exception.CustomException;
import com.example.common.ResultCode;
import com.example.vo.UserInfoVo;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.service.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping(value = "/userInfo")
public class UserInfoController {

    @Resource
    private UserInfoService userInfoService;

    @PostMapping
    public Result<UserInfo> add(@RequestBody UserInfoVo userInfo) {
        userInfoService.add(userInfo);
        return Result.success(userInfo);
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id) {
        userInfoService.delete(id);
        return Result.success();
    }

    @PutMapping
    public Result update(@RequestBody UserInfoVo userInfo) {
        userInfoService.update(userInfo);
        return Result.success();
    }

    @GetMapping("/{id}")
    public Result<UserInfo> detail(@PathVariable Long id) {
        UserInfo userInfo = userInfoService.findById(id);
        return Result.success(userInfo);
    }

    @GetMapping
    public Result<List<UserInfoVo>> all() {
        return Result.success(userInfoService.findAll());
    }

    @GetMapping("/page/{name}")
    public Result<PageInfo<UserInfoVo>> page(@PathVariable String name,
                                                @RequestParam(defaultValue = "1") Integer pageNum,
                                                @RequestParam(defaultValue = "5") Integer pageSize,
                                                HttpServletRequest request) {
        return Result.success(userInfoService.findPage(name, pageNum, pageSize, request));
    }

    @PostMapping("/register")
    public Result<UserInfo> register(@RequestBody UserInfo userInfo) {
        if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
            throw new CustomException(ResultCode.PARAM_ERROR);
        }
        return Result.success(userInfoService.add(userInfo));
    }

    /**
    * 批量通过excel添加信息
    * @param file excel文件
    * @throws IOException
    */
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {

        List<UserInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(UserInfo.class);
        if (!CollectionUtil.isEmpty(infoList)) {
            // 处理一下空数据
            List<UserInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getName())).collect(Collectors.toList());
            for (UserInfo info : resultList) {
                userInfoService.add(info);
            }
        }
        return Result.success();
    }

    @GetMapping("/getExcelModel")
    public void getExcelModel(HttpServletResponse response) throws IOException {
        // 1. 生成excel
        Map<String, Object> row = new LinkedHashMap<>();
		row.put("name", "张天志");
		row.put("password", "123456");
		row.put("nickName", "老张");
		row.put("sex", "男");
		row.put("age", 22);
		row.put("birthday", "TIME");
		row.put("phone", "18843232356");
		row.put("address", "上海市");
		row.put("email", "aa@163.com");
		row.put("cardId", "342425199001116372");
		row.put("level", 3);

        List<Map<String, Object>> list = CollUtil.newArrayList(row);

        // 2. 写excel
        ExcelWriter writer = ExcelUtil.getWriter(true);
        writer.write(list, true);

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=userInfoModel.xlsx");

        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        writer.close();
        IoUtil.close(System.out);
    }
}

4.2菜单部分

package com.example.controller;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.entity.Account;
import com.example.service.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RestController
public class MenuController {

	@Resource
	private AdminInfoService adminInfoService;
	@Resource
	private BusinessInfoService businessInfoService;
	@Resource
	private UserInfoService userInfoService;
	@Resource
	private AdvertiserInfoService advertiserInfoService;


    @GetMapping(value = "/getMenu", produces="application/json;charset=UTF-8")
    public String getMenu(HttpServletRequest request) {
        Account account = (Account) request.getSession().getAttribute("user");
        Integer level;
        if (account == null) {
            level = 1;
        } else {
            level = account.getLevel();
        }
        JSONObject obj = new JSONObject();
        obj.putOpt("code", 0);
        obj.putOpt("msg", "");
        JSONArray dataArray = new JSONArray();

        dataArray.add(getJsonObject("/", "系统首页", "layui-icon-home", "/"));

        JSONObject tableObj = new JSONObject();
        tableObj.putOpt("title", "信息管理");
        tableObj.putOpt("icon", "layui-icon-table");
		if (1 == level) {
			JSONArray array = new JSONArray();
			array.add(getJsonObject("adminInfo", "管理员信息", "layui-icon-table", "adminInfo"));
			array.add(getJsonObject("businessInfo", "卖家信息", "layui-icon-table", "businessInfo"));
			array.add(getJsonObject("userInfo", "用户信息", "layui-icon-table", "userInfo"));
			array.add(getJsonObject("messageInfo", "在线交流", "layui-icon-table", "messageInfo"));
			array.add(getJsonObject("advertiserInfo", "鲜花文化", "layui-icon-table", "advertiserInfo"));
			array.add(getJsonObject("typeInfo", "鲜花类别", "layui-icon-table", "typeInfo"));
			array.add(getJsonObject("goodsInfo", "鲜花详情", "layui-icon-table", "goodsInfo"));
			array.add(getJsonObject("orderInfo", "订单信息", "layui-icon-table", "orderInfo"));
			array.add(getJsonObject("commentInfo", "评价信息", "layui-icon-table", "commentInfo"));
			array.add(getJsonObject("accountAdminInfo", "个人信息", "layui-icon-user", "accountAdminInfo"));
			tableObj.putOpt("list", array);
		}

		if (2 == level) {
			JSONArray array = new JSONArray();
			array.add(getJsonObject("userInfo", "用户信息", "layui-icon-table", "userInfo"));
			array.add(getJsonObject("messageInfo", "在线交流", "layui-icon-table", "messageInfo"));
			array.add(getJsonObject("advertiserInfo", "鲜花文化", "layui-icon-table", "advertiserInfo"));
			array.add(getJsonObject("typeInfo", "鲜花类别", "layui-icon-table", "typeInfo"));
			array.add(getJsonObject("goodsInfo", "鲜花详情", "layui-icon-table", "goodsInfo"));
			array.add(getJsonObject("orderInfo", "订单信息", "layui-icon-table", "orderInfo"));
			array.add(getJsonObject("commentInfo", "评价信息", "layui-icon-table", "commentInfo"));
			array.add(getJsonObject("accountBusinessInfo", "个人信息", "layui-icon-user", "accountBusinessInfo"));
			tableObj.putOpt("list", array);
		}

		if (3 == level) {
			JSONArray array = new JSONArray();
			array.add(getJsonObject("messageInfo", "在线交流", "layui-icon-table", "messageInfo"));
			array.add(getJsonObject("advertiserInfo", "鲜花文化", "layui-icon-table", "advertiserInfo"));
			array.add(getJsonObject("typeInfo", "鲜花类别", "layui-icon-table", "typeInfo"));
			array.add(getJsonObject("goodsInfo", "鲜花详情", "layui-icon-table", "goodsInfo"));
			array.add(getJsonObject("orderInfo", "订单信息", "layui-icon-table", "orderInfo"));
			array.add(getJsonObject("commentInfo", "评价信息", "layui-icon-table", "commentInfo"));
			array.add(getJsonObject("accountUserInfo", "个人信息", "layui-icon-user", "accountUserInfo"));
			tableObj.putOpt("list", array);
		}


        dataArray.add(tableObj);

        dataArray.add(getJsonObject("updatePassword", "修改密码", "layui-icon-password", "updatePassword"));
        dataArray.add(getJsonObject("login", "退出登录", "layui-icon-logout", "login"));

        obj.putOpt("data", dataArray);
        return obj.toString();
    }

    private JSONObject getJsonObject(String name, String title, String icon, String jump) {
        JSONObject object = new JSONObject();
        object.putOpt("name", name);
        object.putOpt("title", title);
        object.putOpt("icon", icon);
        object.putOpt("jump", jump);
        return object;
    }

    @GetMapping(value = "/getTotal", produces="application/json;charset=UTF-8")
    public Result<Map<String, Integer>> getTotle() {
        Map<String, Integer> resultMap = new HashMap<>();
		resultMap.put("adminInfo", adminInfoService.findAll().size());
		resultMap.put("businessInfo", businessInfoService.findAll().size());
		resultMap.put("userInfo", userInfoService.findAll().size());
		resultMap.put("advertiserInfo", advertiserInfoService.findAll().size());

        return Result.success(resultMap);
    }
}


获取源码或论文

如需对应的源码,可以评论或者私信都可以。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值