数据库综合实验报告1.docx
《数据库综合实验报告1.docx》由会员分享,可在线阅读,更多相关《数据库综合实验报告1.docx(66页珍藏版)》请在冰点文库上搜索。
数据库综合实验报告1
数
据
库
综
合
实
验
报
告
企业备忘录管理系统
一、实验类别:
综合型实验
二、实验目的
1.掌握数据库设计的基本技术,熟悉数据库设计的每个步骤中的任务和实施方案,并加深对数据库系统系统概念和特点的理解。
2.初步掌握基于C/S的数据库应用系统分析、设计和实现方法。
3.进一步提高学生分析与解决问题的综合能力。
4.培养团队合作精神。
三、实验内容
在SQLServer2000数据库管理系统上,利用VC++开发工具开发一个企业备忘录系统的数据库应用系统。
四、实验过程
1.系统需求说明
在企业管理中,对于信息的处理是最重要的一环,其方式体现现在信息的采集、清理、分析、保存、失效的生命周期中。
设计一个企业备忘录管理系统,可以极大的提高企业的信息流转效率,从而提高生产率。
这个系统包含的模块主要用户登陆、备忘录类型社顶、信息录入以及特定信息采集
2.数据库结构设计
(1)系统功能
进入系统前需要身份验证
用户可以根据需要定义备忘录的信息
拥护可以定义企业员工的信息
具体的时间信息有拥护登入
根据不同的要求,可以在数据库中对时间进行查询和编辑
(2)功能模块划分
企业备忘录管理系统模块示意图
(3)系统流程分析
系统流程图
3.数据库设计
(1)数据库需求设计
企业成员基本信息:
成员ID、姓名、出生日期、性别、籍贯、职位。
备忘录类型信息:
备忘录类型ID、备忘录名称。
备忘录信息:
备忘录ID、备注企业成员ID、备忘录操作日期、备忘录发生日期、
是否有重大事件、时间花费、备忘录类型ID、备忘录内容。
(2)数据库逻辑结构设计
企业成员基本信息表
字段名称
数据类型
可否为空
约束条件
说明
member_id
INTEGER
NOTNULL
主键
成员ID
member_name
VARCHAR(24)
NOTNULL
无
姓名
birth_date
DATE
NOTNULL
无
出生日期
member_gender
VARCHAR
(2)
-
-
-
member_position
VARCHAR(10)
NULL
无
职位
备忘录类型信息表
字段名称
数据类型
可否为空
约束条件
说明
type_id
INTEGER
NOTNULL
主键
备注类型ID
type_name
VARCHAR(24)
NOTNULL
无
备注类型名称
备忘录信息表
字段名称
数据类型
可否为空
约束条件
说明
memo_id
INTEGER
NOTNULL
主键
备注信息ID、ID值从系统中获取
member_id
INTEGER
NOTNULL
外键(family_member_tab)
成员ID
oper_date
DATE
NOTNULL
无
操作备忘录信息时间
happen_date
DATE
NOTNULL
无
备忘录发生时间
is_bigevent
INTEGER
NOTNULL
无
是否为重大事件,1代表大事件
event_cost
VARCHAR(20)
NULL
无
时间花费
type_id
INTEGER
NOTNULL
外键(memo_type_tab)
备注类型ID
memo_text
CARCHAR(100)
NULL
无
备注信息
企业备忘录管理系统E-R图
4.系统实现
(1)创建数据库
创建表的SQL语句:
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES
WHERETABLE_NAME='company_member_tab')
DROPTABLEcompany_member_tab
--创建企业成员基本信息表
CREATETABLEcompany_member_tab(
member_idINTIDENTITY(1,1)PRIMARYKEY,
member_nameVARCHAR(24)NOTNULL,
member_positionVARCHAR(10),
birth_dateDATETIMENOTNULL,
member_genderVARCHAR(5),
member_hometownVARCHAR(20)
);
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES
WHERETABLE_NAME='memo_type_tab')
DROPTABLEmemo_type_tab
--创建备忘录类型信息表
CREATETABLEmemo_type_tab(
type_idINTPRIMARYKEY,
type_nameVARCHAR(24)NOTNULL
);
IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES
WHERETABLE_NAME='memo_info_tab')
DROPTABLEmemo_info_tab
--创建备忘录类型信息表
CREATETABLEmemo_info_tab(
memo_idINTNOTNULLPRIMARYKEY,
member_idINTNOTNULL,
oper_dateDATETIMENOTNULL,
happen_dateDATETIMENOTNULL,
is_bigeventINTNOTNULL
CHECK(is_bigeventIN(0,1)),
event_costVARCHAR(20),
type_idINTNOTNULL,
memo_textVARCHAR(1000)NULL,
FOREIGNKEY(member_id)REFERENCEScompany_member_tab,
FOREIGNKEY(type_id)REFERENCESmemo_type_tab
);
表的截图
企业成员基本信息表
备忘录类型信息表
备忘录信息表
(2)工程框架设计
设计主界面并增添函数
公司成员基本信息管理控件列表
控件类型
ID
属性
变量或函数
GroupBox
IDC_STATIC
公司成员基本信息管理
无
ListControl
IDC_LIST_FAMILY_MEMBER
无
列表控件类型变量m_listMember
Button
IDC_BTN_ADD_MEMBER
添加
函数OnBtnAddMember()添加公司成员信息
Button
IDC_BTN_MOD_MEMBER
修改
函数OnBtnModMember()修改公司成员信息
Button
IDC_BTN_DEL_MEMBER
删除
函数OnBtnDelMember()删除公司成员信息
备忘录配置信息管理控件列表
控件类型
ID
属性
变量或函数
GroupBox
IDC_STATIC
备忘录类型信息管理
无
ListControl
IDC_LIST_MEMO_TYPE
无
列表控件类型变量m_listType
Button
IDC_BTN_ADD_TYPE
添加
函数OnBtnAddType()添加备忘录类型信息
Button
IDC_BTN_MOD_TYPE
修改
函数OnBtnModType()修改备忘录类型信息
Button
IDC_BTN_DEL_TYPE
删除
函数OnBtnDelType()删除备忘录类型信息
备忘录信息管理控件列表
控件类型
ID
属性
变量或函数
GroupBox
IDC_STATIC
备忘录信息管理
无
ListControl
IDC_LIST_MEMO_INFO
无
列表控件类型变量m_listType
Button
IDC_BTN_ADD_MEMO
添加
函数OnBtnAddMemo()添加备忘录类型信息
Button
IDC_BTN_MOD_MEMO
修改
函数OnBtnModMemo()修改备忘录类型信息
Button
IDC_BTN_DEL_MEMO
删除
函数OnBtnDelMemo()删除备忘录类型信息
查询备忘录信息控件列表
控件类型
ID
属性
变量或函数
GroupBox
IDC_STATIC
备忘录信息管理
无
Button
IDC_BTN_QUERY_BIRTH
生日提示
函数OnBtnQueryBirth()处理生日提示信息
Button
IDC_BTN_MEMO_INFO
备忘录提示
函数OnBtnMemoInfo()处理备忘录信息提示
Button
IDC_BTN_MEMO_EVENT
大事记
函数OnBtnMemoEvent()处理大事记信息
主对话框类名称为CMemoDBSDlg,资源ID为IDD_MEMODBS_DIALOG,对话框名称为“公司备忘录管理系统”。
主界面用到了3个列表控件分别显示公司成员基本信息,备忘录类型信息和备忘录信息。
需要为这3个列表控件添加显示的列,从而显示相应的数据信息。
为了代码设计的清晰,在CMemoDBSDlg类中定义了一个InitConcrol私有函数负责添加控件的显示列。
InitConcrol函数代码如下:
voidCMemoDBSDlg:
:
InitControl()
{
//设置列表控件扩展风格
DWORDdwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;
m_listMember.SetExtendedStyle(dwExStyle);
m_listMemoInfo.SetExtendedStyle(dwExStyle);
m_listType.SetExtendedStyle(dwExStyle);
//初始化公司成员列表控件
m_listMember.InsertColumn(0,"ID",LVCFMT_CENTER,30);
m_listMember.InsertColumn(1,"姓名",LVCFMT_CENTER,60);
m_listMember.InsertColumn(2,"职位",LVCFMT_CENTER,60);
m_listMember.InsertColumn(3,"出生日期",LVCFMT_CENTER,60);
m_listMember.InsertColumn(4,"性别",LVCFMT_CENTER,40);
m_listMember.InsertColumn(5,"籍贯",LVCFMT_CENTER,100);
//初始化备注类型列表控件
m_listType.InsertColumn(0,"类型ID",LVCFMT_CENTER,60);
m_listType.InsertColumn(1,"类型名称",LVCFMT_CENTER,100);
//初始化备注信息列表控件
m_listMemoInfo.InsertColumn(0,"备忘录ID",LVCFMT_CENTER,60);
m_listMemoInfo.InsertColumn(1,"姓名",LVCFMT_CENTER,60);
m_listMemoInfo.InsertColumn(2,"备忘录操作日期",LVCFMT_CENTER,140);
m_listMemoInfo.InsertColumn(3,"备忘录发生日期",LVCFMT_CENTER,140);
m_listMemoInfo.InsertColumn(4,"大事件",LVCFMT_CENTER,60);
m_listMemoInfo.InsertColumn(5,"事件花费",LVCFMT_CENTER,60);
m_listMemoInfo.InsertColumn(6,"备注类型",LVCFMT_CENTER,60);
m_listMemoInfo.InsertColumn(7,"备注内容",LVCFMT_CENTER,200);
}
在InitConcrol函数中首先调用CListCtrl的SetExtendedStyle方法设置控件的扩展风格。
这3个空间设置了相同的风格,以确保界面的一致性,设置扩展风格后的公司成员列表控件获取鼠标选择和鼠标略过情况的样式如图
(3)连接数据库
系统启动之后,可以将数据库中的数据升秒年十时毫到界面上,首先需要处理数据库的连接问题,需要3个函数:
ODBC数据源名称、数据库用户名称、数据库用户密码。
数据库用户的名称和密码均为dbaccess。
在CMemoDBSDlg类的OnInitDialog函数中处理数据库的连接。
其中关键代码为:
BOOLCMemoDBSDlg:
:
OnInitDialog()
{CLoginDlgdlg;
BOOLlogin=TRUE,DB_SYS_EXIT=FALSE;
while(login){
if(dlg.DoModal()==IDOK)
}
CStringstrConnect;
strConnect.Format("DSN=%s;PWD=%s",dlg.m_strDBSource,dlg.m_strDBUser,dlg.m_strDBPassword);
TRY{
m_db.OpenEx(strConnect,CDatabase:
:
noOdbcDialog);
login=FALSE;
}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox("memoryexception");
}
AND_CATCH(CException,e)
{
TCHARszError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH
{else{
login=FALSE;
DB_SYS_EXIT=TRUE;
}
}
if(DB_SYS_EXIT)
CDialog:
:
OnCancel();
else{
InitControl();
InitCtrlData();
}
}
OnInitDialog函数首先判断数据库是否打开,如果已打开就退出函数,否则创建一个数据库的连接字符串,利用CDatabase的OpenEx方法打开数据库的连接,并处理数据库的异常。
(4)显示数据到界面上
连接数据库之后,西药把数据库中的数据显示在3个列表控件中。
在CMemoDBSDlg类中定义一个InitCtrlData私有函数,负责从数据库中读取数据并显示到列表控件中。
同时还需要定义3个分别把数据插入到列控件中的函数,分别为InsertMemberItem,InsertMemoTypeItem,InsertMemoInfoItem,在MemoDBSDlg.h文件中添加这3个函数定义。
代码为:
private:
//向公司成员信息列表框中插入公司成员列表信息
voidInsertMemberItem(intid,CStringname,CStringposition,CStringdate,CStringgender,CStringhometown);
//向备忘录类型信息列表框中插入类型信息.
voidInsertMemoTypeItem(intid,CStringname);
//向备忘录列表框中插入备忘录信息.
voidInsertMemoInfoItem(intid,CStringname,CStringoperDate,CStringhappenDate,intisEvent,CStringcost,CStringtype,CStringmemoTxt);
//从数据库中读取数据,并显示在.列表框中.
voidInitCtrlData();
//初始化列表控件.
voidInitControl();
向公司成员信息列表控件中插入公司成员信息的函数是InsertMemberItem。
代码为:
voidCMemoDBSDlg:
:
InsertMemberItem(intid,CStringname,CStringposition,CStringdate,CStringgender,CStringhometown)
{
intnIndex=m_listMember.GetItemCount();
LV_ITEMIvItem;
IvItem.mask=LVIF_TEXT;
IvItem.iItem=nIndex;
IvItem.iSubItem=0;
CStringtemp;
temp.Format("%d",id);
IvItem.pszText=(char*)(LPCTSTR)temp;
m_listMember.InsertItem(&lvItem);
m_listMember.SetItemText(nIndex,1,name);
m_listMember.SetItemText(nIndex,2,position);
m_listMember.SetItemText(nIndex,3,date);
m_listMember.SetItemText(nIndex,4,gender);
m_listMember.SetItemText(nIndex,5,hometown);
}
向备忘录类型信息列表控件中添加备忘录类型信息的函数InsertMemoTypeItem。
代码为:
voidCMemoDBSDlg:
:
InsertMemoTypeItem(intid,CStringname)
{intnIndex=m_listType.GetItemCount();
LV_ITEMlvItem;
lvItem.mask=LVIF_TEXT;
lvItem.iItem=nIndex;
lvItem.iSubItem=0;
CStringtemp;
temp.Format("%d",id);
lvItem.pszText=(char*)(LPCTSTR)temp;
m_listType.InsertItem(&lvItem);
m_listType.SetItemText(nIndex,1,name);
}
向备忘录信息列表控件中田间被望里信息的函数是InsertMemoInfoItem。
代码为:
voidCMemoDBSDlg:
:
InsertMemoInfoItem(intid,CStringname,CStringoperDate,CStringhappenDate,intisEvent,CStringcost,CStringtype,CStringmemoTxt)
{
intnIndex=m_listMemoInfo.GetItemCount();
LV_ITEMlvItem;
lvItem.mask=LVIF_TEXT;
lvItem.iItem=nIndex;
lvItem.iSubItem=0;
CStringtemp;
temp.Format("%",id);
lvItem.pszText=(char*)(LPCTSTR)temp;
m_listMemoInfo.InsertItem(&lvItem);
m_listmemoInfo.SetItemText(nIndex,1,name);
m_listmemoInfo.SetItemText(nIndex,2,operDate);
m_listmemoInfo.SetItemText(nIndex,3,happenDate);
m_listmemoInfo.SetItemText(nIndex,4,isEvent==0?
"否":
"是");
m_listmemoInfo.SetItemText(nIndex,5,cost);
m_listmemoInfo.SetItemText(nIndex,6,type);
m_listmemoInfo.SetItemText(nIndex,7,memoTxt);
}
从数据库中读取数据并显示到3个列表控件中的函数为InitCtrlData。
代码为:
voidCMemoDBSDlg:
:
InitCtrlData()
{
TRY{CRecordsetrs;
rs.m_pDatabase=&m_db;
CStringsql="Select*fromcompany_member_tab";
rs.Open(CRecordset:
:
dynaset,sql);
intid;
CStringname,position,date,gender,hometown;
while(!
rs.IsEOF()){
CDBVariantvar;
rs.GetFieldValue((short)0,var,SQL_C_SLONG);
if(var.m_dwType!
=DBVT_NULL)
id=var.m_iVal;
var.Clear();
rs.GetFieldValue(1,name);
rs.GetFieldValue(2,position);
rs.GetFieldValue(3,date);
rs.GetFieldValue(4,gender);
rs.GetFieldValue(5,hometown);
InsertMemberItem(id,name,position,date,Left(10),gender,hometown);
rs.MoveNext();
}
rs.Close();
sql="Select*fromMEMO_TYPE_TAB";
rs.Open(CRecordset:
:
dynaset,sql);
while(!
rs.IsEOF()){
CD