南京航空航天大学_第1页
南京航空航天大学_第2页
南京航空航天大学_第3页
南京航空航天大学_第4页
南京航空航天大学_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、南京航空航天大学面向对象程序设计语言课程设计报告人事管理系统姓名:潘建东日期:200943目录一、需求分析3二、程序的主要功能4三、程序运行平台5四、系统总框架图6五、程序类的说明7六、模块分析13七、比较有特色的函数16八、存在的不足与对策22九、编程体会23十、程序源代码25一、需求分析信息化时代的到来,计算机的普及,公司对员工的管理也应实现 现代化。铁打的营盘,流水的兵。对于一个公司来说,新职员的加入, 老职员的退休以及部分职员的跳槽是必然会发生的。 因此对公司现有 员工的信息是需要及时更新的,否则会产生管理上的混乱。实施本人事管理系统可以高效准确的记录人事信息,不仅降低了成本,提高了工

2、作效率;而且使人事信息一目了然,方便公司管理高 层对公司员工信息进行查看,添加,删除,查找,排序,以及一些其 他功能的实现。由于信息安全的需要,本系统还配备了登陆密码功能。 人性化的管理界面,简单的操作方法更为本系统增色不少。之所以选用C+乍为该程序设计语言是因为其良好的封装性,友 好的用户界面,面向对象的特性体现得淋漓尽致。 其松耦合性方便日 后更多功能的添加以及程序的修改和维护。二、程序的主要功能1 .添加功能 添加一个员工的基本信息,包括工作证号,姓名,性别,身份证号码,生日,电 话号码,家庭住址,所属部门,职务,薪水。 一次添加完毕后显示总共添加的记录数。 可随时在已有记录后面追加新的

3、员工信息,它们保存在内存的向量数组中。 可以将一个文件读入,追加在已有记录之后;在没有保存文件之前,将继续保持 文件追加状态。2. 显示功能 没有记录显示时,给出提示信息。 可随时显示内存中已有员工信息,并使用表头标记各项目属性。3. 修改功能 可以按“工作证号”、“姓名方式”方式查找要修改的内容。 给出将被修改的记录的信息,经确认,方才进行修改。 如果内存中没有记录,给出提示信息并返回主菜单。 如果没有找到需要修改的记录,输出提示信息。4. 删除功能 可以按“工作证号”、“姓名”方式添加待删除标记。 标记将被删除的记录可以再次取消标记,经确认后,方才执行删除。 如果内存记录为空,将给出提示信

4、息并返回主菜单。 如果没有找到要删除的记录,输出提示信息。5. 清空全部员工信息功能 能够对于全部职员信息进行删除。6. 查找功能 可以按“工作证号”和“姓名”方式进行查找,如果查询的信息不存在,给出提示 信息。7. 排序功能 可以按“工资”进行升序和降序排列。 可以将“姓名”按拼音顺序进行升序和降序排列。 如果选择错误,可以立即退出排序。8. 保存和读取文件记录功能 可以按默认名字或指定名字将记录保存至文件或读入内存。 可以将指定文件或默认文件追加到现有记录尾部。 更新是否已被修改但尚未存储的标志(isModified )。9. 新建职员信息文件功能重新建立职员信息文件。如果已有记录存在,则

5、询问是否保存,然后重新建立新记 录。10. 密码功能 指定的用户名及密码,两次输入错误则自动退出系统。 均可以实现退格修改。三、程序运行平台该程序是用 VC+6.0制作的,使用 Microsoft Visual C+ 6.0 运行该程序,具体操作是:打开 Microsoft Visual C+ 6.0 ,菜单 栏里点文件打开工作区找到“ .dsw ”这个文件打开,或者在资 源管理器中双击该文件,此时,VC+6.0会自动打开,并载入该系统 相关资源,点击Run命令菜单或者或用快捷键 Ctrl+F5运行该程序。四、系统总框架图全部取消个别取消添加记录五、程序类的说明*密码类(主函数中调用)*#if

6、ndef ADMIN_H#defi ne ADMIN_Hclass admi n/关于登陆用户的类private:char user10;/ 用户名char password10; /密码public:bool check (char *,char *);/检验用户名及密码是否正确;#en dif*生日类(作为被包含类)*#ifndef DATE_H #defi ne DATE_Hclass Date/ Date 类的声明private:int year;int mon th;int day;public:Date()/因为函数体短小,故选择内联函数year=0;mon th=0;day=0;

