C大學教程課后習題答案15_第1頁
C大學教程課后習題答案15_第2頁
C大學教程課后習題答案15_第3頁
C大學教程課后習題答案15_第4頁
C大學教程課后習題答案15_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Chapter16

ExceptionHandling

1.SolutionstoandRemarksonSelectedProgrammingProblems

1Time

Writeaprogramtocovnertfrom24-hourtimeto12-hourtime.

Remarks:

Thetextgivessampledialog.ThecodeIgiveproducesaslightlydifferentdialogthat

diagnosesparticularinputerrorsbyprovidinganappropriatemessagetotheexception

objectatthepointtheerrorisdetectedandtheexceptionisthrown.Thissolutionisonly

slightlymorecomplexthanasolutionthatgivestherequesteddialog.

IusedtheclassDigtalTimefromChapter11asastartingpoint.Iremovedfunctionsnot

needed,andreplacedtheterminatingerrorreportingcodewithcallstotherequired

exception,TimeFormatError.Iprovidederrormessagesappropriatetotheparticularerrors

asdetected.Itheninsertedthetry-catchblocks,terminatingtheprogramattheerror.After

thiswasrunning,Iprovidedtheloop,torequestrepetition.

Bug(perhapsaquirk?):Ifaninputerrorcausesanexceptiontobethrown,thecode

diagnosestheerror,thenimmediatelyrequestsanother24hourtimeforconverstion

withoutrequestingapprovalfromtheuser.

//dtime.h

//TakenfromChapter11

//

//ThisistheHEADERFILEdtime.h.Thisisareductionof

1

Copyright?2008PearsonEducation,Inc.PublishingasPearsonAddison-Wesley

//theINTERFACEfortheclassDigitalTimefromChapter11for

//Chapter16ProgrammingProblem1.Theoperator==and

//AdvancemembersarenotneededsoIdeletedthem.Ihave

//addedtherequiredexceptionclassTimeFormatMistake.

//

//Valuesofthistypearetimesofday.Thevaluesare

//inputandoutputin24hournotationasin9:30for9:30

//AMand14:45for2:45PM.

#ifndefDTIME_H

?defineDT工ME_H

?include<string>

?include<iostream>

usingnamespacestd;

classTimeFormatMistake

(

public:

TimeFormatMistake(std::stringmesg)throw()

(

message=mesg;

)

stringwhat()throw()

returnmessage;

)

private:

std::stringmessage;

);

classDigitalTime

(

public:

DigitalTime(intthe_hour,

intthe__minute)throw(TimeFormatMistake);

//Precondition:0<=the_hour<=23and

//0<=the_minute<=59.

//Initializesthetimevaluetothe_hourandthe_minute.

DigitalTime()throw();

//Initializesthetimevalueto0:00(whichismidnight).

voidTwelveHourTime();

//returnsthetimein12hourformat:hh:mmAMor

//hh:mmPM

friendstd::istream&

operator>>(std::istream&ins,

DigitalTimeSthe_object)throw(TimeFormatMistake);

//Overloadsthe>>operatorforinputvaluesoftype

//DigitalTime.

//Precondition:Ifinsisafileinputstream,theninshas

//alreadybeenconnectedtoafile.

friendstd::ostream&

operator<<(std::ostream&outs,

constDigitalTimeSthe_object);

//Overloadsthe<<operatorforoutputvaluesoftype

//DigitalTime.

//Precondition:Ifoutsisafileoutputstream,thenouts

//hasalreadybeenconnectedtoafile.

voidPrint12HourTime()throw();

private:

inthour;

intminute;

);

#endif//DTIME_H

//file:dtime.cpp

//AdaptedfromChapter11.

//

//ThisistheIMPLEMENTATIONFILEforProgrammingProblem#1.

//Theoriginaldtime.cxxhasbeenmodifiedtoaddthrow

//declarations,replaceerrormessagereportingandexitcode

//withexceptionthrowstatements.

//Ihaveremoveddefinitionsofmembersnotusedinthis

//problem.TheinterfacefortheclassDigitalTimeisinthe

//headerfiledtime.h.

?include<iostream>

?include<cctype>

?include<cstdlib>

