人事档案管理系统及FTP客户端的设计(附源代码)_第1页
人事档案管理系统及FTP客户端的设计(附源代码)_第2页
人事档案管理系统及FTP客户端的设计(附源代码)_第3页
人事档案管理系统及FTP客户端的设计(附源代码)_第4页
人事档案管理系统及FTP客户端的设计(附源代码)_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人事档案管理系统[摘要]本文介绍的是采用VisualFoxpro开发的一个人事数据库管理系统,逐一介绍开发本系统的步骤:系统分析、系统设计、系统实现、系统实施。首先对现行人事管理系统进行分析,并找出其存在的问题,并提出解决方案。针对要开发的饿系统进行人事系统调研,提出开发系统的可行性分析。在系统结构设计中先后用数据流图、系统的功能结构图分析了系统所需要的各种数据。在系统的设计中,详细的展现了系统的各个功能模块、所需的数据库表及表字段、系统菜单的设计等。在系统的实现中,给出了系统的界面登录、实现表单中相应的功能控件的事件代码等。在系统的实施概况中给出了系统的开发环境、系统的运行与维护、系统的安全性与可靠性设计。本系统具有数据浏览,数据查询,数据统计报表打印等功能,系统功能全面,用户操作方便是本设计的一个特色。[关键字]VisualFoxpro应用、人事管理、表单、控件[前言]人事管理系统是一个单位不可缺少的部分,它的内容对于决策者和管理者来说都至关重要,所以人事管理系统应该能够为用户提供充足的信息和快捷的查询手段。随着科学技术的不断提高,使用计算机对人事信息进行管理,具有着手工管理所无法比拟的优点。例如:查找方便、可靠性高、保密性好等。因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套人事管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。目录概述现行系统的分析。拟定项目名称制定项目功能拟定项目追求目标系统数据流程图人事管理系统的系统概况2.1人事管理系统的简介2.2人事管理系统的优点2.3人事管理系统的技术关键人事管理系统的设计分析与VisualFoxpro程序的实现3.1总体设计3.1.1系统功能模块划分3.1.2系统功能模块的设计3.1.3系统界面总体设计3.2详细设计3.2.1数据库设计3.2.2数据库结构设计3.3各功能模块的设计3.3.1开始界面与登录界面的设计3.3.2系统主菜单的设计3.3.3导航条的设计3.3.4浏览功能的设计3.3.5查询功能的设计3.3.6维护功能的设计3.3.7统计功能的设计3.3.8档案输出的设计3.4系统的编译与发行3.4.1设置主文件3.4.2构造主程序3.4.3连编应用程序系统设计小结参考文献第一章概述1.1现行系统的分析现行系统的分析,主要是手工填写数据,介质主要是纸,从管理开始到结束都是人工管理,尤其是其处理的数据量较大。基于以上分析,故开发系统来管理整个流程是必要的,也是必须的。1.2拟定项目名称人事档案管理系统。1.3制定项目功能企事业个人、部门信息录入及系统初始设置主要用于完成个人、部门信息前期管理工作。系统维护、报表输出、数据统计、数据查询等模块共同完成人事档案管理流程中的数据库维护和数据的查询、统计、打印等各项功能。1.4拟定项目追求目标(1)界面设计良好,体现人本主义原则。(2)系统效率较高、灵活方便、快捷迅速,适用于大量数据。(3)采用动态链接。1.5系统数据流程图人事档案管理系统用户用户一旦把数据基于计算机系统实现,就要分配各个系统元素,建立起一个模型,用于表达系统元素之间的相互关系。为了开发系统模型,系统流程图能为以后的设计奠定基础。图1.1所示为人事管理顶层图,图1.2所示为人事管理层图。人事档案管理系统用户用户查询结果统计要求用户设置查询结果表单维护统计结果查询要求图1.1人事管理顶层浏览浏览用户报表人事档案查询统计维护打印图1.2人事管理层第二章人事管理系统的系统概况2.1人事管理系统的简介本系统是针对人事管理过程中大量繁杂数据的处理,而开发的基于Windows操作平台的人事管理系统,该系统利用了计算机关系数据库技术和UML设计思想,主要用于学校、企事业单位的人事管理。2.2人事管理系统的优点本系统在技术上的可操作性较强,基本上无技术上的难度很大的算法和设计,在人员及社会方面,由于其人机界面的人性化设计,在线帮助系统和导航系统的辅助,且在目前这些单位人员的实际计算机错做水平条件下是无任何障碍的。2.3人事管理系统的技术关键本系统设计简单,操作灵活方便。人事管理系统的设计分析3.1总统设计3.1.1系统模块功能划分(1)密码设置:每个操作员均有自己的密码,可以防止非本系统人员进入本系统;又因每个人的权限不一致,故可以防止越权操作。(2)数据维护:将计算机中保留的上一次操作后的结果清除。以备重新查询、更新、统计、输出等功能的执行。(3)档案更新:为了保存职工人事档案的全部数据,本系统将每一名职工的档案分为人事卡片、家庭成员和社会关系分别存档。档案更新包括对各种表的记录修改、删除、添加等功能。(4)档案查询:可以按姓名、部门或任意条件查询个人和一部分人的情况。(5)档案统计:包括统计文化程度、技术职务、政治面貌、年龄、工资等。(6)档案输出:可以输出个人档案、全体档案、人事卡片、单位名册、团员名次到屏幕或打印机上。(7)退出。3.1.2系统功能模块的设计在系统功能分析的基础上,得到如图所示的系统组织结构图及系统功能模块图。人事档案管理系统档案浏览档案查询档案维护档案统计档案输出其他操作退出人事档案管理系统档案浏览档案查询档案维护档案统计档案输出其他操作退出图1.3系统组织结构图部分系统功能模块图所示档案统计统计年龄统计文化程度统计技术职称统计政治面貌统计民族婚姻统计工资档案统计统计年龄统计文化程度统计技术职称统计政治面貌统计民族婚姻统计工资图1.4档案统计档案维护维护人事档案维护家庭成员维护社会关系退出档案维护维护人事档案维护家庭成员维护社会关系退出图1.5档案维护3.1.3系统界面总体设计该模块的主要功能是当用户启动人事档案管理系统时显示一个友好界面。在程序进入开始界面运行后的一段时间内单击就进入输入密码表单,否则进入修改密码表单,只有当输入了正确的密码后才能进入本系统。下图为总体界面框图。欢迎界面输入密码修改密码主界面欢迎界面输入密码修改密码主界面图1.6总体界面框图3.2详细设计3.2.1数据库设计进行数据库设计的首要任务是考虑信息需求,也就是数据库要存入什么样的数据。当然,创建数据库并非仅仅为了存储数据,更主要的目的是从中提取有用信息。人事档案管理可由人事卡、家庭成员、社会关系的感方面实体组成。其中各数据结构如下:人事卡片(员工号、部门、姓名、性别、职务、出生年月、民族、籍贯、政治面貌、职称、文化程度、健康否、家庭出身、本人成分、婚姻状况、参加工作时间、进单位时间、工资、各种补贴、家庭住址、年龄、备注部门号)。家庭成员(员工号、部门、姓名、家属姓名、与员工关系、出生年月、婚姻状况、政治面貌、文化程度、工作单位、工资、备注)。社会关系(员工号、部门、姓名、关系姓名、与员工关系、出生年月、政治面貌、文化程度、工作单位、备注)。用户密码表(用户名、用户密码、权限等级)。通过以上数据,人事卡对家庭成员是一对多的感谢,因为一个职工可以有多个家庭成员;人事卡对社会关系是一对多的关系,因为一个职工可以有多种社会关系。有了这些关系,可以使用实体模型描述人事档案管理,如图所示:人事卡1社会关系N家庭成员1NNM人事卡1社会关系N家庭成员1NNM图1.7各实体模型3.2.2数据库概念结构设计这一设计阶段是在需求分析的基础上,设计出能够满许用户需求的各种实体,以及它们之间的关系,为后面的逻辑设计打基础。本系统根据上面的设计规划出实体和实体之间的E-R图部门姓名备注员工号、部门姓名备注员工号人事卡拥有社会关系属于员工号部门姓名职务备注人事卡拥有社会关系属于员工号部门姓名职务备注、、、家庭成员员工号部门经济来源家庭成员员工号部门经济来源、、、图1.8人事实体E-R图3.3.3数据库逻辑结构设计需要将上面的数据库概念转化为VisualFoxpro数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。人事档案管理系统数据库中各个表格的设计结果见如下表,每个表格在数据库中是一个有关联的表。表1-1人事档案表字段字段名数据类型宽度小数位索引NULL1员工号字符型6主索引否2姓名字符型10否3性别字符型2否4出生年月日期型8否5民族字符型10否6籍贯字符型10否7政治面貌字符型8否8文化程度字符型8否9职务字符型6否10职称字符型6否11工别字符型6否12基本工资数值型62否13家庭住址字符型30否14简历字符型35否15部门编号数值型2否16年龄数值型3否表1-2家庭关系表字段字段名数据类型宽度小数位索引NULL1员工号字符型6普通索引否2员工姓名字符型10否3成员姓名字符型8否4出生年月日期型8否5与本人关系字符型47政治面貌字符型8否8文化程度字符型8否9工作单位字符型6否10职称字符型6否12基本工资数值型62否表1-3社会关系表字段字段名数据类型宽度小数位索引NULL1员工号字符型6普通索引否2员工姓名字符型10否3成员姓名字符型8否4出生年月日期型8否5与本人关系字符型47政治面貌字符型8否8文化程度字符型8否9工作单位字符型6否10职称字符型6否12基本工资数值型62否表1-4用户密码表字段名数据类型NULL说明XLF字符型(10)否合法用户名MM字符型(6)否用户密码权限等级字符型(810)否权限等级3.2.2数据库结构设计在概念设计的基础上得到数据库的逻辑结构之后,就可以在VisualFoxpro数据库系统中实现该系统。建立项目管理器为提高软件开发和维护的效率,可使用项目管理器设计一个应用系统,用于跟踪创建应用程序所需要的所有程序、表单、菜单、库、报表等和一些其他类型的文件。项目管理器建立好之后,就可以建立人事管理系统所需要的表和数据了。如本系统将建立人事档案表、家庭成员表等。要创建表,一般要先创建数据库,在VisualFoxpro中可以使用数据库来组织和关联这些表。通过数据库,可以创建表和表之间的持久关系和存储过程、建立字段和记录的有效性规则、设置字段默认值等。此外,还可以利用参照完整性来帮助用户维护数据库中相关表中记录的一致性等。建立数据库单击项目中的数据库,打开数据库设计器,为数据库添加3个数据表,并分别为它们建立相应的索引,在各个表之间产生相应的关系,使表与表之间产生永久性关系,为系统提高快速查询奠定基础。数据库的设计如图所示。数据库设计器——人事数据字段:员工号部门字段:员工号部门姓名成员姓名与本人关系出生年月婚姻状况文化程度政治面貌工作单位索引:员工号社会关系字段:员工号社会关系字段:员工号部门姓名关系姓名与本人关系出生年月婚姻状况文化程度政治面貌工作单位索引:员工号员工号部门姓名性别职务出生年月民族籍贯政治面貌职称文化程度健康否婚姻状况工作时间进本单位时间工资家庭住址年龄索引:员工号图1-6人事管理数据库3.3各功能模块的设计各功能模块具体是指各种表单的详细设计。表单的设置和制作在本系统中占了重要地位,它是用户操作接触的感观界面,也是用户操作的对象,用户对系统的使用与管理几乎都是通过表单进行的。在使用表单设计器制作表单时所需做的是:根据所需的内容向表单添加控件对象和类。设置各控件对象所需的各项属性,包括数据环境及其属性。在所需对象的事件中编写程序代码,来实现各对象所要求的功能。根据需要在表单中添加新属性和新方法。根据系统需要按其功能模块确定所需设计的表单,每项功能对应一个表单和多个表单来完成。本系统功能模块所需的表单有:主界面表单、登录表单、浏览表单、查询表单、维护表单等。3.3.1开始界面与登录界面的设计1、开始界面开始界面如图所示:人事档案信息管理系统2008-4-17制作人:薛立芬人事档案信息管理系统2008-4-17制作人:薛立芬进入系统退出步骤:(1)新建一个表单;(2)添加三个标签控件,Caption属性分别为:人事档案信息管理系统、2008-4-17、制作人:薛立芬;(3)添加两个命令按钮,Caption属性分别为:进入系统、退出;定义[进入系统]控件的[Click]事件代码:Doform系统登录.scxReleasethisform2、登录界面登录界面如图所示:人事档案信息管理系统操作员:密码:Combo1Text2确定取消人事档案信息管理系统操作员:密码:Combo1Text2确定取消退出步骤:(1)新建一个表单;(2)添加三个标签控件,Caption属性分别为:人事档案信息管理系统、操作员、密码;(3)添加一个组合框,RowSource为“薛立芬、韩建建、徐泰山“,RowSourceType为”1-值”;(4)添加一个文本框,PassWordChar为“*”; (3)添加三个命令按钮,Caption属性分别为:确定、取消、退出;定义[确定]控件的[Click]事件代码:Use密码表.dbfLocateforXLF=alltrim(bo1.value)Iffound()andMM=alltrim(thisform.text2.value)Doform功能选择.scxElseIfthisform.MM=!alltrim(thisform.text2.value)=messagebox(“操作员密码错误!”+chr(13)+”再试一次!”,48,”警告”)Thisform.text2.setfocusElse=messagebox(“对不起,你已经错了三次了!”+chr(13)+”非法用户,请你退出系统!”,48,”严重警告”)ReleasethisformCloseallQuit3.3.2系统主菜单的设计人事档案管理系统由许多的数据表、表单、报表、查询等对象构成。使用系统主菜单可以方便地将它们构成一个完整的系统。一般地应按照系统需求完成任务的性质、要求及用户处理问题的习惯,分层次地根据使用的各种对象设计菜单结果,人事档案管理系统菜单如下:人事档案管理菜单系统数据浏览数据查询数据统计数据维护报表输出退出系统该菜单系统由一个条形菜单和6个下拉菜单组成的,6个下拉菜单分别调用自己的表单,退出一项是过程菜单项。3.3.3导航条的设计步骤:新建一个表单;添加一个按钮组,按钮数目设置为4;Caption属性分别为:第一个、上一个、下一个、最后一个;定义[上一个]控件的[Click]事件代码:Skip-1Ifbof()Messagebox(“已经是第一个记录”,48,”信息窗口”)Tmand1.enabled=.f.Tmand2.enabled=.f.SkipElseTmand1.enabled=.t.Tmand2.enabled=.t.Thisform.refresh定义[第一个]控件的[Click]事件代码:GotopTmand1.enabled=.f.Tmand4.enabled=.t.Tmand3.enabled=.t.Thisform.refresh定义[下一个]控件的[Click]事件代码:SkipIfbof()Messagebox(“已经是最后一个记录”,48,”信息窗口”)Skip-1Tmand3.enabled=.f.Tmand4.enabled=.f.ElseTmand3.enabled=.t.Tmand4.enabled=.t.ElseifTmand1.enabled=.t.Tmand2.enabled=.t.Thisform.refresh定义[最后一个]控件的[Click]事件代码:GotopTmand3.enabled=.f.Tmand2.enabled=.t.Tmand1.enabled=.t.Thisform.refresh3.3.4浏览功能的设计浏览表单浏览人事档案浏览家庭成员关系浏览退浏览表单浏览人事档案浏览家庭成员关系浏览退出步骤:建立一个表单,Caption属性为:浏览表单;添加四个命令按钮控件,Caption属性分别为:浏览人事档案、浏览家庭成员、关系浏览和退出;单击右键,选择数据环境,添加人事表和家庭成员表定义[Command1]控件的[Click]事件代码:Use人事表.dbfBrowall定义[Command2]控件的[Click]事件代码:Use家庭成员.dbfBrowall定义[Command3]控件的[Click]事件代码:Use关系浏览.scxBrowall定义[Command4]控件的[Click]事件代码:ReleasethisformCloseall3.3.5查询功能的设计人事查询人事查询浏览字段设定浏览全局人事卡片编辑浏览字段设定浏览全局人事卡片编辑员工号民族婚姻状况部门籍贯工作时间姓名政治面貌进单位时间性别职称工资职务文化程度家庭住址出生年月健康状况年龄最后一个第一个下一个上一个备注最后一个第一个下一个上一个输入查询条件查询清除查询条件显示查询条件退出输入查询条件查询清除查询条件显示查询条件退出步骤:建立一个表单,设置Caption属性为:人事查询;表单上建立控件[PageFramel],设置PageCount属性为3;设定控件[PageFrame]中的3个[Page]页的[Caption]属性分别为:人事卡片编辑、浏览字段设定和全局浏览;在控件[PageFrame]的[Page1]页中添加19个[label]控件、19个[text]控件和一组命令按钮,分别修改其[Captio]属性;在控件[PageFrame]的[Page2]页中添加19个[Check]控件,Value值全部为1默认状态为选中;在控件[PageFrame]的[Page3]页中添加1个[Gird];在表单[人事查询]中添加5个[Command]控件,其[Captio]属性分别为:输入查询条件、查询、清除查询条件、显示查询条件和退出;1)定义该表单[Init]的[Click]事件代码:Tmand2.enabled=.f.Tmand3.enabled=.f.Tmand4.enabled=.f.2)定义[输入查询条件]控件的[Click]事件代码:Thisform.pageframel.page1.tex员工号.value=’’Thisform.pageframel.page1.tex部门.value=’’Thisform.pageframel.page1.tex姓名.value=’’Thisform.pageframel.page1.tex性别.value=’’Thisform.pageframel.page1.tex职务.value=’’Thisform.pageframel.page1.tex出生年月.value=’’Thisform.pageframel.page1.tex民族.value=’’Thisform.pageframel.page1.tex籍贯.value=’’Thisform.pageframel.page1.tex政治面貌.value=’’Thisform.pageframel.page1.tex职称.value=’’Thisform.pageframel.page1.tex文化程度.value=’’Thisform.pageframel.page1.tex健康状况.value=’’Thisform.pageframel.page1.tex婚姻状况.value=’’Thisform.pageframel.page1.tex工作时间.value=’’Thisform.pageframel.page1.tex进本单位时间.value=’’Thisform.pageframel.page1.tex工资.value=’’Thisform.pageframel.page1.tex家庭住址.value=’’Thisform.pageframel.page1.tex年龄.value=’’Thisform.pageframel.page1.tex备注.value=’’3)定义[查询]控件的[Click]事件代码:Publicarrayquerycondition(19)Fori=21to42J=i-20querycondition(j)=thisform.pageframel.page1.controls(i).valueendforlocalarrayflag(19)fiag(1)=alltrim(thisform.pageframel.page1.tex员工号.value)fiag(2)=alltrim(thisform.pageframel.page1.tex部门.value)fiag(3)=alltrim(thisform.pageframel.page1.tex姓名.value)fiag(4)=alltrim(thisform.pageframel.page1.tex性别.value)fiag(5)=alltrim(thisform.pageframel.page1.tex职务.value)fiag(6)=alltrim(thisform.pageframel.page1.tex出生年月.value)fiag(7)=alltrim(thisform.pageframel.page1.tex民族.value)fiag(8)=alltrim(thisform.pageframel.page1.tex籍贯.value)fiag(9)=alltrim(thisform.pageframel.page1.tex政治面貌.value)fiag(10)=alltrim(thisform.pageframel.page1.tex职称.value)fiag(11)=alltrim(thisform.pageframel.page1.tex文化程度.value)fiag(12)=alltrim(thisform.pageframel.page1.tex健康状况.value)fiag(13)=alltrim(thisform.pageframel.page1.tex婚姻状况.value)fiag(14)=alltrim(thisform.pageframel.page1.tex工作时间.value)fiag(15)=alltrim(thisform.pageframel.page1.tex进本单位时间.value)fiag(16)=alltrim(thisform.pageframel.page1.tex工资.value)fiag(17)=alltrim(thisform.pageframel.page1.tex家庭住址.value)fiag(18)=alltrim(thisform.pageframel.page1.tex年龄.value)fiag(19)=alltrim(thisform.pageframel.page1.tex备注.value)condition=’员工号’=flag(1)and’部门’=flag(2)and’姓名’=flag(3)and’性别’=flag(4)and’职务’=flag(5)and’出生年月’=flag(6)and’民族’=flag(7)and’籍贯’=flag(8)and’政治面貌’=flag(9)and’职称’=flag(10)and’文化程度’=flag(11)and’健康状况’=flag(12)and’婚姻状况’=flag(13)and’工作时间’=flag(14)and’进本单位时间’=flag(15)and’工资’=flag(16)and’家庭住址’=flag(17)and’年龄’=flag(18)and’备注’=flag(19)select*form人事表where&conditionintocursorqueryresultthisform.pagrframel.page1.员工号.controlsource=’queryresult.员工号’thisform.pagrframel.page1.部门.controlsource=’queryresult.部门’thisform.pagrframel.page1.姓名.controlsource=’queryresult.姓名’thisform.pagrframel.page1.性别.controlsource=’queryresult.性别’thisform.pagrframel.page1.职务.controlsource=’queryresult.职务’thisform.pagrframel.page1.出生年月.controlsource=’queryresult.出生年月’thisform.pagrframel.page1.民族.controlsource=’queryresult.民族’thisform.pagrframel.page1.籍贯.controlsource=’queryresult.籍贯’thisform.pagrframel.page1.政治面貌.controlsource=’queryresult.政治面貌’thisform.pagrframel.page1.职称.controlsource=’queryresult.职称’thisform.pagrframel.page1.文化程度.controlsource=’queryresult.文化程度’thisform.pagrframel.page1.健康状况.controlsource=’queryresult.健康状况’thisform.pagrframel.page1.婚姻状况.controlsource=’queryresult.婚姻状况’thisform.pagrframel.page1.工作时间.controlsource=’queryresult.工作时间’thisform.pagrframel.page1.进本单位时间.controlsource=’queryresult.进本单位时间’thisform.pagrframel.page1.工资.controlsource=’queryresult.工资’thisform.pagrframel.page1.家庭住址.controlsource=’queryresult.家庭住址’thisform.pagrframel.page1.年龄.controlsource=’queryresult.年龄’thisform.pagrframel.page1.备注.controlsource=’queryresult.备注’Tmand2.enabled=.f.Tmand3.enabled=.t.4)定义[清除查询条件]控件的[Click]事件代码:Thisform.pageframel.page1.tex员工号.controlsource=’’Thisform.pageframel.page1.tex部门.controlsource=’’Thisform.pageframel.page1.tex姓名.controlsource=’’Thisform.pageframel.page1.tex性别.controlsource=’’Thisform.pageframel.page1.tex职务.controlsource=’’Thisform.pageframel.page1.tex出生年月.controlsource=’’Thisform.pageframel.page1.tex民族.controlsource=’’Thisform.pageframel.page1.tex籍贯.controlsource=’’Thisform.pageframel.page1.tex政治面貌.controlsource=’’Thisform.pageframel.page1.tex职称.controlsource=’’Thisform.pageframel.page1.tex文化程度.controlsource=’’Thisform.pageframel.page1.tex健康状况.controlsource=’’Thisform.pageframel.page1.tex婚姻状况.controlsource=’’Thisform.pageframel.page1.tex工作时间.controlsource=’’Thisform.pageframel.page1.tex进本单位时间.controlsource=’’Thisform.pageframel.page1.tex工资.controlsource=’’Thisform.pageframel.page1.tex家庭住址.controlsource=’’Thisform.pageframel.page1.tex年龄.controlsource=’’Thisform.pageframel.page1.tex备注.controlsource=’’Thisform.pageframel.page1.tex员工号.value=’’Thisform.pageframel.page1.tex部门.value=’’Thisform.pageframel.page1.tex姓名.value=’’Thisform.pageframel.page1.tex性别.value=’’Thisform.pageframel.page1.tex职务.value=’’Thisform.pageframel.page1.tex出生年月.value=’’Thisform.pageframel.page1.tex民族.value=’’Thisform.pageframel.page1.tex籍贯.value=’’Thisform.pageframel.page1.tex政治面貌.value=’’Thisform.pageframel.page1.tex职称.value=’’Thisform.pageframel.page1.tex文化程度.value=’’Thisform.pageframel.page1.tex健康状况.value=’’Thisform.pageframel.page1.tex婚姻状况.value=’’Thisform.pageframel.page1.tex工作时间.value=’’Thisform.pageframel.page1.tex进本单位时间.value=’’Thisform.pageframel.page1.tex工资.value=’’Thisform.pageframel.page1.tex家庭住址.value=’’Thisform.pageframel.page1.tex年龄.value=’’Thisform.pageframel.page1.tex备注.value=’’5)定义[显示查询条件]控件的[Click]事件代码:Fori=21to42J=i-20Thisform.pageframel.page1.controls(i).value=querycondition(j)Endfor6)定义[退出]控件的[Click]事件代码:Releasethisform3.3.6维护功能的设计步骤:建立一个表单,设置Caption属性为:维护人事档案;单击右键,选择数据环境,添加数据资源”人事表”;添加19个[label]控件、19个[text]控件,分别修改其[Captio]属性;添加四个命令按钮,其[Captio]属性分别为:添加、删除、修改和退出;如图所示:维护人事档案维护人事档案员工号民族婚姻状况部门籍贯工作时间姓名政治面貌进单位时间性别职称工资职务文化程度家庭住址出生年月健康状况年龄最后一个第一个下一个上一个备注最后一个第一个下一个上一个输入查询条件查询清除查询条件显示查询条件退出输入查询条件查询清除查询条件显示查询条件退出1)定义[添加]控件的[Click]事件代码:GobottomWaitwindow”员工号不能为空”timeout1AppeThisform.refresh2)定义[删除]控件的[Click]事件代码:Ifmessagebox(“确定要删除吗?”,1+64+256,”提示”)=1DelePackSkipThisform.refreshEndif3)定义[退出]控件的[Click]事件代码:ReleasethisformCloseall3.3.7统计功能的设计统计政治面貌浏览退出统计政治面貌浏览退出步骤:建立一个表单,设置Caption属性为:统计政治面貌;单击右键,选择数据环境,添加数据资源”人事表”;添加两个命令按钮,其[Captio]属性分别为:浏览和退出;定义[浏览]控件的[Click]事件代码:Clearsettalkoffh=0i=1j=1Use人事表Setorderto部门号Dowhilei<7Dw=substr(‘营销处公关处通讯信息自动化后勤’,j,8)Countallfor政治面貌=’党员’.and.部门号=Itom4Countallfor政治面貌=’团员’.and.部门号=Itom5Countallfor政治面貌=’党员’.and.民族=’汉’.and.部门号=Itom2Countallfor政治面貌=’党员’.and.民族<>’汉’.and.部门号=Itom3Countallfor政治面貌=’党员’.and.性别=’男’.and.部门号=Itom6Countallfor政治面貌=’党员’.and.性别=’女’.and.部门号=Itom7Storem4+m5tom1Storem1+m11tom11Storem2+m22tom22Storem3+m3tom33Storem4+m4tom44Storem5+m5tom55Storem6+m6tom66Storem7+m7tom77Storeh+1tohI=i+1J=j+1EnddoUse3.3.8档案输出的设计步骤:打开文件菜单,新建报表,进如报表设计器;单击右键,选择数据环境,将人事表添加到数据环境中。将员工号、姓名、性别、部门、职务、文化程度等字段托到细节带区;在表控件中单击标签控件,然后在页标头区,输入员工号、姓名等,完成标签的设计;从报表菜单中选择标题/总结,选择标题带区、总结带区,在标题区设计一个标签,输入人事信息表;在标题区设置一个域控件,然后在表达式生成器中选择DATE()日期函数,可以显示带有日期的标题;在报表菜单中选择变量菜单项,设计一个变量为:NUM,选择计数按钮,单击确定。在总结带区设计一个标签,输入人事表的人数,再选择域控件,在报表表达式中输入STR(NUM);单击浏览按钮可看到相应的结果。3.4系统的编译与发行3.4.1设置主文件主文件可以是一个表单、菜单或程序。3.4.2构造主程序SettalkoffCloseallSetsysmenuoffSetsysmenutosetpathto认识程序.prgdoform系统主页表单.scxreadeventsclearallquit3.4.3连编应用程序系统(1)打开人事档案项目管理器;(2)单击连编按钮,将打开连编选项对话窗;(3)在操作中选择连编可执行文件,在选项中,选择重新编辑全部文件和显示错误,单击确定,系统提示用户输入应用程序文件名后,可以创建一个扩展名为.EXE的可执行文件。设计小结:通过本次程序的设计,发现自己还有很多不足的地方,尤其是程序的编写,不能够独立的去完成,学完的东西也不能积极的去复习,直到需要的时候才去翻书,希望通过这次实训,让自己能够掌握好多自己以前没有注意到的问题,多多复习已经学过的知识。参考文献:翁正科.VisualFoxpro数据库开发教程.北京:清华大学出版社,2001周山芙.VisualFoxpro程序设计(二级)教程.北京:清华大学出版社,2002柳青等.VisualFoxpro程序设计教程.北京:高等教育出版社,2001邵洋、谷宇、何旭洪.VisualFoxpro6.0数据库系统开发实例导航.北京:人民邮电出版社,2002蔡卓毅、林盛雄、林雨扬、黄竺.VisualFoxpro6.0数据库程序设计实例.北京:冶金工业出版社,2003 编号:课程设计(论文)说明书题目:FTP客户端的设计系别:计算机科学与工程专业:计算机科学与技术学生姓名:学号:指导教师:摘要本课程设计包含了文件传输协议的简单设计与实现。FTP(FileTransferProtocol)即文件传输协议是TCP/IP协议族中的一个应用层协议。FTP客户端利用TCP的可靠传输服务,减少了不同文件系统间的不兼容性,实现了文件的传送功能;而且它提供了直观的文件传输操作方式,用户只需要使用鼠标拖动选择就可以完成相关操作。文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),实现下述命令功能:查询,上传,下载,以及多线程的功能等,利用了已有网络环境设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。关键词:SOCKET编程,FTPclient/server程序,VC++

