《客户信息管理系统.docx》由会员分享,可在线阅读,更多相关《客户信息管理系统.docx(15页珍藏版)》请在三一办公上搜索。
1、题目:客户信息管理系统专业:.nte网页1班学号:1303110112* *-名:刘冰涛指导教师:胡迎久1、设计题目客户信息管理系统2、设计目的和要求目的:利用Visual Basic和Access实现客户信息管理系统。要求:使系统能运行正确,完成基本的功能如客户类型的增加、删除、查询和修改等。3、设计内容(包括设计思路、设计实现)3.1需求分析客户信息系统需要完成的功能有:客户类型的建立与维护,包括客户类型的新建、修改和删除等。客户信息的输入,详细全面记录并管理客户信息和联系人信息,客户信息包括客户的基本信息,一般的 通讯方式及客户其他信息,如爱好、禁忌、生日等。客户信息的修改和删除,包括启
2、动与取消客户的生日提醒等。方便实用的数据查询功能,根据不同条件查询客户,可以查看客户信息。3.2总体设计本系统采用三层结构设计,即程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。三层在 实际的物理结构上也是独立的,业务逻辑处理层采用ActiveX DLL实现,用户界面与业务逻辑分离,系 统的安全性、可维护性、重要性和扩展性都大大提高。本系统也采用面向对象的设计,系统中将客户类型、客户等都封装成相应的类,同时每个类都有自己 对应的集合类,从而再次提高了对数据库操作系统的安全性和程序的可扩展性。根据对系统功能的分析,我们可以把系统划分成客户类型管理模块、客户管理模块和提醒管理模块。系统的物
3、理结构也分为三层,即用户界面、组件和数据库。3.3程序界面及核心代码3.1需求分析客户信息系统需要完成的功能有:1、客户类型的建立与维护,包括客户类型的新建、修改和删除等。2、客户信息的输入,客户信息包括客户的基本信息,一般的通讯方式及客户其他信息,如爱好、禁忌、 生日等。3、客户信息的修改和删除,包括启动与取消客户的生日提醒等。4、根据不同条件查询客户,可以查看客户信息。3.2概念设计本系统米用三层结构设计,即程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。三层在 实际的物理结构上也是独立的,业务逻辑处理层采用ActiveX DLL实现,用户界面与业务逻辑分离,系 统的安全性、可维护
4、性、重要性和扩展性都大大提高。本系统也采用面向对象的设计,系统中将客户类型、客户等都封装成相应的类,同时每个类都有自己 对应的集合类,从而再次提高了对数据库操作系统的安全性和程序的可扩展性。根据对系统功能的分析,我们可以把系统划分成客户类型管理模块、客户管理模块和提醒管理模块。系统的物理结构也分为三层,即用户界面、组件和数据库。客户管理系统客户类型管理模块客户管理模块提醒管理模块添加客户类型修改客户类型删除客户类型客户信息管理客户评价管理客户合作管理查看今日提醒提醒设置管理修改客户信息删除客户信息查看客户信息查找客户信息添加合作记录修改合作记录删除会议记录添加定时管理修改定时管理删除定时管理查
5、看定时管理系统功能模块图评价信息合作信息提醒信息客户类型各实体间关系的E-R图客户类型客户类型信息实体E-R图客户客户信息实体E-R图(E/R to Relational)ClientType 表:Clientinfo 表13.3逻辑设计(1)模式转换_ _类型名称客户名称客户性别客户电话(客户 E-mail字段名祢数据类型Typeld刍动编号谢增,主键SuperId数字上级类型IDTypeName旻 客户类型名_| ClientType学段名称数据类型Clientld自动编号谢增,主Name文本姓名Sex性别Age年龄Birthday日面时间生日OfficeFhne文本办恣室电话Mobile
6、食本手机Fax文亲传真HomeFhone支亲宅电Clientin1 罚 Cooperate字段名券 宗* Cooperatela QciientldDateSati sf sfcti onRemark数据类型自动编号主握,谢增数字客户I诲外码日期仰寸间新车日期数字度(0-55?备注备注Cooperate 表:耗 WarnType.2:字京名称WTypeld WTypeName数据类型 自动编号史本提塑类型编号 提醒类型名WarnType 表:ra芸 Warning字段名祢 iVarnld Clientlrl ShowDate Typeld Msg数据类型白刃编号日呼时间主键,递增客户ID,为6
7、时表示全体客户 提醵显示日期 提醵类型Hb还码 提醒消息Warning 表:(2)模式规范化ClientType 表、Clientinfo 表、Cooperate 表、WarnType 表、Warning 表均已经为 BCNF 范式(3)完整性约束设计实体完整性约束:ClientType表主键为TypeidClientinfo 表主键为 ClientidCooperate 表主键为 CooperateidWarnType 表主键为 WTypeidWarning 表主键为 Warnid参照完整性约束:Cooperate表的Clientid参照Clientinfo表主键ClientidWarnin
8、g 表的 Typeid 参照 ClientType 表主键 Typeid(4)外模式设计建立了一张Client视图,用于显示每位客户的合作、提醒信息,语句如下:Create view Client asselect Cooperateid, Clientid, Warnid, Clientid, TypeName, Name from ClientType, Clientinfo, Cooperate, Warningwhere Cooperate.Clientid=Clientinfo.Clientid and Warning.Typeid=ClientType.Typeid(5)典型应用设
9、计客户类型管理模块:添加客户类型,修改客户类型,删除客户类型 客户管理模块:客户信息管理,客户评价管理,客户合作管理 提醒管理模块:查看今日提醒,提醒设置管理3.4物理设计内模式设计:主要包括索引、散列、簇集设计ClientType表:索引字段为Typeld,索引表达式为Typeld,索引类型为主索引Clientinfo表:索引字段为ClientId,索引表达式为ClientId,索引类型为主索引Cooperate表:索引字段为Cooperateid,索引表达式为Cooperateid,索引类型为主索引WarnType表:索引字段为WTypeid,索引表达式为WTypeid,索引类型为主索引W
10、arning表:索引字段为Warnid,索引表达式为Warnid,索引类型为主索引3.5系统实现主要模块及其核心代码如下:(1)客户类型管理模块:添加客户类型界面:核心代码:Public Function AddNew(Optional strName As String = , _Optional lngSuperiD As Long = -1) As gxcAddNew if ExistByName(ClientType, TypeName, strName) ThenAddNew = DuplicateName_AddNewExit FunctionEnd ifif lngSuperiD
11、 0 Thenif ExistByiD(ClientType, Typeid, lngSuperiD) = False ThenAddNew = SuperNotExistExit FunctionEnd ifEnd ifif strName Then Me.TypeName = strNameif lngSuperiD -1 Then Me.SuperiD = lngSuperiD Dim strSQL As StringDim ErrMsg As StringiNSERT iNTO ClientType(Superid, TypeName) strSQL & VALUES。 & lngSu
12、periDstrSQL & , & strName & strSQL & )strSQLstrSQLstrSQLstrSQLIf RunSql(strSQL, ErrMsg) ThenMe.ID = MaxID(ClientType, Typeld)AddNew = AddNewOKElseAddNew = AddNewFailEnd IfEnd Function(2)客户管理模块:客户信息管理模块: 添加客户界面:核心代码:Public Function AddNew(Optional ByVal strName As String = , _Optional ByVal intAge As
13、 Integer = 0, _Optional varSex As gxcSex = -1, _Optional lngTypeId As Long = 0) As BooleanOn Error Resume Next如果参数为缺省值,即未传入,则直接调用类中的参数,否则调用传入的参数If strName Then Me.Name = strNameIf intAge 0 Then Me.Age = intAgeIf varSex -1 Then Me.Sex = varSexIf lngTypeId 0 Then Me.TypeID = lngTypeIdDim strSQL As Str
14、ingg Conn.BeginTrans开始一个事务,以免费得到的ID值已被其它客户端所使用此处调用NextID方法,得到该类对应的数据表的下一个ID,即最大ID+1 Me.ID = NextID(ClientInfo”, ClientId)Me.TypeName = GetValueByID(ClientType”, TypeId, Me.TypeID,TypeName)构造SQL语句,注意需调用RealString去除字符串中的单引号,以及一些SQL语法的关键词加口strSQL = Insert into ClientInfo(Name, Age, Sex, TypeId, Mobile,
15、 Email, OfficePhone,strSQL = strSQL & HomePhone, Fax, HomeAddress, MailAddress,ZipCode, Birthday,strSQL = strSQL & BirthdayWarn, Work, Position, Company,CompanySite, SelfSite,strSQL = strSQL & Likes, Hate, Remark, Importance, Friendly, strSQL = strSQL & VALUES(Satisfaction)strSQL = strSQL & & RealSt
16、ring(mvarName) & ,客户名称strSQL = strSQL & mvarAge & ”,客户年龄strSQL = strSQL & mvarSex & ”,性别strSQL = strSQL & mvarTypeId & ”,客户类型IdstrSQL = strSQL & & RealString(mvarMobile) & ,手机strSQL = strSQL & & RealString(mvarEmail) & ,E-mailstrSQL = strSQL & & RealString(mvarOfficePhone) & ,办公室电话strSQL = strSQL &
17、& RealString(mvarHomePhone) & ,宅电strSQL = strSQL & & RealString(mvarFax) & ,传真strSQL = strSQL & & RealString(mvarHomeAdr) & ,家庭住址strSQL = strSQL & & RealString(mvarMailAdr) & ,通讯地址strSQL = strSQL & & RealString(mvarZipCode) & ,邮编strSQL = strSQL & & mvarBirthday & ,生日strSQL = strSQL & mvarBirthdayWar
18、n & ”,是不启用生日提醒strSQL = strSQL & & RealString(mvarWork) & ,职业strSQL = strSQL & & RealString(mvarPosition) & ,职位strSQL = strSQL & & RealString(mvarCompany) & ,公司strSQL = strSQL & & RealString(mvarCompanySite) & ,公司网址strSQL = strSQL & & RealString(mvarSelfSite) & ,个人网址strSQL = strSQL & & RealString(mva
19、rLikes) & ,喜好strSQL = strSQL & & RealString(mvarHate) & ,厌恶strSQL = strSQL & & RealString(mvarRemark) & ,备注strSQL = strSQL & mvarImportance & ”,重要度strSQL = strSQL & mvarFriendly & ”,友好度strSQL = strSQL & mvarSatisfactionstrSQL = strSQL & )执行SQL语句,并提交事务g_Conn.Execute strSQLg_Conn.CommitTrans如果发生错误,则返回
20、FALSE,表示未成功添加AddNew = (Err.Number = 0)End Function满意度查找客户界面:核心代码:按条件查找客户,以集合类的方式返回Public Function Find(Optional ByVal IngID As Long = 0, _Optional ByVal strName As String = , _Optional ByVal lngTypeld As Long = 0) As CClients构造查询SQLDim strSQL As StringstrSQL = Select ClientInfo.*,ClientType.TypeName
21、 from Clientinfo left outer join ClientTypestrSQL = strSQL & ON ClientType.TypeID=ClientInfo.TypeID Where If lngID 0 Then strSQL = strSQL & ClientInfo.ClientID= & lngID & and 如果是按名称查询,则采用“包含”的查询方法If strName ThenstrSQL = strSQL & ClientInfo.Name like % & RealString(strName) & andEnd IfIf lngTypeId 0
22、ThenstrSQL = strSQL & ClientInfo.TypeID= & lngTypeId & and End IfstrSQL = strSQL & ClientInfo.ClientId0On Error Resume Next将查询结果加入集合类Dim rs As RecordsetSet rs = g_Conn.Execute(strSQL)Dim i As LongDim objClient As cClientFor i = 1 To rs.RecordCountSet objClient = New cClientWith objClient.ID = rs(Cli
23、entID).Value.Name = Trim(rs(Name).Value).TypeName = Trim(rs(TypeName).Value).TypeID = rs(TypeID).Value.Sex = rs(Sex).Value.Mobile = Trim(rs(Mobile).Value).Email = Trim(rs(Email).Value).OfficePhone = Trim(rs(OfficePhone).Value).HomePhone = Trim(rs(HomePhone).Value).Fax = Trim(rs(Fax).Value).HomeAdr =
24、 Trim(rs(HomeAddress).Value).MailAdr = Trim(rs(MailAddress).Value).ZipCode = Trim(rs(ZipCode).Value).Birthday = rs(Birthday).Value.Age = rs(Age).Value.BirthdayWarn = rs(BirthdayWarn).Value.Work = Trim(rs(Work).Value).Position = Trim(rs(Position).Value).Company = Trim(rs(Company).Value).CompanySite =
25、 Trim(rs(CompanySite).Value).SelfSite = Trim(rs(SelfSite).Value).Likes = Trim(rs(Likes).Value).Hate = Trim(rs(Hate).Value).Remark = Trim(rs(Remark).Value).Importance = rs(Importance).Value.Friendly = rs(Friendly).Value.Satisfaction = rs(Satisfaction).ValueEnd WithMe.Add objClientSet objClient = Noth
26、ingrs.MoveNextNext iSet rs = NothingSet Find = MeErr.ClearEnd Function客户评价管理模块:&查看客户话息客户基本信息W 客尸其它信息 合作记录 1 SpSft-客户评祐i重要度 i.弗好度 i满意度关闭客户合作管理模块:添加合作信息界面:旧逗画晅X合作信息 合作时间满意度 -一 核心代码:Public Function AddNew(Optional datDate As Date = #1/1/1900#, _Optional lngClientId As Long = -1, _Optional intSatify As
27、Integer = -1, _Optional strRemark As String = ) As gxcAddNew Public Function AddNew(Optional datDate As Date = #1/1/1900#, _Optional lngClientId As Long = -1, _Optional intSatify As Integer = -1, _Optional strRemark As String = ) As gxcAddNewIf lngClientId -1 Then Me.ClientID = lngClientIdIf intSati
28、fy -1 Then Me.Satisfaction = intSatify 上级合作信息的 IDIf strRemark Then Me.Remark = strRemarkIf datDate #1/1/1900# Then Me.CooperateDate = datDateDim strSQL As StringDim ErrMsg As StringstrSQL = INSERT INTO Cooperate(ClientId, Date, Satisfaction, Remark) strSQL = strSQL & VALUES( & Me.ClientIDstrSQL = st
29、rSQL & , & Me.CooperateDate & strSQL = strSQL & , & Me.SatisfactionstrSQL = strSQL & , & RealString(Me.Remark) & strSQL = strSQL & )If RunSql(strSQL, ErrMsg) ThenMe.ID = MaxID(Cooperate, CooperateId)AddNew = AddNewOKElseAddNew = AddNewFailEnd IfEnd Function(3)提醒管理模块:查看今日提醒界面:核心代码:Option ExplicitPriv
30、ate mvarlD As LongPrivate mvarTypeld As LongPrivate mvarTypeName As StringPrivate mvarClientId As LongPrivate mvarClientName As StringPrivate mvarMsg As StringPrivate mvarShowDate As Date提醒信息ID提醒类型ID 提醒类型名称 提醒客户ID 提醒客户名称 提醒显示消息提醒显示时间Private mvarBirthdayWarn As Boolean 是否启用生日提醒启用生日提醒Public Property L
31、et ShowBirthdayWarn(ByVal vData As Boolean) mvarBirthdayWarn = vData Dim strSQL As StringIf mvarBirthdayWarn ThenstrSQLSELECT * FROM Warning WHERE ClientId = _& Me.ClientID & AND TypeId = & BirthdayWarnDim rs As RecordsetSet rs = g_Conn.Execute(strSQL)If rs.RecordCount = 0 ThenAddNew Me.ShowDate, Me
32、.ClientID, 1,今天是& Me.ClientName & 的生日,请做好准备。End IfSet rs = NothingElsestrSQL = DELETE FROM Warning WHERE ClientId = _& Me.ClientID & AND TypeId = & BirthdayWarng_Conn.Execute (strSQL)End IfEnd PropertyPublic Property Get ShowBirthdayWarn() As BooleanShowBirthdayWarn = mvarBirthdayWarnEnd Property设计小
33、结一开始听到要做课程设计时,就有一种畏难心理,认为要编写一个几百甚至上千行的代码似乎不可 能。但是世上无难事,只怕有心人经过我们的努力和探索,终于完成了这次课程设计。此次课程设计不 仅锻炼了我们独立思考和团队合作的能力,而且提高了我们动手的能力。还是在高中接触的半个学期的VB知识,只是一点皮毛,现在远远不够用。所以我们通过图书馆借阅 参考书籍、在网上查阅相关资料,等于是把VB从头学起。我们了解了 VB和其他数据库开发工具的对比, 知道了它在具体到数据库开发方面时的优势,即:快速、简单和功能完备;学习到了三层的C/S构架(客 户端,组件层,数据库)的好处以及它的实现,如何通过用ADO来访问数据库
34、,怎样把VB和数据库连接 起来等等问题,在短期内让我对VB有了基础认识,也让我之后的课程设计可以少走弯路。这次课程设计还有很重要的收获是,我学到了如何合作完成项目。这次的客户信息管理系统是两人 一组合作完成的,也给了我们一个与他人合作的机会。我主要负责系统中一些如添加客户、查询客户的 主要功能的设计和代码编写,徐幸同学负责对主窗体的设计和代码编写以及数据库的表设计。然后把两 部分结合,生成了我们现在看到的课程设计。两个人的合作对完成课题更快捷可是也会有矛盾,可是我 们会在商量和讨论后有一个更完美折中的方法。合作完成的成就感丝毫不亚于一个人的成功,反而因为 多了一个人跟你分享快乐变得更能体会付出之后换来的喜悦。当中也发生了一段小插曲,我们编译、调试都没问题,但在对exe文件的运行过程中,发现exe运行 不了。后来查阅了资料,才知道ActiveX DLL在脱离了开发环境后,首次使用前必须注册。注册的命令 虽然很简单,但是在这种找到错误,学习纠正的过程中,我们这次的课程设计也更具有了意义。完成一个设计需要考虑很多方面,甚至是一些小细节也不能放过。通过这次的课程设计,我学到了 很多,充实了自己的专业知识,为我以后的学习和设计增加了经验。