一、需求分析

总体来说,就是一个在游泳馆使用的进销存管理软件,记录商品的入库、出库情况,以及统计销售的金额等~

整个系统有三类用户,系统管理员、公司管理员和公司销售员,系统管理员负责录入公司信息以及分配用户,每个公司的话,都有管理员和销售员之分,销售员只能看到销售界面,就负责出库,管理员负责库存管理、员工管理、销售统计等等~

还是有很多细节需要处理的,比如一个老板有多个游泳门店,每个门店的数据都需要隔离处理,这就需要有一个公司的概念~比如需要对员工进行管理,主要是因为销售的金额需要计入员工的提成~

这里我用mindmanager把需求梳理了一下:

二、界面设计

因为只有我一个人开发,而且我是完全没有前端经验的小白,所以没指望自己能把前端做的很好,界面设计尽量简洁,后面有时间再去慢慢优化即可~

界面设计没有用任何软件,就是和需求方在纸上简单绘制了一下,毕竟这是个帮忙的事情,能用就行~~

界面就不在这里贴了,别的帖子里面有

其中有个细节是,入库的操作只在“库存管理”界面里面完成,比如新录入了商品,同时录入数量,已有商品的新进入库操作,利用修改商品数量的方式来完成,但是后台数据库会记录每一次的数量变化,这样统计的时候,才能看到期初库存和期末库存~

三、数据库设计

根据需求设计了数据库表

这些表基本够用了,入库表主要是用于数据统计的~

四、技术路线的选择

1. 编程语言 Python

python-3.10.5-amd64.exe

链接:https://pan.baidu.com/s/1e6CrqfCKAhMDmU-vY13AmQ 
提取码:nu9t

2. 编程IDE VS

VSCodeUserSetup-x64-1.69.2.exe

链接:https://pan.baidu.com/s/1865J6QZQqpjpkadnthwp4A 
提取码:adm8

这两个官方都可以随便下载,我也放到了百度网盘,有需要的可以自行下载,下载之后一步一步安装即可,安装Python的时候注意最后一步,选择“同时配置好环境变量”,这样比较方便

3. 前端

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

这个组件支持界面拖拽式编写,就是可视化的GUI,这个简直太又好了,小白轻松上手,需要安装一个软件wxFormBuilder

链接:https://pan.baidu.com/s/1L6c9rNxj8Dz0XTWtppXIrw 
提取码:pgz9

安装过程非常简单,不再赘述

打开之后的界面如下:

使用非常容易上手,先新建一个project,再创建一个Form,大的架子就搭出来了

frame里面放上layout,layout根据需要进行选择,横竖可以在右侧的参数区域进行设置

接下来非常关键,在layout里面先放panel,再放具体的组件,每个panel可以设计不同的背景色,这样设计出来的界面比较有层次~比如我的登录界面全部展开如下所示:

设计好界面之后,点击Python标签,得到代码:

