SQL数据库系统设计之食堂管理系统

目 录
1数据库设计 1
1.1 需求分析 1
1.2 需求分析实现的过程
1.3 概念结构设计 1
1.3.1 概念结构设计的方法 1
1.3.2 概念结构设计的E-R图 2
1.3.3 逻辑结构设计
2数据库的实现 3
2.1数据库图表的建立………………………………………………………………………1
2.2数据库的代码实现…………………………………………………………………….2
2.2界面的实现……………………………………………………………………………2
3总结 4

1.数据库设计
1.1 需求分析
1.1.1需求分析的任务
计算机是现代食堂管理的重要组成部分其主要包括:职员资料管理、物品管理、消费内容管理、席位管理、客户评价管理,工资管理等,计算机对于食堂的管理越来越重要,食堂离不开计算机的应用,因此设计一个食堂管理系统具有非常大的实际价值和意义。
1.1.2需求分析的过程
现代食堂主要功能模块是:职工信息管理,食堂各个区域的管理,物品管理,学生信息管理。下面分别对职工以及学生的模块进行描述。
(1) 职工信息的管理,职工的工资,评价等的相关管理
(2) 食堂各区域的详细情况,属于哪个人员复制
(3) 食堂物品的保管以及日常维护
(4) 学生的消费情况
1.3概念模型的设计
1.3.1 概念模型的主要特点:
(1)能真实的反映现实世界,包括事物与事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。
(2)易于理解,可以用和它不熟悉计算机的用户交换意见。用户的积极参与是数据库设计成功的关键。
(3)易于更改,当应用环境和应用要求改变时容易对模型进行修改和扩充。
(4)易于向关系,网状,层次等各种数据模型转换。
1.3.2 E-R模型
设计整体E-R图:
SQL数据库系统设计之食堂管理系统_第1张图片

1.3.3逻辑结构设计
(1)E-R图向关系模式的转换
职员资料表(职员编号,姓名,职位,性别,民族,出生日期,身份证号,婚姻状况,家庭地址,联系电话,工资,评价级别)
物品表(物品编号,物品名字,所属类型,价格,是否售罄,品牌)
席位表(席位号,负责人编号,人数,状态,日期)
学生购买情况(类型,购买学生,数量,方式,金额,日期)
学生表(姓名,学生编号,性别)

                    2数据库的实现

2.1数据库图表的建立

二涉及的表

职员资料

属性 类型 大小 是否为空 约束
职员编号 char 6 否 主键。6位数
姓名 varchar 20 否
职位 varchar 20 否
性别 Char 2 否,默认“男” 男或女
民族 varchar 10 否,默认“汉族”
出生日期 datetime 否
身份证号 char 18 否
婚姻状况 char 4 否,默认“未婚” 未婚或已婚
家庭地址 varchar 30 否
联系电话 varchar 11 否
工资 money
评价级别 Char 4

物品表

属性 类型 大小 是否为空 约束
物品编号 char 6 否 主键。6位数
物品名字 varchar 20 否
所属类型 char 4 否,默认“主食” 主食、饮料或其他
价格/元 int 否
是否售馨 char 2 否,默认“否” 是或否
品牌 varchar 30 是

席位表

属性 类型 大小 是否为空 约束
席位号 char 6 否 主码,6位数
负责人编号 外码
人数 int 否,默认“8” 1至20
状态 char 4 否,默认“空闲” 正在使用,预定或空闲
日期 datetime 否

属性 类型 大小 是否为空 约束
类型 char 4 否
购买学生 char 15 外码
数量 int 否
方式 varchar 10 否,默认“现场” 现场、预定或外卖
金额/元 money 否
日期 datetime 否
学生购买情况

                             学生表

属性 类型 大小 是否为空 约束
学生编号 char 10 主码
姓名 char 4 否”
性别 char 10 否