#include"dtime.hn

usingnamespacestd;

//ThesePROTOTYPESareforthedefinitionoftheoverloaded

//inputoperator>>:

voidread_hour(istream&ins,int&the_hour)

throw(TimeFormatMistake);

//Precondition:Nextinputinthestreaminsisatimein

//notation,like9:45or14:45.

//Postcondition:the_hourhasbeensettothehourpartof

//thetime.Thecolonhasbeendiscardedandthenextinput

//tobereadistheminute.

voidread_minute(istreamSins,int&the_minute);

//Readstheminutefromthestreaminsafterread_hourhas

//readthehour.

intdigit_to_int(charc)throw(TimeFormatMistake)

//Precondition:cisoneofthedigits*01through,91.

//Returnstheintegerforthedigit;e.g,,

//digit_to_int(*31)returns3.

(

if(。<=c&&c<=9)

returnc-101;

throwTimeFormatMistake(Hnondigitargfordigit_to_intH;

//return0;

//ANSIrequiresareturnstatement,evenifinaccessible.

}

//Usesiostream,cstdlibandstdexcept:

DigitalTime::

DigitalTime(intthe__hour,

intthe_minute)throw(TimeFormatMistake)

if(the_hour<0||the_hour>23||

the_minute<0||the_minute>59)

throwTimeFormatMistake(

nIllegalargumenttoDigitalTimeconstructor.n);

else

(

hour=the_hour;

minute=the_minute;

)

}

DigitalTime::DigitalTime()throw()

(

hour=0;

minute=0;

)

voidDigitalTime::Print12HourTime()throw()

(

enum{AM,PM}am_pm=PM;

inth,m;

if(hour<12)am_pm=AM;

if(hour==0||hour==12)

h=12;

elseif(hour<12)

h=hour;

else

h=hour-12;

cout<<h<<;

if(0<=minute&&minute<10)cout<<0<<minute;

elsecout<<minute;

if(am_pm==AM)cout<<”AM";

elsecout<<"PM";

}

//Usesiostream:

istreamSoperator>>(istreamSins,DigitalTime&the_object)

throw(TimeFormatMistake)

(

read_hour(ins,the_object?hour);

read_minute(ins,the_object.minute);

returnins;

}

//Usesiostream:

ostream&operator<<(ostreamSouts,constDigitalTime&

th一_object)

(

outs<<the_object.hour<<1:1;

if(the_object.minute<10)

outs<<101;

outs<<the_object.minute;

returnouts;

)

//Usesiostream,cctype,cstdlib,andstdexcept:

voidread_hour(istream&ins,int&the_hour)

throw(TimeFormatMistake)