目录引言………………FTP协议分析FTP的介绍………………FTP的基本工作原理…………………FTP的工作模式…………………1.4FTP的传输模式…………………第二章FTP客户端总体设计具体设计任务………………客户端主要模块设计………客户端界面设计客户端功能模块设计数据流程图…………………客户端连接流程图上传模块流程图下载模块流程图第三章FTP客户端程序实现客户端界面的实现………………查询文件的实现…………………上传文件的实现………………3.4下载文件的实现…………………第四章设计小结及心得体会参考文献附录(源代码)引言随着科学技术的不断提高,计算机网络日渐成熟,其强大的功能已为人们深刻认识,它已进人类社会的各个领域并发挥着越来越重要的作用。其中的文件传输协议(FileTransferProtocol,FTP)是目前Internet上使用得最广泛的文件传送协议。在互联网早期曾占据整个互联网通信量的三分之一。它主要解决了在不同操作系统下处理文件格式的不兼容性。起初,FTP并不是应用于IP网络上的协议,而是20世纪60~80年代美国国防部组建的ARPANET网络中,用于计算机间的文件传输的协议。时至今日,FTP仍然保持其可靠性,高速地传输文件,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存贮在别的系统。传统方式需要在DOS下输入命令,对于普通用户是件极困难的事。为了用户更方便的使用FTP服务,提供更好的人机交互界面,本次课程设计将完成一个简单FTP客户端系统的设计和开发工作,实现服务器连接、远程与本地目录浏览、文件上传和下载等基本FTP工具常用功能。并通过这次课程设计,对网络编程方面有更深入的了解,提高实践能力。

