- 245.50 KB
- 2022-05-14 15:45:08 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
目录摘要1Abstract2第1章绪论41.1背景介绍41.2本系统的研究意义5第2章系统分析52.1系统的使用对象52.2开发语言的选择62.3数据库结构分析62.4系统所实现功能分析6第3章系统结构设计73.1系统结构图73.2项目管理器的建立83.3数据库和表的建立93.3.1数据库的建立93.3.2数据表的建立93.4表之间的参照完整性的建立11第4章用户界面设计144.1表单设计144.1.1登录表单设计144.1.2修改密码表单设计164.1.3客户查询结果表单设计174.1.4联系人查询结果表单设计204.1.5客户查询表单设计214.1.6联系人查询表单设计224.1.7部门电话查询结果表单设计234.1.8查询部门电话表单设计244.1.9录入客户信息表单设计254.1.10录入联系人信息表单设计274.1.11录入服务信息表单设计284.1.12查询区号邮编表单设计294.1.13区号邮编查询结果表单设计304.2菜单设计314.2.1布局菜单314.2.2创建自定义菜单324.2.3创建快捷式菜单354.2.4菜单的使用364.3报表设计364.3.1启动报表设计器364.3.2报表设计器窗口37第5章主程序设计405.1建立主程序405.2设置主文件42第6章结论43致谢43参考文献432
摘要传统上使用手工方式管理客户信息存在效率低和保密性差的缺点,尤其是庞大的客户信息更加难以管理和维护。而采用计算机可以对这些信息进行自动化管理,易于维护,同时减少了工作量。本文采用VisualFoxpro6.0(VFP)开发工具,实现了一个客户管理系统。该系统能够对客户的大量信息进行录入、查找、更新和打印,是一个功能完备的客户管理系统。关键词:客户信息,自动化管理,客户管理系统第1章绪论1.1背景介绍当今社会,随着科技的不断发展,计算机已在人们的日常生活和工作领域中日益普及,并且人们对于计算机的应用不再是简单的文字处理和最初的科学计算。计算机早已涉及到我们生活的各个方面。利用计算机来进行管理,已成为我们日常工作的需要。客户是一个公司的主要联系对象,没有了客户,公司就失去了生存的根本。一直以来,人们用传统的方式来管理客户信息。人们用纸介质来获得各种需要的信息。这种管理方式存在效率低、保密性差的缺点。并且,随着时间的积累,客户的信息越来越多,查找、维护或者更新起来非常的麻烦。手工管理已经不能满足需要。这就需要使用现代化的手段来提高管理和服务的水平。客户管理系统应该为客户和公司提供充足的信息和快捷的查询手段。1.2本系统的研究意义使用计算机对客户信息进行管理,具有查询迅速、查询方便、保密性好以及成本低的优点。这些优点能够极大地提高客户信息的管理效率。使用计算机来管理信息也是企业管理现代化的标志。因此开发一套客户管理系统,让计算机来管理客户信息势在必行。管理员通过客户管理系统可以查询某些客户的信息、公司所提供服务的情况;还可以对当前客户情况进行一些统计,给出统计表格,以便全面掌握客户的联系情况。客户通过客户管理系统可以查询公司的电话等信息。第2章系统分析2.1系统的使用对象使用该系统的人员,主要是公司的管理人员或者需要查询信息的客户。使用的目的主要是对客户的信息进行高效的管理,并实现快速的查询。应包括客户信息的输入、查询以及报表输出等功能。2
考虑到使用该系统的多为非计算机专业的人员,所以在开发时要考虑以下几个方面:□操作简单。因为使用者多为非计算机专业人员,所以该系统要求设计的界面美观,操作方便。要充分考虑该软件的界面友好和操作方便,便于使用人员快速上手。□易于维护。一个软件设计的好坏,关键在于产品的可靠,稳定,便于维护。□便于升级。随着社会的发展,对系统的要求会越来越高。要求系统具有更高的安全性、更丰富的功能以及更快的操作速度。所以在设计时要考虑到以后的升级问题。2.2开发语言的选择针对目前世界上流行的大量软件和开发工具,经过认真分析其优缺点,结合目前的软硬件环境,选用微软windows平台下的visualfoxpro6.0(简写成VFP6.0)作为软件开发工具。选用该工具具有以下几个方面的特点:□vfp6.0是比较好的关系型数据库管理系统开发软件。它提供了可视化的开发平台和面向对象的程序设计方法。大量控件的提供节省了开发工作量,提高了开发的效率。□vfp6.0提供了很多设计器,诸如“数据库设计器”、“表单设计器”、“菜单设计器”等。另外还有一些“向导工具”。利用这些设计器和向导工具,不用编写大量的程序代码,从而使开发工作变得比较轻松。□vfp6.0本身就是一个数据库开发系统。使用它开发数据库系统效率高,稳定性好。综上所述,vfp6.0可以满足一个单位对客户信息管理的要求,所以用其来开发客户管理系统是非常合适的。2.3数据库结构分析好的数据库结构,查询记录的速度较快,而且也不容易出现锁表现象。分析对客户信息的管理情况,首先需要了解客户的基本情况信息。包括客户的编号、单位名称以及电话等信息;还要有地区编号以及联系人等信息。联系人的信息主要包括电话、姓名、单位以及生日等信息。以便于在联系人的生日到来时,公司为其进行庆祝。在联系客户时,如果记不住联系人的区号以及邮政编号等信息,可以进行查询。所以需要的数据表有客户表、联系人表、部门配置表、部门电话表、区号邮编表、服务表以及操作员表。2.4系统所实现功能分析该客户管理系统能达到的功能为:让计算机进行客户的信息管理、客户住处的打印;客户可以在网上进行查询公司的部门、电话、公司所在地区的编号以及邮编等操作。客户管理人员可以查询某客户以及客户联系人的基本信息;还可以对一些客户进行主要联系、进行生日的问候等。客户在查询公司信息时,可能对公司部门的信息掌握得不是十分的全面。所以对公司部门电话的查询可以根据房间号或者部门代码信息进行查询。对客户的查询除了可以根据编号、名称、电话等信息外,还可以根据客户所在的地区进行查询。本客户管理系统主要具有以下功能:2
系统登录:本系统的使用人员只有在输入了正确的证件号和密码后,才能进入该系统。是本单位的人员但是不知道密码不能进入本系统。是本公司的客户,与该公司有联系的人员,在获得一个编号和密码后,也可以进入该系统。这样做主要防止不合法的人员使用系统的资源,进行数据的撰改。权限设置:不同的登录者具有不同的系统权限,具有不同权限者访问不同的系统资源,这样主要是为了限制越权操作。数据录入管理:对与客户相关的信息的录入操作进行管理。主要包括录入、添加以及删除客户信息;录入、添加以及删除联系人信息;录入、添加以及删除服务的信息。客户记录主要包括:客户编号、电话、单位名称、传真、邮政编码、E-mail、单位地址、区号以及联系人编号等字段。联系人记录主要包括:联系人编号、姓名、性别、单位名称、电话、生日以及爱好等字段。服务记录主要包括:部门代码、客户代码、服务项目号、服务评价以及金额等。信息查询管理:对查询与客户相关的信息进行管理,主要包括:查询部门电话、查询客户信息、查询区号邮编以及查询联系人信息。其中查询部门电话可以根据房间号、联系人编号进行查询。查询区号邮编可以根据地区名称和地区编号进行查询。查询联系人信息可以根据联系人编号、姓名以及生日进行查询。部门电话记录主要包括:部门代码、处室名称、房间号、分机号以及直拨电话。报表输出管理:对一些联系信息进行打印的管理,主要包括:打印服务信息、打印联系人信息以及打印区号邮编等。系统维护:对系统数据进行维护。主要包括修改密码以及添加人员等。普通用户可以修改自己的密码。管理人员可以添加新客户。密码修改功能让操作者可以定期修改自己的密码,防止密码被盗用。这主要是出于安全的考虑。退出系统:离开客户管理系统。第3章系统结构设计3.1系统结构图开发程序前,要先理清思路,有一个清晰明了的结构图,能大大提高开发程序的效率和质量。为了开发客户管理系统,需要设计若干表单、数据表、程序、报表以及主菜单。由项目管理器统一管理,由主程序进入系统,由主程序调出用户登录程序。登录成功后调用系统的主菜单,由主菜单调用表单界面和报表。该客户管理系统的总体功能流程如图3.1所示。2
系统首页验证密码主菜单退出系统数据录入信息查询密码管理报表输出系统维护录入客户信息录入联系人信息录入服务信息查询部门电话查询客户信息查询区号邮编查询联系人信息打印客户信息打印服务信息打印联系人信息打印区号邮编图3.1总体功能流程图3.2项目管理器的建立由于本系统是一个应用系统,包含许多各种类型的文件。因此采用VFP的项目管理器来管理整个系统的创建,可使开发工作条理化、系统化。首先,建立一个存放项目文件的文件夹,如F:客户管理系统。其次,在VFP中将该文件夹设置为默认目录。具体步骤为:在VFP主窗口中选择“工具”菜单下的“选项”命令,在弹出的“选项”对话框中单击“文件位置”标签,选择“默认目录”选项,单击“修改”按钮,在弹出的“更改文件位置”对话框中选择要设置的默认目录,即存放项目文件的文件夹,单击“确定”按钮,返回上一界面,单击“设为默认值”按钮,再单击“确定”按钮。2
第三,建立项目文件。在VFP主窗口中选择“文件”菜单的“新建”命令,弹出“新建”窗口,在“文件类型”中选择“项目”选项,然后单击“新建文件”按钮,弹出“创建”窗口,选择保存路径,输入项目文件名Personnel-MIS,然后保存,即建好了项目文件。3.3数据库和表的建立3.3.1数据库的建立建立好了项目管理器之后,就开始建立客户管理系统所需要的数据库和数据表。数据库的建立步骤为:⑴单击“数据选项卡”,选择“数据库”选项。单击“新建”按钮,弹出“新建数据库”对话框,然后单击“新建数据库”按钮,出现保存对话框,保存数据库名为:客户管理.dbc。3.3.2数据表的建立刚创建的数据库只是一个空的数据库,还没有数据。只有创建了数据表和其他数据对象后,才能输入数据或者进行其他数据库的操作。本系统所需要的数据表有客户表、联系人表、部门配置表、部门电话表、区号邮编表、服务表以及操作员表。建立数据表的步骤大致一样,下面就建立部门配置表,将建立数据表的步骤做如下介绍:⑴右击“数据库设计器”窗口,在弹出的快捷菜单上选择“新建表”命令。⑵在弹出的对话框中,单击“新建表”按钮,在出现的保存文件对话框中设置文件名为:部门配置.dbf。单击“保存”按钮后即弹出“表设计器”对话框。在该对话框中设计表结构。⑶设计表结构时,在“字段”页面中,输入字段名、字段类型、宽度、小数位数、索引和NULL值(该功能是在一个记录中使用空标记,此时,记录的默认值不起作用)。在“显示”区设置字段的格式、输入掩码和标题。其他区域与之类似。⑷设置“表设计器”的索引页,切换至“索引”页面,设置部门代码为“主索引”。主索引和“唯一索引”是有区别的,主索引键值在数据表中是唯一的,且不允许为空,唯一索引键值也是唯一的但允许为空。⑸表的结构设计完成之后,单击“确定”按钮,会弹出提示信息“现在输入数据记录吗?”。⑹在提示输入数据对话框中,单击“是”按钮。可以输入几条数据以供演示。这样部门配置表就建好了。按照以上步骤也同样可以建立其他表。下面分别列出了各表的表结构:3.4表之间的参照完整性的建立参照完整性是指,当插入、修改或者删除表中的记录时,通过参照引用相关联的另一个表的数据,来保护对表操作的正确性。例如客户记录有客户编号、区号和联系人编号等字段组成,如果没有参照完整性,可能会插入一条不存在的区号的客户记录。如果在插入之前进行参照完整性检查,就不会出现这样的错误。2
关系数据库管理系统一个重要的功能就是参照完整性。必须先建立表之间的关联,才能使用参照完整性。建立表之间的关联之前,要先对表建立索引。为子表建立普通索引,为父表建立主索引。在父表的主索引和子表的普通索引之间建立联系。下面以客户管理系统中的两个表为例进行说明:□客户表,含有字段:客户编号、电话、单位名称、传真、邮政编码、E-mail、单位地址、区号以及联系人编号。其中客户编号是主索引。区号以及联系人编号是普通索引。□区号邮编表,含有字段:区号、地区名称以及邮政编码。其中区号是主索引。建立表之间的关联,要在数据库设计器中进行。首先要打开数据库设计器,方法是:在“项目管理器”对话框中的“数据”页面下,选择“数据库”选项中的“客户管理”。单击“修改”按钮,即可打开数据库设计器。建立表之间的关联的方法是:在“数据库设计器”中,用鼠标左键选择区号邮编表的主索引区号,按住鼠标左键不动,拖动鼠标到客户表的区号索引上。此时鼠标箭头变成小矩形,放开鼠标左键,读者客户表和区号邮编表之间关联就建好了。建立完数据表之间的关联后,就可以建立参照完整性约束了。必须先清理数据库才能建立参照完整性。操作的步骤如下所示:⑴单击菜单栏的“数据库”的“清理数据库”命令,进行数据库清理。只要打开数据库设计器,菜单栏就会出现“数据库”菜单。⑵右击数据表之间的联系,选择“编辑参照完整性”命令,弹出“参照完整性生成器”界面,如图3.2所示。图3.2参照完成性生成器参照完整性生成器中显示所有的联系。参照完整性规则共有3个,分别是:更新规则,删除规则和插入规则。更新规则规定了当更新父表的主关键字时,处理相关子表中记录的方法。删除规则规定了当删除父表中的记录时,处理相关子表中记录的方法。插入规则规定了当子表中插入一条新记录或者更新一条已经存在的记录时的处理规则。在客户管理系统中,更新规则设定为“级联”,即修改区号邮编表的区号时,自动更新客户表的记录。删除规则设定为“限制”,即若客户表中的相关记录,则不允许删除区号邮编表中的相关记录。插入规则设定为“限制”,即插入客户记录时检查区号邮编的记录是否存在。当数据库中的数库表建立好后,项目管理器和数据库的结构如图3.3所示:图3.3项目管理器之数据库第4章用户界面设计4.1表单设计2
创建完成数据库和数据表后就可以进行表单设计了。有户界面包括表单和菜单两部分,其中主要部分是表单,面向对象编程的大多数工作是在表单中进行的,表单设计的过程就是用户界面设计的过程。用户界面的任务主要是完成用户与系统进行交互。下面介绍表单的设计。4.1.1登录表单设计登录表单的作用是操作者只有输入了正确的证件号和密码才能登录进入客户管理系统。它的数据环境是:操作员表。登录表单主要含有以下控件:3个标签:“登录界面”、“证件号”、“密码”。2个文本框:no和password。两个控钮:“确定”、“退出”。登录表单及其主要控件的属性设置为:对象属性属性值说明Form1Caption用户登录Namelogin客户管理系统Fontsize16标签名登录界面Fontsize18标签名证件号Nameno标签名密码NamePassword1标签名passwordchar*⑴当登录表单加载时load事件运行。登录表单的load事件代码如下所示:settalkoff﹠﹠关闭返回执行状态的显示,默认为开。setsafetyoff﹠﹠设置safety为关,删除数据库时不会出示,与新建的数据库同名时直接覆盖。closeall﹠﹠关闭所有的数据库opendatabasef:杜安静存﹠﹠以独占方式打开数据库“客户管理”。客户管理系统客户管理.dbcexclusiveselecta﹠﹠选择工作区Ausef:杜安静客户管理系统操作员表.dbf﹠﹠在工作区A中打开操作员表⑵登录表的的unload代码如下:caozuoyuan=""﹠﹠变量caozuoyuan为空returncaozuoyuan﹠﹠返回变量值closeall﹠﹠关闭所有打开的数据库以及数据表⑶确定按钮是当用户如果输入的证件号和密码都正确的时候,则该界面不再显示,用户进入管理系统。当输入的证件号或密码不正确时,程序运行等待2秒,显示“密码不正确,请重新输入!”的提示信息。“确认”2
按钮的click事件的代码如下所示:privatezj,mm,st﹠﹠定义私有变量zj(输入的证件),mm(输入的密码),st(提示信息)st="密码不正确,请重新输入!"﹠﹠提示信息“密码不正确,请重新输入!”zj=alltrim(thisform.no.value)﹠﹠把输入的证件号赋值给变量zjmm=alltrim(thisform.password1.value)﹠﹠把输入的密码赋值给变量mmlocateforzj==alltrim(操作员.证件员)﹠﹠查找操作员表中与zj相等的证件号iffound()andalltrim(操作员.密码)==mm﹠﹠如果找到相同的证件号再比较密码是否相同caozuoyuan=alltrim(操作员.证件员)﹠﹠变量caozuoyuan的值为操作员表中的证件号thisform.visible=.f.﹠﹠如果证件号和密码都正确,该界面不再显示dozhumenu.mpr﹠﹠执行主菜单的zhumenu.mprelsewaitwindowsttimeout2﹠﹠程序运行等待2秒,显示密码不正确的提示信息thisform.password1.value=""﹠﹠密码文本框为空thisform.password1.setfocus﹠﹠密码文本框获得焦点endif⑷“退出”按钮的作用是当用户点击退出之后,将释放登录表单,退出系统。“退出”按钮的click事件的代码如下所示:tuichu=messagebox("您确定要退出客户管理系统吗?",4+32+0,"客户管理系统")iftuichu=6﹠﹠如果要退出系统caozuoyuan=""﹠﹠变量caozuoyuan为空thisform.release﹠﹠释放登录表单endifclearevents﹠﹠清除事件循环运行后的登单表单,如图4.1所示。图4.1登录表单4.1.2修改密码表单设计修改密码表单用来完成修改密码的功能。在该表单中,单击“确定”按钮,进行密码的修改。单击“取消”按钮,取消密码修改的操作。该表的数据环境是:操作员表。密码修改表单主要包括如下的控件:4个标签:分别是“密码修改”、“证件号”、“旧密码”和“新密码”。3个文本框:分别是“txt证件号”、“txt密码”以及“password2”。3个按钮控件:name属性分别为command1,command2,command3。2
修改密码表单及其主要控件的属性设置为:控件属性属性值说明Form1caption密码修改namecipherLable1caption密码修改fontsize18Albl证件号caption证件号Albl密码caption旧密码passwordchar*使得输入时显示占位符Lable2caption新密码namePassword2passwordchar*使得输入时显示占位符command1caption确定command2caption取消command3caption退出⑴“修改密码表单”的“确定”按钮的click事件的代码如下所示:publicx﹠﹠定义公共变量xselecta﹠﹠选择工作区ausef:杜安静客户管理系统操作员表.dbf﹠﹠打开操作员表x=alltrim(thisform.txt密码.value)﹠﹠用x保存旧密码replace操作员表.密码withalltrim﹠﹠用新密码代替旧密码(thisform.password2.value)messagebox("密码已修改",0+48,"提示")﹠﹠提示已进行了密码修改的信息thisform.refresh﹠﹠刷新表单⑵“取消”按钮的click事件代码如下所示:replace操作员表.密码withx﹠﹠用x值代替操作员表的密码字段messagebox("放弃密码修改",0+48,"提示")﹠﹠提示放弃修改的信息thisform.refresh﹠﹠刷新表单⑶“退出”按钮的click事件代码如下所示:thisform.refresh﹠﹠刷新表单thisform.release﹠﹠释放表单资源运行后的表单如图4.2所示。图4.2修改密码表单2
4.1.3客户查询结果表单设计客户查询结果表单显示按一定条件查询出的客户的基本情况情况信息。查询条件有按客户编号查询、按联系人编号以及电话查询。这类表单由后面的客户查询表单调有。在表单界面中可以查看第一条记录、前一条记录、后一条记录、最后一条记录以及退出该界面。客户查询结果表单的数据环境是:客户表和联系人表。该表单的主要控件为:10个标签:客户编号、电话、单位名称、传真、邮政编码、E-mail、单位地址、区号以及联系人编号以及客户住处查询结果。前九个标签的name属性依txt客户编号、txt电话、txt单位名称、txt传真、txt邮政编码、txtE-mail、txt单位地址、txt区号、txt联系人编号。客户住处查询结果的caption的属性为“客户住处查询结果”,fontsize属性值为:18.9个文本框:分别为txt客户编号、txt电话、txt单位名称、txt传真、txt邮政编码、txtE-mail、txt单位地址、txt区号、txt联系人编号。1个表格控件:表格的name属性为grid1,childorder属性为:联系人编号。Columncount属性为:7。Linkmaster属性为:客户表。Recodsource属性为:联系人表。Recordsouretype属性为:“0-表”。5个按钮控件:name属性分别为:command1,command2,command3,command4,command5。Caption属性分别为:“第一个”、“上一个”、“下一个”、“最后一个”以及“退出”。表格的caption属性为:查询结果,name属性为:tquery。⑴表单的lint事件程序代码如下所示:thisform.refresh﹠﹠刷新表单locateforkh=alltrim(客户表.客户编号)﹠﹠光标转到与客户编号匹配的记录thisform.txt客户编号.enabled=.f.﹠﹠客户编号文本框不可修改thisform.txt电话.enabled=.f.﹠﹠电话文本框不可修改thisform.txt单位名称.enabled=.f.﹠﹠单位名称文本框不可修改thisform.txt传真.enabled=.f.﹠﹠传真文本框不可修改thisform.txt邮政编码.enabled=.f.﹠﹠邮政编码文本框不可修改thisform.txtemail.enabled=.f.﹠﹠email文本框不可修改thisform.txt单位地址.enabled=.f.﹠﹠单位地址文本框不可修改thisform.txt区号.enabled=.f.﹠﹠区号文本框不可修改thisform.txt联系人编号.enabled=.f.﹠﹠联系人编号文本框不可修改⑵“第一个”按钮的click事件的代码如下所示:gotop﹠﹠指针指向第一条记录this.enabled=.t.﹠﹠该记录获得焦点thisform.command2.enabled=.f.﹠﹠按钮组中的按钮2不能获得焦点thisform.command3.enabled=.t.﹠﹠按钮组中的按钮3获得焦点thisform.command4.enabled=.t.﹠﹠按钮组中的按钮4获得焦点thisform.command5.enabled=.t.﹠﹠按钮组中的按钮5获得焦点2
thisform.refresh﹠﹠刷新表单⑶“上一个”按钮的click事件代码如下所示:skip-1﹠﹠指针指向上一条记录thisform.command1.enabled=.t.﹠﹠按钮组中的按钮1获得焦点thisform.command3.enabled=.t.﹠﹠按钮组中的按钮3获得焦点thisform.command4.enabled=.t.﹠﹠按钮组中的按钮4获得焦点thisform.command5.enabled=.t.﹠﹠按钮组中的按钮5获得焦点thisform.refresh﹠﹠刷新表单ifbof()﹠﹠判断指针是否在表头this.enabled=.f.﹠﹠该记录不能获得焦点elsethis.enabled=.t.﹠﹠该记录获得焦点endifthisform.refresh﹠﹠刷新表单⑷“下一个”按钮的click事件代码如下所示:Skip﹠﹠指针指向下一条记录thisform.command1.enabled=.t.﹠﹠按钮组中的按钮1获得焦点ifeof()﹠﹠判断指针是否在表尾this.enabled=.f.﹠﹠该记录不能获得焦点thisform.command1.enabled=.t.﹠﹠按钮组中的按钮1获得焦点thisform.command2.enabled=.t.﹠﹠按钮组中的按钮2获得焦点thisform.command3.enabled=.f.﹠﹠按钮组中的按钮3不能获得焦点thisform.command5.enabled=.t.﹠﹠按钮组中的按钮5获得焦点thisform.refresh﹠﹠刷新表单elsethis.enabled=.t.﹠﹠该记录获得焦点thisform.command1.enabled=.t.﹠﹠按钮组中的按钮1获得焦点thisform.command2.enabled=.t.﹠﹠按钮组中的按钮2获得焦点thisform.command3.enabled=.t.﹠﹠按钮组中的按钮3获得焦点thisform.command5.enabled=.t.﹠﹠按钮组中的按钮5获得焦点endifthisform.refresh﹠﹠刷新表单⑸“最后一个”按钮的click事件代码如下所示:gobottom﹠﹠指针指向第一条记录this.enabled=.t.﹠﹠该记录获得焦点thisform.command1.enabled=.t.﹠﹠按钮组中的按钮1获得焦点2
thisform.command2.enabled=.t.﹠﹠按钮组中的按钮2获得焦点thisform.command3.enabled=.f.﹠﹠按钮组中的按钮3不能获得焦点thisform.command5.enabled=.t.﹠﹠按钮组中的按钮5获得焦点thisform.refresh﹠﹠刷新表单⑹“退出”按钮的click事件代码如下所示:thisform.refresh﹠﹠刷新表单thisform.release﹠﹠释放表单资源运行后的表单如图4.3所示。图4.3客户信息查询结果表单4.1.4联系人查询结果表单设计联系人查询结果表单显示按一定条件查询出的联系人的信息。在该界面中可以查看第一条记录、前一条记录、后一条记录、最后一条记录以及退出该界面。该表单的数据环境是:联系人表和客户表。该表单的主要控件为:8个标签:联系人信息查询结果、联系人编号、姓名、性别、单位名称、电话、生日以及爱好等。后六个的name属性依次为:txt联系人编号、txt姓名、txt性别、txt单位名称、txt电话、txt生日、txt爱好。另外标签“联系人信息查询结果”的caption属性为“联系人信息查询结果”,fontsize属性值为:18。7个文本框:txt联系人编号、txt姓名、txt性别、txt单位名称、txt电话、txt生日、txt爱好。1个表格控件:name属性为dform,caption属性为:查询结果,表格的childorder属性为:联系人编号。Cloumncount属性为:9。Linkmaster属性为:联系人表。Recordsource:客户表。Recordsouretype属性为:“0-表”。该表的列的数据源分别为:客户表.客户编号、客户表.电话、客户表.单位名称、客户表.传真、客户表.邮政编码、客户表.email、客户表.单位地址、客户表.区号以及客户表.联系人编号。列标题分别为:客户编号、电话、单位名称、传真、邮下编码、E-mail、单位地址、区号以及联系人编号。5个按钮控件:name属性分别为command1、command2、command3、command4以及command5。⑴该查询表单的lint事件程序代码如下所示:Thisform.refresh ﹠﹠刷新表单 Locateforbh=alltrim(联系人.联系人编号) ﹠﹠光标转到与联系人编号匹配的记录 Thisform.txt联系人编号.enabled=.f. ﹠﹠联系人编号文本框不可修改Thisform.txt姓名.enabled=.f. ﹠﹠姓名文本框不可修改Thisform.txt性别.enabled=.f. ﹠﹠性别文本框不可修改Thisform.txt单位名称.enabled=.f. ﹠﹠单位名称文本框不可修改Thisform.txt电话.enabled=.f. ﹠﹠电话文本框不可修改Thisform.txt生日.enabled=.f. ﹠﹠生日类型文本框不可修改2
Thisform.txt爱好.enabled=.f. ﹠﹠爱好文本框不可修改⑵“退出”按钮的click事件代码如下所示:Thisform.refresh﹠﹠刷新表单Thisform.release ﹠﹠释放表单资源“第一个”、“上一个”、“下一个”以及“最后一个”按钮的click事件代码参照上面的例子。运行后的表单如图4.4所示。图4.4联系人查询结果信息表单4.1.5客户查询表单设计客户查询表单是根据一定的条件查询出客户的信息。单击“查询”按钮,退出“客户查询结果”表单。可分为按客户编号查询、按电话查询和按联系人编号查询。该表单的包含的主要控件为:2个标签:“按客户编号查询”和“请选择客户的编号”。其中标签“按客户编号查询”的fontsize属性值设为:18;标签“请选择客户的编号”的fontsize属性值设为:12。1个组合框:controlsource属性为:客户表.客户编号。Rowsource属性为:客户表.客户编号。2个按钮:“查询”按钮和“退出”按钮。表单的caption属性为:编号查询,name属性为:form1。controlsource属性为:客户表.客户编号。Rowsource属性为:客户表.客户编号。Rowsourcetyp为:6-字段。Columncount为1。⑴该表单的lint事件的代码程序如下所示:Publickh ﹠﹠定义公共变量khUseF:杜安静客户管理系统客户表 ﹠﹠打开客户表Thisform.refresh ﹠﹠刷新表单Gotop ﹠﹠光标转到表头Thisform.combol.value=客户表.客户编号 ﹠﹠组合框的值来自客户表中的客户编号字段⑵查询”按钮的click事件代码如下所示:Kh=alltrim(thisform.combol.value)﹠﹠把选择的客户编号赋值给khThisform.release﹠﹠释放表单资源DoformF:杜安静客户管理系统客户查询结果 ﹠﹠调用客户查询结果表单⑶“退出”按钮的click事件代码为:Thisform.release﹠﹠释放表单资源运行后的客户编号查询表单如图4.5所示:图4.5按客户编号查询表单2
4.1.6联系人查询表单设计联系人查询表单的功能是根据一定的条件查询出联系人的基本信息。单击“查询”按钮可以调出“联系人查询结果”表单。共分为联系人编号查询、联系人姓名查询和联系人生日查询。该表单的数据环境是:联系人表。联系人查询表单含有以下控件:两个标签:“按联系人编号查询”和“请选择联系人的编号”。其中标签“按联系人编号查询”的fontsize属性值设为:18;标签“请选择联系人的编号”的fontsize属性值设为:12。1个组合框:controlsoure属性为:联系人.联系人编号。Rowsource属性为:联系人.联系人编号。两个按钮:“查询”按钮和“退出”按钮。该表单的caption属性为:查询联系人,name属性为:form1。设置该表单的controlsource属性为:联系人.联系人编号。设置rowsource属性为:联系人.联系人编号。Rowsourcetype属性为:6-字段。Columncount为1。⑴该表单的lint事件的代码和上面的“按客户编号查询”表单大致相同,它们之间的差别主要是:定义的公共变量不同,该表单定义的公共变量是lx,打开的表不同,该表单打开的表是“联系人”表,再就是该表单的组合框的值是来自于联系人表单中的编号字段。“退出”按钮的代码和上面的表单的退出按钮的代码相同。⑵“查询”按钮的click事件代码如下所示:Bh=altrim(thisform.combol.value)﹠﹠把选择的联系人编号赋值给bhThisform.release﹠﹠释放表单资源DoformF:杜安静客户管理系统联系人查询结果 ﹠﹠调用联系人查询结果表单4.1.7部门电话查询结果表单设计查询部门电话表单主要的作用是根据部门的代码查询出该部门的所有电话信息。可分为部门电话查询结果表单和部门电话查询表单。部门电话查询结果表单是根据部门代码查询出的部门电话信息表单。在该界面中可以查看第一条记录、前一条记录、后一条记录、最后一条记录以及退出该界面。该表单主要包括如下控件:6个标签:部门电话信息查询结果、部门代码、处室名称、房间号、分机号以及直拨电话。后五个的name属性依次为txt部门代码、txt处室名称、txt房间号、txt分机号以及txt直拨电话。5个文本框:name属性为:txt部门代码、txt处室名称、txt房间号、txt分机号以及txt直拨电话。5个按钮控件:name属性分别为command1、command2、command3、command4、command5。该表单的caption属性为:部门电话,name属性为:form1。⑴该查询表单的lint事件程序代码如下所示:Thisform.refresh ﹠﹠刷新表单Locatefordm=alltrim(部门电话.部门代码) ﹠﹠光标转到与部门代码匹配的记录2
Thisform.txt部门代码.enabled=.f. ﹠﹠部门代码文本框不可修改Thisform.txt处室名称.enabled=.f. ﹠﹠处室名称文本框不可修改Thisform.txt房间号.enabled=.f. ﹠﹠房间号文本框不可修改Thisform.txt分机号.enabled=.f. ﹠﹠分机文本框不可修改Thisform.txt直拨电话.enabled=.f. ﹠﹠直播电话文本框不可修改⑵“退出”按钮的click事件代码如下所示:Thisform.refresh﹠﹠刷新表单Thisform.release ﹠﹠释放表单资源⑶“第一个”、“上一个”、“下一个”以及“最后一个”的click事件代码参照上面的例子。运行后的表单如图4.6所示:图4.6部门电话信息查询结果表单4.1.8查询部门电话表单设计查询部门电话表单是根据选择的部门代码查询出的部门电话信息。单击“查询”按钮,调用“部门电话查询结果”表单。该有单的数据环境是:部门电话表。该表单主要包含的控件为:2个标签:“按部门代码查询”和“请选择查询的部门代码”。其中标签“按部门代码查询”的fontsize属性值为:18;标签“请选择查询的部门代码”的fontsize属性值设为12。1个组合框:controlsource属性为:部门电话.部门代码。Rowsource属性为:部门电话.部门代码。2个按钮:“查询”按钮和“退出”按钮。表单的caption属性为:查询部门电话,name属性:form1。表单的controlsource属性为:部门电话.部门代码。Rowsource:部门电话.部门代码。Rowsourcetype:6-字段。Columncount为1。⑴该表单主要包括lint事件、“查询”按钮的click事件以及“退出”按钮的click事件,它们的代码和按客户编号查询的代码原理上是大致相同的,其代码可参照“按客户编号查询表单”的代码。运行后的查询部门电话表单如图4.7所示:图4.7按部门代码查询表单4.1.9录入客户信息表单设计录入客户信息表单的作用是完成客户信息的录入。可以添加或者删除一条客户记录。该表单的数据环境是:客户表。该表单所包含的主要控件为:2
10个标签:录入客户信息、客户编号、电话、单位名称、传真、邮政编码、E-mail、单位地址、区号以及联系人编号。“录入客户信息”标签的caption属性为“录入客户信息”,fontsize属性值为18。后几个标签的name属性分别为:txt客户编号、txt电话、txt单位名称、txt传真、txt邮政编码、txtE-mail、txt单位地址、txt区号以及txt联系人编号。9个文本框:txt客户编号、txt电话、txt单位名称、txt传真、txt邮政编码、txtE-mail、txt单位地址、txt区号以及txt联系人编号。7个按钮控件:name属性分别为command1--command7。表单的caption属性为:录入客户信息。⑴该表单的lint事件程序代码如下所示:Select客户表﹠﹠选择客户表Usef:杜安静客户管理系统客户表.dbfexclusive﹠﹠以独占的方式打开客户表⑵“添加”按钮的click事件代码如下所示:Appendblank﹠﹠添加一条空记录Thisform.refresh﹠﹠刷新表单⑶“删除”按钮的click事件代码如下所示:Ifmessagebox(‘你的确删除该记录吗?’,4+64+266,‘提示’)=6﹠﹠是否要删除Delete﹠﹠删除记录Pack﹠﹠紧接下条记录Releasethisform﹠﹠释放表单资源Endif⑷“退出”按钮的click事件代码如下所示:Thisform.refresh﹠﹠刷新表单UseF:杜安静客户管理系统客户表.dbfshar﹠﹠恢复共享方式Thisform.release﹠﹠释放表单资源“第一个”、“上一个”、“下一个”以及“最后一个”的click事件代码参照上面的例子。运行后的表单如图4.8所示:图4.8录入客户信息表单2
4.1.10录入联系人信息表单设计录入联系人信息表单的作有是完成联系人信息的录入。可以添加或者删除一要联系人记录。该表单的数据环境是:联系人。该表单的主要控件为:8个标签:录入联系人信息、联系人编号、姓名、性别、单位名称、电话、生日以及爱好等。7个文本框:txt联系人编号、txt姓名、txt性别、txt单位名称、txt电话、txt生日以及txt爱好等。7个按钮控件:name属性分别为command1、command2、command3、command4、command5、command6、command7。该表单的caption属性为:录入联系人信息,name属性为:form1。⑴该表单的lint事件程序代码如下所示:Select联系人﹠﹠选择联系人表Usef:杜安静客户管理系统联系人.dbfexclusive﹠﹠以独占的方式打开联系人表⑵“退出”按钮的click事件代码如下所示:Thisform.refresh﹠﹠刷新表单UseF:杜安静客户管理系统联系人.dbfshar﹠﹠恢复共享方式Thisform.release﹠﹠释放表单资源⑶该表单的“删除”、“添加”代码同上面的“录入客户信息表单”。“第一个”、“上一个”、“下一个”以及“最后一个”按钮的click事件代码同上一个的,运行后的界面如图4.9所示:图4.10录入联系人信息表单4.1.11录入服务信息表单设计录入服务信息表单的作用是完成服务信息的录入。可以添加或者删除一条服务记录。它的数据环境是:服务表。录入服务信息表单主要包括如下控件:6个标签:录入服务信息、部门代码、客户代码、服务项目号、服务评价以及金额。5个文本框:txt部门代码、txt客户代码、txt服务项目号、txt服务评价以及txt金额。7个按钮控件:name属性分别为command1、command2、command3、command4、command5、command6、command7。该表单的caption属性为:录入服务信息、name属性为:form1。⑴该表单的lint事件程序代码如下所示:Select服务表﹠﹠选择服务表UseF:杜安静客户管理系统服务表.dbfexclusive﹠﹠以独占的方式打开服务表⑵“退出”按钮的click事件代码如下所示:2
Thisform.refresh﹠﹠刷新表单UseF:杜安静客户管理系统服务表.dbfshar﹠﹠恢复共享方式Thisform.release﹠﹠释放表单资源该表单的“添加”、“删除”、“第一个”、“上一个”、“下一个”以及“最后一个”按钮的click事件代码参照上面的例子,运行后的效果如图4.10所示:图4.11录入服务信息表单4.1.12查询区号邮编表单设计查询区号邮编表单是根据选择的区号查询出的地区的邮政编码信息。单击“查询”按钮,调用“区号邮编查询结果”表单。该表单的数据环境是:区号邮编表。该表单所包含的主要控件为:2个标签:“按地区编号查询”和“请选择查询的区号”。其中标签“按地区编号查询”的fontsize属性值为18;标签“请选择查询的区号”的fontsize属性值为12。1个组合框:controlsource属性为:区号邮编.区号。Rowsource属性为:区号邮编.区号。2个按钮:“查询”按钮和“退出”按钮。该表单的caption属性为:查询区号邮编,name属性为:form1。⑴表单的lint事件的代码如下:Publicqh﹠﹠定义公共变量qhUseF:杜安静客户管理系统区号邮编﹠﹠打开区号邮编Thisform.refresh﹠﹠刷新表单Gotop﹠﹠光标转到表头Thisform.combol.value=区号邮编.区号﹠﹠组合框的值来自区号邮编表中的区号字段⑵“查询”按钮的click事件代码如下所示:QH=alltrim(thisform.combol.value)﹠﹠把选择的区号赋值给QHThisform.release﹠﹠释放表单资源DoformF:杜安静客户管理系统区号邮编查询结果﹠﹠调用区号邮编查询结果表单⑶“退出”按钮的click事件代码如下所示:Thisform.release﹠﹠释放表单资源运行后的查询区号邮编表单如图4.12所示:图4.12查询区号邮编表单设计2
4.1.13区号邮编查询结果表单设计区号邮编查询结果表单是根据地区区号查询出的地区邮编信息的表单。在该界面中可以查看第一条记录、前一条记录、后一条记录、最后一条记录以及退出该界面。该表单的数据环境是:区号邮编表。该表单包含如下主要控件:4个标签:区号邮编信息查询结果、区号、地区名称以及邮政编码。3个文本框:name属性为:txt区号、txt地区名称以及txt邮政编码。5个按钮控件:name属性分别为:command1、command2、command3、command4、command5。该表单的caption属性为:区号邮编,name属性为:form1。⑴该查询表单的lint事件程序代码如下所示:Thisform.refresh﹠﹠刷新表单Locateforqh=alltrim(区号邮编.区号)﹠﹠光标转到与区号匹配的记录Thisform.txt区号.enabled=.f.﹠﹠区号文本框不可修改Thisform.txt地区名称.enabled=.f.﹠﹠地区名称文本框不可修改Thisform.txt邮政编码.enabled=.f.﹠﹠邮政编码文本框不可修改⑵“退出”按钮的click事件代码如下所示:Thisform.refresh﹠﹠刷新表单Thisform.release﹠﹠释放表单资源“第一个”、“上一个”、“下一个”以及“最后一个”按钮的click事件代码和一面的例子一样。运行完后的表单如图4.13所示:图4.13区号邮编查询结果表单设计4.2菜单设计在应用程序中,用户登录系统后道德看到的是菜单系统。在vfp6.0中,通过“菜单设计器”可以方便、快捷地设计菜单。另外菜单也起到组织应用系统中各模块的作用,如果菜单设计得好,用户使用起来就比较方便。下面总结一下菜单设计的步骤。4.2.1布局菜单创建菜单之前首先进行菜单的布局,在该系统中,主要包含以下菜单:⑴文件:新建、打开、保存、另存为、关闭、页面设置以及退出。⑵编辑:撤消、重做、剪切、复制以及粘贴。⑶数据录入:录入客户信息、录入联系人信息以及录入服务信息。⑷信息查询:查询部门电话、查询客户、查询区号邮编以及查询联系人。2
⑸报表输出:客户信息、联系人信息、服务信息以及区号邮编。⑹系统维护:修改密码和添加人员。⑺退出系统。⑻帮助:帮助主题和关于。4.2.2创建自定义菜单布局好菜单后,就开始使用“菜单设计器”把布局好的菜单设计出来。该设计过程为:4.2.2.1创建菜单⑴在“项目管理器”对庆框的“其他”页面中,选中“菜单”选项。单击“新建”按钮,弹出“新建菜单”对话框。⑵在“新建菜单”对话框中,单击“菜单”按钮,弹药出“菜单设计器”对话框,在“菜单名称”文本框中输入菜单项。单击“选项”下的灰色按钮,会弹出“提示选项”对话框。在该对话框中可以设置菜单项的快捷键信息。添加了快捷键信息后,“选项”列中出现一个对号。⑶选中“菜单名称”列的菜单名,在“结果”列右边出现“创建”按钮。单击“创建”按钮,弹出一个空的“菜单设计器”对话框。在该对话框中输入想建立的子菜单的名称。⑷单击“插入栏”按钮,弹出“插入系统菜单栏”对话框。⑸在“插入系统菜单栏”对话框中选择需要插入的菜单,单击“插入”按钮,即可插入到子菜单中。单击“关闭”按钮,退出“插入系统菜单栏”对话框,返回菜单设计器。重复上述步骤4-9设计“编辑”和“帮助”菜单项的子菜单。完成之后的主菜单如图4.14所示:图4.14主菜单4.2.2.2在子菜单中调用菜单下面介绍的是菜单项中包含子菜单,在子菜单中调用表单的步骤.首先设计“数据录入”菜单:⑴选中“菜单名称”列的菜单名,在“结果”列右边出现“创建”按钮。单击“创建”按钮,弹出一个空的“菜单设计器”对话框。在该对话框中输入子菜单的名称。⑵在“录入客户信息”、“录入联系人信息”和“录入服务信息”行的“结果”列中都选择“命令”选项,默认的为“子菜单”。⑶在它们的“选项”文本框中分别输入路径为F盘的,“杜安静”文件夹下的“客户管理系统”文件夹中的“录入客户信息”、“录入联系人信息”、“录入服务信息”。接着设计信息查询菜单的子菜单及其调用的表单:⑴选中“菜单名称”列的菜单名,在“结果”列右边会出现“创建”按钮。单击“创建”按钮,弹出一个空的“菜单设计器”对话框。在该对话框中输入子菜单的名称。2
⑵在“查询部门电话”、“查询区号邮编”行的“结果”列中选择“命令”选项,默认的是“子菜单”。⑶将它们的“选项”文本框中分别输入路径为F盘,“杜安静”文件夹下的“客户管理系统”文件夹中的“查询部门电话”、“查询区号邮编”。⑷在“客户编号查询”、“联系人查询”行的“结果”列中选择“命令”选项,默认的是“子菜单”。将它们的“选项”文本框中分别输入路径为F盘,“杜安静”文件夹下的“客户管理系统”文件夹中的“客户编号查询”、“联系人查询”。下面设计系统维护菜单的子菜单及其调用的菜单:⑴选中“菜单名称”列的菜单名,在“结果”列右边出现“创建”按钮。单击“创建”按钮,弹出一个空的“菜单设计器”对话框。在该对话框中输入子菜单的名称。⑵在“修改密码”行的“结果”列中选择“命令”选项,默认的是“子菜单”。⑶在“选项”文本框中输入“DOFORMF:杜安静客户管理系统“密码修改”。⑷在“添加人员”行的“结果”列中选择“命令”选项,默认的是“子菜单”。⑸在“选项”文本框中输入“DOFORMF:杜安静客户管理系统添加人员”。4.2.2.3在菜单中使用过程在菜单中使用过程,即在“结果”列中选择“过程”选项,然后编辑过程代码。首先设计“退出系统”菜单,设计的步骤如下:⑴选中“菜单名称”列的菜单名“退出系统”,在“结果”列中选择“过程”选项。⑵单击“结果”列右边的“新建”按钮,弹出一个空的“菜单设计器”过程编辑界面。在这个界面中输入过程代码。编辑过程时首先要使用过程打开语句,来指明该过A程的位置。语句的格式:SETPROCEDURETO《menuname.mpr》,“退出系统”菜单的过程代码如下所示:Setrproceduretof:杜安静客户管理系统zhumenu.mprClosedatabasesCloseallCleareventsQuit接着设计报表输出菜单的子菜单及其过程代码:⑴选中“菜单名称”列的菜单名,在“结果”列右边出现“创建”按钮。单击“创建”按钮,弹出一个空的“菜单设计器”对话框。在该对话框中输入子菜单的名称。⑵在“客户信息”行的“结果”列中选择“过程”选项,默认的是“子菜单”。⑶单击“结果”列右边的“创建”按钮,在弹出的“过程”窗口中,输入过程代码。⑷在“服务信息”行的“结果”列中选择“过程选项”,默认的是“子菜单”。⑸单击“结果”列右边的“创建”按钮,在弹出的“过程”窗口中,输入过程代码。⑹在“联系人信息”行的“结果”列中选择“过程”选项,默认的是“子菜单”。⑺单击“结果”列右边的“创建”按钮,在弹出的“过程”窗口中,输入过程代码。⑻在“区号邮编”行的“结果”列中选择“过程”选项,默认的是“子菜单”。2
⑼单击“结果”列右边的“创建”按钮,在弹出的“过程”窗口中,输入过程代码。客户信息菜单的过程代码如下所示:SetfiltertoReportformF:杜安静客户管理系统客户信息服务信息菜单、联系人信息菜单、区号邮编菜单的过程代码大致同上面的客户信息菜单,不同之处就是它们的代码的路径分别为:F:杜安静客户管理系统中的“服务信息”、“联系人信息”以及“区号邮编”。4.2.2.4预览菜单单击“预览”按钮,弹出“预览”对话框,此时屏幕的最上面出现菜单名。完成后的菜单预览效果如图4.15所示:图4.15主菜单的预览效果4.2.3创建快捷式菜单右击控件或者对象时,会弹出快捷方式菜单,可以列出当前对象可用的快捷功能。例如右击可以输入数据的文本框,弹出包含“复制、粘贴”等功能的快捷菜单。用户使用起来非常方便。下面介绍的是快捷菜单的设计步骤:⑴在“项目管理器”对话框的“其他”页面中,选中“菜单”选项。单击“新建”按钮,弹出“新建菜单”对话框。⑵在“新建菜单”对话框中,单击“快捷菜单”按钮,弹出“快捷菜单设计器”对话框。⑶在“快捷菜单设计器”对话框中,单击“插入栏”按钮,弹出“插入系统菜单栏”对话框。⑷在“插入系统菜单栏”对话框中选择需要插入的菜单,单击“插入”按钮,即可插入到菜单中。单击“关闭”按钮,退出“插入系统菜单栏”对话框,返回快捷菜单设计器。⑸单击“菜单名称”列左边的方块,出现双箭头,通过上下拖动来调整菜单的顺序⑹在菜单之间的合适位置插入分隔线。将光标放在需要添加分隔线的位置,单击“插入”按钮,出现一个新菜单项。将菜单名称改为“—”。⑺保存快捷菜单为tanmenu。在“项目管理器”中,选择“tanmenu”,单击“运行”按钮,运行后的效果如图4.16所示。图4.16“新建菜单”对话框4.2.4菜单的使用自定义的菜单的使用方式为:Do[PATH]FILENAME.MPR。可以随时执行菜单,用来替换系统菜单。可以使用SETSYMENUTODEFAULT命令来恢复系统菜单。快捷菜单的使用也很方便,使用命令DO[PATH]FILENAME.MPR即可运行。并且可随鼠标的位置而自动调整位置。无需对快捷菜单进行任何设置就可以将其显示在顶层表单或窗口中。如果在表单的RIGHTCHICK事件中使用DO[PATH]FILENAME.MPR命令,就可以在右击表单时弹出快捷菜单。2
4.3报表设计在系统中需要打印出客户信息、服务信息、联系人信息和区号邮编信息,所以首先要设计出客户信息报表、服务信息报表、联系人信息报表和区号邮编信息报表。下面详细介绍报表的使用方法以及具体报表的设计过程。4.3.1启动报表设计器使用“报表设计器”之前,先要进行启动,启动“报表设计器”的步骤如下所示:⑴在“项目管理器”对话框的“文档”页面中,选中“报表”选项。单击“新建”按钮,弹出“新建报表”对话框。⑵在“新建报表”对话框中,单击“新建报表”按钮,弹出一个空的“报表设计器”窗口。4.3.2报表设计器窗口使用“报表设计器”之前,先了解一下其组成部分。在“报表设计器”窗口中,主要有报表区和报表控件工具栏。还要以通过“显示”菜单,显示出布局工具栏、调色板工具栏。“报表设计器”一目了然,在这里对其工具栏不再做详细的介绍了。下面介绍客户信息报表的设计过程:⑴右击“报表设计器”窗口,在弹出的快捷菜单中,选择“数据环境”命令。⑵右击“数据环境设计器”窗口,在弹出的快捷菜单中,选择“添加”命令。⑶在弹出的“添加表或视图”对话框中,选择客户表,单击“添加”按钮。把客户表添加到数据环境中,单击“关闭”按钮,关闭“添加表或视图”对话框。添加了表的数据环境设计器窗口如图所示。⑷选择数据环境设计器中的字段,依次将其拖动到“报表设计器”的细节区中。⑸单击报表控件工具栏中的“选定对象”按钮,选中细节区中的对象。调整字段名的位置。⑹单击布局工具栏的“顶边对齐”按钮,对齐细节区的字段名。⑺单击报表控件工具栏中的“标签”按钮,在页标头区设置与细节区字段名相应的页标头。⑻默认的报表区不包含标题区。可以通过单击菜单栏的“报表”→“标题/总结”命令,弹出“标题/总结”对话框。在该对话框中选择“标题带区”。⑼在标题区输入标题。可以通过单击菜单栏的“格式”→“字体”命令,设置标题的字体。⑽单击菜单栏的“显示”→“预览”命令,如果对设计出的报表不满意,可返回报表设计器进行修改。⑾关闭报表设计器,在弹出的保存对话框中,命名报表为“客户信息”。用类似的方法可以设计出服务信息报表,客户信息报表,联系人信息报表。设置后的报表分别如图4.16、4.17、4.18所示。2
第5章主程序设计在vfp6.0中,主程序不是必须有的。应用程序的入口也可以是表单或者菜单。在vfp6.0中应用程序的入口称作主文件,是数据库管理系统最先执行的程序。使用主程序作为主文件比较规范,尽量使用主程序作为应用程序的入口。主程序一般具有如下功能:⑴对系统进行初始化,设置系统的运行状态参数。⑵定义全局变量。⑶设置系统工具栏。⑷调用系统登录界面。⑸结束时清理环境。5.1建立主程序首先建立主程序,建立的步骤如下所示:⑴在“项目管理器”对话框的“代码”页面中,选中“程序”选项,单击“新建”按钮。⑵在弹出的“程序”窗口中编写程序代码。在主程序中首先要初始化环境。主要使用SET命令来初始化环境,设置环境变量的初值或者状态。比较简单的方法是从当前运行的程序中截取命令,粘贴到应用程序中,根据需要做些修改。具体的操作方法如下所示:⑴单击菜单栏的“工具”→“选项”命令,弹出如图5.1所示⑵按住shift键,单击“确定”按钮,在“命令”窗口中显示出当前环境的SET命令。把“命令”窗口中显示出的当前环境的SET命令复制到应用程序中,然后进行适当的修改。设置完初始环境,再调用登录表单,最后恢复主要的环境参数,主程序的代码为:Setsysmenuoff﹠﹠关闭系统菜单Setsysmenuto﹠﹠将系统菜单重新设置Settalkoff﹠﹠不显示命令结果Senotifyoff﹠﹠不显示系统信息Setclockstatus﹠﹠显示系统时钟Setpaletteoff﹠﹠指定使用默认的调色板Setbellon﹠﹠打开计算机的铃声,并设置铃声的属性Setsaeetyoff﹠﹠改写文件时,不显示提示对话框Setescapeon﹠﹠按下ESC键时,终止所执行的程序或命令Setkeycomptowindows﹠﹠指定控制VFP的击键位置Setcarryon﹠﹠将当前记录的数据送到新记录中Setconfirmon﹠﹠指定可以通过在文本框中键入最后一个字符来退出文本框Setexacton﹠﹠指定用精确规则来比较两个不同长度的字符串Setnearon﹠﹠指定EIND或者SEEK查找命令查不到时,记录指针的停留位置2
Setansioff﹠﹠指定VFPSQL中,如何用操作符“=”比较不同长度的字符串Setlockon﹠﹠使用互斥锁Setexclusiveon﹠﹠系统独占方式Setmultilockson﹠﹠设置多个互斥锁Setdeletedon﹠﹠删除文件时,进行提示Setoptimizeon﹠﹠使用Rushmore优化Setrefreshto0,6﹠﹠指定刷新时间Setodometerto100﹠﹠指定处理记录设置的计数器的时间间隔Setcurrencyleft﹠﹠指定货币符号在数值型表达式的显示位置的左边Setcurrencyto“¥”﹠﹠定义货币符号为人民币符号Sethoursto12﹠﹠指定时间性为12小时制Setdatetoymd﹠﹠指定日期为年月日形式Setdecimalsto2﹠﹠指定显示数值表达式时,保留两位小数Setresourceon﹠﹠更新资源文件Setfdowto1﹠﹠Setfweekto1﹠﹠Setmarkto“.”﹠﹠设置“.”做掩码Setseparatorto“.”﹠﹠在小数点左边,每三位数一组的分隔符为“.”Doformf:杜安静客户管理系统登录表单﹠﹠调用登录表单Readevents﹠﹠启动事件循环Setsysmenutodefault﹠﹠设置系统菜单为默认的形式Setsysmenuon﹠﹠打开系统菜单Setnotifyon﹠﹠显示系统信息Setexclusiveoff﹠﹠关闭系统独占方式Setsafetyon﹠﹠改写文件时,显示提示对话框Modifywindowsscreen﹠﹠恢复windows窗口2
关闭窗口,在弹出的保存对话框中,命名程序为:MAINPRO。在主程序中指定了许多环境参数,如时间、小数点的位数、日期、货币符号等的显示形式。主要目的是减少系统对程序的影响。在主程序中,READEVENTS语句不可缺少,它用于启动事件循环。如果没有该语句,运行程序时,程序只是一闪而过,马上就停止了。在退出时,要有相应的清除循环的程序,系统才能正常退出。否则只能通过ctrl+alt+del组合键来强制结束。在实际应用中主程序还应有公共变量的声明和初始化信息;捕获错误信息并进行处理的程序等。5.2设置主文件主程序建立好后,就可以把主程序设置为主文件,作为应用程序的入口。设置主文件的步骤如下所示:⑴在项目管理器中选择要设置为主文件的文件。在“项目管理器”中,选择“代码”页面中“程序”下的程序文件MAINPRO。⑵单击菜单栏的“项目”→“设置主文件”命令。被设置的文件以粗体形式显示。如5.2所示:图5.2设计主文件至此,客户管理系统的数据库、数据库表、表单、菜单、报表以及主文件都已经设计完全。现在就可以把各个分散的功能连编成应用程序或者可执行文件了。在连编过程中进行故障分析和解除后,该客户管理系统算完成了。最后将该客户管理系统制成安装盘就可供需要该系统的公司使用了。第6章结论本章介绍了客户管理系统实例的开发过程。该系统实现了数据录入管理、信息查询管理以及报表输出管理。其中信息查询又分为客户查询、联系人查询、部门电话查询以及区号邮编查询。每个查询下又有分类查询,如客户查询分为按客户编号、按姓名查询以及按电话查询。读者在学习的过程中要注意掌握表单分类的方法以及查询表单的设计方法。读者在学习了该实例的开发过程后,可以尝试着设计该系统的新功能。比如部门电话查询只实现了按部门代码查询,还可以设计按房间号查询等。还可以开发出公司大事提示功能,比如某个客户的生日到了,要发出提示信息。参考文献⑴合力工作室编著《中文visualfoxpro6.0编程基础》清华大学出版社⑵史济民汤观全编著《visualfoxpro及其应用系统开发》清华大学出版社2
⑶求是科技编著《visualfoxpro信息管理系统开发实例导航》人民邮电出版社⑷傅翠娇编著《典型系统实战》电子工业出版社⑸王浩等visualfoxpro6.0命令参考手册上海科学技术出版社⑹王浩等visualfoxpro6.0开发指南上海科学技术出版社⑺七七论文网http://computerlw.zj.com/⑻大学论文网 http://www.dxlw.net/list.aspx?cid=192