(

charcl,c2;

ins>>cl>>c2;

if(!(isdigit(cl)&&(isdigit(c2)||c2==1:*)))

throwTimeFormatMistake(

uNon-digitinputtoread_hourorbadseparator"”);

if(isdigit(cl)&&c2==1:1)

the_hour=digit_to_int(cl);

)

else//(isdigit(cl)&&isdigit(c2))

(

the_hour=digit_to_int(cl)*10+digit_to_int(c2);

ins>>c2;//discard':,

if(c2!=一)

throwTimeFormatMistake(

“Errorillegalseparatingcharacter"”);

}

if(the_hour<0||the_hour>23)

throwTimeFormatMistake(

“Errorillegalrangeforinputtoread_hour\nn);

}

//Usesiostream,cctype,stdlibandstdexcept:

voidread_minute(istreamSins,int&the_minute)

(

charclrc2;

ins>>cl>>c2;

if(!(isdigit(cl)&&isdigit(c2)))

throwTimeFormatMistake(uNon-digitinputto

read_minute\nu);

the_minute=digit_to_int(cl)*10+digit_to_int(c2);

if(the_minute<0||the_minute>59)

throwTimeFormatMistake(

“Errorillegalrangeforinputtoread_minute\nn);

)

//Chl6Prog01.cxx

//driverprogramforChapter16ProgrammingProblem1.

#include”dtime.h"

chargetAns()

(

charc;

cin,get(c);

while(c!='y,&&c!=1n1)

{

cout<<”y/n,please.\nn;

cin,get(c);

)

returnc;

)

intmain()

usingnamespacestd;

DigitalTimetime24;

charstuff[1002];

charans;

while(true)

(

cout<<"Entertimein24hourformat:hh:mm\nn;

try

(

cin>>time24;

cout<<"Thatisthesametimeas\nn;

time24.Print12HourTime();

cout<<endl;

cout<<"Again?(y/n)\nn;

ans=getAns();

if(ans==,n*)return0;

}

catch(TimeFormatMistaketfm)

(

cout<<tfm.what()<<flush;

cin.getline(stuff,1000);//discardallwaitinginput

}

)

return0;

TrialRun

Entertimein24hourformat:hh:mm

13:07

Thatisthesametimeas

1:07PM

Again?(y/n)

y/n,please.

y

Entertimein24hourformat:hh:mm

10:15

Thatisthesametimeas

10:15AM

Again?(y/n)

y/n,please.

y

Entertimein24hourformat:hh:mm

10:65

Errorillegalrangeforinputtoreadminute

Entertimein24hourformat:hh:mm

16:05

Thatisthesametimeas

4:05PM

Again?(y/n)

y/n,please.

n

bash-2.03$

*/

2.NoSolutionProvided.

//Chi6Proj3.cpp

//

//Thisprogramdrawsahistogramusinginputvaluesfrom1-10.

//Itcatchesanyinputthatisnotanumericvalueinthe

//properrange.

//*********************************************************************

#include<iostream>

#include<string>

usingnamespacestd;

//Exceptionclasses

classOutOfRange

();

classNonDigits

();

//FunctionPrototypes

boolisAllDigits(conststrings);

//====================

//isAllDigits:

//Returnstrueiftheinputstring

//containsonlydigits.

//====================

boolisAllDigits(conststrings)

inti;

for(i=0;i<s.length();i++)

{

charc=s[i];

if(!isdigit(c))returnfalse;

)

returntrue;

)

//====================

//mainfunction

//====================

constintMAX=10;

intmain()

(

inthistogram[MAX];

inti,num,temp;

strings;

//Initializehistogramtoallzerovalues

for(i=0;i<MAX;i++)

{

histogram[i]=0;

)

cout<<"Eachnumbermustbefrom1-10.Howmanynumberstoenter?1'<<

endl;

cin>>num;

i=0;

while(i<num)

{

//Inputeachnumber,throwingtwopossibleexceptionsbasedon

//errorconditions

try

{

cout<<"Enternumber"<<(i+1)<<<<endl;

cin>>s;

if(!isAHDigits(s))

{

throwNonDigits();

)

temp=atoi(s.c_str());//Convertstringtoan

integer

if(temp<l||temp>10)

{

throwOutOfRange();

)

histogram[temp-1]++;

i++;

)

catch(NonDigitse)

cout<<"Pleaseenteryourtextusingdigitsonly.Try

again.\nn;

)

catch(OutOfRangee)

|

cout<<"Thenumbermustbebetween1and10.Tryagain.

<<endl;

}

}

//Showhistogram

cout<<endl<<"Hereisthehistogram:n<<endl;

for(i=0;i<MAX;i++)

(

cout<<(i+1)<<”:*';

for(intj=0;j<histogram[i];j++)

cout<<

cout<<endl;

)

return0;

4-6.NoSolutionsProvided.

7.

//*********************************************************************

//Chi6Proj7.cpp

//

//ProgrammingProject7inChapter9describedatechniquetoemulatea

//2DarraywithwrapperfunctionsaroundaIDarray.Iftheindicesof

//adesiredentryinthe2Darraywereinvalid(e.g.zoutofrange)you

//wereaskedtoprintanerrormessageandexittheprogram.Modify

//thisprogram(ordoitforthefirsttime)toinsteadthrowan

//ArrayOutOfRangeErrorexceptionifeithertheroworcolumnindicesare

//invalid.YourprogramshoulddefinetheArrayOutOfRangeError

//exceptionclass.

/j

//FileName:twodimensional.cpp

//Author:

//EmailAddress:

//ProjectNumber:16.07

//Description:Functionsthatemulatea2-dimensionalarrayusinga

