• 1.22 MB
  • 2022-05-17 13:01:15 发布

公司考勤管理系统设计及实现_本科毕业论文(设计)

  • 102页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
本科毕业论文(设计)公司考勤管理系统设计及实现院(系)信息学院专业软件工程学号学生姓名指导教师提交日期 内容摘要公司考勤管理系统能够为客户提供考勤报到及信息查询和统计的工作,系统的功能与效率对于管理者来说都是至关重要的,是公司对人员管理的重要手段。本文先从实际出发,考察了部分公司的考勤管理系统,详细分析了系统目前存在的不足,并从公司考勤系统的现状和未来的发展趋势入手,使用Java与SQL等相关的技术,对这一系统进行编程开发,进而实现系统的各种功能。其中在通过具体的详细分析之后,主要设计了用户管理模块、员工考勤模块、员工管理模块与考勤信息模块四个大的模块来对系统进行编码,并根据模块对数据库和界面进行设计。同时,文章给出了各个关键模块的功能说明、实现代码,最后对系统进行了功能测试,并就开发过程中存在的问题进行了总结。关键词:Java模块数据库公司考勤管理系统设计及实现 AbstractTheattendancemanagementsystemcanprovideattendancereportandinformationqueryandstatisticsforthecustomer"sworkisessential,functionandefficiencyofthesystemformanagersofthecompany,isanimportantmeansofpersonnelmanagement.Thisarticlefirstembarksfromthereality,theattendancemanagementsystemispartofthecompany,adetailedanalysisoftheshortcomingsofthecurrentsystem,andfromthepresentsituationofthecompanyattendancesystemandthefuturedevelopmenttrend,theuseofJavaandSQLandotherrelatedtechnologies,programmingofthesystem,soastorealizethevariousfunctionsofthesystem.Thethroughdetailedanalysisofconcrete,themaindesignoftheusermanagementmodule,employeeattendancemodule,staffmanagementmoduleandtheattendanceinformationmodulefourbigmodulestocodesystem,andbasedonthedatabaseandinterfacedesignmodule.Atthesametime,thepapergivesthedescriptionofthefunctionofeachkeymodule,therealizationofthecode,finallyhascarriedonthesystemfunctiontest,andsummarizestheproblemsexistinginthedevelopmentprocess.Keywords:JavaModuleDatabaseTheCompantattendancemanagementsystem 目录1.引言12.公司考勤管理系统需求分析22.1系统概述22.2系统运行环境22.2.1硬件环境22.2.2软件环境22.3开发工具22.3.1Java22.3.2Eclipse22.3.3SQLServer201232.4系统需求分析32.4.1系统数据流图32.4.2系统功能需求42.4.3系统功能需求用例图53.公司考勤管理系统的总体设计63.1开发和设计的总体思想63.2系统模块结构设计63.3系统功能模块划分63.3.1用户管理模块6 3.3.2员工考勤模块73.3.3员工管理模块73.3.4考勤信息模块73.4系统流程描述73.5数据结构设计83.5.1数据库的E-R图设计83.5.2数据库表结构93.6界面设计103.6.1登录模块界面103.6.2系统主界面113.6.3员工考勤界面113.6.4员工管理界面123.6.5关于本系统界面123.6.6管理员界面133.6.7成员信息管理界面143.6.8通讯录界面173.6.9备忘录界面183.6.10音乐管理界面193.6.11退出对话框194.公司考勤管理系统详细设计204.1连接数据库模块204.1.1模块描述20 4.1.2主要程序清单204.2登录模块214.2.1模块描述214.2.2主要程序清单214.3主界面模块234.3.1模块描述234.3.2主要程序清单234.4考勤模块334.4.1模块描述334.4.2主要程序清单334.5信息统计模块374.5.1模块描述374.5.2主要程序清单384.6管理员模块444.6.1模块描述444.6.2主要程序清单444.7音乐管理模块524.7.1模块描述524.7.2主要程序清单525.系统测试和应用545.1系统测试545.1.1关于软件测试54 5.1.2黑盒测试545.2系统应用556.结语与展望56参考文献57致谢58 广东商学院学士学位论文家族信息管理系统设计与实现1.引言随着社会的发展,人民生活水平的提高,人民对生活的质量要求越来越高,也就导致了房地产事业的快速发展。而城市化的进程使得传统的四合院家族越来越少,随之而来的是,各地的高楼大厦拔地而起。为了满足生活要求和精神需求,越来越多的人选择了离开家族,“自力更生”。从而导致的结果是,家族之间的交流沟通,以及家族成员之间的信息管理变得更加地困难。计算机软件和硬件等技术的高速发展,使得计算机在全世界的应用越来越广泛,遍及各个行业各个角落,人们普遍使用计算机来提高工作效率,计算机成为现代人不可缺少的一部分。在信息横飞的当今社会,我们应该懂得如何利用计算机来对这些信息加以管理,从而更有效地为管理部门提供现代化日常办公条件及丰富的综合信息服务,实现档案管理自动化和办公事务处理自动化,以提高办公效率和管理水平。在现代社会发展和计算机出现的双重影响下,用户对家族软件的需求也越来越高,家族信息管理系统的开发也就不可避免地成为当前软件开发的又一热点。目前,我国的家族信息管理系统还处在萌芽阶段,尚未普及,但是,它确确实实已经出现在现代的一些家族和城中村,而且作为管理事业的一部分发挥着越来越重要的作用。家族信息管理系统能够为用户进行成员管理、基本信息管理以及统计查询等工作提供便捷的服务95 广东商学院学士学位论文家族信息管理系统设计与实现,有利于实现对家族事业的现代化管理,有利于协调配合城中村的各项工作,有利于促进家族成员的沟通与联系,对构建社会主义以人为本的和谐社会具有重要的现实意义,已是现代家族事业管理必不可少的一部分。本项目提出的家族信息管理系统是基于VC平台,使用VC中基于MFC的Windows应用程序进行开发的,并且运用了ODBC数据访问技术。VisualC++不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境。因此,基于VC平台的开发,可以使软件具有较好的可操作性,并且帮助实现界面的友好性等。由于家族信息管理系统涉及的功能和用途在不同的地方有所不同,因此,设计并实现具有基本功能并有效合理的家族信息管理系统是本项目开发过程中着重考虑的问题。另外,本项目除了实现家族信息管理系统的基本功能之外,还重点考虑了信息管理系统界面的易用性和友好性等问题。2.家族信息管理系统需求分析2.1系统概述本项目主要是设计并实现了公司考勤管理系统,该系统主要的功能包括系统员工管理、员工基本信息管理、员工考勤管理、统计查询,例如新增员工、查找员工、查找某员工信息、员工考勤信息统计情况等。2.2系统运行环境2.2.1硬件环境处理器:InterPentiumII266MX或更高95 广东商学院学士学位论文家族信息管理系统设计与实现内存:64MB硬件空间:2GB显卡:SVGA显示适配器2.2.2软件环境操作系统:WindowXP/7/8数据库:SQLServer20122.3开发工具2.3.1VisualC++6.0及C++语言①VisualC++的简介VisualC++[1]是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。所以实际中,更多的是以VisualC++6.0为平台。VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。VisualC++它大概可以分成三个主要的部分:DeveloperStudio,MFC,PlatformSDK。Visual95 广东商学院学士学位论文家族信息管理系统设计与实现C++包含了两套完整的Windows应用程序开发系统,既可以使用Win32API来开发用C编写的Windows应用程序,也可以开发基于MFC的Windows应用程序,此外,VisualC++也包括ActiveX模板库(ActiveXTemplateLibrary,ATL),可以用它来开发在Internet上使用的ActiveX控件,还可以制作基于MFC的ActiveX控件,还可以设计基于C或C++的动态链接库(DLL)。VisualC++具有面向对象程序设计的功能,VisualC++的核心是Microsoft基础类库(MicrosoftFoundationClassLibrary,MFC),采用的是消息映射机制进行程序设计。②C++语言的简介C++[2]是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、名字空间(namespace)等逐渐被加入C++标准。但是,C++是一门独立的语言,它并不依赖于C语言。2.3.2MicrosoftAccess2003MicrosoftAccess[3]是由微软发布的关联式数据库管理系统。它结合了MicrosoftJetDatabaseEngine和图形用户界面两项特点,是MicrosoftOffice的成员之一。Access95 广东商学院学士学位论文家族信息管理系统设计与实现是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS),是Office系列应用软件之一。它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。2.4系统需求分析软件需求分析[4]是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么”的问题,需求分析师发现、求精、建模和规约的过程。需求分析的方法有结构化分析方法和其他分析方法。其中,结构化分析方法是面向数据流进行需求分析的一种方法。它使用数据流图(DFD,DataFlowDiagram)、数据字典(DD,DataDictionary)等工具进行分析。2.4.1系统数据流图系统数据流图[4]是描述数据处理过程的工具,它具有抽象性、概括性和层次性的三个特性。本系统的数据流图如图2.4.1所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图2.4.1系统数据流图2.4.2系统功能需求①新建家谱,打开已有家谱文件,对家谱成员进行排序,增加成员,查找成员,确定某两个成员之间的关系,查找某代人的信息等功能,如图2.4.2所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图2.4.2功能需求图②在使用该系统软件时,能够供系统用户在电脑上任意选择自己喜欢的MP3文件进行播放。音乐的选择能够增强该系统的艺术感,并且在用户使用软件时,利用音乐可以达到放松心境的效果。③在使用该软件的过程中,系统管理员可以设置其他的系统用户,如信息录入员、系统管理员等,不同的系统用户拥有不同的系统功能。④因为有了不同的系统用户,所以不同的用户可以通过通讯录了解其他用户的信息,并且通过电子邮件联系其他系统用户,又或者利用备忘录给其他系统用户留言。⑤本系统提供了清晰友好的界面,用户可以根据自己的需要和喜好进行选择,在选择的过程中,系统还会出现一些提示信息,引导用户正确进行操作。2.4.3系统功能需求用例图用例图[5]显示系统中的用例与角色及其相互关系。用例是系统提供的高级功能块,角色是与所建系统交互的对象。用例图由参与者(Actor)、用例(UseCase)、系统边界、箭头组成。其中,用例之间一般有三种关系:泛化关系,扩展关系,包含关系。本系统的功能需求用例图如图2.4.3所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图2.4.3用例图95 广东商学院学士学位论文家族信息管理系统设计与实现3.家族信息管理系统的总体设计3.1开发和设计的总体思想本系统采用VisualC++6.0为开发工具与Access作为后台数据库相结合实现,总体思想基于面对对象的程序设计。应用高级语言程序设计中的循环、选择等控制结构实现家族信息管理系统的增、删、改和查等经典功能,大量信息的存储和操作用Access数据库来实现。在软件开发过程中应用了软件工程以及二叉树[6]的基本理论。基于成本以及安全性考虑,假设本系统是一个相对封闭的单机运行系统,不提供与其他系统的实时数据交互。系统基本的流程是:用户登录—主界面—选择各项功能。3.2系统模块结构设计本家族信息管理系统主要分为4个子模块,其系统结构设计图如图3.2.1所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.2.1系统结构图3.3系统功能模块划分根据上述系统总体设计思想的分析,该系统的主要模块的设计如下:3.3.1系统用户管理模块用户使用该系统之前需要进行登录验证,系统会提示用户选择用户和输入密码,从而调用数据库中存储的该用户信息进行校验,如果未能通过校验,则会提示用户密码错误,用户将有三次登陆到系统的机会,三次机会还没有登陆系统的话,系统将自动退出。用户登录到系统后允许使用的与权限相对应的系统功能,主要有系统管理员、系统维护员、以及系统信息录入员。3.3.2基本信息管理模块包括对家族信息进行管理、对系统用户进行管理、音乐选择等功能。其中,对系统用户管理的模块中,主要包括新增各类系统新用户,包括用户名称、用户权限、用户密码、密码确认,同时还可以对系统用户进行注销以及密码修改等操作;而音乐选择功能可以选择硬盘中的各类格式的音乐文件。95 广东商学院学士学位论文家族信息管理系统设计与实现3.3.3家族信息管理模块包括新建家谱,然后可以对家谱进行管理,包括姓名、父亲姓名、出生日期、家庭地址、健在否(包括死亡日期)、婚否等信息。在该家谱的基础上,可以进行删除记录、增加孩子、确定两人关系、更改资料等操作。该系统可以对多个家谱进行管理,并且分别进行保存文件。也可以对已经做好的家谱进行保存,并随时进行管理操作。3.3.4统计查询模块包括对系统用户的统计查询以及对家族成员的统计查询两大模块、其中对系统用户的统计查询包括从姓名、生日、手机号码进行查找,同时可以查看系统用户的属性,创建新的用户、给新用户发电子邮件等。而对家族成员的统计查询模块中,主要包括对家族成员表进行统计查询,包括按出生日期排序、按姓名查找成员、按生日查找成员、查询某一代的信息等操作。3.4系统流程描述运行系统后,首先看到登录窗体,对用户的身份进行认证。在本系统中,应该首先增加家谱信息,之后才能对家谱成员进行操作。基本信息管理模块包括节基本信息设置模块包括对家族信息进行管理、对系统用户进行管理、音选择乐等功能。其中,对系统用户管理的模块中,主要包括新增各类系统新用户,包括用户名称、用户权限、用户密码、密码确认,同时还可以对系统用户进行注销以及密码修改等操作;而音乐选择功能可以选择硬盘中的各类格式的音乐文件。添加家谱信息之后,就可以对家族中的成员进行各类的操作了。95 广东商学院学士学位论文家族信息管理系统设计与实现家族信息管理设置模块包括新建家谱,然后可以对家谱进行管理,包括姓名、父亲姓名、出生日期、家庭地址、健在否(包括死亡日期)、婚否等信息。在该家谱的基础上,可以进行删除记录、增加孩子、确定两人关系、更改资料等操作。该系统可以对多个家谱进行管理,并且分别进行保存文件。也可以对已经做好的家谱进行保存,并随时进行管理操作。统计查询模块包括对系统用户的统计查询以及对家族成员的统计查询两大模块、其中对系统用户的统计查询包括从姓名、生日、手机号码进行查找,同时可以查看系统用户的属性,创建新的用户、给新用户发电子邮件等。而对家族成员的统计查询模块中,主要包括对家族成员表进行统计查询,包括按出生日期排序、按姓名查找成员、按生日查找成员、查询某一代的信息等操作。本系统流程分析如图3.4.1所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.4.1系统流程图3.5数据结构设计3.5.1数据库的E-R图设计95 广东商学院学士学位论文家族信息管理系统设计与实现家族信息管理系统采用Access2003数据库存储通讯录用户的有关信息,而对于系统用户是通过自动程序自动保存设置,家族成员是通过文件进行保存。其E-R图[7]如下:图3.5.1系统E-R图3.5.2数据库表结构①系统用户数据表,如表1所示。其中,系统用户信息表的各数据项详细说明如表2所示。表1用户登陆密码amy[信息录入员]0000000System[系统管理员]000000095 广东商学院学士学位论文家族信息管理系统设计与实现表2数据字段数据类型user文本password文本②在数据库中,系统通讯录用户信息存在BookData表中,其基本信息如表3所示。其中,系统用户信息表的各数据项详细说明如表4所示。表3nameemailqqmobilephonebirthdayworkunithomepagedemo杨丽金ylijin22@126.com48377708136314647630208409477919861031广东商学院李涛litao@163.com131457275300763231256919850512表4数据字段数据类型name文本95 广东商学院学士学位论文家族信息管理系统设计与实现email文本qq文本mobile文本phone文本birthday文本workunit文本homepage文本demo文本3.6界面设计家族信息管理系统要为用户提供一个易于操作的人机界面,在界面设计过程中充分考虑界面的一致性和简洁性、要求方便易用,界面友好,具体设计如下。3.6.1登录界面①用户登录界面设计充分考虑到用户实际应用系统时可能出现误操作的情况,如果用户输入的用户名和密码不符,则提示用户重新输入。②为保证用户输入密码不会被窃取,用户进入95 广东商学院学士学位论文家族信息管理系统设计与实现系统时输入的密码采用不回显的方式从屏幕获取用户输入的字符,从而保证顾客登录系统时密码的安全性。③当用户输入的用户名与密码相符,则会直接进入系统主界面。④根据不同的权限,调用相应的系统界面。图3.6.1登录界面3.6.2系统主界面系统管理员默认名为System,密码为0000000;信息录入用户名为amy,0000000为密码,确认登录后进入主界面,如图3.6.2所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.2系统主界面3.6.3系统用户管理界面用户登录到系统后允许使用的与权限相对应的系统功能,主要有系统管理员以及系统信息录入员。系统用户管理的模块中,主要包括新增各类系统新用户,包括用户名称、用户权限、用户密码、密码确认,同时还可以对系统用户进行注销以及密码修改等操作。密码修改成功后,系统将会提示“密码修改成功,请牢记新密码”。用户管理界面如图3.6.3所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.3用户管理界面3.6.4帮助界面图3.6.4帮助界面3.6.5关于本系统界面该界面采用Flash动画95 广东商学院学士学位论文家族信息管理系统设计与实现形式对系统进行介绍,并且可直接点击E-mail直接开启Ooutlook联系作者。如图3.6.5所示。图3.6.5关于本系统界面3.6.6家族信息管理界面家族信息管理设置模块包括新建家谱,然后可以对家谱进行管理,包括姓名、父亲姓名、出生日期、家庭地址、健在否(包括死亡日期)、婚否等信息。在该家谱的基础上,可以进行删除记录、增加孩子、确定两人关系、更改资料等操作。该系统可以对多个家谱进行管理,并且分别进行保存文件。也可以对已经做好的家谱进行保存(必须输入后缀“.ftf”,否则文件不能打开),并随时进行管理操作。界面如图3.6.6所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.6家族信息管理界面图3.6.7增加孩子3.6.7成员信息管理界面在家族信息管理模块下95 广东商学院学士学位论文家族信息管理系统设计与实现,可以进行删除记录、增加孩子、确定两人关系、更改资料、按生日进行排序等操作。成员信息管理界面如图3.6.8所示。图3.6.8点击“出生日期排序”后系统界面图3.6.9可填入任一代人的信息图3.6.10系统提示95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.11右边表格出现该代人的信息图3.6.12输入要查询的名字“杨蕾”图3.6.13系统提示95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.14右边表格出现“杨蕾”的相关信息图3.6.15输入查询的生日“10.31”图95 广东商学院学士学位论文家族信息管理系统设计与实现3.6.16系统提示图3.6.17出现生日为“10.31”的成员的信息图3.6.18输入“杨招娣”及“华文亿”两人的名字图3.6.19系统提示并显示两人之间的关系95 广东商学院学士学位论文家族信息管理系统设计与实现3.6.8通讯录界面在通讯录中,我们可以进行增加、修改、删除用户资料,查看用户属性,查找用户,通过电子邮件联系用户等操作。界面自动调用数据库中BookData表信息。查找用户的查找项有:姓名、手机号码、电话号码、QQ、生日、工作单位、个人主页、EMAIL、备注等。而删除用户时,应点击通讯录中某人的信息,再点击“删除”可删除该系统用户的资料,系统会自动提示“是否真的要删除”。具体界面如图3.6.20所示。图3.6.20通讯录界面3.6.9备忘录界面在通讯录界面中,用户可以通过备忘录进行留言。备忘录文件存储在文件夹中,以“.dat”为后缀,可以随时调出备忘录文件进行查看,修改等,同时也可新建新备忘录,新建时,可以指定当天的日期、天气等信息,以便以后查看和确认。界面如图3.6.21所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.21备忘录界面3.6.10音乐管理界面用户可以在使用该软件的时候,播放电脑中的任意mp3播放文件,在工作的同时享受音乐的熏陶。播放过的文件,其路径会保留,以便下次直接播放。该界面如图3.6.22所示。95 广东商学院学士学位论文家族信息管理系统设计与实现图3.6.22音乐界面3.6.11退出对话框退出时,正在进行的音乐会同时退出,并且会显示一下界面,如图3.6.23图3.6.23退出界面显示95 广东商学院学士学位论文家族信息管理系统设计与实现4.家族信息管理系统详细设计4.1连接数据库模块4.1.1模块描述本系统采用ODBC技术访问数据库,在类的类型中生成Familytree.cpp,默认文件为Familytree.cpp.4.1.2主要程序清单BOOLCFamilytreeApp::InitODBC(){charstrCurfile[256];char*p;CFileFindfile;::GetModuleFileName(m_hInstance,strCurfile,sizeof(strCurfile));p=strCurfile;while(strchr(p,"\")){p=strchr(p,"\");p++;}*p="";strcat(strCurfile,"BookData.mdb");if(!file.FindFile(strCurfile))95 广东商学院学士学位论文家族信息管理系统设计与实现{AfxMessageBox("找不到BookData.mdb数据库文件,请保证该文件和本程序在同一个目录中!",MB_OK|MB_ICONSTOP);returnFALSE;}if(GetProfileInt("数据源","IsFirstRun",0)){CStringstrKeyDir=GetProfileString("数据源","CurDir");if(strKeyDir.Compare(strCurfile)){WriteProfileString("数据源","CurDir",strCurfile);return(LoadODBC(CString("CarsDataBase"),CString(strCurfile),CString("数据源")));}}else{USERINFOsysuser;strcpy(sysuser.name,"System");sysuser.oper=1;strcpy(sysuser.password,"system");AfxGetApp()->WriteProfileBinary("用户","User0000",(LPBYTE)&sysuser,sizeof(sysuser));AfxGetApp()->WriteProfileInt("用户","LastID",1);WriteProfileInt("数据源","IsFirstRun",1);WriteProfileString("数据源","CurDir",strCurfile);95 广东商学院学士学位论文家族信息管理系统设计与实现return(LoadODBC(CString("CarsDataBase"),CString(strCurfile),CString("数据源")));}returnTRUE;}4.2登录模块4.2.1模块描述身份认证分为以下两个过程:首先确认用户是否有效的系统用户,其次确认用户的类型。第一个过程决定用户能否进入系统,第2个过程根据用户的类型决定用户的操作权限。如果还要创建其他用户,则使用System[系统管理员]用户登录,可以在用户管理模块中创建和管理;否则建议使用信息录入员身份登录,此时不能创建新用户,只能进行其他功能操作。在创建系统用户时,需要输入要创建的用户名、用户权限、密码以及密码确认。System[系统管理员]用户还可以添加和注销其他用户数据。登录对话框为IDD_LOGIN,为其创建一个类CLoginDlg。当用户单击确定按钮时,将发送BN_CLICKED消息,在ClassWizard窗口中为其添加函数CLoginDlg::OnOk()。4.2.2主要程序清单BOOLCLoginDlg::OnInitDialog(){CDialog::OnInitDialog();USERINFOtheUser;95 广东商学院学士学位论文家族信息管理系统设计与实现char*strOper[]={{"信息录入员"},{"系统管理员"}};UINTsize=sizeof(USERINFO);LPBYTEbt=newunsignedchar[sizeof(theUser)];CStringstrID;strID.Format("User%04u",0);intlastID;lastID=AfxGetApp()->GetProfileInt("用户","LastID",0);for(inti=0;iGetProfileBinary("用户",strID,&bt,&size);i++){memcpy(&theUser,bt,sizeof(theUser));CStringstrInfo;strInfo.Format("%s[%s]",theUser.name,strOper[theUser.oper]);m_uList.AddString(strInfo);strID.Format("User%04u",i+1);}if(lastID>0)m_uList.SetCurSel(0);delete[]bt;m_btnButton2.SubclassDlgItem(IDOK,this);m_btnButton2.SetIcon(IDI_ICON2);m_btnButton3.SubclassDlgItem(IDCANCEL,this);95 广东商学院学士学位论文家族信息管理系统设计与实现m_btnButton3.SetIcon(IDI_ICON3);returnTRUE;}voidCLoginDlg::OnOK(){UpdateData();USERINFOtheUser;UINTsize=sizeof(theUser);LPBYTEbt=newunsignedchar[sizeof(theUser)];CStringstrID;intid=m_uList.GetCurSel();strID.Format("User%04u",id);if(AfxGetApp()->GetProfileBinary("用户",strID,&bt,&size)){memcpy(&theUser,bt,sizeof(theUser));delete[]bt;if(!m_pas.Compare(theUser.password)){m_dwUser=theUser.oper;CDialog::OnOK();return;}}else{delete[]bt;95 广东商学院学士学位论文家族信息管理系统设计与实现MessageBox("没有该用户的信息,请与系统管理员联系。","读取用户数据错误",MB_OK|MB_ICONSTOP);return;}if(m_times){m_times--;MessageBox("用户密码不正确!请再次尝试!","登陆失败!",MB_OK|MB_ICONSTOP);GetDlgItem(IDC_DLOG_CPASWORD)->SetFocus();}else{MessageBox("用户密码不正确!n您的登陆失败次数已达三次,程序将退出。n请与系统管理员联系。","登陆失败!",MB_OK|MB_ICONSTOP);CDialog::OnCancel();}}4.3主界面模块4.3.1模块描述用户成功登录后进入系统主界面,根据不同权限完成相应的功能操作。主界面的类为FamilytreeDlg.cpp。4.3.2主要程序清单①OnDelete()函数95 广东商学院学士学位论文家族信息管理系统设计与实现OnDelete()函数功能是将家谱中的某成员进行删除操作,代码如下:voidCFamilytreeDlg::OnDelete(){//TODO:Addyourcommandhandlercodehereif(operFamilytree.GetRoot()==0)return;HTREEITEMhItem,hChildItem;hItem=m_peTree.GetSelectedItem();hChildItem=m_peTree.GetNextItem(hItem,TVGN_CHILD);charname[MAX_CHARNUM];strcpy(name,m_peTree.GetItemText(hItem));intanswer;if(hChildItem==0)answer=::MessageBox(this->m_hWnd,"你确实想删除"+CString(name)+"吗?","警告",MB_YESNO|MB_ICONWARNING);elseanswer=::MessageBox(this->m_hWnd,CString(name)+"还有孩子,如果你删除了他,其孩子也一并被删除。你确实想删除此人及其孩子吗?","警告",MB_YESNO|MB_ICONWARNING);if(answer==IDNO)return;Persononeself=0;operFamilytree.Find(operFamilytree.GetRoot(),oneself,name);95 广东商学院学士学位论文家族信息管理系统设计与实现if(oneself)operFamilytree.Delete(oneself);m_peTree.DeleteItem(hItem);RefreshTree();RefreshList();IsFamilytreeModified=true;//置家谱修改标记为真}②OnAdd()函数当对话框IDC_ADD启动时触发CFamilytreeDlg::OnAdd()函数。增加孩子,需要检查家谱中是否有重名的孩子,并且要对其出生日期以及死亡日期(如果有的话)。对应的代码如下:voidCFamilytreeDlg::OnAdd(){//TODO:AddyourcommandhandlercodehereCAddInfoDlgdlg;HTREEITEMhItem;hItem=m_peTree.GetSelectedItem();if(operFamilytree.GetRoot()==0)dlg.m_parentname="-1";elsedlg.m_parentname=m_peTree.GetItemText(hItem);if(dlg.DoModal()==IDCANCEL)//弹出对话框95 广东商学院学士学位论文家族信息管理系统设计与实现return;UpdateData(FALSE);Personaddnode;addnode=newPersonNode;//新申请一结点if(addnode==0){AfxMessageBox("内存不足!");return;}addnode->parent=0;addnode->child=0;addnode->sibling=0;//把有关结点信息加入到结点中去strcpy(addnode->info.name,dlg.m_name);strcpy(addnode->info.addr,dlg.m_addr);addnode->info.birthday.year=dlg.m_birthday_year;addnode->info.birthday.month=dlg.m_birthday_month;addnode->info.birthday.day=dlg.m_birthday_day;addnode->info.marry=dlg.m_marry;addnode->info.live=dlg.m_live;//若此人已过世,则还应有死亡日期if(!dlg.m_live){addnode->info.deathday.year=dlg.m_deathday_year;95 广东商学院学士学位论文家族信息管理系统设计与实现addnode->info.deathday.month=dlg.m_deathday_month;addnode->info.deathday.day=dlg.m_deathday_day;}Persononeself=0;operFamilytree.Find(operFamilytree.GetRoot(),oneself,addnode->info.name);//查找家谱中有没有此人if(oneself!=0){AfxMessageBox("家谱中已有此人!");deleteaddnode;return;}Personparent=0;charparentname[MAX_CHARNUM];strcpy(parentname,dlg.m_parentname);if(strcmp(parentname,"-1")==0){//试图加入一个新的根结点时给出警告intreply;reply=::MessageBox(this->m_hWnd,"确实要置此结点为根结点吗?","警告",MB_YESNO|MB_ICONWARNING);if(reply==IDNO)return;95 广东商学院学士学位论文家族信息管理系统设计与实现}else{//加入的结点不是根结点operFamilytree.Find(operFamilytree.GetRoot(),parent,parentname);//在家谱中找addnode的父结点if(parent==0){AfxMessageBox("父亲结点没找到!");deleteaddnode;return;}}//日期合法性检查if(!operFamilytree.IsDateValid(addnode->info.birthday)){AfxMessageBox("个人信息中的出生日期不合实际!");deleteaddnode;return;}//比较孩子结点与其父亲结点的出生日期if(strcmp(parentname,"-1")!=0){//加入的结点不是根结点95 广东商学院学士学位论文家族信息管理系统设计与实现if(operFamilytree.CompareDate(addnode->info.birthday,parent->info.birthday)<0){AfxMessageBox("所加入孩子的出生日期比其父亲的出生日期早,不合实际!");deleteaddnode;return;}elseif(operFamilytree.CompareDate(addnode->info.birthday,parent->info.birthday)==0){AfxMessageBox("所加入孩子的出生日期与其父亲的出生日期相等,不合实际!");deleteaddnode;return;}}if(!addnode->info.live){//查看死亡日期的合法性if(!operFamilytree.IsDateValid(addnode->info.deathday)){AfxMessageBox("个人信息中的死亡日期不合实际!");deleteaddnode;return;}95 广东商学院学士学位论文家族信息管理系统设计与实现if(operFamilytree.CompareDate(addnode->info.birthday,addnode->info.deathday)>0){AfxMessageBox("此人出生日期不可能比其死亡日期早!");deleteaddnode;return;}}operFamilytree.Add(parent,addnode);//找到,把addnode加入家谱中HTREEITEMhParentItem=0,hRootItem;hRootItem=m_peTree.GetRootItem();//得到树的根结点if(strcmp(parentname,"-1")!=0)//加入的结点不是根结点FindInTree(hRootItem,hParentItem,parentname);//在树中找到要加入结点addnode的父结点parentnameAddToTree(hParentItem,addnode);//把此结点加入到树中RefreshTree();//刷新该树IsFamilytreeModified=true;//置家谱修改标记为真95 广东商学院学士学位论文家族信息管理系统设计与实现}③OnFamilytreeSort()函数OnAddButton()函数,当用户单击“出生日期排序”按钮时触发CFamilytreeDlg::OnFamilytreeSort()函数,对应的代码如下:voidCFamilytreeDlg::OnFamilytreeSort(){//TODO:AddyourcommandhandlercodehereRefreshList();QuickSortNode*order;inttotalNums=0;operFamilytree.GetPersonNums(operFamilytree.GetRoot(),totalNums);order=newQuickSortNode[totalNums+1];if(!order){AfxMessageBox("内存不足!");return;}operFamilytree.SortByBirthday(order);for(inti=1;iparent){Display("");Display(CString(name)+"的父亲:");DisplayInListCtrl(oneself->parent);}if(oneself->child){Display("");Display(CString(name)+"的长子:");DisplayInListCtrl(oneself->child);}}⑥OnBirthday()函数当用户单击“按生日查找”按钮时触发OnBirthday()函数,对应的代码如下:voidCFamilytreeDlg::OnBirthday(){//TODO:AddyourcontrolnotificationhandlercodehereCBirthdayDlgdlg;95 广东商学院学士学位论文家族信息管理系统设计与实现if(dlg.DoModal()==IDCANCEL)return;intcurmonth,curday;curday=dlg.m_birthday_day;curmonth=dlg.m_birthday_month;Persononeself[30];for(inti=0;i<30;i++)oneself[i]=0;Person*start=oneself;operFamilytree.Find(operFamilytree.GetRoot(),start,curmonth,curday);if(oneself[0]!=0){CStringallnames("该天为以下家族成员的生日:");for(i=0;oneself[i]!=0;i++){allnames+="";allnames+=oneself[i]->info.name;allnames+="";}allnames+="n详细信息请见以下列表.";::MessageBox(this->m_hWnd,allnames,"查找结果:",MB_OK|MB_ICONINFORMATION);RefreshList();95 广东商学院学士学位论文家族信息管理系统设计与实现for(i=0;oneself[i]!=0;i++)DisplayInListCtrl(oneself[i]);}else{AfxMessageBox("没有找到生日为该天的家族成员!");RefreshList();}}⑦OnFamilytreeRelations()函数当用户单击“确定两人关系”按钮时触发OnFamilytreeRelations()函数,对应的代码如下:voidCFamilytreeDlg::OnFamilytreeRelations(){//TODO:AddyourcommandhandlercodehereCRelationsDlgdlg;if(dlg.DoModal()==IDCANCEL)return;UpdateData(FALSE);intpos1,pos2;Persononeself=0;charname1[MAX_CHARNUM],name2[MAX_CHARNUM];strcpy(name1,dlg.m_firstname);operFamilytree.Find(operFamilytree.GetRoot(),oneself,name1);95 广东商学院学士学位论文家族信息管理系统设计与实现if(oneself)pos1=operFamilytree.InGenerationPos(oneself);else{AfxMessageBox("本家谱中找不到"+CString(name1)+"!");return;}Personp,q;CStringgeneration;generation+=oneself->info.name;generation+="在家谱中的位置:";for(q=oneself,p=q->parent;p!=0;p=p->parent){generation+=q->info.name;generation+="->";q=p;}generation+=q->info.name;generation+="n";oneself=0;strcpy(name2,dlg.m_secondname);operFamilytree.Find(operFamilytree.GetRoot(),oneself,name2);if(oneself)pos2=operFamilytree.InGenerationPos(oneself);95 广东商学院学士学位论文家族信息管理系统设计与实现else{AfxMessageBox("本家谱中找不到"+CString(name2)+"!");return;}generation+=oneself->info.name;generation+="在家谱中的位置:";for(q=oneself,p=q->parent;p!=0;p=p->parent){generation+=q->info.name;generation+="->";q=p;}generation+=q->info.name;generation+="nn";CStringcmpResult;if(pos1>pos2)cmpResult.Format("%s在第%d代,%s在第%d代,%s是%s的晚辈.",name1,pos1,name2,pos2,name1,name2);elseif(pos1info.name,dlg.m_newname);//判断家谱中是否已有用户给定的新名字if(strcmp(newValue->info.name,oldname)==0)//用户不修改姓名else{Personp=0;operFamilytree.Find(operFamilytree.GetRoot(),p,newValue->info.name);//查找家谱中有没有此人if(p!=0){AfxMessageBox("家谱中已有此人!");deletenewValue;return;}}strcpy(newValue->info.addr,dlg.m_newaddr);newValue->info.marry=dlg.m_marry;newValue->info.live=dlg.m_live;newValue->info.birthday.day=dlg.m_birthday_day;newValue->info.birthday.month=dlg.m_birthday_month;newValue->info.birthday.year=dlg.m_birthday_year;95 广东商学院学士学位论文家族信息管理系统设计与实现if(!newValue->info.live){//如若过世,则应有死亡日期newValue->info.deathday.day=dlg.m_deathday_day;newValue->info.deathday.month=dlg.m_deathday_month;newValue->info.deathday.year=dlg.m_deathday_year;if(!operFamilytree.IsDateValid(newValue->info.deathday)){AfxMessageBox("此人信息中死亡日期不合实际!");deletenewValue;return;}if(operFamilytree.CompareDate(newValue->info.deathday,newValue->info.birthday)==-1){AfxMessageBox("此人死亡日期不可能比其出生日期早!");return;}}operFamilytree.Modify(oneself,newValue);RefreshTree();RefreshList();95 广东商学院学士学位论文家族信息管理系统设计与实现IsFamilytreeModified=true;//置家谱修改标记为真deletenewValue;}4.4系统用户管理模块4.4.1模块描述用户管理模块用来添加和注销用户信息,并可进行密码修改操作。用户管理对话框名称为IDD_USERDLG,对话框对应的类为CUserDlg。4.4.2主要程序清单①OnUdBadd()函数当用户单击“添加用户”按钮时触发OnUdBadd()函数,对应的代码如下:voidCUserDlg::OnUdBadd(){UpdateData();char*strq[]={{"信息录入员"},{"系统管理员"}};intpurview=m_udcpv.GetCurSel();if(m_udename.IsEmpty()){MessageBox("请指定用户名称。","输入错误",MB_OK);//|MB_ICONQUESION);GetDlgItem(IDC_UD_ENAME)->SetFocus();return;}95 广东商学院学士学位论文家族信息管理系统设计与实现if(purview==-1){MessageBox("请指定用户权限。","输入错误",MB_OK);//|MB_ICONQUESION);GetDlgItem(IDC_UD_CPURVIEW)->SetFocus();return;}if(m_udepwd.Compare(m_udepwdr)){MessageBox("两次输入的密码不一致,请重新输入!","密码验证错",MB_OK);//|MB_ICONQUESTION);m_udepwd.Empty();m_udepwdr.Empty();UpdateData(FALSE);GetDlgItem(IDC_UD_ENP)->SetFocus();return;}intLastID=AfxGetApp()->GetProfileInt("用户","LastID",0);CStringstrID;strID.Format("User%04u",LastID);USERINFOuser;ZeroMemory(&user,sizeof(user));strcpy(user.name,m_udename);user.oper=purview;95 广东商学院学士学位论文家族信息管理系统设计与实现strcpy(user.password,m_udepwd);if(AfxGetApp()->WriteProfileBinary("用户",strID,(LPBYTE)&user,sizeof(user))){CStringstr=m_udename+"["+strq[purview]+"]";m_udlist.AddString(str);LastID++;AfxGetApp()->WriteProfileInt("用户","LastID",LastID);}else{MessageBox("数据写入出错!","错误",MB_OK|MB_ICONSTOP);return;}m_udcpv.SetCurSel(0);m_udename.Empty();m_udepwd.Empty();m_udepwdr.Empty();UpdateData(FALSE);}②OnUdBdel()函数当用户单击“注销用户”按钮时触发OnUdBdel()函数,对应的代码如下:95 广东商学院学士学位论文家族信息管理系统设计与实现voidCUserDlg::OnUdBdel(){ints;CStringstrValue;s=m_udlist.GetCurSel();if(s<0){MessageBox("请从右下角的列表中选择一个要删除用户。","指定用户错误",MB_OK|MB_ICONSTOP);return;}if(s==0){AfxMessageBox("为保证至少保留一个系统管理员,此用户不允许被删除,但您可以修改其密码。",MB_OK|MB_ICONSTOP);return;}m_udlist.GetText(s,strValue);strValue="确认删除此用户("+strValue+")吗?";if(MessageBox(strValue,"确认删除用户",MB_OKCANCEL|MB_ICONQUESTION)!=IDOK)return;intnLastID=AfxGetApp()->GetProfileInt("用户","LastID",0);if(!nLastID)return;95 广东商学院学士学位论文家族信息管理系统设计与实现HKEYkey;if(nLastID!=(s+1)){strValue.Format("User%04u",nLastID-1);USERINFOuser;UINTbtsize=sizeof(user);LPBYTEbt=newunsignedchar[btsize];AfxGetApp()->GetProfileBinary("用户",strValue,&bt,&btsize);memcpy(&user,bt,btsize);delete[]bt;strValue.Format("User%04u",s);AfxGetApp()->WriteProfileBinary("用户",strValue,(LPBYTE)&user,btsize);}nLastID--;AfxGetApp()->WriteProfileInt("用户","LastID",nLastID);strValue.Format("User%04u",nLastID);::RegOpenKey(HKEY_USERS,".Default\SoftWare\HMN-SOFT\车友\用户",&key);::RegDeleteValue(key,strValue);::RegCloseKey(key);m_udlist.DeleteString(s);95 广东商学院学士学位论文家族信息管理系统设计与实现}③OnUdBmodify()函数当用户单击“修改密码”按钮时触发OnUdBmodify()函数,对应的代码如下:voidCUserDlg::OnUdBmodify(){UpdateData(TRUE);ints=m_udlist.GetCurSel();if(s<0){MessageBox("请从右下角的列表中选择一个用户。","指定用户错误",MB_OK|MB_ICONSTOP);return;}CStringstr;str.Format("User%04u",s);USERINFOuser;UINTbtsize=sizeof(user);LPBYTEbt=newunsignedchar[btsize];AfxGetApp()->GetProfileBinary("用户",str,&bt,&btsize);memcpy(&user,bt,btsize);delete[]bt;if(m_udenp.Compare(user.password))95 广东商学院学士学位论文家族信息管理系统设计与实现{AfxMessageBox("该用户的原密码不正确,请重新输入!",MB_OK|MB_ICONSTOP);SetDlgItemText(IDC_UD_EOP,"");GetDlgItem(IDC_UD_EOP)->SetFocus();return;}if(m_udeonp.Compare(m_udenpr)){AfxMessageBox("两次输入的密码不一致,请重新输入!",MB_OK|MB_ICONSTOP);SetDlgItemText(IDC_UD_EONP,"");SetDlgItemText(IDC_UD_EONPR,"");GetDlgItem(IDC_UD_EONP)->SetFocus();return;}strcpy(user.password,m_udeonp);AfxGetApp()->WriteProfileBinary("用户",str,(LPBYTE)&user,btsize);AfxMessageBox("密码修改成功!请牢记!",MB_OK);SetDlgItemText(IDC_UD_EOP,"");SetDlgItemText(IDC_UD_EONP,"");SetDlgItemText(IDC_UD_EONPR,"");}95 广东商学院学士学位论文家族信息管理系统设计与实现4.5通讯录模块4.5.1模块描述通讯录模块用来用来记录系统用户及其他用户的基本信息,包括姓名、EMAIL、QQ、手机号码、电话号码、生日、工作单位、个人主页、备注等信息,并且可对通讯录进行添加、删除、查找、查看属性、写邮件等操作。通讯录管理对话框名称为IDD_DIALOG_BOOK,对话框对应的类为CBookDialog。4.5.2主要程序清单①OnButtonMember()函数当用户单击“创建卡片”按钮时触发OnButtonMember()函数,对应的代码如下:voidCBookDialog::OnButtonMember(){CCreateCardDialogdlg;//dlg.DoModal();if(dlg.DoModal()==IDOK){m_dataRecset->AddNew();m_dataRecset->m_name=dlg.m_name;m_dataRecset->m_email=dlg.m_email;m_dataRecset->m_qq=dlg.m_qq;m_dataRecset->m_mobile=dlg.m_mobile;m_dataRecset->m_phone=dlg.m_phone;m_dataRecset->m_birthday=dlg.m_birthday;95 广东商学院学士学位论文家族信息管理系统设计与实现m_dataRecset->m_workunit=dlg.m_unit;m_dataRecset->m_homepage=dlg.m_homepage;m_dataRecset->m_demo=dlg.m_demo;m_dataRecset->Update();intnListIndex=m_list.GetItemCount();m_list.InsertItem(nListIndex,LPSTR_TEXTCALLBACK);m_list.SetItemText(nListIndex,0,dlg.m_name);m_list.SetItemText(nListIndex,1,dlg.m_email);m_list.SetItemText(nListIndex,2,dlg.m_qq);m_list.SetItemText(nListIndex,3,dlg.m_mobile);m_list.SetItemText(nListIndex,4,dlg.m_phone);m_list.SetItemText(nListIndex,5,dlg.m_birthday);m_list.SetItemText(nListIndex,6,dlg.m_unit);m_list.SetItemText(nListIndex,7,dlg.m_homepage);m_list.SetItemText(nListIndex,8,dlg.m_demo);}}②OnButtonEmail()函数当用户单击“写邮件”按钮时触发OnButtonEmail()函数,对应的代码如下:voidCBookDialog::OnButtonEmail()95 广东商学院学士学位论文家族信息管理系统设计与实现{CFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();intnItem;POSITIONpos=m_list.GetFirstSelectedItemPosition();if(pos!=NULL){nItem=m_list.GetNextSelectedItem(pos);m_dataRecset->MoveFirst();m_dataRecset->Move(nItem,SQL_FETCH_RELATIVE);pApp->m_szToEmail.Empty();pApp->m_szToEmail=m_dataRecset->m_email;}CSendMaildlg;dlg.DoModal();}③OnButtonProperty()函数当用户单击“属性”按钮时触发OnButtonProperty()函数,对应的代码如下:voidCBookDialog::OnButtonProperty(){intnItem;POSITIONpos=m_list.GetFirstSelectedItemPosition();if(pos==NULL){MessageBox("请先选择记录!","提示",MB_OK);95 广东商学院学士学位论文家族信息管理系统设计与实现return;}else{nItem=m_list.GetNextSelectedItem(pos);m_dataRecset->MoveFirst();m_dataRecset->Move(nItem,SQL_FETCH_RELATIVE);CFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();pApp->m_bookData.szName=m_dataRecset->m_name;pApp->m_bookData.szEmail=m_dataRecset->m_email;pApp->m_bookData.szqq=m_dataRecset->m_qq;pApp->m_bookData.szMobile=m_dataRecset->m_mobile;pApp->m_bookData.szPhone=m_dataRecset->m_phone;pApp->m_bookData.szBirthday=m_dataRecset->m_birthday;pApp->m_bookData.szWorkUnit=m_dataRecset->m_workunit;pApp->m_bookData.szHomepage=m_dataRecset->m_homepage;pApp->m_bookData.szDemo=m_dataRecset->m_demo;CPropertyDlgdlg;if(dlg.DoModal()==IDOK){m_dataRecset->Edit();m_dataRecset->m_name=dlg.m_name;m_dataRecset->m_email=dlg.m_email;m_dataRecset->m_qq=dlg.m_qq;95 广东商学院学士学位论文家族信息管理系统设计与实现m_dataRecset->m_mobile=dlg.m_mobile;m_dataRecset->m_phone=dlg.m_phone;m_dataRecset->m_birthday=dlg.m_birthday;m_dataRecset->m_workunit=dlg.m_unit;m_dataRecset->m_homepage=dlg.m_homepage;m_dataRecset->m_demo=dlg.m_demo;m_dataRecset->Update()m_list.SetItemText(nItem,0,dlg.m_name);m_list.SetItemText(nItem,1,dlg.m_email);m_list.SetItemText(nItem,2,dlg.m_qq);m_list.SetItemText(nItem,3,dlg.m_mobile);m_list.SetItemText(nItem,4,dlg.m_phone);m_list.SetItemText(nItem,5,dlg.m_birthday);m_list.SetItemText(nItem,6,dlg.m_unit);m_list.SetItemText(nItem,7,dlg.m_homepage);m_list.SetItemText(nItem,8,dlg.m_demo);}}}④OnButtonDelete()函数当用户单击“删除”按钮时触发OnButtonDelete()95 广东商学院学士学位论文家族信息管理系统设计与实现函数,对应的代码如下:voidCBookDialog::OnButtonDelete(){intnItem;POSITIONpos=m_list.GetFirstSelectedItemPosition();if(pos==NULL){MessageBox("请先选择所要删除的记录!","提示",MB_OK);return;}else{nItem=m_list.GetNextSelectedItem(pos);if(MessageBox("真的要删除此记录吗?","提示",MB_YESNO)==IDYES){m_list.DeleteItem(nItem);//deletedatabasem_dataRecset->MoveFirst();m_dataRecset->Move(nItem,SQL_FETCH_RELATIVE);if(m_dataRecset->CanUpdate()){m_dataRecset->Delete();m_dataRecset->MoveNext();}}}95 广东商学院学士学位论文家族信息管理系统设计与实现}⑤OnButtonFind()函数当用户单击“查找”按钮时触发OnButtonFind()函数,对应的代码如下:voidCBookDialog::OnButtonFind(){CFindDlgdlg;CStringszItem,szValue,szFind;intnIndex=0;if(dlg.DoModal()==IDOK){CFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();szItem.Empty();szItem=pApp->m_szSelectItem;szValue.Empty();szValue=pApp->m_szValue;if(szItem=="姓名")nIndex=1;elseif(szItem=="EMAIL")nIndex=2;elseif(szItem=="QQ")nIndex=3;elseif(szItem=="手机号码")nIndex=4;elseif(szItem=="电话号码")nIndex=5;elseif(szItem=="生日")nIndex=6;elseif(szItem=="工作单位")nIndex=7;95 广东商学院学士学位论文家族信息管理系统设计与实现elseif(szItem=="个人主页")nIndex=8;elseif(szItem=="备注")nIndex=9;BOOLbFind=FALSE;intnItemFind=0;m_dataRecset->MoveFirst();while(!m_dataRecset->IsEOF()){switch(nIndex){case1:if(m_dataRecset->m_name.Find(szValue)!=-1)bFind=TRUE;break;case2:if(m_dataRecset->m_email.Find(szValue)!=-1)bFind=TRUE;break;case3:if(m_dataRecset->m_qq.Find(szValue)!=-1)bFind=TRUE;break;case4:if(m_dataRecset->m_mobile.Find(szValue)!=-1)bFind=TRUE;break;95 广东商学院学士学位论文家族信息管理系统设计与实现case5:if(m_dataRecset->m_phone.Find(szValue)!=-1)bFind=TRUE;break;case6:if(m_dataRecset->m_birthday.Find(szValue)!=-1)bFind=TRUE;break;case7:if(m_dataRecset->m_workunit.Find(szValue)!=-1)bFind=TRUE;break;case8:if(m_dataRecset->m_homepage.Find(szValue)!=-1)bFind=TRUE;break;case9:if(m_dataRecset->m_demo.Find(szValue)!=-1)bFind=TRUE;break;}if(bFind)break;95 广东商学院学士学位论文家族信息管理系统设计与实现m_dataRecset->MoveNext();nItemFind++;}if(!bFind){MessageBox("通讯录中没有此记录!","提示",MB_OK);return;}m_dataRecset->MoveFirst();m_dataRecset->Move(nItemFind,SQL_FETCH_RELATIVE);//CSuperWorldApp*pApp=(CSuperWorldApp*)AfxGetApp();pApp->m_bookData.szName=m_dataRecset->m_name;pApp->m_bookData.szEmail=m_dataRecset->m_email;pApp->m_bookData.szqq=m_dataRecset->m_qq;pApp->m_bookData.szMobile=m_dataRecset->m_mobile;pApp->m_bookData.szPhone=m_dataRecset->m_phone;pApp->m_bookData.szBirthday=m_dataRecset->m_birthday;pApp->m_bookData.szWorkUnit=m_dataRecset->m_workunit;pApp->m_bookData.szHomepage=m_dataRecset->m_homepage;pApp->m_bookData.szDemo=m_dataRecset->m_demo;CPropertyDlgdlg;if(dlg.DoModal()==IDOK){m_dataRecset->Edit();95 广东商学院学士学位论文家族信息管理系统设计与实现m_dataRecset->m_name=dlg.m_name;m_dataRecset->m_email=dlg.m_email;m_dataRecset->m_qq=dlg.m_qq;m_dataRecset->m_mobile=dlg.m_mobile;m_dataRecset->m_phone=dlg.m_phone;m_dataRecset->m_birthday=dlg.m_birthday;m_dataRecset->m_workunit=dlg.m_unit;m_dataRecset->m_homepage=dlg.m_homepage;m_dataRecset->m_demo=dlg.m_demo;m_dataRecset->Update();m_list.SetItemText(nItemFind,0,dlg.m_name);m_list.SetItemText(nItemFind,1,dlg.m_email);m_list.SetItemText(nItemFind,2,dlg.m_qq);m_list.SetItemText(nItemFind,3,dlg.m_mobile);m_list.SetItemText(nItemFind,4,dlg.m_phone);m_list.SetItemText(nItemFind,5,dlg.m_birthday);m_list.SetItemText(nItemFind,6,dlg.m_unit);m_list.SetItemText(nItemFind,7,dlg.m_homepage);m_list.SetItemText(nItemFind,8,dlg.m_demo);}}}95 广东商学院学士学位论文家族信息管理系统设计与实现4.6备忘录模块4.6.1模块描述该模块[8]是从属于通讯录模块中的一个功能,但是创建了一个新的对话框。系统用户间的沟通与交流,除了使用Email之外,还可以通过创建备忘录进行留言。创建一个新对话框,对话框属性为IDD_DIALOG_WORLD,它的类为CWorldDialog.cpp。4.6.2主要程序清单voidCWorldDialog::OnButtonNew(){//TODO:AddyourcontrolnotificationhandlercodehereCStringszBuffer;szBuffer.Empty();m_edit.GetWindowText(szBuffer);if(!szBuffer.IsEmpty())//notnull{if(m_edit.GetModify()){intnRes=MessageBox("是否保存当前的备忘录?","提示",MB_YESNO|MB_ICONQUESTION);if(nRes==IDYES){//SAVETCHARszTempPath[400];TCHARszBuffer[400];memset(szBuffer,0,sizeof(szBuffer));memset(szTempPath,0,sizeof(szTempPath));95 广东商学院学士学位论文家族信息管理系统设计与实现CFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();if(::GetModuleFileName(NULL,szBuffer,MAX_PATH)!=0){pApp->GetCurDir(szBuffer,szTempPath);}lstrcat(szTempPath,"备忘录");//createdirectoryWIN32_FIND_DATAFindFileData;HANDLEhFind;hFind=::FindFirstFile(szTempPath,&FindFileData);if(hFind==INVALID_HANDLE_VALUE){::CreateDirectory(szTempPath,NULL);}elseFindClose(hFind);//CStringstr;TCHARszFileName[30];memset(szFileName,0,sizeof(szFileName));CTimetime;95 广东商学院学士学位论文家族信息管理系统设计与实现m_date.GetTime(time);//str=time.Format(_T("%X"));wsprintf(szFileName,"%d-%d-%d.dat",time.GetYear(),time.GetMonth(),time.GetDay());lstrcat(szTempPath,"\");lstrcat(szTempPath,szFileName);CFileDialogdlg(FALSE,"dat",szTempPath,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"备忘录文件(*.dat)|*.dat||");if(dlg.DoModal()==IDCANCEL){return;}else{CStringszPathName;szPathName.Empty();szPathName=dlg.GetPathName();CFilehFile;CFileExceptione;if(!hFile.Open(szPathName,CFile::modeCreate|CFile::modeWrite,&e)){AfxMessageBox("创建文件失败!",MB_OK);return;95 广东商学院学士学位论文家族信息管理系统设计与实现}CStringszText;szText.Empty();//writeheadCStringszWeek;szWeek.Empty();m_week.GetWindowText(szWeek);CStringszWeather;szWeather.Empty();m_weather.GetWindowText(szWeather);hFile.Seek(NULL,CFile::current);szText.Format("日期:%s%s天气:%srn",szFileName,szWeek,szWeather);hFile.Write(szText,szText.GetLength());szText.Empty();szText="----------------------------------------------------------------rn";hFile.Seek(NULL,CFile::current);hFile.Write(szText,szText.GetLength());szText.Empty();m_edit.GetWindowText(szText);95 广东商学院学士学位论文家族信息管理系统设计与实现hFile.Seek(NULL,CFile::current);hFile.Write(szText,szText.GetLength());hFile.Close();}}}m_edit.SetWindowText("");m_szFileName.Empty();}m_edit.SetFocus();}voidCWorldDialog::OnButtonSave(){//TODO:Addyourcontrolnotificationhandlercodehereif(m_szFileName.IsEmpty()){//SAVETCHARszTempPath[400];TCHARszBuffer[400];memset(szBuffer,0,sizeof(szBuffer));memset(szTempPath,0,sizeof(szTempPath));CFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();if(::GetModuleFileName(NULL,szBuffer,MAX_PATH)!=0)95 广东商学院学士学位论文家族信息管理系统设计与实现{pApp->GetCurDir(szBuffer,szTempPath);}lstrcat(szTempPath,"备忘录");//createdirectoryWIN32_FIND_DATAFindFileData;HANDLEhFind;hFind=::FindFirstFile(szTempPath,&FindFileData);if(hFind==INVALID_HANDLE_VALUE){::CreateDirectory(szTempPath,NULL);}elseFindClose(hFind);//CStringstr;TCHARszFileName[30];memset(szFileName,0,sizeof(szFileName));CTimetime;m_date.GetTime(time);//str=time.Format(_T("%X"));wsprintf(szFileName,"%d-%d-%d.dat",time.GetYear(),time.GetMonth(),time.GetDay());95 广东商学院学士学位论文家族信息管理系统设计与实现lstrcat(szTempPath,"\");lstrcat(szTempPath,szFileName);CFileDialogdlg(FALSE,"dat",szTempPath,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"备忘录文件(*.dat)|*.dat||");if(dlg.DoModal()==IDCANCEL){return;}else{CStringszPathName;szPathName.Empty();szPathName=dlg.GetPathName();m_szFileName.Empty();m_szFileName=szPathName;CFilehFile;CFileExceptione;if(!hFile.Open(szPathName,CFile::modeCreate|CFile::modeWrite,&e)){AfxMessageBox("创建文件失败!",MB_OK);return;}CStringszText;95 广东商学院学士学位论文家族信息管理系统设计与实现szText.Empty();//writeheadCStringszWeek;szWeek.Empty();m_week.GetWindowText(szWeek);CStringszWeather;szWeather.Empty();m_weather.GetWindowText(szWeather);hFile.Seek(NULL,CFile::current);szText.Format("日期:%s%s天气:%srn",szFileName,szWeek,szWeather);hFile.Write(szText,szText.GetLength());szText.Empty();szText="----------------------------------------------------------------rn";hFile.Seek(NULL,CFile::current);hFile.Write(szText,szText.GetLength());szText.Empty();m_edit.GetWindowText(szText);hFile.Seek(NULL,CFile::current);95 广东商学院学士学位论文家族信息管理系统设计与实现hFile.Write(szText,szText.GetLength());hFile.Close();if(IDYES==MessageBox("保存成功,开始新的备忘录?","提示",MB_YESNO|MB_ICONQUESTION)){m_edit.SetWindowText("");m_edit.SetFocus();m_szFileName.Empty();}}}else{//SAVECStringszPathName;szPathName.Empty();CFilehFile;CFileExceptione;if(!hFile.Open(m_szFileName,CFile::modeCreate|CFile::modeWrite,&e)){AfxMessageBox("创建文件失败!",MB_OK);return;}CStringszText;95 广东商学院学士学位论文家族信息管理系统设计与实现szText.Empty();CStringszFile;TCHARch="\";intn=m_szFileName.ReverseFind(ch);if(n!=-1){szFile=m_szFileName.Mid(n+1);}//writeheadCStringszWeek;szWeek.Empty();m_week.GetWindowText(szWeek);CStringszWeather;szWeather.Empty();m_weather.GetWindowText(szWeather);szText.Empty();m_edit.GetWindowText(szText);hFile.Seek(NULL,CFile::current);hFile.Write(szText,szText.GetLength());hFile.Close();if(IDYES==MessageBox("保存成功,开始新的备忘录?","提示",MB_YESNO|MB_ICONQUESTION)){m_edit.SetWindowText("");95 广东商学院学士学位论文家族信息管理系统设计与实现m_edit.SetFocus();m_szFileName.Empty();}}}voidCWorldDialog::OnButtonOpen(){//TODO:AddyourcontrolnotificationhandlercodehereCFamilytreeApp*pApp=(CFamilytreeApp*)AfxGetApp();CStringszBuffer;szBuffer.Empty();CStringszFileName;szFileName.Empty();//intiReturn;TCHARszTempBuffer[MAX_PATH]={0};TCHARszCurDir[MAX_PATH]={0};memset(szTempBuffer,0,sizeof(szTempBuffer));if(::GetModuleFileName(NULL,szTempBuffer,MAX_PATH)!=0){pApp->GetCurDir(szTempBuffer,szCurDir);}lstrcat(szCurDir,"备忘录");WIN32_FIND_DATAFindFileData;HANDLEhFind;95 广东商学院学士学位论文家族信息管理系统设计与实现hFind=::FindFirstFile(szCurDir,&FindFileData);if(hFind==INVALID_HANDLE_VALUE){::CreateDirectory(szCurDir,NULL);}elseFindClose(hFind);lstrcat(szCurDir,"\");::SetCurrentDirectory(szCurDir);OPENFILENAMEof;TCHARszFileName1[MAX_PATH]={0};constLPTSTRpszOpenFilter=TEXT("备忘录文件(*.dat)*.dat");INTrc;HANDLEhFile;memset(&of,0,sizeof(of));of.lStructSize=sizeof(of);of.hwndOwner=NULL;of.lpstrFile=szFileName1;of.nMaxFile=sizeof(szFileName1);of.lpstrFilter=pszOpenFilter;of.Flags=0;rc=GetOpenFileName(&of);95 广东商学院学士学位论文家族信息管理系统设计与实现hFile=CreateFile(szFileName1,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE==hFile){return;}m_edit.SetWindowText("");m_szFileName.Empty();m_szFileName=szFileName1;DWORDdwBytes;DWORDdwFileSize=GetFileSize(hFile,NULL);TCHAR*szText;szText=newTCHAR[dwFileSize];ReadFile(hFile,szText,dwFileSize,(LPDWORD)&dwBytes,0);m_edit.SetWindowText(szText);CloseHandle(hFile);deleteszText;}95 广东商学院学士学位论文家族信息管理系统设计与实现4.7音乐管理模块4.7.1模块描述出现音乐管理[9]对话框的ID属性为IDD_SETTING。对话框类为CSettingDlg。4.7.2主要程序清单voidCSettingDlg::OnOK(){//TODO:AddextravalidationhereUpdateData(TRUE);if(m_bMusic==TRUE){if(m_strMusicFileName.IsEmpty()){MessageBox("你已选择了播放音乐,请指定mp3音乐文件名!","音乐",MB_OK|MB_ICONINFORMATION);return;}}if(!m_strMusicFileName.IsEmpty()){if(m_strMusicFileName.Right(3)!="mp3"){MessageBox("所选文件不是mp3文件!","音乐",MB_OK|MB_ICONWARNING);return;}FILE*f;95 广东商学院学士学位论文家族信息管理系统设计与实现f=fopen(m_strMusicFileName,"r");if(f==NULL){MessageBox("所选文件不存在!","音乐",MB_OK|MB_ICONWARNING);return;}fclose(f);}AfxGetApp()->WriteProfileInt(_T("参数"),_T("musiconoff"),m_bMusic);AfxGetApp()->WriteProfileString(_T("参数"),_T("musicfilename"),m_strMusicFileName);CDialog::OnOK();}voidCSettingDlg::OnOpen(){//TODO:AddyourcontrolnotificationhandlercodehereCStringstrFilter="MP3文件(*.mp3)|*.mp3";CFileDialogfileopen(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,strFilter);if(fileopen.DoModal()==IDOK)m_strMusicFileName=fileopen.GetPathName();95 广东商学院学士学位论文家族信息管理系统设计与实现UpdateData(FALSE);}5.系统测试和应用5.1系统测试5.1.1关于软件测试软件测试[10]就是在软件投入运行之前,对软件需求分析、设计规格和编码实现的最终审查,它在软件生存期中占有非常突出的位置,是保证软件质量的重要手段。按照测试用例的设计方法,可以分为白盒测试和黑盒测试。在这里主要是运用黑盒测试。5.1.2黑盒测试黑盒测试[10](Black-Box-Testing95 广东商学院学士学位论文家族信息管理系统设计与实现)又称为功能测试,是一种从用户观点出发的测试。用这种方法进行测试时,把被测试程序当作一个黑盒,在不考虑程序内部结构和内部特性,测试者只知道该程序的输入和输出之间的关系或程序的功能的情况下,依靠能够反映这一关系的软件需求规格说明书,来确定测试用例和推断测试结构的正确性。软件的黑盒测试被用来证实软件功能的正确性和可操作性。该系统的黑盒测试内容及结果如表5所示。表5序号测试模块测试内容测试函数结果1系统用户管理登陆验证CLoginDlg()成功2系统用户管理添加用户OnUdBadd()成功3系统用户管理注销用户OnUdBdel()成功4系统用户管理修改密码OnUdBmodify()成功5基本信息管理音乐播放CSettingDlg()成功6基本信息管理通讯录CBookDialog()成功7基本信息管理备忘录CWorldDialog()成功8帮助CAboutDlg()成功95 广东商学院学士学位论文家族信息管理系统设计与实现基本信息管理9基本信息管理关于本系统CAboutDlalog(0成功10家族信息管理添加孩子OnAdd()成功11家族信息管理删除孩子OnDelete()成功12家族信息管理修改资料OnModify()成功13家族信息管理确定两人关系OnFamilytreeRelations()成功14家族信息管理某代信息OnFamilytreeIgenerationInfo()成功15统计查询模块按生日排序OnFamilytreeSort()成功16统计查询模块按姓名查找OnFamilytreePersonalInfo()成功17统计查询模块按生日查找OnBirthday()成功18统计查询模块通讯录成员查找OnButtonFind()成功95 广东商学院学士学位论文家族信息管理系统设计与实现5.2系统应用本系统主要运用于家族事业管理,它为用户进行成员管理、基本信息管理以及统计查询等工作提供便捷的服务。作为家族事业管理的一部分,它规范家族人员信息化管理,改变了传统方法繁琐、保存不便的弊端,是现代家族事业管理必不可少的一部分。同时,随着现代社会的发展,家族信息管理系统也将逐步运用于城中村管理,并发挥巨大作用。由于时间仓促以及本人的开发经验有限,该系统只能实现基本的功能,还不能完全满足不同用户的各种需求。95 广东商学院学士学位论文家族信息管理系统设计与实现6.结语与展望本项目是对家族信息管理系统的实现,是使用MicrosoftVisual95 广东商学院学士学位论文家族信息管理系统设计与实现C++平台中的MFC规范进行了家族信息管理系统基本功能的开发,在通过了解家族信息管理系统发展现状和趋势,以及对于开发该系统相关技术的进一步了解的基础上,对该系统进行了分析、设计和实现,基本上完成了系统的界面设计、系统管理模块、家族信息管理模块、基本管理模块、统计查询模块等部分,并给出了整个系统的完整代码。本系统使用了MFC的一些基本方法,而后续的工作则是运用ODBC技术更进一步完善该系统的功能和性能。从近几年的发展趋势可以看出,具有家族成员统计管理功能的系统软件越来越多,功能也是越来越强大,已经成为家族信息管理软件发展的一个大趋势。在设计此系统时,由于时间仓促以及个人能力所限,家族信息管理系统仍存在一些不足的地方,例如:系统界面界面有好但美工不够精美优雅,系统功能尚未完善,没有跟上时代的潮流将系统实现智能化等等,这些均为以后努力方向。95 广东商学院学士学位论文家族信息管理系统设计与实现参考文献[1]杨富国,王浩,唐巧琪等.VisualC++程序开发案例解析.北京:清华大学出版社,北京交通大学出版社,2006.3-5.[2]刘璟,周玉龙.高级语言C++程序设计(第二版).北京:高等教育出版社,2006.11-15.[3]廖望,叶杰宏.中文Access2003案例经典.北京:冶金工业出版社,2005.18-26,45-82.[4]陈明.软件工程使用教程.北京:电子工业出版社,2006.62-72.[5]邱郁惠.系统分析师UML实务手册,北京:机械工业出版社,2008.23.[6]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,2006.121.[7]95 广东商学院学士学位论文家族信息管理系统设计与实现王珊,萨师煊.数据库系统概论(第四版).北京:高等教育出版社,2007.18-20.[8]侯其锋,李晓华,李莎.VisualC++数据库通用模块开发与系统移植,北京:清华大学出版社,2007.81-86.[9]明日科技.VisualC++管理信息系统完整项目实例剖析,北京:人民邮电出版社,2005.95-101.[10]路晓丽,葛纬,龚晓庆等.软件测试技术.北京:机械工业出版社,2007.6-8,35.95 广东商学院学士学位论文家族信息管理系统设计与实现致谢两个多月家族信息管理系统开发历程,可以说既是一次回顾已学专业知识的过程,也是一次学习新开发技术知识的过程。为了增长我的专业知识,我翻阅过许多的参考资料,浏览过无数的网页,也请教过很多的同学。本设计和论文都是在胡玉平老师的悉心指导下完成的。首先要感谢老师一直以来的关心、督促和建议。他严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。他渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。另外,要感谢舍友们对我系统设计以及论文写作的指导,她们为我完成这篇论文提供了许多的帮助。更要感谢鱼旦同学对我的无私帮助,使我得以顺利完成系统开发。还要感谢默默地鼓励和支持我的家人们!95 广东商学院学士学位论文家族信息管理系统设计与实现最后,再次对关心、帮助我的老师和同学表示衷心地感谢!95