# -*- coding: utf-8 -*-###########################################################################
## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################import wx
import wx.xrc###########################################################################
## Class loginFrame
###########################################################################class loginFrame ( wx.Frame ):def __init__( self, parent ):wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"MGLite系统登陆", pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INACTIVEBORDER ) )bSizer1 = wx.BoxSizer( wx.VERTICAL )self.loginPanel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )self.loginPanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INACTIVEBORDER ) )bSizer12 = wx.BoxSizer( wx.VERTICAL )self.ddd1 = wx.StaticText( self.loginPanel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )self.ddd1.Wrap( -1 )self.ddd1.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, wx.EmptyString ) )bSizer12.Add( self.ddd1, 0, wx.ALL, 5 )self.ddd = wx.StaticText( self.loginPanel, wx.ID_ANY, u"MGLite进销存管理系统", wx.DefaultPosition, wx.DefaultSize, 0 )self.ddd.Wrap( -1 )self.ddd.SetFont( wx.Font( 20, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, wx.EmptyString ) )bSizer12.Add( self.ddd, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )bSizer411 = wx.BoxSizer( wx.HORIZONTAL )self.usernamelabel11 = wx.StaticText( self.loginPanel, wx.ID_ANY, u"角色      ", wx.DefaultPosition, wx.DefaultSize, 0 )self.usernamelabel11.Wrap( -1 )bSizer411.Add( self.usernamelabel11, 0, wx.ALL, 5 )m_choice31Choices = []self.m_choice31 = wx.Choice( self.loginPanel, wx.ID_ANY, wx.DefaultPosition, wx.Size( 150,-1 ), m_choice31Choices, 0 )self.m_choice31.SetSelection( 0 )bSizer411.Add( self.m_choice31, 0, wx.ALL, 5 )bSizer12.Add( bSizer411, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )bSizer4 = wx.BoxSizer( wx.HORIZONTAL )self.usernamelabel = wx.StaticText( self.loginPanel, wx.ID_ANY, u"用户名    ", wx.DefaultPosition, wx.DefaultSize, 0 )self.usernamelabel.Wrap( -1 )bSizer4.Add( self.usernamelabel, 0, wx.ALL, 5 )self.usernametext = wx.TextCtrl( self.loginPanel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 150,-1 ), 0 )bSizer4.Add( self.usernametext, 0, wx.ALL, 5 )bSizer12.Add( bSizer4, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )bSizer5 = wx.BoxSizer( wx.HORIZONTAL )self.passwordlabel = wx.StaticText( self.loginPanel, wx.ID_ANY, u"密码       ", wx.DefaultPosition, wx.DefaultSize, 0 )self.passwordlabel.Wrap( -1 )bSizer5.Add( self.passwordlabel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )self.passwordtext = wx.TextCtrl( self.loginPanel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 150,-1 ), wx.TE_PASSWORD|wx.TE_PROCESS_ENTER )bSizer5.Add( self.passwordtext, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )bSizer12.Add( bSizer5, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )bSizer41 = wx.BoxSizer( wx.HORIZONTAL )self.usernamelabel1 = wx.StaticText( self.loginPanel, wx.ID_ANY, u"公司      ", wx.DefaultPosition, wx.DefaultSize, 0 )self.usernamelabel1.Wrap( -1 )bSizer41.Add( self.usernamelabel1, 0, wx.ALL, 5 )m_choice3Choices = []self.m_choice3 = wx.Choice( self.loginPanel, wx.ID_ANY, wx.DefaultPosition, wx.Size( 150,-1 ), m_choice3Choices, 0 )self.m_choice3.SetSelection( 0 )bSizer41.Add( self.m_choice3, 0, wx.ALL, 5 )bSizer12.Add( bSizer41, 0, wx.ALIGN_CENTER_HORIZONTAL, 5 )self.login = wx.Button( self.loginPanel, wx.ID_ANY, u"登  录", wx.DefaultPosition, wx.DefaultSize, 0 )self.login.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHTTEXT ) )self.login.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT ) )bSizer12.Add( self.login, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )self.loginPanel.SetSizer( bSizer12 )self.loginPanel.Layout()bSizer12.Fit( self.loginPanel )bSizer1.Add( self.loginPanel, 1, wx.EXPAND |wx.ALL, 5 )self.SetSizer( bSizer1 )self.Layout()self.Centre( wx.BOTH )# Connect Eventsself.passwordtext.Bind( wx.EVT_TEXT_ENTER, self.loginFunction )self.login.Bind( wx.EVT_BUTTON, self.loginFunction )def __del__( self ):pass# Virtual event handlers, override them in your derived classdef loginFunction( self, event ):event.Skip()

在vscode中,新建一个py文件,并把代码粘贴进去,注意之后这段代码对你来说就是一个黑盒子,除非报错,否则每次修改就从GUI里面改,改完之后再贴回来

再新建一个py文件,调用这个界面

#!/usr/bin/python
# -*- coding: UTF-8 -*-from asyncio.windows_events import NULL
from calendar import setfirstweekday
import wximport loginFrame
import pymysqlclass CalcFrame(loginFrame.loginFrame):def __init__(self,parent, id=-1):loginFrame.loginFrame.__init__(self,parent)app = wx.App(False)frame = CalcFrame(None)frame.Show(True)start the applications
app.MainLoop()

运行就可以了!

4. 数据库 MySQL

建议安装的是 mysql-installer-community-5.7.39.0.msi

链接:https://pan.baidu.com/s/14io2k-OVYWHrpI08q-fD5w 
提取码:gwzo

安装过程挺麻烦的,会有各种依赖,检测完依赖之后,点击全部安装就行了

MySQL对应的GUI操作软件,很多人会选择Navicat,但是注册比较难,你懂的。。。所以我选了相对友好的SQLYog,注册码百度一大堆

链接:https://pan.baidu.com/s/1cU5g4N1k5rxGqW6_4iLevw 
提取码:we9c

这基本上就是全部的技术路线了~~