//1-dimensionalarray.Thisversionthrowsanexception

//whenaninvalidroworcolumnindexisused.

//LastChanged:October14,2007

#include<string>

#include<iostream>

usingnamespacestd;

//Exceptionclass

classArrayOutOfRangeError

public:

ArrayOutOfRangeError();

//Constructsanexceptionwithnomessage

ArrayOutOfRangeError(stringmsg,introws,intcols,

intdesired_rowAintdesired_col);

//Constructsanexceptionwiththegivenmessageandrow/column

//data

stringget_message();

//Returnstheexception1smessagestring

intget_rows();

//Returnsthenumberofrowsinthearray

intget_columns();

//Returnsthenumberofcolumnsinthearray

intget_desired_row();

//Returnstherequestedrownumber

intget_desired_column();

//Returnstherequestedcolumnnumber

voidwrite_error();

//Writestheerrormessagetocout

private:

stringmessage;

introws;

intcols;

intdesired_row;

intdesired_col;

);

//Createsanemulatedtwo-dimensionalarraywiththegivennumberof

//rowsandcolumns.

int*create2DArray(introws,intcolumns);

//Storesvalinthedesiredpositioninanemulatedtwo-dimensional

array

voidset(int*arr,introws,intcolumns,

intdesired_rowrintdesired_columnzintval)

throw(ArrayOutOfRangeError);

//Retrievesthevalueinthedesiredpositioninanemulated

//two-dimensionalarray

intget(int*arrzintrows,intcolumns,intdesired_row,int

desired_column)

throw(ArrayOutOfRangeError);

//Helperfunctionfortestingrange-checking

voidtest_exception(stringmsg,int*arrzintrows,intcoluirms,

intdesired_rowzintdesired_column,intval);

intmain()

constintROWS=13;

constintCOLS=7;

intcount=0;

//Createa2Darray

int火table=create2DArray(ROWS^COLS);

//Populateit

for(intr=0;r<ROWS;r++)

(

for(intc=0;c<COLS;c++)

(

set(table,ROWS,COLS,r,c,count++);

)

)

//Printthearray*scontents

cout<<"Arraycontents:“<<endl<<endl;

for(intr=0;r<ROWS;r++)

(

for(intc=0;c<COLS;C++)

(

intval=get(table,ROWS,COLS,r,c);

cout.width(4);

cout<<val;

)

cout<<endl;

)

//Trysomeboundarycases

test_exception(nColumntoolarge...”,table,ROWS,COLS,0,COLS,

400);

