- 1.05 MB
- 2022-05-14 15:45:05 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
Visual_Basic企业客户管理系统【摘要】客户资源是企业的宝贵财富,客户管理系统可以有效地管理企业的客户资源,记录企业与客户之间的商业活动,这对于现代企业是非常重要的。本系统后台数据库使用Access,前台开发工具使用VisualBasic。系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,从而成功地将面向对象的程序设计思想应用到数据库应用程序设计中。这也是本系统的特色和优势。【关键词】客户管理系统,Access数据库,VisualBasic开发语言,管理信息系统Abstract:Thecustomerresourcesareenterprise"spreciouswealth,thecustomerresourcemanagementsystemmaymanagetheenterpriseeffectivelythecustomerresources,betweentherecordingenterpriseandthecustomertradeactivity,thisregardingthemodernenterpriseisextremelyimportant.ThissystembackstagedatabaseusesAccess,theonstagedevelopmentkitusesVisualBasic.ThesystemusesthepresentquitepopularADOdataaccessingtechnology,andsealseachdatabasetablefieldandtheoperationinthekind,thusappliessuccessfullytheobject-orientedprogrammingthoughtinthedatabaseapplicationprogramming.Thisalsoisthissystemcharacteristicandthesuperiority.[onlinetranslation]Keywords:Thecustomerresourcemanagementsystem,theAccessdatabase,VisualtheBasicdevelopmentlanguage,themanagesofinformation49
目录第一章绪论………………………………………………………………………..31.1选题的背景………………………………………………………………….31.2系统概述……………………………………………………………………..3第二章管理信息系统概述………………………………………………………42.1管理信息系统现状…………………………………………………………..42.2管理信息系统开发方法介绍………………………………………………...5第三章系统调研及可行性分析…………………………………………………..73.1系统调研……………………………………………………………………..73.2可靠性分析概述……………………………………………………………...73.3技术可行性分析………………………………………………………………8第四章系统分析与总体设计………………………………………………………94.1系统需求分析…………………………………………………………………94.2系统体系结构设计…………………………………………………………….94.3开发工具的选择……………………………………………………………….11第五章数据库设计…………………………………………………………………12第六章系统详细设计………………………………………………………………166.1登录窗体和系统主界面设计…………………………………………………166.2基本信息管理模块设计………………………………………………………206.3客户信息管理模块设计……………………………………………………….276.4商业往来管理模块设计……………………………………………………….306.5用户管理模块设计……………………………………………………………32第七章系统使用说明………………………………………………………….34第八章系统测试……………………………………………………………………34第九章论文总结……………………………………………………………………36致谢…………………………………………………………………………………3649
参考文献……………………………………………………………………………37附录…………………………………………………………………………………37第一章绪论1.1选题的背景学习计算机知识的目的在于更加准确、快捷的解决现实生活中的各种问题。我们只有不断的更新和完善自己的知识、在实践中积累经验,才能做出好的软件为社会服务,为使用者提供便利。在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中。它将促进整个社会的发展。随着社会信息技术的提高,计算机已被广泛应用于当今社会的各个领域,成为推动社会发展的首要技术动力。在软件技术的应用中,软件的开发技术,尤其是应用型软件产品的开发技术成了重中之重。不断开发适应用户需求、市场需要的新型软件产品,参与市场竞争,获取最大利润是全球信息企业追求的目标。《客户资源管理系统》正是一个非常实用的应用型软件产品,我们不谈它的经济利益,单说的应用范围就是十分广泛的,客户资源管理系统的用户是各企业负责客户资源管理的员工,主要功能包括基本信息管理、客房信息管理和商业往来管理等,。我想计算机的作用就是辅助人们完成那些烦琐的体力劳动和脑力劳动,使人们从劳动力中解脱出来,今天我所设计的《客户资源管理系统》就是可以有效地管理企业的客户资源,记录企业与客户之间的商业活动,同时使管理员从繁杂的各项劳动中解脱出来。1.2系统概述1.2.1、本课题的研究意义目前市面上流行的客户资源管理系统不少。但是,对于具体的企业单位来说,因为具有自己的特殊性,因此只需要一个操作方便,功能实用,能同时满足本企业的管理及需求的系统。我们的目标就是在于开发一个功能实用、操作方便,简单明了的客户资源管理系统。1.2.2、本论文的目的、内容及作者主要贡献(1)目的:目前市面上流行的客户资源管理系统不少。但是,对于具体的企业单位来说,因为具有自己的特殊性,因此只需要一个操作方便,功能实用,能同时满足本企业的管理及需求的系统。我们的目标就是在于开发一个功能实用、操作方便,简单明了的客户资源管理系统。(2)内容:本系统49
具体包括以下基本功能:基本信息的添加、修改删除和查询。基本信息包括地域信息、客户类别、行业分类、职务名称、项目类型和销售人员等。此功能为客户信息管理和商业往来管理模块提供依据。客户信息的添加、修改、删除和查询。客房信息包括客户单位和联系人。商业往来信息的添加、修改、删除和查询。商业往来信息包括商业机会和客户跟踪。(3)作者的主要任务本人独立完成了此课题的研究与开发,包括调研、分析、设计、编码、测试、文档编写等内容。第二章管理信息系统概述2.1管理信息系统现状管理信息系统(MIS)是一门边缘学科,集管理科学、信息科学、系统科学、现代通信技术和电子计算机技术于一体。1985年,管理信息系统创始人,明尼苏达大学卡尔森管理学院的著名教授戴维斯(Gordon.B.Davis)给出了一个具有代表性的定义:“管理信息系统是一个利用计算机硬件和软件,手工作业、分析、计划、控制和决策模型以及数据库的用户-机器系统。它能提供信息支持企业或组织的运行、管理和决策功能。”随着网络技术的出现,管理信息系统又有了新的必恭必敬,基于网络的管理信息系统不断出现,管理信息系统的概念模型也发生了相应的变化,许多学者对管理信息系统给出了新的定义。例如劳顿认为:“管理信息系统是一个基于计算机的信息系统,它通过收集、处理、存储和扩散信息,来支持组织的管理、决策、合作、控制、分析活动,并使之可视化。”因此,我们可以看出,管理系统系统具有几个基本含义:(1)管理信息系统不是一个单纯的软件系统,而是一个人-机系统,由人和机器协同工作。管理信息系统在支持企业或组织的各项管理活动中,管理人员负责将基础数据及时地输入到计算机中,计算机则根据企业或组织中的各层管理人员的要求对基础数据进行加工处理,并将所得到的信息输出。计算机不断地与最终用户进行着信息的交换,但在对数据的加工处理过程中又需要人的适当干预。(2)管理信息系统的管理过程就是对数据进行惧、存储、加工处理、传递,并产生信息的过程,因此数据是管理信息系统的灵魂。管理信息系统运用了数据库的技术,对基础数据进行统一规划、存储,供各层管理人员使用,从而实现了数据的一致和共享。(3)管理信息系统可以解决企业或组织所面临的问题。例如,管理信息系统可以处理企业产生经营活动的全过程,可以解决组织中数据处理效率问题,也可以解决财务管理决策过程等。49
管理信息系统应具有如下几个功能。(1)数据处理功能:数据处理是管理信息系统最基本的功能,它包括对各种类型数据的收集、加工处理、传递、存储等工作。(2)实测功能:通过对数据的加工处理,可以随时了解各部门的实际运行情况,如各生产车间今天生产的产品数量、销售部接受的订单等。(3)预测功能:通过运用一定的数学方法和预测模型,对过去的数据进行分析,就可能对未来可能发生的情况进行预测,为高级管理人员进行管理决策提供依据。(4)控制功能:通过信息的反馈可以对整个企业生产经营的各个部门、各个环节的运行情况进行监测、协调、控制,保证系统的正常运行。(5)辅助决策功能:通过对数据的加工处理,可以快速地获取对决策有影响的信息,从而为合理的配置企业的各项资源,做出最佳的决策提供科学的依据。目前,管理信息系统的应用已经非常广泛,随着计算机技术、网络技术和通信技术的发展,管理信息系统的功能也日趋完善,并朝着智能化、网络化、集成化等方向发展。如办公自动化(OA)、电子商务(EC)、专家系统(ES)、计算机集成制造系统(CIMS)。2.2、管理信息系统开发方法介绍目前,常用的管理信息系统的开发方法有生命周期法、原型法和面对对象的开发方法。下面仅对原型法和面对对象的开发方法进行简单的描述。(1)原型法:原型法(PrototypingMethod)是20世纪80年代发展起来的,旨在改变生命周期法的缺点的一种系统开发方法。①原型法的基本思想首选根据用户的要求,由用户和开发者共同确定系统的基本要求和主要功能,利用系统快速生成工具,建立一个系统模型。再在此基础上与用户交流,将模型不断补充,修改完善,如此反复,最终直至用户和开发者都比较满意为止,就形成了一个相对稳定、较为理想的管理信息系统。②原型法的开发过程采用原型法开发管理信息系统可以分为如下几个阶段:49
A、确定用户的基本需求。由用户提出对新系统的基本要求,如功能、基本界面形式、所需的数据、应用范围、运行环境等,开发者根据这些信息估算出开发该系统所需的费用,并建立简明的系统模型。B、开发初步的原型系统。系统开发人员根据用户的要求建立原型系统,但该系统只是一个初步的、不成熟的系统,从系统的工作效率上看也是不完善的。其主要目的是为了描述开发者所理解的用户的基本需求。C、修改、评价原型系统。将建造好的原型系统交给用户,并投入试运行,用户将使用过程中发现的问题一一记录下来,并与开发人员进行交流。开发人员针对这些问题不断地对系统进行修改、扩充与完善,直至用户满意为止。D、形成最终的管理信息。对用户满意的原型系统进行进一步的开发,不断补充、完善,最终形成一个适用的管理信息系统。③原型法的优缺点原型法的优点是开发周期短,费用较少,同时可以较有效地避免因开发者和用户的认识隔阂所产生的失败,其缺点是系统的开发缺乏统一的规划和开发标准,难以对系统的开发过程加以控制。原型法一般适用于开发规模不大、不太复杂或需求经常发生变化的系统。(2)面向对象的开发方法面向对象(ObjectOriented)的技术于20世纪80年兴起,随后广泛地应用于计算机技术的几乎所有领域。面向对象的技术中最重要的概念是对象。面向对象是基于问题对象的自底向上的一种系统开发方法。在开发过程中,分析和设计阶段独立于程序设计语言,信息系统模型设计好后,最终用具体的程序设计语言、数据库或硬件来实现。面向对象法最主要的特点是对对象为基础,对象是分析问题和解决问题的核心。①面对对象法的开发过程面对对象法的开发过程一般分为四个阶段:A、认识客观世界(如一个企业)中的对象以及行为,分别独立设计各个对象的实体。B、分析对象之间的联系和相互之间所传递的信息,由此构造客观世界(企业)所对应的信息管理系统的模型。C、由信息系统的模型转换成计算机软件系统的模型。D、由计算机软件系统的模型再转化成一个现实系统。②面向对象法的优缺点:面向对象法的优点是便于帮助分析者、设计者和用户清楚地表达抽象概念,互相进行交流;交流特定的软件工具模块,直接地完成了从对象的描述到软件体系结构之间的转换,避免了其它的方法在开发过程的客观世界描述和软件结构不一致性和复杂性问题,便利系统开发简单、统一,开发周期短,费用低。49
面向对象法的主要缺点与原型法一样,因此这种方法也不适用于开发大的、复杂的系统。本系统在开发过程中具体是采用了原型法和面向对象两种方法相结合的开发思路,力求在开发过程中尽量吸收这两种方法的长处,而克服它们的短处。第三章系统调研及可行性分析3.1、系统调研正式开发管理信息系统之前进行调研是非常必要的,其必要性主要表现在以下几个方面。(1)明确用户的要求,以根据调查结果进行可行性分析,确认系统的开发是否可行。(2)提出新系统的人员并不都是系统研究人员,有些人对于的功能和处理数据的方法没有明确的认识。它们只是根据自己业务工作的需要提出了要求,系统开发人员要对此进行详细的调查和分析,确认用户的要求可以通过现有的计算机技术实现,保证开发的管理信息系统的功能与用户提出的要求相吻合。(3)企业的现行系统可能是手工系统,也可能是使用和计算机的系统,无论是何种情况,都要详细地调查现行系统中信息处理的具体情况,系统内部功能结构,以便设计出一个合理的、好的新系统逻辑模型,为新系统的设计工作打好基础,保证整个系统开发的质量。总之,必要对现行系统进行详细的调查,明确用户需求,保证开发的新系统的功能与用户的要求相吻合,避免耗费大量的人力、物力、财力,新系统的开发却失败的悲剧发生。3.2、可靠性分析概述可靠性分析是在用户的要求和系统调研的基础上进行的,对新系统的开发从社会、技术、经济、管理等方面进行分析,并得出新系统的开发工作可行、不可行、需要修改、追加投资、暂缓开发、分步实施等方案和结论,最后完成可行性分析。可行性分析一般可定义为:可行性分析是在建设的前期对工程项目的一种考察和鉴定,对拟议中的项目进行全面与综合的技术、经济能力的调查,判断它是否可行。(1)可行性分析阶段的主要工作包括以下几个方面:①新系统目标可行性分析:分析新系统的目标是否符合企业的现状和发展的需要。②社会可行性分析:社会可行性分析主要是指管理信息系统的开发是否符合国家法律、下策,是否能够与社会大系统实现良好的对接。49
③技术可行性分析:技术可行性分析是根据新系统的目标来衡量是否具备所需要的技术,包括系统开发人员数量和水平,硬件方面,软件方面及其它应用技术。④经济可行性分析经济可行性分析主要是对开发新系统所投入的资金与系统投入使用后所带来的经济效益进行比较,确认新系统是否会给企业带来一定的经济效益。⑤管理可行性分析:管理可行性分析主要是分析企业现行的管理体制和企业领导是否具有现代化的管理意识和管理水平。3.3、技术可行性分析技术可行性分析主要包括四个方面:目前有关的技术能否支持所开发的新系统;新系统开发人员的数量和水平,即人力资源;硬件和软件资源。(1)技术支持:首先根据新系统的目标,考虑目前有关的技术能否支持所开发的新系统。这里讨论的技术必须是已经普遍使用的,而不是待研究的或正在研究的。(2)硬件资源:开发管理信息系统所需的硬件资源包含以下两个方面:系统开发人员在管理信息系统的开发过程中所需要的计算机设备及其有关的外部设备;管理信息系统开发成功投入使用后,使用单位所应具备的计算机设备及其有关的外围设备。对硬件资源进行可行性分析时主要考虑计算机的主机内存、类型、功能、联网能力、安全保护措施以及输入/输出设备,外存储器和联网数据通信设备的配置、功能、效率等指标是否符合系统方案设计要求,同时还要考虑计算机的性能/价格比。(3)软件资源软件资源的可行性分析主要考虑以下几点是否满足用户的要求:①操作系统的选择;②编译系统的选择;③数据库管理系统的选择;④高级编程语言的选择;⑤汉字处理系统的选择;⑥应用软件包的选择。本系统在开发前,与相关的企业领导进行了密切沟通,认真听取他们的意见,并吸收他们的积极观点,使本系统的开发在相当大的程度上具有一定的先进性和合理性。49
第四章系统分析与总体设计要开发一个管理信息系统,首先需要进行需求分析和总体设计,分析系统的使用对象和用户需求,设计系统的体系结构和数据库结构,决定使用的开发工具和后台数据库,规划项目开展进度。在实际的项目开发过程中,这些工作是非常重要的。4.1系统需求分析客户资源管理系统的用户是各企业负责客户资源管理的员工,主要功能包括基本信息管理、客房信息管理和商业往来管理等,具体说明如下:l基本信息的添加、修改删除和查询。基本信息包括地域信息、客户类别、行业分类、职务名称、项目类型和销售人员等。此功能为客户信息管理和商业往来管理模块提供依据。l客户信息的添加、修改、删除和查询。客房信息包括客户单位和联系人。商业往来信息的添加、修改、删除和查询。l商业往来信息包括商业机会和客户跟踪。4.2系统体系结构设计本节根据需求分析中总结的用户需求设计系统的体系结构。系统的功能模块如图1所示。49
图1客户资源管理系统功能模块图在功能模块示意图的树状结构中,每一个叶结点都是一个最小的功能模块。每一个功能模块都需要针对不同的表完成相同的数据库操作,即添加记录、修改记录、删除记录以及查询显示记录信息。在本系统中,用户管理模块的功能比较简单。在系统初始化时,有两个默认的用户。系统管理员用户为Admin,普通用户为Users,由程序设计人员手动地添加到数据库中,它们的默认密码均为111111。Admin用户可以创建用户、修改用户信息以及删除用户;普通用户则只能修改自己的用户名和密码。用户管理功能模块的关系如图2所示。图2用户管理功能功能集合模块关系图下面进行系统流程分析,所谓系统流程就是用户在使用系统时的工作过程。运行系统后,首先会看到登录窗体,对用户的身份进行认证。身份认证可以分为以下两个过程:l确认用户是否是有效的系统用户。l确认用户的类型。第1个过程决定用户能否进行系统,第2个过程根据用户的类型决定用户的操作权限。如果需要对普通用户进行管理,则使用Admin用户登录;否则建议使用Users用户登录。如果还要创建其他用户,可以在用户管理模块中创建和管理。在创建用户时,需要输入要创建的用户名和密码。Admin用户还可以修改和删除其他普通用户数据。49
在本系统中,应该首先增加基本信息,之后才能增加客房信息。基本信息包括地域、客房类别、行业分类、职务名称、项目类型和销售人员等内容。地域信息包括地域名称、地域类型和上级地域等内容;销售人员信息包括员工姓名、性别、所属部门和职务等内容;客户类别、行业分类、职务名称和项目类型则只包含名称内容。添加基本信息后,就可以添加客户信息了。在客户信息管理模块中可以对客户单位和客户联系人进行添加、修改、删除和查看等操作。客户单位信息包括单位名称、客户类别、所在地域、通信地址、邮政编码、所属行业等内容。在添加客户单位时,需要选择客户类别、所在地域和所属行业。客户联系人包括客户单位、联系人姓名、性别、职务、移动电话等内容。在添加客户联系人信息时,需要选择客户和职务。在商业往来管理模块中,可以对商业机会和客户跟踪信息进行添加、修改、删除和查看等操作。商业机会信息包括客户信息、联系人信息、项目名称、项目类型和销售人员等操作。商业机会信息包括客户信息、联系人信息、项目名称、项目类型和销售人员等内容。在添加商业机会信息时,需要选择客户单位、联系人、项目类型和销售人员等内容。在客户跟踪管理模块中,可以对客户跟踪回访信息进行添加、修改、删除和查看等操作。客户跟踪信息包括商业机会、销售人员、任务日期、拜访方式、预计目的和详细介绍等内容。在添加客户跟踪信息时,需要选择商业机会、销售人员和拜访人员等内容。本系统的流程分析如图3所示。49
图3系统流程分析图在系统流程分析图中可以看到,每个用户有3次机会进行身份认证。如果3次输入的用户名和密码都无法与数据库中的数据匹配,则强制退出系统。4.3开发工具的选择开发数据库管理信息系统需要选择两种工具,即前台开发语言和后台数据库。选择开发工具时应该考虑客户需求、系统功能和性能需求以及开发人员的习惯等因素。例如,开发C/S(客户/服务器)结构的应用程序时,前台开发语言通常可以选择VisualBasic、VisualC++、Delphi和PowerBuilder等;如果开发网络应用程序,则需要选择一个网络数据库开发系统,如Access、Oracle和IBMDB2等;如果开发单机应用程序,则只要选择一个小型数据库系统就可以了,例如Access。与其他开发工具相比,VisualBasic具有简单易学、灵活方便和易于扩充等特点,越来越多地被用作客户/服务器(Client/Server,简称为C/S)应用程序的前端开发工具,与后端的开发工具Access数据库结合,能够提供一个高性能的管理信息系统解决方案因为本系统是单机版的数据库应用系统,所以采用VisualBasic作为开发工具,Access作为后台数据库。第五章数据库设计数据库结构设计是总体设计阶段非常重要的环节,好的数据库结构可以简化开发过程,使系统功能更加清晰明确。因为数据库结构的变化会造成编码的改动,所以必须认真设计数据库结构后再进行编码,从而避免无所谓的重复工作。本系统数据库中包含8个表,即基本信息表Types、地域信息表Area、销售人员信息表Employess、客户单位信息表Customer、联系人信息表Contact、商业机会表SaleCHance、客户跟踪表SaltTask和用户信息表Users。下面分别介绍这些表的结构。1、基本信息表Types表Types用来保存客户类别信息、行业分类信息、职务名称信息和项目类型信息,结构如表1所示。 表Types的结构编号字段名称数据结构说明1Id自动编号记录编号,主键2TypeName文本,长度50信息名称49
3Flag数字/字节类型标记。1表示客户类别;2表示客户所属行业;3表示职务名称;4表示项目类型1、地域信息表Area表Area用来保存地域信息,结构如表2所示。表Area的结构编号字段名称数据结构说明1AreaId数字/长整型记录编号,主键2AreaName文本,长度50地域名称3AreaType数字/字节地域类型。1表示洲;2表示国家。3、表示省;4表示市县4UpperId数字/长整型上级地域编号2、销售人员信息表Employess表Employess用来保存销售人员信息,结构如表3所示。表Employess的结构编号字段名称数据结构说明1EmpId自动编号人员编号,主键2EmpName文本,长度50姓名3Sex文本,长度2性别4DepName文本,长度50所在部门5ETitle文本,长度50职务3、客户单位信息表Customer表Customer用来保存客户单位信息,结构如表4所示。 表Customer编号字段名称数据结构说明1CustId自动编号记录编号,主键2CEastman文本,长度200课程名称3CustTypeId数字/长整型所属客户类型编号4Address文本,长度200通信地址5Postcode文本,长度50邮政编码49
6AreaId数字/长整型所属地域编号7BussTypeId数字/长整型所属行业类别编号8EmpId数字/长整型销售人员1、联系人信息表Contact表Contact的结构编号字段名称数据结构说明1Id自动编号记录编号,主键2CustId数字/长整型客户单位编号3CName文本/长度50姓名4Sex文本/长度2性别5TitleId数字/长整型职务编号6Office文本,长度50办公电话7Mobile文本,长度50移动电话8Birth文本,长度50生日9Hobby文本,长度50兴趣爱好10Memo1备注备注信息11Input_date文本,长度50记录录入日期12Input_time文本,长度50记录录入时间2、商业机会表SaleChance表SaleChance用来保存商业机会信息,结构如表6所示。 表SaleChance的结构编号字段名称数据结构说明1Id文本,长度50记录编号2CustId数字/长整型客户编号3CtId数字/长整型联系人编号4ProName文本/长度200产品名称5PTypeId数字/长整型项目类型编号6EmpId数字/长整型销售人员编号7SignDate文本,长度50预计签订日期49
8SignSum数字/长整型预计成交金额9PPercent文本,长度50目前进度10Status文本,长度50状态11Detail备注详细介绍12CreateDate日期/时间创建日期13Poster文本,长度50创建人1、客户跟踪表SaleTask表SaleTask用来保存客户任务跟踪信息,结构如表7所示。表SaleTask的结构编号字段名称数据结构说明1Id自动编号记录编号2SaleId文本,长度50商业机会编号3EmpId数字/长整型销售人员编号4TaskDate文本/长度50任务日期5Purpose文本/长度50拜访目的6CtId数字/长整型拜访人员编号7Place文本,长度100拜访地点8StartTime数字/长整型开始时间9EndTime文本,长度50目前进度10EndTimeDetail结束时间11Detail备注详细介绍12Result备注任务结果、进展总结2、用户信息表Users表Users用来保存系统用户信息,结构如表8所示。表Users的结构编号字段名称数据结构说明1UserName文本,长度50用户名,主键2UserPwd文本,长度50密码49
第六章系统详细设计6.1登录窗体和系统主界面设计当系统运行时,首先打开登录窗体,只有有权限的用户才能进行系统。登录成功后,将显示系统主界面。1、设计登录窗体登录窗体的名称为FrmLogin,它的界面布局如图4所示。图4登录窗体的界面布局登录窗体的属性表如表9所示。 表9设计登录窗体的属性窗体属性设置值具体说明名称FrmLogin设置窗体名称BorderStyle1-FixedSingle设置窗体的边框属性Caption身份验证窗体的标题条文本ControlBoxFalse取消控制按钮,防止用户通过控制按钮关闭对话框StartUpPosition2-屏幕中心设置窗体弹出时,位置在屏幕中心49
登录窗体中控件的属性如表10所示。表10登录窗体包含的控件及其属性 对象名属性属性值Label1Caption用户名Label2Caption密码txtUserText空txtPwdText空PasswordChar*Cmd_OkCaption确定Cmd_CancelCaption取消下面介绍登录窗体的部分代码(1)变量声明登录窗体的变量声明如下:PublicPasswordKeyAsStringPublicTry_timesAsIntegerPublicNameKeyAsString(2)Cmd_Click过程当用户单击“确定”按钮时触发Cmd_Click事件,进行身份验证,代码如下:PrivateSubCmd_OK_Click()DimjAsSingle"数据有效性检查IftxtUser=""ThenMsgBox"请输入用户名"txtUser.SetFocusExitSubEndIfIftxtPwd=""ThenMsgBox"请输入密码"txtPwd.SetFocusExitSubEndIfNameKey=MakeStr(txtUser)PasswordKey=MakeStr(txtPwd)"判断用户是否存在49
IfMyUser.In_DB(NameKey)=FalseThenMsgBox"用户名不存在"Try_times=Try_times+1IfTry_times>=3ThenMsgBox"您已经三次尝试进入本系统,均不成功,系统将关闭"DBapi_DisconnectEndElseExitSubEndIfEndIf"判断密码是否正确MyUser.GetInfo(NameKey)IfMyUser.UserPwd<>PasswordKeyThenMsgBox"密码错误"Try_times=Try_times+1IfTry_times>=3ThenMsgBox"您已经三次尝试进入本系统,均不成功,系统将关闭"DBapi_DisconnectEndElseExitSubEndIfEndIf"登录成功,将当前用户的信息保存在CurUser中CurUser.GetInfo(MyUser.UserName)"关闭自己UnloadMeEndSub程序的运行过程如下:l判断是否输入了用户名和密码,如果没有输入,则返回,要求用户输入。l将输入的用户名和密码赋值到变量NameKey和Passwordkey中,便于处理。l调用MyUser.In_DB()函数,判断当臆用户名是否存在。如果不存在,则返回,要求用户重新输入,同时将计数变量Try_times加1。49
l如果用户名存在,则调用MyUser.GetInfo()函数,读取此用户的数据,并将用户密码与输入的密码进行比较。如果密码不同,要求用户重新输入,同时将计数变量Try_times加1。l如果Try_times大于或等于3,则退出系统。l如果通过密码验证,则将当前用户的信息保存到curUser对象中,以便以后使用。l关闭登录窗体。2、设计主界面主窗体是工程的启动对象,可以在系统菜单中选择“工程”/“属性”,打开属性窗口设置启动对象。本系统中主窗体名为FrmMain。打开窗体的设计窗口,选择“工具”菜单项中的“菜单编辑器”,对菜单内容进行编辑,菜单编辑器如图5所示。图5菜单编辑器本系统的主界面如图6所示。49
图6系统主界面在主窗体FrmMain中添加如下代码:PrivateSubForm_Load()FrmLogin.Show1EndSub当主窗体启动时,将打开“登录”对话框。如果不能通过身份验证,则不能进行系统。当选择“退出系统”菜单项时触发mn_Click事件,代码如下:PrivateSubmn_Exit_Click()DBapi_DisconnectEndEndSub6.2基本信息管理模块设计基本信息管理模块包括地域信息管理、客户类别管理、行业分类管理、职务名称管理、项目类型管理和销售人员管理。6.2.1设计地域信息编辑窗体49
编辑地域信息的窗体可以用来添加和修改地域信息,窗体名称设置为FrmAreaEdit,窗体布局如图7所示。图7窗体FrmAreaEdit布局Cmd_Ok_Click过程当用户单击“确定”按钮时触发Cmd_Ok_Click事件,对应的程序代码如下:PrivateSubCmd_OK_Click()DimTmpIdAsIntegerIfTrim(txtArea)=""ThenMsgBox"请输入地域名称"ExitSubEndIf"将用户输入的输入赋值到MyArea对象中WithMyArea.AreaName=Trim(txtArea).AreaType=CurArea.AreaType+1.UpperId=CurArea.AreaIdIfModify=FalseThen"插入If.In_DB(Trim(txtArea),.UpperId)=TrueThenMsgBoxTrim(txtArea)+"已经存在"ExitSubEndIfTmpId=.Insert"生成TreeView控件中新结点的关键字Tmp_Key=Chr(Asc("a")+.AreaType)Tmp_Key=Tmp_Key+Trim(Str(TmpId))FrmAreaMan.TreeView1.SelectedItem.Image=149
FrmAreaMan.TreeView1.SelectedItem.ExpandedImage=2FrmAreaMan.TreeView1.SelectedItem.SelectedImage=3SetTmpNode=FrmAreaMan.TreeView1.Nodes.Add(FrmAreaMan.TreeView1.SelectedItem.Key,_tvwChild,Tmp_Key,.AreaName,4,5)TmpNode.Selected=TrueElse"修改IfCurArea.AreaName<>Trim(txtArea)ThenIf.In_DB(Trim(txtArea),.UpperId)=TrueThenMsgBoxTrim(txtArea)+"已经存在"ExitSubEndIfEndIfCall.Update(CurArea.AreaId)IfCurArea.AreaName<>Trim(txtArea)ThenFrmAreaMan.TreeView1.SelectedItem.Text=Trim(txtArea)EndIfCurArea.AreaName=Trim(txtArea)EndIfEndWithUnloadMeEndSub6.2.2设计地域信息管理窗体地域信息管理窗体的名称设置为FrmAreaMan。在窗体中添加一个ImageList控件。右击此控件,选择菜单中的“属性”命令,打开“属性页”对话框。单击“图像”选项卡,通过单击“插入图像”和“删除图像”来编辑图像列表,如图8所示。49
下面分析窗体FrmClassMan中部分过程的代码。1、Form_Load过程PrivateSubForm_Load()FocusAreaName="中国""添加根结点SetTmpNode=TreeView1.Nodes.Add(,,"a0","全球地域",1,3)TmpNode.Selected=TrueTmpNode.ExpandedImage=2CallAdd_AreaToTree(TreeView1)TreeView1_ClickEndSub1、Cmd_Add_Click过程PrivateSubCmd_Add_Click()IfCurArea.AreaType>=4ThenMsgBox"此地域已不能再细分"ExitSubEndIf"打开编辑窗体FrmAreaEdit.lblUpper=CurArea.AreaNameFrmAreaEdit.txtArea=""FrmAreaEdit.Modify=False49
FrmAreaEdit.Show1TreeView1_ClickEndSub1、Cmd_Modi_Click过程当单击“修改”按钮时触发Cmd_Modi_Click事件,对应的代码如下:PrivateSubCmd_Modi_Click()IfTreeView1.SelectedItem.Key="a0"ThenMsgBox"此项不能修改"ExitSubEndIfFrmAreaEdit.lblUpper=MyArea.GetName(CurArea.UpperId)FrmAreaEdit.txtArea=CurArea.AreaNameFrmAreaEdit.Modify=TrueFrmAreaEdit.Show1TreeView1_ClickEndSub2、Cmd_Del_Click过程当单击“删除”按钮时触发Cmd_Del_Click事件,对应的代码如下:PrivateSubCmd_Del_Click()DimTmpOrgAsStringIfCurArea.AreaType=0ThenMsgBox"此项不能删除"ExitSubEndIfIfCurArea.HaveSon(CurArea.AreaId)=TrueThenMsgBoxCurArea.AreaName+"包含下级地域,不能删除"ExitSubEndIfTmpOrg=MyCust.Area_In_Customer(TmpAreaId)IfTmpOrg<>""ThenMsgBox"地域中包含客户信息-"+TmpOrg+",不允许删除"ExitSubEndIf"确认删除49
IfMsgBox("是否确定要删除"+Trim(TreeView1.SelectedItem.Text),vbYesNo,"请确认")=vbNoThenExitSubEndIfCurArea.Delete(CurArea.AreaId)TreeView1.Nodes.RemoveTreeView1.SelectedItem.IndexTreeView1_ClickEndSub1、TreeView1_Click过程当单击TreeView列表时触发TreeView1_Click事件,对应的代码如下:PrivateSubTreeView1_Click()DimTmpTypeAsInteger"根据关键字获取地域信息FocusKey=TreeView1.SelectedItem.KeyCurArea.AreaName=TreeView1.SelectedItem.TextTmpType=Asc(Left(TreeView1.SelectedItem.Key,1))CurArea.AreaType=TmpType-Asc("a")CurArea.AreaId=Val(Right(TreeView1.SelectedItem.Key,Len(TreeView1.SelectedItem.Key)-1))"如果是根结点,则不需要再处理IfCurArea.AreaType=0ThenExitSubEndIf"决定结点显示的图像IfCurArea.HaveSon(CurArea.AreaId)=FalseThenTreeView1.SelectedItem.ExpandedImage=4TreeView1.SelectedItem.Image=4TreeView1.SelectedItem.SelectedImage=5EndIf"将地域信息读取到CurArea对象中CurArea.GetInfo(CurArea.AreaId)EndSub6.2.3设计选择地域信息窗体49
为了方便用户在其他模块中选择地域信息,设计一个选择地域信息的窗体,窗体名为FrmAreaSel。它的布局如图9所示。窗体的属性如表11所示。表11设置窗体的属性窗体属性设置值具体说明名称FrmAreaSel设置窗体名称BorderStyle1-FixedSinglw设置窗体的边框属性Caption窗体的标题条文本为空ControlBoxFalse取消控制按钮StartUpPosition0-手动设置窗体弹出时,位置由用户指定当用户双击TreeView控件时触发TreeView1_DbClick事件,对应的代码如下:PrivateSubTreeView1_DblClick()DimTmpStrAsStringIfAreaLevel>0AndAreaLevel<5AndAreaLevel<>MyArea.AreaTypeThenSelectCaseAreaLevelCase1TmpStr="洲"Case2TmpStr="国家"Case3TmpStr="省"49
Case4TmpStr="市/县"EndSelectMsgBox"请选择"+TmpStrExitSubElseIfAreaLevel=5Then"选择国家、省、市/县IfMyArea.AreaType<2OrMyArea.AreaType>4ThenMsgBox"请选择国家、省、市或县"ExitSubEndIfEndIfIfAreaLevel=6Then"选择省、市/县IfMyArea.AreaType<3OrMyArea.AreaType>4ThenMsgBox"请选择省、市或县"ExitSubEndIfEndIfEndIfCurArea.AreaId=MyArea.AreaIdCurArea.AreaName=MyArea.AreaNameCurArea.AreaType=MyArea.AreaTypeClickOK=TrueUnloadMeEndSub6.2.4设计客户类别信息编辑窗体客户类别信息编辑窗体的名称为FrmTypes,窗体中包含的控件及其属性如表12所示。表12窗体FrmTypes中包含的控件及其属性对象名属性属性值DataList1NameDataList1(用来显示客户类别名称)AdoTypeVisibleFalse(用于提供数据源)txtNameCaptiontxtName(用来编辑分类名称)Cmd_AddCaption添加Cmd_ModiCaption修改49
Cmd_DelCaption删除Cmd_ExitCaption退出窗体FrmType的布局如图10所示。6.3客户信息管理模块设计客户信息管理模块包括客户单位管理和客户联系人管理等功能。6.3.1设计客户单位信息编辑窗体客户单位信息编辑窗体的窗体为FrmCustomerEdit,窗体布局如图11所示。6.3.2设计客户单位信息管理窗体客户单位信息管理窗体的名称为FrmCustomerMan,窗体布局如图12所示。49
窗体属性与登录窗体相似,窗体中主要控件的属性如表13所示。表13设置窗体中主要控件的属性对象名属性属性值ComboArea用于选择地域Check1用于选择全部地域Dco_Ctype用于选择客户类别Check2用于选择全部客户类别AdoType为dco_Ctype提供数据源lblTotal用于显示全部客户单位数量lblSel用于显示当前选择客户单位的数量DataGrid1用于显示客户单位信息Adodc1为DataGrid1控件提供数据源Cmd_AddCaption添加Cmd_ModiCaption修改Cmd_DelCaption删除Cmd_ExitCaption返回6.3.3设计客户联系人信息编辑窗体客户联系人信息管理窗体的名称为FrmContactEdit,窗体布局如图13所示。49
6.3.4设计客户联系人信息管理窗体客户联系人信息管理窗体的名称为FrmContactMan,窗体布局如图14所示。6.3.5设计客户联系人信息查看窗体客户联系人信息查看窗体的名称为FrmContactView,窗体布局如图15所示。49
6.4商业往来管理模块设计商业往来管理模块包括商业机会管理和客户跟踪管理等功能。6.4.1设计商业机会信息编辑窗体商业机会信息编辑窗体的名称为FrmSaleEdit,窗体布局如图16所示。49
6.4.2设计商业机会信息管理窗体商业机会信息管理窗体的名称为FrmSaleMan,窗体布局如图17所示。6.4.3设计商业机会查看管理窗体在客户单位信息管理窗体中,选择一个客户单位记录,然后再单击“查看销售机会”按钮,将打开商业机会信息查看窗体。商业机会信息查看管理窗体的名称为FrmSaleView,窗体布局如图18所示。6.5用户管理模块设计49
用户管理模块包括用户管理和修改密码等功能。6.5.1用户管理窗体用户管理窗体的名称为FrmUserMan,窗体布局如图19所示。6.5.2编辑用户信息窗体49
第七章系统使用说明7.1使用说明1、运行于Windows2000以上操作系统。建议分辨率:800*600。2、系统默认用户名、密码如下:用户名密码Admin1111117.2运行环境1、运行环境:Windows2000以上操作系统。2、JET数据引擎、ADO数据引擎。第八章系统测试8.1软件测试的目的和原则在开发大型软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。我们力求在每个阶段结束之前通过严格的技术审查,尽可能早的发现并纠正错误。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。尽管面向对象技术的基本思想保证了软件应该有更高的质量,但无论采用什么样的编程技术,编程人员的错误都是不可避免的,而且由于面向对象技术开发的软件代码重用率高,更需要严格测试,避免错误的繁衍。因此,软件测试在面向对象编程里更具有它的重要性。与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤地继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件系统的测试的基本层次如图所示。49
图20测试的基本层次(1)单元测试单元测试的用例从单元详细设计中导出。在单元测试中可以采用功能性测试和结构性测试两种。(2)集成测试在这个测试步骤中所发现的往往是概要设计的错误。(3)系统测试在这个测试步骤中所发现的往往是需求规格说明的错误。一般来说,系统测试是功能性测试,不是结构性测试。8.2子系统测试在客户资源管理系统的开发过程中,每开发完一个模块都会进行模块功能测试,由于系统还没有最后完成,现在暂时还不能进行集成和系统测试,这部分将在系统完成后才能进行。软件测试和调试过程中,系统显示出数据冗余度少、数据一致性强。系统功能设计符合用户要求。由于本人自身能力的局限性,所以做编写的代码,即使经过反复检查也难免出错所以在本阶段力求使用有限的时间找出尽可能多的错误,力求系统尽量正确。我们在本系统的测试中使用了黑盒法(即不关心程序内部的逻辑结构,而是根据程序的功能来设计是检测)请一位不熟悉本系统的人来进行随意性的操作,打破习惯的操作顺序,从中发现错误,在此阶段系统的大量错误得到了改正。49
第九章论文总结9.1系统存在的不足与改进方案本系统是本人参于MIS设计的第一个项目,由于经验的不足和相关知识的欠缺,导致系统开发中有些方面设计得不够周全。比如在数据库建模之初,由于急于开发,对建模这一块就没有很认真地设计,导致系统开发的过程中经常回过头来修改数据库,浪费了很多的时间。现在的系统还有一些数据的显示不是很符合实际,这要在数据窗口中进行统一设置。我们会对系统不断进行完善和升级,力求将不足之处一一改正过来。9.2毕业设计心得与收获通过参与一个实际项目的设计与开发,我学习到了好多从课本中学不到的知识,深刻理解了理论联系实际的客观意义,也明白了搞软件开发不是一件孤立的事情,从系统的设计到最终的成品推出,每一个步骤都需要我们严谨对待,同时也认识到对这一类专业软件业务的熟悉是软件最终能否在实际中使用的关键。这次毕业设计培养了我注重实际、勇于创新的良好思维能力,为以后的工作起到了很好的铺垫作用。致谢在论文的选题及其后的设计过程中得到指导老师的悉心指导,使本文得以顺利完成,在此向刘老师表示衷心的感谢。本论文是在刘老师的指导下修改完成的。在此,要对她们的细心帮助和指导表示由衷的感谢。在这段时间里,我从她们身上不仅学到了许多的专业知识,更感受到了她们工作中的兢兢业业,生活中的平易近人。此外,她们严谨的治学态度和忘我的工作精神值得我去学习。感谢给予与我帮助的其他人员,他们在我的毕业设计过程中经常给我提出许多关键性的问题,使我受益匪浅。感谢多年来传授我知识的老师们,更要感谢我的家人对我学业上的支持和鼓励,感谢所有关心帮助过我的人。在此我要特别感谢我的指导老师对我的精心指导和帮助,感谢本次答辩过程中在座的各位老师。你们的言传身教将使我终生受益!感谢所有帮助过我的人!49
参考文献:1、《VisualBasic程序设计院》,马力,北京大学出版社,2004-8-12、《VisualBasic数据库编程宝典》,冯硕,费志博,电子工业出版社,2001-5-13、王守茂,《管理信息系统的分析与设计》,天津科技翻译出版公司,1993年4、曹青、邱李华、郭志强,《VisualBasic程序设计教程》,机械工业出版社,2002年5、姜旭平,《信息系统开发方法》,清华大学出版社6、王珊,《数据庫系统概述》,高等教育出版社7、姚达,《数据庫设计》,高等教育出版社8、王思波,《管理信息系统实用教程》,电子工业出版社9、胡存,《局域网:组网技术与管理》,电子工业出版社10、王珊、陈红,《数据库系统原理教程》,清华大学出版社,1999年附录:部分窗体源代码1、地域管理窗体代码PrivateSubCmd_Add_Click()IfCurArea.AreaType>=4ThenMsgBox"此地域已不能再细分"ExitSubEndIf"打开编辑窗体49
FrmAreaEdit.lblUpper=CurArea.AreaNameFrmAreaEdit.txtArea=""FrmAreaEdit.Modify=FalseFrmAreaEdit.Show1TreeView1_ClickEndSubPrivateSubCmd_Back_Click()UnloadMeEndSubPrivateSubCmd_Del_Click()DimTmpOrgAsStringIfCurArea.AreaType=0ThenMsgBox"此项不能删除"ExitSubEndIfIfCurArea.HaveSon(CurArea.AreaId)=TrueThenMsgBoxCurArea.AreaName+"包含下级地域,不能删除"ExitSubEndIfTmpOrg=MyCust.Area_In_Customer(TmpAreaId)IfTmpOrg<>""ThenMsgBox"地域中包含客户信息-"+TmpOrg+",不允许删除"ExitSubEndIf"确认删除IfMsgBox("是否确定要删除"+Trim(TreeView1.SelectedItem.Text),vbYesNo,"请确认")=vbNoThenExitSubEndIfCurArea.Delete(CurArea.AreaId)TreeView1.Nodes.RemoveTreeView1.SelectedItem.Index49
TreeView1_ClickEndSubPrivateSubCmd_Modi_Click()IfTreeView1.SelectedItem.Key="a0"ThenMsgBox"此项不能修改"ExitSubEndIfFrmAreaEdit.lblUpper=MyArea.GetName(CurArea.UpperId)FrmAreaEdit.txtArea=CurArea.AreaNameFrmAreaEdit.Modify=TrueFrmAreaEdit.Show1TreeView1_ClickEndSubPrivateSubForm_Load()FocusAreaName="中国""添加根结点SetTmpNode=TreeView1.Nodes.Add(,,"a0","全球地域",1,3)TmpNode.Selected=TrueTmpNode.ExpandedImage=2CallAdd_AreaToTree(TreeView1)TreeView1_ClickEndSubPrivateSubTreeView1_Click()DimTmpTypeAsInteger"根据关键字获取地域信息FocusKey=TreeView1.SelectedItem.KeyCurArea.AreaName=TreeView1.SelectedItem.TextTmpType=Asc(Left(TreeView1.SelectedItem.Key,1))CurArea.AreaType=TmpType-Asc("a")CurArea.AreaId=Val(Right(TreeView1.SelectedItem.Key,Len(TreeView1.SelectedItem.Key)-1))"如果是根结点,则不需要再处理IfCurArea.AreaType=0ThenExitSub49
EndIf"决定结点显示的图像IfCurArea.HaveSon(CurArea.AreaId)=FalseThenTreeView1.SelectedItem.ExpandedImage=4TreeView1.SelectedItem.Image=4TreeView1.SelectedItem.SelectedImage=5EndIf"将地域信息读取到CurArea对象中CurArea.GetInfo(CurArea.AreaId)EndSub2、行业分类设置窗体代码PrivateOriIdAsLong"类型编号PrivateOriTypeNameAsString"原来的类型名称"类型分类编号,1-客户类型;2-行业分类;3-职务类型;4-项目类型PublicnFlagAsIntegerPrivateSubCmd_Add_Click()"添加课程类型名称,先判断域是否为空IfLen(Trim(txtName))=0ThenMsgBox("请输入类型名称")txtName.SetFocusExitSubEndIf"判断数据库中是否已经存在此类型名称IfMyType.In_DB(Trim(txtName),nFlag)=TrueThenMsgBox("已经存在此类型名称")49
txtName.SetFocusExitSubEndIf"插入新记录WithMyType.TypeName=Trim(txtName).Flag=nFlag.InsertMsgBox"添加成功"EndWithDataRefreshEndSubPrivateSubCmd_Del_Click()IfLen(Trim(DataList1.BoundText))=0ThenMsgBox("请选择记录")ExitSubEndIf"确定删除IfMsgBox("是否确定要删除",vbYesNo,"请确认")=vbNoThenExitSubEndIf"删除类型MyType.Delete(Val(DataList1.BoundText))MsgBox"删除成功"DataRefresh"刷新DataList1EndSubPrivateSubCmd_Exit_Click()UnloadMeEndSubPrivateSubCmd_Modi_Click()"修改类型名称IfLen(Trim(DataList1.BoundText))=0Then49
MsgBox("请选择记录")ExitSubEndIf"判断新的名称是否和原来的相同IfTrim(txtName)=OriTypeNameThenExitSubEndIf"判断新的名称是否已经存在IfMyType.In_DB(Trim(txtName),nTypeId)=TrueThenMsgBox("已经存在此类型名称")txtName.SetFocusExitSubEndIf"更新名称MyType.TypeName=Trim(txtName)MyType.Update(OriId)MsgBox"修改成功"DataRefresh"刷新类型列表EndSubPrivateSubDataList1_Click()"点击列表记录,将编号和名称放入变量和txtName域IfLen(Trim(DataList1.BoundText))=0ThenMsgBox("请选择记录")ExitSubEndIfOriId=Val(DataList1.BoundText)"记录编号IfMyType.GetInfo(OriId)=TrueThen"判断是否存在此记录信息OriTypeName=Trim(MyType.TypeName)"将类型名称保存到变量中txtName=Trim(MyType.TypeName)"文本框中显示类型名称EndIfEndSubPrivateSubForm_Load()"刷新DataList1中的数据49
DataRefreshEndSubPrivateSubDataRefresh()"设置连接字符串AdoType.ConnectionString=Conn"设置SQL语句AdoType.RecordSource="SELECT*FROMTypesWHEREFlag="+Trim(nFlag)AdoType.Refresh"设置数据源SetDataList1.RowSource=AdoTypeDataList1.ListField="TypeName""设置列表中显示字段DataList1.BoundColumn="Id""设置列表绑定字段DataList1.RefreshEndSub3、客户基本信息管理窗体PrivateSubRefresh_Customer()DimTmpSourceAsStringIfCurArea.AreaId<=0AndCheck1.Value=0ThenlblSel=0ExitSubEndIf49
"计算全部单位总数total_num=MyCust.CountCustomer(0)lblTotal=Trim(Str(total_num))TmpSource="SELECTc.CustId,c.CustNameas单位名称,a.AreaNameas地域名称,"_+"t.TypeNameas客户类型,t1.TypeNameAS所属行业,c.Addressas通信地址,"_+"c.Postcodeas邮政编码,a.AreaId,c.EmpId,e.EmpNameAS销售人员"_+"FROMCustomerc,Employeese,"_+"Areaa,Typest,Typest1WHEREc.CustTypeId=t.IdAnd"_+"c.BussTypeId=t1.IdANDc.EmpId=e.EmpId""未选择地域IfCheck1.Value=1Then"全部类别IfLen(Trim(dco_CType.Text))=0ThenTmpSource=TmpSource+"Andc.AreaId=a.AreaIdORDERBYc.CustName""选择类别ElseTmpSource=TmpSource+"Andc.AreaId=a.AreaIdAndc.CustTypeId="_+Trim(dco_CType.BoundText)+"ORDERBYc.CustName"EndIfElseIfCurArea.AreaType=4Then"市"全部类别IfLen(Trim(dco_CType.Text))=0ThenTmpSource=TmpSource+"Andc.AreaId=a.AreaIdAndc.AreaId="_+Trim(Str(CurArea.AreaId))+"ORDERBYc.CustName"Else49
TmpSource=TmpSource+"Andc.AreaId=a.AreaIdAndc.AreaId="_+Trim(Str(CurArea.AreaId))+"Andc.CustTypeId="_+Trim(dco_CType.BoundText)_+"ORDERBYc.CustName"EndIfElse"省IfLen(Trim(dco_CType.Text))=0ThenTmpSource=TmpSource+"And(c.AreaId=a.AreaIdAnda.UpperId="_+Trim(Str(CurArea.AreaId))+"Orc.AreaId=a.AreaIdAnda.AreaId="_+Trim(Str(CurArea.AreaId))+")ORDERBYc.CustName"ElseTmpSource=TmpSource+"And(c.AreaId=a.AreaIdAnda.UpperId="_+Trim(Str(CurArea.AreaId))+"Orc.AreaId=a.AreaIdAnda.AreaId="_+Trim(Str(CurArea.AreaId))+")Andc.CustTypeId="_+Trim(dco_CType.BoundText)_+"ORDERBYc.CustName"EndIfEndIfEndIfAdodc1.ConnectionString=ConnAdodc1.RecordSource=TmpSourceAdodc1.RefreshSetDataGrid1.DataSource=Adodc1lblSel=Trim(Str(Adodc1.Recordset.RecordCount))DataGrid1.Columns(0).Width=0DataGrid1.Columns(1).Width=2200DataGrid1.Columns(2).Width=1400DataGrid1.Columns(3).Width=1400DataGrid1.Columns(4).Width=1400DataGrid1.Columns(5).Width=160049
DataGrid1.Columns(6).Width=1200DataGrid1.Columns(7).Width=0DataGrid1.Columns(8).Width=0DataGrid1.Columns(9).Width=1200EndSubPrivateSubCheck1_Click()IfCheck1.Value=1ThenComboArea.Enabled=FalseComboArea.Text="全部地域"ElseComboArea.Text=MyArea.GetName(CurArea.UpperId)+""+CurArea.AreaNameComboArea.Enabled=TrueEndIfRefresh_CustomerEndSubPrivateSubCheck2_Click()IfCheck2.Value=1Thendco_CType.Enabled=Falsedco_CType.Text="全部客户类型"Elsedco_CType.Enabled=TrueEndIfRefresh_CustomerEndSubPrivateSubCmd_Add_Click()"设置添加信息FrmCustomerEdit.Modify=FalseFrmCustomerEdit.ComboArea.Text=""FrmCustomerEdit.Show149
Refresh_CustomerEndSubPrivateSubCmd_AddCt_Click()IfAdodc1.Recordset.BOF=TrueThenMsgBox"请选择记录"ExitSubEndIfFrmContactEdit.Modify=FalseFrmContactEdit.OriCustId=Adodc1.Recordset.Fields(0)FrmContactEdit.lbl_CustName=Trim(Adodc1.Recordset.Fields(1))FrmContactEdit.ComboSex.ListIndex=1FrmContactEdit.Show1EndSubPrivateSubCmd_Back_Click()UnloadMeEndSubPrivateSubCmd_Del_Click()IfAdodc1.Recordset.BOF=TrueThenMsgBox"请选择记录"ExitSubEndIf"是否存在此客户的商业机会IfMyChance.HaveCustomer(Adodc1.Recordset.Fields(0))=TrueThenMsgBox"商业机会中存在此客户信息,不能删除!"ExitSubEndIf"确认删除IfMsgBox("是否确定要删除客户信息,删除时同时删除客户联系人信息",vbYesNo,"请确认")=vbNoThenExitSubEndIf"删除客户信息49
CallMyCust.Delete(Adodc1.Recordset.Fields(0))"删除对应的联系人信息CallMyContact.DeleteByCustId(Adodc1.Recordset.Fields(0))Refresh_CustomerEndSubPrivateSubCmd_Modi_Click()DimTmpAreaIdAsLongIfAdodc1.Recordset.BOF=TrueThenMsgBox"请选择记录"ExitSubEndIf"客户单位FrmCustomerEdit.OriCustId=Adodc1.Recordset.Fields(0)FrmCustomerEdit.txtName=Trim(Adodc1.Recordset.Fields(1))"地域FrmCustomerEdit.ComboArea.Text=Trim(Adodc1.Recordset.Fields(2))"类别FrmCustomerEdit.dco_CType.Text=Trim(Adodc1.Recordset.Fields(3))"所属行业FrmCustomerEdit.dco_BType.Text=Trim(Adodc1.Recordset.Fields(4))"通信地址FrmCustomerEdit.txtAddr=Trim(Adodc1.Recordset.Fields(5))"邮政编码FrmCustomerEdit.txtCode=Trim(Adodc1.Recordset.Fields(6))"销售人员FrmCustomerEdit.dco_Emps.Text=Trim(Adodc1.Recordset.Fields(9))"保存CurArea对象TmpAreaId=CurArea.AreaIdCurArea.AreaId=Adodc1.Recordset.Fields(7)FrmCustomerEdit.Modify=TrueFrmCustomerEdit.Show1"恢复CurArea的值CurArea.AreaId=TmpAreaIdCurArea.GetInfo(CurArea.AreaId)49
"刷新数据Refresh_CustomerEndSubPrivateSubCmd_ViewCt_Click()IfAdodc1.Recordset.BOF=TrueThenMsgBox"请选择记录"ExitSubEndIfFrmContactView.SchId=Adodc1.Recordset.Fields(0)FrmContactView.lbl_CustName=Trim(Adodc1.Recordset.Fields(1))FrmContactView.Show1EndSubPrivateSubCmd_ViewSC_Click()IfAdodc1.Recordset.BOF=TrueThenMsgBox"请选择记录"ExitSubEndIfFrmSaleView.SchId=Adodc1.Recordset.Fields(0)FrmSaleView.lbl_CustName=Trim(Adodc1.Recordset.Fields(1))FrmSaleView.Show1EndSubPrivateSubComboArea_GotFocus()Check1.SetFocus"设置显示菜单的位置FrmAreaSel.AreaLevel=6FrmAreaSel.Left=Me.Left+ComboArea.Left+350FrmAreaSel.Top=Me.Top+ComboArea.Top+ComboArea.Height+450FrmAreaSel.Show1IfFrmAreaSel.ClickOK=TrueThenCurArea.GetInfo(CurArea.AreaId)49
ComboArea.Text=MyArea.GetName(CurArea.UpperId)+""+CurArea.AreaNameEndIfRefresh_CustomerEndSubPrivateSubdco_CType_Click(AreaAsInteger)Refresh_CustomerEndSubPrivateSubForm_Load()CurArea.Init"装入客户类别AdoType.ConnectionString=ConnAdoType.RecordSource="SELECT*FROMTypesWHEREFlag=1"AdoType.RefreshSetdco_CType.RowSource=AdoTypedco_CType.ListField="TypeName"dco_CType.BoundColumn="Id"dco_CType.Enabled=FalseCheck2.Value=1Check1.Value=1Refresh_CustomerEndSub49