7、/Date类的构造函数void setdate(i nt y,i nt m,i nt d) year=y; mon th=m; day=d;/Date类的设置函数int getYear()retur n year;in t getMo nth()return mon th;in t getDay()return day;#en dif*定义每一条记录的数据基类(实现类的包含) *实现函数的重载,继承于 vector 类 *#ifndef RECORD#defi ne RECORD_H #in clude#in cludevstri ng#i ncludebirth.husing n amesp

8、ace std;class Record/用来定义职员信息中每一条记录的类public:stri ng nu mber;stri ng n ame;stri ng sex;stri ng id;Date birth;stri ng teleph one;stri ng address;stri ng departme nt;stri ng post;float salary;bool toBeDeleted;/用来记录是否已打上待删除标记Record() toBeDeleted=false;初始时未打上待删除标记Record();class RecordVec: public vector/以

9、指向类 Record的指针为元素的向量数组frie nd ostream& operator (ostream& os , const RecordVec& c_r1); /重载了输 出操作符,定义为友元函数,便于从输出流中保存记录的对象一frie nd istream& operator(istream& is , RecordVec& r1);/ 重载了输入操作符,定义为友元函数,便于从输入流中读取记录的对象public:/RecordVec类可以直接使用vector中定义的所有库函数void clear()/为了删除指针所指向的对象,故重新定义并覆盖了基类中的clear()函数/iter

10、ator iter;/利用游标遍历向量数组iterator it_end = en d();for (iter=begi n(); iter!=it_e nd; ite 叶+) _delete* iter;/删除指针指向的对象vector:clear();调用基类中被覆盖的同名函数,删除以指针为元素的向量数组iterator erase(iterator where) /重载了基类中的 erase(函数delete *where;retur n vector:erase(where);RecordVec()/销毁指针的同时,销毁指针所指向的对象 this-clear();#en dif*处理记

11、录的底层类(虚函数,体现多态)*针对添加,删除等操作实现与底层数据的交互 *该类包含一个 RecordVec类的对象*#ifndef PEOPLEVECTOR_H#defi ne PEOPLEVECTOR_H#in clude#in clude#in clude#i ncluderecord.h using n amespace std;class PeopleVec该类是处理人事信息的底层类protected:RecordVec recVec;/存取记录的底层数据public:typedef vector:iterator Iterator;virtual void addRecord(Re

12、cord* rec);/ 添加新的人事记录virtual in t removePerform();/ 删除做了标记的记录virtual Iterator findRecord(const string& pattern, int type, Iterator from);/ 寻找一个人事记录virtual void saveRecords(ostream & os);保存人事信息到输出流中virtual int loadRecords(istream& is); /从输入流中读数据并追加到当前记录的末尾virtual PeopleVec();const int size() const re

13、turn (i nt)recVec.size(); /获得记录的职员数const bool empty() const return recVec.empty(); /是否无人事信息记录virtual void clear() recVec.clear();清空人事信息记录Iterator first() return recVec.begin(); / 获得第一条记录Iterator pastE nd() return recVec.e nd();/ 获得最后一条记录之后的一个迭代器;#en dif PEOPLEVECOR_H* 处理面向对象操作的类 (虚函数,体现多态)*包含所有功能以及与

14、用户交互的实现*#ifndef PEOPLEMANAGE_H #defi ne PEOPLEMANAGE_H #i ncludePeopleVector.hclass PeopleMa nage : public PeopleVecprotected:bool isModified;职员信息是否已被修改还未保存int toRemvNodes;做了删除标记的记录数public:PeopleMa nage();virtual PeopleMa nage();virtual void start();/开始用户欢迎界面操作virtual void han dleMe nu(); / 菜单处理函数vi

15、rtual void displayRecords(); /显示记录virtual void searchRecord(); / 查询记录virtual void addRecord();/ 添加记录virtual void removeRecord(); / 删除记录virtual void removeNote(bool isToRemove); 标记删除记录virtual void modifyRecord(); 修改记录virtual void sortRecords();记录排序virtual void saveRecords();保存记录virtual void loadRecor

