数据库课程设计—超市零售信息管理系统(Python实现)

数据库课程设计—超市零售信息管理系统(Python实现)数据库课程设计超市零售信息管理系统 Python 实现 SQLServer 文章目录数据库课程设计前言 一 设计目的 二 设计内容一 需求分析 一 设计概念 二 功能说明 1 进货管理 2 销售管理 3 库存管理 4 人员管理 三 功能模块图二 概念结构设计三 逻辑结构设计四 代码实现 一 实现 Python 连接 SQLSevere 数据库 二 创建数据库表 三 插入数据 四 创建界面按钮 并实现数据库的 增删改查 五 总结前言 一 设计目的学生根据所学的数据库系统原理与程序设计的知识 能够针对一个

数据库课程设计

超市零售信息管理系统(Python实现)SQLServer


前言

(一)设计目的

学生根据所学的数据库系统原理与程序设计的知识,能够针对一个数据库管理信息系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库管理信息系统的目的。

(二)设计内容

题目可根据自己熟悉的事物填充和适当变更,例如:校园招聘系统、学生科技成果统计系统等,但不建议图书管理信息系统、学生信息管理系统、酒店管理系统、药品进销存系统,也可以是基于Web的网站或基于移动平台的手机APP、游戏软件等,鼓励创新!要求实现数据的录入、删除、修改、查询等基本功能,提供实体完整性、参照完整性、用户定义完整性等检查,可根据自己对不同事物主要的管理需求进行扩充,例如增加登录、报表等相应功能。

一、需求分析

(一)设计概念

该超市零售管理信息系统旨在为超市的会员管理工作提供一个比较系统的零售管理平台,它帮助超市存储及管理进货、销售、库存以及人员信息,是一套管理工具、极大提高超市管理的效率。很大程度上帮助了超市管理者对超市的掌握与管理。

(二)功能说明

1. 进货管理

根据销售情况及库存情况,自动制定进货计划(亦可手工制定修改),可以避免盲目进货造成商品积压。 按计划单有选择性地进行自动入库登记。 综合查询打印计划进货与入库记录及金额。

2. 销售管理

商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结帐情况等。 按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。

3. 库存管理

综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、缺货等。软件为您预警,避免库存商品积压损失和缺货。

4.人员管理

员工、会员、供货商、厂商等基本信息登记管理。 员工操作权限管理。 客户销售权限管理。

(三)功能模块图

在这里插入图片描述

二、概念结构设计

在这里插入图片描述

三、逻辑结构设计

1.员工(员工编号,员工姓名,员工性别,员工年龄,工龄,电话,身份证号,所属部门,工资); 2.商品(商品编号,商品名称,商品类别,商品单价,商品成本,供货商); 3.会员(会员卡卡号,会员姓名,电话,注册日期,累计金额,当前余额); 4.供货商(供货商编号,供货商名称,供货商电话,供货商地址); 5.仓库(仓库编号,仓库名称,仓库地址); 6.退货信息(交易流水号,商品编号,退货数量,退款金额,退货日期); 7.销售(员工编号,商品编号,销售日期,销售数量); 8.购买(会员卡卡号,商品编号,购买日期,购买数量); 9.供货(供货商编号,商品编号,供货日期,供货数量); 10.库存(仓库编号,商品编号,库存量); 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述







四、代码实现

(一)实现Python 连接 SQL Severe 数据库

import pymssql #引入pymssql模块 def conn(): connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") if connect: print("连接成功!") return connect if __name__ == '__main__': conn = conn() 
conn = pymssql.connect(host='host',database='db_name',user='user',password='pwd',charset='utf8') #host为数据库的IP地址,,通过自己电脑进行查询 #database为数据库的名称 #charset表示在此程序中,字符编码采用“utf8编码”模式 

(二)创建数据库表

数据库中表的创建可以直接在SQLServer中手动建表,也可以通过Python程序进行建表,其语法规则和SQL一样,代码如下:

import pymssql connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") # 建立连接 if connect: print("连接成功!") cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行 cursor.execute("create table Staff(Snum varchar(10) primary key,Sname varchar(20) not null,Ssex varchar(5) check(Ssex in('男','女')),Sage int not null check(Sage>=18),Sstand int not null check(Sstand>=0),Sphone varchar(20) not null,Sid varchar(25) not null,Spart varchar(10) not null,Ssalary money check(Ssalary>=0))") cursor.execute("create table Vendor(Vnum varchar(10) primary key,Vname varchar(10) not null,Vphone varchar(20) not null,Vpalce varchar(10) not null)") cursor.execute("create table Goods(Gnum varchar(10) primary key,Gname varchar(10) not null,Gtype varchar(10) not null,Gprice money check(Gprice>=0),Gbid money check(Gbid>=0),Gstock int check(Gstock>=0),Galarm int check(Galarm>=0), Gplan int check(Gplan>=0),Vnum varchar(10) not null,foreign key(Vnum) references Vendor(Vnum))") cursor.execute("create table Menber(Mnum varchar(10) primary key,Mname varchar(10) not null,Mphone varchar(20) not null,Mdate datetime,Mtotal money check(Mtotal>=0),Mbalance money check(Mbalance>=0),Mcip varchar(25) not null)") cursor.execute("create table Ware(Wnum varchar(10) primary key,Wname varchar(10) not null,Wplace varchar(10) not null)") cursor.execute("create table Trade(Tnum varchar(10) primary key,Tdate datetime not null,Snum varchar(10) not null,Gnum varchar(10) not null,Tamount int check(Tamount>=0),Tmoney money check(Tmoney>=0),Mnum varchar(10) not null,foreign key(Snum) references Staff(Snum),foreign key(Gnum) references Goods(Gnum),foreign key(Mnum) references Menber(Mnum))") cursor.execute("create table Infor(Tnum varchar(10) not null,Gnum varchar(10) not null,Iamount int check(Iamount>=0),Imoney money check(Imoney>=0),Idate datetime not null,foreign key(Tnum) references Trade(Tnum),foreign key(Gnum) references Goods(Gnum))") cursor.execute("create table Entry(Enum varchar(10) primary key,Gnum varchar(10) not null,Eamount int check(Eamount>=0),Emoney money check(Emoney>=0),Vnum varchar(10) not null,Edate datetime not null,Snum varchar(10) not null,foreign key(Snum) references Staff(Snum),foreign key(Gnum) references Goods(Gnum),foreign key(Vnum) references Vendor(Vnum))") cursor.execute("create table Exits(Xnum varchar(10) primary key,Gnum varchar(10) not null,Xamount int check(Xamount>=0),Xmoney money check(Xmoney>=0),Xdate datetime not null,Snum varchar(10) not null,foreign key(Snum) references Staff(Snum),foreign key(Gnum) references Goods(Gnum))") connect.commit() #提交 cursor.close() # 关闭游标 connect.close() # 关闭连接 

(三)插入数据

在Goods表中批量插入数据:

import pymssql connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") if connect: print("连接成功!") cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行 sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values ('','薯片','零食',8,5,500,100,600,'')" sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values ('','可乐','饮料',4,2,1000,200,1500,'')" sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values ('','猪肉','肉类',32,20,400,50,500,'')" cursor.execute(sql) connect.commit() # 提交 cursor.close() connect.close() 

在Vendor表中批量插入数据:

import pymssql connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") if connect: print("连接成功!") cursor = connect.cursor() # 创建一个游标对象,python里的sql语句都要通过cursor来执行 sql = "insert into Vendor(Vnum,Vname,Vphone,Vpalce) values ('','number1','','浙江')" sql = "insert into Vendor(Vnum,Vname,Vphone,Vpalce) values ('','number2','','湖北')" sql = "insert into Vendor(Vnum,Vname,Vphone,Vpalce) values ('','number3','','广州')" cursor.execute(sql) connect.commit() # 提交 cursor.close() connect.close() 

(四)创建界面按钮,并实现数据库的“增删改查”