test_exception("Rowtoolarge...n,table,ROWS,COLS,ROWS,0,400);

test_exception(

"Rowandcolumntoolarge...”,table,ROWS,COLS,ROWS,COLS,400);

test_exception("Columntoosmall...,table,ROWS,COLS,0z-1,400);

n

test_exception("Rowtoosmall...,table,ROWS,COLS,-1,0z400);

test_exception(

n

"Rowandcolumntoosmall...rtable,ROWS,COLS,-1,-1,400);

return0;

)

//Helperfunctionfortestingrange-checking

voidtest_exception(stringmsg,int*tablezintrows,intcols,

intdesired_rowzintdesired_col,intval)

(

cout<<endl<<msg<<endl;

try

{

cout<<"Testingset(...):**;

set(table,rows,cols,desired_row,desired_colzval);

)

catch(ArrayOutOfRangeErrore)

e,write_error();

)

try

(

cout<<"Testingget(...):**;

intval=get(table,rows,cols,desired_rowzdesired_col);

)

catch(ArrayOutOfRangeErrore)

{

e?write_error();

)

)

//Createsanemulatedtwo-dimensionalarraywiththegivennumberof

//rowsandcolumns.

int*create2DArray(introws,intcolumns)

(

returnnewint[rows*columns];

)

//Utilitymethodthatchecksdesiredrow/columnargumentsforvalidity,

//returninganexplanationinthemessagestringifsomethingis

//wrong.

boolcheck_args(introws,intcolumns,intdesired_rowzint

desired_columnz

stringsmessage)

(

boolok=false;

if(desired_row<0)

(

message=ndesired_rowcannotbelessthan0n;

}

elseif(desired_coluinn<0)

(

message=ndesired_columncannotbelessthan0n;

)

elseif(desired_row>=rows)

(

message=ndesired_rowmustbelessthanrowcountn;

)

elseif(desired_column>=columns)

(

message=ndesired_columnmustbelessthancolumncountn;

)

else

(

ok=true;

}

returnok;

)

//Storesvalinthedesiredpositioninanemulatedtwo-dimensional

array

voidset(int*arrzintrows,intcolumns,

intdesired_row,intdesired_columnzintval)

throw(ArrayOutOfRangeError)

stringmsg;

if(check_args(rows,columns,desired_rowfdesired_columnrmsg))

(

arr[desired_row*columns+desired_column]=val;

}

else

(

throwArrayOutOfRangeError(

msg,rows,columns,desired_rowzdesired_column);

)

)

//Retrievesthevalueinthedesiredpositioninanemulated

//two-dimensionalarray

intget(int*arrzintrows,intcolumns,intdesired_row,int

desired_column)

throw(ArrayOutOfRangeError)

(

intresult;

stringmsg;

if(check_args(rows,columns,desired_row,desired_columnzmsg))

(

result=arr[desired_row*columns+desired_column];

)

else

(

throwArrayOutOfRangeError(

msg,rows,columns,desired_rowzdesired_column);

}

returnresult;

)

//Constructsanexceptionwithnomessage

ArrayOutOfRangeError::ArrayOutOfRangeError():

nn

message()trows(0)zcols(0),desired_row(0)zdesired_col(0)

(

)

//Constructsanexceptionwiththegivenmessage

ArrayOutOfRangeError::ArrayOutOfRangeError(

stringmsg,intr,intc,intd_row,intd_col):

message(msg),rows(r)rcols(c)tdesired_row(d_row)rdesired_col(d_col)

(

}

//Returnstheexception*smessagestring

stringArrayOutOfRangeError::get_message()

(

returnmessage;

)

//Returnsthenumberofrowsinthearray

intArrayOutOfRangeError::get_rows()

returnrows;

}

//Returnsthenumberofcolumnsinthearray

intArrayOutOfRangeError::get_columns()

(

returncols;

)

//Returnstherequestedrownumber

intArrayOutOfRangeError::get_desired_row()

(

returndesired_row;

)

//Returnstherequestedcolumnnumber

intArrayOutOfRangeError::get_desired_column()

(

returndesired_col;

)

//Writestheerrormessagetocout

voidArrayOutOfRangeError::write_error()

(

cout<<message<<”(rows=n<<rows<<",cols="<<cols

<<",desired_row=n<<desired__row<<”,desired_col=n

<<desired_col<<<<endl;

)

2.OutlineofTopicsintheChapter

16.1Exception-HandlingBasics

AToyExampleofExceptionHandling

DefininingyourownExceptionClasses

MultipleThrowsandCatches

ThrowinganExceptioninafunction

ExceptionSpecification

16.2ProgrammingTechniquesforExceptionHandling

WhentoThrowanException

ExceptionClassHierarchies

TestingforAvailableMemory

RethrowinganException

3.GeneralRemarksontheChapter

IntroductiontoExceptions

Mostprograms,thosewrittenbystudentsinparticular,arefrequentlywrittenunderthe

mostoptimisticofassumptions:Nothingwillevergoawry.Clearly,onlya"helloworld"

programissimpleenoughforthistobereasonable.Errorsthatmustbeplannedfor

abound.Inputvaluesmaybeoutofrange,ahardwareunitmayfail,orthedesired

removablemediummaynotbeinthedrive,astackmayoverfloworunderflow,oran

arrayindexmaytakeanillegalvalue.Mostprogrammersagreethattheseerrorsare

exceptionalevents.

However,torestrictexceptionaleventstoerrorconditionsonlyistoorestrictive.Itis

likelybettertothinkofexceptionalconditionsassituationsthat,whilerare,arenecessary

tomovingfromonephaseofaprogramtoanotherortoterminationoftheprogram.For

example,end-of-filemaysignalthatwearethroughenteringdata,andarestartingthe

computation.

Thereisnocleardividinglinebetweeneventsthatareerrorexceptionsandeventsthatare

normalexceptionalevents.

Anexceptioninprogrammingispartofafacilityformanagingexceptionalevents.An

"exceptionalevent"isanoccurrencethateithercannotbemanagedlocallyorisbetter

managedelsewhere.Whatan"exception"ismaybedefinedbytheprogramminglanguage

orbytheprogrammer.Theactionofbringingtheexceptionaleventtotheattentionofthe

invokingroutineiscalledraisingtheexception.Theresponseoftheinvokeriscalled

handlingtheexception.Thepurposeofan"exception"istocommunicateinformation

fromtheplacewheretheexceptionaleventoccurstothehandlerthatissufficientto

managetheerror.

Thedetectionandhandlingofexceptionaleventscanbedoneinanyprogramming

language.Somelanguageshavefacitilitiesfbrexceptionhandling,thatis,fordetecting

"exceptionaleventsandtakingspecificactioninresponsetotheseexceptions.Some

languagesimposedefaultactioninresponsetocertainexceptions.

AfewofthelanguagesthathaveanexceptionhandlingfacilitiesarePL/I,CLU,Ada,C++

andJava.Ifthelanguagedoesnotprovideamechanismfbrexceptionhandling,the

programmerhasthechoreofexceptionmanagement.

InhisChapter8ofTheC++ProgrammingLanguage3"edition,Stroustrupgives

calculatorexamples.Hisfirstexamplecalculatoruseseleganterrorhandlingthatisshorter

thanthesecondversionwhichusesexceptionserrormanagementcode.Thecostofthe

shorter,moreelegantcodeistightercouplingallpartsoftheprogram.Iurgetheinterested

readertoperuseChapter8andChapter14ofthatbook.

Weneedtodiscuss"exception"and"exceptionalevents"inC++.

InC++an''exception"maybeanyprimitivevalueoftypechar,anint,afloat,a

cstringliteral,oranobjectofaclassdefinedintheStandardC++Library,oranobjectofa

classderivedfromalibraryexceptionclass,oraclassdefinedbytheprogrammer.What

an"exceptionalevent1'iswillbedecidedinpartbythelanguageandinpartbythe

programmer.

Anexceptionaleventorconditionmaybedetectedanywheresuchaneventoccurs.An

exceptionaleventmaybehandledanywhereinthecodeafteritisdetected,butshouldbe

managedinapartofthecodethatunderstandstheexceptionalevent.Thisisusuallyinthe

callerofthefunctionwheretheexceptionisdetectedorsomewhereupthecallchain,

perhapsinthemainfunctionitself.

Iusuallygivemystudentsthesedefinitions:

Anexceptionalconditionisanyconditionthat

1)preventscompletionofanoperationthatinturndetectsthecondition,

2)eithercannotberesolvedinthelocalcontextoftheoperation,orisbetterresolved