FTP协议分析1.1FTP的介绍文件传送协议FTP(FileTransferProtocol)是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。RFC959很早就成为了因特网的正式标准。在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统产生的通信量还小于FTP所产生的通信量。只是到了1995年,WWW的通信量才首次超过了FTP。基于TCP的FTP是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。1.2FTP的基本工作原理FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式。下面以PORT方式为例,如图1所示:①FTP服务器运行FTP守护进程,等待用户的FTP请求。②用户运行FTP命令,请求FTP服务器为其服务

③FTP守护进程收到用户的FTP请求后,派生出FTP子进程与用户进程交互,建立文件传输控制连接,使用TCP端口21。④用户输入FTP子命令,服务器接收子命令,如命令正确,双方各派生一个数据传输进程FTP-DATA,建立数据连接,使用TCP端口20进行数据传输。⑤本次子命令请求的数据传输完毕,拆除数据连接,结束FTP-DATA进程。⑥用户继续输入FTP子命令,重复④、⑤的过程,直至用户输入quit命令,双方拆除控制连接,结束文件传输,结束FTP子进程。图1FTP工作原理示意图1.3FTP的工作模式FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。即客户端只需要连接一个端口进行数据通信。如TELNET的默认端口是23,用户从头到尾都只需使用这个端口。但是FTP通信除了有一个默认端口21之外,还需要其他的端口。其中默认端口(21)主要进行控制连接,进行命令协议和服务器端的响应码的传输;另外一个非标准端口主要进行数据传递,如文件的上载、下载等。至于非标准端口的产生则要根据用户选择的连接模式而定:如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地址和一个非标准端口;而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。FTP中字节大小有两个:逻辑字节大小和用于传输的字节大小。后者通常是8位,而前者可不一定是多少了。传输字节不必等于逻辑字节大小,也不必对数据结构进行解释。控制连接是建立在USER-PIT和SERVER-PI之间用于交换命令与应答的通信链路。数据连接是传输数据的全双工连接,传输数据可以发生在服务器DTP和用户DTP之间也可以发生在两个服务器DTP之间,FTP可以传输非连续的文件,这些文件的一部分称为页。服务器DTP代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据连接,它还可以为传输和存储设置参数,并根据PI的指令传输数据。当然,DTP也可以转入“被动”状态。服务器FTP进程,它是和用户FTP进程一起工作的,它由PI和DTP组成。至于用户FTP进程则是由PI,DTP和用户接口组成的具体工作模式如图1所示:上图中用户PI开始控制连接,控制连接与Telnet协议很象。在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。FTP的传输模式FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary命令告诉ftp逐字拷贝,不要对这些文件进行处理。二进制传输方式在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢,也会损坏数据,使文件变得不能用。如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。FTP客户端总体设计2.1具体设计任务计算机网络实验环境建立在TCP/IP网络体系结构之上。各计算机除了安装TCP/IP软件外,还安装了TCP/IP开发系统。实验室各计算机具备Windows环境中套接字socket的编程接口功能,可为用户提供全网范围的进程通信功能。本实验要求利用这些功能,设计和实现一个简单的文件传送协议。用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述功能:查询目录文件,下载文件,上传文件。2.2客户端主要模块设计这个部分是本文设计的中心部分,是对客户端进行主要的功能设计和界面设计。2.2.1客户端界面设计为了使用户能够方便的使用FTP客户端,在设计中我将数据输入和信息显示整合在一个页面中,全部客户端仅包含一个主要的窗口,窗口中分别有以下五个界面:1、数据输入界面:用来让用户输入服务器地址,用户名,密码。2、服务器文件信息显示界面:主要用来显示服务器下存储的文件,方便用户清楚的了解服务器中存储了哪些文件。3、上下载队列显示界面:显示正在下载或上传的文件线程。4、操作按钮界面:用户可以通过点击上传、下载、断开、关闭等按钮来实现客户端的具体操作。5、信息显示界面:显示当前连接信息和上传下载是否成功信息。2.2.2客户端功能模块设计FTP客户端作为用户连接FTP服务器的工具,需要具备一些基本功能模块,如连接、查询、上传、下载等,其中最主要的四大功能模块如下:1、下载功能模块:连接用户指定的FTP服务器,获取服务器目录下的文件列表,当用户选择项目为文件时,点击下载可以下载用户所需要的文件。选定文件后提示用户将文件存储在何处,用户选择存储区后开始下载任务。依靠FTP协议的支持,用户下载的文件没有类型和大小限制,即用户可已选择任何自己想要下载的文件,通过FTP客户端进行下载。2、上传功能模块:用户可以自行选择本机上存储的文件,上传至FTP服务器。在用户选择存储在服务器的位置后,点击上传,选择所需要上传的文件,即可将文件上传至服务器。3、连接功能模块:将用户本机与指定的IP地址连接,验证用户命和密码,在FTP服务器上进行注册。4、查询功能模块:将用户设定的存储文档与客户端界面连接之后,显示在界面框中。有了这四个基本的功能模块,客户端的基本应用功能即可实现。数据流程图2.3.1客户端连接流程图运行客户端后,首先是连接服务器,需要输入服务器IP地址及用户名和密码点击连接按钮后开始连接服务器,下图为客户端连接流程图。连接的结果有两种,即图中显示的连接失败和连接成功。2.3.2上传模块流程图当用户点击上传按钮后,用户可以选择需要上传的文件,并指定上传位置,将本机上的文件上传至FTP服务器,下图为上传子模块流程图。上传的结果有两种,上传失败和成功,失败时会提示用户上传失败,原因可能是权限,如果成功上传,则提示上传成功。下载模块流程图当用户在服务器文件列表中选择想要下载的文件后,选择需要下载文件在本机上的存储位置,将服务器上的文件下载至本机,下图为上传子模块流程图。当用户下载文件时,要给下载的文件重新命名,并且设定存储的格式,才能下载成功。第三章FTP客户端程序实现3.1客户端界面的实现在客户端界面,定义了查询、退出、上传、下载等功能的操作按钮类,文本类,面板类的设计代码。IDD_FTPFILE_DIALOGDIALOGEX0,0,261,181STYLEDS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENUEXSTYLEWS_EX_APPWINDOWCAPTION"FtpFile"FONT9,"宋体",0,0,0x1BEGINEDITTEXTIDC_EDIT_FTP,43,6,117,12,ES_AUTOHSCROLLEDITTEXTIDC_EDIT_NAME,43,26,41,12,ES_AUTOHSCROLLEDITTEXTIDC_EDIT_PWD,117,26,44,12,ES_PASSWORD|ES_AUTOHSCROLLLISTBOXIDC_LIST_FILE,7,63,98,104,LBS_NOINTEGRALHEIGHT|WS_VSCROLL|WS_HSCROLLDEFPUSHBUTTON"查询",IDOK,121,63,45,14PUSHBUTTON"退出",IDCANCEL,121,153,45,14LTEXT"域名:",IDC_STATIC_FTP,7,6,28,9LTEXT"登录名:",IDC_STATIC_NAME,7,26,32,8LTEXT"口令:",IDC_STATIC_PWD,88,26,25,8PUSHBUTTO"下载",IDC_DOWNLOAD,121,123,45,14,WS_DISABLEDLTEXT"文件目录列表",IDC_STATIC,7,46,49,8PUSHBUTTON"上传",IDC_UPLOAD,121,93,45,14GROUPBOX"采用多线程技术",IDC_STATIC,183,50,70,96PUSHBUTTON"查询",IDC_QUERY_MT,194,63,50,14PUSHBUTTON"上传",IDC_UPLOAD_MT,195,93,50,14PUSHBUTTO"下载",IDC_DOWNLOAD_MT,195,125,50,14,WS_DISABLED登陆界面3.2查询文件的实现进行各种操作之前,应首先输入服务器域名,登录用户名和口令。如果要进行查询,可以点击‘查询’按钮,调用OnQuery函数。该函数获得用户当前输入的服务器名、登录用户名和口令等信息,清除列表框的内容;然号创建Internet会话类对象,进行服务器的登录,试图建立与指定FTP服务器的连接;如果连接成功,就创建CFtpFileFind文件检索类对象,查找服务器上当前目录的任意文件,找到了第一个文件后,继续找其它的文件,并将找到的文件或目录名显示在列表框中。所有文件找到后,结束查询,并依次删除文件查询对象、FTP连接对象和Internet