import pymssql import tkinter as tk import tkinter.messagebox #数据库添加操作 def add(): # 连接数据库 connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") # 创建光标 cursor = connect.cursor() # 编写SQL语句 sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values('%s','%s','%s','%s','%s','%s','%s','%s',%s)" % (v1.get(), v2.get(), v3.get(), v4.get(), v5.get(), v6.get(), v7.get(), v8.get(), v9.get()) # 执行SQL语句,并且输出完成提示信息,否则回滚 try: cursor.execute(sql) connect.commit() tkinter.messagebox.showinfo("提示", "数据添加成功") except: connect.rollback() # 关闭数据库连接,防止泄露 connect.close() #数据库删除操作 def delete(): connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") cursor=connect.cursor() sql = "delete from Goods where Gnum='%s'" % (v10.get()) try: cursor.execute(sql) connect.commit() tkinter.messagebox.showinfo("提示","数据删除成功") except: connect.rollback() connect.close() #数据库更新操作 def update(): connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") cursor = connect.cursor() sql="update Goods set Gstock='%s' where Gnum='%s'"%(v11.get(),v12.get()) try: cursor.execute(sql) connect.commit() tkinter.messagebox.showinfo("提示","数据更新成功!") except: connect.rollback() connect.close() #数据库模糊条件查询 def select(): connect = pymssql.connect(host = "127.0.0.1:1433",database = "Manager",charset="utf8") cursor = connect.cursor() sql = "select Vname from Vendor,Goods where Goods.Vnum=Vendor.Vnum and Goods.Gnum like'%s'"%('%'+v13.get()+'%') try: cursor.execute(sql) results = cursor.fetchall() for row in results: Vname = row[0] tkinter.messagebox.showinfo("提示","Vname=%s" % (Vname)) except: return #添加商品界面 def Staff_add(): #构建全集变量,方便上面的函数调用 global window_function global v1,v2,v3,v4,v5,v6,v7,v8,v9 #生成窗口 window_function=tk.Tk() #窗口标题 window_function.title("超市零售信息管理系统") #窗口大小 window_function.geometry('400x700') #生成标签 tk.Label(window_function, text="添加新商品", font=("黑体", 20)).grid(row=0,column=1,pady=10) tk.Label(window_function, text="请输入商品编号:").grid(row=1, column=0, padx=20, pady=20) tk.Label(window_function,text="请输入商品名称:").grid(row = 2,column =0,padx=20,pady=20) tk.Label(window_function,text="请输入商品类别:").grid(row = 3,column =0,padx=20,pady=20) tk.Label(window_function,text="请输入商品售价:").grid(row = 4,column =0,padx=20,pady=20) tk.Label(window_function, text="请输入商品成本:").grid(row=5, column=0, padx=20, pady=20) tk.Label(window_function, text="请输入库存量:").grid(row=6, column=0, padx=20, pady=20) tk.Label(window_function, text="请输入告警量:").grid(row=7, column=0, padx=20, pady=20) tk.Label(window_function, text="请输入计划库存量:").grid(row=8, column=0, padx=20, pady=20) tk.Label(window_function, text="请输入供货商编号:").grid(row=9, column=0, padx=20, pady=20) #定义变量记录输入信息 v1 = tk.StringVar() v2 = tk.StringVar() v3 = tk.StringVar() v4 = tk.StringVar() v5 = tk.StringVar() v6 = tk.StringVar() v7 = tk.StringVar() v8 = tk.StringVar() v9 = tk.StringVar() #生成输入框 entry1 = tk.Entry(window_function,show=None,textvariable=v1).grid(row = 1,column =1) entry2 = tk.Entry(window_function,show=None,textvariable=v2).grid(row = 2,column =1) entry3 = tk.Entry(window_function,show=None,textvariable=v3).grid(row = 3,column =1) entry4 = tk.Entry(window_function, show=None, textvariable=v4).grid(row=4, column=1) entry5 = tk.Entry(window_function, show=None, textvariable=v5).grid(row=5, column=1) entry6 = tk.Entry(window_function, show=None, textvariable=v6).grid(row=6, column=1) entry7 = tk.Entry(window_function, show=None, textvariable=v7).grid(row=7, column=1) entry8 = tk.Entry(window_function, show=None, textvariable=v8).grid(row=8, column=1) entry9 = tk.Entry(window_function, show=None, textvariable=v9).grid(row=9, column=1) #生成按钮 button = tk.Button(window_function, text="添加", command=add).place(relx=0.3,rely=0.9) button2 = tk.Button(window_function, text="返回", command=chaneg_main).place(relx=0.5,rely=0.9) #显示窗口 window_function.mainloop() #删除商品界面 def Staff_delete(): global window_function global v10 window_function=tk.Tk() window_function.title("超市零售信息管理系统") window_function.geometry('500x400') tk.Label(window_function, text="删除商品", font=("黑体", 20)).grid(row=0,column=1,pady=20) tk.Label(window_function,text="请输入商品编号:").grid(row = 1,column =0,padx=20) v10 =tk.StringVar() entry1=tk.Entry(window_function,show=None,textvariable=v10).grid(row = 1,column =1,pady=40) button = tk.Button(window_function, text="删除", command=delete,anchor = 's').place(relx=0.2,rely=0.5) button2 = tk.Button(window_function, text="返回", command=chaneg_main).place(relx=0.4,rely=0.5) window_function.mainloop() #更新商品信息界面 def Staff_update(): global window_function global v11,v12 window_function=tk.Tk() window_function.title("超市零售信息管理系统") window_function.geometry('500x400') tk.Label(window_function, text="更新商品信息", font=("黑体", 20)).grid(row=0,column=1,pady=20) tk.Label(window_function,text="请输入商品库存:").grid(row = 1,column =0,padx=20,pady=20) tk.Label(window_function,text="请输入商品编号:").grid(row = 2,column =0,padx=20,pady=20) v11=tk.StringVar() v12=tk.StringVar() entry1=tk.Entry(window_function,show=None,textvariable=v11).grid(row = 1,column =1) entry2=tk.Entry(window_function,show=None,textvariable=v12).grid(row = 2,column =1) button = tk.Button(window_function, text="更新", command=update).place(relx=0.3,rely=0.5) button2 = tk.Button(window_function, text="返回", command=chaneg_main).place(relx=0.5,rely=0.5) window_function.mainloop() #条件查找商品界面 def Staff_select(): global window_function global v13 window_function=tk.Tk() window_function.title("超市零售信息管理系统") window_function.geometry('500x400') tk.Label(window_function, text="查找商品的供货商名称", font=("黑体", 20)).grid(row=0,column=1,pady=20) tk.Label(window_function,text="请输入商品编号:").grid(row = 1,column =0,padx=20) v13 =tk.StringVar() entry1=tk.Entry(window_function,show=None,textvariable=v13).grid(row = 1,column =1,pady=40) button = tk.Button(window_function, text="查找", command=select).place(relx=0.3,rely=0.5) button2 = tk.Button(window_function, text="返回", command=chaneg_main).place(relx=0.5,rely=0.5) window_function.mainloop() #添加商品界面跳转 def change_add(): #销毁画布 window.destroy() #生成新界面 Staff_add() #删除商品界面跳转 def change_delete(): window.destroy() Staff_delete() #更新商品界面跳转 def change_update(): window.destroy() Staff_update() #条件查询商品界面跳转 def change_select(): window.destroy() Staff_select() #主界面跳转 def chaneg_main(): window_function.destroy() mainpage() #主界面 def mainpage(): global window window = tk.Tk() window.title("超市零售信息管理系统") window.geometry('500x400') #生成画布,销毁后生成新的画布实现跳转 page = tk.Frame(window) page.pack() tk.Label(window, text="欢迎使用超市零售信息管理系统", font=("黑体", 20)).pack(pady=10) button1 = tk.Button(window, text="添加商品信息", command=change_add).pack(pady=10) button2 = tk.Button(window, text="删除商品信息", command=change_delete).pack(pady=10) button3 = tk.Button(window, text="修改商品信息", command=change_update).pack(pady=10) button4 = tk.Button(window, text="查找商品供货商名称", command=change_select).pack(pady=10) window.mainloop() #主函数生成主界面 if __name__ == '__main__': mainpage() 

