版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Josephus游戲設(shè)計《C++面向?qū)ο蟪绦蛟O(shè)計導(dǎo)論》--從抽象到編程第5章設(shè)計與實現(xiàn)5.1.1分析設(shè)計5.1Josephus游戲5.1.2編碼實現(xiàn)5.1.3程序維護本節(jié)學(xué)習(xí)目標(biāo)能夠從具體應(yīng)用場景中識別事物及其關(guān)系并抽象出類和關(guān)聯(lián)(靜態(tài))能夠從具體應(yīng)用場景中識別事物的行為并抽象出類的方法(動態(tài))能夠使用對象圖、類圖、時序圖等工具建立軟件模型能夠運用前面4章所學(xué)的知識解釋分析設(shè)計的步驟和方法
Josephus游戲:一群小孩圍成一圈,任意假定一個數(shù)m,從第一個小孩起,順時針方向數(shù)數(shù),每數(shù)到第m個小孩時,該小孩便離開。小孩不斷離開,圈子不斷縮小。最后剩下一個小孩便是勝利者。Josephus游戲介紹5.1.1分析設(shè)計步驟1.發(fā)現(xiàn)對象及其連接2.合并對象并劃分職責(zé)3.抽象類及關(guān)聯(lián)4.發(fā)現(xiàn)類的屬性5.發(fā)現(xiàn)類的方法從具體到抽象:應(yīng)用場景開始1.發(fā)現(xiàn)對象及其連接選擇典型游戲場景描述典型游戲場景標(biāo)識游戲場景中的事物及其關(guān)系圖5.1典型游戲場景中的事物及其關(guān)系2.合并對象并劃分職責(zé)將對象“小孩數(shù)”和“間隔數(shù)”組合到對象“游戲”將“獲勝者”聚合到對象“游戲”將對象“圓圈”聚合到“游戲”每個小孩負責(zé)管理自己,承擔(dān)加入、離開等職責(zé)賦予“游戲”管理“小孩數(shù)”和“間隔數(shù)”“獲勝者”“圓圈”的職責(zé)圖5.2對象之間的組合聚合連接3.抽象類及關(guān)聯(lián)圖5.3標(biāo)注類別的對象及連接圖5.4Josephus游戲中的類及其關(guān)聯(lián)“小孩”、“游戲”和“圓圈”三類別,視為三個類“Boy”、“Jose”和“Ring”圖5.4Josephus游戲中的類及其關(guān)聯(lián)圖5.5類中增加的屬性第一步,將numOfBoys和m作為類Jose的屬性。第二步,將關(guān)聯(lián)對端的名稱作為屬性名,用于表示類之間的關(guān)聯(lián)。第三步,增加與場景有關(guān)的屬性。4.發(fā)現(xiàn)類的屬性圖5.6對象的職責(zé)與協(xié)作圖5.7類的屬性和成員函數(shù)根據(jù)Message(信息)設(shè)計成員函數(shù)5.發(fā)現(xiàn)類的方法練習(xí)1.發(fā)現(xiàn)對象及其連接2.合并對象并劃分職責(zé)3.抽象類及關(guān)聯(lián)4.發(fā)現(xiàn)類的屬性5.發(fā)現(xiàn)類的方法在PowerDesigner15.3中重做上述分析設(shè)計過程總結(jié)及進一步學(xué)習(xí)思維:從具體到抽象(概念思維)分析設(shè)計:分析應(yīng)用場景中的事物及其變遷,設(shè)計軟件模型工具:對象圖、類圖、時序圖5.1.2編碼實現(xiàn)進一步學(xué)習(xí)第5章設(shè)計與實現(xiàn)5.1.1分析設(shè)計5.1Josephus游戲5.1.2編碼實現(xiàn)5.1.3程序維護學(xué)習(xí)目標(biāo)能夠針對所設(shè)計的軟件模型(PIM)選用恰當(dāng)?shù)膶崿F(xiàn)技術(shù)建立軟件的實現(xiàn)模型(平臺相關(guān)模型,PSM)能夠根據(jù)需求變化調(diào)整軟件的模型并體會易維護性能夠在VS2013中編程實現(xiàn)軟件的實現(xiàn)模型5.1.2編碼實現(xiàn)編碼實現(xiàn)1.選擇實現(xiàn)技術(shù)2.編程實現(xiàn)類Boy3.編程實現(xiàn)類Ring4.編程實現(xiàn)類Jose5.編寫main()函數(shù)圖5.9具有C++語言和鏈表特性的類圖1.選擇實現(xiàn)技術(shù)主要問題:如何編程實現(xiàn)關(guān)聯(lián)?回到玩游戲的典型場景在鏈表上繼續(xù)玩游戲圖5.8典型場景中的對象及連接圖5.9具有C++語言和鏈表特性的類圖圖5.7類的屬性及成員函數(shù)2.編程實現(xiàn)類Boy圖5.9具有C++語言和鏈表特性的類圖圖5.10與類Boy相關(guān)的交互過程編程實現(xiàn)類Boy續(xù)class
Boy{public:Boy(Boy*pPosition,intid);voidleave(Boy*pPosition);voidprint();Boy*next();protected:int
code;Boy*pNext;};#include
"Boy.h"#include
<iostream>using
namespacestd;Boy::Boy(Boy*pPosition,intid){code=id;if(!pPosition){this->pNext=this;//只有一個小孩時,自己指向自己}else{this->pNext
=pPosition->pNext;//當(dāng)前小孩指向第一個小孩pPosition->pNext=this;//插入到小孩*pPosition的后面
//與上一條不能交換}}插入第1個小孩后的情況插入第2個小孩后的情況pFirst=pCurrent=new
Boy(nullptr,1);Boy*pB=pFirst;for(inti=2;i<=n;i++){pB=new
Boy(pB,i);}pPositionNULLpNextthispNextpNextpFirstpCurrentvoidBoy::leave(Boy*pPosition){
pPosition->pNext=this->pNext;cout<<"離開:"
<<code<<endl;}voidBoy::print(){cout<<"Id:"<<code;}Boy*Boy::next(){return
pNext;}thispPosition一個小孩離開(以4個小孩為例演示)3.編程實現(xiàn)類Ring圖5.9具有C++語言和鏈表特性的類圖圖5.13與類Ring相關(guān)的交互過程#include
"Ring.h"Ring::Ring(intn){pFirst=pCurrent=new
Boy(nullptr,1);Boy*pB=pFirst;for(inti=2;i<=n;i++){pB=new
Boy(pB,i);}}#include
"Boy.h"class
Ring{public:Ring();Ring(intn);~Ring();Boy
getWinner(intm);private:voidcountUpTo(intm);Boy*pFirst;Boy*pCurrent;};Boy
Ring::getWinner(intm){//數(shù)小孩while
(pCurrent!=pCurrent->next()){ countUpTo(m);//往下數(shù)m個小孩,數(shù)到的小孩離開}//返回獲勝者Boywin(*pCurrent);
//另外創(chuàng)建(復(fù)制)一個Boy對象delete
pCurrent;returnwin;}voidRing::countUpTo(intm){//往下數(shù)m個小孩Boy*pLast;for(inti=m;i>1;i--){pLast=pCurrent;pCurrent=pCurrent->next();}//數(shù)到的小孩離開
pCurrent->leave(pLast);//當(dāng)前從圓圈中離開,pLast指向前面的小孩
deletepCurrent;//刪除當(dāng)前小孩pCurrent=pLast->next();//當(dāng)前小孩是上一個小孩的下一個}Ring::~Ring(){}編程實現(xiàn)類Ring續(xù)pCurrentpLast一個小孩離開(以4個小孩為例演示)4.編程實現(xiàn)類Jose#include
"Ring.h"class
Jose{public:Jose(intboys,intinterval);~Jose();Boy
gameBegin();private:int
numOfBoys;int
m;Ring*ring;Boy*win;};#include
"Jose.h"Jose::Jose(intboys,intinterval){numOfBoys=boys;m=interval;ring=new
Ring(boys);win=nullptr;}Jose::~Jose(){delete
ring;delete
win;}Boy
Jose::gameBegin(){if(!win)win=new
Boy(ring->getWinner(m));return*win;}5.編寫main()函數(shù)#include
"Jose.h"#include
<iostream>using
namespacestd;intmain(){Josejs1(7,3);js1.gameBegin().print();intm,n;cout<<endl<<"請輸出小孩數(shù)和間隔數(shù)......"
<<endl;cin>>n>>m;Josejs2(n,m);js2.gameBegin().print();cout<<endl<<"現(xiàn)在宣布"
<<endl<<"第一場獲勝者是:"
<<endl;js1.gameBegin().print();cout<<endl<<"第二場獲勝者是:"
<<endl;js2.gameBegin().print();}離開:3離開:6離開:2離開:7離開:5離開:1Id:4請輸出小孩數(shù)和間隔數(shù)......104離開:4離開:8離開:2離開:7離開:3離開:10離開:9離開:1離開:6Id:5現(xiàn)在宣布第一場獲勝者是:Id:4第二場獲勝者是:Id:55.1.3程序維護增加類Person,增加類Boy到類Person的關(guān)系Boy(Boy*pPosition,intid,Person*ps);Ring(intn,Person*ps[]);Jose(intboys,intinterval,Person*ps[]);圖5.14增加繼承關(guān)系后的類圖圖5.15增加小孩信息后的對象職責(zé)及其協(xié)作Boy::Boy(Boy*pPosition,intid,Personps):Person(ps){ code=id;
if(!pPosition){
this->pNext=this; //只有一個小孩時,自己指向自己 }
else{
this->pNext=pPosition->pNext; pPosition->pNext=this; }}Ring::Ring(intn,Person*ps[]){ pFirst=pCurrent=newBoy(NULL,1,*ps[1]); Boy*pB=pFirst;
for(inti=2;i<=n;i++){ pB=newBoy(pB,i,*ps[i]); }}Jose::Jose(intboys,intinterval,Person*ps[]){ numOfBoys=boys; m=interval; ring=newRing(boys,*ps); win=NULL;}voidBoy::print(){ cout<<"Id:"<<code; Person::print();}修改實現(xiàn)代碼練習(xí)VS2013上編輯調(diào)試【例5.1-5.5】中的代碼1.選擇實現(xiàn)技術(shù)2.編程實現(xiàn)類Boy3.編程實現(xiàn)類Ring4.編程實現(xiàn)類Jose5.編寫main()函數(shù)6.增加類Person并修改代碼總結(jié)及進一步學(xué)習(xí)設(shè)計:選用編程實現(xiàn)技術(shù)細化軟件模型編碼:按照軟件模型聲明類,編碼實現(xiàn)類的成員函數(shù)維護:調(diào)整軟件模型,修改程序代碼5.2矩陣計算進一步學(xué)習(xí)5.2.1矩陣和向量的乘法5.2矩陣計算5.2.2使用友元提高運行速度第5章設(shè)計與實現(xiàn)學(xué)習(xí)目標(biāo)能夠識別數(shù)學(xué)模型中的關(guān)鍵因素(矩陣及運算),設(shè)計出軟件模型能夠選用適當(dāng)?shù)木幊碳夹g(shù)實現(xiàn)軟件模型能夠使用友元提高代碼的運行效率5.2.1矩陣和向量的乘法存儲計算
Amn×Vn=(bi)m
圖5.16矩陣和向量相乘【例5.6】矩陣與向量的乘法//Vector.hclass
Vector{public:
int&Elem(inti); Vector(intn); Vector(const
Vector&oldVector); ~Vector();
voidprint(void);
intgetN(void);private:
intn;
int*v;};//Vector.cpp#include
"Vector.h"#include
<iostream>using
namespacestd;
int&Vector::Elem(int
i){
if(i<n)
returnv[i];
else cout<<"超標(biāo)越界??!";}Vector::Vector(int
n){
Vector::n=n; v=new
int[n];}Vector::~Vector(){
deletev;}void
Vector::print(){ cout<<v[0];
for(inti=1;i<n;i++) cout<<"\t"<<v[i];}int
Vector::getN(){
returnn;}Vector::Vector(const
Vector&oldVector){ n=oldVector.n; v=new
int[n];
for(inti=0;i<n;i++){ v[i]=oldVector.v[i]; }}Matrix代碼//Matrix.hclass
Matrix{public:
int&Elem(inti,intj); Matrix(intm,intn); Matrix(const
Matrix&oldMatrix); ~Matrix();
voidprint();
intgetM();
intgetN();private:
intm;
intn;
int*Mat;};
//Matrix.cpp#include
"Matrix.h"#include
<iostream>using
namespacestd;
int&Matrix::Elem(int
i,int
j){
if(i<m&&j<n)
returnMat[i*n+j];//計算第i行第j列元素的位置
else cout<<"超標(biāo)越界??!";}Matrix::Matrix(int
m,int
n){
Matrix::m=m;
Matrix::n=n; Mat=new
int[m*n];}Matrix::~Matrix(){
delete[](int*)Mat;}void
Matrix::print(){
for(inti=0;i<m;i++){ cout<<Mat[i*n+0];
for(intj=1;j<n;j++){ cout<<"\t"<<Mat[i*n+j]; } cout<<endl; }}int
Matrix::getM(){
returnm;}int
Matrix::getN(){
returnn;}Matrix::Matrix(const
Matrix&oldMatrix){ m=oldMatrix.m; n=oldMatrix.n; Mat=new
int[m*n];
for(inti=0;i<m*n;i++) Mat[i]=oldMatrix.Mat[i];}【例5.6】矩陣與向量的乘法#include
"Matrix.h"#include
"Vector.h"#include
<iostream>using
namespacestd;
VectorMultiply(Matrix&mat,Vector&vec){
//省略檢查行列的代碼
Vectorc(mat.getM());
for(inti=0;i<mat.getM();i++){
c.Elem(i)=0;
for(intj=0;j<mat.getN();j++){
c.Elem(i)+=mat.Elem(i,j)*vec.Elem(j); } }
returnc;}voidmain(){
intm=3,n=4;
cout<<"矩陣:"<<endl;
Matrixa(m,n);
for(inti=0;i<m;i++){
for(intj=0;j<n;j++){ a.Elem(i,j)=(i+1)*10+j+1; } } a.print();
cout<<endl<<"向量:"<<endl;
Vectorv(n);
for(inti=0;i<n;i++){ v.Elem(i)=(i+1)*2; } v.print(); cout<<endl<<"矩陣×向量:"<<endl; Multiply(a,v).print();}
Amn×Vn=(bi)m5.2.2使用友元提高運行速度
封裝能夠提高程序的安全性和可維護性,但也會降低程序的運行速度。面向?qū)ο蟪绦蛟O(shè)計中,借鑒日常中的“朋友”提出了友元(friend)的概念,可以將一些函數(shù)或類指定為一個類的友元,并按照“朋友”值得相信的常識,允許這些函數(shù)或類直接訪問其私有的或保護的成員?!纠?.7】將普通函數(shù)聲明為友元classVector;classMatrix{
friendVectorMultiply(Matrix&mat,Vector&vec); //聲明友元函數(shù) //以下代碼省略};
classMatrix;classVector{
friendVectorMultiply(Matrix&,Vector&); //聲明友元函數(shù) //以下代碼省略};
好處:Multiply()函數(shù)中就可直接訪問類Vector和Matrix的數(shù)據(jù)成員直接訪問矩陣和向量中的元素//未使用友元代碼VectorMultiply(Matrix&mat,Vector&vec){
//省略檢查行列的代碼
Vectorc(mat.getM());
for(inti=0;i<mat.getM();i++){
c.Elem(i)
=0;
for(intj=0;j<mat.getN();j++){
c.Elem(i)+=mat.Elem(i,j)*vec.Elem(j); } }
returnc;}//使用友元代碼VectorMultiply(Matrix&mat,Vector&vec){ //省略檢查行列的代碼
Vectorc(mat.m); for(inti=0;i<mat.m;i++){
c.v[i]
=0; for(intj=0;j<mat.n;j++){
c.v[i]+=mat.Mat[i*mat.n+j]*vec.v[j]; } } returnc;}破壞了封裝,提高了運行效率!!【例5.8】將成員函數(shù)聲明為友元按照“A乘以B”的習(xí)慣m.Multiply(v).print();圖5.17使用成員函數(shù)實現(xiàn)乘法運算例5.8示例代碼#include
"Matrix.h"class
Vector{
friend
VectorMatrix::Multiply(Vector&vec);//將類Matrix的成員函數(shù)聲明友元
//friendclassMatrix;//聲明友元類
//以下代碼省略};VectorMatrix::Multiply(Vector&vec){
//省略檢查行列的代碼
Vectorc(m);
for(inti=0;i<m;i++){ c.v[i]=0;
for(intj=0;j<n;j++){
c.v[i]+=Mat[i*n+j]*vec.v[j]; } }
returnc;}請參考例【5.6】,編寫調(diào)試通過練習(xí)1.根據(jù)圖5.16所示軟件模型采用普通函數(shù)實現(xiàn)矩陣乘法2.根據(jù)圖5.17所示結(jié)合友元技術(shù)采用成員方法實現(xiàn)矩陣乘法VS2013上編輯調(diào)試【例5.6-5.8】中的代碼圖5.16矩陣和向量相乘圖5.17使用成員函數(shù)實現(xiàn)乘法運算總結(jié)及進一步學(xué)習(xí)設(shè)計:根據(jù)數(shù)學(xué)模型設(shè)計軟件模型的方法編碼:根據(jù)軟件模型編寫程序代碼的方法優(yōu)化:使用友元提高代碼運行速度的方法5.3異常處理進一步學(xué)習(xí)5.3.1異常分類和錯誤定義5.3異常處理5.3.2識別異常和拋出錯誤第5章設(shè)計與實現(xiàn)5.3.3捕獲異常并處理錯誤學(xué)習(xí)目標(biāo)能夠運用面向?qū)ο笾R解釋運行環(huán)境中的異常及其層次關(guān)系能夠使用C++編寫定義、拋出、捕獲和處理異常的代碼能夠針對一個具體場景描述拋出異常和捕獲異常的過程5.3.1異常分類和錯誤定義使用類描述異常的類別使用繼承關(guān)系描述層次關(guān)系定義錯誤編號定義錯誤信息分級處理機制軟件=程序+數(shù)據(jù)+文檔+運行環(huán)境圖5.18異常及其分類例5.9示例代碼//MyErr.hclass
MyErr{public: MyErr(interrNo,const
char*msg); MyErr(const
MyErr&oldMyErr); myStringgetErrMsg();
intgetErrNo();protected: myStringerrMsg;
interrNo;};class
SysErr:public
MyErr{public: SysErr(intsysNo,const
char*msg); SysErr(const
SysErr&oldSysErr);
intgetSysErrNo();protected:
intsysErrNo;};class
FileErr:public
SysErr{public: FileErr(const
char*msg);};class
MemErr:public
SysErr{public: MemErr(const
char*msg);};class
LogicErr:public
MyErr{public: LogicErr(intlogErrNo,const
char*msg); LogicErr(const
LogicErr&oldLogicErr);
intgetLogErrNo(void);protected:
intlogErrNo;};class
MatErr:public
LogicErr{public: MatErr(const
char*msg);};class
VecErr:public
LogicErr{public: VecErr(const
char*msg);};class
MulErr:public
LogicErr{public: MulErr(const
char*msg);};
//MyErr.cpp#include
"myString.h"#include
"MyErr.h"
MyErr::MyErr(int
errNo,const
char*msg):errMsg(msg){
MyErr::errNo=errNo;}MyErr::MyErr(const
MyErr&oldMyErr):errMsg(oldMyErr.errMsg){ errNo=oldMyErr.errNo;}myStringMyErr::getErrMsg(){
returnerrMsg;}int
MyErr::getErrNo(){
returnerrNo;}
SysErr::SysErr(int
sysNo,const
char*msg):MyErr(1,msg){ sysErrNo=sysNo;}SysErr::SysErr(const
SysErr&oldSysErr):MyErr(oldSysErr.errNo,oldSysErr.errMsg.getString()){ sysErrNo=oldSysErr.sysErrNo;}int
SysErr::getSysErrNo(){
returnsysErrNo;}FileErr::FileErr(const
char*msg):SysErr(1,msg){}MemErr::MemErr(const
char*msg):SysErr(2,msg){}LogicErr::LogicErr(int
logErrNo,const
char*msg):MyErr(2,msg){
LogicErr::logErrNo=logErrNo;}LogicErr::LogicErr(const
LogicErr&oldLogicErr):MyErr(oldLogicErr.errNo,oldLogicErr.errMsg.getString()){ logErrNo=oldLogicErr.logErrNo;}int
LogicErr::getLogErrNo(){
returnlogErrNo;}MatErr::MatErr(const
char*msg):LogicErr(1,msg){}VecErr::VecErr(const
char*msg):LogicErr(2,msg){}MulErr::MulErr(const
char*msg):LogicErr(3,msg){}5.3.2識別異常和拋出錯誤#include
"MyErr.h"#include
"Vector.h"#include
<iostream>using
namespacestd;
int&Vector::Elem(int
i){
if(i<n)
returnv[i];
else
throwVecErr("向量中數(shù)組下標(biāo)越界!");}Vector::Vector(int
n){ Vector::n=n; v=new
int[n];
if(!v)
throwMemErr("向量中申請內(nèi)存失敗!");}Vector::Vector(constVector&oldVector){ n=oldVector.n; v=new
int[n];
if(!v)
throwMemErr("向量中申請內(nèi)存失敗!");
//省略下面代碼}#include
"MyErr.h"#include
"Matrix.h"#include
"Vector.h"#include
<iostream>using
namespacestd;
int&Matrix::Elem(int
i,int
j){
if(i<m*n)
returnMat[i*n+j];
else
throwMatErr("矩陣中數(shù)組下標(biāo)越界!");}Matrix::Matrix(int
m,int
n){ Matrix::m=m; Matrix::n=n; Mat=new
int[m*n];
if(!Mat)
throwMemErr("矩陣中申請內(nèi)存失??!");}Matrix::Matrix(constMatrix&oldMatrix){ m=oldMatrix.m; n=oldMatrix.n; Mat=new
int[m*n];
if(!Mat)
throwMemErr("矩陣中申請內(nèi)存失??!");
for(inti=0;i<m*n;i++) Mat[i]=oldMatrix.Mat[i];}
5.3.3捕獲異常并處理錯誤#include
"myString.h"#include
"MyErr.h"#include
"Matrix.h"#include
"Vector.h"#include
<iostream>using
namespacestd;
VectorMultiply(Matrix&mat,Vector&vec){
//檢查行列的代碼
if(mat.getN()!=vec.getN())
throwMatErr("矩陣和向量的行列不符合相乘條件!
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版安全防范設(shè)備安裝與保安人員勞務(wù)合同2篇
- 2025版太陽能光伏發(fā)電系統(tǒng)安裝與安全檢驗合同3篇
- 《養(yǎng)老保險宣傳方案》課件
- 2025年度個人投資理財合同4篇
- 2025版萬科物業(yè)知識共享與培訓(xùn)服務(wù)合同3篇
- 2025版戶外廣告牌清洗及維護服務(wù)合同3篇
- 2025版司機車輛維護保養(yǎng)合同3篇
- 二零二五年度大數(shù)據(jù)分析服務(wù)借款合同協(xié)議2篇
- 2025年度鋁單板智能制造技術(shù)改造項目合同4篇
- 2025版我國行政救濟制度優(yōu)化與執(zhí)行監(jiān)督合同3篇
- 2025-2030年中國陶瓷電容器行業(yè)運營狀況與發(fā)展前景分析報告
- 二零二五年倉儲配送中心物業(yè)管理與優(yōu)化升級合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂作品錄制許可
- 江蘇省無錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測試語文試題(解析版)
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語試卷(含答案解析)
- 開題報告:AIGC背景下大學(xué)英語教學(xué)設(shè)計重構(gòu)研究
- 師德標(biāo)兵先進事跡材料師德標(biāo)兵個人主要事跡
- 連鎖商務(wù)酒店述職報告
- 《實踐論》(原文)毛澤東
- 第三單元名著導(dǎo)讀《紅星照耀中國》(公開課一等獎創(chuàng)新教學(xué)設(shè)計+說課稿)
評論
0/150
提交評論