数据结构课程设计(简单计算器c语言)_第1页
数据结构课程设计(简单计算器c语言)_第2页
数据结构课程设计(简单计算器c语言)_第3页
数据结构课程设计(简单计算器c语言)_第4页
数据结构课程设计(简单计算器c语言)_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、郑州师范学院信息科学与技术学院简单计算器课程设计报告设计题目:简单计算器班级:b15计科二班组长:组员:指导教师:完成日期:2016年12月23日成绩:本次选做的课程设计是实现简单计算器的问题。计算器是一个常用的运算工具,本次 课题要求用程序语言的方式解决问题。此问题仅使用数据结构中的栈操作就可以解决此问 题。而在为了方便使用,添加了 easyx图形库实现了 ui设计。为了接近平常使用的计算器,特地创建死循环而且添加了 “ce驾青空输入和“v删除 键来控制输入错误或者循环使用的问题。在ui方面主要是实现按键和点击响应等交互, 方便输入和修改,在程序框上面有输入和显示结果的文本框。在计算过程中,

2、以栈岀栈进 站的特性把中缀形式的算数表达式转化为计算机方便计算的后缀表达式,最后计算出结果 以文本方式显示在结果输出框内。摘要i目录ii1需求分析31.1功能简介及分析31.2设计平台32概要设计32.1 trans 函数32.2 compvalue 函数42.3 getkey 函数43详细设计和实现43转化为逆波兰式43.2计算逆波兰式63.3实现流程图73.3部分具体程序84调试与操作说明134调试情况134.2操作说明145设计总结15参考文献161需求分析1.1功能简介及分析本次选做的课程设计是实现简单的计算器并且添加ui的交互。此计算器是 以软件的形式实现的计算器,运行在window