2.2数据库的代码实现
create table 职员资料(
职员编号 char(6) not null primary key
check(职员编号 like ‘[0-9][0-9][0-9][0-9][0-9][0-9]’),
姓名 varchar(20) not null,
职位 varchar(20) not null,
性别 char(2) not null check(性别=’男’ or 性别=’女’) default ‘男’,
民族 varchar(8) null default ‘汉族’,
出生日期 datetime not null,
身份证号码 char(18) not null unique,
婚姻状况 char(4) not null check(婚姻状况=’已婚’ or 婚姻状况=’未婚’) default ‘未婚’,
联系电话 varchar(11) not null unique,
工资 money ,
评价级别 char(4) not null check(评价级别 in (‘优’,’良’,’一般’,’差’)) default ‘优’
);

create table 物品表
(物品编号 char(6) not null primary key,
物品名字 varchar(20) not null,
所属类型 char(4) not null check(所属类型=’主食’or 所属类型=’饮料’ or 所属类型=’其他’) default ‘主食’,
价格 money not null,
是否售馨 char(2) not null check(是否售馨=’是’ or 是否售馨=’否’) default ‘否’,
品牌 varchar(30),
);

create table 席位表(
席位号 char(6) not null primary key,
负责人编号 char(6) not null foreign key references 职员资料(职员编号),
人数 int not null,
状态 char(4) not null check(状态=’使用’ or 状态=’预定’ or 状态=’空闲’) default ‘空闲’,
日期 datetime not null,
);

create table 学生购买情况
(类型 char(4) not null check(类型=’主食’or 类型=’饮料’ or 类型=’其他’) default ‘主食’,
购买学生 char(15) not null foreign key references 学生表(学生编号),
数量 int not null,
方式 char(4) not null check(方式=’现场’ or 方式=’预定’ or 方式=’外卖’) default ‘现场’,
金额 money not null,
日期 datetime not null,
);

create table 学生表
(
姓名 char(10),
学生编号 char(15) primary key ,
性别 char(10),
);

向职工表插入数据
insert
into 职员资料
values (‘111111’,’张三’,’经理’,’男’,’汉’,’1988.2.6’,’218218198802061111’,’已婚’,’123456’,’6000’,’优’)
insert
into 职员资料
values (‘222222’,’李四’,’主管’,’男’,’汉’,’1989.2.6’,’218218198802062222’,’已婚’,’132456’,’5000’,’良’)
insert
into 职员资料
values (‘333333’,’王五’,’后勤’,’男’,’汉’,’1990.2.6’,’218218198802063333’,’已婚’,’142356’,’4000’,’一般’)
insert
into 职员资料
values (‘444444’,’刘六’,’员工’,’男’,’汉’,’1991.2.6’,’218218198802064444’,’未婚’,’152346’,’3000’,’差’)
insert
into 职员资料
values (‘555555’,’翠花’,’采购’,’女’,’苗族’,’1992.2.6’,’218218198802065555’,’已婚’,’162345’,’3000’,’一般’)

向物品表插入数据

insert
into 物品表
values (‘a0010’,’米饭’,’主食’,’0.2’,’否’,’稻花香’)
insert
into 物品表
values (‘b0010’,’面条’,’主食’,’5’,’否’,’扬州’)
insert
into 物品表
values (‘c0010’,’米粉’,’主食’,’6’,’否’,’绵阳’)
insert
into 物品表
values (‘d0010’,’矿泉水’,’饮料’,’3’,’否’,’农夫’)
insert
into 物品表
values (‘e0010’,’面包’,’其他’,’2’,’是’,’桃李’)

向席位表插入数据

insert
into 席位表
values (‘A’,’111111’,’10’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘B’,’222222’,’20’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘C’,’333333’,’30’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘D’,’444444’,’40’,’预定’,’2017.12.13’)
insert
into 席位表
values (‘E’,’555555’,’50’,’使用’,’2017.12.13’)

向学生购买情况插入数据
insert
into 学生购买情况
values (‘主食’,’1604010811’,’2’,’现场’,’4’,’2017.12.10’)
insert
into 学生购买情况
values (‘其他’,’1604010812’,’1’,’预定’,’30’,’2017.12.10’)
insert
into 学生购买情况
values (‘饮料’,’1604010813’,’8’,’现场’,’24’,’2017.12.10’)

向学生表插入数据

insert
into 学生表
values (‘小明’,’1604010811’,’男’)
insert
into 学生表
values (‘小王’,’1604010812’,’女’)
insert
into 学生表
values (‘小李’,’1604010813’,’男’)

