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圖:
E-R圖如圖所示

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.運行截圖

這裏寫圖片描述

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 學生購買情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章