elsewhere

3)andmustbebroughttotheattentionoftheoperation'sinvokingentity.

Anexceptionisadatastructurethatcommunicatesinformationtothehandler

sufficientforthehandlertomanagetheexceptionalsituation.

16.1ExceptionHandlingBasics

Ourauthorusesasimpleexampletoillustratedifficulttechnique.Hepointsoutthat

exceptionhandlingshouldbeusedsparingly,andinsituationsthataremoreinvolvedthat

isreasonableinanintroductoryexample.Consequently,theinitialexceptionexamplesare

justtoys,moreintheveinof“crackingawalnutwithasteamrollertolearntocontrolthe

steamroHer“thanreasonableuses.

Theauthor'sexampledealswithavariablethatonemightnotwanttobezero,testsit,and,

inthefirstexample,handlesitwithoutexceptionhandling.Inthesecondexample,the

variableistestedandwithinatryblock,thecodethrowsanexception,whichishandledin

alocalcatchblock.

Theprinciplesfromsecton16.1are:

Toraiseanexception,usethethrowkeywordthrowfollowedbyaninstanceofany

primitiveorclassobjectthatholdssufficientinformationthatthehandlercanmanagethe

exceptionalsituation.Ifyouwanttothrowaclassobjectexception,theeasiestandmost

commonwayistoinvokeaconstructorfr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論