16、ds(); 读取记录virtual void clear();清空当前记录信息virtual void quit();protected:char men uSelect();/ 菜单选择函数void dispTable();/ 显示表头void dispRecord(Record* rec); / 显示一条记录的信息;#en dif六、模块分析1文件操作模块a. 保存记录b. 读取记录通过重载流插入和提取操作符并定义为友元实现对输 入输出流文件的操作。函数调用时以流对象做参数。针对流操作符无 法读取空白字符的弊端,本人有效结合getline()和ignore()函数避 免产生错误。通过游标遍

17、历向量数组实现将内存记录保存至文件。运用指针实现读取文件,并调用STL库函数push_back()写入内存向量 数组。在函数实现时加入计数变量,屏显保存读取的记录数。用bool 变量isModified记录内存记录是否被修改,并在新建文件时提示是 否保存。2. 删除模块c. 标记待删除记录d. 执行标记,删除指定记录e. 取消指定记录的删除标记f. 取消全部删除记录g. 清空全部记录在人事信息类Record中加入bool变量toBeDeleted用来记录是 否有删除标记。调用查找函数查找做了标记的记录,分别利用bool变量isToRemove实现添加取消标记或调用基类重载了库函数的 erase

18、()函数实现对指定记录的删除。调用基类的clear()函数用游标遍历向量数组实现指针对象及其指向内容的清空。3. 查找模块分按工作证号和姓名进行查找,传参字符串(姓名或证号),对 应序号及查找起始位置给基类定义的查找函数。 通过指针指向对应成 员变量与所传参数进行匹配,匹配则跳出循环。返回值为游标,若游 标指向向量尾,贝y没查找到。若不是向量尾则打印游标指向的记录。 (注:多个功能需要使用查找函数,而查找函数封装在基类中,很好 的体现了封装性!)4. 添加及修改模块之所以把这两个功能放在一起说是因为它们的实现较为类似, 只不过修改功能调用了基类的查找函数并运用返回的指针实现个别 记录的修改。修

19、改功能分按姓名及工作证号执行。 系统将提示用户输 入新添加的员工的信息,插入在向量数组中。5. 显示模块打印表头。由于dos界面的宽度限制及技术原因导致显示记录的 对齐效果不是很好,有待改进。按每打印10个停顿一下,便于查看。 按任意键继续打印。6. 排序模块h. 按姓名进行升序排序i. 按姓名进行降序排序j. 按工作进行升序排序k. 按工资进行降序排序通过STLswap()函数实现对向量数组中记录的对调。由圭寸装在基 类中的size()函数记录向量中的总记录数。通过向量数组的下标操 作实现比较,用冒泡法进行排序。7. 密码模块用字符数组存储密码(支持字母和数字),屏显*。每一次循环即 每输入

20、一个字符,自动在其数组的下一位存入 0 支持退格操作。 使用默认用户名(keshe)及密码(pjd18)。两次输入错误,则自动退 出系统。密码类单独写在一个头文件及源文件中, 很好的体现了多文 件操作。七、比较有特色的函数1)通过system()函数设置dos界面颜色及清空控制台操作。有助于 美观,以防操作过多,dos控制台内存有太多之前的操作记录,显得 冗余。system(color 20);/ 设置屏幕颜色system(cls); /清空控制台2) 密码可以实现退格操作。while(ic!=13&in dex=A&ic=a&ic=0&ic=9)/密码只能包含字母和数字cout * /退格符

