




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要I第一章 绪论11.1管理信息系统概述11.2系统背景2第二章系统分析32.1需求分析3第三章 系统设计83.1系统总体结构设计83.2数据库简介10第四章系统模型构建124.1 系统结构设计124.2数据存储设计16第五章系统实现185.1各模块程序设计说明185.2问题分析215.2.1应用系统维护22附录:27源码:27参考文献37 摘要球队信息管理系统在VC6.0环境下,用纯C语言编写。采用结构化软件工程的方法。,每个功能模块对应一个.c文件和一个或多个函数。有一个com.c的文件,其中有8个公用的函数。有一个common.h的头文件,有链表结点结构体的定义以及函数的原型说明,以及系统数据文件存储路径。该系统作为一种一般的数据检索和排序方式,有着较高的实用价值。该系统具有将输入的数据(球员姓名、员工号、薪水、角色等各项基本信息)以文件形式保存、根据员工号或者姓名查询相关人员的信息、根据球员姓名和薪水进行排序的功能、能够统计出球队的人数及薪水总额等信息,并为用户提供简单易操作的人机界面。球队信息管理系统实现对一个球队的各类人员的相关信息进行输入、输出、查询等操作。能够通过主界面进入到各个不同的子案例的功能中,并可以正确实现各操作,易于使用,提高工作效率,给管理用户带来轻松的感受。关键词:C语言 结构化软件工程 流程图 功能介绍I第一章 绪论1.1管理信息系统概述该系统要最终实现管理队员从入队到退队期间的信息管理,包括球员的基本情况,比赛,工资,机构设置等综合信息,并将球队工作管理各部门连成一个完整的数据整体,实现信息高度共享。建成一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的球队管理信息系统。建立一个集球队信息自动化和信息化为一体的先进的电脑网络系统,在为管理工作有关部门提供优质、高效的业务管理和事务处理的同时,采用安全可靠的现代化处理和控制技术,及时、准确、可靠地采集和传输信息,建立完备、可靠的信息处理系统。对各部门实现统一的信息浏览、管理。借助于球队管理信息系统的建设,促进管理人员素质的提高,通过管理人员的实际应用,促进球队管理工作的水平和效率的提高;通过提供多层次的信息服务和先进实用的使用手段,满足球队内外内外对信息共享和利用的要求,并为各级领导提供有效的辅助决策服务。应用系统的设计符合日常办公运作的需求,功能完备实用,简单易学,界面友好清晰,易于扩充。网络结构简单明了,层次清楚,便于管理,易于扩充。在球队管理信息标准化、规范化的基础上,对信息进行合理的布局。本系统的建设目标是否能实现,系统整个投资能否发挥应有的效益,最终将取决于该系统是否可靠实用。为此,系统应采用成熟可靠的技术,应贯彻产品化的设计原则和实施方法。同时,系统的起点要高,而不是基于淘汰的技术,系统的建立应适应未来技术发展的趋势。1.2系统背景足球作为世界第一运动,已经吸引了原来越多的人的关注,参与。各种俱乐部的成立在很大程度上促进了足球的发展,以及职业化,现在足球已经成为一种产业,而运动员是足球的核心,因此球队中对运动员的科学化管理,已经成为一种必需,科学化,人性化的管理可以增强他们的责任感,刺激他们的比赛热情,减少优秀运动员的流失,以及吸引顶尖球星的到来,对于一支稳定的球队,需要一套科学的系统来记录,分析统计球员的信息和状态,给予他们客观的评价。球队管理系统具有这些的功能,1、球员信息:它可以可以查看,修改,删除球员的各种信息。2. 比赛日程:查看比赛日程,包括具体比赛时间,对阵双方,以及比赛的性质。也可以编辑比赛日程。3. 工资管理:查看球员的工资包括基本工资,奖金等。4.添加、编辑比赛记录。5. 机构设置:查看整个球队的机构设置,比如总经理、主教练、队医等。通过统计分析方法,结合球员的状况和足球的规律性,发现问题,辅助球队管理。尽管足球运动中变化和偶然性占有一定比重,但其内部的规律是不可否认的,我国的足球产业还不发达,这不是一朝一夕可以提高的,因此必须从科学化管理出发,才能逐步提高俱乐部的比赛成绩,以及运作,从而提高整个产业的发展。要建立这个管理系统,需要经过从零开始的分析,了解现有的工作流程,并将其人工操作事物流程用计算机来实现,信息管理系统的设计本身就是一项负责的系统工程,要制定规划,成立强有力的实施机构,加强对相关人员的培训教育,制订并执行严格的管理制度,球队管理的工作量大,而系统的可靠性,稳定性,安全性都至关非常重要。第二章系统分析2.1需求分析实际问题的第一次抽象对于一支球队来说,他要管理球队的球员信息,包括姓名,年龄,国籍,性别,联系方式,图片,身高,体重等。球队要参加比赛,因此比赛日程肯定要考虑,比赛性质又包括友谊赛,联赛,杯赛。为了提醒管理者,倒计时的设计是很必要的;另外就是工资管理,一个球员的工资包括基本工资跟奖金,而奖金又包括进球奖金,比赛奖金及其他奖金,因此工资跟比赛的结果密切相关,我们要在数据库中添加比赛记录。最后就是机构管理,球队的机构设置及负责人的各种信息。捕获功能需求USE CASE 图一个USE CASE规约了系统可以执行的一个动作(action)序列,包括一些可能的变化,并对特定的操作者(actor)产生可见的 ,有值的结果。进入球员信息系统进入比赛日程管理系统进入工资管理系统进入机构设置系统管理员球员球队管理系统职员图2-1 USE CASE 图管理员球员进入系统双击球员名字球员管理系统修改球员信息添加球员信息删除球员信息图2-2 球员信息用况图察看日程表比赛日程管理添加日程修改日程删除日程管理员比赛委员会察看比赛倒计时图2-3 比赛日程用况图添加比赛结果察看球员奖金修改球员工资编辑球员工资添加球员工资工资管理系统管理员球员图2-4 工资管理用况图察看球对职务编辑球队职务删除球队职务添加球队职务管理员职 员职务管理系统图2-5 机构设置用况图第三章 系统设计3.1系统总体结构设计该系统采用面向对象方法,面向对象方法把世界看成是独立对象的集合,对象将数据和操作封装在一起,提供有限的接口,其内部的实现细节、数据结构及他们的操作是外部不可见的,对象之间通过消息相互通信,面向对象的方法具有的继承性和封装性支持软件复用,并易于扩充,能较好的适应复杂大系统不断发展和变化的要求。面向对象方法分析阶段的五个主要活动及其内容:标识类及对象、标识结构、标识主体、定义属性及实例连接、定义服务及消息连接。 面向对象设计(OOD):OOD分为四部分,问题域部分,保持系统总体结构的稳定性,人机交互部分,任务管理部分,简化总体设计和编码,数据管理部分,包括数据存放方法的设计和相应服务的设计。该系统采用UML建模,UML对象模型在本质上只是一个扩展的实体-关系(ER)模型ii。用来设计数据库的ER模型的方式受到普遍接受,而我们使用一种近似的但更强大的方式使用UML对象模型。OO模型的主要优势在于编程和数据库使用相同的模型工作。而且,作为考虑功能性的一种方式,强调OO模型的导航。我们为每个表定义一个主键,所有的外键都只指向主键而不是其他后选键。属性类型是UML术语,比起直接用数据类型,域提升到更一致的设计,并便利了应用的定位。简单域很容易实现。仅仅定义相应的数据类型和大小。并且每个用了域的属性,都必须为每个域约束加入一条SQL检查子句。简单域的一些例子是:名字(name),长字符(longString)和电话号码(phone-Number)。一个枚举域把一个属性限制在一系列的值里。枚举域比简单域实现起来更复杂,有图1的四个方法。实现方法优势劣势建议枚举字符。定义一条SQL检查约束,把该枚举限制在允许的值里。简单。受控的方便搜索的词汇表。大的枚举难以使用检查。约束难以编码。我们正常地选择。每个枚举值一个标记。为每个枚举的值定义一个布尔型属性。回避命名的难处。冗长 每个值一个属性。当枚举值不是互相排斥的并且多个值可能同时地应用时使用。枚举表。把枚举定义存储到一个表里。不是每个枚举一个表,也不是所有的枚举一个表。高效地处理大的枚举。不用改变应用的代码就可以定义新的枚举值偶尔使用时很麻烦。必须编写通用的软件来阅读枚举表和加强值。适合大的枚举和没有结尾(open-ended)的枚举。枚举编码。把枚举值编码作为有序的数字。节省磁盘空间。有助于用多种语言处理。大大地复杂化了维护和调试。避免使用,除非你要用多种语言处理。图3-1 枚举的实现方法。UML对象约束语言(Object Constraint Language,OCL)有助于表达遍历。点符号导航从对象到对象和对象到属性,方括号表示对象集合的过滤器。我们加入冒号(:)操作符来表示泛化的遍历;因为我们用多个表来实现一个泛化继承,清楚的遍历很有用。3.2数据库简介与程序流程有关的状态信息使用域进行限制和定义,不允许最终用户修改定义用户可修改的状态列表信息,用数据表来定义,一经创建后,用户只可修改名称,不能修改代码,修改后的名称与原名称应代表相同的意义。用户采用列表录入的文字信息,在一个统一的系统信息表中定义,用户可任意创建和修改。用此种方法录入的信息,录入的信息与选择列表不存在约束关系,列表只是作为文字录入的一种辅助手段。辅助编码表应至少有两列代码和名称。只有在名称非常稳定的情况下才可以不使用代码。使用编码表的好处是在应用程序界面中,不同的地方出现同一种数据的录入(如录入数据或查询过滤条件)时只需定义一次选择列表,不会出现两处冲突的现象,方便编程。系统信息表:TS_基本编码表:TB_决策数据表:TD_业务数据表:不同的业务以不同的缩写(2-3个字符)开始,如TCRM_;如是辅助编码表则在代表业务的缩写后加A_,如TCRM_A_。关联数据表:TRE_表A_表B视图:在表命名的基础上加前缀改为V_后缀:主-明细结构的表,主表为_M;明细表为_L单词首写字母要大写,多个单词间不用任何连接符号如:TCRM_UserType注意:尽量写好列“描述” 第一个字母小写,后面的单词或拼音,采用第一个字母大写,命名规则只来自于业务,尽量表达出列的含义过程:SP_函数:FN_触发器:TR_表名_后面插入加I,修改加U,删除加D,操作前触发器(INSTEADOF):TR_表名_OF后面插入加I,修改加U,删除加D自定义数据类型:UD_默认:DF_,对于非绑定的默认可取系统默认的名字规则:RU_,对于非绑定规则(约束)可取系统默认的名字主键:PK_表名外键关系:FK_主表_从表索引:ID_列名,符合索引列名间用_隔开第四章系统模型构建 4.1 系统结构设计对所有球队球员建立信息,生成球员基础信息表,表名为playerinf。该系统是整个管理系统的基础。有权限的管理人员并可以对其进行增加、删除、修改工作。球员只能修改自己少数经常变动的信息。对数据来源:组织人员手工录入。包括查看和编辑比赛日程,倒计时。1) 比赛日程包括具体比赛时间,对阵双方,以及比赛的性质,数据主要手工输入2) 倒计时则是当前日期跟最近的一场比赛的日期进行比较的出一个时间,并且显示出来。3) 对于球员,只能查询自己的信息。4) 有权限的管理人员可以对其进行增添,删除,修改。对数据来源:组织人员手工录入。主要包括基本工资管理和比赛结果管理1)管理人员可以对基本工资管理进行添加和编辑,删除。数据主要手工输入。2)奖金与出场记录,进球记录,比赛结果,其他奖金相关,并根据一个计算公式来计算。3)对于球员,只能查询自己的信息。对数据来源:组织人员手工录入。主要对整个球队中机构的设置,包括对总经理,主教练,队医等信息的添加,编辑和删除。1)重要包括球队机构中其他人员的基本信息,包括职务,姓名,电话和邮箱。2)有权限的管理员可以对其进行添加,编辑和删除。3)球队无权限的人员只能查询信息。对数据来源:组织人员手工录入。类图描述系统中类的静态结构,在系统的整个生命周期中有效。类图定义了系统的类,表示一组类、界面、合作以及它们之间的关系,如关联、依赖、继承等,也包括类的内部结构(类的属性和操作)。球员信息管理ID,姓名,出生日期,籍贯,身高,体重,移动电话,邮箱,场上位置,性别,照片显示信息,编辑信息,添加信息,打开图片,修改图片,删除信息图3-1 球员信息管理类图日程管理比赛时间,比赛地点,比赛双方,比赛性质,编号显示未比赛的赛程,修改赛程,添加赛程,删除赛程,显示比赛倒计时图3-2 日程管理类图图3-2 比赛日程管理类图工资管理基本工资,总奖金,射手榜显示基本工资,计算总奖金,添加比赛结果,编辑基本工资,添加基本工资,删除基本工资,计算射手榜图3-3 工资管理类图机构管理职务,姓名,电话,邮箱显示信息,编辑信息,添加信息,删除信息图3-4 机构管理类图绘制对话框的背景色,在按钮中填充颜色,绘制按钮轮廓,实现按钮突起效果,设置按钮上的字体颜色,获取前景色,获取背景色按钮颜色,按纽上的字体颜色,前景色,背景色。CColorButtonADO连接(CProcessData)_ConnectionPtr_RecordsetPtr建立连接,打开连接,取得记录集图3-5 ADO连接类图 图3-6 CColorButton类图4.2数据存储设计说明:1列表中的1为主键,2为外键;2列表中的1表示可为空,0表示非空其中m_ID为四位表3-2 Playerinf数据表键球员基本信息表空描述1m_ID0球员编号2m_name0球员名字0m_jiguan球员籍贯0m_email球员邮箱0m_shengao球员身高0m_sex球员性别0m_tizhong1球员体重0m_weizhi球员位置0m_datetime球员出生日期0m_telephone0球员电话 表3-3 duty数据表0m_dutyposition1职务1m_dutyname10名字0m_dutytelephone10电话号码0m_dutyemail11邮箱表3-4 Calenderinf数据表0m_bisaiSF0比赛双方球队0m_bisaiXZ比赛性质0m_bisaiDD0比赛地点0m_Time22比赛日期1m_bisaiBH0编号表3-5 Jibensalary数据表1m_name110球员名字0m_salary11球员基本工资Salary1m_Addresultname110球员姓名0m_Addresultgoal11进球0m_Addreusltjieguo11比赛结果0m_Addresultchuchang11出场记录0m_Addresultelse111球员其他奖金0m_time1230比赛时间图3-5 系统初始界面第五章系统实现5.1各模块程序设计说明因为各模块的程序代码较多,下面只列出球员信息模块的程序设计。新建一个对话框,添加对话框变量playerInfDlg,在对话框上添加一个Tree View Control控件,为期添加CTreeCtrl类型变量 m_playerTree,在对话框中添加9个Edit Control控件,在添加 一个Button按钮。为了查看信息的方便,我们在初始化函数将球员的名字都显示在CListTree中,而以后编辑球员信时,都要更新树中的数据,因此通过建立一个函数UpdateRecord(),此函数的功能是读出数据集中的数据将球员名字显示在数中当记录集中的球员名字初始化到树中的时候,通过双击球员名字,就可以在在旁边的编辑框中显示出来,其中图片的显示是重点。函数代码如下:void playerInfDlg:OnPaint() CPaintDC dc(this); / device context for paintingif (IsIconic()SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();if (m_Bitmap.GetSafeHandle() != NULL)CDC memDC;BITMAP bm;m_Bitmap.GetBitmap(&bm);memDC.CreateCompatibleDC(&dc);CBitmap *oldbitmap = memDC.SelectObject(&m_Bitmap);dc.BitBlt(370, 35, 175, 160, &memDC, 0, 0, SRCCOPY);memDC.SelectObject(oldbitmap);使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示: 代码1:用#import引入ADO库文件 #import c:program filescommon filessystemadomsado15.dll no_namespaces rename(EOF adoEOF) 这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。 4.2.1.2 初始化OLE/COM库环境 必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。 代码2:初始化OLE/COM库环境 BOOL CTeamadmApp:InitInstance() if(!AfxOleInit() AfxMessageBox(“OLE初始化出错!”); return FALSE; 函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。 同DAO和CDatabase一样,ADO由几个接口组成: _ConnectionPtr,_CommandPtr和_RecordsetPtr.5.2问题分析数据库系统维护服务由五部分构成:监控服务,数据备份,安全管理,性能调整,故障排除。可进行紧急情况监测的服务包括:网络连接监控,数据库应用是否正常运行,数据完整性。1.2 数据库备份和恢复:系统备份,数据库的备份,数据库的恢复。1.3 安全管理:数据库系统漏洞的修补,服务漏洞的修补,系统访问管理,服务访问管理。1.4. 性能调整:针对数据库系统:主要包括CPU/内存使用状况、优化数据库设计、优化数据库管理、以及进程/线程状态、硬盘剩余空间、日志文件大小等。针对应用系统:主要包括应用系统的可用性、响应时间、并发用户数,以及特定应用的系统资源占用等。1.5 故障排除对数据库发生的故障(如数据库不能正常运行,备份与恢复不能进行,数据文件一致性破坏等)在第一时间进行排除并提交故障报告。5.2.1应用系统维护2.1 例行检查服务例行检查时间间隔:对应用系统进行例行检查,从系统验收完毕起每月检查一次。2.2 检查内容检查数据库服务器:检查数据库的运行状况;核实原系统配置:核实系统软件配置及版本;检查各监控终端软件:检查各计算机监控系统用户端软件使用情况;检查软件系统运行环境:检查网络操作系统软件、操作系统软件稳定性等;2.3 检查方式制定例行检查计划:根据软件系统的检查时间,制定相应的检查计划,其中包括每次例行检查时间、例行检查小组成员、例行检查内容;核实例行检查方案:例行检查前,提前三天通知技术人员.对于客户每次的服务请求,维护小组设有专人负责实施、跟踪、并以客户监控系统最后确认为准。2.4 检查结果处理例检记录:每次检查完成后,均作标准的检查报告。包括检查发现的问题、系统现状评价、改进建议;对于例检发现的问题,若属于负责维护的软件系统,均作及时的解决。对于每次维护,都作规范的维护记录。包括故障原因、实施工程师、解决办法、实施过程、维护结果。服务记录应于每次服务完成后均将作为系统资料保存。2.5 系统运行维护服务当应用系统出现软件改进、模块更换、故障确认、系统错误等问题时,派相关人员前往处理。1 例行检查服务例行检查时间间隔:对应用系统进行例行检查,从系统验收完毕起每月至少检查一次,安装相关的最新系统补丁和升级文件,并对有关问题进行处理。2 系统运行维护服务当系统软件出现系统错误等问题时,派相关人员前往处理。3. 维护范围包括各服务器使用的操作系统:Windows 2000 Advance Server , Windows 2000 Server;台式机操作系统:Windows XP,Windows 2000 Professor;邮件系统;其它有关服务器上的系统。服务系统维护内容包括: 系统运作检测,以保证系统无病毒污染的病毒检查服务,优化服务器与客户机的设置,系统管理文件的打印与归档,服务器的硬件配置及软件的更换服务,工作站的硬件配置及软件的更换服务,提供更换密码,用户授权权限更改等系统管理服务。总结与心得本系统将面向对象概念和关系型数据库相结合,一个关系型数据库能够为面向对象(OO)模型提供一套优秀的实现。同样的模型能够用来开发编程代码和建立关系型数据库结构。关系型数据库技术是意义深远的、强大的,但它比许多开发商使你相信的要难得多。单个表是简单易懂的、直观的,但是要彻底了解由数以百计的表组成(这是常见的)的应用是相当困难的。这正是OO模型有用之处。OO模型使我们更深入地、连贯地思考问题。OO模型提供一种问题的超结构(superstructure)的思考方式,然后该方式能够用关系型数据库的更低层的组成块来实现。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。而本系统都是正是如此。对球队资料实施电子化管理将会给球队带来巨大的效益。它能提升处理速度及输入的方便性;是资料输入准确度最佳化;使用电脑化管理,减少人工负荷及作业成本;建立必要的资料档案,使得管理程序简化且容易;建立个资料档案间的联络,能快速找寻所要的资讯。系统具有较好的可扩展性和包容性。系统的可扩展性应包括能接纳已有的系统和在今后系统软硬件扩展时,能有效地保护已有的投资。特别是在应用需求变化时(应用与系统的需求往往提不全或者经常会变化),有一个较好的应用平台,能容易地加以调整。系统易于扩充升级,既能满足当前业务的需求,又为今后的扩充留有空间。附录:源码:void playerInfDlg:UpdateRecord()_variant_t vplayername;CString strSQL,name;UpdateData(TRUE);strSQL=select * from playerinf;CProcessData* pdata=new CProcessData;m_pRecordset=pdata-GetRecordSet(strSQL);if( m_pRecordset=NULL )AfxMessageBox(没有成功打开数据表); return;if(!m_pRecordset-BOF)m_pRecordset-MoveFirst();trywhile(!m_pRecordset-adoEOF) vplayername=m_pRecordset-GetFields()-GetItem(姓名)-Value;name=(CString)vplayername; HTREEITEM root = m_playerTree.InsertItem(name);m_pRecordset-MoveNext();catch(_com_error e)CString strError;strError.Format(警告:初始化记录集时发生异常。错误信息:%s,e.ErrorMessage();AfxMessageBox(strError);try delete pdata; catch(_com_error e) CString strError;strError.Format(警告:初始化记录集时发生异常。错误信息:%s,e.ErrorMessage();AfxMessageBox(strError); 当记录集中的球员名字初始化到树中的时候,通过双击球员名字,就可以在在旁边的编辑框中显示出来,其中图片的显示是重点。主要代码如下:void playerInfDlg:OnNMDblclkplayertree(NMHDR *pNMHDR, LRESULT *pResult)/ TODO: 在此添加控件通知处理程序代码*pResult = 0;HTREEITEM strName1;CString strName,strSQL;strName1=m_playerTree.GetSelectedItem();strName=m_playerTree.GetItemText(strName1);try strSQL.Format( select * from playerinf where 姓名=%s ,strName ); CProcessData* pdata=new CProcessData; m_pRecordset=pdata-GetRecordSet(strSQL); catch ( _com_error& e )AfxMessageBox ( e.Description() ) ;return ;if( m_pRecordset=NULL )AfxMessageBox(没有成功打开数据表); return ;try _variant_t varValue; CString str; long str1=0; m_pRecordset-MoveFirst();varValue=m_pRecordset-GetFields()-GetItem(ID)-Value; str1=(long)varValue;m_ID = str1;m_datetime =m_pRecordset-GetCollect(出生日期);varValue=m_pRecordset-GetFields()-GetItem(籍贯)-Value; str=varValue.bstrVal; m_name=strName;m_jiguan = str;varValue=m_pRecordset-GetFields()-GetItem(身高)-Value; str1=(long)varValue;m_shengao = str1;varValue=m_pRecordset-GetFields()-GetItem(体重)-Value; str1=(long)varValue;m_tizhong = str1;varValue=m_pRecordset-GetFields()-GetItem(移动电话)-Value; str1 =(long)varValue; m_telephone = str1;varValue=m_pRecordset-GetFields()-GetItem(邮箱)-Value; str=varValue.bstrVal; m_email = str;varValue=m_pRecordset-GetFields()-GetItem(场上位置)-Value; str=varValue.bstrVal; m_weizhi = str;varValue=m_pRecordset-GetFields()-GetItem(性别)-Value; str=varValue.bstrVal;m_sex = str;/以下代码是用来从记录集中读取 图片信息并且显示出来long lDataSize = m_pRecordset-GetFields()-GetItem(照片)-ActualSize;if(lDataSize 0)_variant_tvarBLOB;varBLOB = m_pRecordset-GetFields()-GetItem(照片)-GetChunk(lDataSize);if(varBLOB.vt = (VT_ARRAY | VT_UI1)if(m_pBMPBuffer = new charlDataSize+1)/重新分配必要的存储空间char *pBuf = NULL;SafeArrayAccessData(varBLOB.parray,(void *)&pBuf);memcpy(m_pBMPBuffer,pBuf,lDataSize);/复制数据到缓冲区m_pBMPBuffer/SafeArrayUnaccessData (varBLOB.parray);/m_nFileLen = lDataSize;/m_hPhotoBitmap = BufferToHBITMAP();/生成BITMAP对象 BITMAPFILEHEADERbmfHeader; DWORD bmfHeaderLen = sizeof(bmfHeader); strncpy(LPSTR)&bmfHeader, (LPSTR)m_pBMPBuffer, bmfHeaderLen); if (bmfHeader.bfType = (*(WORD*)BM) )LPSTR lpDIB = m_pBMPBuffer + bmfHeaderLen;BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)lpDIB;BITMAPINFO &bmInfo = *(LPBITMAPINFO)lpDIB;LPVOID lpDIBBits = m_pBMPBuffer + (BITMAPFILEHEADER *)m_pBMPBuffer)-bfOffBits;LPVOID lpDIBBits = m_pBMPBuffer + (BITMAPFILEHEADER )m_pBMPBuffer)-bfOffBits;CWindowDC dc(this);HBITMAP hBmp = CreateDIBitmap(dc.m_hDC, &bmiHeader, CBM_INIT, lpDIBBits, &bmInfo, DIB_RGB_COLORS);if (m_Bitmap.GetSafeHandle() != NULL) m_Bitmap.DeleteObject();m_Bitmap.Attach(hBmp);Invalidate(); delete m_pBMPBuffer; m_pBMPBuffer = NULL; Invalidate();m_pRecordset-Close();catch(_com_error e)在初始界面中的字体过小,并且过于单调,因此在构造函数中加入以下文字编辑代码CFont * f; f = new CFont; f-CreateFont(24, / nHeight 0, / nWidth 0, / nEscapement 0, / nOrientation FW_BOLD, / nWeight TRUE, / bItalic 斜体 FALSE, / bUnderline 下划线 0, / cStrikeOut 波动 ANSI_CHARSET, / nCharSet OUT_DEFAULT_PRECIS, / nOutPrecision CLIP_DEFAULT_PRECIS, / nClipPrecision DEFAULT_QUALITY, / nQuality DEFAULT_PITCH | FF_SWISS, / nPitchAndFamily _T(宋体); / lpszFac GetDlgItem(IDC_BUTTON6)-SetFont(f); GetDlgItem(IDC_BUTTON5)-SetFont(f); GetDlgItem(IDC_BUTTON4)-SetFont(f); GetDlgItem(IDC_BUTTON3)-SetFont(f); GetDlgItem(IDC_BUTTON1)-SetFont(f);为了使界面更加美观,我们需要实现彩色按钮,可以改变按钮的前景色,背景色,以及按钮上的文字颜色等,为了实现这个功能,我们添加一个新类,类名为CColorButton,该类从CButton派生出来。,该类的实现代码如下:#include stdafx.h#include Teamadm.h#include ColorButton.h#ifdef _DEBUG#undef THIS_FILEstatic char BASED_CODE THIS_FILE = _FILE_;#endif#ifdef CColorButton#undef CColorButton CColorButton#endif/ CColorButtonIMPLEMENT_DYNAMIC(CColorButton, CButton)CColorButton:CColorButton()CColorButton:CColorButton()BEGIN_MESSAGE_MAP(CColorButton, CButton)END_MESSAGE_MAP()/ CColorButton 消息处理程序void CColorButton:DrawItem(LPDRAWITEMSTRUCT lpDIS)CDC* pDC = CDC:FromHandle(lpDIS-hDC);UINT state = lpDIS-itemState; CRect focusRect, btnRect;focusRect.CopyRect(&lpDIS-rcItem); btnRect.CopyRect(&lpDIS-rcItem); /设置按钮被单击时的矩形区域focusRect.left += 4; focusRect.right -= 4; focusRect.top += 4; focusRect.bottom -= 4; /重写按钮上的文字 const int bufSize = 512; TCHAR bufferbufSize; GetWindowText(buffer, bufSize);/绘制彩色按钮效果 DrawFilledRect(pDC, btnRect, GetBGColor(); DrawFrame(pDC, btnRect, GetBevel(); DrawButtonText(pDC, btnRect, buffer, GetFGColor();/绘制被单击的彩色按钮效果if (state & ODS_FOCUS) DrawFocusRect(lpDIS-hDC, (LPRECT)&focusRect);if (state & ODS_SELECTED) DrawFilledRect(pDC, btnRect, GetBGColor(); DrawFrame(pDC, btnRect, -1); DrawButtonText(pDC, btnRect, buffer, GetFGColor();DrawFocusRect(lpDIS-hDC, (LPRECT)&focusRect);else if (state & ODS_DISABLED)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年消费者行为学全民必知知识考试题与答案
- 2025年监理工程师继续教育考试题及答案
- 2025年上海市“安全生产月”知识考试试题及参考答案
- 摄影电影基础知识培训课件
- 辽宁省沈阳市沈北新区2024-2025学年八年级下学期期末语文试题(解析版)
- 摄影挂拍基础知识培训课件
- 林业生物技术试题及答案
- 2025饮品连锁加盟经营合同
- 2025夫妻自愿同居合同书
- 2025年高一数学(人教A版)复数的乘除运算-1教案
- 2025年《工会法》知识竞赛试题库及答案
- 2025氯化工艺复审题库及答案详解
- 初中语文培训成果
- 2023年北京中考化学真题(含答案)
- TPM管理基础知识培训课件
- 2025年湖北省初中地理学业水平考试(会考)真题评析
- 树莓栽培技术课件
- 农机购买销售合同(2025版)
- 硬质合金成型工专业知识考试题库含答案
- 视神经脊髓炎病例汇报
- 消除艾滋病、梅毒和乙肝母婴传播项目工作制度及流程(模板)
评论
0/150
提交评论