个人通讯录管理.docx
- 文档编号:2891912
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:67
- 大小:27.68KB
个人通讯录管理.docx
《个人通讯录管理.docx》由会员分享,可在线阅读,更多相关《个人通讯录管理.docx(67页珍藏版)》请在冰点文库上搜索。
个人通讯录管理
班级:
041212
学号:
04121134
姓名:
李春红
个人通讯录管理系统
一、设计要求
对于同学、朋友、同事等会与自己有联系的人员,设计一个数据库管理系统辅助管理各位联系人的信息。
能够按联系人分类、姓名、所在地区等方式查询联系人的情况,实现对联系人的添加、修改、删除、查询、统计、报表打印等功能。
具体功能如下:
1、联系人的通讯信息管理:
录入、修改、删除、查询有关联系人的电话、邮箱、传真、通讯地址等信息。
2、单位信息管理:
对所有联系人所在的单位进行录入、修改、删除,并能按单位查询联系人信息。
3、联系人类别管理:
以与自己的关系作为分类方式,对类别进行录入、修改、删除;并能按类别查询联系人信息。
4、建立报表,按类别统计每一类联系人的情况。
二、知识点应用
1、建立数据库、数据表
2、用向导建立数据窗体,实现对数据表的记录进行定位、添加和删除操作
3、建立选择查询、参数查询、统计查询实现查询操作
4、用报表向导建立报表
三、设计步骤
1、建立数据库和数据表
1)建立数据库
在Access的窗口右侧的“新建文件”对话框中选择“新建/空数据库”,在弹出的“文件新建数据库”对话框中输入数据库的名称――“个人通讯录管理”,确定保存位置,并按下“创建”按钮。
2)建立数据表
在“个人通讯录管理”数据库中选择“表”,并单击“新建”。
在数据表视图中输入字段名、选择字段类型、确定字段宽度。
在本案例中需要建立如下三个数据表:
A、组信息表
字段名称
字段类型
字段大小
允许为空
备注
groupid
长整形
主键,自动编号
groupname
文本
50
否
组名
B、联系人通讯录表
字段名称
字段类型
字段大小
允许为空
备注
Peopleid
文本
否
主键
name
文本
30
sex
文本
groupid
长整形
所属组ID,外键
companyName
文本
50
companyDepartment
文本
20
文本
30
familyPhone
文本
20
MSN
文本
50
文本
50
homepage
文本
50
otherInfo
备注
C、相片表:
字段名称
字段类型
字段大小
允许为空
备注
photoID
长整型
主键
peopleID
长整型
外键
photoFile
文本
255
3)建立数据表间的关系
选择“工具/关系”菜单,为三张数据表建立关系。
三张表间的关系为:
联系人信息表和单位信息表通过“单位名称”字段关联;联系人信息表和联系人类别表通过类别字段关联。
2、建立数据窗体对数据表记录进行定位、编辑、添加和删除等操作
1)用向导建立输入联系人信息的窗体
1.在数据库窗口中选择“窗体”项,双击“使用向导创建窗体”,启动“窗体向导”
2.单击“表/查询”下拉列表框右侧的箭头,列出所有有效的表或者查询数据源,从中选择“表/联系人基本信息表”。
在“可用字段”列表中会显示出数据表中的所有字段,从中选择需要在新建的窗体中显示的字段,使用中间的按钮将它们移动到“选定的字段”列表中。
单击“下一步”按钮。
3.进行“窗体布局”的设置,这里选择“纵栏表”,单击“下一步”按钮。
4.设置窗体的样式,在对话框右侧的列表框中列出了窗体的样式,选中的样式效果在对话框的左侧显示,这里选择“宣纸”。
5.在这一步中可为所创建的窗体设置一个标题,此处输入“录入联系人基本信息”,单击“完成”按钮。
“录入联系人信息”窗体可以对联系人信息进行定位、编辑、添加和删除等操作。
2)建立输入单位信息的窗体
用向导快速建立输入单位信息的窗体。
在数据库窗口中选择“窗体”项,单击“新建”按钮,在“新建窗体”对话框中选择“自动创建窗体:
纵栏式”,在下方的“请选择该对象的数据来源表或查询”中选择“单位信息表”,此时会打开一个输入单位信息窗体,关闭窗体时系统会提示保存窗体,用此方法可以快速创建一个输入单位信息的窗体。
3)建立输入联系人类别的窗体
用向导建立一个表格式的录入联系人类别的窗体,建立的方法同上,不同之处是在“新建窗体”对话框中选择“自动创建窗体:
表格式”。
3、查询设计
1)建立简单的选择查询
建立查询,显示所有类别为“同学”的联系人的主要联系信息(姓名、性别、电话、通讯地址、工作单位等)
1.在数据库窗口中选择“查询”,双击“在设计视图中新建查询”,从“显示表”对话框添加以下数据表:
联系人通讯录表、联系人类别表。
关闭“显示表”对话框。
2.从查询设计器窗口中的数据源表中双击需要的字段:
联系人通讯录中的姓名、性别、所在单位、电话,联系人类别表中的、类别名称。
3.在类别名称列的“条件”下输入“同学”。
4.保存查询为:
“同学通讯录”
以上就是简单的选择查询的设计步骤,用此方法可建立简单的选择查询,如查询所在地为云南的所有联系人信息等。
2)建立参数查询
参数查询是由用户输入查询条件,根据条件显示相应的记录信息。
如:
建立查询,由用户输入出联系人所在地,查询出该地所有联系人的信息。
1.在数据库窗口中选择“查询”,双击“在设计视图中新建查询”,从“显示表”对话框添加以下数据表:
联系人通讯录表、单位信息表、联系人类别表。
关闭“显示表”对话框。
2.从查询设计器窗口中的数据源表中双击需要的字段。
3.在“所在地”列下的“条件”中输入:
[请输入要查询的地区:
]
当运行此查询时,会弹出一个对话框,在此对话框中输入要查询的地区名称(例如“上海“)则可查询出所有上海的联系人的通讯信息。
3)建立统计查询
建立查询按类别统计出联系人的人数。
1.在数据库窗口中选择“查询”,双击“在设计视图中新建查询”,从“显示表”对话框添加以下数据表:
联系人通讯录表、联系人类别表。
关闭“显示表”对话框。
2.在数据源表中双击需要的字段,这里选择:
联系人类别表.类别名称,联系人通讯录表.编号。
3.选择“视图”菜单中的“总计”命令,将“类别名称”列下的总计设置为“GroupBy”,将“编号”列下的总计设置为“Count”。
运行此查询时,会按照类别名称分类统计出各类联系人的人数。
以上是各种查询的建立方法,可根据这些方法按照需要建立相关查询。
4、报表设计
用向导建立报表的步骤为:
1.在数据库窗口中选择“报表”,双击“使用向导创建报表”,弹出“报表向导”对话框。
2.在“表/查询”组合框中选择“表:
联系人通讯录表”,在“可用字段”列表中选择需要在报表中打印的字段,双击字段使之移动到“选定的字段”列表中;在“表/查询”组合框中选择“表:
联系人类别表”,选择“类别名称”字段。
单击“下一步”按钮。
3.“请确定数据的查看方式”,选择“通过联系人通讯录表”,单击“下一步”按钮。
4.“确定分组级别”,选择“联系人类别表.类别名称”,单击“下一步”按钮。
5.“记录的排序次序”,选择按“编号”排序。
6.“报表样式”,选择需要的报表样式,这里选择“正式”。
7.为报表确定报表标题:
通讯录报表。
单击“完成”按钮,完成报表的创建。
以上即是用向导建立报表的方法,可参照此方法完成所需的报表创建。
四、具体设计
1、界面设计
界面代码
'***********************************************************************
'*文件名:
MainForm.frm
'*说明:
主窗口
'***********************************************************************
OptionExplicit
'***********************************************************************
'模块级常量定义
ConstGROUPKEYPRE="GRROUP"'组KEY前缀
ConstPEOPLEKEYPRE="PEOPLE"'人员KEY前缀
'***********************************************************************
'模块级变量定义
PrivatephotoArray()AsPhotoInfo'像片信息动态数组
PrivatephotoIndexAsInteger'当前显示像片的对应数组下标
'***********************************************************************
'API声明
PrivateDeclareFunctionSafeArrayGetDimLib"oleaut32.dll"_
(ByRefsaArray()AsAny)AsLong
'***********************************************************************
'*函数名:
GetCurrentSelectedNode
'*功能:
取得TreeView中的当前选择节点信息
'*参数:
Integer(OUT)1:
组节点2:
人员节点
'*:
Long(OUT)组ID或人员ID
'*返回值:
Booleantrue有选择节点
'*:
false无选择节点
'***********************************************************************
PublicFunctionGetCurrentSelectedNode(ByRefnodeKindAsInteger,_
ByRefidAsLong)AsBoolean
'变量定义
DimkeyAsString'节点KEY
IftrvAll.SelectedItemIsNothingThen
'无选择的节点
GetCurrentSelectedNode=False
Else
'取得节点KEY
key=
'判断选择的节点类型
IfLeft(key,Len(PEOPLEKEYPRE))=PEOPLEKEYPREThen'人员
nodeKind=2
id=CLng(Mid(key,Len(PEOPLEKEYPRE)+1))
GetCurrentSelectedNode=True
ElseIfLeft(key,Len(GROUPKEYPRE))=GROUPKEYPREThen'组
nodeKind=1
id=CLng(Mid(key,Len(GROUPKEYPRE)+1))
GetCurrentSelectedNode=True
Else
GetCurrentSelectedNode=False
EndIf
EndIf
EndFunction
'***********************************************************************
'*函数名:
GetCurrentGroupId
'*功能:
取得TreeView中的当前选择节点所在组的ID
'*参数:
'*返回值:
Long组ID,失败时为-1
'***********************************************************************
PublicFunctionGetCurrentGroupId()AsLong
'变量定义
DimkeyAsString'节点KEY
IftrvAll.SelectedItemIsNothingThen
'无选择的节点
GetCurrentGroupId=-1
Else
'取得节点KEY
key=
'判断选择的节点类型
IfLeft(key,Len(PEOPLEKEYPRE))=PEOPLEKEYPREThen'人员
'取父节点KEY
key=
EndIf
'取得组节点ID
IfLeft(key,Len(GROUPKEYPRE))=GROUPKEYPREThen
GetCurrentGroupId=Mid(key,Len(GROUPKEYPRE)+1)
Else
GetCurrentGroupId=-1
EndIf
EndIf
EndFunction
'***********************************************************************
'*函数名:
GetNodeIndex
'*功能:
取得TreeView中指定节点的index
'*参数:
StringNODE节点KEY前缀
'*:
LongNODE节点后缀
'*返回值:
LongNODE的index,失败时为-1
'***********************************************************************
PrivateFunctionGetNodeIndex(ByValkeypreAsString,ByValidAsLong)
'初始化返回值
GetNodeIndex=-1
'参数检查
IfIsNull(keypre)OrIsEmpty(keypre)Orkeypre=""_
Orid<=0Then
ExitFunction
EndIf
'定义变量
DimnodeKeyAsString'NODEKEY
DimiLoopAsInteger'循环变量
'生成NODEKEY
nodeKey=keypre&CStr(id)
'查找节点
ForiLoop=1To
IftrvAll.Nodes(iLoop).key=nodeKeyThen
GetNodeIndex=iLoop
ExitFor
EndIf
Next
EndFunction
'***********************************************************************
'*过程名:
IniGroupInTreeView
'*功能:
初始化TreeView中的组信息
'*参数:
'***********************************************************************
PrivateSubIniGroupInTreeView()
'变量定义
DimrsAsADODB.Recordset'记录集
DimcurrentNodeAsNode'当前组节点
'取得组信息记录集
Setrs=GetGroupRecordset()
'添加组
IfIsObject(rs)Then
WhileNotrs.EOF
SetcurrentNode=,tvwLast,_
GROUPKEYPRE&rs("groupid"),rs("groupname"))
'添加组成员
IniPeopleInGrouprs("groupid"),currentNode.index
rs.MoveNext
Wend
rs.Close
Setrs=Nothing
EndIf
EndSub
'***********************************************************************
'*过程名:
IniPeopleInGroup
'*功能:
初始化组成员信息
'*参数:
Long组ID
'*:
Integer组节点index
'***********************************************************************
PrivateSubIniPeopleInGroup(ByValgroupkeyAsLong,_
ByValindexAsInteger)
'变量定义
DimrsAsADODB.Recordset'记录集
'取得指定组成员信息
Setrs=GetGroupMember(groupkey)
'添加组成员
IfIsObject(rs)Then
WhileNotrs.EOF
index,tvwChild,PEOPLEKEYPRE&_
CStr(rs("peopleId")),rs("peopleName")
rs.MoveNext
Wend
rs.Close
Setrs=Nothing
EndIf
EndSub
'***********************************************************************
'*过程名:
IniTreeView
'*功能:
初始化TreeView
'***********************************************************************
PrivateSubIniTreeView()
IniGroupInTreeView
EndSub
'***********************************************************************
'*过程名:
RefreshGroupInTreeView
'*功能:
刷新TreeView中的组信息
'*参数:
'***********************************************************************
PrivateSubRefreshGroupInTreeView()
'变量定义
DimrsAsADODB.Recordset'记录集
DimcurrentNodeAsNode'当前组节点
DimnodeKeyAsString'节点KEY
DimiLoopAsInteger'循环变量
DimexistFlagAsBoolean'已存在标志
DimnodeindexAsInteger'节点index
'取得组信息记录集
Setrs=GetGroupRecordset()
'添加组
IfIsObject(rs)Then
WhileNotrs.EOF
'查找节点是否已存在
nodeKey=GROUPKEYPRE&rs("groupid")
existFlag=False
ForiLoop=1To
If=nodeKeyThen
nodeindex=iLoop
existFlag=True
ExitFor
EndIf
Next
IfexistFlagThen'组已存在,刷新组成员
RefreshPeopleInGrouprs("groupid"),nodeindex
Else'组不存在,追加新组
SetcurrentNode=,tvwLast,_
GROUPKEYPRE&rs("groupid"),rs("groupname"))
currentNode.Selected=True
'添加组成员
IniPeopleInGrouprs("groupid"),currentNode.index
EndIf
rs.MoveNext
Wend
rs.Close
Setrs=Nothing
EndIf
EndSub
'***********************************************************************
'*过程名:
RefreshPeopleInGroup
'*功能:
初始化组成员信息
'*参数:
Long组ID
'*:
Integer组节点index
'***********************************************************************
PrivateSubRefreshPeopleInGroup(ByValgroupkeyAsLong,_
ByValindexAsInteger)
'变量定义
DimrsAsADODB.Recordset'记录集
DimiLoopAsInteger'循环变量
DimexistFlagAsBoolean'存在标志
DimcurNodeAsNode'节点
DimnodeKeyAsString'节点KEY
'取得指定组成员信息
Setrs=GetGroupMember(groupkey)
'添加组成员
IfIsObject(rs)Then
WhileNotrs.EOF
'查找是否已存在
nodeKey=PEOPLEKEYPRE&CStr(rs("peopleId"))
existFlag=False
IfThen
SetcurNode=
DoWhileNotcurNodeIsNothing
IfcurNode.key=nodeKeyThen
existFlag=True
ExitDo
EndIf
SetcurNode=curNode.Next
Loop
EndIf
IfNotexistFlagThen
SetcurNode=,tvwChild,PEOPLEKEYPRE&_
CStr(rs("peopleId")),rs("peopleName"))
curNode.Selected=True
EndIf
rs.MoveNext
Wend
rs.Close
Setrs=Nothing
EndIf
EndSub
'***********************************************************************
'*过程名:
Refres
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 通讯录 管理