1.用Python写了一个进销存管理的软件~需求分析界面设计数据库设计技术路线选择~相关推荐

  1. 用Python开发了一个进销存管理的小软件

    研究生毕业之后,就进入国企工作,工作内容偏产品和售前,几乎没写过代码了,有个朋友是开游泳馆的,也会有少量商品的售卖,问我能不能给她开发一个小软件,记录商品的入库出库,统计下金额,恰好工作中今年也用到了 ...

  2. 计算机毕业设计Java某日杂商店进销存管理系统设计(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java某日杂商店进销存管理系统设计(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java某日杂商店进销存管理系统设计(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

  3. 基于JAVA某日杂商店进销存管理系统设计计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA某日杂商店进销存管理系统设计计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA某日杂商店进销存管理系统设计计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...

  4. 企业进销存进货销售仓储管理系统-JAVA【数据库设计、源码、开题报告】

    第一章 绪论 1.1  选题背景 近几年来,传统商业与电商似乎是水火不容,大有不是你死便是我活的劲头.一直以来舆论都是一边倒的电商将迅速取代传统零售的论调,然而几年过去,电商的发展确实值得侧目,但传统 ...

  5. java web 医疗器械_基于jsp的医疗器械进销存管理-JavaEE实现医疗器械进销存管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的医疗器械进销存管理, 该项目可用各类java课程设计大作业中, 医疗器械进销存管理的系统架构分为前后台两部分, 最 ...

  6. 开源依旧:再次分享一个进销存系统

    开篇 我之前发过一篇博文<两天完成一个小型工程报价系统(三层架构)>,不少朋友向我要源码学习,后来久而久之忘记回复了.今天我再分享一个进销存系统,只为学习,没有复杂的框架和设计模式,有的是 ...

  7. 基于JAVA对象流写的图书进销存系统管理

    基于JAVA对象流写的图书进销存系统管理 1.用户登录 用户只需一个,即admin管理员,用户密码为123456,用户登录信息保存在属性文件user. properties中,用户登录时输入用户名和密 ...

  8. 分享一个进销存项目(多层架构)

    分享一个进销存项目(多层架构) 花了点时间完成了一个进销存的项目,个人觉得对逻辑分析,架构思想都有一定的体会,故拿出来和大家分享下,首先介绍下项目的功能吧,主要功能有采购管理,销售管理,库存管理,人员 ...

  9. 教你制作一个简单的进销存管理软件,值得收藏!

    首先要制作进销存软件,要具体了解进销存到底是什么含义,这三个字分别代表什么流程,在整个进销存管理中的组成.再根据不同的流程制作进销存软件相对应的部分-- 01进销存的定义 "进"- ...

最新文章

  1. 【java】Maven工程引入各种jar包的功能
  2. efficientdet
  3. 使用JAX-RS创建RESTful Web Service
  4. 基于Spatial CNN的车道线检测和交通场景理解
  5. redis 源码 ziplist.c 压缩list的实现
  6. aria2c rpc php,aria2c 的基本配置,附带傻瓜式源码
  7. [渝粤教育] 南开大学 思辨式英文写作 参考 资料
  8. scala集合中添加元素_如何在Scala中将元素添加到列表中?
  9. Oreo授权系统V1.0.6公益开源版本源码
  10. bundle + forever部署Meteor App
  11. Day.js 是一个仅 2kb 大小的轻量级 JavaScript 时间日期处理库,和 Moment.js 的 API 设计保持完全一样,dayjs...
  12. Fermi架构白皮书_中文详细版.pdf
  13. Reactor | Epoll 模型理解
  14. 192.168.8.1手机登陆_192.168.8.1手机登陆设置教程
  15. python贴吧签到-百度贴吧签到脚本
  16. python程序设计报告-20193102 实验一 《python程序设计》实验报告
  17. 计算机类顶级会议排名+投稿经验
  18. LayaBox---Animation---时间轴动画
  19. 2021年中国太阳能热发电行业发展现状、发展机遇及发展方向分析[图]
  20. IIS站点部署后频繁弹出“Visual Studio实时调试器”问题

热门文章

  1. OleDbCommand类
  2. c语言将英文逗号转成中文逗号,Word中怎样把文中的英文逗号改成中文逗号?
  3. Word文件怎么修改段落背影颜色
  4. Linux stunnel客户端配置,Stunnel客户端安装和配置
  5. c#发送微信模板消息
  6. mysql修改字段卡住问题总结
  7. 【深度学习】——过拟合的处理方法
  8. CentOS下修改MySQL密码
  9. (转)微信小程序实例源码大全
  10. php操作mysql类库_PHP数据库操作之基于Mysqli的数据库操作类库_PHP