21、处理coutvbvvflushv flushbflush;pwdi ndex-=0;/修正字符串结束符位置ic=getch();/读取下一个输入字符3) 以指向结构体的指针作为向量数组的元素。class RecordVec: public vector 在vector中进行添加删除等操作会涉及许多元素拷贝的工作,我想 拷贝指针应该方便许多。4) 良好的用户交互操作(每次删除,添加,保存,新建前均有询问提示(yn)再次确认)。当内存中无记录时,输出提示信息。例如:if()coutvv现在还有被做了删除标记但还没有执行的记录,是否执行删除?(Y/N) - bb;大小写的y和n均可以识别。if (e

22、mpty() /记录为空时给出提示信息cerr 没有记录可存! str;cin.ignore(); /从cin中将回车符取出来choice=str0;int size=str.le ngth();if (choice9|size9) /cerrn 输入错误,重选 0-9 : - bb;else break;while(true) /对输入的性别进行有效性检验 if(choi1!=0)cerr输入有误,请重新输入!sex = 女;break;else if(choi0 = 1)rec-sex = 男;break;elsecerr输入有误,请重新输入!endl;cout-请输入性别(0为女,1为男

23、) ci n.getli ne(choi,5);7)用cerr输出错误提示信息。cerr输入有误,请重新输入! endl;大体了解了 cerr和cout的区别:cout对应于标准输出流,默认情况下是显示器。这是一个被缓冲的 输出,可以被重定向。cerr对应标准错误流,用于显示错误消息。默认情况下被关联到标 准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器。8) 设置待删除标记,实现标记的添加和取消,以及删除标记记录的 选项。void PeopleMa nage:removeRecord() /void PeopleMa nage:removeNote (bool isToRemove

24、)/标记指定记录为待删除int PeopleVec:removePerform() /从数组中删除做了标记的记录9)实现对姓名和工资进行升序和降序排列的功能void PeopleMa nage:sortRecords ()for(j=i+1;j name recVecj- name)|(strO=2 & recVeci- name name)|(strO=3 & recVeci-salary recVecj-salary)|(str0=4 & recVeci-salary salary)swap(recVeci,recVecj); /调用 STL库函数完成对调10) 用构造函数实现对程序的开启

25、int main( ) new PeopleMa nage;return 0 ; PeopleMa nage : PeopleMa nage(void)start();11)需要计数的地方均设置计数变量,实现计数,并打印结果。例如:while (it!=it_e nd) fin dCo un t+;dispRecord(*it);it = fin dRecord(pattern,type,+it);cout 一共找到了 findCount条记录nendl;12) 支持分类查找,删除,修改。例如:if (choi0=1)cout 请输入欲查询的职员的工作证号:type=0; else if (c

26、hoi0=2)cout 请输入欲查询的职员的姓名:type=1;ci n.getli ne(pattern,20);Iterator it=fi ndRecord(pattern,type,first();13)头文件中加入包含哨兵,实现条件编译,防止头文件被包含多次。#ifndef DATE_H#defi ne DATE_H#en dif14)最后的,也是我最骄傲的,做了个简单的基于 MFC人事管理系 统,感觉很有意思。虽然由于技术及时间原因部分功能未实现,但还 是可以运行一些简单的功能。八、存在的不足与对策1. 未能实现修改密码、用户自己设置用户名和密码及二次登陆时输入 首次设置好的用户名

27、及密码方可登陆。对策:涉及到文件操作,将用户名及密码保存至文件,二次开启时自 动打开文件将输入用户名及密码与文件中的进行匹配。由于时间关 系,将在日后进行完善,我相信一定可以实现该功能的。2. 显示记录时表头项目与所对应的内容对齐效果不是太好。对策:与dos界面的局限性有关,同时也由于自己对格式化输出掌握 不是太好。将加强对格式化输出的研究。3. 往往为了实现有效性检验导致代码重复冗杂。对策:应该会有更好的方法。多看书,多编程实践探索。4. 最遗憾的就是MFC勺半成品啦。对策:目前我只接触了皮毛。已借了相关书籍,正在自学。相信在大 二的课设中我会用到MFC勺。九、编程体会话说这第一次C+课设,

28、早就有所耳闻,在寒假里我就自学了部 分C+内容。老师的课设要求一出来我就开始准备了,本以为会三下 五除二搞定,可是如此浩大的工程从何处着手,怎样和所学内容联系 起来,怎样设计框架着实难了我好一阵。当老师布置了唯一的一道作 业题我至今印象深刻:“用类的对象做节点,构造链表,编写链表建 立,检索,输出,删除四个函数,并在主函数中测试”。这不就是老 师在给我们提供思路吗?!我惊喜地顺着老师的思路开始编, 可是错 误一大堆,很繁琐,很难调。可能我链表真的学得不太好吧,当我正 苦恼的时候,我无意间翻到老师跳过去不讲的向量部分内容,我发现真的很好用,向量就相当于是数组,是一种数据结构,它自定义了游 标,相

