数据库设计完整流程图.docx
《数据库设计完整流程图.docx》由会员分享,可在线阅读,更多相关《数据库设计完整流程图.docx(63页珍藏版)》请在冰豆网上搜索。
数据库设计完整流程图
实验一软件分析
请从网站下载示例程序,分析软件的功能并列出,并从中抽象出实体,画出软件的E-R图并进行数据库逻辑设计,画出数据库逻辑设计表格。
参考如下:
一、功能说明
1)系统登录控制:
要求填写用户名及密码,并进行了3次连续错误后系统退出功能。
2)部门编码设置:
主要是用来设置部门的层级关系。
3)部门信息设置:
部分的基本信息,如地址、电话等。
4)员工信息管理:
管理企业内部员工的信息,还可以设置生日提醒。
5)提醒设置功能:
可以通过设置信息及接收用户及时间,当被设置的用户登录时显示给用户。
6)今日提醒功能:
根据提醒设置,显示相应信息。
7)系统设置:
修改使用软件的单位信息。
8)密码修改功能:
修改用户的密码。
二、E-R图
首先是进行实体的抽象,通过系统登录功能及用户密码修改功能,我们可以抽象出“用户”实体,通过部门编码及部门信息管理功能,可以抽象出“部门”实体,通过员工信息管理可得到“员工”实体,通过提醒功能及今日提醒功能可以抽象出“提醒”实体,最后就是系统基本信息,可以得到“系统”实体。
实体之间关系有E-R图
提醒实体
用户信息实体的E-R图
部门信息实体的E-R图
员工信息实体的E-R图
系统信息实体的E-R图
三、逻辑表格
通过上面的E-R图,我们已经确立了实体,现在我们要进一步把实体及属性更完善,进行数据库的逻辑设计
提醒信息
字段名
字段类型
宽度
可否为空
默认值
说明
Warnid
自动编号
4
主索引
emplyid
整型
4
否
0
普通索引
当为0时代表发给所有用户
Wtype
整型
4
不同的数值代表不同类型
showdate
日期型
8
显示日期
msg
字符型
200
显示的信息
用户信息
字段名
字段类型
宽度
可否为空
默认值
说明
uname
字符型
20
否
主索引,用户名
upwd
字符型
20
否
0
密码
truename
字符型
8
真实姓名
部门信息
字段名
字段类型
宽度
可否为空
默认值
说明
ID
自动
4
主索引,编号
TopID
整型
4
上层编号
DPName
字符
50
单位名称
DPAddr
字符
100
单位地址
DPPhone
字符
30
单位电话
DPPerson
字符
8
单位联系人
员工信息
字段名
字段类型
宽度
可否为空
默认值
说明
ID
自动
4
编号,主索引
uname
字符
8
姓名
usex
字符
2
性别
birthday
日期
8
生日
DPID
整型
4
所属部门
ISMsg
逻辑
1
是否生日提醒
上面的字符可以进行相应的增加或删减,关键在于想实现的功能。
四、任务
仔细分析软件本身,并可以进行相应改进,完成软件分析任务。
把个人设计的软件也进行上述的过程,完成数据库概念设计及逻辑设计。
实验二创建项目及数据库
一、创建项目
1)在硬盘的相应目录下建立自己的项目文件夹,并在文件夹下建立data和doc两个文件夹分别用来存放数据文件及开发文档。
2)打开VFP8.0,建立项目文件,命名为EPUser(可任意,为了后面方便表达)。
二、创建数据库
在项目管理器中新建一个数据库EPData,并保存在Data文件夹中。
三、创建表并设定索引
1)在EPData数据库下创建新表warning。
表设计器如下:
2)在warnid上建立主索引,在emplyid上建立普通索引。
3)依照上边的方法建立其他数据表。
最终如下:
四、建立表之间的关系
1)选中Epdata数据库,单击修改打开数据库设计器
2)把主表的主索引拖至从表的普通索引上建立关系
五、任务
a)完成企业员工管理软件的项目创建及数据库、数据库表的创建,并建立相应关系。
b)完成自主设计的软件的数据库、数据库表的创建工作。
实验三数据可视化操作
一、添加记录
a)打开实验二创建的项目,并打开epdata数据库的设计器。
b)双击Depart和employ表之间的关系线,打开关系设定窗口。
c)选择“referentialintegrity”选项,并选择插入规则,选择级连项,实现两表之间的“相对完整性”,确定退出窗体。
d)在项目管理器中选择depart表,并选择“浏览”,打开浏览窗口,在“显示”菜单中选择“追加模式”,在表中添加两条数据,如下图,在这里我们可以看到“聊城大学”这个部门的topid为0而“教育传播技术学院”的topid为“聊城大学”的id,通过这种方式实现部门间的级别管理,这种方式在开发中经常使用。
e)关闭depart表,再打开employ表,使用上述方式添加数据,当我们在Dpid中添加了一个depart表中未出现的ID值时,会出现如下错误,而输入的值为正确的,则会被确认,从这里我们可以看到完整性检查的作用。
f)建立一个与employ结构相同的表employ1,在表中添加一些数据。
g)在打开employ表,选择“表”菜单中的追加记录,如下图,点击来源后面的浏览按钮,找到employ1表,并设置选项,选中除自动编号以外的所有字段,确定后,查看employ表中是否添加了employ1中的数据。
二、修改记录
打开一个添加了数据的表格,然后使用“显示”菜单中的“编辑”实现对数据的修改,不再演示,大家也可以设置表之间的关系,看一下更新规则的作用。
三、删除记录
a)打开一个有数据的表格,点击记录左侧的小矩形,这样记录便被逻辑删除
b)进行物理删除,打开“表”菜单,选择彻底删除,便可以实现“物理删除”
四、任务
在我们建立的表中添加适量数据,以方便后续操作。
实验四使用命令操作数据库
一、数据库及表操作
1)创建数据库:
CreateDataBasestumanage
2)创建表:
Createtableclasses(cidIAutoIncprimarykey,classnamec(20))
CreateTablestudent(stuidc(10)primarykey,stunamec(10),sexc
(2)checksex=’男’orsex=’女’error“此数据只能为男或女”default‘男’,classidI,foreignkeyclassidtagclassidreferencesclasses)
3)修改表结构:
ALTERTABLEclassesaddteacherc(6)
ALTERTABLEclassesalterteacherc(8)
ALTERTABLEclassesrenameteachertomanager
ALTERTABLEclassesdropmanager
4)在当前工作期中打开要使用的表:
USEclasses或selectclasses
5)插入数据:
insertintoclasses(classname)values(‘2004级1班’)
insertintoclasses(classname)values(‘2004级2班’)
insertintoclasses(classname)values(‘2004级3班’)
6)浏览数据:
browse或display或list,会发现使用display时只显示第一条记录,这时需要使用范围语句displayall,大家可以使用条件语句看一下结果。
7)查看当前记录各信息:
?
recno()&&显示当前记录号
?
Bof()&&查看记录指针是否在最前
?
Eof()&&查看记录指针是否在最后
skip-1&&使记录指针向前滚动一条
?
recno()
?
Bof()
?
Eof()
gototop&&使记录指针移到顶端
?
recno()
?
Bof()
?
Eof()
8)条件定位:
locateforcid=2
?
recno()
9)在学生表中插入数据:
INSERTintostudent(stuid,stuname,sex,classid)values('20040101','zhang','男',1)
INSERTintostudent(stuid,stuname,sex,classid)values('20040102','wang','女',2)
10)修改学生数据:
updatestudentsetclassid=3wherestuid=’20040101’
11)删除学生记录:
DELETEFROMstudentwherestuid='20040101'
LIST
12)恢复被逻辑删除的记录:
RECALLall
13)再执行上面的删除命令后使用Pack命令,把记录从磁盘彻底删除。
14)执行查询:
a)select*fromstudent
b)selectstuid,stunamefromstudent
c)向学生表中多插入几条记录
d)selectdistinctsexfromstudent
e)selectsexas性别fromstudent
f)select*fromstudentwherestuid=’20040101’
g)select*fromstudentwherestuidin(‘20040101’,’20040102’)
h)SELECT*fromstudentwherestunamelike'w%'
i)SELECT*fromstudentwherestunamelike'w_'
j)SELECT*fromstudentwherestunamelike'__a%'
k)selectcount(*)as学生总数fromstudent
l)SELECTA.*,B.classnamefromstudentA,classesBwhereA.classid=B.cid
m)SELECTA.*,B.classnamefromstudentAinnerjoinclassesBonA.classid=B.cid
n)SELECTA.*,B.classnamefromstudentArightouterjoinclassesBonA.classid=B.cid
o)SELECT*fromstudentorderbystuiddesc
p)SELECTtop1*fromstudentorderbystuiddesc
q)Selectcount(*)asstucount,classidfromstudentgroupbyclassid
r)Select*fromstudentintocursortest
15)删除表:
droptablestudent
droptableclasses
16)删除数据库:
CLOSEALL
DELETEDATABASEstumanage
二、任务
使用上面的命令在员工管理数据库表的添加一些记录
实验五表单设计
一、表单分析
根据实验一中的项目功能分析,我们需要创建以下几个表单。
1)部分信息管理表单:
实现对部分信息的添加、修改、删除等管理
2)员工信息管理表单:
实现对员工信息的添加、修改、删除等管理
3)管理员管理表单:
实现对管理员的添加、删除等管理
4)当前用户密码修改表单:
修改当前用户的密码和真实姓名
5)信息提示表单:
当启动软件时显示提示信息
6)提示信息设置表单:
设置提示信息
7)登录表单
8)系统设置表单
9)关于表单
二、使用向导创建表单
1)打开员工管理项目,这里需要注意的是,VFP软件有可能对中文目录支持不太好,如果出现类似问题,请把项目放在一个英文目录中。
2)在项目管理器中选择文档(documents),选择表单,并新建。
3)选择使用向导,这里有两项,一项是表单向导,另一个是一对多表单向导,可以看出我们也可以使用向导产生基于两个表的表单。
4)选择使用到的表字段,这里实现管理员管理的表单,所以选择Manager表中的所有字段。
5)选择表单样式,使用默认即可。
6)选择排序字段,这里也可以不选择。
7)最后一步,设置表单标题并设置保存,在项目文件夹下建立forms文件夹,并把表单保存在内。
8)最终效果如下:
9)在我们的创建的数据库中,部门表与员工表之间存在一对多关系,使用向导自己建立一个一对多的表单。
三、使用表单设计器修改表单
使用向导生成的表单有时不能满足我们的需要,这时,我们需要使用表单设计器来完善表单的设计。
下面我们来修改一下上面的表单。
1)选择我们刚才创建的表单,进行修改
2)下面是表单设计器,同时会打开表单控件面板和属性面板
3)选择表格控件,并在表单中单击,把控件添加到表单中。
4)使用表格生成器来使表格与数据表之间绑定。
5)选择显示的字段。
6)设置显示样式
7)修改表格字段显示的标题。
8)点击OK完成修改,关闭设计器并保存修改,使用项目管理器运行表单查看最终效果。
9)对于由向导生成的控件,可以通过属性面板进行修改,如改变标题显示(caption)。
10)通过上述方式,多加测试,掌握表单设计的基本方法。
四、完成其他表单
1)部门信息管理:
这里要用到一个Activex控件,方法是,打开“工具”菜单,选项中选择控件面板,找到如下图的控件:
后从控件面板中选择如下:
就可以看到我们选择的组件,拖放到表单中就可以了。
2)员工信息管理
3)登录表单
4)管理员管理表单
5)用户密码修改表单
6)提示信息管理表单
7)提示信息添加表单,这里用了一个时间控件,如TreeView控件一样,自行添加进来即可。
8)提示信息显示表单
实验六编写代码
本实验分三次完成,主要实现程序的所有代码,了解程序开发过程及代码开发技巧。
一、创建系统主程序
主程序是所编写程序的入口,主要设置运行环境、定义变量、常量,然后调用其他表单,本程序文件保存为main.prg。
CLEAR
CLEARALL
*把系统菜单隐藏掉
SETSYSMENUoff
*程序运行时不允许使用ESC键退出
SETESCAPEOFF
*关闭命令显示
SETTALKOFF
*覆盖时不要确认
SETSAFETYOFF
*设置时间格式,使用四位显示年代
SETCENTURYon
SETDATEYMD
*定义一个公共变量,保存当前用户信息
PUBLICcuruser
*调用登录表单
DOFORMforms\login
*进入事务处理,当执行cleanevents时结束
READevents
*当结束循环时执行退出
quit
二、编写登录表单的代码
打开实验五中已经制作的Login表单,修改控件相应属性。
控件
属性
值
组合框
Name
uname
Rowsource
manager.uname
Rowsourcetype
6-fields
Style
2-dropdownlist
文本框
Name
Upwd
Passwordchar
*
表单
Autocenter
True
Borderstyle
2-固定对话框
Closble
F
Caption
用户登录
controlbox
F
MaxButton
F
MinButton
F
Name
Frmlogin
Showwindow
作为顶层表单
Windowtyp
模式
选中表单,从属性面板中找到init事件,添加如下代码:
*定义一个公共变量来保存登录次数
PUBLIClogincount
logincount=0
双击登录按钮,打开按钮的click事件:
IFALLTRIM(thisform.uname.Value)==""then
MESSAGEBOX("没有选择用户名!
!
")
ELSE
LOCATEFORuname=ALLTRIM(thisform.uname.value)
IFALLTRIM(thisform.upwd.Value)=ALLTRIM(upwd)then
curuser=thisform.uname.value
thisform.Release
DOFORMforms\main
return
ELSE
logincount=logincount+1
IFlogincount<3then
thisform.upwd.Value=""
thisform.upwd.SetFocus
MESSAGEBOX("您的密码输入错误,请重新输入!
!
",16,"错误")
ELSE
MESSAGEBOX("对不起,错误次数已达3次,不能进入系统!
!
",16,"报歉")
thisform.Release
CLEAREVENTS
CLOSEALL
quit
endif
endif
ENDIF
为退出添加click事件:
thisform.Release
CLEAREVENTS
quit
三、编写主表单程序代码
主表单主要是起到调用其他表单的作用,在这里我们添加一个菜单和一个工具栏,从而了解如何创建表单与工具栏,以及如何在程序中使用它们。
创建主表单,保存为main,设置属性如下:
控件
属性
值
表单
Autocenter
True
Caption
企业员工管理系统
Height
600
Width
600
MDIform
T
Name
Frmmain
Showwindow
作为顶层表单
Windowtyp
模式
创建菜单,在项目管理器中选择“其他”选项卡,选中菜单,新建:
选择Menu,先制作如图的菜单
然后选择菜单“显示->常规选项”
选中“顶层表单”,设计表单时要注意的问题是,需要生成,而且每一次改动后都需要生成,否则使用的菜单是未生成前的菜单。
“菜单->生成菜单”:
好了,下面我们把菜单加入到主表单中去。
打开主表单,添加“init”事件:
DOmenu\main.mprWITHthis
*这里的菜单地址,请根据自己的保存位置确定。
这里保存到menu文件件下了。
可以运行主表单看一下效果了。
下面制作工具栏,选择“类”选项卡,新建类:
从ToolBar类继承制作自己的工具栏,添加按钮,图片资源可以从FTP得到。
设置Showwindow属性值为“在顶层表单中”。
因为工具栏是与表单一级的对象,所以表单中不能容纳工具栏,所以需要建立一个表单集来放置表单与工具栏,打开主表单,使用“表单”菜单中的“新建表单集”建立表单集对象,这时我们使用代码的方式把工具栏加入到主表单中去,设置表单集的init事件。
PUBLICisCreateToolbar
isCreateToolbar=0
再在Activate事件中添加如下代码:
IFisCreateToolbar=0
isCreateToolbar=1
*加载类
SETCLASSLIBTOlib\myclass
*使用类创建对象
this.AddObject("tool1","mytoolbar")
this.tool1.show
*把工具栏停放在表单的上部
this.tool1.dock(0)
endif
这时运行主表单,效果如下:
四、编写管理员管理代码
控件
属性
值
表格
Name
gmanager
Enabled
False
Recordsource
Manager
表单
BufferMode
1
Caption
操作员管理
Name
frmmanager
Showwindow
在顶层表单中
打开表单的数据环境,选择manager表。
设置其属性。
buffermodeOveride:
2,Exlusive:
True
添加按钮的click事件:
thisform.gManager.Enabled=.T.
APPENDBLANK
GObottom
thisform.gManager.coLUMN1.text1.SetFocus
thisform.Refresh
修改按钮的click事件:
thisform.gManager.Enabled=.t.
保存按钮的click事件:
YN=MESSAGEBOX("确定保存",4+32,"企业员工管理系统")
IFYN=6then
IFTABLEUPDATE(.f.)=.f.then
MESSAGEBOX("保存出错")
ELSE
thisform.Refresh
ENDIF
ENDIF
thisform.gmanager.Enabled=.f.
取消按钮的click事件:
IFMESSAGEBOX("确认取消",4+32,"企业员工管理系统")==6then
TABLEREVERT(.f.)
ENDIF
thisform.gmanager.Enabled=.f.
thisform.Refresh
删除按钮的click事件:
IFMESSAGEBOX("确定删除",32+4,"企业员工管理系统")==6then
SELECTmanager
DELETE
thisform.gmanager.RecordSource=null
PACK
thisform.gmanager.RecordSource="manager"
IFEOF()
SKIP-1
ELSE
IFBOF()
SKIP
ENDIF
ENDIF
thisform.Refresh
endif
五、提示信息添加代码
控件
属性
值
Dateandtimerpicker
Name
msgdate
文本域
name
msgcontent
保存按钮click事件:
SETDATEYMD
SETCENTURYon
mdate=TTOD(thisform.msgdate._value)
mcontent=ALLTRIM(thisform.msgcontent.Value)
IFEMPTY(mdate).and.EMP