软件工程实践校外实习报告.doc_第1页
软件工程实践校外实习报告.doc_第2页
软件工程实践校外实习报告.doc_第3页
软件工程实践校外实习报告.doc_第4页
软件工程实践校外实习报告.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

郑 州 轻 工 业 学 院校 外 实 习 报 告实习名称: 软件工程实践 姓 名: 鲁雪颖 院 (系): 软件学院 专业班级: 软件卓越12-01 学 号: 541213440128 指导教师:朱凯 甄磊 徐洁 殷知磊 黄艳 邓璐娟主要实习单位: 上海 杰普 成 绩: 时间: 2014 年 6月 23 日至 2014 年 7 月 18 日38实习成绩评定表实 习 单 位实习单位指导技术人员评语签名成绩指导教师评语总成绩:目录1、概要41.1实践时间41.2主要学习内容41.3实习指导老师41.4“软件工程实践”项目任务书51.5实践计划(半天版)附22、实践内容82.1 linux技术82.2 corejava技术93、项目练习143.1 项目1:计算器项目143.2项目2:简易版聊天室项目224、实习总结361.概要:1.1实践时间(2014年6月23日至2014年7月18日)1.2主要学习内容1)linux操作系统技术2)corejava技术 3)项目内容(计算器 简易版聊天室)1.3实习指导老师朱凯、甄磊、徐洁、殷知磊、黄艳、邓璐娟1.4“软件工程实践”项目任务书(附1)1.5实践计划(半天版)(附2)附1:郑州轻工业学院软件学院学生实践任务书一、题目“软件工程实践(一)”二、学生信息专业 软件卓越12-01 学号 541213440128 姓名 鲁雪颖 三、任务与约束1、熟练掌握linux操作系统,vi各种命令,在vi中编写java,在linux环境下编写代码,完成项目。2. 熟练掌握corejava的基础知识,真正学会了编程的思想,能够站在代码的角度去看问题,能够独立的完成每个课后练习。3.利用所学知识,能够独立编写出计算器。4.利用所学知识,能够完成简易版的聊天室。5构思计算器,简易版的聊天室项目,需求分析,系统设计,确定项目要实现的功能6开始编写代码,实现项目的主要功能7测试主要功能,处理bug。8项目验收、完成“软件工程实践报告”四、设计要求、技术参数及设计规格1.应用程序提供友好的图形用户界面。2.应用程序要具备健壮性、稳定性和好的移植性。3界面要为用户提供方便的导航。4.功能要达到老师的要求。5.允许存在不影响功能的小的bug。应用程序开发要求:选用技术:java软件集成开发环境(ide):netbeans、myeclipse、eclipse等,在linux下开发。设计要求:1、图形用户界面设计:用gui设计计算器和简易版聊天室系统的界面。2、功能实现:根据自己需求对计算器和简易版聊天室。3、设计规格:请根据java规范编写。五、进度日历天/日期任务描述通过标准14年6月23日上午先熟悉linux。下午学习linux的一些基本操作。对linux有更深的了解,会用命令操作ubuntu。14年6月24日上午学习vi编辑,掌握基本的vi命令。下午学习网络 ,shell脚本。会熟练使用vi命令编辑。14年6月25日上午自己再复习下linux,熟悉下corejava了解编程的思想。熟练的掌握linux,对corejava有更深的认知。14年6月26日使自己迅速进入编程的角色。掌握命名规范 面向对象 类和对象 变量的分类。熟练掌握命名规范 面向对象 类和对象14年6月27日熟悉 掌握 array 数组,并熟练应用。独立完成发牌器完成 实现发牌器小程序。14年6月30日学习对象和类 知道面向对象编程有三个特性:封装,多态,继承学习构造方法,构造器。能够明白封装,多态,继承,并熟练的应用。14年7月1日学习高级语言特性与应用,掌握static final 学习抽象化编程 接口编程独立完成针对各个模块的的练习14年7月2日学习包装类 集合collection和iterator接口set(hashset treeset)学习list map(hashmap treemap)反射独立完成针对各个模块的的练习14年7月3日学习异常(trycatch throws )学习building guis 图形用户界面能够熟练的应用各种异常。14年7月4日学习使用gui的四个步奏编写个小型计算器能够独立完成计算器的编写14年7月7日验收计算器验收结束14年7月8日学习线程 线程新建和启动熟练创建和使用线程。14年7月9日线程状态(就绪、运行、死亡、阻塞)线程调度 线程的两大操作(并发 同步独立完成课后针对作业14年7月10日学习对象序列化 ;反序列化下午:学习各种输入 输出流能够熟练地掌握各种输入 输出流14年7月11日network(socket server client server)下午:要求根据前面所学内容做一个:简易版的聊天室独立完成课上针对该模块的练习。开始构思简易版的聊天室14年7月14日项目准备阶段:项目概要设计和详细设计,确定项目要实现的功能完成项目计划书中的项目需求和系统设计14年7月15日根据需求分析:设计好服务端和客户端的页面。完成聊天室的服务端和客户端的gui页面。14年7月16日根据页面逐步完善功能:编写服务端的sokect和客户端的serversocket,逐步给服务端和客户端的send和star按钮加上监听完成在服务端和客户端点击send按钮,信息能在各自的showarea 中显示出来14年7月17日逐步完善服务端和客户端的线程,项目大致已经完成到老师要求。对项目进行测试,寻找bug。保证了服务端客户端互相发送的信息能相互接收到。没有明显影响软件运行的错误,界面美观,代码整齐。14年7月18日项目验收项目验收通过 六、考核形式、考核时间、考核指标及成绩评定实践成绩由下面构成:学习纪律、学习态度和平时表现占20%;实践结果占30%;实践报告占30%;实践操作能力占20%。考核形式:1)老师每日对学生的考察、评估和考核;2)最后对实践项目完成的质量进行考核和验收。完 成 期 限:2014年7月18日指导教师签章:朱凯、甑磊、徐洁、殷知磊、黄艳、邓璐娟专业负责人签章: 教学院长签章 14年 6月 15日1、 实践内容2.1 linux技术(1)linux的三大组成部分:keenel shell fill system(2)shell的操作页面,shell命令操作计算机,windows文件操作结构,一些基础命,元字符,文本操作。(3)vi编辑器,vi的三种模式,vi的基本命令, grep, 统计 进程。l vi的三种模式:命令行模式:默认进入的模式 ( 输入命令,执行相应的操作)。底行模式:全文操作 (全文保存全文退出全文搜索全文替换)。输入模式和底行模式是不能直接转换的,要通过命令行模式转换。l vi的基本命令:(删除,替换,拷贝,保存,查找)。l 统计:wc options filename(s)ll-l counts linesll-w counts wordsl -c counts characters(4)网络,shell 脚本设置,配置初始化环境,umask,bashr,配置java。l shell 脚本建文件: touch a.sh 进入vi : vi a.sh #!/bin/shpwdcaldate权限:chmod a+x filename chmod a+x a.sh执行:./ filename ./a.shl 配置初始化环境环境变量path echo $pathls /etc 系统初始化文件 /etc/profile:系统级别的初始化文件 ls a /home/briup/.bashre: 用户级别的初始化文件 ls a /home/briup/.profile:用户级别的初始化文件 ls a /home/briup/bash_.profile: 用户级别的初始化文件配置java:vi /.bashrc 写入:path=$path/opt/java 1.6.0_24/bin 验证:java version2.2 corejava技术(1)getting started : l 设置java开发环境; a. 获取j2sdk; b. 安装j2sdk; c. 设置环境变量:java_home,path (2)identifiers,keywords,and typesl comments:注释/ /*-*/单行注释 /*-*/文档注释l primitive types in java:基本数据类型(4类8种)整型:byte short int long浮点型:float double布尔类型boolean(true false)单字符字型char 两个字符:char zhchar = 中; char enchar = a; char ucchar=u0060;l 面向对象类 : class classname 属性方法 (3)expressions and flow control l 变量的分类:基本数据类型变量 ,引用数据类型变量(类变量)根据:存储的数据类型l 操作符:赋值操作符:=复合赋值操作符:a+=b-a=a+b比较操作符:基本操作类型比的是之本身new 就有全新的引用+:如果前后一个是字符串,那么操作就变成了字符串连接操作/:整数 取商 有浮点数 近似值%:取余l 数据类型转换-当数据的数据类型和存储的变量类型不一致时候 例: int i=10; float f =i;l 语句:if:先判断 后执行, 执行一次字句 over。switch :break 是case条件值结束代码的关键字,如果没有将继续往下执行switch 后的类型只能是 byte short int char死循环 不能有。for,while,do while (4)arrays l declare arrays:申明创建数组l 遍历l 二维数组 (5)objects and classesl 面向对象编程有三个特性:封装,继承,多态l 抽象数据类型l 参数传递 (6)advanced language features l static 静态l finall abstractl 实现:implement 原来的继承l final类型l 抽象化编程 接口编程l 包装类作用: 1) 用引用类型表示数值;例如表示一个缺考学生的成绩; 2) 有些场合必须要引用类型;例如集合中只能存储引用类型; 3) 实现基本类型间以及与字符串间转换;l 集合: 由数组的缺点引出集合java中集合主要分为三种类型: 1)set(hashset, treeset) : 无序,并且没有重复对象。 2)list: 有序(放入的先后的次序), 可重复。 3)map(hashma, treemap) : 集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。l 反射1) 确定一个对象的class2) 可以获得一个类的修饰符、字段、方法、构造器和父类。3) 获得接口声明的常量和方法。4) 创建class的实例,直到运行时才获得。5) 运行前即使字段名字不知道,可以到程序运行时获得和修改这些字段的值。6) 运行前即使对象的方法名不知道,可以到程序运行时触发调用该方法。7) 运行前创建了一个大小和元素都未知的新数组,可以到运行时修改数组的元素。(7)exceptions try.catch语句l throws 抛异常l assertion 断言:测试代码时 (8)building guis & the awt event modell 选择容器(frame panel)l 选择布局管理器:java.awt包提供了5种布局管理器:1) flowlayout流式布局管理器;2) borderlayout流式布局管理器;3) gridlayout流式布局管理器;4) cardlayout流式布局管理器;5) gridbaglayout流式布局管理器;l 添加组件l 给组件添加事件处理l 事件源1) 是一个组件或对象,用来产生事件;2)通过事件源来实例化事件类型对象;3) 提供方法增加和删除事件监听器4)维持一系列有兴趣的事件监听器 事件源产生事件后,必须将事件对象传递给事件监听器, 让事件监听器去处理。因此事件源必须能够访问到事件监听器 对象。如何访问呢?可以将事件监听器作为事件源的属性或事件监听器数组、集合类型作为事件源的属性; 所谓增加或删除事件监听器无非是修改事件监听器属性的值;逻辑上包括了创建和传递适当类型的事件对象给所有感兴趣的事件监听器 (9):threads l 线程新建和启动:一种:extending the class thread 二种: implementing the interface runnablel 线程状态:就绪、运行、死亡、阻塞线程在它的生命周期中会处于各种不同的状态;1)新建状态(new)用new语句创建的线程对象处于新建状态, 此时它和其他java对象一样;仅在堆区中被分配了内存;2) 就绪状态(runnable)当一个线程对象创建后,其他线程调用它的start()方法, 该线程就进入就绪状态,java虚拟机会为它创建方法调用栈。处于这个状态的线程位于可运行池中, 等待获得cpu的使用权。3)运行状态(running)处于这个状态的线程占用cpu,执行程序代码。在并发运行环境中, 如果计算机只有一个cpu, 那么任何时刻只会有一个线程处于这个状态。如果计算机有多个cpu, 那么同一时刻可以让几个线程占用不同的cpu,使它们都处于运行状态。只有处于就绪状态的线程才有机会转到运行状态。4)阻塞状态(blocked)指线程因为某些原因放弃cpu, 暂时停止运行。当线程处于阻塞状态时,java虚拟机不会给线程分配cpu,直到线程重新进入就绪状态,它才有机会转到运行状态。l 线程的两大操作:并发, 互斥,加锁(10) :stream i/o and files l 对象序列化 ,反序列化对象的序列化: 把对象写到一个输出流;对象的反序列化:从一个输入流中读取一个对象;l 字节输入流和输出流概述 文件 输入流 输出流 文件 内存 - java程序 - 内存 键盘 控制台 数据源 数据目的地l 输入流和输出流层级结构bytearrayinputstream:把字节数组转换为输入流; fileinputstream: 从文件中读取数据; pipedinputstream: 连接一个pipedoutputstream; sequenceinputstream: 把几个输入流转换为一个输入流;objectinputstream: 对象输入流; filterinputstream: 过滤器,扩展其它输入流功能;l bufferedinputstream类l datainputstream 类readbyte()从输入流中读取1个字节,指它转换为byte类型的数据;readlong()从输入流中读取8个字节,指它转换为long类型的数据;readfloat()从输入流中读取4个字节,指它转换为float类型的数据;readutf() 从输入流中读取1到3个字节,指它转换为utf-8字符编码的字符串l 管道输入类:pipedinputstream 类l inputstreamreader类l filereader类filereader(file file): 参数file指定需要读取的文件; filereader(string name): 参数name指定需要读取的文件的路径;l bufferedreader类l file类l fileinputstream and fileoutputstreaml filereader and filewriterl printwriter (11):networking l server开启服务-产生端口serversocket(int port) 创建绑定到特定端口的服务器套接字。serversocket ss=new serversocket (8888);死循环,机器不断运行while(true) socket socket =ss.accept();用输入流包装l clientimport java.awt.*;public void actionperformed(actionevent e)socket socket =new socket(localhost,8888); /链接端口3、项目练习3.1项目1:计算器项目3.1.1问题描述或需求分析:1)运算器功能需求用户能够完成四则混合运算加减乘除,并且运算器能够自动的识别运算符的优先级,根据输入的运算公式,自动计算出相应的结果。同时完成运算器中的baclspace.ce按钮,能够完成消除或者删除的功能。 2)出错处理需求 当用户如果按下的是除零的操作,显示框将显示“被除数不为0”;当用户如果连续多次按下运算符,运算器自动记忆第一次运算符,并且做防连续输入相同的运算符或者是不同的运算符。当用户在同一个数据中多次输入小数点,运算器能够自动判断小数点重复,自动只记忆第一个小数点。当用户在同一个数据中输入多个负号,运算器能够自动做重复检查,不显示多余的负号。当用户在使用backspace功能删除越界数据时候,运算器自动作相应的处理。3)数据处理需求 在程序的起始,建立两个栈,分别用来存储操作数和操作符。在运算器的核心运算代买中,运用这两个栈来实现算法中的优先级的处理,使用“#”号来标记计算公式的结束。目标计算公式通过运算器的键盘实现输入,当按下“=”号之后,运算器通过调用运算器核心函数来实现数据的处理。3.1.2问题求解设计1)系统总体分析:对于此次运算器程序,首先设计其gui界面,总体界面有一个文本框,总界面用boderlayout布局。文本框放置到一个面板panel中,添加到整体布局的中心,界面设计完成。布局设计好后再添加按钮事件。对于此程序考虑到点击加减乘除按钮时是否点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加减乘除按钮则直接把数字按钮的数值设置到文本框中,否则应把文本框中的内容加上用户所点击按钮的数值设置到文本框中。在进行加、减、乘、除计算时点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。2)系统界面部分:主窗体包含的控件中要有:标签,用于显示提示语句;文本文档,用于用户数值的;按钮键,用于处理操作。界面初始化时,将一些按键,例如完成加、减、乘、除运算按键设置成不可用,这样可以防止误操作,每次按钮按下时,都有相应的按钮属性被更改。3)系统后台部分:后台部分,核心就是产生随即算术式,用一个字符串数组存放加和减的操作符,产生一个0-9的随机数,通过此随机数对应操作符数组中的字符,决定产生的算术式为加法或减法,然后进行两个数值的四则运算,通过以上运算求出结果,保存在私有变量中,同时对应的产生一个通过连接完成的字符串,作为界面题目输出的内容,以上便完成随机算术式的生成。 4) 运算器总系统功能图:3.1.3代码编写:import javax.swing.*; import java.awt.*; import java.awt.event.*; public class calculate extends jframe implements keylistener private container contentpane;private string key = 7, 8, 9, c, /声明一个字符串 4, 5, 6, +, 1, 2, 3, -, 0, ., =, *, %,sqr,-,/ ; private jbutton briup_jb = new jbuttonkey.length; /声明计算器上的按钮private jbutton briup_jb1,briup_jb2; /声明菜单栏的按钮 private jtextarea briup_jt;private jpanel briup_jp0,briup_jp1,briup_jp2;private stringbuffer bruip_str; /声明一个字符串变量private char ch; private boolean briup_bl;/声明一个布尔值 private double x=0,y=0; private string str1=type wrong; private string str2=tip;public calculate(string title)/主题窗口设置 settitle(title);setsize(300,200);setdefaultcloseoperation(exit_on_close);contentpane = getcontentpane();init();public void init() ch=m; briup_bl=false; bruip_str=new stringbuffer();briup_jp0 =new jpanel(); /菜单栏按钮briup_jp0.setlayout(new flowlayout(flowlayout.left,2,2);briup_jb1 =new jbutton(help!);briup_jb2 =new jbutton(note!);briup_jp0.add(briup_jb1);briup_jp0.add(briup_jb2);briup_jp1 =new jpanel();briup_jp2 =new jpanel();briup_jt = new jtextarea(2,10); briup_jt.settext(0); briup_jt.addkeylistener(this); briup_jt.seteditable(false); briup_jt.setbackground(color.white);/设置背景颜色briup_jp1.setlayout(new borderlayout(4,1); briup_jp1.add(center, briup_jt); briup_jp2.setlayout(new gridlayout(5,4,0,0); buttonlistener btnlistener = new buttonlistener(); for (int i = 0; i key.length; i+) briup_jbi = new jbutton(keyi); briup_jbi.addactionlistener(btnlistener);/注册监听器 briup_jbi.addkeylistener(this);/添加键盘监听器 briup_jp2.add(briup_jbi); / 运算符键用红色标示 briup_jb3.setforeground(color.red);briup_jb7.setforeground(color.red);briup_jb11.setforeground(color.red);briup_jb15.setforeground(color.red);briup_jb16.setforeground(color.red);briup_jb19.setforeground(color.red);briup_jb14.setforeground(color.yellow);contentpane.setlayout(new borderlayout();contentpane.add(north,briup_jp0); contentpane.add(center,briup_jp1); contentpane.add(south,briup_jp2); /把两个面板加入一个盒式布局管理器 setresizable(false); contentpane.setvisible(true); /设置可见 class buttonlistener implements actionlistener /构造监听器 public void actionperformed(actionevent e) /获取事件源的标签 string s = (jbutton)e.getsource().gettext().trim(); /得到用户按下的按钮上的文本 char c = s.charat(0); /得到s中索引为0的字符 if(c = c) /选择按钮c briup_jt.settext(0); bruip_str.setlength(0); /设置值为0 ch = m; briup_bl = false; /设置布尔值为假 x = 0; y = 0; return; /返回 if(c = .) /选择输入小数点 if( briup_jt.gettext().trim().indexof(.) != -1) return; /判断小数点是否存在 else bruip_str.insert(bruip_str.length(),.); briup_jt.append(.); /把点加到数字后面 return; if(c = +|c = -|c = *|c = /|c = =) /按加减乘除或等号键 caculate(c); return; briup_jt.settext(bruip_str.append(s).tostring(); /剩下的数字键 briup_bl=true; public void keytyped(keyevent ek) /实现键盘监听器 char c = ek.getkeychar(); /获取键盘上按的值 if(c=1|c=2|c=3|c=4|c=5|c=6|c=7|c=8|c=9|c=0) /按数字键 briup_jt.settext(bruip_str.append(c).tostring(); /把文本框里的内容转变成string类 briup_bl=true; return; if(c =.) /按小数点 if(briup_jt.gettext().trim().indexof(.) != -1) return; else bruip_str.insert(bruip_str.length(),.); briup_jt.append(.); return; if(int)c = keyevent.vk_delete ) /按删除键 briup_jt.settext(0); /设置文本框里的内容为0 bruip_str.setlength(0); ch = m; briup_bl = false; x = 0; y = 0; return; if(c = +|c = -|c = *|c = /|c = =) /按加减乘除键 caculate(c); /调用caculate if(c = =) /按等号键 equal();/调用equal public void keypressed(keyevent ek) public void keyreleased(keyevent ek) public void caculate(char c) /实现calculate方法 if(briup_bl=true & ch != m) /判断是否要运算 y = double.parsedouble(briup_jt.gettext().trim(); /取值去掉左右两边的空格并转换成双精度浮点数 switch(ch) case + : x = x+y; break; case * : x = x*y; break; case - : x = x-y; break; case / :if(y != 0) x = x/y; else joptionpane.showmessagedialog(null, str1, str2,joptionpane.error_message);return;/错误提示,除数不能为0 briup_jt.settext(+x); briup_bl = false; else x = double.parsedouble(briup_jt.gettext().trim(); /取值去掉左右两边的空格并转换成双精度浮点数 bruip_str.setlength(0); /设置长度为0 y = 0; ch = c; public void equal() /equal方法实现 y = double.parsedouble(briup_jt.gettext().trim(); switch(ch) case + : x = x+y; break; case - : x = x-y; break; case * : x = x*y; break; case / :if(y != 0) x = x/y; else joptionpane.showmessagedialog(null, str1, str2,joptionpane.error_message);return;/错误提示 briup_jt.settext(+x); briup_bl=false; public static void main(string args) calculate cal = new calculate(broken girls -ver 1.0 by1901&1903 ); cal.setvisible(true); 3.1.4项目测试与调试:1)测试方案 程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的e,当结果太大的时候,有可能超出可能表示最大值(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if语句,如果结果大于某一值就抛出一个输出值太大的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象,然后进行重制归零的处理。3.1.5运行效果:运行calculator.java时结果如下:结果分析:在进入页面后,就可以实现运算,例如(8+8-4+6)*4=72.03.2项目2:简易版聊天室项目3.2.1问题描述或需求分析:本系统所要实现的主要功能是为广大用户提供一个借助网络进行人际交往的平台。因为服务端采用多线程,所以性能有很大提升。因为服务端和客户端之间采用tcp协议进行网络通信,建立的是可靠的、端到端的网络连接,所以可靠性和安全性都很好。主要用例分析服务器端的主要功能如下:1) 在特定端口上进行侦听,等待客户端连接2) 用户可以配置服务端的侦听端口,默认端口为8888.3) 向已经连接到服务端的用户发送系统消息。4) 统计在线人数5) 当停止服务时,断开所有的用户连接。客户端的主要功能如下:1) 连接到已经开启的聊天服务的服务端。2) 用户可以配置要连接服务器端的ip地址和端口号。3) 用户可以配置连接后显示的用户名。4) 当服务器端开启的时候,用户可以随时登录和注销。5) 用户可以向所有人或者某一个人发送消息。3.2.2问题求解设计:1) 设计方法:界面:用gui编写。在设计简单聊天室时,需要编写两个个java源文件:server.java、client.java。2) 代码构造如图:server.javapublic server()在该构造器里完成界面的编写public void serversocket()serversocket方法完成一个侦听的工作,并为建立连接的客户端增加线程class send extends thread服务端发送信息的线程class recive extends thread服务端接受信息的线程client.javapublic client()在该构造器里完成界面的编写public void serversocket()必须指出服务器端套接字的地址和端口号,然后就向服务器端提出连接请求,并为建立连接的客户端增加线程jbsend.addactionlistener(new actionlistener()客户发送信息class recive extends thread客户读取信息的线程3)系统流程图:talkroom客户端服务器端监听器输入输出输入输出接口接口发送接收发送接收结束3.2.3代码编写:server.java的源码:package com.briup.test;/* * * author lxy */import java.awt.*;import java.awt.event.*;import java.

温馨提示

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

评论

0/150

提交评论