3、s系统。计算器在功能上分为三类, 分别是:常见计算器,专用计算器,综合功能计算器。常见的计算器乂分为四种: 简单型计算器:只实现基本的加减乘除和括号运算。 科学型计算器:可以进行乘方、开方、指数、对数、三角函数、统计等方面 的运算,又称函数计算器。 程序员计算器:专门为程序员设计的计算器,主要特点是支持and, or, not, xor:最基木的与或非和异或操作,移位操作lsh, rsh:全称是left shift和righ( shift,也就是左移和右移操作,你需要输入你要移动的位数(不能大于最大位数) rol, ror:全称是rotate left和rotate right,对于rol来讲

4、,就是向左移动一 位,并将移出的那位补到最右边那位上,ror类似。 统计型计算器:为有统计要求的人员设计的设计的计算器。本次课程设计只是实现了常见的简单计算器:在界面上:简单的计算器需耍有简单的按键和按键响应,有输入和结果的显 zj l o在功能上:能进行加减乘除混合运算,可以使用括号,有“nt键可以存储结 果,以便下次计算使用,可以对输入的文木删除和重置。并且可以在重置后继续 使用。1.2设计平台windows7 操作系统;visual studio 20152概要设计2.1 trans 函数主要功能屮缀算术表达式转化成后缀表达式,然后存到栈里,以便计算时使用,转化吋包括对小括号的匹配。2.

5、2 compvalue 函数主要功能是对栈中的后缀表达式进行计算,然后返回float类型的结果。2.3 getkey 函数getkey主要是在ui界面中获取按键然后保存成字符数组或者对字符数组的 增减操作的函数。此函数为内置死循环,可以重复使用。3详细设计和实现实现软件形式的常用简单计算机,主要用到栈的特点,把平常使用的表达式, 转化为能够让计算机计算的逆波兰表达式。中缀表达式(或中缀记法)是一个通用的算术或逻辑公式表示方法,操作 符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术 表示方法。与前缀表达式(例:+3 4)或后缀表达式(例:3 4+)相比,中缀表达式 不

6、容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用 括号将操作符和对应的操作数括起来,用于指示运算的次序。例:(1) 8+4-6*2用后缀表达式表示为:62*84+-(2)2* (3+5) -4+7/1 用后缀表达式表示为:35+2*71/4-+3.1转化为逆波兰式首先需要分配2个栈,一个作为临时存储运算符的栈s1 (含一个结束符号), 一个作为输入逆波兰式的栈s2 (空栈),s1栈可先放入优先级最低的运算符#, 注意,中缀式应以此最低优先级的运算符结朿。可指定其他字符,不一定非#不 可。从中缀式的左端开始取字

7、符,逐序进行如下步骤:(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入 s2栈(2)若取出的字符是运算符,则将该运算符与s1栈栈顶元素比较,如果该 运算符优先级大于s1栈栈顶运算符优先级,则将该运算符进s1栈,否则,将 s1栈的栈顶运算符弹出,送入s2栈中,直至s1栈栈顶运算符低于(不包括等 t)该运算符优先级,则将该运算符送入s1栈。(3) 若取出的字符是“(”,则直接送入s1栈底。(4) 若取岀的字符是“)”,则将距离s1栈栈底最近的“(”之间的运算 符,逐个出栈,依次送入s2栈,此时抛弃“(”。(5) 重复上面的14步,直至处理完所有的输入字符。(6) 若取出的字符是“

8、#”,则将s1栈内所有运算符(不包括“#”),逐 个出栈,依次送入s2栈。完成以上步骤,s2栈便为逆波兰式输出结果。不过s2应做一下逆序处理。 便可以按照逆波兰式的计算方法计算了 !例如转换:2- (1+2) *3+4遇到2(1+2)*3+4-3+ 212优先级 小于或等于下 列运算符,所 以全部弹出, 放入"+“12当表达式内字符 全部读取后,s1 中还有运算符, 则将s1中一次弹 岀到s2141311*3+212转换后的逆波兰表达式是:2 12 + 3*4 +3.2计算逆波兰式逆波兰式的计算同样用到了栈的特点,首先需要建立一个空栈t,然后从头 遍历逆波兰式,如果是数字则直接放到栈

9、顶,如果遇到操作符则连续取出两个栈 顶数据,分别赋值给nl,n2,再根据操作符计算nl和n2,把得到的结果放到t 栈栈顶,继续操作,直到遍历完毕。以上面的例子计算过程如图:3_+22s2遇到运算符(4),连续取岀两个栈顶元素 逬行计算遇到运算符123139222ttt遇到运算符t12遇到运算符14117-313t最后得出的结果是3,即2(1+2) *3+4二3;所以计算的具体过程是先转化屮缀表达式为逆波兰表达式,然后由逆波兰表 达式计算岀结果,在转化的过程和最后的计算过程都用到了栈的思想,利用栈的 进栈和出栈的特点实现转换。3.3实现流程图简单运行流程图3.3部分具体程序界面显示文字,表示结朿

10、位置char keystr4 ce,jz, 1m, ( ,),八, 8,9,厂6, 丫 ,3, 00, ©, ,void trans (str *lnstr , char lasts)/*将算术表达式转化为后缀表达式*/int i = 1;char stack max ;/*作为栈使用*/char chstr = lnstr->stri ; /用于保存数组里的临时元素 i+;int laststrpos 二 1, stacktop 二 0; /stacktop用于表示栈顶while (chstr != ' #') switch (chstr) case,(

11、9; :/*判定为左括号*/stacktop+; stackstacktop二 chstr;break;case')' :/*判定为右括号*/whi 1 e (stackstacktop != ' (') lastslaststrpos = stackstacktop;stacktop-; laststrpos+; stacktop-;/扔掉(break;case'+' :/*判定为加减号*/case,-':whi1e (stacktop !二 0 && stackstacktop !二'(') lasts

12、laststrpos二 stackstacktop;stacktop-; laststrpos+; stacktop+;/保留(stackstacktop = chstr;break;case'*' :/*判定为乘除号*/case* /':while (stackstacktop二二*' | stackstacktop = '/') lasts laststrpos = stackstacktop ;/如果栈顶是*或者/弹岀,放到后缀数组里stacktop-;laststrpos+;stacktop+;stackstacktop = chstr;

13、break;casc, ' :break;/忽略空格default:whi1e (chstr >二'o' && chstr二'9' | | chstr 二二'.') /*判定为数字*/lastslaststrpos = chstr;laststrpos+;chstr = instr->stri;i+;i-;lastslaststrpos二'';/输出的时候隔开元素laststrpos+;chstr = instr->stri; i+;while (stacktop != 0) lastsl

14、aststrpos = stackstacktop;laststrpos+;stacktop-;lastslaststrpos二;laststrpost = laststrpos;float compvaluc(char laststrtemp) /*计算后缀表达式的值*/float stackmax; char chstr;int stacktop = 0;/*作为栈使用*/临吋栈元素/laststrpos为lasts 卜标,stacktop为stack下标*/int laststrpos 二 1;chstr 二 laststrtemplaststrpos;laststrpos+;whi.l

15、e (chstr !=') switch (chstr) case* +':stackstacktop - 1stacktop-; break;case,-':stackstacktop - 1stacktop-; break;case,*':stackstacktop - 1stacktop-; break;case' /':if (stackstacktop=stackstacktop - 1 +=stackstacktop 一 1二 stackstacktop 一 1 *!= 0)stackstacktop;stackstacktop;st

16、ackstacktop;1 /stackstacktop - 1二 stackstacktop - stackstacktop;elseexit(0) ;/*异常退出*/stacktop-;break;default:float numstr = 0; /把数字字符转化为数字bool finum = 0;whi1e (chstr 二'o' && chstr二'9' | | chstr 二二'.')if (chstr 二二;)finum 二 1;else if (!finum) numstr 二 10 * numstr + chst

17、r - 'o' ;/*将数字字符转化 为对应的数值*/else if (finum) numstr +二 0. 1 * (chstr - ' o') ; /*计算小数*/chstr = laststrtemplaststrpos; laststrpos+;stacktop+;stackstacktop = numstr;chstr = laststrtemplaststrpos; laststrpos+; return stackstacktop;void getkey () aflushmousemsgbuffer清空鼠标消息缓冲区。gctmouscmsg获取

18、一个鼠标消息。如果当前鼠标消息队列屮没有,就一 直等待。mousehit检测当前是否有鼠标消息。m0usemsg保存鼠标消息的结构体。*/mousemsg msg;rect r = 0 , winkeyy * 2 / 3 , winsizex, winkeyy * 2 ;image clearlmgup , clearlmgdown;int propos二0;/上一个点击的按钮int temp二0; /当前点击的按钮 int incon = 0;/输入的字符数int tempi = 0;float laststrtemp = lastv;char strtem讥max;char m_str20

19、 = '/o' ;flushmousemsgbuffer ();getimage(&clearimgup, 1, 1, winsizex , winkeyy *2/3);/获得输入区域的截图,用于覆盖原先输入的内容getimage(&cleartmgdown, 1, winkeyy *2/3, wtnstzex, winkeyy * 2); /获得输出区域的截图,用于覆盖原先输入的内容wh订e (true) msg = getmousemsgo ;if (msg. umsg) temp 二 judgepos (msg.x, msg.y);switch (msg.

20、 umsg) case wm_lbuttondown:setlinecolor (yellow);rectangle(postemp.x0, postemp.y0, postemp.xl, postemp. y 1);switch (temp) case 1:getstr0二'0'put imaged, 1, & clcarlmgup);putimage (1, w1nkeyy *2/3, &clearlmgdown);incon = 0;printstr ();break;case 2:if (incon > 0) /判断是否有输入的字符getstrin

21、con - 1二'0'putimage(1, 1, &clearlmgup);tncon-一;printstr ();break;case 3:strcats(getstr, mstr);tncon+;printstr ();break;case 24:settextstyle(50, 0, _t(''prestige elite std);/设置字体大小,宽度,文字样式"putimage(1, winkeyy *2/3, &clearlmgdown);givestr (getstr, thelaststr);drawtext (_t(

22、thelaststr), &r, dt_right | dt_vcenter dt_singleline);break;case 7:case 8:break;default:strcat_s(getstr, keystrtemp - 1);incon+;printstr ();sleep (50);break;case wm_rbuttondown:setlinecolor(blue);rectangle(postemp.x0, postemp.y0, postemp.xl,postemp. y1);switch (temp) case 3:strcpy (m str, thelas

23、tstr);break;break;setlinecolor(black);rectangle(pospropos. x0, pospropos.y0, pospropos.xl, pospropos. y1);if (temp != 0) setlinecolor (red);rectangle(postemp. x0, postemp, y0, postemp. xl,postemp.y1);propos = temp;4调试与操作说明4.1调试情况这次的课程设计的代码很冗长,在实现整个思路之后难免会有很多错误。编 写代码过程中遇到很多错误和难题。不过经过一点点的改正和攻克,错误也慢慢 地

24、变少,难题也逐个解开。在计算机领域代码无论在逻辑上述是在编写上都不允 许有一点错误,因为一点的错误就会使整个程序崩溃,有时即便能够成功运行, 得出的结果也有可能和预期的结果千差万别,但是也是因为这样的严谨编写和工 作学习中,使得调试或者编写代码的人逐渐培养出了有耐心,有毅力,并且严谨 细心的心境。一般在编写代码过程留下的逻辑错误或者编写错误都会在调试的时 候遇到,这个时候就体现岀了调试的重要性。调试可以使程序的可运行性、健壮 性、效率性上大幅度提高。本程序在调试中遇到了很多问题,如计算结果的准确 性、显示结果的准确性或者显示位置等等。本程序还存在的问题是对计算的精确度支持低,只支持两位小数点,

25、并且在 应对错误计算或者错误输入没有进行匹配,这些问题都会在使用的过程中可能造 成程序的崩溃,但是这些问题都会在以后的设计中进行完善和增强。4.2操作说明牛成界面如图所示:牛成界面当程序运行的时候会出现如上图所示,要求使用者通过按键输入运算表达 式,使用者只需点击输入想要计算的表达式,最后点击“=”键后,系统便会计算 出结果并口显示岀来。然后可以点击“v键删除修改表达式,或者通过“ce"键清 空表达式和显示的结果,当然也可以通过点击“nt键暂时保存当前计算的结果, 以便于下次计算使用(右键m把当前结果存到m中,默认是0,左键m输入当 前m内的值)。5设计总结本次课程设计大概花费了两周

26、的时间,其中10天左右用来编写和调试程序代码,4天 左右用来对程序编写报告。在此之i'可,遇到了许多编写上的难题和遇到错误的抓狂,但是这些都在耐心的,一次一 次的调试屮解决和攻克。当再次总结后感觉收获很大,首先在编写代码上,增加自己的代码 量,提高了编写的熟练度。其次增加了对栈的使用和理解,也有了一些在使用栈的方法和经 验。然后是对界面设计的认识,如按键反馈、按键响应速度、颜色的搭配、字体的格式等等。 最后是对在修改和调试代码的经验,代码调试的过程是最辛苦的但也是最能体现编写代码能 力的地方,看一个人代码编写能力怎么样,不是说让实现一个功能,而是在拿到一个存在诸 多bug时能一步步解决

27、这些问题。当然,在编写这个报告时,程序可能还是存在一些错误没被发现,这些都需要在后继的 补充完善中慢慢发现和更正,还有是本程序功能少,只是实现了常用的简单计算器,对于和 科学计算器或者程序员计算器等功能都为涉及,这些也将会成为我在后续的设计屮一点点添 加上去,因为我相信,每一个复杂的庞大的系统或者程序都是在简单的基础上一点点完善的。 也希望我能在后续的开发设计屮能学习更多,收获更多,并ii能一直坚持下去。参考文献1栾大成.大话数据结构m.北京清华大学学研大厦a座:淸华大学出版社,2011. 1-433 甘勇,李晔,卢冰.c语言课程设计m.北京市西城区右安门西街8号:中国铁道出版社, 2014.

28、 1-3403 严蔚敏,吴伟民.数据结构m.北京清华大学学研大厦a座:清华大学出版社,2007.1-3344 张宏林,孔艳,王哲等编著按实例学microsoft visual studio 2005北京:人民邮电出版社,20005 brian w kernighan , dennis m ritchie. the c programming languagem. pubilished:prentice-hall, 2004. 陈朔鹰,陈英.c语言趣味程序百例精解m.北京理工大学:北京理工大学出版社,1996. 1-4357j谭浩强.c程序设计(第二版)m.清华大学:清华大学出版社,2014.

29、1-3508 谭浩强.c语言程序设计题解与上机指导m.清华大学:清华大学出版社,2014. 1-2459 白屮英,戴志涛.计算机组成原理ml.北京东黄城根北街16号:科学岀版社,2013. 1-350struct int x2;int y2; pos25;ce , <- ,","(” , ) , 7 , ® , , "4 , 5" , "6, ” , "2 , 3, ”00' , "0 j, char keystr4 = 全部代码如下:vs2015调试通过(未加入错误检测)使用c11新标准'

30、» *1* » » ” ” *1* rtw 卜ryrt* tw打斤.ry <?* 斤0 斤0t% t* 斤0 彳f*数据结构期末课程设计*作业名称:多项式汁算器*使用的数据结构:栈*ui:使用casyx实现*j 夕.、i、""1、.、夕"(、"、i、" "、" .、"、*、.、"#include<stdlib.h>#include<stdio.h>#includc<math. h>#include<string h>inc

31、ludegraphics /就是需要引用这个图形库#includ巳 <conio.h>define winstzex 401/窗口大小define wins1zey 471define wixkeyy (winsizey -1)/8 /行间距define wtxkeyx (winstzex -1)/4ttdefine max 100define true 1ftpragmci warning(disable:4996) typedef struct char strmax;/*存储原算术表达式*/int long; str;/对彖的左上坐标x和右下坐标x, x0表示坐上x、xl表示

32、右下x同上int laststrpost = 1; /laststrpos农示后缀农达式存的数量char getstrmax * 5;char thclaststrmax;float lastv = 0;/计算结果void trans(str * i nstr, char laststr);float compvalue(char laststrtemp);void trans(str * instr , char laststr)/*将算术表达式转化为后缀表达式*/int i = 1;char stack max;/* 作为栈使用 */char chstr = lnstr->str i

33、:/用于保存数组里的临时元素i+;int laststrpos = 1, stacktop = 0; /stacktop用于表示栈顶while (chstr != ' #') switch (chstr)case' (' :/*判定为左括号*/stacktop+;stackstacktop = chstr;break;case')' :/*判定为右括号*/while (stackstacktop != ' (') laststrlaststrposj = stacklstacktopj;stacktop一;laststrpos+;

34、stacktop;/扔掉(break;case'+':/*判定为加减号*/case* -':whi1e (stacktop != 0 && stackstacktop != ' (') laststrlaststrposj = stacklstacktopj; stacktop一;laststrpos+;stacktop+;保留(stackstacktopj = chstr;break;/*判定为乘除号*/case' :case':while (stackstacktop = '*' | stackstac

35、ktop = '/')laststrlaststrpos = stackstacktop;/如果栈顶是*或者/弹出,放到后缀数组里stacktop-;laststrpos+;stacktop+;stackstacktop二 chstr;break;case' ' :break;/忽略空格default:while (chstr >= 'o' && chstr <= ' 9' | | chstr =/* 判定为数字 */laststrlaststrpos = chstr;laststrpos+;chstr

36、 = instr->stri;i+;i;laststrlaststrpos = ' ' ;/输出的时候隔开元素laststrpos+;chstr = instr->stri; i+;while (stacktop != 0) laststrlaststrposj = stackstacktop;laststrpos+;stacktop-;laststrlaststrpos=''laststrpost = laststrpos;float compvalue (char laststrtcmpej) /*计算jtf缀表达式的值*/float stack

37、max: char chstr;int stacktop = 0; int laststrpos = 1;/*作为栈使用*/临时栈元索/*i.aststrpos为laststr下标,stacktop为stack下标*/chstr = laststrtemplaststrposi;laststrpos+;while (chstr !=') switch (chstr) case' +':stackstacktop - stacktop-; break;case1 :stackstacktop - stacktop-; break;case1 x :stackstackto

38、p -stacktop-; break;case':1 = stackstacktop1 = stackstacktop -1 = stackstacktop -1 + stackstacktop;1 - stackstacktop;1 * stackstacktop;if (stackstacktop != 0)stackstacktop - 1 = stackstacktop - 1 / stackstacktop elseexit (0) ;/*异常退出*/stacktop;break;default:float numstr = 0; 把数字字符转化为数字bool flnum

39、= 0;while (chstr >= 'o' && chstr <= ' 9' | | chstr =if (chstr ='.') flnum 二 1;else if (!flnum) numstr = 10 * numstr + chstr - 'o' ;/*将数字字符转化为对应的数值*/ else if (flnum) numstr += 0. 1 * (chstr - ' o'); /*计算小数*/chstr = laststrtemplaststrposl;laststrpo

40、s+;stacktop+;stackstacktopl = numstr;chstr = laststrtcmplaststrpos;laststrpos+十;return stackstacktop:void givestr(char gctstring , char *i'hestr) str instr;char laststrmax ;/*存储后缀表达式*/tnstr. long 二 0;for (int i = 0; gctstringi != '0 ; i+) instr.long+:instrstrinstr .long = getstringi;instr.lo

41、ng+;tnstr. strtnstr. long = 'trans(&lnstr, laststr);lastv = conipvalue(laststr):lastv = (int)lastv ? sprintf(thestr , "%. of" , lastv) : sprintf(thcstr, 2f", lastv);void initpos () pos0.x0 = 0; pos0.y0 = 0; pos0.xl = winsizex; pos0.yl = wtnkeyy * 2;int k = 1;for (int i = 2; i

42、< 8; i+) for (int j = 0; j < 4; j+) poskx0 = j * wtnkeyx; 左上xy坐标posky0 = i * w1nkeyy;posk.xl(j + 1) * w1nkeyx; 右下xy坐标posk.yl(i + 1) * winkeyy;k+;int judgepos (int x , int y) if (x > 0 && x < winsizex && y> 0 && y < winkeyy * 2)判断文本输出框return 0;for (int i 二 1;

43、 i <二 4; i+) if (x >= posi.x0 && x <= posi.xl) for (int j = i; j <= 24; j += 4) if (y >= posj.y0 && y <= posj. yl) return j:void printstr() settextstyle(35, 0, _t("prestige elite std");/设置输入字体大小,宽度,文字样式outtextxy (7, 7, getstr);void getkey() /*flushmousemsg

44、buffer清空鼠标消息缓冲区。getmousemsg获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待。mousehit检测当前是否有鼠标消息。m0usemsg保存鼠标消息的结构体。*/mousemsg msg;rect r = 0 , wtxkeyy * 2 / 3 , winstzex, wtnkeyy * 2 ;image clearlmgup , clearlmgdown;int propos = 0;上一个点击的按钮int temp = 0;/当前点击的按钮int tncon = 0;/输入的字符数int tempi = 0;float laststrtemp 二 lastv

45、:char strtempmax;char m_str20 = '/o' ;elushmousemsgbuffer();getimage(&clearimgup, 1, 1, winsizex , wixkeyy *2/3); /获得输入区域的截图,用于 覆盖原先输入的内容getimage(&clearimgdown, 1, winkeyy *2/3, winsizex, winkeyy * 2);/获得输出区域的截图,用于覆盖原先输入的内容while (true) msg = getmousemsg0;if (msg. umsg) switch (msg. u

46、msg) case wm lbuttoxdown:setlinecolor (yellow);rectangle(postemp. x0, postemp. y0, postemp. xl, postempy1);switch (temp) case 1:getstr0 = ' 0'put imaged, 1, & clcarlmgup);putimage(1, w1nkeyy * 2/3, &clearlmgdown);incon = 0;printstr ();break;case 2:ifdncon > 0)/判断是否有输入的字符getstrinco

47、n - 1二'0'put imaged, 1, & cleartmgup);incon-一;printstr();break;case 3:strcat s (getstr, m str);incon+;printstr();break;case 24:settextstyle(50, 0, _t("prestige el i te std");/设置字体大小,宽度,文字样式putimaged, wtnkeyy * 2/3, aclearlmgdown):givestr (getstr, thelaststr);drawtext(_t(thelaststr), &r, dt_right | dt_vcenter | dt_singleline); break;case 7:case 8:break;default:strcat s(getstr, keystrtemp 一 1);lncon+;printstr();sl

温馨提示

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

评论

0/150

提交评论