版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年度青海省西寧市湟中區(qū)多巴高級中學高一上學期第二次月考歷史試題(含答案)
- 八一建軍節(jié)思想?yún)R報
- 項目風險防范措施
- 《建設(shè)人力資源強國》課件
- 中藥對牙周病治療效果的評價
- SA8000-2018社會責任管理體系程序文件匯編版(傳動軸制造行業(yè))
- 2024年預(yù)拌混凝土產(chǎn)業(yè)鏈上下游合作協(xié)議3篇
- 航空航天飛行器用電磁純鐵
- 2024房地產(chǎn)交易買賣合同標的詳述
- 《貨幣的含義和本質(zhì)》課件
- 換熱器課程設(shè)計
- 部編版三年級語文上冊期末試卷(含答案)
- 公司扭虧解困方案
- 信訪十種情形追責問責制度
- 大型儲罐施工工法倒裝法安裝
- 氫能與燃料電池電動汽車第5章 氫與燃料電池
- 餐飲店購銷合同
- 文化資源數(shù)字化技術(shù)有哪些
- 2023年杭州聯(lián)合銀行校園招聘筆試歷年高頻考點試題答案詳解
- 灌裝軋蓋機和供瓶機設(shè)備驗證方案
- 《國家中藥飲片炮制規(guī)范》全文
評論
0/150
提交評論