29、当于指针。它自身所定义的库函数真的很强大,不光能实现老 师所要求的内容还有其他丰富的功能可以实现,简单实用。我如获至宝,如饥似渴地看了起来。当然课本上那点内容是无法满足课设需要 的,于是我在图书馆,书店找了大量的 C+书籍看,当然着重关注向 量部分以及如何运用库函数。一段停滞后我推倒前面的开始重新编。虽然框架有了,思路有了, 信心也有了。可是编程就是不简单。一次次碰到错误,一次次解决错 误,就好像一场场酣战,虽没有大汗淋漓,可也疲惫不堪。当然成功 后如释重负的喜悦那是无与伦比的美妙。几个印象比较深刻的典型问题,算是编程过程中积累的一点小小 经验吧。1.注释要随手想到就加,边编边加。否则过了一段

30、时间会忘的,又得重新看。2.流操作符重载写文件时,要写一个数字紧跟着要 写一个空格,否则读文件时,流提取操作符会眉毛胡子一把抓,把数 字连起来读,这样原本的两个数字就变成一个数字了。3.当程序遇到意想不到又难以排除的错误时,加个ignore()函数或flush清空缓 冲区内存,也许会有意想不到的效果。4.程序的健壮性相当的重要, 要知道用户不会像你想象的那样输入,就连你自己也会不小心按错 键。所以对程序的有效性检验从一开始就要引起足够的重视,时时关注每一步与用户交互的操作是否需要排除错误按键干扰。最后,由于老师的一个建议,由于我的一个冲动,我颇有兴趣地 自学了一点MFC可视化界面,只是一点皮毛

31、。觉得很好玩,我会借书 看把MFC学好的。说真的,很想在下一次课设中用 MFC实现,我想会 有机会的。十、程序源代码#in elude admi n.h#i nclude bool admin:check(char m,char n)admin 类的成员函数if(!strcmp(keshe,m)&!strcmp(pjd18,n)/ 设置用户名为 keshe,密码为 pjd18return 1;elsereturn 0;eopleVector#i nclude PeopleVector.hPeopleVec:PeopleVec()recVec.clear();/*功能:添加新纪录参数:rec指向

32、新记录的指针*/void PeopleVec:addRecord(Record* rec)if (rec!=NULL)recVec.push_back(rec); _ /*功能:从数组中删除做了标记的记录 返回:实际上删除的记录数*/int PeopleVec:removePerform()int deletedNum = 0;Iterator it;Iterator it_beforeBeg in = recVec.begi n()-1;for(it=recVec.end()-1; it!=it_beforeBegin; it-) / 从向量的末尾开始寻找做了标 记的记录,省掉了前移元素的操

33、作,提高了效率if(*it)-toBeDeleted)it = recVec.erase(it);deletedNum+;return deletedNum;/返回实际删除的记录数/*功能:从记录中寻找一条记录*/PeopleVec:lterator PeopleVec:fi ndRecord(co nst stri ng& patter n, int type,PeopleVec:lterator from)Iterator it;Iterator it_end = recVec.e nd();for (it=from; it!=it_e nd; it+)从给定的位置开始,按递增的顺序依次考

34、察每一条记录if(type=0 & (*it)-nu mber=patter n)|(type=1 & (*it)-n ame=patter n)break;return it;/返回指向该记录的指针 /*功能:将信息记录数组保存到输出流中 参数:os指定的输出流*/void PeopleVec:saveRecords(ostream &os) osrecVec;/*功能:从输入流中读数据并追加到当前记录的末尾 参数:is指定的输入流返回:读入的记录数*/ int PeopleVec:loadRecords (istream &is) int ori = size();is recVec;in

35、t addedCo unt = size()-ori;retur n addedCo unt;mymai n.cpp#in clude#in clude#i ncludebirth.h#i ncluderecord.h#i ncludePeopleMa nage.h #i ncludePeopleVector.h #in clude admi n.h#in clude int main()system(color 20);/ 设置屏幕颜色bool flag=false;cout use;printf(请输入密码(5位):);short int in dex=-1; char ic=getch(