会话对象,结束会话。voidCFtpDlg::OnQuery(){ //获得当前输入 UpdateData(TRUE); //清除列表框的内容 while(m_ListFile.GetCount()!=0) m_ListFile.DeleteString(0); //显示文件和目录名 ListContent();}voidCFtpDlg::ListContent(){ CInternetSession*pSession; CFtpConnection*pConnection; CFtpFileFind*pFileFind; CStringstrFileName; BOOLbContinue; pConnection=NULL; pFileFind=NULL; //创建Internet会话 pSession=newCInternetSession( AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS); try { //试图建立FTP连接 pConnection=pSession->GetFtpConnection(m_strFtpSite, m_strName,m_strPwd); } catch(CInternetException*e) { //错误处理 e->Delete(); pConnection=NULL; } if(pConnection!=NULL) { //创建CFtpFileFind对象 //传递CFtpConnection对象的指针 pFileFind=newCFtpFileFind(pConnection); //查找任意文件 bContinue=pFileFind->FindFile("*"); if(!bContinue) { //查找完毕 pFileFind->Close(); pFileFind=NULL; } while(bContinue) { //查找下一个文件 bContinue=pFileFind->FindNextFile(); //获得找到的文件的文件名 strFileName=pFileFind->GetFileName(); if(pFileFind->IsDirectory()) { //找到的是否目录 //标记目录名 strFileName="["+strFileName; strFileName+="]"; } //显示查找的内容 m_ListFile.AddString(strFileName); } if(pFileFind!=NULL) { //查询结束 pFileFind->Close(); pFileFind=NULL; } } //删除对象 deletepFileFind; if(pConnection!=NULL) { pConnection->Close(); deletepConnection; } deletepSession;}查询界面3.3上传文件的实现如果要向FTP服务器上传文件,点击“上传“按钮,产生BN_CLICKED事件,调用OnUpload函数,该函数获得当前输入的服务器名、登录用户名和口令,禁用用于输入的文本框控件,禁用查询按钮,禁用用于输入的文本框控件,弹出小对话框,获得待上传的本地机文件路径和文件名,调用Upload函数上传文件。上传完毕,激活查询按钮,激活用于输入的文本和编辑控件。Upload函数也重新创建Internet会话,建立FTP连接,上传文件后,然后清除会话对象和连接对象。voidCFtpDlg::OnUpload(){//获得当前输入 UpdateData(TRUE); //禁用用于输入的文本和编辑控件 m_EditFtp.EnableWindow(FALSE); m_EditName.EnableWindow(FALSE); m_EditPwd.EnableWindow(FALSE); m_StaFtp.EnableWindow(FALSE); m_StaName.EnableWindow(FALSE); m_StaPwd.EnableWindow(FALSE);//禁用查询按钮 m_BtnQuery.EnableWindow(FALSE); CStringstrSourceName; CStringstrDestName; CFileDialogdlg(TRUE,"","*.*"); if(dlg.DoModal()==IDOK) { //获得待上传的本地机文件路径和文件名 strSourceName=dlg.GetPathName(); strDestName=dlg.GetFileName(); //调用函数上传文件 if(PutFile(strSourceName,strDestName)) AfxMessageBox("上传成功!",MB_OK|MB_ICONINFORMATION); else AfxMessageBox("上传失败!",MB_OK|MB_ICONSTOP); } else{ //文件选择有错误 AfxMessageBox("请选择文件!",MB_OK|MB_ICONSTOP); } //激活查询按钮 m_BtnQuery.EnableWindow(TRUE); //激活用于输入的文本和编辑控件 m_EditFtp.EnableWindow(TRUE); m_EditName.EnableWindow(TRUE); m_EditPwd.EnableWindow(TRUE); m_StaFtp.EnableWindow(TRUE); m_StaName.EnableWindow(TRUE); m_StaPwd.EnableWindow(TRUE);}BOOLCFtpDlg::PutFile(CStringstrSourceName,CStringstrDestName){ CInternetSession*pSession; CFtpConnection*pConnection; pConnection=NULL; //创建Internet会话 pSession=newCInternetSession( AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS); try { //建立FTP连接 pConnection=pSession->GetFtpConnection( m_strFtpSite, m_strName, m_strPwd); } catch(CInternetException*e) { //错误处理 e->Delete(); pConnection=NULL; returnFALSE; } if(pConnection!=NULL) { //上传文件 if(!pConnection->PutFile(strSourceName,strDestName)) { //上传文件错误 pConnection->Close(); deletepConnection; deletepSession; returnFALSE; } } //清除对象 if(pConnection!=NULL) { pConnection->Close(); deletepConnection; } deletepSession; returnTRUE;}上传界面3.4下载文件的实现列表框中选择一个文件,会产生LBN_SELCHANGE事件,自动调用相应的OnSelchangeListFile函数,禁用用来输入的文本框控件,禁用查询和上传按钮,激活下载按钮。此时,用户可以点击‘下载’按钮,产生BN_CLICKED事件,自动调用OnDownload函数,调用Download函数,下载该文件。下载完毕,禁用下载按钮,激活查询和上传按钮,激活用来输入的文本框控件。而Download函数重新创建Internet会话,建立FTP连接,下载文件后,将会话对象和连接对象清除。voidCFtpDlg::OnDownload(){ //获得当前输入 UpdateData(TRUE); intnSel=m_ListFile.GetCurSel(); CStringstrSourceName; //获得用户在列表框中的选择 nSel=m_ListFile.GetCurSel(); m_ListFile.GetText(nSel,strSourceName); if(strSourceName.GetAt(0)!='['){ //选择的是文件 CStringstrDestName; CFileDialogdlg(FALSE,"","*.*");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论