学校后勤物资管理系统(数据库课程设计)

一、实践目标

 训练目的:帮助读者感性地认识数据库系统的各组成部分,掌握数据库设计的基本方法,巩固对数据库基本解释和基本理论的理解。

功能目标:学校后勤公司希望通过计算机对后勤物资进行管理。

系统主要功能如下:
 (1)购货管理:包括采购合同管理和进货统计报表,采购合同管理又分为采购合同维护、采购执行情况跟踪、采购信息统计。
 (2)销售管理:分为销售合同管理和销售情况统计。销售合同管理包括销售合同的维护和管理,销售情况统计用于统计用与确定销售的数量和价格(可以按照类别、时间段等条件统计),统计所得的数据可以为今后指定后勤公司计划提供参考信息。
 (3)库存情况管理:用于管理库存情况,包括库存查询、库存盘点、库存上下限警报等,并生成库存统计图。
 (4)系统数据维护:分为物资供应商信息(编号、名称、主管、简介等)管理和产品信息管理。
 (5)账务管理:管理后勤公司的结账业务,每个月都要进行一次结账操作,确定该财务月份所有物资的进、销、结存情况,为财务管理提供数据。
 (6)系统管理:包括参数设置、权限设置、更改密码等。

二、基本实现思路

  1、首先前期准备进行需求分析,规划好每一个主体所含的属性以及每个主体之间的关系,建立E-R图,设置主外键。
 2、利用数据库设计工具PowerDesigner设计概念模型,设计完后转化为物理模型,管理好主外键的关系,进而转化为数据库建表的代码。
 3、利用数据库设计工具SQLServer 2012 Management Studio进行一些基本的操作,例如对表的测试,建立相关触发器、存储过程以及视图等等。
 4、利用Python实现前端,完成相关功能的界面及主界面,为用户提供友好界面等。
  5、将数据库与前端连接,实现数据库和前端的交互,完成学校后勤物资管理系统。
 6、最后对系统进行测试与优化,找出相应的解决方案。

三、关键技术与难点讨论

前端的设计难点:
 1、数据的展现方式需要对用户友好。
 2、难点在于对界面的转换和界面间数据的通信。
 3、与数据库间的交互,需要考虑对数据的保护,防止前端对数据的操作造成前后端数据不同步读脏数据。
 4、与数据库的连接。(进行验证登录账户是否是有效账户)

关键技术的实现:主要通过python的tkinter库完成,利用其进行前端的布局和设计,为用户提供友好界面,实现相关功能的界面;通过使用pymssql和pyodbc库对数据库进行连接通信。前后端数据的通信时,在前端对数据进行操作时不允许其他操作对其作用;对有的子功能需要使用到触发器,用以方便同步更新其他相关数据,简化步骤;另有其他界面有需要对不同的表间属性的展示,故需要建立视图,用以达到向用户展示友好界面的目的。

数据库设计:
在这里插入图片描述
在这里插入图片描述
GUI:
在这里插入图片描述
在这里插入图片描述
五、附录

软件使用手册:

  1. 购买货物需要提供:购货单号、产品单号、供应商单号、进价、数量、进货时间。
  2. 销售管理有两个子系统管理:1、查询销售情况(可按产品名称和月份查询) 2、销售需要提供: 销售单号、产品单号、客户单号、售价、数量、销售时间。
  3. 库存管理:可查询库存货物的存量等(提供按编号和货物名两种方式进行查询)。
  4. 数据管理:给用户提供多种方式查询供应商和产品的详细信息。
  5. 财务管理:给用户提供月报表,每月的结余盈利和进货销售情况,为用户下一月的进货提供参考。

数据库核心代码:

购货入库触发器:
ALTER trigger  TR_Buy_Store on Buy
after insert as 
Declare @pnumber char(5),@gnumber numeric(2),@pprice int,@pquan int,@mnumber int,@snumber char(1)
select @pnumber=pNumber,@gnumber=gNumber,@pprice=pPrice,@pquan=pQuan,@mnumber=mNumber,@snumber=sNumber from inserted
begin
update Store
set Store.gNumber=@gNumber,Store.wTotal=Store.wTotal+@pquan
where (Store.gNumber=@gnumber)
End
购货月销售额触发器:
ALTER trigger TR_Buy_Total on Buy
for insert as
declare  @gnumber numeric(2),@pprice int,@pquan int,@mnumber int
select @gnumber=gNumber,@pprice=pPrice,@pquan=pQuan,@mnumber=inserted.mNumber from inserted
begin
update Total
set Total.pTotalMoney+=@pprice*@pquan
where Total.mNumber=@mnumber 
update Total
set Total.TotalMoney=Total.SellTotalMoney-Total.pTotalMoney
where Total.mNumber=@mnumber
end
售货出库触发器:
ALTER trigger TR_Sell_Store on Sell
after insert as 
Declare @sellnumber char(5),@gnumber char(1),@cnumber char(2),@mnumber int,@sellprice int,@sellquan int
select @sellnumber=SellNumber,@gnumber=inserted.gNumber,@cnumber=cNumber,@mnumber=mNumber,@sellprice=SellPrice,@sellquan=SellQuan from inserted
begin
update Store
set Store.wTotal=Store.wTotal-@sellquan
where (Store.gNumber=@gnumber) and @sellprice<Store.wTotal
end 
售货月销售额触发器:
ALTER trigger TR_Buy_Total on Buy
for insert as
declare  @gnumber numeric(2),@pprice int,@pquan int,@mnumber int
select @gnumber=gNumber,@pprice=pPrice,@pquan=pQuan,@mnumber=inserted.mNumber from inserted
begin
update Total
set Total.pTotalMoney+=@pprice*@pquan
where Total.mNumber=@mnumber 
update Total
set Total.TotalMoney=Total.SellTotalMoney-Total.pTotalMoney
where Total.mNumber=@mnumber
end

