毕业设计:基于python商品销售数据分析可视化系统 营销数据 商品数据 django框架(包含文档+源码+部署教程)
毕业设计:基于python商品销售数据分析可视化系统营销数据 商品数据 django框架(包含文档+源码+部署教程)
[毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。
1、摘 要
在目前社会,有很大一部分的行业开始实现大屏数据可视化,甚至将其作为公司宣传亮点而发展下去,大屏数据可视化是以大屏为主要展示载体的数据可视化设计。超市采用这种系统作为展示不仅可以帮助超市管理者管理库存,了解营收,更方便工作人员合理安排补货等相关工作。因此大屏的超市营收数据可视化系统对一个超市来说十分重要。
通过可视化展示超市的销售额、销售量、客流量等数据,及时了解超市的营收情况,发现潜在的经营风险,及时调整经营策略,保证超市的稳健发展;还可以分析销售数据,挖掘市场潜力,通过数据可视化的方式对销售数据进行深度挖掘和分析,发现超市的热销商品、消费者的购买偏好和消费习惯等信息,进而制定更加精准的市场营销策略,开拓更多的市场空间,提高超市的市场竞争力;同时还可以辅助决策,提高经营效率,通过可视化展示超市的库存、进货、销售等信息,帮助超市管理者更好地掌握商品的销售状况和库存情况,优化进货计划和销售策略,提高超市的经营效率和利润率;最后还可以提高员工管理效率,通过数据可视化的方式展示员工的工作绩效、考核成绩等信息,帮助管理者更好地了解员工的工作情况,发现员工的优缺点,进而制定更加科学的培训计划和考核标准,提高员工的工作效率和工作质量,达到最初设计要求。
关键词:超市营收数据管理;管理系统;数据库
系统总共分为四大模块,分别为可视化模块、用户模块、商品数据管理模块、公告模块,系统功能结构图
2、系统设计
系统可视化界面如下图所示,界面以柱状图、折线图、饼图等形式展示了超市营收数据,并以表格形式展现了订单相关信息,管理员将数据保存到对应数据库后,则通过Flask框架构建数据服务接口,通过PyMysql查询并格式化数据,将数据进行分析与处理,最终传递给前端,前端利用Echarts技术进行可视化渲染,最终将最直观、最科学的数据分析内容呈现给用户。
用户验证界面,此界面是输入错误信息登录显示的情况;当输入正确的账号密码信息后进入的用户管理界面如下图,此时便可以对用户进行管理,可进行新增、修改、删除、查看等操作。
商品管理功能包含了商品数据的新增、删除、修改、查看功能。商品数据管理界面如下。商品类型管理功能包含了类型的新增、修改、删除、查看功能。商品类型管理界面如商品订单管理功能包含订单的新增、删除、修改、查看功能。订单数据管理界面如示。这些操作是建立在登录账号的基础上,首先需要登录进入由Layui构建的后台管理页面,然后点击菜单,进入数据管理页面,页面会通过ajax异步请求的方式加载Flask构建的后端数据,最终以列表的形式展示。在列表页面,可以输入信息进行搜索,也可以操作列表中的任意一条数据进行删除或修改。
当用户登录进入可视化系统后,普通用户可以直接进入发布公告的也米娜,管理员则需要点击进入系统模块,页面同样也会通过ajax异步请求的方式加载Flask构建的后端数据,最终以弹窗的形式展示系统最新公告。在公告的列表页面,可以输入信息进行搜索,也可以操作列表中的任意一条数据进行删除或修改。公告管理界面如下,当进入公告界面有新公告发布时界面如
3、部分代码
import datetime
from flask import Flask as _Flask, flash, redirect
from flask import request, session
from flask import render_template
from flask.json import JSONEncoder as _JSONEncoder, jsonify
import decimal
import os
from service import user_service, notice_service, category_service, order_service, goods_service, data_service
from utils.JsonUtils import read_json
from utils.Result import Result
base = os.path.dirname(__file__)
directory_path = os.path.dirname(__file__)
json_path = directory_path + '/static/api/'
class JSONEncoder(_JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
return float(o)
if isinstance(o, datetime.datetime):
return o.strftime("%Y-%m-%d %H:%M:%S")
if isinstance(o, datetime.date):
return o.strftime("%Y-%m-%d")
super(_JSONEncoder, self).default(o)
class Flask(_Flask):
json_encoder = JSONEncoder
import os
app = Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
app.config['SECRET_KEY'] = os.urandom(24)
# ----------------------------------------------页面加载模块开始----------------------------------------------
# 加载系统json文件
@app.route('/api/<string:path>/')
def api_json(path):
if path == 'init.json' and session.get('user') and session.get('user')['type'] == 1:
path = 'custom_init.json'
return read_json(json_path + path)
# 加载page下的静态页面
@app.route('/page/<string:path>')
def api_path(path):
return render_template("page/" + path)
# 系统默认路径后台跳转
@app.route('/admin')
def admin_page():
if session.get('user') and session.get('user')['id'] > 0:
return render_template("index.html")
else:
return redirect("/login")
# 系统可视化数据请求接口
@app.route('/')
def main_page():
category_sales_volume = data_service.get_category_sales_volume()
category_goods_name = data_service.get_category_goods_name()
sale, gain, order_num = data_service.get_total()
sales_num_list = data_service.get_category_sum_sales()
category_selling_list = data_service.get_category_selling()
times_selling = data_service.get_times_selling()
months_selling = data_service.get_months_selling()
table_list = data_service.get_table_list()
return render_template("main.html", category_sales_volume=category_sales_volume,
category_goods_name=category_goods_name, sale=sale, gain=gain, order_num=order_num,
sales_num_list=sales_num_list, category_selling_list=category_selling_list,
times_selling=times_selling, months_selling=months_selling, table_list=table_list)
# 系统登录路径
@app.route('/login')
def login_page():
return render_template("page/login.html")
# 系统退出登录路径
@app.route('/logout')
def logout_page():
session.clear()
return redirect("/login")
# 系统注册用户
@app.route('/register', methods=['get'])
def register_page():
return render_template("page/register.html")
# ----------------------------------------------页面加载模块结束----------------------------------------------
# ----------------------------------------------用户相关模块开始----------------------------------------------
# 用户注册
@app.route('/register', methods=['post'])
def register_user():
form = request.form.to_dict() # 获取值
result = user_service.insert_user(form)
return result.get()
# 用户登录
@app.route('/login', methods=['post'])
def login_user():
form = request.form.to_dict() # 获取值
result = user_service.select_user_by_account_password(form)
session['user'] = result.data
return result.get()
# 用户数据分页
@app.route('/page/user/add', methods=['get'])
def page_user_add():
return render_template("page/user/add.html")
# 用户修改密码
@app.route('/user/reset/password', methods=['post'])
def reset_password_user():
form = request.form.to_dict() # 获取值
result = user_service.reset_password(form['old_password'], form['new_password'], form['again_password'])
return result.get()
@app.route('/add/user', methods=['post'])
def add_user():
form = request.form.to_dict()
result = user_service.insert_user(form)
return result.get()
# 用户编辑页面
@app.route('/page/user/edit', methods=['get'])
def page_user_edit():
id = request.args.get('id')
user = user_service.get_user(id)
return render_template("page/user/edit.html", user=user)
# 编辑用户接口
@app.route('/edit/user', methods=['post'])
def edit_user():
form = request.form.to_dict()
result = user_service.edit_user(form)
return result.get()
# 单个删除用户接口
@app.route('/del/user/<int:id>', methods=['post'])
def del_user(id):
result = user_service.del_user(id)
return result.get()
# 批量删除用户接口
@app.route('/del/user', methods=['post'])
def del_user_list():
ids = request.args.get('ids')
result = user_service.del_user_list(ids)
return result.get()
# 用户数据分页
@app.route('/list/user', methods=['get'])
def user_list():
page = request.args.get('page')
limit = request.args.get('limit')
where = request.args.get('searchParams')
result = user_service.select_user_list(page, limit, where)
return result.get()
# ----------------------------------------------用户相关模块结束----------------------------------------------
# ----------------------------------------------公告相关模块开始----------------------------------------------
# 公告添加页面
@app.route('/page/notice/add', methods=['get'])
def page_notice_add():
return render_template("page/notice/add.html")
@app.route('/add/notice', methods=['post'])
def add_notice():
form = request.form.to_dict()
result = notice_service.insert_notice(form)
return result.get()
# 数据公告编辑页面
@app.route('/page/notice/edit', methods=['get'])
def page_notice_edit():
id = request.args.get('id')
notice = notice_service.get_notice(id)
return render_template("page/notice/edit.html", notice=notice)
# 编辑公告接口
@app.route('/edit/notice', methods=['post'])
def edit_notice():
form = request.form.to_dict()
result = notice_service.edit_notice(form)
return result.get()
# 单个删除公告接口
@app.route('/del/notice/<int:id>', methods=['post'])
def del_notice(id):
result = notice_service.del_notice(id)
return result.get()
# 批量删除公告接口
@app.route('/del/notice', methods=['post'])
def del_notice_list():
ids = request.args.get('ids')
result = notice_service.del_notice_list(ids)
return result.get()
# 公告数据分页
@app.route('/list/notice', methods=['get'])
def notice_list():
page = request.args.get('page')
limit = request.args.get('limit')
where = request.args.get('searchParams')
result = notice_service.select_notice_list(page, limit, where)
return result.get()
# 公告数据最新获取
@app.route('/get/notice/new', methods=['get'])
def get_new_notice():
result = notice_service.get_notice_by_new()
return result.get()
# ----------------------------------------------公告相关模块结束----------------------------------------------
# ----------------------------------------------订单相关模块开始----------------------------------------------
# 订单添加页面
@app.route('/page/order/add', methods=['get'])
def page_order_add():
goods = goods_service.get_goods_list()
categorys = category_service.get_category_list()
return render_template("page/order/add.html", goods=goods, categorys=categorys)
# 订单添加接口
@app.route('/add/order', methods=['post'])
def add_order():
form = request.form.to_dict()
result = order_service.insert_order(form)
return result.get()
# 订单编辑页面
@app.route('/page/order/edit', methods=['get'])
def page_order_edit():
id = request.args.get('id')
order = order_service.get_order(id)
goods = goods_service.get_goods_list()
categorys = category_service.get_category_list()
return render_template("page/order/edit.html", order=order, goods=goods, categorys=categorys)
# 编辑订单接口
@app.route('/edit/order', methods=['post'])
def edit_order():
form = request.form.to_dict()
result = order_service.edit_order(form)
return result.get()
# 单个删除订单接口
@app.route('/del/order/<int:id>', methods=['post'])
def del_order(id):
result = order_service.del_order(id)
return result.get()
# 批量删除订单接口
@app.route('/del/order', methods=['post'])
def del_order_list():
ids = request.args.get('ids')
result = order_service.del_order_list(ids)
return result.get()
# 订单数据分页
@app.route('/list/order', methods=['get'])
def shop_list():
page = request.args.get('page')
limit = request.args.get('limit')
where = request.args.get('searchParams')
result = order_service.select_order_list(page, limit, where)
return result.get()
# ----------------------------------------------订单相关模块结束----------------------------------------------
# ----------------------------------------------商品相关模块开始----------------------------------------------
# 商品添加页面
@app.route('/page/goods/add', methods=['get'])
def page_goods_add():
return render_template("page/goods/add.html")
# 商品添加接口
@app.route('/add/goods', methods=['post'])
def add_goods():
form = request.form.to_dict()
result = goods_service.insert_goods(form)
return result.get()
# 商品编辑页面
@app.route('/page/goods/edit', methods=['get'])
def page_goods_edit():
id = request.args.get('id')
goods = goods_service.get_goods(id)
return render_template("page/goods/edit.html", goods=goods)
# 编辑商品接口
@app.route('/edit/goods', methods=['post'])
def edit_goods():
form = request.form.to_dict()
result = goods_service.edit_goods(form)
return result.get()
# 单个删除商品接口
@app.route('/del/goods/<int:id>', methods=['post'])
def del_goods(id):
result = goods_service.del_goods(id)
return result.get()
# 批量删除商品接口
@app.route('/del/goods', methods=['post'])
def del_goods_list():
ids = request.args.get('ids')
result = goods_service.del_goods_list(ids)
return result.get()
# 商品数据分页
@app.route('/list/goods', methods=['get'])
def goods_list():
page = request.args.get('page')
limit = request.args.get('limit')
where = request.args.get('searchParams')
result = goods_service.select_goods_list(page, limit, where)
return result.get()
# ----------------------------------------------商品相关模块结束----------------------------------------------
# ----------------------------------------------商品类别相关模块开始----------------------------------------------
# 商品类别添加页面
@app.route('/page/category/add', methods=['get'])
def page_category_add():
return render_template("page/category/add.html")
# 商品类别添加接口
@app.route('/add/category', methods=['post'])
def add_category():
form = request.form.to_dict()
result = category_service.insert_category(form)
return result.get()
# 商品类别编辑页面
@app.route('/page/category/edit', methods=['get'])
def page_category_edit():
id = request.args.get('id')
category = category_service.get_category(id)
return render_template("page/category/edit.html", category=category)
# 编辑商品类别接口
@app.route('/edit/category', methods=['post'])
def edit_category():
form = request.form.to_dict()
result = category_service.edit_category(form)
return result.get()
# 单个删除商品类别接口
@app.route('/del/category/<int:id>', methods=['post'])
def del_category(id):
result = category_service.del_category(id)
return result.get()
# 批量删除商品类别接口
@app.route('/del/category', methods=['post'])
def del_category_list():
ids = request.args.get('ids')
result = category_service.del_category_list(ids)
return result.get()
# 商品类别数据分页
@app.route('/list/category', methods=['get'])
def category_list():
page = request.args.get('page')
limit = request.args.get('limit')
where = request.args.get('searchParams')
result = category_service.select_category_list(page, limit, where)
return result.get()
# ----------------------------------------------商品类别相关模块结束----------------------------------------------
# ----------------------------------------------首页相关模块开始----------------------------------------------
# ----------------------------------------------首页相关模块结束----------------------------------------------
if __name__ == '__main__':
# 端口号设置
app.run(host="127.0.0.1", port=9000)
源码获取:
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看主页【专栏名称】或者【用户名】或者顶部的【选题链接】就可以找到我获取项目源码学习啦~🍅
大家点赞、收藏、关注、评论啦 !
更多推荐
所有评论(0)