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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

数据库课程设计

超市零售信息管理系统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()

假如与数据库连接成功则以上代码块运行会出现如下结果
在这里插入图片描述
这里简单介绍下pymssal模块
pymssql是python用来连接Microsoft SQL Server的一个工具库(package)。
和数据库登录一样分为用户验证登录和windows身份认证登陆而以上代码中我采用的是后者因此不需要账号密码其核心代码为

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 ('200001','薯片','零食',8,5,500,100,600,'100002')"
sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values ('200002','可乐','饮料',4,2,1000,200,1500,'100001')"
sql = "insert into Goods(Gnum,Gname,Gtype,Gprice,Gbid,Gstock,Galarm,Gplan,Vnum) values ('200003','猪肉','肉类',32,20,400,50,500,'100003')"
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 ('100001','number1','12698577456','浙江')"
sql = "insert into Vendor(Vnum,Vname,Vphone,Vpalce) values ('100002','number2','72798567498','湖北')"
sql = "insert into Vendor(Vnum,Vname,Vphone,Vpalce) values ('100003','number3','69795867463','广州')"
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()

五、总结

对于数据库课程设计其实本身难度并不大这里作者总结了一下在操作过程中的几个难点
1.需求分析。很多同学确定了自己要做一个什么数据库后很兴奋觉得自己找到属于自己的题目了但却发现自己很难走出第一步因为我们没有进行数据库的需求分析并不了解自己的数据库具体要实现什么样的功能。这里的需求分析可以通过画功能模块图来实现当然也可以文字叙述但远不如画图来的直观。
2.数据库的逻辑结构设计。因为每一个数据中需要建立许多表大家很容易混乱各个表之间的逻辑关系因此可以把概念结构设计放在逻辑结构设计之前进行。
3.数据库与程序设计语言的建立和界面的创建。选择一门合适的高级语言来进行课设是非常重要的各程序之间没有太大的优劣之分只能说各有特点作者在这里选择了Python语言原因是代码简洁直观并通过Python的第三方库可以非常方便快速的连接数据库和制作界面。

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python数据库