前端与数据库后台交互代码:

数据库连接
# -*- coding=utf-8 -*-
import pymssql
import pyodbc
import datetime
class DataBase():

    def __init__(self,server = "127.0.0.1", DataBase = "SQL2012", port = 22265):
        self.DataBase = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=127.0.0.1,22265;DATABASE=SQL2012;UID=sa;PWD=123456')
        #self.DataBase = pymssql.connect(server = server, database = DataBase, port = port, charset="GBK")
    def SQL(self, sql):
        '''
        执行SQL语句,返回结果
        '''
        cur = self.DataBase.cursor()
        cur.execute(sql)
        try:
            result = cur.fetchall()
        except(pyodbc.ProgrammingError):
            print("改语句没有返回值")
            result = None
        cur.close()
        return result
    
    def Search(self,col_name = ["*"], Tables = [], condition = None, order = None):
        '''
        查找表
        args{
            col_name:列名默认全选
            Tables: 表名
            condition:WHERE 条件
        }
        '''
        if len(Tables) <= 0:
            print("查询失败,无表")
            return False
        if len(col_name) <= 0:
            col_name = ["*"]

        SQL = ""
        
        SELECT = "SELECT "
        for i in range(len(col_name)):
            SELECT += col_name[i]
            if i + 1 < len(col_name):
                SELECT += ","
        SQL += SELECT

        FROM = " FROM "
        for i in range(len(Tables)):
            FROM += Tables[i]
            if i + 1 < len(Tables):
                FROM += ","
        SQL += FROM

        WHERE = " WHERE "
        if condition:
            WHERE += condition
            SQL += WHERE
        
        ORDERBY = " ORDER BY "
        if order:
            ORDERBY += order
            SQL += ORDERBY
        
        return self.SQL(SQL)

    def Update(self, Table, col_name, value, condition = None):
        '''
        修改表数据
        args{
            col_name:列名
            Tables: 表名
            condition:WHERE 条件
        }
        '''
        UPDATE = "UPDATE "
        UPDATE += Table
        SET = " SET "
        SET += col_name + "=" + value
        WHERE = " WHERE "
        if condition:
            WHERE += condition
        SQL = UPDATE + SET + WHERE
        print(SQL)
        result = self.SQL(SQL)
        self.DataBase.commit()
        return result

    def Insert(self, Table, cols, values,commit = True):
        INSERT = "INSERT INTO "
        INSERT += Table + cols
        VALUES = " VALUES "

        VALUES += values
        SQL = INSERT + VALUES
        print(SQL)
        result = self.SQL(SQL)
        if commit:
            self.DataBase.commit()
        return result

最后:完整代码

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
包含文档,各种源码 一、 课程设计目的和要求………………………………………………….…3 二、课程设计过程…………………………………………………………….4 数据库设计的基本步骤如下:……………………………………………….4 1.需求分析阶段……………………………………………………………..4 1.1 应用背景……………………………………………………………4 1.2系统需求分析……………………………………….........................5 1.3系统可行性分析。………………………………………………….6 1.4系统E-R图……………………………………………………........6 2.概要设计…………………………………………………........................7 2.1开发系统的目的…………………………………………………….7 2.2系统模块的划分…………………………………………………….7 2.2.1基础信息管理…………………………………………............7 2.2.2库存管理..……………………………………………………..7 2.2.3商品销售………………………………………………………8 2.2.4查询统计………………………………………………………8 2.2.5往来管理………………………………………………………8 2.2.6系统设置……..………………………………………………..8 2.3数据库实施………………………………………………………….8 2.3.1CreateDatabase创建数据库…………………………………...8 2.3.2 Create Table 创建表…………………………………………9 3.前端设计………………………………………………………………..18 3.1详细实现…………………………………………………………….18 3.2 数据库的连接与访问………………………………………………18 3.3用户登录模块设计………………………………………………….20 3.4系统首页设计……………………………………………………….23 3.5主要功能展示……………………………………………………….23 三、课程设计心得…………………………………………………………….26 参考文献:…………………………………………………………………….27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值