建立职员信息情况视图
create view 职员信息情况
as
select *
from 职员资料

建立学生情况视图

create view 学生情况
as
select 学生编号,姓名
from 学生表

职工工资的更新

update 职员资料
set 工资=工资-500
where 评价级别=’差’

学生购买情况的更新

update 学生购买情况
set 数量+=1
where 类型=’主食’

查询职工情况视图

查询学生表

查询学生购买情况

将职工评价为差的职工工资扣500

学生购买更新的实时情况

2.2界面的实现
1.代码部分:
import tkinter as tk
import pyodbc

root = tk.Tk()
root.title(‘南翔食堂管理系统’)
root.geometry(‘450x300’)

canvas = tk.Canvas(root, height=200, width=500)
canvas.pack(side=’top’)

tk.Label(root, text=’User name: ‘).place(x=50, y= 150)
tk.Label(root, text=’Password: ‘).place(x=50, y= 190)

name = tk.StringVar()
name.set(‘123456’)
uname = tk.Entry(root, textvariable=name)
uname.place(x=160, y=150)
upwd = tk.StringVar()
upwd = tk.Entry(root, textvariable=upwd, show=’*’)
upwd.place(x=160, y=190)

def usrlogin():

conn=pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};SERVER=LAPTOP-EQH6QBBN;DATABASE=st;UID=sa;PWD=123456789')
c1=conn.cursor()
c1.execute("select * from 职员资料")
results=c1.fetchall()
for result in results:
    print(result)

login=tk.Button(root, text=’Login’, command=usrlogin)
login.place(x=170, y=230)

root.mainloop()

2.运行截图

SQL数据库系统设计之食堂管理系统_第2张图片

3总结
(设计过程中遇到的问题以及解决方法;课程学习及设计的体会)
这次的数据库实践作业,我们做的是“食堂管理系统”,通过几个星期对其各阶段任务的分析实验操作(确定项目、需求分析、设计等),使我们对数据库设计有了更深层次的了解,同时也学到了很多东西。
(1) 在这次实验中,通过对数据食堂管理库的设计,我们深刻认识了数据信息、数据处理、数据库、数据库管理及系统重要概念,也学习到数据库 技术,理解和掌握管理信息系统的相关内容,成功实现利用理论对数据库进行处理、分析和理解技术。
(2) 在设计数据库管理中,所涉及的内容非常之多,需要每个成员都必须保持极大地耐心和细心,考虑数据库模型涉及要素要非常全面,数据库中的大量数据必须按严格的数据模型来组织,数据库中的数据是高度结构化的,它不仅是数据本身而且反映数据之间的关系。
(3) 经过与老师的答辩环节,当时由于没有理解老师说的再买一份饭其实就是更新操作将米粉的销售数量加1即可,后来回去我们又进行了多方的思考与改进,最后重新进行详细的合理的数据库分析。踏踏实实的从可行性分析开始,经过需求分析、逻辑设计和物理设计。
(4)我们采用python技术进行数据库的连接和界面的开发。而我们的python也是全新的学习,自己看看书,网上看点学习视频,网上查查资料,进行有关知识的学习。通过一边学习,一边解决遇到的问题。我们对这个方面的知识有了深刻的认识

4、完整SQL代码如下
use st
go

