数据库课程设计报告 目录目录……………………………………………………………………………………1一.设计目标…………………………………………………………………………2二.系统介绍…………………………………………………………………………2三.数据库设计……………………………………………………………………....21.需求分析……………………………………………………………………….22.概念结构设计………………………………………………………………….3 (1)实体设计………………………………………………………………..3 (2)ER图……………………………………………………………………33.逻辑结构设计………………………………………………………………….4四.应用程序设计……………………………………………………………………41.delphi7.0开发环境……………………………………………………………4 2.软件分析…………………………………………………………………..…4 (1)软件的需求分析………………………………………………………..4 (2)软件的基本功能………………………………………………………..5 3.软件的设计与实现…………………………………………………………….6 五.实现的应用系统介绍…………………………………………………………….81.系统模块…………………………………………………………………….82. 文件简介…………………………………………………………………….83 .系统运行…………………………………………………………………….8 六.总结………………………………………………………………………………17 一.设计目标理论应用--运用数据库设计理论设计一个较完善的有实际意义的数据库结构;工具使用--掌握目前流行数据库管理系统工具和前端应用开发工具;应用开发--为数据库开发相应应用程序,构成完整的数据库应用系统;报告编写--用文字处理软件编写高质量的设计报告。二.系统简介名称:超市进销存管系统功能:基于超市管理的全面自动化,减少入库管理、出库管理及
库存管理中的漏洞,节约不少管理开支,增加企业收入。 实现对产品的增加、修改、删除、以及日常查询,对产品的出库、入库进行管理。同时对营销状况进行简单的分析,并可以导出各种查询报表。数据库:ACCESS实现:Delphi 7.0系统构架:C/S(Client/Server )三.数据库设计.1.需求分析:超市进销存管理系统2.概念结构设计(1)实体设计
商品信息(商品编号,商品名称,商品单位,商品单价,类别,产地,说明)进货信息(进货编号,商品编号,进货单价,进货数量,进货时间,经手人,供货单位)
出货信息(出货编号,商品编号,出货单价,出货数量,经手人,接收人及说明等)库存信息(商品编号,库存说明,说明等)用户信息(用户名,密码,用户类型)(2)E-R图包含说明产地商品单价商品类别商品名称商品编号商 品经手人进货数量进货时间进货单价商品编号进货编号供货单位进货记录商品编号出货数量接收人经手人出货单价出货编号出货时间出货记录库存记录说明商品编号库存说明111n3.逻辑结构设计关系模型(第1数据项为主键)商品信息(商品编号,商品名称,商品单位,商品单价,类别,产地,说明)进货信息(进货编号,商品编号,进货单价,进货数量,进货时间,经手人,供货单位)出货信息(出货编号,商品编号,出货单价,出货数量,经手人,接收人及说明等)库存信息(商品编号,库存说明,说明等)用户信息(用户名,密码,用户类型)出货商品金额(出货时间,出货单价,出货数量,出货金额)进货商品金额(进货时间,进货单价,进货数量,进货金额)四.应用程序设计1.Delphi 7.0 开发环境Delphi被称为第四代编程语言,它具有简单、高效、功能强大的特点。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用。可以说Delphi同时兼备了VC功能强大和VB简单易学的特点。它一直是程序员至爱的编程工具。Delphi 7的集成开发环境(1DE)和Delphi以前的版本基本一致。它把单、多个工具栏及一组窗口和应用程序设计在一起,将代码以事件的形式与界面的每一元素建立联系,使用户很方便地在这个高度集成的开发环境的组成和各种辅助工具的使用方法和使用技巧。2.软件分析(1)软件的需求分析:开发本软件的主要目的是为了优化超市的日常管理。采用计算机管理信息系统为实现超市管理科学化和现代化,给它带来了明显的经济效益和社会效益 (2)软件的基本功能与说明:a.商品信息管理商品信息管理:用来管理系统中要用来进行进货,出货 *** 作的商品的信息,包括添加,修改,删除和查询信息。其中,查询可以进行精确查询和模糊快速查询。任意时刻,生成当前表格报表。 b. 用户管理1.用户添加该权限只有管理员拥有,可以添加临时用户,或者增设管理员用户。2.用户删除该权限只有管理员拥有,可以删除用户。3.用户密码修改用来修改登陆用户的密码,长时间地使用一个密码可能会使密码不安全,导致整个系统的不安全,因此有必要定期修改密码。 c. 营销分析1.综合分析某一时间段内,将该超市的进货总额、出货总额进行统计,并算出总盈利;将库存中的商品总量统计出来。用户可以打印分析所得报表。同时提供进货情况查询、出货情况查询、库存情况查询。2.日分析某一天中,将该超市的进货总额、出货总额进行统计,并算出总盈利;将库存中的商品总量统计出来。用户可以打印分析所得报表。 d. 日常 *** 作商品进货 *** 作:用来完成商品的进货 *** 作。商品出货 *** 作:用来完成商品的出货 *** 作。进行进货 *** 作时,进货编号以及进货时间是自动生成的,无需改动,否则会出现错误。所生成的商品编号为该种类型商品的最大编号,且后面有提示用户允许的编号范围,超出此范围会出错,如果编号方式正确且大于最大编号,确定添加后会提示用户填写新加商品的相关信息。进行出货 *** 作时,出货编号自动生成,用记无须改动。在出货单价小于进货的最小单价时会询问是否继续出货,出货数量不能大于库存数量。e.信息查询1.库存信息查询:用来查询库存的商品的信息,可以按照商品编号,商品名称和商品类别来查询,可以将查询结果打印输出。该查询可以精确查找某一确定的商品的库存信息,并将其打印输出。同时,该查询可以根据商品的库存量来将商品中库存不足、库存饱和、库存过剩的商品一一列出并提供打印输出功能。2.进货信息查询:用来查询商品的进货记录,可以按照商品编号,商品名称,商品类别,经手人和进货日期查询,可以将查询结果输出。该查询可以精确查找某一确定的商品或全部商品某一确定时间段的进货情况,并将其打印输出。同时以图表的形式分析该种商品的进货价格走势分析图。3.出货信息查询:用来查询商品的出货记录,可以按照商品编号,商品名称,商品类别,经手人和出货日期查询,可以将查询结果打印输出。该查询可以精确查找某一确定的商品或全部商品某一确定时间段的出货情况,并将其打印输出。同时以图表的形式分析该种商品的出货价格走势分析图。3.软件设计与实现添加、修改、删除是通过delphi自带函数实现的。查询是通过添加SQL语句或者直接在access中建立相对的查询(如出货商品金额、进货商品金额查询)实现的。(1).程序实现//添加adoquery1.Closeadoquery1.SQL.Clearadoquery1.SQL.Add('select * from 进货信息' )adoquery1.Open adoquery1.Appendadoquery1.fieldbyname('进货编号').asstring:=edit1.Textadoquery1.fieldbyname('商品编号').asstring:=edit2.Textadoquery1.fieldbyname('进货单价').asstring:=edit3.Textadoquery1.fieldbyname('进货数量').asstring:=edit4.Textadoquery1.fieldbyname('进货时间').asstring:=edit5.Textadoquery1.fieldbyname('经手人').asstring:=combobox5.Textadoquery1.fieldbyname('供货单位').asstring:=edit7.Textadoquery1.Post快速添加:adoquery1.Append//删除一条记录if Application.MessageBox('真的要删除当前所选记录吗?','删除确认',MB_YESNOCANCEL+MB_ICONQUESTION+MB_DEFBUTTON3)<>IDYES thenabortelseadoquery1.delete//修改一条记录ifApplication.MessageBox('真的要修改当前所选记录吗?','修改确认',MB_YESNOCANCEL+MB_ICONQUESTION+MB_DEFBUTTON3)<>IDYES then AdoQuery1.CancelUpdateselseadoquery1.edit//对表的排序procedure TForm2.DBGrid1TitleClick(Column: TColumn)var i : integerbeginfor i:= 1 to DBGrid1.Columns.Count dobegin//恢复所有标题字体为默认DBGrid1.Columns[i-1].Title.Font.Color := clWindowTextDBGrid1.Columns[i-1].Title.Font.Style := []endif ADOQuery1.Sort<>(Column.FieldName+' ASC') then //判断原排序方式beginADOQuery1.Sort := Column.FieldName+' ASC'Column.Title.Font.Color := clRed//改变标题行字体为红色,表示当前的排序方式为升序Column.Title.Font.Style := [fsBold]endelse beginADOQuery1.Sort := Column.FieldName+' DESC'Column.Title.Font.Color := clBlue//改变标题行字体为红色,表示当前的排序方式为降序Column.Title.Font.Style := [fsBold]endend//查询示例adoquery2.closeadoquery2.sql.clearadoquery2.SQL.Add('select distinct(进货信息.进货编号),商品信息.商品名称,进货信息.商品编号,商品信息.类别,进货信息.进货单价,进货信息.进货数量,进货信息.进货时间,进货信息.经手人,进货信息.供货单位 from 进货信息,商品信息 where 商品信息.商品编号=进货信息.商品编号 and ')adoquery2.SQL.Add('进货时间>=#'+DateToStr(DateTimePicker1.Date)+'# and 进货时间<=#'+DateToStr(DateTimePicker2.Date+1)+'#')adoquery2.Open*五.实现的应用系统介绍1.系统的模块(1)主界面模块Form1(2)信息管理模块Form2,form18(3)日常 *** 作模块Form3(4)信息管理模块Form5(5) 用户管理模块Form14(6)系统管理模块用户登陆:form8关于系统:form10退出系统:from11()登陆窗体Form82.文件简介:(1)文件help包括生成jun_help帮助的所有源程序。(2)文件image系统所有用到的图片文件(3) 文件project系统可执行文件project.exe。系统数据库超市进销存储管理系统.mdb(4) 文件sounds系统所有用到的声音文件(5) 文件unit_date系统自动生成的相关文件3.系统运行:1.欢迎:2.到达主界面后,提示登陆(系统管理—登陆系统)。用户可以查看帮助获得系统的相关信息:3.用户登陆界面:4.若用户为管理员,则可以进行用户管理 *** 作。用户有权添加、修改、删除其它用户。5.若用户为普通用户,则用户只能对自己的相关信息进行修改,添加用户、删除用户不可用。6.商品信息管理模块商品信息管理:用来管理系统中要用来进行进货,出货 *** 作的商品的信息,包括添加,修改,删除和查询信息。其中,查询可以进行精确查询和模糊快速查询。任意时刻,生成当前表格报表。7.营销分析模块:1).综合分析某一时间段内,将该超市的进货总额、出货总额进行统计,并算出总盈利;将库存中的商品总量统计出来。用户可以打印分析所得报表。同时提供进货情况查询、出货情况查询、库存情况查询。2).日分析某一天中,将该超市的进货总额、出货总额进行统计,并算出总盈利;将库存中的商品总量统计出来。用户可以打印分析所得报表。8.商品进出货 *** 作模块:1)进行进货 *** 作时,进货编号以及进货时间是自动生成的,无需改动,否则会出现错误。所生成的商品编号为该种类型商品的最大编号,且后面有提示用户允许的编号范围,超出此范围会出错,如果编号方式正确且大于最大编号,确定添加后会提示用户填写新加商品的相关信息。2)进行出货 *** 作时,出货编号自动生成,用记无须改动。在出货单价小于进货的最小单价时会询问是否继续出货,出货数量不能大于库存数量。9.信息查询模块:1).库存信息查询:用来查询库存的商品的信息,可以按照商品编号,商品名称和商品类别来查询,可以将查询结果打印输出。该查询可以精确查找某一确定的商品的库存信息,并将其打印输出。同时,该查询可以根据商品的库存量来将商品中库存不足、库存饱和、库存过剩的商品一一列出并提供打印输出功能。2).进货信息查询:用来查询商品的进货记录,可以按照商品编号,商品名称,商品类别,经手人和进货日期查询,可以将查询结果输出。该查询可以精确查找某一确定的商品或全部商品某一确定时间段的进货情况,并将其打印输出。同时以图表的形式分析该种商品的进货价格走势分析图。3).出货信息查询:用来查询商品的出货记录,可以按照商品编号,商品名称,商品类别,经手人和出货日期查询,可以将查询结果打印输出。该查询可以精确查找某一确定的商品或全部商品某一确定时间段的出货情况,并将其打印输出。同时以图表的形式分析该种商品的出货价格走势分析图。10关于系统模块:11.用户管理模块:1).用户添加该权限只有管理员拥有,可以添加临时用户,或者增设管理员用户。2).用户删除该权限只有管理员拥有,可以删除用户。3).用户密码修改用来修改登陆用户的密码,长时间地使用一个密码可能会使密码不安全,导致整个系统的不安全,因此有必要定期修改密码。12.退出系统模块:有现成的系统,主要完成药品进货管理、供货商管理、采购记录入库、出货查询、过期药品管理、库存查询、新药品管理、出货管理等功能。
--------------------------------------------
附上数据库脚本:
CREATE VIEW [dbo].[详细药品]
AS
SELECT dbo.药品分类代码表.ypcode, dbo.药品分类代码表.ypname, dbo.药品信息表.guige,
dbo.药品信息表.[function], dbo.药品信息表.chengfen, dbo.药品信息表.yongliang,
dbo.药品信息表.referenceprice
FROM dbo.药品信息表 INNER JOIN
dbo.药品分类代码表 ON dbo.药品信息表.ypcode = dbo.药品分类代码表.ypcode
GO
/****** 对象: View [dbo].[库存信息]脚本日期: 05/25/2012 14:32:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[库存信息]
AS
SELECT dbo.药品库存表.ypcode, dbo.药品库存表.productdate, dbo.药品库存表.kcamount,
dbo.药品分类代码表.ypname, dbo.药品信息表.referenceprice,
dbo.药品库存表.yxqz
FROM dbo.药品分类代码表 INNER JOIN
dbo.药品库存表 ON
dbo.药品分类代码表.ypcode = dbo.药品库存表.ypcode INNER JOIN
dbo.药品信息表 ON dbo.药品库存表.ypcode = dbo.药品信息表.ypcode
GO
/****** 对象: StoredProcedure [dbo].[gqyp_insert]脚本日期: 05/25/2012 14:32:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[gqyp_insert]
@ypcode char(50),
@yxqz smalldatetime,
@deal char(50)='焚烧'
as
insert into 过期药品出库登记(ypcode,yxqz,deal,ckamount)
select 药品库存表.ypcode,药品库存表.yxqz,@deal,药品库存表.kcamount
from 药品库存表
where 药品库存表.ypcode=@ypcode and 药品库存表.yxqz=@yxqz
delete from 药品库存表
where ypcode=@ypcode and yxqz=@yxqz
GO
/****** 对象: Table [dbo].[药品分类代码表]脚本日期: 05/25/2012 14:32:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[药品分类代码表](
[ypcode] [char](12) NOT NULL,
[ypname] [char](50) NULL,
CONSTRAINT [PK_药品分类代码表] PRIMARY KEY CLUSTERED
(
[ypcode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** 对象: Table [dbo].[供货商信息表]脚本日期: 05/25/2012 14:32:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[供货商信息表](
[ghno] [char](50) NOT NULL,
[ghname] [char](50) NULL,
[city] [char](50) NULL,
[phone] [char](50) NULL,
CONSTRAINT [PK_供货商信息表] PRIMARY KEY CLUSTERED
(
[ghno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** 对象: StoredProcedure [dbo].[insert_采购信息表_1]脚本日期: 05/25/2012 14:32:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[insert_采购信息表_1]
(@采购单号_1 [int],
@采购时间_2 [smalldatetime],
@药品代码_3 [char](50),
@供货商号_4 [char](50),
@进价_5 [float],
@采购数量_6 [int],
@金额_7 [float],
@采购员编号_8 [char](50))
AS INSERT INTO [医院药品进销存系统].[dbo].[采购信息表]
( [采购单号],
[采购时间],
[药品代码],
[供货商号],
[进价],
[采购数量],
[金额],
[采购员编号])
VALUES
( @采购单号_1,
@采购时间_2,
@药品代码_3,
@供货商号_4,
@进价_5,
@采购数量_6,
@金额_7,
@采购员编号_8)
GO
/****** 对象: StoredProcedure [dbo].[kcsearch]脚本日期: 05/25/2012 14:32:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[kcsearch]
@no char(50)
as
select 药品库存表.ypcode,ypname,kcamount,productdate,yxqz
from 药品库存表,药品分类代码表
where 药品库存表.ypcode=药品分类代码表.ypcode and 药品库存表.ypcode=@no
GO
/****** 对象: StoredProcedure [dbo].[kcsearch_name]脚本日期: 05/25/2012 14:32:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[kcsearch_name]
@name char(50)
as
select 药品库存表.ypcode,ypname,kcamount,productdate,yxqz
from 药品库存表,药品分类代码表
where 药品库存表.ypcode=药品分类代码表.ypcode and ypname=@name
GO
/****** 对象: Table [dbo].[采购人员信息]脚本日期: 05/25/2012 14:32:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[采购人员信息](
[cgyno] [char](50) NOT NULL,
[cgyname] [char](50) NULL,
[sex] [char](10) NULL,
[cgyphone] [char](50) NULL,
[email] [char](50) NULL,
CONSTRAINT [PK_采购人员信息] PRIMARY KEY CLUSTERED
(
[cgyno] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
-----------------------------------
需要可与本人联系。
答案如下:
1)创建教师表、课程表和教师授课表
create table Teacher
( Tno char(5) primary key,
Tname char(8),
Tsex char(2),
Tbirth int,
Tdept varchar(30)
)
create table Course
( Cno char(3) primary key,
Cname varchar(30),
Cpno char(3),
Ccredit int
)
create table 教师授课表
( Tno char(5),
Cno char(3),
time datetime
)
2)在教师表、课程表和教师授课表上建立主外键约束
alter table 教师授课表
add (foreign key(Tno) references Teacher(Tno),
foreign key(Cno) references Course(Cno))
3)建立约束:教师表中教师年龄介于25至60之间
alter table Teacher
add check(Tbirth>=25 and Tbirth<=60)
4)向学生表插入一条记录20050204,'赵勤','女',20,'国贸系'。
insert into Student
values('20050204','赵勤','女',20,'国贸系')
5)在“课程表”的“课程号”列上创建唯一聚集索引。
create unique clustered index idx_cno on Course(Cno)
6)以“课程号”分组,统计各门课程的平均分数大于80分的行。
select Cno,avg(Grade) from SC
group by Cno
having avg(Grade)>80
7)修改学号为“20050306”的学生信息为:20050206,魏海平,男,企管系。
update Student
set Sno='20050206',Sname='魏海平',Ssex='男',Sdept='企管系'
where Sno='20050306'
8)将学号为“20050304”的学生信息从表中删除。
delete from Student
where Sno='20050304'
9)查询所有任课教师的课程,没有课程的教师对应的课程为空。
select Tname,Cname from Teacher
left outer join 教师授课表 on Teacher.Tno=教师授课表.Tno
left outer join Course on 教师授课表.Cno=Course.Cno
10)按课程分组查询计算机学院课程的最低分、最高分和平均分。
select Cno,min(Grade),max(Grade),avg(Grade)
from SC,Student
where SC.Sno=Student.Sno
group by Cno
having Sdept='计算机学院'
评论列表(0条)