36、);/密码数组下标,数据范围-1,32/临时字符变量,用来读取输入的数据while(ic!=13&in dex=A&i c=a&i c=0&i c=9)密码只能包含字母和数字cout * -1)/输出*同时清空缓冲区/存入密码/加入结束符/退格符处理pwdi ndex- = 0; ic=getch();修正字符串结束符位置/读取下一个输入字符coutvbvvflushv flushbflush;adm in ad;if(!ad.check(use,pwd)cerrn账号或密码错误! n use;printf(请输入密码(5位):);short int in dex=-1;临时字符变量,用来读取

37、输入char ic=getch();的数据。while(ic!=13&in dex=A&i c=a&i c=0&i c=9)/密码只能包含字母和数字cout * -1)coutvbvvflushv vvflushvbvvflush;pwdi ndex- = 0;位置 ic=getch();符if (!ad.check(use,pwd) system(cls);cerrn您两次输入错误,系统自动退出,请您使用正确的用户名及密 码! n;/;两次输入错误则自动退出系统exit(0);system(cls);/ 清空控制台coutnnttt* 您已进入本系统 *n;new PeopleMa nage

38、;return 0;ostream & operator (ostream& os, const RecordVec& c_r1)/流操作符 重载_RecordVec:co nst_iterator it;/ 利用游标遍历向量数组一RecordVec:c on st_iterator it_end = c_r1.e nd();for (it=c_r1.beg in(); it!=it_e nd; it+)os nu mber n n ame n sex n id n birth.getYear() birth.getMo nth() birth.getDay()vvn;os telepho n

39、e naddress n departme nt n post n salary n;os 重istream & operator(istream& is , RecordVec& r1)载int a, b, c;Record* rec;/指向记录职员基本信息类的指针stri ng nu mber;while (true)getl in e(is ,nu mber);if (n umber=)读到文件尾发现空字符即跳出循环break;rec = new Record;/为指针所指向的对象申请内存空间rec- nu mber = nu mber ;getli ne(is,rec- n ame);

40、getli ne(is,rec-sex);getli ne(is,rec-id);isabc;is.ig nore ();rec-birth.setdate (a,b,c);getli ne(is,rec-telepho ne);getl in e(is,rec-address);getli ne(is,rec-departme nt);getli ne(is,rec-post);isrec-salary;is.ig nore();r1.push_back (rec); /运用STL库函数写入向量数组 _return is;peopleMa nage.cp#i nclude#in clude#

41、i ncludevioma nip#in cludepeopleMa nage.husing n amespace std;/定义静态数据PeopleMa nage : PeopleMa nage(void)isModified = false;toRemvNodes = 0; start();PeopleMa nage : PeopleMa nage(void)/*功能:显示欢迎界面,并进行用户交互处理*/void PeopleMa nage : start()ncoutnt t 一个小型的人事管理系统 nt 欢迎使用! nt nt 欢迎提出 宝贵 意 见 nVVt nn;han dleMe

42、 nu();/*功能:显示菜单,返回用户选择的选项*/char PeopleManage : menuSelect() 菜单项,返回选择的数字字符coutnt0保存记录nt1添加记录nt2显示记录nt3修改记录nt4删除记录nt 5新建职员信息文件nt6查找记录nt 7读取记录(从文件)nt 8记录排序nt9结束运行n str;cin.ignore(); 从cin中将回车符取出来choice=str0;int size=str.le ngth();if (choice9|size9)/有效性检验,这也是我选择返回字符而不是数字的原因cerrn 输入错误,重选 0-9: - bb;cerr是立刻

43、显示else/借机了解了一下cerr和cout的区别:数据。cout是先将数据缓存到内存中,最后一起输出。break;retur n choice;void PeopleMa nage : han dleMe nu()while(true)switch(me nu Select()case0:system(cls);/ 清空控制台saveRecords();break;case1:system(cls);addRecord();break;case2:system(cls);displayRecords();break;case3:system(cls);modifyRecord();break;case4:system(cls);removeRecord();break;case5:system(cls);clear();addRecord();break;case6:system(cls);searchRecord();break;case7:system(cls);loadRecords();break;case8:system(cls);so

温馨提示

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

评论

0/150

提交评论