基于JavaMaven+MySQL的网上B2C商城系统前后台设计

本文介绍了一款基于Window11和Centos7.6服务器的电商后台管理系统的设计与实现。系统采用IntelliJ IDEA、JDK16、Mysql8等软件环境开发,实现了用户注册、登录、商品管理、订单处理等功能。在需求分析中,详细阐述了功能性需求,如用户注册时的数据校验和邮箱激活流程,并通过Echarts展示了销售数据。系统经过测试,确保了其功能性和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 开发环境 1

  2. 毕设内容 1

  3. 需求分析 2

    4.1功能性需求分析 2

    4.2非功能性需求 6

    4.3设计约束 7

  4. 设计过程 7

    5.1概要设计 7

    5.2数据库设计 8

    5.3系统详细设计 17

    5.4、编码设计(具体实现流程) 20

  5. 调试过程 38

    6.1 背景 38

    6.2 测试目的 38

    6.3测试环境 38

    6.4 测试策略 39

    6.5 测试方法 39

    6.4 测试需求分析 39

    6.5 测试设计与测试结果 40

    6.6 测试报告 43

  6. 小结 43

  7. 参考文献 44

    附录: 44

  8. 开发环境

    硬件环境:

    Window11 电脑、Centos7.6 服务器

    软件环境:

    IntelliJ IDEA 2021.1.3 开发工具

    JDK 16 运行环境

    Mysql 8

    Navicat 15 for MySQL

    XShell、XFtp

    Redis5

    RDM

    Docker

    Node.js 16.3.1

    Maven

    Nginx 1.9.9

  9. 毕设内容

    完成商城的基本功能模块:

    登录模块、注册模块、首页商品列表显示模块、商品列表显示模块、 商品详情模块、购物车模块、收获地址模块、订单模块、个人中心模块。

  10. 需求分析

    4.1功能性需求分析

    网上商城主要分为两部分前台和后台,前台是面向用户的,其中包括用户在线注册、登录、购物、提交订单、付款等操作;本文转载自http://www.biyezuopin.vip/onews.asp?id=15217另一部分是商城的后台,是管理员用来管理商城的,这部分包括,商成数据展示、商品分类管理、商品信息管理、会员管理、订单管理。

    4.1.1用户注册基本需求

    1.用户需要输入用户名、邮箱、密码、以及重复密码

    2.用户提交后会对表单数据进行校验,用户名不可用重复,邮箱格式也必须正确且不允许重复,密码用户自定义,重复密码需要与密码栏书写一致,防止用户操作失误输入错误的密码。

    3.用户阅读并且勾选服务协议,才可注册。

    4.注册后,系统会向用户注册邮箱发送激活链接,用户需要去邮箱查看并且点击激活用户,才可以使用此账号进行购物操作。

<template>
  <div class="app-container home">
    <el-row :gutter="20">
      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-user-solid" style="color: #F56C6C;"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.memberCountNow }}</span>
              <p>今日登录会员</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>
      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-s-order" style="color: rgb(68,177,84)"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.orderCountNow }}</span>
              <p>今日付款订单</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>
      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-s-finance" style="color: rgb(59,212,175)"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.orderSumNow }}</span>
              <p>今日收益</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>
      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-shopping-bag-2" style="color: rgb(146,47,163)"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.categoryCount }}</span>
              <p>商品类别数量</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>

      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-s-shop" style="color: rgb(83,172,230)"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.sumTotalprice }}</span>
              <p>累计收益</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>
      <el-col :span="4">
        <el-card class="box-card">
          <el-row class="cart-content">
            <el-col :span="10">
              <i class="el-icon-s-custom" style="color: rgb(217,105,127)"></i>
            </el-col>
            <el-col :span="14">
              <span>{
<!-- -->{ homeData.topData.countMember }}</span>
              <p>累计会员数量</p>
            </el-col>
          </el-row>
        </el-card>
      </el-col>
    </el-row>

    <el-row :gutter="20" style="margin-top: 30px">
      <el-col :span="16">
        <div id="myChart" class="chart"></div>
      </el-col>
      <el-col :span="8">
        <div id="classChart" class="chart"></div>
      </el-col>

    </el-row>

  </div>
</template>

<script>
import {getTopData} from "@/api/shop/indexdata"

export default {
  name: "Index",
  data() {
    return {
      // 版本号
      version: "3.7.0",
      homeData: {
        topData: {},
        categoryCountChart: {},
        xData: [],
        yData: []
      }
    };

  },
  methods: {
    getTop() {
      getTopData().then(response => {
        this.homeData = response.data;
        console.log("----", response.data)
        this.drawLine()
      })
    },
    goTarget(href) {
      window.open(href, "_blank");
    },
    drawLine() {
      // 基于准备好的dom,初始化echarts实例
      var charDom = document.getElementById('myChart')
      var classChart = document.getElementById('classChart')
      let myClassChart = this.$echarts.init(classChart)
      let myChart = this.$echarts.init(charDom)

      var option;

      // 绘制图表
      option = {
        title: {
          text: '近一个月销售记录',
          subtext: '总的销售金额',
          left: 'center'
        },
        xAxis: {
          type: 'category',
          data: this.homeData.xData
        },
        yAxis: {
          type: 'value'
        },
        series: [
          {
            data: this.homeData.yData,
            type: 'line'
          }
        ],
        tooltip: {
          trigger: 'axis',
        }
      };
      option && myChart.setOption(option)
      var option1;
      option1 = {
        title: {
          text: '商品分类占比',
          subtext: '各类商品的数量',
          left: 'center'
        },
        tooltip: {
          trigger: 'item'
        },

        series: [
          {
            name: '类别名称',
            type: 'pie',
            radius: '50%',
            data: this.homeData.categoryCountChart,
            emphasis: {
              itemStyle: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
            }
          }
        ]
      };
      option1 && myClassChart.setOption(option1)

    }
  },
  created() {
    this.getTop()
  },
  mounted() {
    console.log("+++++", this.homeData)
    // this.drawLine()
  }
};
</script>

<style scoped lang="scss">
//.cart-content{
//margin-top: 20px;
//}
.chart {
  height: 450px;
  background-color: #fff;
  padding-top: 20px;
}

//.el-row{
//  margin-bottom: 30px;
//}
.box-card i {
  font-size: 60px;
}

.app-container {
  background-color: rgb(246, 246, 246);
}

.home {
  blockquote {
    padding: 10px 20px;
    margin: 0 0 20px;
    font-size: 17.5px;
    border-left: 5px solid #eee;
  }

  hr {
    margin-top: 20px;
    margin-bottom: 20px;
    border: 0;
    border-top: 1px solid #eee;
  }

  .col-item {
    margin-bottom: 20px;
  }

  ul {
    padding: 0;
    margin: 0;
  }

  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  color: #676a6c;
  overflow-x: hidden;

  ul {
    list-style-type: none;
  }

  h4 {
    margin-top: 0px;
  }

  h2 {
    margin-top: 10px;
    font-size: 26px;
    font-weight: 100;
  }

  p {
    margin-top: 10px;

    b {
      font-weight: 700;
    }
  }

  .update-log {
    ol {
      display: block;
      list-style-type: decimal;
      margin-block-start: 1em;
      margin-block-end: 1em;
      margin-inline-start: 0;
      margin-inline-end: 0;
      padding-inline-start: 40px;
    }
  }
}
</style>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值