create table 职员资料(
职员编号 char(6) not null primary key
check(职员编号 like ‘[0-9][0-9][0-9][0-9][0-9][0-9]’),
姓名 varchar(20) not null,
职位 varchar(20) not null,
性别 char(2) not null check(性别=’男’ or 性别=’女’) default ‘男’,
民族 varchar(8) null default ‘汉族’,
出生日期 datetime not null,
身份证号码 char(18) not null unique,
婚姻状况 char(4) not null check(婚姻状况=’已婚’ or 婚姻状况=’未婚’) default ‘未婚’,
联系电话 varchar(11) not null unique,
工资 money ,
评价级别 char(4) not null check(评价级别 in (‘优’,’良’,’一般’,’差’)) default ‘优’
);
insert
into 职员资料
values (‘111111’,’张三’,’经理’,’男’,’汉’,’1988.2.6’,’218218198802061111’,’已婚’,’123456’,’6000’,’优’)
insert
into 职员资料
values (‘222222’,’李四’,’主管’,’男’,’汉’,’1989.2.6’,’218218198802062222’,’已婚’,’132456’,’5000’,’良’)
insert
into 职员资料
values (‘333333’,’王五’,’后勤’,’男’,’汉’,’1990.2.6’,’218218198802063333’,’已婚’,’142356’,’4000’,’一般’)
insert
into 职员资料
values (‘444444’,’刘六’,’员工’,’男’,’汉’,’1991.2.6’,’218218198802064444’,’未婚’,’152346’,’3000’,’差’)
insert
into 职员资料
values (‘555555’,’翠花’,’采购’,’女’,’苗族’,’1992.2.6’,’218218198802065555’,’已婚’,’162345’,’3000’,’一般’)

create table 物品表
(物品编号 char(6) not null primary key,
物品名字 varchar(20) not null,
所属类型 char(4) not null check(所属类型=’主食’or 所属类型=’饮料’ or 所属类型=’其他’) default ‘主食’,
价格 money not null,
是否售馨 char(2) not null check(是否售馨=’是’ or 是否售馨=’否’) default ‘否’,
品牌 varchar(30),
);
insert
into 物品表
values (‘a0010’,’米饭’,’主食’,’0.2’,’否’,’稻花香’)
insert
into 物品表
values (‘b0010’,’面条’,’主食’,’5’,’否’,’扬州’)
insert
into 物品表
values (‘c0010’,’米粉’,’主食’,’6’,’否’,’绵阳’)
insert
into 物品表
values (‘d0010’,’矿泉水’,’饮料’,’3’,’否’,’农夫’)
insert
into 物品表
values (‘e0010’,’面包’,’其他’,’2’,’是’,’桃李’)

create table 席位表(
席位号 char(6) not null primary key,
负责人编号 char(6) not null foreign key references 职员资料(职员编号),
人数 int not null,
状态 char(4) not null check(状态=’使用’ or 状态=’预定’ or 状态=’空闲’) default ‘空闲’,
日期 datetime not null,
);
insert
into 席位表
values (‘A’,’111111’,’10’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘B’,’222222’,’20’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘C’,’333333’,’30’,’空闲’,’2017.12.13’)
insert
into 席位表
values (‘D’,’444444’,’40’,’预定’,’2017.12.13’)
insert
into 席位表
values (‘E’,’555555’,’50’,’使用’,’2017.12.13’)

create table 学生购买情况
(类型 char(4) not null check(类型=’主食’or 类型=’饮料’ or 类型=’其他’) default ‘主食’,
购买学生 char(15) not null foreign key references 学生表(学生编号),
数量 int not null,
方式 char(4) not null check(方式=’现场’ or 方式=’预定’ or 方式=’外卖’) default ‘现场’,
金额 money not null,
日期 datetime not null,
);
insert
into 学生购买情况
values (‘主食’,’1604010811’,’2’,’现场’,’4’,’2017.12.10’)
insert
into 学生购买情况
values (‘其他’,’1604010812’,’1’,’预定’,’30’,’2017.12.10’)
insert
into 学生购买情况
values (‘饮料’,’1604010813’,’8’,’现场’,’24’,’2017.12.10’)

create table 学生表
(
姓名 char(10),
学生编号 char(15) primary key ,
性别 char(10),
);

insert
into 学生表
values (‘小明’,’1604010811’,’男’)
insert
into 学生表
values (‘小王’,’1604010812’,’女’)
insert
into 学生表
values (‘小李’,’1604010813’,’男’)

select *
from 学生表

select *
from 物品表

select *
from 席位表

select *
from 学生购买情况

create view 职员信息情况
as
select *
from 职员资料

select *
from 职员信息情况

create view 学生情况
as
select 学生编号,姓名
from 学生表

select *
from 学生情况

update 职员资料
set 工资=工资-500
where 评价级别=’差’

select *
from 职员信息情况

update 学生购买情况
set 数量+=1
where 类型=’主食’
select *
from 学生购买情况

你可能感兴趣的:(SQL,数据库系统设计)