数据库课程设计报告
学 号:20121004357
姓 名: 李世荣
班 级: 191123
指导老师: 胡霍真
邮件管理系统
摘要
21 世纪是网络飞速发展的时代,电子邮件已经成为热门话题。随着网络技术的不断发展,网络应用已经渗透到人类社会的各个角落。作为网络世界信息传输的支撑点的电子邮件,更是人们关注的焦点。通过电子邮件无论朋友在何方,都可以通过电子邮件方便的联系交流,电子邮件开辟网络世界里的一片天地。电脑的日益普及,大大改变了各行各业的工作方式和人们的生活方式,越来越多的人开始进入到电脑的世界。电脑的普及化,进而促进了互联网的进一步的发展和完善,而作为互联网上基本的存在电子邮件给予了上网的电脑用户另一个别样的空间。因此,这次我们采用了Oracle 12c数据库,使用Visual C++数据库编程的方法以及MFC ODBC数据库开发技术来开发一个简单的邮件管理系统。我们可以通过这个系统来管理我们的邮件,让我们之间的邮件交流更加的方便快捷。
关键字:Oracle 12c,Visual C++,MFC ODBC,管理邮件。
一、系统需求分析
进行系统设计,首先要对系统的现状进行分析。根据系统的目标、需求和功能,制定和选择一个较好的系统方案,从而达到一个合理的优化系统。需求分析是在于要弄清用户对开发的数据库应用系统的确切要求。数据库设计的第一步是明确数据库的目的和如何使用,也就是说需要从数据库中得到哪些信息。明确目的之后,就可以确定您需要保存哪些主题的信息,以及每个主题需要保存哪些信息。在构造系统时,首先从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统。
(1)本系统是为了更好地管理我们的邮件,更方便的交流,因此我认为可以分为以下几个小系统:用户登录,联系人信息的管理,邮件类型管理,邮件记录管理。能够实现以下功能:
1、联系人的增删修改;
2、邮件的新建,发送,查询;
3、邮件类型的增删修改;
4、邮件记录的查询删除。
(2)数据处理对象:
1、联系人信息:联系人ID,联系人姓名,联系人E-mail地址;
2、邮件类型信息:邮件类型ID,邮件类型名称;
3、邮件记录信息:记录ID,收件人ID,发送时间,是否有附件,邮件类型ID,邮件内容;
(3)系统处理的功能及要求:
1、能够储存一定数量的联系人信息,并能对其进行相关的操作,包括联系人的增加,修改,删除;
2、能够储存一定数量的邮件类型信息,并能对其进行相关操作,包括类型的增加,删除,修改;
3、能够储存一定数量的邮件记录信息,并能对其进行相关操作,包括邮件的发送,查询邮件记录,删除记录;
4、能够与数据库连接,并且有一定的安全机制,保证数据库的授权访问,防止他人随意访问,造成个人隐私的泄露。
(4)邮件管理系统功能结构图如下:
(5)业务流程图:
(6)数据流程图:
顶层数据流程图:
用户管理联系人信息数据流程图:
用户管理邮件类型信息数据流程图:
用户管理及查询邮件记录数据流程图:
二、E-R图
联系人信息实体-关系图
邮件类型信息实体-关系图
邮件记录信息实体-关系图
联系人-邮件记录关系图 邮件类型-邮件记录关系图
三、系统详细设计
1、根据上述概念模型设计得出的E-R图,可以得出系统中涉及的主要实体有三个,其结构如下:
?、联系人:contact_info_tab(contact_id,contact_name,E-mail)
?、邮件类型:email_type_tab(type_id,type_name)
?、邮件记录:email_record_tab(record_id,contact_id,send_date,is_fujian,type_id,email_info)
进而设计并完善表格如下
联系人基本信息表(contact_info_tab)
邮件类型信息表(email_type_tab)
邮件记录基本信息表(email_record_tab)
2、数据库实施阶段
(1)、建立数据库
Create database email;
(2)、建立数据表
创建联系人信息表
Create table contact_info_tab(
Contact_id number primary key,
Contact_name varchar2(16)not null,
E_mail varchar2(24)not null
);
创建邮件类型信息表
Create table email_type_tab(
Type_id number primary key,
Type_name varchar2(16)not null
);
创建邮件记录信息表
Create table email_record_tab(
Record_id number primary key,
Contact_id number references contact_info_tab(contact_id)not null,
Send_date date not null,
Is_fujian number not null check(is_fujian in(0,1)),
Type_id number references email_type_tab(type_id),
Email_info varchar2(128)not null
);
(3)自行设计好主界面后,在主界面上添加控件,并设置属性使其可用,为各个控件添加变量或类,注意要将各控件的ID进行修改。利用InitListControl这个函数负责添加控件的显示列。
读取数据库中的信息添加到主界面,需要在类中定义一个InitListData私有函数,负责从数据库中读取数据并显示到列表控件中,同时还需定义三个分别读取数据到列表控件中de函数。
连接数据库时需先配置ODBC数据源,配置添加的用户,配置成功后,在主类中创建CDatabase的对象m_db,之后在OnBtnConn函数中处理数据库的连接,即可完成用户与数据库的连接。
在连接数据库成功后,即可对联系人信息管理和邮件记录管理的对话框进行设计,并添加对话框控件以及各个控件的变量和函数,之后完善添加、修改、删除联系人的代码,并调试成功。
四、遇到的问题及解决
1、在第二章的SQL developer里边改变用户默认表空间时,在/as sysdba弹出的工作表里输入语句“alter user c##hannah default tablespace users;”,运行语句后脚本里并未输出“user C##HANNAH已变更。”
在询问了同学之后,找到了解决方法。就是先把C##HANNAH的三个表删除,再重新创建,最后解决了这个问题。
2、在添加控件显示列的时候,运行后,无法跳出界面
在联系人信息管理、邮件信息管理、邮件类型管理三块添加的list control控件的view属性改成Report,改完之后出现了界面。
3、由于课本上的代码是VC6.0环境下的代码,所以有时出现的问题确实找不到原因,经过不断地查找和同学交流之后,才知道VS2012和VC6.0的环境不同,所以有些代码的需要小小的改动。
五、课程设计心得体会
1、 这次课程设计加深了我对数据库系统概论相关知识的理解。例如对建立基本表、视图、索引、存储过程等,都比以前更加的熟练。并在解决遇到的各种问题的过程中,学到了很多新的知识。比如在导入\导出数据时,由于外键约束的存在,经常会出现错误,这就要注意各个表导入的顺序问题。一般是先导入主键表,后导入外键表,这样可以避免很多的错误。
2、我进一步掌握了相关的SQL语句方面的知识。不但纠正了以前的错误认识和理解,而且学会了建立存储过程和触发器。通过查阅资料,我还明白了存储过程是编译后放在服务器端的程序,它可以被别的模块调用,且不需要重新编译,这样就大大减轻了客户端的负担,且有效的提高了系统执行的效率。
3、当然,在实习的过程中也存在一些问题。由于需求分析阶段的工作完成的不是很充分,在后面的设计过程中,前后时常会出现矛盾,不一致现象,因此要反复的修改前面的结果,导致整个工作进行的不是很顺利。我觉得在这次课程设计中,需求分析阶段是致关重要的,但由于同学们都是第一次做这样的系统设计,都不是很熟悉需求分析的主要方法和主要任务,所以都很盲目,认为随便从网上搜点相关的知识就可以了,但其实,这直接影响着后面的各个阶段的工作的进行。
参考文献:
1、数据库系统概念,Abraham Silberschatz,Henry F. Korth, S. Sudarshan著,杨冬青,李红燕,唐世渭译,机械工业出版社;
2、数据库课程设计实验教程,胡霍真,朱莉著,中国地质大学出版社;
3、软件开发与指导,人民邮电出版社。
第二篇:《SQL Server 数据库》数据库存储过程、触发器的创建于管理实验报告
北 华 航 天 工 业 学 院
《数据库系统管理》
实验报告
报 告 题 目 :
存储过程、触发器的创建于管理
所 在 系 部 :计算机科学与工程系
所 在 专 业 :网络工程专业
学 号 :
姓 名 :
教 师 姓 名 :
完 成 时 间 : 2011 年 10 月 19 日
北华航天工业学院教务处制
存储过程、触发器的创建与管理
一、 实验目的
1、 掌握存储过程的概念、优点、特点及用途;
2、 掌握创建、执行、查看、修改和删除存储过程的方法;
3、 了解触发器和一般存储过程的区别、概念及优点;
4、 掌握创建、查看、修改和删除触发器的方法。
二、 实验内容
(一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。
(二)练习创建和管理存储过程
1、使用管理控制台创建一个名为“计算机系借阅信息_PROC”的无参存储过程,要求显示计算机系读者20##-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段,并执行该存储过程,查看显示结果。
2、使用T-SQL语句创建一个名为“读者借阅信息_PROC”的带参数的存储过程,要求根据输入的读者的编号显示读者的所有借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段,并执行该存储过程,查看显示结果。
create proc 读者借阅信息_PROC1
@dzbh char(10)
as
begin
select tb_reader.读者编号,姓名,系部,
tb_book.图书编号,书名,借阅日期
from tb_book,tb_reader,tb_borrow
where tb_book.图书编号=tb_borrow.图书编号
and tb_reader.读者编号=tb_borrow.读者编号
and tb_reader.读者编号=@dzbh
end
--
declare @srcs char(10),@fhzt int
set @srcs='R10009'
exec @fhzt=读者借阅信息_PROC1 @srcs
print '执行状态值为'+cast(@fhzt as varchar(10))
3、使用T-SQL语句创建一个名为“图书借阅信息_PROC”的带参数的存储过程,要求根据输入的图书编号计算该图书的借阅数量,并根据程序执行结果返回不同的值,执行成功返回0,不成功返回错误号,并执行该存储过程,输出图书编号、借阅数量和程序结果返回值。
create proc 图书借阅信息_PROC1
@tsbh char(10),@jysl int output
as
begin
declare @ztz int
set @ztz=0
select @jysl=count(distinct 读者编号)
from tb_borrow where 图书编号=@tsbh
if @@error<>0
set @ztz=@@error
return @ztz
end
--
declare @sccs int,@fhz int,@srcs char(10)
set @srcs='10003'
exec @fhz=图书借阅信息_PROC1 @srcs,@sccs output
select @srcs,@sccs,@fhz
4、使用管理控制台查看“读者借阅信息_PROC”存储过程的定义信息和依赖的对象。
5、使用系统存储过程查看“计算机系借阅信息_PROC”存储过程的定义信息和依赖的对象。
sp_helptext
sp_depends
6、使用T-SQL语句创建一个名为“删除读者信息_PROC”的存储过程,要求根据所提供的读者编号,删除该编号所对应的读者,如果不存在此编号的读者,则显示“该编号的读者不存在!”。创建完成之后,执行上述存储过程,观察执行结果。
create proc 删除读者信息_PROC1
@dzbh char(10)
as
begin
if exists(select * from tb_reader
where 读者编号=@dzbh)
begin
delete from tb_borrow where 读者编号=@dzbh
delete from tb_reader where 读者编号=@dzbh
end
else
print '该编号的读者不存在!'
end
exec 删除读者信息_PROC1 'R10010'
7、使用T-SQL语句创建一个名为“修改借阅信息_PROC”的存储过程,要求根据所提供的读者编号和天数,将该读者的归还日期增加相应的天数,如果不存在该读者的借阅信息,则显示“该读者没有借阅图书!”。创建完成之后,执行上述存储过程,观察执行结果。
create proc 修改借阅信息_PROC1
@dzbh char(10),@ts int
as
begin
if exists(select * from tb_borrow
where 读者编号=@dzbh)
update tb_borrow
set 归还日期=dateadd(day,@ts,归还日期)
where 读者编号=@dzbh
else
print '该读者没有借阅图书!'
end
--
exec 修改借阅信息_PROC1 @ts=3,@dzbh='R10003'
8、使用管理控制台删除“读者借阅信息_PROC”存储过程。
9、使用T-SQL语言删除“计算机系借阅信息_PROC1”存储过程。
drop proc 计算机系借阅信息_PROC1
(三)练习创建和管理触发器
1、使用管理控制台创建一个名为“读者信息插入_TRIG”的触发器,要求在“读者信息表”表中插入一条新记录时触发该触发器,并给出“插入了一条新记录!”的提示信息。并在“读者信息表”中插入一条记录查看显示结果。
2、使用T-SQL语句创建一个名为“借阅信息插入修改_TRIG”的触发器,要求在“借阅信息表”中插入或修改记录时触发该触发器,检查“归还日期”是否超过20##年12月31日,如果超过给出相应提示,提示中给出“归还日期”超过20##年12月31日的“图书编号”和“读者编号”。
create trigger 借阅信息插入修改_TRIG
on tb_borrow
for insert,update
as
begin
declare @date datetime,@bookno char(10),@readerno char(10)
select @date=归还日期,@bookno=图书编号,@readerno 读者编号
from inserted
if @date>'20##-12-31'
begin
print 'date more than 20##-12-31'
select @bookno 图书编号,@readerno 读者编号
end
end
insert into tb_borrow values('10011','R10004','20##-11-4','20##-2-2')
3、使用T-SQL语句实现该数据库中各表间的级联删除。
4、使用T-SQL语句创建一个插入、更新类型的触发器“图书信息_TRIG”,当图书信息表中插入或修改记录时,触发该触发器,检查库存册数是否大于0,若小于0,则撤销插入和修改操作。
create trigger 图书信息_TRIG
on tb_book
for insert,update
as
begein
print 'begin trigger'
declare @kccs int
select @kccs=库存数from inserted
if @kccs<0
rollback
end
insert into tb_book values('11001',2,'eee','ddd','ggg',29,-1)
update tb_book set 库存数=-2 where 图书编号='10002'
5、使用管理控制台查看“读者信息插入_TRIG”触发器的依赖的对象。
6、使用系统存储过程查看“借阅信息插入修改_TRIG”触发器的定义信息和依赖的对象。
7、使用管理控制台删除“读者信息插入_TRIG”触发器。
8、使用T-SQL语言删除“借阅信息插入修改_TRIG”触发器。
drop trigger 借阅信息插入修改_TRIG