首页   博学堂内部资料馆   心灵成长家园   博学堂电子邮局   投稿
首页 管理手册 企业管理 零售终端 案例解析 黑板报 博学堂 人力资源 品牌管理 市场营销 广告策划 创意设计
用户名: 密 码: 验证码: 注册新用户
 
首页-> 人力资源 -> 毕业论文
毕业论文
 【博学堂│中国策略网】  2007-2-5 14:16:00    bookwoo.com
 
第一章   引 言 1.1 本课题的研究意义在通信技术越来越发达的今天,固定电话早已经进入了千家万户,成为我们工作和生活中所必不可少的联络工具。但在通信设备更新很快的同时,一些内容丰富并且功能强大的配套软件也应该很快地被开发出来,因为只有这样才能给广大用户带来更多使用上的方便。在电信竞争日益激烈的今天,对于每个各电信运营商来说,不仅仅要关心通信设备的功能,还需要了解目前情况下电信运营商自身电话用户的一些基本情况,诸如:用户名称及地址、开通的时间、开通的权限、拥有的新功能等情况。只有清楚了这些基本的用户信息,才能够及时地对现有的经营状况有一个比较全面的了解;才能够在经营决策上迅速地对市场的情况做出比较准确的判断,有利于分公司及时调整营销策略,不断地扩大市场份额。对于新兴的电信运营商—--中国铁道通信信息有限公司来说,由于自身的特殊性和以往长期作为铁路运输的后勤保障部门的原因,在电话业务的类别上就与中国电信等电信运营商有所不同。目前除了面向所有普通用户的公网电话以外,还有着一大批原来就存在着的铁路运输生产单位部门的电话,如何将上述用户进行分类,并且最大限度地挖掘出其市场潜力是很有必要的。因而对现有的用户进行分类管理就显得十分的重要。在此基础上就需要有一个基于管理的查询系统来为这些分类用户的基本信息进行分门别类的管理,通过这样一个系统,使得分类用户的各项信息都能够准确的表现出来,并且可以按一定的类别体现出它的共性和特性,提供给决策管理者用做经营决策的根本依据。 1.2 本论文的目的、意义本系统正是基于上述考虑,在征求了部分使用者意见的情况下开发出来的。它主要提供了一个各类用户基本情况录入和多条件查询的功能,能够从八个不同的查询条件中对用户的情况进行查询统计。在录入中为了方便使用者,还提供了选择方式的输入,对一些重要的数据还有校验的功能,以防止录入时可能产生的错误。为了使用的方便,本系统还对使用者提供了联机的帮助功能,在使用说明中告诉了用户使用时应注意的一些问题。另外本系统还提供了报表的打印功能,用以方便使用者打印文档作为今后存档的依据。 第二章  设计目标 2.1 编程语言考虑到程序的易用性和今后的扩展性,本系统采用的编程语言为C++ Builder 5.0。C++ Builder是面向对象的编程工具,用它作为开发工具是十分高效的。另外它有着很强大的数据处理功能,能够无缝的与多种类型的数据库进行连接。操作功能很强,编程界面友好,还具有很好的可扩充性和可移植性。故而本系统采用了C++ Builder 5.0做为编程的工具语言。 2.2 本课题要达到的设计目标    本系统要提供一个各类用户基本情况录入和多条件查询的功能,能够从八个不同的查询条件中对用户的情况进行查询统计。八种查询方式为:浏览用户的全部详细信息;按用户姓名查询用户信息;按电话号码查询用户信息;按用户单位查询;按用户的登记部门查询;查询公费用户信息;查询新功能信息;按单位查询公费用户信息等八种。并提供数据打印功能、用户帮助功能、版本信息等。 第三章 要解决的几个关键问题 3.1 研究设计中要解决的问题程序采用一个主操作界面和主菜单集中控制的方式,所有内部子模块的入口均在主菜单中,用户通过对主菜单的选择即可实现对所有功能模块的调用。从每一个子模块中返回后均回到系统主界面和主菜单上,并关闭该模块中使用的文件和系统变量,以防对下一个模块的使用造成不必要的影响。程序启动时就自动生成本系统的主窗体,在系统主窗体上包含一个系统菜单项,里面包含了系统所提供的功能入口,通过这个菜单项使用者可以进入到系统功能模块中,每一个具体的功能模块都以菜单或者单选按钮的形式提供下一功能模块的入口,用户只要按照他所要进行操作进行一步步的选择,就可以实现想要达到的功能。每个小的模块在进入时都保存了上一步操作的信息,用来完成操作后的返回功能,退出时系统自动将所用到的模块保留在内存之中并在屏幕上隐去,这样的话,下一次调用时就能很快的进入操作界面而不需要系统对窗体进行再次的生成。 3.2 具体实现中采用的关键技术在系统分析和设计阶段,我们经过反复的考虑得出结论,此系统只需要一个主数据库,另外在一些个别的地方,比方查询的中间结果显示时还适当的需要增加两个数据库,因而本系统所用到的数据库共有三个,详细信息见下:三个数据库是用户信息数据库(TOTAL.DBF)、新功能情况查询数据库(XGN.DBF)、公费电话查询数据库(GFDH.DBF);详见表3.1、表3.2以及表3.3。 3.3 数据库格式用户信息库(TOTAL.DBF)包含的字段见表3.1: USER_ID 电话号码 字符型 USER_NAME 用户姓名 字符型 USER_DEP 用户单位 字符型 USER_ADDR 用户地址 字符型 CALL_TYPE 电话类型 字符型 CALL 联系电话 字符型 DEPARTMENT 所属部门 字符型 XGN1 新功能1 字符型 XGN2 新功能2 字符型 XGN3 新功能3 字符型 XGN1_START 新功能1开通时间 日期型 XGN2_START 新功能2开通时间 日期型 XGN3_START 新功能3开通时间 日期型 CALL_START 电话启用时间 日期型 PAY_TYPE 付款方式 字符型 WANGLUO 网络使用情况 字符型 CHAIJI 拆机原因 字符型 C_TIME 拆机时间 字符型 TINGJI 停机原因 字符型 T_TIME 停机时间 日期型 LDJS 路电计时 字符型 LDBY 路电包月 数字型 SHJS 市话计时 字符型 SHXE 市话限额 数字型 CHANGTU 有否长权 字符型 ZFJE 自付话费金额 数字型 FCFK 财务分处付款 数字型 QITA 备注 字符型表3.1 用户数据库字段 以上各字段除一些表示时间的字段用日期型外,其余字段均使用字符类型或者数字类型,是因为程序中对这些字段的读写较多,用于显示也较多,若用其他类型则在转换中有可能会出现转换前后不一致的情况,而用字符型和数字型则不须转换,故而均采用了上述数据类型。             公费查询数据库(GFDH.DBF): USER_ID 电话号码 字符型 USER_DEP 用户单位 字符型 DEPARTMENT 所属部门 字符型 XGN1 新功能1 字符型 XGN2 新功能2 字符型 XGN1_START 新功能1开通时间 日期型 XGN2_START 新功能2开通时间 日期型 CALL_START 电话启用时间 日期型 AY_TYPE 付款方式 字符型 LDJS 路电计时 字符型 LDBY 路电包月 数字型 SHJS 市话计时 字符型 SHXE 市话限额 数字型 CHANGTU 有否长权 字符型 ZFJE 自付话费金额 数字型 FCFK 财务分处付款 数字型表3.2 公费查询数据库 新功能查询数据库(XGN.DBF): USER_ID 电话号码 字符型 USER_NAME 用户姓名 字符型 XGN 新功能 字符型 XGN1_START 新功能开通时间 日期型 表3.3新功能查询数据库 对于新功能查询结果来说,因为每次查询仅需要查询出一个具体的新功能项目,故而为了节省存储空间,在这个表格中就只有一个新功能的名称和开通日期字段。 第四章 系统结构 本系统由六个子模块组成,它们是用户信息查询模块、数据处理功能模块、数据打印功能模块、用户帮助模块、系统功能模块、版本信息模块。另外通过外挂三个数据库:用户信息数据库(TOTAL.DBF)、新功能情况查询数据库(XGN.DBF)、公费电话查询数据库(GFDH.DBF)来实现用户信息的查询。程序采用一个主操作界面和主菜单集中控制的方式,所有内部子模块的入口均在主菜单中,用户通过对主菜单的选择即可实现对所有功能模块的调用。其系统结构框图见图4-1: 图4-1 电话用户信息查询系统结构图 4.1 用户信息查询模块其中包含了多种查询方式,力求能够从各种不同的角度和方式提供多种多样的查询,以达到从各种不同方面来了解用户的各类信息。主要提供了八大类查询,它们是:浏览用户的全部详细信息;按用户姓名查询用户信息;按电话号码查询用户信息;按用户单位查询;按用户的登记部门查询;查询公费用户信息;查询新功能信息;按单位查询公费用户信息等八种。 4.1.1 浏览用户的全部详细信息查询系统内所有用户的基本信息,包括用户所使用的电话号码,用户的姓名,用户所登记的单位,电话开通使用的时间,电话所开通的新功能等用户详细信息。另外对于公费电话用户还提供了电话的类别,如是经营电话还是运营电话,是否为包月用户,开通市话的类别和付款金额以及付款方式等。此处因为是用于查看用户的所有信息,故而仅仅使用了一个浏览表格用来显示用户信息,其他的查询条件分布在另外一些模块之中。 4.1.2 按用户姓名查询用户信息本查询模块提供了按照用户的姓名对用户的简单情况进行检索的功能。在相应的对话框中输入欲查询的用户的姓名,即可对该用户的电话号码和所属单位进行检索,并在屏幕上相应的文本框中显示出来。此处提供的查询系单一条件的查询,主要是一个简单的检索过程,使用者可以仅仅通过用户的姓名来查询用户的电话号码和用户所属单位,然后利用查询结果进行更进一步的查询。这里显示的窗口是一个模态的窗口,另外为了防止因为使用者的疏忽而对用户资料的修改,此处除了用户姓名外,其他的用户信息均为不可修改。 4.1.3 按号码查询用户信息在使用的过程中,操作人员使用最频繁的查询方式就是根据用户的电话号码查询用户的详细信息了,因此此项功能所查询出来的信息也是所有模块中最多和最全的一个。被检索出来的信息在窗口中以分布式的文本框的形式显示出来,其中有用户姓名,住址,单位部门,电话类别,开通时间,程控新业务功能开通内容和时间等。另外为了便于我们掌握用户的情况,还增加了用户拆机和停机的时间和原因以及该用户使用铁通公司互联网情况的项目。此处用户只要输入用户的电话号码,按下查询按钮之后,相应的用户信息就会被查询出来,并显示于屏幕之上。 4.1.4 按单位和所属部门查询用户信息此项功能专门为运营商提供,通过它可以统计出到统计时为止系统所有的用户总数,以及各类用户的情况,另外还可以统计出各月的话费情况,在统计各月话费情况时还对话费进行了详细的分类,包括市电、长途、市郊和固定费等几项,一目了然。 4.1.5 按部门查询用户信息此项功能主要用于公费(专网)电话开通市话的用户按照其所属的部门进行分门别类的查询,它可以将所有的单位电话按照部门(比如值班室、调度电话)等进行查询,从而方便决策者进行判断,统计出哪些部门开通市话的需求比较大而进一步的发展这类用户,以达到拓展市场的最终目的。    在此选项中,操作人员只须选择部门名称即可,数据库中所使用到的用户单位名称是在用户数据录入时输入的,在提供的下拉选项中均已经自动加载,无须用户输入,大大的方便了用户的使用。 4.1.6 查询公费用户信息本模块用于对用户信息进行查询,操作人员提供希望查询的电话号码,在"开始"功能键按下以后,查询结果就将显示在屏幕上的表格之中。 4.1.7 查询新功能开通信息在通信厂商提供的一些专用统计和计费软件中,一般大都不能对程控电话用户开通的新业务功能进行查询和统计,然而这确实又是各个电信运营商很需要掌握的信息。本系统在这方面进行了充分的考虑,专门设计了这样一个模块,用于程控新功能业务的统计和模糊查询。    使用者可以在系统提供的下拉选择对话框中选择想要查询的新功能名称,然后启动查询方法,所要查询的信息就会以表格的形式显示出来,另外此处还提供了打印功能,方便使用者打印和存档之用。 4.1.8 按单位和电话类别查询用户信息此模块所提供的功能是用来进行用户分类信息统计时所使用的。它能够精确的按用户单位和分电话类别查询出用户的情况,为市场开发人员提供准确的用户分布和类型信息。为了实现此功能,模块中使用了多条件查询,使用者按需求选择好查询条件之后,查询结果即会显示于下面的表格内。另外为了方便使用,此处还提供了打印功能。 4.2 数据处理功能模块    数据处理模块功能主要是提供给直接的使用人员进行用户信息数据的录入和修改,用以给其他的查询模块提供原始的数据依据。    为了方便用户的使用,系统提供了一个数据导航条,用来在数据库中移动数据记录,此处提供了四个用于移动当前记录的按钮,它们是"移动到第一条"、"移动到最后一条"、"移到下一条"、"移到上一条"。对于已经存在数据库中的用户数据(我们在这里称为"老用户"),为了方便查询,此处还另外提供了一个查询对话框,在对话框中输入用户的电话号码就可以迅速的查出用户的信息,然后可以进行修改。对于需要新增的用户(我们称之为"新用户"),可以使用数据导航条上的记录新增按钮添加一个新的空白记录,然后在其上输入相应的信息。    为了充分考虑方便使用者的使用,也为了使数据更加规范和统一,我们在输入数据的表格中提供了快速的选择输入功能,在一些常用和内容相对固定的项目上(比如说用户单位、电话类型、所属部门、新功能名称等)提供了选择输入的功能,只要数据录入、修改人员在表格中相应的列上双击表单就会弹出一个下拉的菜单,里面有预先加载的内容供给选择,这样就大大的加快了数据录入和修改的时间。另外在这个模块中对于新老用户输入的切换时,为了让录入人员有一个对照,以防止输入的错误,我们还有一个浏览全库的按钮,使用它可以快速的调出全库的内容,让输入者进行数据比照,这样就能从一定程度上避免录入错误的发生。对于数据的删除,系统提供了一个确认过程,只有操作人员确认的删除的操作之后,此次删除操作才会发生作用,否则将进行数据回溯,恢复原来的数据。输入数据时也有一个更新的按钮,为了防止中途意外原因引起的已输入的数据未被写入数据库,使用者可以在写入一条记录后立即用更新按钮进行数据更新,这样新数据就被正确的写入了数据库。 4.3 数据打印功能模块在这套系统中有多处提供了数据的打印功能,分别在查询新功能数据、按单位查询详细信息和打印全库数据这几处。在用户所使用系统提供的打印功能时,还有提供一个打印预览和设置的功能,这项功能的提供极大的方便了用户的使用,用户可以先预览打印效果,并且同时可以对打印机和纸张进行预先的设置,以使打印效果更为完美。 4.4 用户帮助模块对于任何一个使用者来说,一个新软件的熟练使用总是需要一定的时间的,为了从这方面方便使用人员,本系统提供了一个简单明了的使用说明,里面主要是一些使用过程中需要注意到的问题。用户可以在系统的主菜单中调用并进行阅览,以了解该系统的使用方法。 4.5 系统功能模块此乃本系统的总出口,用户欲从系统中退出时可选此项,本项被选中后本系统将被关闭,同时在内存中释放系统在运行时所占有的资源。 4.6 版本信息模块这里显示的主要是系统作者和系统版本的信息,让用户可以从另一个侧面了解系统的一些情况。第五章 系统实现技术 5.1 主操作菜单和操作界面由于本系统采用一个主操作界面作为整个程序的使用功能入口,因而在程序启动时自动生成并装载该主窗体。    以下是主窗体的头文件说明:#ifndef mainH #define mainH     #include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ExtCtrls.hpp>#include <Menus.hpp> //在头文件中包含生成窗体和菜单所需的链接文件等; class TForm1 : public TForm { __published:       TMainMenu *MainMenu1;    //生成主菜单MainMenu1       TMenuItem *N1;           //依次生成菜单项      TMenuItem *N2;      TMenuItem *N3;      TMenuItem *N4;      TMenuItem *N5;      TMenuItem *N6;      TMenuItem *N7;      TMenuItem *N8; TImage *Image1;          //生成图片放置容器 //以下是定义各菜单按钮的操作响应事件;      void __fastcall N2Click(TObject *Sender);      void __fastcall N3Click(TObject *Sender);      void __fastcall N5Click(TObject *Sender);      void __fastcall N7Click(TObject *Sender);      void __fastcall N6Click(TObject *Sender);      void __fastcall N8Click(TObject *Sender); private: public: //定义主窗体Form1;      __fastcall TForm1(TComponent* Owner); }; extern PACKAGE TForm1 *Form1;#endif  图5.1 主窗体图 主窗体通过Close方法来关闭应用程序,并释放所有变量和程序中使用到的窗体等,通过Form14上的QuickRep1组件的Preview()方法来调用打印预览功能。主窗体上的图案是通过FORM1上装载的Image1组件所包含的LOADFROMFILE方法,将事先编辑好的程序封面图象加载到主窗体的预定位置。在主窗体生成的同时,因为加载了MainMenu1组件,利用其MenuItem属性生成6个功能菜单,列于屏幕上方。之后便开启事件响应的监视功能,等待用户的进一步输入结果。根据它来确定程序的下一步操作。    5.2 用户信息查询模块当使用者选中了主菜单上的"查询"选项后,系统会自动的响应这个事件,并按照事先的约定进入图5.2:           图5.2用户信息查询模块图查询选择窗体上罗列出了系统所能提供的各种查询功能,并且以单选开关的形式提供给使用者,一旦使用者选取了其中任意一项查询功能,将进入下一步的具体操作界面。下面我们将对上述8种查询方式的实现进行一一的说明。 5.2.1 浏览全库内容因为是浏览整个数据库的信息,因此不需要做任何的事先处理,所以此功能在实现上是很容易的。首先在用户触发了单项查询按钮之后,下述事件将马上响应: RadioButton1Click(TObject *Sender) {  Form2->Visible=false; //关闭FROM2窗口 Form3->Visible=true;  //打开FROM3窗口开始浏览 } 于是图5.3马上显示在屏幕上了: 图5.3 浏览窗口图 在FROM3上设置了一个用于显示数据的表格和一个用于控制的按钮,按钮用于退出该查询窗口,而表格则是事先已经设置与相应的数据库相连接,因而一打开查询窗口就可以看见整个数据库的内容了。 FROM3上的表格控件DBGrid通过设置DATASOURCE属性指向FROM2上的TABLE1而连接上TOTAL数据库。因为本系统的主要数据库为TOTAL,其他的查询来源均是这里,这样的设置是为了节省空间,并且能解决因为频繁加载控件而造成系统资源的消耗过大。 5.2.2 按姓名查询用户信息按姓名查询用户信息是供使用者在知道用户姓名的时候进行用户简单信息的查询,因为这一功能涉及到了在整个庞大的数据库中查找所需要的信息,因而需要设置查询条件。本系统所有的查询数据库基本上都是TOTAL,为了节省系统开支,以后的模块窗口均使用模态窗口,它的好处是生成一个窗体副本,退出时即行释放,但是对它的操作确是跟非模态窗体一样。在查询主窗体中触动第二个选项,一个新的查询子窗体就显示出来了,见图5.4。 图5.4 查询子窗体图实现这一过程的语句是: Form2->Visible=false;  //将FORM2置为非显示状态      TBookmark oldRec=Table1->GetBookmark(); //设置数据库位置标志,以便返回时恢复 Table1->Filtered=true;  //开启数据库筛选功能 Form4->ShowModal();    //以模态方式显示查询窗体 这里设置了一个数据库位置标记是因为在模态窗口返回之后,它所使用过的变量均已经释放,现在记录下位置标记以便返回后可以恢复其初始位置,从而不影响其他响应事件对数据库的使用。    初始状态显示有一个用户信息,是因为该窗体设置了两个用于显示用户信息的和数据库相连的文本控件,另外提供了一个给使用者输入查询条件的对话框,操作员在这里输入了想要查找的用户的名称之后,在通过"开始"按钮启动查询,从而得到查询结果。此处使用了C++ BUILDER提供的一个很简单而又实用的属性和方法 --- Filtered。通过设置它的值来控制打开或关闭数据库筛选功能。当它的值为真(TRUE)时,就开启了筛选功能,然后在新的窗体中根据用户的需求来设置筛选条件。具体实现如下: s1=Edit1->Text;    //让S1接受操作者的输入 s2="user_name='";  s3="'"; s4=s2+s1+s3;      //将它们拼装成筛选条件; Form2->Table1->Filter=s4;  //开始筛选,得出结果 在进入查询窗口时开启了筛选功能,如果不在退出时关闭这项功能的话,因为我们的查询均使用TOTAL数据库,所以查询条件一直生效,就不能进行下一步的操作,或者会给其他数据操作带来麻烦,所以在退出时应该关闭此功能:    Table1->Filtered=false;      //关闭筛选功能 Table1->GotoBookmark(oldRec); //恢复数据库位置标记,返回初始位置 Table1->FreeBookmark(oldRec); //释放位置标记变量 5.2.3 按电话号码查询用户详细信息这项功能经实践证明是使用的最为普遍的一项,因而在设计时里面所包含的内容也就最多,它几乎包括了所有的用户信息。 图5.5 电话号码查询 由于在使用和实现上与上一个章节所叙的按姓名查询基本相同,所以这里就不在重复了。 5.2.4 按单位查询用户信息这项功能的设计初衷是用来查询公费用户信息的,但是也可以用于所有用户信息的查询,它是一个多条件查询,查询的时候使用到了两个条件---单位和部门,因为此模块其他功能的实现方式前面已经介绍过,现在就多条件查询的实现和本模块的一些新功能给予重点的分析和说明。    为了方便操作人员的使用,在此模块中提供了两个可进行数据选择的控件ComboBox,它既能够接受操作者自行的输入信息作为查询条件,也提供一个能够进行选择的下拉项,而这个下拉项目中的内容则是通过ComboBox的Items属性的LoadFromFile方法进行加载,这极大的方便了操作人员的使用,同时因为下拉选项中的内容其实是和用户资料输入过程中提供的内容来源相同,因此也大大的提高了查找的成功率,使得系统不会因为输入数据的不规范而造成查找不到本已存在的数据。为了加载选项内容,在窗体创建和初始化的时候就通过ComboBox1->Items->LoadFromFile("d:\\台帐查询\\单位名称.txt")和ComboBox2->Items->LoadFromFile("d:\\台帐查询\\ 部门名称.txt")两条语句调用了LoadFromFile方法。 图5.6 单位部门查询图 操作人员在下拉选项中选好了查询条件之后,就可以开始进行查询了,操作者输入的查询条件是通过系统提供的字符拼装运算"+"加载到一起的,而后利用了一个逻辑运算符"AND"把两个条件加起来送给Table1的Filter属性进行查询。    s1=ComboBox1->Text;  //接受用户单位信息 s2="user_dep='";          s6=ComboBox2->Text;    //接受用户部门信息   s5=" and depatment='"; s3="'"; s4=s2+s1+s3+s5+s6+s3;  //拼装成完整的查询条件 Form2->Table1->Filter=s4;  //给Filter赋值因为采用的显示控件是文本框,因而如果有两条以上的用户满足查询条件则显示找到的第一条记录。因为主要是提供用于办公电话的查询,所以不会有两条以上的记录,而对于自费电话部分则可能产生两条以上的查询结果。此时可以通过系统提供的下一个查询方式进行查询。 5.2.5 按部门查询用户信息此功能模块主要提供查询公费用户的信息,它是从不同部门的角度来查询的,这样可以了解到哪些部门对电话的需求比较大,从而决定相应的营销策略和对此类用户制订更好的服务策略,以提高我们的市场占有率。           图5.7 按部门查询图 因为是按部门来进行查询,因而得到的结果就很可能不是一条,所以这里就采用了表单的形式安放得到的查询结果。至于实现方法,因为和上述的实现完全相同,再此限于篇幅也不在赘述。 5.2.6 查询公费信息图5.8是按电话号码查找一些公费用户的信息,它不同于普通用户的是,这里还需要提供一些特殊的信息,比如经办人是谁,是否开通拨打市话的功能,付款方式如何等,所以一般不提倡操作人员在这里查找普通用户信息,而公费用户信息也最好在这里查找而不要到前面所说的第三个查询方式里面去查找。    此处也提供了一个用于给操作者输入查询信息的文本对话框,在里面输入了信息后即可查看结果。 图5.8 公费信息查询图 5.2.7 查询新功能查询新功能是本系统的一个特色,因为一般的软件很少有提供新功能业务查询的,所以本模块还专门提供了打印功能,用以打印含有某一项新功能的用户名单作为存档之用。在选择此项功能之后,用户即可看见如图5.9的界面:             图5.9 查询新功能图首先在窗体建立时利用ComboBox1的Items属性下的一个LoadFromFile方法把d:\台帐查询\新功能名.txt文件加载进来,之后在用户选好新功能名后启动查询按钮,开始查询。因为TOTAL数据库中的新功能数据分布在三个不同的字段中,所以在窗口中显示的时候可能分布在不同的列中。但是系统提供的打印功能却是将所查询出来的信息完全的写进另一个查询结果表中---即XGN表中。    while(!Table1->Eof)   { Table1->First(); Table1->Edit(); Table1->delete();  //将上一次的查询结果清除掉 } Table2->First();    //重新写入查询信息 AnsiString Str=ComboBox1->Text,s1,s2,s3; while(!Table2->Eof) { Table1->Edit(); s1=Table2->FieldByName("XGN1")->AsString; s2=Table2->FieldByName("XGN2")->AsString; s3=Table2->FieldByName("XGN3")->AsString;  //若查询的新功能在字段XGN1中,则将其中的相应内容添加到表中(XGN1、XGN1_START等) if(s1 == Str)   {     Table1->Append(); Table1->FieldByName("USER_ID")->Value=Table2->FieldByName("USER_ID")->Value;  Table1->FieldByName("USER_NAME")->Value=Table2->FieldByName("USER_NAME")->Value;   Table1->FieldByName("XGN")->Value=Table2->FieldByName("XGN1")->Value; Table1->FieldByName("XGN_START")->Value=Table2->FieldByName("XGN1_START")->Value;  } //若查询的新功能在字段XGN2中,则将其中的相应内容添加到表中(XGN2、XGN2_START等) if(s2 == Str)   {   Table1->Append(); Table1->FieldByName("USER_ID")->Value=Table2->FieldByName("USER_ID")->Value; Table1->FieldByName("USER_NAME")->Value=Table2->FieldByName("USER_NAME")->Value; Table1->FieldByName("XGN")->Value=Table2->FieldByName("XGN2")->Value; Table1->FieldByName("XGN_START")->Value=Table2->FieldByName("XGN2_START")->Value;  } //若查询的新功能在字段XGN3中,则将其中的相应内容添加到表中(XGN3、XGN3_START等) if(s3 == Str)   {   Table1->Append(); Table1->FieldByName("USER_ID")->Value=Table2->FieldByName("USER_ID")->Value; Table1->FieldByName("USER_NAME")->Value=Table2->FieldByName("USER_NAME")->Value; Table1->FieldByName("XGN")->Value=Table2->FieldByName("XGN3")->Value; Table1->FieldByName("XGN_START")->Value=Table2->FieldByName("XGN3_START")->Value;  } Table2->Next(); } Table1->Post();   //保存结果 Table1->Close();  //关闭数据库 Table2->Close(); Form15->QuickRep1->Preview();  //进行打印前的预览 } 至此已经将查询的结果成功的写入了一个空文件中并进行了打印。 5.2.8 按单位和类别查询用户信息此处的设计思想和实现方式跟上一个完全相同,当使用者把查询条件输入完毕后,即可显示查询内容,如果希望进行打印存底,还可以选择打印按钮进行打印前的预览和一些必要的打印设置。    所不同的是这里采用了两个查询条件,而且是要全部满足才可找到合适的结果,所以这里使用了"AND"运算符,而上面因为可能在不同的字段而采用了"OR"的运算符。另外此处为了打印的方便还将数据完全写入了本系统的另一个临时的工作表---GFDH,用以方便打印。    它的操作界面如图5.10: 图5.10 单位和类别查询图 5.3 数据处理功能模块数据处理也是本系统提供的一个很重要的功能模块,通过它使用者可以方面的进行用户数据的录入和修改,它的操作界面见图5.11:  图5.11 数据处理图 这里提供了一个数据库导航条,用于数据的查找,另外为了查找老用户的方便起见,还单独提供一个查询引擎,可以按电话号码对数据进行查询,系统会自动的将查找到的结果显示出来,方便修改。另外有时候操作人员有浏览全库的需求时也可以随时的按动窗体上的浏览全库按钮来显示全库的信息。为防止操作者误操作而丢失数据,在每次删除操作之前都会有一个确认对话框,如果用户确定删除的话,则将库里的该条记录删除。为方便用户的录入和修改工作,系统提供了下拉选择式的输入方式,只要用户在那些一般说来输入的内容相对固定的栏目上双击一下就会弹出一个下拉选择框。它的实现方法如下:通过在窗体建立时对其上的DBGrid1的Columns属性下的Items属性和PickList属性使用LoadFromFile方法,对其赋以欲加载的文件名即可。为了保证所输入的数据不出现重复电话号码的用户,系统还采用的记录验证的方法,在记录的插入操作之前运行如下的代码进行验证: void __fastcall TForm11::Table1Beforeinsert(TDataSet *DataSet) { //获取操作人员的输入信息 snum=InputBox("输入对话框","请输入电话号码:",""); //与库内信息比较,存在则放弃,反之则继续; if(Table1->FindKey(&TVarRec(snum),0))   {   ShowMessage("该用户已经存在,请重新输入!");  Abort();  } } 5.4 系统使用帮助功能为了方便使用者,本系统建立了帮助文件,用户可在进入系统时通过主菜单的选项查看其中的内容。具体实现是在一个空的窗口上加一个文本框,在其上做好帮助内容,然后通过打开窗口观看帮助。为防止用户不小心更改了帮助内容,特将Memo1的READONLY属性置为TURE,并将ENABLE属性置为FALSE。这样用户就只能观看而不能影响其内容了。 5.5 打印功能模块打印模块通过调用下面的语句提供了整个库文件的打印存档功能,便于日后查询。        Form14->QuickRep1->Preview();由于事先封装了打印的内容和基本设置,因而通过上述一条语句就实现了打印和预览功能。 5.6 版本信息和系统退出版本信息向用户提供了本系统的作者和此软件的版本号等信息,它可以通过主菜单上的选项来实现。退出功能则实现了系统的正常关闭和释放系统变量和临时变量的作用。这样就实现了系统的真正意义上的退出而不是仅仅将系统窗口简单的关闭,这也为其他程序的运行提供了空间。 第六章 结束语 通过本次设计,我收益非浅。首先增加了自己对可视化编程的进一步的理解,熟悉了C++ Builder的编程过程和它的一些控件、属性和方法的使用,增强了自己的编程能力。在编程的过程中也使自己对程序系统编制的理解大大加深,对软件工程学的认识有了更大的提高,熟悉了工程软件开发的各个环节,使自己对程序整体的认识加深了。另外编程也使我解决问题的能力有了提高,锻炼了自己解决难题的能力,也使我平日不细心的毛病有所改变。当然,由于自身能力的原因,程序中还存在着一些毛病,需要进行进一步的改进,希望通过这次做设计的机会,得到各位老师的指点,以使自己能够不断改进不足之处,让自己的水平得到更大的提高。    本次毕业设计得到了陈伯平老师的多次指导,在此表示感谢! 第七章 附录 附录1主窗体源文件 //---------------------------------------------------------------- #include <vcl.h>#pragma hdrstop #include "main.h"#include "chaxun.h"#include "datainput.h"#include "Unit12.h"#include "Unit13.h"#include "Unit14.h" //---------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //---------------------------------------------------------------- fastcall TForm1::TForm1(TComponent* Owner)     : TForm(Owner) { } //---------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { Close(); } //---------------------------------------------------------------- void __fastcall TForm1::N3Click(TObject *Sender) { Form1->Visible=false; Form2->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm1::N5Click(TObject *Sender) { Form1->Visible=false; Form11->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm1::N7Click(TObject *Sender) { Form12->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm1::N6Click(TObject *Sender) { Form13->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm1::N8Click(TObject *Sender) { Form14->QuickRep1->Preview(); } //----------------------------------------------------------------     附录2查询窗体源程序 //---------------------------------------------------------------- #include <vcl.h>#pragma hdrstop #include "chaxun.h"#include "main.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"#include "Unit6.h"#include "Unit7.h"#include "Unit8.h"#include "Unit9.h"#include "Unit10.h" //---------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; //---------------------------------------------------------------- fastcall TForm2::TForm2(TComponent* Owner)     : TForm(Owner) { } //---------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { Close(); Form1->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton1Click(TObject *Sender) { Form2->Visible=false; Form3->Visible=true; } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton2Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form4->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton3Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form5->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton4Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form6->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton5Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form7->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton6Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form8->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton7Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form9->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- void __fastcall TForm2::RadioButton8Click(TObject *Sender) { Form2->Visible=false; TBookmark oldRec=Table1->GetBookmark(); Table1->Filtered=true; Form10->ShowModal(); Table1->Filtered=false; Table1->GotoBookmark(oldRec); Table1->FreeBookmark(oldRec); } //---------------------------------------------------------------- 附录3浏览全库模块源程序 //---------------------------------------------------------------- #include <vcl.h>#pragma hdrstop #include "Unit3.h"#include "chaxun.h" //---------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm3 *Form3; //---------------------------------------------------------------- fastcall TForm3::TForm3(TComponent* Owner)     : TForm(Owner) { } //---------------------------------------------------------------- void __fastcall TForm3::Button1Click(TObject *Sender) { Close(); Form2->Visible=true; Form2->RadioButton1->Checked=false; } //---------------------------------------------------------------- 参考文献 1 李智慧 李小良 编著   Borland C++ Builder 实用数据库教程     四川大学出版社出版  98年11月第一版 2 李智慧 秦  成 编著    C++ Builder 5.0 从入门到精通     清华大学出版社出版  99年8月第一版 3 吴文虎 编著          实用算法的分析与程序设计  电子工业出版社      2000年9月第一版
  中国策略网相关文章
“圆球理论”和“好人文化” 2006-11-29 10:39:00
 

 

 

——Creative Commons 创作共用授权·知识共享未来——
中国策略网 - 会员中心 - 站点统计
长沙博学堂文化传播有限公司
『本站由杭州博学堂文化传播有限公司│长沙博学堂文化传播有限公司建设、运营』
【博学堂│中国策略网】环球市场杂志社、博学堂咨询培训机构、共同策略行销传播机构
长沙博学堂文化传播有限公司│长沙市黄兴中路188号英尚国际20层200009 TEL:0731-2220020 FAX:0731-2220010
杭州博学堂文化传播有限公司│杭州市武林路戒坛寺巷25号宏大商务楼2232室,电话:0571-85868901
Copyrights © 2005-2009 www.bookwoo.com All Rights Reserved.
MOKE Creative Network │ 墨客作品浙ICP备05019731号