五、总结

PS:如果同学们想要完整的课程设计报告可以私聊笔者免费获取。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232291.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux文本编辑器—vim详解

    Linux文本编辑器—vim详解本篇主要介绍Linux下文本编辑器vim的使用方法,以及sudo命令的实现。.

    2022年7月26日
    4
  • MYSQL mediumText大字段存储错误问题排查「建议收藏」

    MYSQL mediumText大字段存储错误问题排查「建议收藏」思路:1:由于日志查询问题,没看到日志之前怀疑:MYSQL数据库字段长度是否真的足够,排查问题未果。2:步骤一未果,看日志了解错误信息如下Name”:”com.javartisan.audience_management.jsf_service.service.AudienceService”}org.springframework.orm.jpa.JpaSystemExcepti…

    2022年5月15日
    38
  • hive数据类型有哪些?[通俗易懂]

    hive数据类型有哪些?[通俗易懂] 关系数据库里有表(table),分区,hive里也有这些东西,这些东西在hive技术里称为hive的数据模型。今天本文介绍hive的数据类型,数据模型以及文件存储格式。这些知识大家可以类比关系数据库的相关知识。  首先我要讲讲hive的数据类型。Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型。  原子数据类型包括数值型、布尔型和字符串类型,具体如下表所示:基本数据类型类型…

    2022年9月21日
    3
  • pycharm中安装包

    pycharm中安装包1、pycharm中万能提示键1、在import中导入包时,下方出现红色波浪线,表明当前python中存在该2、将鼠标停留在红色波浪线上,按Alt+Enter3、选择Installpackagenumpy4、查看已经安装的包,File—>Settings—>ProjectInterpreter2、在ProjectInterpreter中管理包1、包的升级和删除2.包的安装3.安装指定的包和指定的版本…

    2022年5月16日
    44
  • c++cstring头文件_fstream头文件

    c++cstring头文件_fstream头文件函数strcpy原型:char*strcpy(char*s1,constchar*s2);作用:将字符串2复制到字符数组1当中去说明:字符数组1的长度应不小于字符串2的长度”字符数组1″必须写成数组名形式,”字符串2″可以为字符数组名,也可以是一个字符串常量在未对字符数组1赋初值时,复制时将”字符串2″中的字符串和其后的”/0″一

    2025年11月4日
    3
  • jwt单点登录问题

    jwt单点登录问题https://www.cnblogs.com/lyzg/p/6067766.html

    2022年5月11日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号