• 671.50 KB
  • 2022-05-17 10:55:11 发布

毕业论文——客户关系管理系统的ASP.NET的实现

  • 46页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
摘要论文介绍了一个较为完整、有较强实用性的客户关系管理(CRM)系统的开发过程。该CRM系统主要包括客户管理、联系人管理、时间管理、销售管理、电话营销、营销管理等诸多典型功能。在系统的实现上,前台主要应用的是ASP.NETweb设计技术、C#程序设计语言以及DreamWeaver网页设计工具;后台则是采用了网络数据库SQLserver2000。论文首先对客户关系管理(CRM)进行了概述性的介绍,包括CRM的基本概念、管理思想和基本构成。接着对CRM的进行了需求分析、系统规划以及数据库设计。在此基础上,论文详细介绍了客户管理子系统和活动管理子系统设计过程中涉及的用户验证、数据列表分页、创建公用数据库连接类、对数据表之间关联等关键技术,并介绍了系统设计过程中对应模块的详细设计过程,给出了设计效果和设计代码。另外,论文还介绍了系统测试的目的、任务和方法,利用一个具体的测试实例检验完成系统对应功能的实现情况。最后概述了系统优缺点、将来可能提出的要求以及设计的体会和感受。关键字:CRM;ASP.NET;SQL;.NetFramework对象开发库42 AbstractThepaperintroducedacompleteandstrongeusablecustomerrelationsmanagement(CRM)systemperformancehistory.ThisCRMsystemmainlyincludesmanytypicalfunctionsasthecustomermanagement,thecontactpersonmanages,thetimemanagement,thesalesmanagement,thetelephonemarketing,themarketingmanagementandsoon.Inthesystemrealization,theonstagemainlyappliestheASP.NETwebdesigntechnology,theC#programminglanguageaswellastheDreamWeaverhomepagedesigntool.ThebackstageusesnetworkdatabaseSQLserver2,000.Thepaper(CRM)hasfirstcarriedontheoutlineintroductiontothecustomerrelationsmanagement,includingCRMbasicconcept,managementthoughtandbasicconstitution.Afterthatcarriesonthedemandanalysis,thesystemplanaswellasthedatabasedesigntoCRM.Inthisfoundation,thepaperindetailintroducedthecustomermanagementsubsystemandintheactivemanagementsubsystemdesignprocessinvolvesuserconfirmation,dataloggerminutepage,foundationpublicdatabaseconnectionclass,todatasheetbetweenconnectionandsoonessentialtechnology,andintroducedinthesystemdesignprocesscorrespondsthemodulethedetaileddesignprocess,hasproducedthedesigneffectandthedesigncode.Moreover,thepaperalsointroducedthesystemtestgoal,thedutyandthemethod;useaconcretetestexampleexaminationtocompletethesystemcorrespondencefunctiontherealizationsituation.Finallyhasoutlinedtherequestaswellasthedesignexperienceandthefeelingwhichthesystemgoodandbadpoints,thefuturepossiblyproposed.Essentialcharacter:CRM;ASP.NET;SQL;NetFrameworkobjectdevelopmentstorehouse42 目录摘要IAbstractII目录III第1章引言11.1课题研究背景11.2课题研究意义21.3课题研究内容2第2章客户关系管理(CRM)概述42.1CRM基本概念42.2CRM管理思想42.3CRM系统的基本构成52.3.1客户管理62.3.2联系人管理62.3.3时间管理62.3.4潜在客户管理62.3.5销售管理62.3.6营销管理72.3.7客户服务管理7第3章客户关系管理系统的分析与设计83.1CRM系统分析83.2CRM系统规划93.2.1客户管理系统模块103.2.2活动管理系统模块123.3系统数据库设计13第4章客户管理子系统实现174.1关键技术介绍174.1.1创建用户验证页面174.1.2数据列表分页的方法184.1.3创建公用的数据库连接文件(类)194.2客户管理模块204.2.1浏览客户信息2042 4.2.2添加客户信息234.2.3客户信息列表显示244.2.4修改客户信息264.2.5删除客户信息274.3联系人管理模块284.3.1浏览联系人信息284.3.2添加联系人信息294.3.3修改联系人信息304.3.4联系人信息列表30第5章活动管理子系统实现315.1关键技术介绍315.2活动管理模块325.2.1浏览活动信息325.2.2添加活动信息335.2.3活动列表模块345.2.4修改活动信息345.2.5删除活动信息35第6章软件测试376.1测试的目的与任务376.2测试的方法376.3具体测试38第7章结论与体会397.1系统优缺点397.2将来可能提出的要求397.3系统设计过程中的体会和感受40参考文献41致谢4242 第1章引言1.1课题研究背景随着信息技术和全球一体化的发展,企业经营环境发生了巨大的变化。从前,企业只要控制成本与质量,能够以最小的成本,制造出最好的产品,就可以击败竞争对手,在市场中占一席之地。但随着网络应用的迅速发展,竞争模式日益更新,速度、知识和网络改变恶劣竞争的规则,在全球范围内造就了一个利用信息技术将速度和知识结合起来创造新价值的新经济时代。这就对传统的商业模式提出了挑战,企业不仅需要改进内部的组织流程和结构,更重要的是应该关注企业外部的生存和发展环境,企业之间的竞争已从原先的以价格为中心的竞争转变为以客户为中心的竞争。1990年前后,许多美国企业为了满足日益竞争的市场需要,开始开发销售自动化系统(SFA),随后又着力发展客户服务系统(CSS)。1996年后,一些公司开始把SFA和CSS两个系统合并起来,再加上营销策划(Marketing)和现场服务(FieldService),在此基础上再集成CTI(计算机电话集成技术),从而形成集销售(Sales)和服务(Service)于一体的呼叫中心(CallCenter)。这样就逐步形成了我们今天熟知的CRM。客户关系管理(CRM)全面解决了企业外部客户问题,实现了对客户资源的有效发掘和利用,同时,实施客户关系管理是一个系统工程,它既适应了企业竞争环境变化的要求,又融合了数据库营销、关系营销、一对一营销等一系列管理思想。客户关系管理(CRM)已成为很多企业的基本商务战略,它与企业资源规划(ERP)、供应链管理(SCM)一起,是企业提高竞争力的三大法宝。客户关系管理是一套先进的管理模式,其实施要取得成功,必须有强大的技术和工具支持。CRM软件是实施客户关系管理必不可少的一套技术和工具集成支持平台,它基于网络、通讯、计算机等信息技术,能实现企业前台、后台不同职能部门的无缝连接。CRM软件是以客户为中心的思想的固化、程序化,用于协助管理者更好地完成客户关系管理的两项基本任务:识别和保持有价值客户。42 客户关系管理系统把有关市场和客户的信息进行统一管理、共享,并能进行有效分析的处理的新型应用系统,它为企业内部的销售、营销、客户服务等提供全面的支持。在帮助企业缩减销售成本、增加收入、寻找扩展业务所需的新市场和新渠道,提高客户的价值方面CRM具有很广阔的应用空间。1.2课题研究意义使用CRM概念和技术,企业能快速搜集、追踪和分析每一个客户的信息,进而了解整个市场走势,并确切地知道谁是客户、谁是客户的客户、什么是客户的需要、客户需要什么样的产品和服务、如何才能满足客户的要求,以及满足客户要求的一些重要限制因素。CRM还能观察和分析客户行为对企业收益的影响,使企业与客户的关系及企业盈利都得到最优化。CRM进入国内已有几年的时间,客户关系管理系统所遵从的“一对一个性化服务”的企业管理理念,逐渐被国内众多的用户所熟悉和接受。无论用户还是厂商都非常关注这个产品,很多软件厂商纷纷推出自己的CRM产品。我国的CRM市场正在迅速发展和壮大,其中孕育了较大的商机,已经成为投资商、软件开发厂商和用户共同关注的对象,CRM的市场前景将十分广阔。但是经过仔细的鉴别与分析后发现:能够提供功能比较全面的CRM产品的国内厂商很少,有些只能提供实现客户管理中的几个应用模块,有的只是在ERP的某些模块上稍作修改,并没有真正实现客户关系系统的“客户为中心”的理念。市场中真正的CRM产品很少,适合国情的产品更是少之又少,现代企业着手进行信息化建设,多数以失败或者不理想而告终,基于以上原因,我们认为自己动手开发一个CRM系统是具有非常重要的现实意义的。1.3课题研究内容论文首先对客户关系管理(CRM)进行了概述性的介绍,包括CRM的基本概念、管理思想和基本构成。接着对CRM的进行了需求分析、系统规划以及数据库设计。在此基础上,论文详细介绍了客户管理子系统和活动管理子系统设计过程中涉及的用户验证、数据列表分页、创建公用数据库连接类、对数据表之间关联等关键技术,并介绍了系统设计过程中对应模块的详细设计过程,给出了设计效果和设计代码。另外,论文还介绍了系统测试的目的、任务和方法,利用一个具体的测试实例检验完成系统对应功能的实现情况。最后概述了系统优缺点、将来可能提出的要求以及设计的体会和感受。全文内容安排如下:42 第一章引言,介绍了系统开发的背景和意义,并简要介绍了论文内容的安排。第二章客户关系管理(CRM)概述,主要介绍了CRM的基本概念、管理思想和基本构成。第三章客户关系管理的分析与设计,主要介绍了对CRM的需求分析、系统规划和数据库设计。第四章客户管理系模块的详细设计,介绍了客户关系管理模块涉及的用户验证、数据列表分页和创建公用数据库连接类这三类关键技术,及其对应的数据库的建立和功能代码的编写,实现界面的预览。第五章活动管理模块,主要介绍了对数据表之间关联的实现技术,对应的数据库的建立和功能代码的编写,实现界面的预览。第六章软件测试,介绍了测试目的、任务和方法。并利用一个具体的测试实例检验完成系统对应功能的实现情况。第七章结论与体会,概述了系统优缺点、将来可能提出的要求以及设计的体会和感受。42 第2章客户关系管理(CRM)概述2.1CRM基本概念CRM是英文CustormerRelationshipManagement的缩写,即客户关系管理。它是一个获取、保持、和增加可获利客户的过程。首先,它是一套先进的管理思想及技术手段,它通过将人力资源、业务流程与专业技术进行有效的整合,最终为企业涉及到客户或消费者的各个领域提供了完美的集成,使得企业可以更低成本、更高效率地满足客户的需要,并与客户建立起基于学习型关系基础上的一对一营销模式,从而让企业可以最大程度地提高客户满意度及忠诚度,发掘并牢牢地把握能给企业带来最大价值的客户群。CRM的核心内容主要是通过不断的改善与管理企业销售、营销、客户服务和支持等与客户关系有关的业务流程并提高各个环节的自动化程度,从而缩短销售周期、降低销售成本、扩大销售量、增加收入与盈利、抢占更多市场份额、寻求新的市场机会、销售渠道,最终从根本上提升企业的核心竞争力,使得企业在当前激烈的竞争环境中立于不败之地。CRM将先进的思想与最佳的实践具体化,通过使用当前多种先进的技术手段,最终帮助企业实现以上目标。从物理结构上说,CRM是一套智能化的信息处理系统,从功能上说,它将企业的经营、管理导向“以客户为中心”的一套管理和决策方法。它是一个软件模块。一个完整的CRM概念不仅包含了一个现代的网络呼叫中心的全部功能,而且还包括了呼叫中心收集起来的信息和数据进行存储、加工、分析和整理。对大量的数据进行研究,发现他们的自然规律,并运用人工智能的各种优化算法建立数学模型,经过计算获得若干对企业决策和支持有用的结果。2.2CRM管理思想42 在竞争日益激烈的今天,越来越多的企业开始关注客户,重视收集客户的信息,倾听并及时响应客户的要求和期望。企业通过对客户理解的不断加深以及对客户服务实践的不断改善,提高其竞争力。CRM的目标在于协助企业不断地获取和积累客户知识,并将这些知识运用在企业的生产、市场营销和客户服务等各个领域,以提升客户满意度和忠诚度,降低生产、销售和服务成本,从而增加企业效益。CRM的核心管理思想主要包括以下几个方面:1)客户是企业发展最重要的资源之一在人类社会从产品导向时代转变为客户导向时代的今天,客户的选择决定着一个企业的命运,因此,客户己成为当今企业最重要的资源之一。CRM系统中对客户信息的整合集中管理体现出将客户作为企业资源之一的管理思想。在很多行业中,完整的客户档案或数据库就是一个企业颇具价值的资产。通过对客户资料的深入分析并应用销售理论中的2/8法则将会显著改善企业营销业绩。2)对企业与客户发生的各种关系进行全面管理企业与客户之间发生的关系,不仅包括单纯的销售过程所发生的业务关系,如合同签订、定单处理、发货、收款等,而且还包括在企业营销及售后服务过程中所发生的各种关系。如在企业市场活动、市场推广过程中与潜在客户发生的关系。在与目标客户接触过程中,内部销售人员的行为、各项活动及其与客户接触全过程所发生的多对多的关系。还包括售后服务过程中,企业服务人员对客户提供关怀活动、各种服务活动、服务内容、服务效果的记录等,这也是企业与客户的售后服务关系。对企业与客户间可能发生的各种关系进行全面管理,将会显著提升企业营销能力、降低营销成本、控制营销过程中可能导致客户抱怨的各种行为,这是CRM系统的另一个重要管理思想。3)进一步延伸企业供应链管理CRM系统借助InternetWeb技术,突破了供应链上企业间的地域边界和不同企业之间信息、交流的组织边界,建立起企业自己的B2B网络营销模式。CRM真正解决了企业供应链中的下游链管理,将客户、经销商、企业销售全部整合到一起,实现企业对客户个性化需求的快速响应。同时帮助企业清除营销体系中的中间环节,通过新的扁平化营销体系,缩短响应时间,降低销售成本。2.3CRM系统的基本构成42 一个CRM系统是具有对客户各方面信息进行详细管理、分类、统计等功能的复杂系统,一般有多个子系统组成。一般CRM软件的基本功能包括客户管理、联系人管理、时间管理、潜在客户管理、销售管理、营销管理、电话营销、客户服务等,有的软件还包括了呼叫中心、合作伙伴关系管理、商业智能、知识管理、电子商务等。2.3.1客户管理客户是企业最重要的资源之一,客户管理是对企业的客户资源进行管理。主要功能包括基本信息管理、活动管理、订单管理、合同管理等。2.3.2联系人管理企业与客户直接接触时的对象是联系人,企业与客户之间往往具有固定的一个或多个联系人。联系人管理的主要作用包括联系人概况的存储和检索、跟踪与客户联系的详细记录、客户内部机构的设置概况等。2.3.3时间管理时间管理主要的功能有日历功能:设计约会、活动计划、有冲突时,系统会提示;进行事件安排,如约会、电话、电子邮件、传真;备忘录进行团队等事件安排;查看团队中其他人的安排,以免发生冲突;把事件的安排通知相关的人;任务表安排;预告与提示;记事本等。2.3.4潜在客户管理潜在客户管理主要的功能包括业务线索的记录、升级和分配,销售机会的升级和分配,潜在客户的跟踪等。2.3.5销售管理销售管理的主要功能包括组织和浏览销售信息;产生各销售业务的阶段报告,并给出业务所处阶段、还需的时间、成功的可能性、历史销售状况评价等信息;对销售业务给出战术、策略上的支持;对地域进行维护;把销售员归入某一地域并授权;地域的重新设置;根据利润、领域、优先级、时间、状态等标准,用户可定制关于将要进行的活动、业务、客户、联系人、约会等方面的报告;提供类似BBS的功能,用户可把销售秘诀贴在系统上,还可以进行某一方面销售技能的查询;销售费用管理与销售佣金管理等。42 2.3.6营销管理营销管理主要功能包括产品和价格配置器;在进行营销活动时,能获得预先定制的信息支持;把营销活动与业务、客户、联系人建立关联;显示任务完成进度;提供类似公告板的功能,可张贴、查找、更新营销信息,从而实现营销文件、分析报告等的共享;跟踪特定事件;安排新事件。2.3.7客户服务管理客户服务管理主要的功能包括服务项目的快速录入;服务项目的安排、调度和重新分配;事件的升级;搜索和跟踪与某一业务相关的事件;生成事件报告;服务协议和合同;订单管理和跟踪;问题及其解决方法的数据库。42 第3章客户关系管理系统的分析与设计3.1CRM系统分析现行的CRM软件还处于起步阶段,功能模块结构不尽相同,但是其基本的需求是一样的,其主要技术需求应包括六个方面:1、信息分析能力CRM有大量客户和潜在客户的信息,企业应该充分的利用这些信息进行分析,使得决策者掌握的信息更加完全,从而能及时的作出决策。良好的商业情报是企业成功的一半。2、对客户互动渠道进行集成的能力对多渠道进行集成与CRM解决方案的功能部件的集成是同等重要的。不管客户是与企业联系还是与销售人员联系,于客户互动都应该是无缝的、统一的、高效的。同一的渠道还能带来内部效益的提高。3、支持网络应用的能力在支持企业内外的互动和业务处理方面,Web的作用越来越大,这使得CRM得网络功能越来越重要。如网络可以为电子商务渠道提供支持。为了使客户和企业雇员都能方便应用CRM,需要提供标准化的网络浏览器,使得用户几乎不需训练就能使用系统。另外,如果通过网络为客户提供在线反馈的话并能有专人及时传达信息给公司的售后服务部门,这将为公司留住客户(尤其是距离较远的)并使业绩添砖加瓦。4、建设集中的信息仓库的能力采用集中化的信息、实时的客户信息,可使各业务部门和功能模块间的信息能统一起来。5、对工作流进行集成的能力工作量是指把相关文档和工作规则自动化安排给负责特定业务流程中特定步骤的人。CRM解决方案应具有较强的功能,为跨部门工作提供支持,使这些工作能动态的、无缝的集成。6、与ERP功能的集成42 如果CRM与ERP和财务、库存、制造、分销、物流和人力资源等连接起来,使之成为一个客户互动循环,这种集成能使企业在系统间搜集商业情报,而不是低水平的数据同步。根据分析,一个成功的CRM产品一般都能实现以下功能:(1)客户信息进行全方位跟踪。(2)帮助企业高层进行决策。(3)帮助企业提高营业额,产生新的商机因而可得企业CRM系统的应包括以下基本功能:销售管理:销售支持系统给销售人员提供了功能强大的支持工具和多种形式的信息,从而使销售人员可以对客户、业务等进行有效的管理。对于企业来说,销售管理系统将大大扩展客户范围,提高工作效率,降低销售成本,为企业的利润增长提供有力的支撑。营销管理:使营销人员能高效、全面地分析客户及市场信息,量身定做合适的市场活动计划。系统可以对销售、服务等进行指标化的分析,帮助营销人员根据实际情况制定、实施和调整营销战略计划,并发送给销售人员和合作伙伴,从而实现对产品、服务、物流等渠道进行管理调控。客户服务:客户服务系统可以帮助企业以更快的速度和更高的效率来满足客户的独特需求。可以向服务人员提供完备的工具和信息,并支持多种与客户的交流方式。帮助客户服务人员更有效率、更快捷、更准确地解决用户的服务咨询,同时能根据用户的背景资料和可能的需求向用户提供合适的产品和服务建议。电话中心CallCenter:将销售与客户服务系统整合成为一个系统。使得服务人员可以根据客户提出的需求提供售后服务支持,也可以提供销售服务。大大方便了客户与公司的交流,使顾客增加了对公司服务的依赖。3.2CRM系统规划42 本CRM系统是具有对客户各方面信息进行详细管理、分类、统计等功能的复杂系统,一般由多个子系统组成。主要功能包括,客户管理系统模块、活动管理系统模块、销售管理系统模块、服务管理系统模块、费用管理系统模块、库存管理系统模块、报表管理系统模块、E-mail管理系统模块以及后台管理系统模块。本系统为了体现模块的独立性,各个模块之间的关联除了后台数据库之外,模块之间的关联是很少的。本人负责如下两个模块。3.2.1客户管理系统模块客户管理系统模块是整个CRM系统的重点与主干,该系统主要对客户的信息进行管理,并将客户信息作为连接其余各个系统模块的主线,整体关系表现如下:客户活动销售服务费用分析报表E-mail管理图3.1客户关系管理模块展开结构客户管理主要就是将企业掌握的信息进行详细管理,并可以方便地对这些信息进行修改。在CRM系统中,客户管理系统可以通过客户或相关联系人的关键字段进行查询,快速找到所需要的客户或相关联系人信息。具体系统实现功能如下:1.客户详细信息管理客户详细信息管理主要功能是浏览、查询、添加、删除、修改各个客户的详细信息。2.客户信息列表用于将客户信息进行简单的列表显示,使用户可以方便地管理客户信息库,并具有模糊查询、删除等功能。3.联系人详细信息管理联系人指的是某客户的具体联系人员,对联系人也需要建立类似客户的管理西。联系人详细信息管理模块与客户详细信息管理类似,主要功能是浏览、查询、添加、修改各个联系人的详细信息。4.联系人信息列表与客户信息列表类似,联系人信息列表是将联系人信息进行简单的列表显示,以使得用户可以方便地管理联系人信息库。客户管理子系统的模块结构图如下:42 客户管理系统客户详细信息管理客户信息列表联系人信息列表联系人信息管理添加信息编辑信息分类列表分类列表添加信息编辑信息浏览信息浏览信息图3.2客户管理系统组成添加新客户信息时,首先从客户信息表单中获得客户的详细信息,在对所有的字段进行格式校验合格后,将数据添加到数据库的客户表中。同样的,当添加新联系人信息的时候,首先从联系人信息表单中获得联系人的详细信息,在对所有的字段进行格式校验合格后,将数据添加到数据库的联系人表中。在添加联系人信息时,需要为联系人选择一个相关的客户信息,才能把数据添加到联系人表中。各模块之间的关系如下图所示。用户登录身份验证退出功能选择客户子系统联系人子系统编辑客户客户列表添加联系人联系人列表编辑信息添加客户数据库图3.3模块关系图42 3.2.2活动管理系统模块活动管理系统模块主要记录与客户之间的联系计划信息,以便及时和客户取得联系,随时了解客户的情况,保证稳定的客户来源。它是由活动详细信息管理和活动列表构成。活动管理系统活动详细信息管理活动列表图3.4活动管理系统模块活动管理系统主要就是将企业与客户及其相关联系人之间发生的各种活动进行详细管理,并可以方便地对活动信息进行添加、修改等编辑操作。在CRM中,活动管理系统可以通过活动的关键字段进行查询,快速找到所需要的活动信息,提供方便全面的活动记录参考。具体的活动管理系统实现的功能如下:1、活动管理模块添加活动:添加新的活动信息到活动表,其中包括活动主题、活动类型、相关客户、活动时间、活动具体安排等信息。浏览活动:能够对所有活动信息进行逐一浏览,并可以浏览其他用户公开的活动记录信息。编辑信息:能够修改和删除活动信息,用户可以在浏览活动信息时随时更新活动信息,并可删除作废的活动信息。2、活动列表模块活动列表显示:对所选择客户的活动进行列表显示,使得用户更容易从全局去把握活动计划,并能够快速找到需要的活动记录。活动信息模糊查询:通过限定的关键字段查询活动信息,将符合条件的活动信息进行列表显示。批量删除活动信息:能够批量删除先中的多个活动信息,用户可以在对活动信息进行查询后批量删除符合条件的活动信息。42 当添加新活动信息的时候,首先从活动信息表单中获得活动的详细信息,在对所有的字段进行格式校验合格后便将数据添加到数据库的活动表中。在添加活动信息时,必须为活动分别选择一个相关的客户信息和联系人信息,才能把数据添加到活动表中。具体个模块之间的关系如下图所示。失败通过详细查看图3.5活动管理系统模块关系图身份验证功能选择用户登录退出活动管理模糊查询活动列表添加活动编辑信息浏览信息活动列表批量删除数据库3.3系统数据库设计首先,打开MicrosoftSQLServer的查询分析器,创建一个空数据库CRM。(CreatedatabaseCRM),再建立所需要的表。本文中的涉及到了11张表。分别为:客户信息表(Client)、联系人信息表(Touchman)、活动信息表(Activity)、产品信息表(Product)、库存信息表(Stock)、临时库存信息表(Stock_Temp)、销售信息表(Sell)、服务信息表(Feedback)、费用信息表(Fee)、用户信息表(User)和部门信息表(Section)。因本人分到的模块是客户管理系统模块和活动管理系统模块,所以这里仅详细介绍了本人所要应用表的具体结构。(1)部门信息表(Section)表3-1部门信息表字段名称数据类型大小必填字段允许空字符串索引说明SectionIDInt4是否无部门编号(自增)SectionNamenvarchar200是否无部门名称(2)客户信息表(Client)42 表3-2客户信息表字段名称数据类型大小必填字段允许空字符串索引说明ClientIDInt4是否无客户唯一标识IDClientNamenvarchar200是否无客户名称ClientNationnvarchar200否是无客户国家ClientNatonCodenvarchar200否是无客户国家代码ClientProvincenvarchar200否是无客户省份ClientCitynvarchar200否是无客户城市ClientAreaCodenvarchar200否是无区号ClientMailCodenvarchar200否是无邮政编码ClientAddressnvarchar200否是无地址ClientPhoneNumnvarchar200否是无电话号码ClientFaxNumnvarchar200否是无传真号码ClientEmailnvarchar200否是无客户E-mailClientHomepagenvarchar200否是无客户主页ClientYearIncomeInt4否是无客户年收入ClientEmpNumInt4否是无客户雇员人数ClientAccountBanknvarchar200否是无客户开户银行ClientAccountNumnvarchar200否是无客户银行帐号ClientTaxNamenvarchar200否是无客户开票名ClientTaxCodenvarchar200否是无客户增值税号ClientTaxBanknvarchar200否是无增殖税开票名ClientTaxAccNumnvarchar200否是无增值税开户名ClientTaxAddressnvarchar200否是无增值税开户地址ClientTaxPhoneNumnvarchar200否是无增值税开户电话ClientCreatorIDInt4是否无创建者ID标识ClientCreateDateDatetime8是否无创建日期ClientOpenFlagInt4是否无公开标识ClientRevisorIDInt4是否无修改者ID标识ClientReviseDatedatetime8是否无最后修改日期(3)用户信息表(User)表3-3用户信息表字段名称数据类型大小必填字段允许空字符串索引说明UserIDInt4是否无用户编号(自增)UserNameNvarchar200是否无用户名称UserPassNvarchar200是否无用户密码UserSectionInt4是否无用户部门编号IsAdminint4是否无管理员标识(4)联系人信息表(Touchman)42 表3-4联系人信息表字段名称数据类型大小必填字段允许空字符串索引说明TouchmanIDInt4是否无联系人标识IDTouchmanNamenvarchar200是否无联系人姓名TouchmanClientIDInt4是否无相关客户IDTouchmanSectionNvarchar200否是无部门TouchmanDutynvarchar200否是无职务TouchmanMPhoneNvarchar200否是无手机号码TouchmanOPhoneNvarchar200否是无办公室电话TouchmanHPhoneNvarchar200否是无家庭电话TouchmanFaxNvarchar200否是无传真号码TouchmanEmailNvarchar200否是无E-mial地址TouchmanHobbyNvarchar255否是无爱好TouchmanEspDayNvarchar8否是无特殊日子TouchmanAddressNvarchar200否是无地址TouchmanOthersNtext16否是无详细说明TouchmanCreatorIDInt4是否无创建者IDTouchmanCreateDateDatetime8是否无创建日期TouchmanOpenFlagInt4是否无公开标识TouchmanRevisorIDInt4是否无修改者IDTouchmanReciseDateDatetime8是否无最后修改日期TouchManMainint4否是无主要联系人(5)活动信息表(Activity)表3-5活动信息表字段名称数据类型大小必填字段允许空字符串索引说明ActivityIDInt4是否无活动标识IDActivityTopicNvarchar200是否无活动主题ActivityClientIDInt4是否无相关客户IDActivityTouchmanIDInt4是否无相关联系人IDActivitySortNvarchar200否是无活动类型ActivityDateDatetime8否是无活动开始日期ActivityOverDateDatetime8否是无活动结束日期ActivityPriorityInt4否是无活动优先级ActivityDetailNtext16否是无活动细节ActivityCreatorIDInt4是否无创建者IDActivityCreateDateDatetime8是否无创建日期ActivityOpenFlagInt4是否无公开标识ActivityRevisorIDInt4是否无修改者ID42 ActivityReviseDateDatetime8是否无最后修改日期42 第4章客户管理子系统实现客户管理系统是CRM系统中最重要的组成部分之一。它统一管理与企业所掌握的客户及其相关联系人信息,而这是其余模块系统的基础。客户及其联系人是企业最重要的资源之一,通过客户管理系统能有效地管理客户及其相关联系人。4.1关键技术介绍在用户管理系统中主要通过对数据库的操作来管理客户信息,其中涉及到身份验证、数据查询和页面分页等处理。4.1.1创建用户验证页面由于系统必须登陆后才能够使用,所以必须对用户身份进行验证.在本系统中,选用了第一个index.aspx页面.其内部的具体判别代码如下:.cs文件代码privatevoidCustomValidator1_ServerValidate(objectsource,System.Web.UI.WebControls.ServerValidateEventArgsargs){Session["flag"]="ok";stringUserName=args.Value;Session["Username"]=args.Value;SqlConnectioncon=conn.createconn();con.Open();SqlCommandcmd=newSqlCommand("selectcount(*)from[User]whereUserName=""+UserName+""",con);intcount=Convert.ToInt32(cmd.ExecuteScalar());if(count>0){args.IsValid=true;SqlConnectioncon1=conn.createconn();con1.Open();SqlCommandcmd1=newSqlCommand("selectUserIDfrom[User]whereUserName=""+UserName+""",con1);Session["UserID"]=cmd1.ExecuteScalar().ToString();stringUserID=Session["UserID"].ToString();SqlCommandcmd2=newSqlCommand("selectIsAdminfrom[User]whereUserID=""+UserID+""",con1);Session["IsAdmin"]=cmd1.ExecuteScalar().ToString();}42 else{args.IsValid=false;}//是关于用户名不为空privatevoidCustomValidator2_ServerValidate(objectsource,System.Web.UI.WebControls.ServerValidateEventArgsargs){stringUserPass=args.Value;SqlConnectioncon=conn.createconn();con.Open();SqlCommandcmd=newSqlCommand("selectcount(*)from[User]whereUserPass=""+UserPass+""",con);intcount=Convert.ToInt32(cmd.ExecuteScalar());if(count>0){args.IsValid=true;SqlConnectioncon1=conn.createconn();con1.Open();SqlCommandcmd1=newSqlCommand("selectUserIDfrom[User]whereUserPass=""+UserPass+""",con1);Session["UserID"]=cmd1.ExecuteScalar().ToString();Response.Redirect("CHKLogin.aspx");}else{args.IsValid=false;}}//关于密码不能为空这些代码除了判定这两个文本输入框不为空外,还外加判定是否是被允许的访问者(用户).其对应的HTML文件代码如下:**类似**4.1.2数据列表分页的方法42 在操作客户或联系人信息列表的时候,如果数据过多,在同一页面上显示出来会使网页变得很大,影响页面的美观,也降低了网页执行的效率。因此,有必要进行分页操作。在HTML的中编写而在所对应的.cs文件中编写如下程序代码:privatevoidDataGrid1_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse){this.DataGrid1.CurrentPageIndex=e.NewPageIndex;this.databindertodatagrid1();}来实现分页。4.1.3创建公用的数据库连接文件(类)在VisualStdio.Net2003编程环境下创写类connusingSystem;usingSystem.Data;usingSystem.Data.SqlClient;//自行输入的namespaceCRM{//////conn的摘要说明。///publicclassconn{publicconn(){////TODO:在此处添加构造函数逻辑//}publicstaticSqlConnectioncreateconn(){returnnewSqlConnection("server=.;database=CRM;uid=sa;pwd=;");//数据库连接}}}该代码是作为单独的.cs文件。这样,之后的页面如果要连接数据库,则可编写如下代码连接:SqlConnectioncon=conn.createconn();con.Open();42 4.2客户管理模块客户管理系统主要通过客户表(Client)、联系人表(Touchman)来实现客户及其相关联系人的管理,其主页面为以文本框、下拉列表框和按狃为主组成的表单,并包含显示操作记录的文本框。4.2.1浏览客户信息用户可以通过客户管理系统浏览所拥有的客户信息,并根据实际情况进行相应的修改,具体的用户浏览界面如下图所示。图4.1浏览客户信息页面浏览客户信息是客户管理模块最基本的功能之一,用户能够通过该模块浏览数据库中的客户信息,并进行相应的修改、删除等操作。显示客户信息的页面名称为:client.aspx,其运行的界面如上图4.1所示。需要显示的数据包括客户名称、客户地址、电话、E-mail、银行帐号等与客户相关的信息。在实现从数据库客户表中读出数据的时候,需要数据库文件的支持,这个文件就是前面所提到的conn类。其实际的调用格式也如上SqlConnectioncon=conn.createconn();con.Open();该表单除了显示客户详细信息的作用,还连接了多个表单(功能的快速连接按钮)。表单的属性代码如下://所有的web控件都需放在表单中这里的from名为“id=”Form1””为表单名称,它是在服务器段执行的。当显示客户详细信息时,是通过表单的初始值来实现。可以通过内嵌ASP42 c#代码来对表单进行赋初值的操作,具体代码如下://引用了数据窗口v客户名称:">省略部分的代码也如上所视调用了数据库中的数据<%#DataBinder.Eval(Container.DataItem,”ClientName”)%>v操作者://这里它的值是系统根据登录的用户的用户名来赋值v所属部门://根据系统中获得的登录用户名来查找出他所在的部门v最后修改日期://也由系统自动提供可见,在HTML代码中表单元素的相关部分通过类似“Text="<%#DataBinder.Eval(Container.DataItem,"ClientNation")’”的内嵌标签可以实现对表单的赋初值(从数据库中提取出来的数据)。42 这里的处理思路是根据用户表单提交过来的默认ID数据,读取数据库里的第一个客户信息,将其赋予表单初值。只有当记录不为空时,才能够根据记录去进行下一步的操作,否则程序就会出错,这是在设计程序中必须考虑到的。当游标指向最后的一个记录时,下一步就不会执行。usingSystem.Data.SqlClient;//于数据库连接要输入的namespaceCRM.client//使用的是项目CRM的Client窗体{privatevoidPage_Load(objectsender,System.EventArgse)//加载页面时调用{if(!this.IsPostBack)//判定是否第一次加载,默认IsPostBack值为false{this.databind();SqlConnectioncon=conn.createconn();con.Open();this.txtcreatname1.Text=Session["Username"].ToString();this.Textbox1.Text=DateTime.Now.ToShortDateString();stringUserID=Session["UserID"].ToString();SqlCommandcmd2=newSqlCommand("selectUserSectionfrom[User]whereUserID=""+UserID+""",con);//创建命令对象stringSectionID=cmd2.ExecuteScalar().ToString();//把其返回的对象类型转为字符型再赋值给SectionIDSqlCommandcmd1=newSqlCommand("selectcount(*)fromSectionwhereSectionID=""+SectionID+""",con);intcount=Convert.ToInt32(cmd1.ExecuteScalar());//count记录操作者的部门数if(count>0){SqlCommandcmd3=newSqlCommand("selectSectionNamefromSectionwhereSectionID=""+SectionID+""",con);this.txtbumen.Text=cmd3.ExecuteScalar().ToString();//取出操作者的部门}else{this.txtbumen.Text="未知";}}//在此处放置用户代码以初始化页面}privatevoiddatabind()//函数功能是提取出用户界面所需的数据库中数据{SqlConnectioncon=conn.createconn();con.Open();SqlDataAdaptersda=newSqlDataAdapter();sda.SelectCommand=newSqlCommand("select*fromClient,[User]whereUserID=ClientCreatorID",con);DataSetds=newDataSet();sda.Fill(ds,"client");this.DataGrid1.DataSource=ds.Tables["client"];this.DataGrid1.DataBind();//数据绑定}privatevoidDataGrid1_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse)//实现用户分页,数据重新绑定{42 this.DataGrid1.CurrentPageIndex=e.NewPageIndex;this.databind();//数据绑定}privatevoidSearch_ServerClick(objectsender,System.EventArgse)//转到快速查询(用户列表界面){Response.Redirect("list.aspx?ClientOpenFlag=0");//重定向到list.aspx}//ClientOpenFlag标识出是否调用公开的用户列表还是用户列表privatevoidButton1_ServerClick(objectsender,System.EventArgse){Response.Redirect("updateclient2.aspx");//转到修改界面语句}}}4.2.2添加客户信息当系统用户得到新的客户信息时,可以通过填写客户信息表单将客户信息添加到客户表中,即在图4.1所示页面中单击“新建”按钮,执行添加客户信息的操作。具体的客户添加页面如下图所示。图4.2添加客户信息页面具体实现方式是通过在按钮中添加相应的事件,当单击“新建”按钮时,触发事件,控制页面跳至新建客户信息页面NewClient.aspx。新建客户信息页面NewClient.aspx的作用是仅仅是提示用户添加一个客户记录,如下图所示,在提示用户2s后,页面自动跳转到添加客户信息页面AddNewClient.aspx,填写添加壳护信息表单,具体代码如下:创建新用户记录添加客户信息页面也有类似4.1的一个表单,区别是它展现的不是一个数据窗口,少了“快速查询”与“浏览”按钮,只有“保存”和“返回”按钮。该页面的表单主要用于输入新添加客户的详细信息,具体表单设置如下表所示。表4-1添加客户信息页面使用的表单元素名称表单元素类型Value含义T_ClientIDHidden系统生成客户标识IDT_ClientNameText用户填写客户名称T_ClientEmailText用户填写客户EmailT_ClientNationText用户填写客户国家T_ClientProText用户填写客户省份T_ClientHpageTextText用户填写客户主页T_ClientNcodeText用户填写客户国家区号T_ClientCityText用户填写客户城市T_ClientAcodeText用户填写客户区号T_ClientPcodeText用户填写客户邮政编码T_ClientIncomeText用户填写客户年收入T_ClientEmpNumText用户填写客户雇员人数T_ClientTelText用户填写客户电话T_ClientFaxText用户填写客户传真T_ClientAddText用户填写客户地址T_ClientTaxNameText用户填写客户增值税名T_ClientTaxNumText用户填写客户增值税号T_ClientTaxANumText用户填写客户增值税帐号T_ClientTaxABankText用户填写客户增值税开户银行T_ClientTaxAAddText用户填写客户增值税开户地址T_ClientTaxATelText用户填写客户增值税开户电话T_ClientABankText用户填写客户开户银行T_ClientANumText用户填写客户银行帐号T_ClientCreatorIDText系统生成创建者IDT_ClientSectionIDText系统生成创建者部门IDCheck_OpenText用户选择公开标识T_ClientOperatorIDHidden系统生成修改者IDT_ClientCreateDateHidden系统生成创建时间T_ClientUpdateDateHidden系统生成最后修改日期SubmitSubmit保存提交表单4.2.3客户信息列表显示42 添加客户信息后,用户可以在客户列表中查看客户的信息。在快速查询下拉框中选中所要使用的查询关键字(如按客户名称查询),在另一个文本框中输入所要查询的值,单击查询按钮即可。页面的具体效果图如下所示。图4.3客户信息列表客户列表页面为list.aspx(图4.3),客户列表可以将多项客户信息通过列表方式详细展示给用户,并可以快速连接到浏览客户信息页面查看详细客户信息。而且系统提供了模糊查询的功能.只要在快速查询对应的下拉框中挑选要素(进行查询的条件),在选择是包含或不包含功能,再输入关键字,按”查询”按钮,则可见列表中列出自己所需要的记录.本系统在列表中只提供显示一些基本的内容,若客户要看详细功能,就只能到客户浏览信息模块.在该列表中,还提供了删除的功能,只要选定要删除的记录前的checkbox,再单击”删除”按钮,即可实现.在该项中,需注意的是,本系统有两个信息列表,分别为公开和不公开的,如何实现两个功能的区分,本系统使用了在各页之间传递变量来分辨。这里应用的是ClientOpenFlag值。当要转至公开页面时,ClientOpenFlag=1,否则为0;传递的代码为:Response.Redirect(“list.aspx?ClientOpenFlag=1”);而list.aspx的处理代码如下:privatevoiddatabindertodatagrid1(){stringclientopenflag;//这里设定一个变量,来区分公开还是不公开if(Request.QueryString["ClientOpenFlag"].ToString()=="")//判定是否有值传入clientopenflag="0";elseclientopenflag=Request.QueryString["ClientOpenFlag"].ToString();SqlConnectioncon=conn.createconn();SqlDataAdaptersda=newSqlDataAdapter();if(clientopenflag=="1")sda.SelectCommand=newSqlCommand("SELECT42 ClientID,ClientName,ClientNation,ClientProvince,ClientCity,ClientMailCode,ClientAddress,ClientPhoneNum,ClientEmail,ClientHomePagefromClientwhereClientOpenFlag=""+clientopenflag+""",con);elsesda.SelectCommand=newSqlCommand("SELECTClientID,ClientName,ClientNation,ClientProvince,ClientCity,ClientMailCode,ClientAddress,ClientPhoneNum,ClientEmail,ClientHomePagefromClient",con);//从数据库中提取数据语句DataSetds=newDataSet();sda.Fill(ds,"clientlist");this.DataGrid1.DataSource=ds.Tables["clientlist"];this.DataGrid1.Columns[1].Visible=false;this.DataGrid1.DataBind();con.Close();}4.2.4修改客户信息在浏览客户信息时,有可能修改其中的信息,所以要有客户信息修改的页面。当用户需要使用修改功能时,单击右下角的“修改”按钮,将跳至客户信息修改页面(如上图4.7),只有当用户填完所需要修改的数据后,单击“编辑”按钮,即可保存修改的数据。privatevoidButton1_ServerClick(objectsender,System.EventArgse){foreach(System.Web.UI.WebControls.DataGridItemdlinthis.DataGrid1.Items){stringUserID="1";stringClientRevisorID=UserID;stringClientReviseDate=this.Textbox1.Text;…..省略代码………stringClientTaxPhoneNum=((TextBox)(dl.FindControl("Textbox22"))).Text;//获取数据窗口中的数据SqlConnectioncon=conn.createconn();con.Open();//数据库打开,命令对象的使用所必须的条件SqlCommandcmd=newSqlCommand("updateClientsetClientName=""+ClientName+"",ClientHomepage=""+ClientHomepage+"",//很多项省略,其书写格式如者些所示,只要对应的项赋对应的值即可ClientRevisorID=""+ClientRevisorID+"",ClientReviseDate=""+ClientReviseDate+""whereClientID=""+ClientID+""",con);//更新数据语句格式cmd.ExecuteNonQuery();con.Close();}}Updateclient2.aspx其效果图,如下页面所示:42 图4.4修改客户页面4.2.5删除客户信息当数据库中的客户信息已经不再符合实际,则需要将起删除,以便更有效的对客户信息进行管理。删除客户信息的功能是通过在客户信息列表页面(图5.1.3)选中要删除的客户所对应的checkbox,再单击“删除”按钮即可。因删除按钮是WEB控件,点击之后,激发事件,对应地删除了数据表中该项的数据,并且系统还随之重定向于删除客户信息处理页面DeleteClient.aspx页面,提示用户该操作已经完成。其删除所选客户记录的代码如下所视:privatevoidDeleteClient_ServerClick(objectsender,System.EventArgse)//单击删除按钮引起事件{foreach(System.Web.UI.WebControls.DataGridItemdlinthis.DataGrid1.Items){CheckBoxchk=(CheckBox)dl.FindControl("CheckBox1");//判断是否选中的删除项if(chk.Checked){stringClientID=dl.Cells[1].Text;//Cells[1]的值对应的即是隐含的ClientIDSqlConnectioncon=conn.createconn();con.Open();SqlCommandcmd=newSqlCommand("deletefromClientwhereClientID=""+ClientID+""",con);cmd.ExecuteNonQuery();con.Close();Response.Redirect("DeleteList.aspx");}}}//重定向至删除可户信息处理页面42 4.3联系人管理模块4.3.1浏览联系人信息浏览联系人信息是联系人管理模块最基本的功能之一,用户能够通过该模块对数据库中的联系人信息进行浏览,并做相应的修改、删除等。显示联系人信息的页面名称为:Touchman.aspx,其运行的客户界面如上图4.4所示。需要显示的数据包括联系人名称、所属客户、联系人地址、电话、E-mail、个人爱好等与联系人相关的信息。表4-1添加联系人信息页面使用的表单元素名称表单元素类型Value含义T_TouchManIDHidden系统生成联系人标识IDT_TouchManNameText用户填写联系人名称T_TouchManEamilsText用户填写联系人E-mailT_TouchManClientSelect用户填写联系人所属客户T_MainTouchManCheckBox用户填写主要联系人标识T_TouchManHobbyText用户填写联系人爱好T_TouchManSectionText用户填写联系人部门T_TouchManCityText用户填写联系人城市T_TouchManDutyText用户填写联系人职务T_TouchManMPhoneText用户填写联系人移动电话T_TouchManOPhoneText用户填写联系人办公电话T_TouchManHPhoneText用户填写联系人家庭电话T_TouchManFaxText用户填写联系人传真T_TouchManAddressText用户填写联系人地址T_TouchManEspDayText用户填写联系人特殊日子T_TouchManOthersText用户填写联系人详细说明T_TouchManCreatorIDText系统生成创建用户IDT_CreatorSectionIDText系统生成创建用户部门IDT_TouchManOperatorIDText系统生成操作用户IDT_TouchManCreateDateText系统生成创建日期T_TouchManUpdateDateText系统生成最后修改日期Check_OpenCheckBox用户选择是否公开标志SubmitSubmit保存提交表单实现该系统功能的代码,雷同上述浏览客户信息,只需修改如下命令:Sda.SelectCommand=newSqlCommand(“select*fromClient,[User],Section,TouchmanwhereClientID=TouchmanClientIDandUserSecton=SectionIDandUserID=TouchmanCreatorID”,con);这里联系人信息涉及了多个表,所以需要把多个表关联起来.42 在具体操作中,每个联系人都有一个所属的客户,通过SQL数据库查询的技巧,可以很好地将这些数据关联起来,并进行添加、修改和删除等操作,从而实现客户管理系统。4.3.2添加联系人信息当系统用户得到新的相关联系人信息时,可以通过填写联系人信息表单将联系人信息添加到联系人表中,具体的联系人添加页面如下图所示。图4.5添加联系人页面该模块功能的实现雷同于上述添加客户信息模块,区别就是属性不同。其具体实现代码如下:privatevoidSaveButton_ServerClick(objectsender,System.EventArgse){CheckBoxchk=(CheckBox)this.FindControl("CheckBox1");//判定是否为主要联系人CheckBoxchk1=(CheckBox)this.FindControl("CheckBox2");//判定是否公开intTouchManMain,TouchmanOpenFlag;if(chk.Checked)TouchManMain=1;elseTouchManMain=0;if(chk1.Checked)TouchmanOpenFlag=1;elseTouchmanOpenFlag=0;stringTouchmanName=TextBox2.Text;//省略了大部分赋值语句SqlConnectioncon=conn.createconn();con.Open();stringTouchmanCreateDate=DateTime.Now.ToShortDateString();stringTouchmanReviseDate=DateTime.Now.ToShortDateString();stringselectclient=this.DropDownList1.SelectedValue;SqlCommandcmd3=newSqlCommand("selectClientIDfromClientwhereClientName=""+selectclient+""",con);42 intTouchmanClientID=Convert.ToInt32(cmd3.ExecuteScalar());con.Close();//这段语句实现了用客户名查找联系表中相关客户IDSqlConnectioncon1=conn.createconn();SqlCommandcmd=newSqlCommand("insertIntoTouchman(TouchmanName,省略了Touchman的属性TouchManMain)values(@TouchmanName,省略部分结构类似@TouchManMain)",con1);SqlParameterpara1=newSqlParameter("@TouchmanName",SqlDbType.NVarChar,200);para1.Value=TouchmanName;cmd.Parameters.Add(para1);//省略了大部分类似语句con1.Open();cmd.ExecuteNonQuery();}4.3.3修改联系人信息在浏览联系人信息时,有可能要修改其中的信息,其操作步骤就如上修改客户信息.在单击修改按钮后,其跳出页面也如客户一般.而且其修改信息所进行的操作,也如客户一般.4.3.4联系人信息列表其代码结构如同客户信息列表,只需在连接数据库时修改如上代码命令,还有在网页上显示时,其HTML代码中表单元素的相关部分通过类似“Text="<%#DataBinder.Eval(Container.DataItem,"TouchmanName")’”的内嵌标签可以实现对表单的赋初值(从数据库中提取出来的数据),取的是联系人表中的属性值。添加联系人信息后,用户可以在联系人列表中查看全部联系人的信息。在快速查询中选择相应的关键字并填写关键字,可以快速查询联系人信息。具体效果图如下图所示。图4.6联系人信息列表42 第5章活动管理子系统实现活动管理系统是对用户与客户之间发生的或即将发生的活动进行规划、记录、分析和预备的系统。在一个多客户企业中,和客户之间往往会有各种各样的活动,通过活动管理系统的帮助,合理地安排这些活动,并从每次活动的记录或者别人公开的活动记录中借鉴到宝贵的活动组织经验,使得用户能够成功地处理与客户之间的关系。5.1关键技术介绍在活动管理系统中主要通过对数据库的操作管理活动信息,其中涉及到数据的检验、添加等数据库处理。在添加新的活动信息时,必须为活动分别选择一个相关的客户信息和联系人信息,才能把数据添加到活动表中,所以在添加活动的表单中,必须将选择客户和选择联系人的下拉表联系起来。也相当于实现了活动表于客户表、联系人表之间的关联。本系统选用了将数据绑定的方式来连接数据库,之后,再把显示在页面上的数据依次赋于相应的变量中,通过命令对象,存入数据库中。把客户表和联系人表关联实现的思路,可如下图所示:表单更改客户重生成表单提交表单数据库查询数据库图5.1动态关联逻辑图具体实现这个逻辑的代码如下:SqlCommandcmd=newSqlCommand("selectClientID,ClientNamefromClient",con);SqlDataReadersdr=cmd.ExecuteReader();//游标this.DropDownList1.DataSource=sdr;this.DropDownList1.DataTextField="ClientID";//赋值为关键字42 this.DropDownList1.DataValueField="ClientName";//把客户名称的值从数据库中提取赋值于下拉框中显示this.DropDownList1.DataBind();sdr.Close();SqlCommandcmdtouchname=newSqlCommand("selectTouchmanID,TouchmanNamefromTouchmanwhereTouchmanClientID="+this.DropDownList1.SelectedValue,con);//这句即实现了两者的关联SqlDataReadersdrtouchname=cmdtouchname.ExecuteReader();this.DropDownList2.DataSource=sdrtouchname;this.DropDownList2.DataTextField="TouchmanName";this.DropDownList2.DataValueField="TouchmanID";this.DropDownList2.DataBind();//从数据库调出数据在页面上显示必须要绑定sdrtouchname.Close();con.Close();实现两者关联的关键在于数据库的选择语句及其条件。5.2活动管理模块活动管理系统主要是通过活动表(Activity)来实现对客户活动信息的管理,其主页面为以文本框、下拉表框和按钮组成的表但,并包含显示操作记录的文本框。5.2.1浏览活动信息用户可以通过活动管理系统浏览所通有的客户活动信息,并根据实际情况进行相应的修改,具体的浏览信息页面如下图所示。图5.2浏览活动信息页面浏览活动信息是活动管理模块最基本的功能之一,用户能够通过该模块浏览数据库中的活动信息,并进行相应的查询和快速查询、新建、修改的链接操作。显示活动信息的页面名称为:Activity.aspx,其运行时的界面如图5.1所示。这个页面其另外要注意的功能是保存功能,其具体实现语句如下所示:privatevoidSaveButton_ServerClick(objectsender,System.EventArgse)//这个函数是表示单击按钮所引起的事件42 {stringActivityOpenFlag=”0”;stringActivityTopic=this.ActivityTopic.Text;stringActivityClientID=this.DropDownList1.SelectedValue;//取得下拉框中的值stringActivityTouchmanID=this.DropDownList2.SelectedValue;stringActivitySort=this.ActivitySort.Text;stringActivityDate=this.ActivityDate.Text;//这个日期的值为DateTime.Now.ToShortDateString();stringActivityOverDate=this.ActivityOverDate.Text;stringActivityDetail=this.ActivityDetail.Text;stringActivityCreatorID=Session["UserID"].ToString();stringActivityCreateDate=this.Textbox1.Text;stringActivityRevisorID=Session["UserID"].ToString();stringActivityReviseDate=this.TextBox25.Text;if(Checkbox1.Checked)//表示是否公开ActivityOpenFlag="1";SqlConnectioncon=conn.createconn();SqlCommandcmd=newSqlCommand("insertIntoActivity(ActivityTopic,省略了活动的属性ActivityReviseDate)values(@ActivityTopic,省略的与这格式相同@ActivityReviseDate)",con);//这个命令对象是进行往数据库中新增数据的操作命令SqlParameterpara1=newSqlParameter("@ActivityTopic",SqlDbType.NVarChar,255);para1.Value=ActivityTopic;cmd.Parameters.Add(para1);//具体赋值………………………………………………….省略部分代码……………………………………………………..SqlParameterpara13=newSqlParameter("@ActivityReviseDate",SqlDbType.DateTime,8);para13.Value=ActivityReviseDate;cmd.Parameters.Add(para13);con.Open();cmd.ExecuteNonQuery();Response.Redirect("saveActivity.aspx");//重定向到saveActivity.aspx页面}5.2.2添加活动信息当系统用户与客户有新活动时,可以通过填写活动信息表单将活动信息添加到活动表中,具体的活动信息的添加页面如下图所示。图5.3添加活动信息页面42 在上图所示页面填好活动信息表单后,单击“保存”按钮,即可添加一条新的活动信息,系统将提示客户已经保存该活动信息。对应框中添入所要添入的项,然后单击“保存”按钮,将执行添加活动信息的操作。具体的实现方式是在按钮上加了事件。其具体的实现代码如添加客户信息。5.2.3活动列表模块活动列表的功能是在添加活动信息后,用户可以在活动信息列表中查看相关客户的活动的信息。通过在快速查询中选择相应的关键字段并填写关键字,可以快速查询活动信息。具体效果如下图所示。图5.4活动信息列表页面活动列表模块将活动信息数据通过列表的方式展示给用户,具有模糊查询和删除的功能。活动列表页面为Activitylist.aspx,活动列表可以将一些基本信息显示给用户,而且当记录比较多的时候,将列表分页显示,通过“上一页”和“下一页”来实现分页。其主要的实现代码,也如客户活动列表。5.2.4修改活动信息当活动信息的一些内容发生变化,如若客户表中,客户的名称被修改了或者活动的主题发生了变化,这些都要求活动管理模块要具备修改的能力.这里,采用了单独页面upadateTouchman.aspx提供编辑功能.当用户选定所要修改的项且修改完成后,只要单击”编辑”按钮,提交就行.因为在”编辑”42 按钮中,定义了一个事件,由它来进行修改信息写入数据库.其具体实现代码如下:privatevoidUpdateButton_ServerClick(objectsender,System.EventArgse)//单击按钮所引发的事件{foreach(System.Web.UI.WebControls.DataGridItemdlinthis.DataGrid1.Items)//游标{stringUserID="1";stringActivityID=((TextBox)(dl.FindControl("Textbox6"))).Text;//取出数据窗口中的数据,且这个已经被设为隐含,修改该记录时,其编号是不变的stringActivityRevisorID=UserID;//操作者的ID号stringActivityReviseDate=this.Textbox1.Text;stringActivityTopic=((TextBox)(dl.FindControl("ActivityTopic"))).Text;//这里的主题可以是被修改过后的stringActivitySort=((TextBox)(dl.FindControl("ActivitySort"))).Text;stringActivityPriority=((TextBox)(dl.FindControl("Textbox3"))).Text;stringActivityDetail=((TextBox)(dl.FindControl("ActivityDetail"))).Text;SqlConnectioncon=conn.createconn();con.Open();SqlCommandcmd=newSqlCommand("updateActivitysetActivityTopic=""+ActivityTopic+"",ActivitySort=""+ActivitySort+"",ActivityDetail=""+ActivityDetail+"",ActivityRevisorID=""+ActivityRevisorID+"",ActivityReviseDate=""+ActivityReviseDate+""whereActivityID=""+ActivityID+""",con);//设定了修改的命令对象,并赋值cmd.ExecuteNonQuery();con.Close();}}从代码中我们也可以看到,有四类是可以被修改的,分别:活动的主题、活动的类型、活动的优先级和活动的详细内容,而一般我们所要修改的也仅仅如此。这里没有列出起对应的HTML代码,其实这些内容如客户一般,仅是其所展现的表内容的区别。它需要连接用户(User)表、部门(Section)表、客户(Client)表和活动(Activity)表。5.2.5删除活动信息当数据库中的数据不在符合实际,或者该客户已经不与本企业发生任何联系了,那么该记录都可以被删除。本系统也提供了删除的功能。删除功能是在活动信息列表页面(Touchmanlist.aspx)中实现的。只要选中所要删除的记录前面的checkbox,再单击删除即可。其具体的实现代码如下:privatevoidDeleteClient_ServerClick(objectsender,System.EventArgse){foreach(System.Web.UI.WebControls.DataGridItemdlinthis.DataGrid1.Items)42 {CheckBoxchk=(CheckBox)dl.FindControl("CheckBox1");if(chk.Checked)//这个就是用来判别是否要删除该对应项的checkbox{stringActivityID=dl.Cells[1].Text;//取出其记录隐含的ID号,其中cell表示的是数据窗口显示的列(从左到右)的数组,ActivityID是排在第二(html代码中如此)SqlConnectioncon=conn.createconn();//连接数据库对象con.Open();SqlCommandcmd=newSqlCommand("deletefromActivitywhereActivityID=""+ActivityID+""",con);//创建删除命令对象cmd.ExecuteNonQuery();con.Close();Response.Redirect("DeleteActivityList.aspx");//跳至该页面提示用户删除完成信息}}}42 第6章软件测试测试是软件开发时期的最后一个阶段,也是软件质量保证中至关重要的一个环节。6.1测试的目的与任务测试的真正目的是“为了发现程序中的错误”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。6.2测试的方法测试任何产品都有两种方法:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一个方法成为黑盒测试,后一个方法称为白盒测试。对于软件测试而言,黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生地输出信息,并且保持外部信息(如,数据库或文件)的完整性。黑盒测试又称为功能测试。与黑盒测试方法相反,白盒测试法的前提是可以把程序看成安装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。白盒测试又称为结构测试。42 不论采用上述哪种测试方法,只要对每一种可能的情况都进行测试,就可以得到完全正确的程序。包含所有可能情况的测试称为穷尽测试,对于实际程序而言,穷尽测试通常是不可能做到的。使用黑盒测试法,为了做到穷尽测试,至少必须对多有输入数据的各种可能值的排列组合都进行测试,但是,由此得到的应测试的情况往往大到世局上根本无法测试的程度。使用白盒测试法,为了做到穷尽测试,程序中每条可能的通路至少都应该执行一次(严格地说每条通路都应该在每种可能地输入数据下执行一次)。即使测试很小的程序,通常也不能做到上述这一点。6.3具体测试(1)向控件中插入数据,查看数据库中是否保存该数据,并且看是否通过下面的数据窗口显示记录。(2)插入发生错误时,是否有提示框给出。(3)是否直接可以正确的对数据窗口中的记录进行修改和删除。(4)在查询窗口中看是否可以按不同的方式进行查询,查询的结果是一条记录还是全部的记录总之软件测试的目的是为了发现错误,然后及时的修改,在此给出如下测试用列。测试目的:检查系统对非法输入数据的识别能力和系统的基本功能完善能力。说明:在客户关系管理中,当新录一客户信息时需录入客户名称,国家/地区,国家区号,省份/直辖市,城市,城市区号,邮编,详细地址,电话,传真,电子邮箱,公司主页,公司年收入,员工人数,开户银行,银行帐号,增值税开票名等信息。其中公司年收入一定得是数据的,还有客户名称是必填的。新建并保存后,记录存入数据库。修改记录写入数据库。模糊查询功能,输入关键字,能在列表中显示。具体测试:任意输入一组合法数据,但客户名称为空。测试结果,将在客户文本框旁显示“不为空”的提示框,这说名系统能保证不接受客户名称为空的记录。再输入一组数据,客户名称为在系统中已经存在的编号。测试结果,系统弹出产品编号不能重复的警告框,这说名系统能保证不接受客户名称相同的记录。如上输入格式全部正确后,单击保存,再打开客户列表,可以查看到该记录的存在。在所打开的客户列表(联系人列表)选择自己要删除的项,再点击删除,会跳出页面,说明已经删除。之后再重打开客户列表(联系人列表)就可发现该记录已经被删除。在客户详细信息查看页面中,单击修改按钮,跳至修改客户信息页面,通过模糊查询,在两个下拉框中选择自己的查询条件,再数据关键值,按查询,即可,就可在页面中显示该数据内容,再是对需要修改的数据进行修改,之后单击“编辑”按钮,即可。修改完成。修改结果在客户列表中显示查看。总结:这个测试用例能保证系统录入的客户名称唯一、不为空,基本功能的完成。42 第7章结论与体会7.1系统优缺点系统评价就是客观,公正的从各个方面评价系统的各项功能。具体从优点,缺点这两方面进行阐述。系统的主要优点有:1.系统从基本上实现了CRM所要求的数据信息的收集和有效的管理;2.界面友好,输入信息方便(有些信息通过数据表直接调出);3.可采用快捷键,操作方便快捷;4.查询全面,对任何情况都可以查询,从而对管理进行监督;5.即面向开发人员,又面向用户;6.系统能支持网络数据传输,数据共享;7.网页上的数据是直接于数据库相连的,数据信息是动态的,维护方便;8.能对系统内的数据进行分析,即进行数据挖掘,为企业进行决策提供有利的依据;9.对系统内的数据进行报表显示,则增加了系统的安全性。系统还存在如下缺点:1.可能在实际应用的某些功能不能实现,对于一些潜在的数据不能收集到位;2.数据库设计方面,由于所学知识有限,不能实现更为灵活的功能;3.系统界面还不够美观;4.系统的安全性考虑的还不够,对于用户权限细分不足,可能会导致越权(因现实中各个岗位分工是不一样的);5.系统的分析有一定的局限性。7.2将来可能提出的要求42 因时间比较紧,加上本人对具体的业务知识的缺乏,本系统还存在着许多不足之出,在今后,系统将朝收集更多的信息,考虑更为全面,对数据挖掘技术的应用更为透彻,加强E-mail文件传送安全控制;由于操作员口令直接存放在数据库中,在系统运行时数据库文件必须存在,这样,人们可以通过直接打开CRM_Data.MDF文件来获取操作员口令,给系统的安全性带来了比较大的隐患,将来要对口令进行加密。7.3系统设计过程中的体会和感受经过将近三个月的设计和开发,客户关系管理系统基本开发完成。本系统在开发过程中遇到了不少困难,特别是本系统涉及了很多不同格式的数据的录入,如一些邮箱地址、公司主页等等,网页的数据与数据库相关联方面,对数据库信息修改方面所要遵循的规则。在开发过程中感到最困难的方面是对具体业务的了解,因此对于一些数据的分析处理也不是很全面。这一问题直接影响建立的系统的完善性。直到系统开发接近尾声时这个问题才凸现出来,大大增加了工作量,同时也使我认识到软件工程学的重要性。经过查阅大量相关资料以及指导老师的精心指导,才使系统功能逐步完善,对于某些忽略的地方经过重新的整理,得到有效的数据,再者是在ASP.NETWeb设计技术上的问题,由于我编程能力的不足,在实现有些功能的时候碰到了不少问题,也就无法提供灵活的数据查询功能,还有设计项目与SQLServer数据库的可移植性不是很好,会出现一些(如无法于数据库相连)错误。有些时候会出现很多问题,但在指导老师与同学们的帮助下,逐步完善。但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方。如用户界面不够美观,系统缺乏防病毒侵袭功能,用户登录安全性验证不很完善等多方面问题。这些都有待进一步改善。42 参考文献[1].陈承欢、彭勇管理信息系统基础与开发技术(第一版)北京:人民邮电出版社2005.2[2].萨师煊王珊数据库系统概论(第三版)北京:高等教育出版社2000.2[3].刘兰娟信息系统分析与设计北京:电子工业出版社2002.8[4].宋文官电子商务实用教程北京:高等教育出版社2002.8[5].王恩波网络数据库实用教程-SQLServr2000北京:高等教育出版社2004.1[6].张立科ASP开发CRM系统实例导航北京:人民邮电出版社2005.1[7].陈楠基于数据仓库与数据挖掘技术的决策支持系统计算机时代2001年第3期[8].杨晓,任清珍数据仓库数据集市和数据挖掘现代计算机2002年第1期[9].曹术华得客户者得大下中国计算机报,2001年第12期[10].JasonPrice(美)等著窦芳等译VisualC#.NET从入门到精通电子工业出版社2003.3[11].荐沧,龙晓敏深入体验ASP.NET西安电子科技大学出版社2001.10[12].康际科技ASP.NET行家设计实务中国铁道出版社2002.1[13].RussBasiura等著康埔泽,ASP.NETWeb服务高级编程清华大学出版社2002.6[14].MarcoBellinaso等著康博译ASP.NETWeb站点高级编程——提出问题、设计方案、解决方案清华大学出版社2002年9月[15].JosephBustos,KarliWatson著侯或泽.NETWeb服务入门经典一C#编程篇42 致谢通过这次课程设计,我学到了很多东西,在开发过程中,增强了自学的能力42