个人名片管理系统.docx
《个人名片管理系统.docx》由会员分享,可在线阅读,更多相关《个人名片管理系统.docx(20页珍藏版)》请在冰点文库上搜索。
数据库系统课程设计说明书
题目 个人名片管理系统
班级 计 044
学号 2004041168
姓名 董 玲 玲
指导老师原庆能
完成日期 2007-6-15
20
个人名片管理系统
一、 引言
随着计算机的普及,越来越多的管理系统应运而生。
同时,随着人们交往范围的不断扩大,我们需要同更多的人保持交流和联系,尤其是已经参加了工作的公司职员,除了熟悉的朋友,还有很多的客户,我们都要时不时的同他们保持联系,这时个人名片管理系统就可以派上用场了。
个人名片管理系统是用于辅助个人完成其名片有序管理的计算机软件系统,系统实施的目的旨在帮助用户完成其私人名片管理的数字化,以提供较手工方式下更高的效率和更低的出错率。
作为整个办公自动化系统的一部分,电子名片管理系统要实现的目标是:
将用户目前在处理名片管理工作时所采用的手工处理方式进行计算机化,从而与整个办公自动化系统的数字化趋势相协调,以求为用户提供更为专业和高效的个人管理服务。
二、 任务概述
1、待开发软件的一般描述
本软件旨在为商业人士及企事业单位中负责公共关系等社会交往频繁
的人士提供一个功能齐全、使用方便的个人社会关系数据库管理系统,以替代传统的手工通讯录。
从而提供一个高效快捷的工作环境。
使用本软件的用户群非常广泛,它非常适用于具有如下特点的人员:
(1)、工作中与外界联系非常频繁,需要和很大数目的人打交道。
(2)、与外界的联系成为开展工作的关键因素,相关信息丢失或损坏可能带来重大损失。
针对如上用户特点,本软件可以迅速、准确、方便地提供个人社会关系数据库管理系统的管理功能,同时力求为用户提供方便、高效、实用的功能。
用户只需掌握电脑录入功能即可。
2、开发环境及开发工具
本软件的开发环境是在WindowsXp操作系统环境中开发,应用的是当
前比较流行的PowerBuilder8.0和SQL。
PowerBuilder8.0是一款非常适合开发管理系统的工具,尤其是它强大的数据窗口功能省去了开发者很多的工作,可以让开发者有更多的精力致力于软件本身的设计,开发出更加简便实用的软件。
3、待开发软件的功能
本软件具有如下主要功能:
□ 身份验证功能
□ 添加、删除、修改、查询功能
□ 用户管理功能功能描述图如下:
l
管理主界面
名片修改
名片输入
名片录入
用户表
用户管理
系统维护
名片查询
名片查询
登录界面
名片表
个
人
名
片
管
理
关闭
其他
版权信息
三、功能需求
1、数据流图
第0层数据流图(DFD):
终端管理系统
名片处理信息 名片更改信息
名片存储系统
个人名片管理系统
名片存储系统
终端管理系统
终端输入信息 终端输出信息
第1层数据流图:
名片存
储系统
名片查询
查询结果
查询结果
显示查询
结果
名
片资料
名片录入
录入请求
查
询请求
确定用户请求
操作请求
身份验
证
输入密码
查
询结果
用户
更新名片存储系统
修
改请求
名片修改
密码信息
用户信息
库
查找要求
2、输入输出需求
个人名片管理系统在进行名片管理时,用户利用终端机输入登陆密码,个人
名片管理系统通过终端输入系统获得该密码后,应该能够通过该密码,借助个人名片管理系统获得正确的用户登陆信息,确定登陆用户为系统管理员或普通用户,并最终通过终端管理系统将这些信息显示在用户终端上。
如果个人名片管理系统不能根据给出的密码得到与之对应的用户信息,系统则不允许该用户
登陆个人名片管理系统。
本系统可以有不同的用户使用,这些用户在实际的工作中可能具有不同的权限,所以我们的软件也应该根据他们的工作角色分配给他们不同的功能模块。
在个人名片管理系统中,我们提供多用户管理功能。
假设系统管理员可以使用系统中的所有功能模块,并且可以管理其它用户;其它用户都作为普通用户,只能按照系统管理员分配的权限使用相应的功能模块。
为了实现多用户管理,我们着手实现了以下几个方面的功能:
(1)、主窗口打开时,同时打开登录窗口,让用户输入用户标识和登录口令。
(2)、如果用户正确登录,则读取用户的权限,根据权限进行界面的初始化。
(3)、我们通过菜单项是否可用来实现用户的权限。
3、性能需求
(1)、数据精确度
进行操作请求时,如:
名片录入、名片删除、名片修改、名片查询时,应保证输入数据与数据库数据的相匹配性。
而在满足用户请求时,系统应保证所响应数据的正确性和全面性。
(2)、时间特性
为满足用户高效要求,数据的响应时间、更新处理时间、数据转换与传输时间、运行时间都应在可接受范围之内。
四、后台数据库的设计
1、 该实例实现的是简单的名片管理功能,因此系统后台数据库比较简单,只有名片管理表和用户管理表2个数据表。
表mpgl(名片管理表)
序号
字段名
类型及长度
是否可空
含义
1
bh
Char(10)
Not
编号
2
xm
Char(10)
Yes
姓名
3
gs
Char(40)
Yes
公司
4
dh
Char(40)
Yes
电话
5
lxdz
Char(40)
Yes
联系地址
6
yzbm
Char(40)
Yes
邮政编码
7
email
Char(40)
Yes
电子邮件
8
ywfw
Char(200)
Yes
业务范围
9
bz
Char(400)
Yes
备注
10
zw
Char(20)
Yes
职务
序号
字段名
类型及长度
是否可空
含义
1
userid
Char(10)
Not
用户标志
2
password
Char(10)
Not
口令
3
username
Char(20)
Yes
用户名称
4
privelege
Char(200)
Yes
权限
表名:
users, 主键:
userid
表名:
mpgl, 主键:
bh
表 users(用户管理表)
名称
终端输入信息
别名
无
用途
操作处理
描述
终端输入信息=用户标志+口令
名称
操作请求
别名
无
用途
更新电子名片管理系统
2、数据字典
描述
操作请求=录入|修改|删除|查询
名称
用户身份
别名
身份信息
用途
确认用户身份、确认用户操作权限
描述
用户身份=系统管理员|普通用户
名称
查询结果
别名
无
用途
对用户操作进行响应、查询处理
描述
查询结果=名片信息
名称
用户信息
别名
无
用途
确认用户身份
描述
用户信息=用户登陆密码+用户身份
名称
名片信息
别名
名片资料
用途
查找名片、更新名片
描述
名片信息=编号+姓名+公司+电话+联系地址+
邮政编码+电子邮件+业务范围+备注+职务
3、数 据库的数
据采集
通过身份验证的并且具有名片录入权限的合法用户,采用键盘和鼠标
直接输入的方式将外部数据添加到数据库中。
五、本系统具体的实现步骤及过程
1、建立数据库及数据表
这部分工作是在MicrosoftSQLServer的企业管理器中进行的。
这
一部分的工作基本上都有一定的步骤可寻,在此就不做详细的介绍。
2、创建工作空间及应用程序
在PB中的工作必须是在一个工作空间中展开的,所以在开始所有
的工作前,要建立一个工作空间,选择File->New菜单,打开如下界面,点击OK按纽,命名为mpgl.pbw并保存,即完成了工作空间的建立。
接下来,按照跟建立工作空间相同的步骤建立名为mpgl的应用程序。
Application对象是PB应用程序的起点。
通常在该对象的Open事件中打开整个应用程序的主操作窗口,初始化运行环境,建立数据库连接等工作。
在应用程序的open和close事件中都要加入相应的代码,以保证系统能够正常启动并运行。
Open事件的代码如下:
SQLCA.DBMS="MSSMicrosoftSQLServer"SQLCA.Database="mpxt"SQLCA.ServerName="(local)"
SQLCA.LogId="sa"SQLCA.AutoCommit=FalseSQLCA.DBParm=""
connect; //连接数据库
ifsqlca.sqlcode=0 then //正确建立了连接open(w_main) //打开主程序窗口
Else
MessageBox('错误','不能和数据库建立连接.按任意键关闭系统.
....',StopSign!
)
haltclose; //直接关闭整个应用endif
close事件的代码如下:
Disconnect;//断开和数据库的连接
3、数据窗口的建立
本系统中建立了四个数据窗口,它们分别是跟名片录入、名片修改、名片查询、用户信息有关的dw_mp_input、
dw_mp_modify、dw_mp_query、dw_mp_users。
下面,主要介绍其中的一个数据窗口dw_mp_input的创建过程。
选择窗口菜单File->New,或者使用快捷键Ctrl+N,或者点击窗
口工具条中左侧第一个小图标按钮‘New’,打开‘New’对话框,点击上面的‘DataWindow’显示如图5-1所示的界面。
图1新建数据窗口
选择其中的‘Freeform’,然后点击窗口底部的命令按钮‘OK’。
图1
所示的窗口关闭,打开图2所示的对话框。
图2选择数据源
在图2所示的窗口中选择‘Quick Select’,然后点击窗口底部的命令按钮‘Next’,打开如图3所示的对话框。
在图3所示的对话框中,选择左侧‘Tables’中的表‘mpgl’,然后点击右侧的命令按钮‘AddAll’,然后点击窗口右上角的命令按钮‘OK’,显示如图4所示的对话框。
在该对话框中设置数据窗口的显示样式。
图4设置显示格式
在该对话框中,选择‘Background Color’为‘Button Face’,选择
‘Columns’组框中的‘Border’为‘Lowered’。
然后点击窗口底部的命令按钮‘Next>’,打开如图5所示的对话框。
图5总结信息
图5-5所示的对话框是总结信息,显示我们在前面的选择。
点击窗口底
部的命令按钮‘Finish’即可完成数据窗口创建向导的工作,进入到
Datawindow画板中。
接下来我们需要进一步修改数据窗口的外观,至此,名片输入数据窗口创建完成。
保存该数据窗口,命名为
‘dw_mp_input’,并且在保存时为该数据窗口对象输入提示信息。
数据窗口dw_mp_modify和dw_mp_query的创建过程同上,并且数据
源也是数据表mpgl,而数据窗口dw_mp_users的数据源与它们不同,它的数据源是数据表users。
至此,我们所需要的数据窗口都已经建立完毕。
4、创建全局函数gf_getbh
使用全局函数,便于程序的重用和逻辑上的封装。
在创建数据表时,mpgl表中的字段bh定义为char(10)类型。
首先我们定义编码的规则如下:
(1)前6位为2位年、2位月、2位日;
(2)后4位为流水号,取当前最大值加1。
根据上面的规则我们创建一个全局函数。
函数定义如下:
/*-------------
----------------------------------------------------------------------
*函数名称:
Stringgf_getbh(stringas_bh)
*函数作用:
生成一个编号。
*返回值:
string类型的,编号。
*调用举例:
ls_new=gf_getbh(ls_old)
*其中,ls_old为数据窗口中已经存在的当天的最大编号。
*-----------------------------------------------------------------------------------*/
Stringls_Part1//用来保存编码的前6位Stringls_Part2//用来保存编码的后4位Stringls_DbSn//数据库中的当天最大流水号stringls_AgrSn//参数中的流水号
Stringls_sn//新生成的编号
ls_part1=Right(String(today(),'yyyymmdd'),6)ls_AgrSn=Right(as_bh,4)
//从数据库中选择当天最大的编号selectmax(bh)into:
ls_Dbsn
frommpgl
wheresubstring(bh,1,6)=:
ls_part1;
ifsqlca.sqlcode=0then//如果正确取出了数据ifIsNull(ls_Dbsn)orls_Dbsn=''then
ls_Dbsn='0000'else
ls_DbSn=Right(ls_DbSn,4)endif
ifIsNull(ls_Agrsn)orls_Agrsn=''thenls_Agrsn='0000'ifinteger(ls_Dbsn)ls_Part2=String(integer(ls_AgrSn)+1)else
ls_Part2=String(integer(ls_DbSn)+1)endif
ls_sn=ls_part1+Right('0000'+ls_Part2,4)else
ls_sn=''endifreturnls_sn
5、创建主菜单
菜单是一个非常不错的控件,在很多操作系统中随处可见。
菜单
占用空间很小,但是可以执行的命令却可以非常多。
建立所需要的菜单,并修改相应的属性,创建完后的效果图如下所示:
至此,菜单创建完毕。
保存我们的工作。
6、窗口的建立
6、1登陆窗口的建立
在没有输入合法的用户标志和口令之前,应该不允许用户操作软件中的其它任何部分。
所以,登录窗口采用Response类型的窗口。
在该窗口中放置2个StaticText控件、2个SingleLineEdit控件、2个
CommandButton控件。
然后按照表1设置控件及窗口的相关属性:
控件
属性
取值
st_1
Text
用户标志:
st_2
Text
登录口令:
用户标志右侧的SingleLineEdit
Name
sle_userid
登录口令右侧的SingleLineEdit
Name
sle_password
Password
选中该属性
取消
Name
cb_cancel
Text
&C.取消
Cancel
选中该属性
确定
Name
cb_ok
Text
&O.确定
窗口
Title
系统登录
WindowTyp
e
Response
设计完用户界面后,首先保存一下我们的工作,命名为w_login。
然后开始编写脚本。
为了控制用户尝试登录的次数,需要定义窗口实例变量,用来记录用户尝试的次数:
integerii_count=3
当用户在sle_userid中输入内容,并且回车之后,应该将焦点切换到
sle_password上,以便用户继续输入登录口令。
所以,在sle_userid的
Modified事件上编写如下脚本:
sle_password.SetFocus()
在命令按钮cb_cancel的Clicked事件上编写如下脚本:
close(parent)
在命令按钮cb_ok的Clicked事件上编写如下脚本:
Stringls_useridStringls_passwordintegerli_count
ls_userid=sle_userid.Textls_password=sle_password.Text
selectcount(*)into:
li_countfrom users
where userid=:
ls_useridandpassword=:
ls_password;
ifli_count>0thengs_userid=ls_userid
selectusernameinto:
gs_usernamefromusers
whereuserid=:
ls_userid;
CloseWithReturn(parent,'ok')else
ii_count--
ifii_count=0thenhaltclose;sle_userid.text=''sle_password.text=''sle_userid.SetFocus()
endif
保存窗口。
至此,窗口w_login中的工作完全完成。
6、2主窗口的建立
主窗口w_main打开时,应该让用户输入登录信息,如果登录成功则根据用户的权限初始化用户界面。
所以,在窗口w_main的Open事件中编写如下程序:
this.PostEvent('ue_open')
然后,我们为窗口w_main定义一个用户自定义事件ue_open。
在
ue_open事件中编写如下脚本:
stringls_temp
Open(w_login) //打开登陆窗口ls_temp=Message.stringParm //接受登陆窗口的返回信息
ifls_temp<>'ok'then //如果没有登陆成功haltclose; //关闭系统
else //登陆成功,根据用户权限初始化界面
//选择用户的权限
selectprivelegeinto:
ls_tempfromusers
whereuserid=:
gs_userid;
ifMid(ls_temp,1,1)='0'then //没有录入权限m_menu.m_1.m_input.Enabled=False //名片录入菜单不可用
endif
ifMid(ls_temp,2,1)='0'then //没有修改权限m_menu.m_1.m_modify.Enabled=False //名片修改菜单不可用
endif
ifMid(ls_temp,3,1)='0'then //没有查询权限m_menu.m_2.m_query.Enabled=False //名片查询菜单不可用
endif
ifLower(gs_userid)<>'2004041168'then //如果不是系统管理员
m_menu.m_3.m_users.text='修改口令'//只能修改自己的口令endif
idle(100) //设置触发Application对象idle事件的时限为100
秒
endif
6、3创建名片录入窗口w_mp_input
新建一个窗口,然后在窗口上放置1个DataWindow控件、6个
CommandButton控件,按照下图安排控件的布局并设置各个控件及窗
口的属性。
设计完界面后,保存窗口,命名为w_mp_input。
然后开始编写脚本。
6、4创建名片修改窗口w_mp_modified
创建新窗口,在窗口中放置1个DataWindow控件、6个
CommandButton控件,按照下图所示的窗口布局安排控件的位置,然后设置控件及窗口的相关属性。
主要
脚本如下:
在窗口的Open事件中编写如下脚本:
dw_1.SetTransObject(SQLCA)
在窗口的CloseQuery事件中编写如下脚本:
integerli_flag
ifdw_1.ModifiedCount()+dw_1.DeletedCount()>0then
li_flag = MessageBox('提示','数据已经修改,是否保存?
',Question!
YesNoCancel!
1)
choosecaseli_flagcase1//保存
ifdw_1.Update()=1thencommit;
return0else
ifMessageBox('提示','数据错误,不能保存。
是否继续关闭?
',&Question!
YesNo!
2)=1then
return0elserollback;return1endifendif
case2//不保存rollback;
return0
case3//取消
return1endchooseelse
return0endif
在命令按钮‘查找’的Clicked事件中编写如下脚本:
Stringls_rtn//保存查询条件窗口中的返回值
Stringls_sql//保存数据窗口dw_1对应的SQL语句Open(w_mp_Modify_filter)//打开查询条件窗口ls_rtn=Message.StringParm//保存返回的查询条件ifLen(ls_rtn)>0then//返回了查询条件
ls_sql=dw_1.GetSqlSelect()//获取老的SQL语句
ifPos(lower(ls_sql),'where')>0then
ls_sql=Left(ls_sql,Pos(Lower(ls_sql),'where')-1)endif
ls_sql=ls_sql+'where'+ls_rtndw_1.SetSqlSelect(ls_sql)//启用新的SQL语句dw_1.Retrieve()
endif
6、5创建查询条件窗口w_mp_modify_filte
针对名片录入的内容,我们设计一个查询条件输入窗口,在该窗口中可以以名片的各个项目做查询条件。
窗口界面如下图所示:
主要脚本如下:
在‘查询’命令按钮的Clicked