




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.日期和時間課程設(shè)計報告1. 功能1.1課程設(shè)計題目功能:定義了日期類、時間類和日期時間綜合類,重載了+、-、+、-、=、>=、<=、=、!=等運(yùn)算符,可以設(shè)置時間、日期,比較時間和日期的大小,可以進(jìn)行時間、日期對象的運(yùn)算(加減),并按多種格式輸出結(jié)果。1.2思想和方法:通過重載運(yùn)算符使運(yùn)算符實現(xiàn)對對象的加減運(yùn)算,并在結(jié)果輸出時自動載入閏年判斷程序,實現(xiàn)結(jié)果的智能化輸出;將菜單輸出和結(jié)果輸出隔開,防止混淆;日期類中將星期五單獨(dú)定義,實現(xiàn)對錯誤的處理;通過拷貝函數(shù)的運(yùn)用,實現(xiàn)“+”、“-”的重載。1.3增加的新功能:增加了對運(yùn)算起始日期時間的修改和各操作菜單的退出功能。2. 詳細(xì)設(shè)計
2、2.1 c_Time類:重載了+、-、+、-、=、!=、<、>、<=、>=運(yùn)算符;將時間是否超過或少于當(dāng)天設(shè)置為靜態(tài)靜態(tài)成員函數(shù),設(shè)置了兩個輸出函數(shù);“-”中,優(yōu)化了結(jié)構(gòu),以四行將原程序代替,將少于一天的情況在后面列出;“+”中,將數(shù)值超過范圍的情況的處理在后面列出。2.2 c_Date類:重載了+、-、+、-、=、!=、<、>、<=、>=運(yùn)算符;設(shè)置了兩個輸出函數(shù);簡化了“+”運(yùn)算符,同時修正了錯誤;“+”“-”中,將數(shù)值超過范圍的情況的處理在后面列出;在第一個函數(shù)中,對當(dāng)前時間日期進(jìn)行了賦值,是起始日期時間的設(shè)定函數(shù)。2.3 TDmanage
3、類:重載了+、-、+、-、=、!=、<、>、<=、>=運(yùn)算符;設(shè)置為c_Time和c_Date的派生類,可以實現(xiàn)對時間和日期的混合加減比較。2.4 TDglobal類:為輸入輸出的專門的類,重載了<<,>>運(yùn)算符。2.5 error類:為專門處理錯誤的類,包括對原日期時間少于1900的處理,以及在“+”、“-”中結(jié)果少于1900的處理,以及輸出時日期時間少于1900的處理。2.6 main類:以swith型進(jìn)行菜單的輸出,主要是對所有程序的綜合處理,對菜單項的編輯,是最后的運(yùn)行程序。3. 調(diào)試過程3.1出現(xiàn)了編譯時無問題,而調(diào)試時提示沒有相關(guān)函數(shù)
4、的問題,編譯結(jié)束后載入相關(guān)文件解決了問題。3.2無法有效退出,將函數(shù)改為swith型解決問題。3.3出現(xiàn)了輸出結(jié)果與預(yù)期不符的狀況,更改了輸出變量名解決問題。3.4最開始時沒有設(shè)置對“+”的錯誤類進(jìn)行設(shè)置,由于不太可能遇到相關(guān)情況,沒有注意,后來看課本才發(fā)現(xiàn)。4. 輸入輸出開始界面時間格式的更改與否主操作菜單時間類操作,以“+”為例其后繼續(xù)為主操作菜單日期類操作,以“-”為例綜合類操作,以比較為例5. 總結(jié)本程序大量運(yùn)用了運(yùn)算符的重載,并且用到了多文件的處理,對以后處理或創(chuàng)建大程序很有幫助。而且運(yùn)算符重載實際上是有很多技巧的,最一般的“+”“-”重載,需要考慮輸入的數(shù)據(jù)的類型及對輸出結(jié)果的要求
5、。另外錯誤處理也是個難關(guān),即“error”類,不僅要考慮原日期時間的處理,還要考慮對運(yùn)算符錯誤的處理,很有可能會落下某些情況,需要不斷調(diào)試以保證每種情況都考慮到了。這個程序?qū)€人對類處理必須相當(dāng)熟悉,幾乎將所有可能的情況都涉及了,而且難度不算太大,對于剛接觸c+沒有太長時間的我們是個很好的練習(xí)課程。6. 附件源程序:/cTime_t.h Begin#include <iostream.h>#include <time.h>#ifndef cTime_t_h#define cTime_t_hclass cTime_tstatic int FlagMoreDay;stati
6、c int FlagLessDay;static int format;int Seconds;int Minutes;int Hours;struct tm *CurrentTime;time_t time_date;public:cTime_t();cTime_t(const cTime_t &T);cTime_t(int hour,int min=0,int sec=0):Seconds(sec),Minutes(min),Hours(hour) ;cTime_t();const cTime_t& operator = (const cTime_t& T);inl
7、ine void SetSec (int sec) Seconds=sec;inline void SetMin (int min) Minutes=min;inline void SetHour (int hour) Hours=hour;void print() const;void print1() const;inline int GetSec () const return Seconds;inline int GetMin () const return Minutes;inline int GetHour () const return Hours;int getFlagMore
8、Day()return FlagMoreDay;int getFlagLessDay()return FlagLessDay;void resetFlagMoreDay()FlagMoreDay=0;void resetFlagLessDay()FlagLessDay=0;bool operator < (const cTime_t& T)const;bool operator <= (const cTime_t& T)const;bool operator > (const cTime_t& T)const;bool operator >= (
9、const cTime_t& T)const;bool operator = (const cTime_t& T)const;bool operator != (const cTime_t& T)const;const cTime_t operator + (const cTime_t& T) const;int operator - (cTime_t& T);const cTime_t operator + (int NewMinutes);const cTime_t operator - (int NewMinutes);int getformat1
10、()return format;void operator + ();void operator - (); static void ChangeFormat() format = (format=1)? 2 : 1 ; /format can be only 1 or 2friend ostream& operator << (ostream &out,const cTime_t &T) ; friend istream& operator >> (istream &in, cTime_t &T) ;friend cla
11、ss cTDmanage;#endif/cTime_t.h End/cTime_t.cpp/implementation of cTime_t#include "cTime_t.h"int cTime_t:format=1;int cTime_t:FlagMoreDay=0; / default values for static data membersint cTime_t:FlagLessDay=0;/-cTime_t:cTime_t() /empty c'tortime_date=time(0);CurrentTime=localtime(&time
12、_date);Seconds=CurrentTime->tm_sec;Minutes=CurrentTime->tm_min;Hours=CurrentTime->tm_hour;/-cTime_t:cTime_t(const cTime_t &T) /copy c'torSeconds=T.Seconds;Minutes=T.Minutes;Hours=T.Hours;/-const cTime_t& cTime_t:operator = (const cTime_t& T) /operator = functionSeconds=T.Sec
13、onds;Minutes=T.Minutes; / copy relevent fieldsHours=T.Hours;return *this;/-void cTime_t:print() const /print functionswitch(format)case 1:if(Seconds<10 && Minutes<10)cout<<"The time is: "<< Hours<<":0"<<Minutes<<":0"<<Se
14、conds<<"."<<endl;else if(Seconds<10)cout<<"The time is: "<< Hours<<":"<<Minutes<<":0"<<Seconds<<"."<<endl;else if(Minutes<10)cout<<"The time is: "<< Hours<<
15、":0"<<Minutes<<":"<<Seconds<<"."<<endl;elsecout<<"The time is: "<< Hours<<":"<<Minutes<<":"<<Seconds<<"."<<endl;break;case 2:if(Hours<=12)if(Seconds&
16、lt;10 && Minutes<10)cout<<"The time is: "<<Hours<<":0"<<Minutes<<":0"<<Seconds<< " AM."<<endl;else if(Minutes<10)cout<<"The time is: "<<Hours<<":0"<<Minut
17、es<<":"<<Seconds<< " AM."<<endl;else if(Seconds<10)cout<<"The time is: "<<Hours<<":"<<Minutes<<":0"<<Seconds<< " AM."<<endl;else cout<<"The time is: "
18、;<<Hours<<":"<<Minutes<<":"<<Seconds<< " AM."<<endl;else if (Seconds<10 && Minutes<10)cout<<"The time is: "<<Hours-12<<":0"<<Minutes<<":0"<<Seconds&
19、lt;< " PM."<<endl; else if (Minutes<10)cout<<"The time is: "<<Hours-12<<":0"<<Minutes<<":"<<Seconds<< " PM."<<endl;else if (Seconds<10)cout<<"The time is: "<<Hours-1
20、2<<":"<<Minutes<<":0"<<Seconds<< " PM."<<endl;elsecout<<"The time is: "<<Hours-12<<":"<<Minutes<<":"<<Seconds<< " PM."<<endl;break;default:cout<
21、;<"The format is not ok"<<endl; /error (if format value wasn't one of the above/-void cTime_t:print1() const /print functionswitch(format)case 1:if(Seconds<10 && Minutes<10)cout<< Hours<<":0"<<Minutes<<":0"<<Secon
22、ds<<"."<<endl;else if(Seconds<10)cout<< Hours<<":"<<Minutes<<":0"<<Seconds<<"."<<endl;else if(Minutes<10)cout<< Hours<<":0"<<Minutes<<":"<<Seconds<
23、<"."<<endl;elsecout<< Hours<<":"<<Minutes<<":"<<Seconds<<"."<<endl;break;case 2:if(Hours<=12)if(Seconds<10 && Minutes<10)cout<<Hours<<":0"<<Minutes<<":0&
24、quot;<<Seconds<< " AM."<<endl;else if(Minutes<10)cout<<Hours<<":0"<<Minutes<<":"<<Seconds<< " AM."<<endl;else if(Seconds<10)cout<<Hours<<":"<<Minutes<<":0&
25、quot;<<Seconds<< " AM."<<endl;else cout<<Hours<<":"<<Minutes<<":"<<Seconds<< " AM."<<endl;else if (Seconds<10 && Minutes<10)cout<<Hours-12<<":0"<<Minutes<&
26、lt;":0"<<Seconds<< " PM."<<endl; else if (Minutes<10)cout<<Hours-12<<":0"<<Minutes<<":"<<Seconds<< " PM."<<endl;else if (Seconds<10)cout<<Hours-12<<":"<<Min
27、utes<<":0"<<Seconds<< " PM."<<endl;elsecout<<Hours-12<<":"<<Minutes<<":"<<Seconds<< " PM."<<endl;break;default:cout<<"The format is not ok"<<endl; /error (if form
28、at value wasn't one of the above/-bool cTime_t:operator < (const cTime_t& T)const /operator < functionif (Hours<T.Hours)return true;if(Hours=T.Hours)if(Minutes<T.Minutes)return true;if(Minutes=T.Minutes)return (Seconds<T.Seconds);return false;/-bool cTime_t:operator <= (con
29、st cTime_t &T)const /operator <= functionif (Hours<T.Hours)return true;if(Hours=T.Hours)if(Minutes<T.Minutes)return true;if(Minutes=T.Minutes)return (Seconds<=T.Seconds);return false;/-bool cTime_t:operator > (const cTime_t& T)const /operator > functionif (Hours>T.Hours)
30、return true;if(Hours=T.Hours)if(Minutes>T.Minutes)return true;if(Minutes=T.Minutes)return (Seconds>T.Seconds);return false;/-bool cTime_t:operator >= (const cTime_t& T)const /operator >= functionif (Hours>T.Hours)return true;if(Hours=T.Hours)if(Minutes>T.Minutes)return true;if(
31、Minutes=T.Minutes)return (Seconds>=T.Seconds);return false;/-bool cTime_t:operator = (const cTime_t &T)const /operator = functionreturn ( (Hours=T.Hours) && (Minutes=T.Minutes) && (Seconds=T.Seconds) );/-bool cTime_t:operator != (const cTime_t &T)const/operator != function
32、return !( (Hours=T.Hours) && (Minutes=T.Minutes) && (Seconds=T.Seconds) );/-const cTime_t cTime_t:operator + (const cTime_t &T) const /operator + functionint HourTemp,MinuteTemp,SecondTemp;/define 3 temp variables to get time dataSecondTemp=Seconds+T.Seconds;if(SecondTemp>=60)
33、/more thrn 1 minuteSecondTemp-=60;MinuteTemp=Minutes+T.Minutes+1;/so add to minuteelseMinuteTemp=Minutes+T.Minutes;if(MinuteTemp>=60)/more then 1 hourMinuteTemp-=60;HourTemp=Hours+T.Hours+1;/add to hourelseHourTemp=Hours+T.Hours;if(HourTemp>=24)FlagMoreDay=1; /to add day to date classHourTemp-
34、=24;return (cTime_t (HourTemp,MinuteTemp,SecondTemp) ); /return local time class /-int cTime_t:operator - (cTime_t &T)int newhour,newminute;newhour=Hours-T.Hours;newminute=Minutes-T.Minutes;return newhour*60+newminute;/*const cTime_t cTime_t:operator - (const cTime_t &T) const /operaor - fun
35、ctionint HourTemp,MinuteTemp,SecondTemp;/define 3 temp variables to get time dataHourTemp = Hours-T.Hours;if(HourTemp<0)/T class hour was bigger then THIS classFlagLessDay=1; /to cut 1 day form date classHourTemp+=24;/ add 24 hours to previous dayMinuteTemp=Minutes-T.Minutes;if(MinuteTemp<0)/s
36、ame for minutesMinuteTemp+=60;-HourTemp;SecondTemp=Seconds-T.Seconds;if(SecondTemp<0)/same for secondsSecondTemp+=60;-MinuteTemp;return ( cTime_t ( HourTemp,MinuteTemp,SecondTemp) );/return local class */-void cTime_t:operator + () /operator + functionif ( (Seconds=59) && (Minutes=59) &am
37、p;& (Hours=23) ) / end of a dayFlagMoreDay=1;/to add day to day classSeconds=0;Minutes=0;Hours=0;else if( (Seconds=59) && (Minutes=59) )/end of hourSeconds=0;Minutes=0;+Hours;else if( Seconds=59 )/end of minuteSeconds=0;+Minutes;else+Seconds;/-void cTime_t:operator - () /operator - funct
38、ionif ( (Seconds=0) && (Minutes=0) && (Hours=0) )/start of dayFlagLessDay=1;/to substruct 1 day from day classSeconds=59;Minutes=59;Hours=23;else if( (Seconds=0) && (Minutes=0) )/start of hourSeconds=59;Minutes=59;-Hours;else if( Seconds=0 )/start of minuteSeconds=59;-Minutes
39、;else-Seconds;const cTime_t cTime_t:operator + (int NewMinutes)int HourTemp,MinuteTemp,SecondTemp;SecondTemp=Seconds;HourTemp=Hours;MinuteTemp=Minutes+NewMinutes;while(MinuteTemp>=60)MinuteTemp-=60;HourTemp+=1;while(HourTemp>=24)HourTemp-=24;FlagMoreDay+=1;return (cTime_t (HourTemp,MinuteTemp,
40、SecondTemp) );const cTime_t cTime_t:operator - (int NewMinutes)int HourTemp,MinuteTemp,SecondTemp;SecondTemp=Seconds;HourTemp=Hours;MinuteTemp=Minutes-NewMinutes;while(MinuteTemp<0)MinuteTemp+=60;HourTemp-=1;while(HourTemp<0)HourTemp+=24;FlagLessDay=1;return (cTime_t (HourTemp,MinuteTemp,Secon
41、dTemp) );/cTime_t.cpp end/cDate_t.h Begin#include <iostream.h>#include <time.h>#ifndef cDate_t_h#define cDate_t_h#define N 3class cDate_tenum Days Saturday,Sunday,Monday,Tuesday,Wensday,Thursday,Friday ;enum Months None,January,February,Mars,April,May,June,July,August,September,October,N
42、ovember,December ;static int format;static char Mon10;static char DDays10;int Day;int Month;int Year;struct tm *CurrentTime;time_t time_date;public: bool Error;cDate_t();cDate_t(const cDate_t &D);cDate_t(int year,int month,int day);cDate_t()const cDate_t& operator = (const cDate_t& D);in
43、line void SetDay (int day) Day=day;inline void SetMon (int mon) Month=mon;inline void SetYear (int year) Year=year;void print();void print1();inline int GetDayOfMonth () const return Day;inline int GetMonth () const return Month;inline int GetYear () const return Year;int GetDayOfYear(int year,int m
44、onth,int day);int GetDaysInMonth(int month,int year);int GetDayOfWeek();bool IsLeapYear(int year);char* GetDayOfWeekName();char* GetNameOfMonth();int RetriveDay(int Days,int year);int RetriveMonth(int Days,int year);bool operator < (const cDate_t& D)const;bool operator <= (const cDate_t&am
45、p; D)const;bool operator > (const cDate_t& D)const;bool operator >= (const cDate_t& D)const;bool operator = (const cDate_t& D)const;bool operator != (const cDate_t& D)const;const cDate_t operator + (const cDate_t& D) ;int operator - (cDate_t& D) ;const cDate_t operator
46、+ (int Days) ;const cDate_t operator - (int Days) ;int getformat2()return format;void operator + ();void operator - (); static void cDate_t:ChangeFormat() /implementation of static function must be in headerswitch(format) case 1: format=2; break;case 2: format=3; break;case 3: format=1; friend ostre
47、am& operator << (ostream &out,const cDate_t &D) ; friend istream& operator >> (istream &in, cDate_t &D) ;void SetError() Error=false;friend class cTDmanage;#endif/cDate_t.h End/cDate_t.cpp Begin/implementation of cDate_t.h#include "cDate_t.h"#include &qu
48、ot;error.h"#include <math.h>#define max(a, b) (a) > (b) ? (a) : (b)#define min(a, b) (a) < (b) ? (a) : (b)int cDate_t:format=1;/靜態(tài)成員變量char cDate_t:Mon10 = "Janaury","February","Mars","April","May","Juny","July",&q
49、uot;August","September","October","November","December" ;char cDate_t:DDays10 = "Saturday","Sunday","Monday","Tuesday","Wensday","Thursday","Friday" ;/-cDate_t:cDate_t() /構(gòu)造函數(shù),賦值當(dāng)前時間Set
50、Error();time_date=time(0);CurrentTime=localtime(&time_date); Day=CurrentTime->tm_mday;Month=CurrentTime->tm_mon+1;Year=CurrentTime->tm_year+1900;/-cDate_t:cDate_t(int year,int month,int day):Year(year),Month(month),Day(day) /c'torSetError();if (Year<1900) /錯誤的數(shù)字 Error1();Error=tr
51、ue;/-cDate_t:cDate_t(const cDate_t &D) /拷貝的構(gòu)造函數(shù)SetError();Day=D.Day;Month=D.Month;Year=D.Year;if (Year<1900)/錯誤的數(shù)字Error1();Error=true;/-const cDate_t& cDate_t:operator = (const cDate_t& D) /重載=運(yùn)算符Day=D.Day;Month=D.Month;Year=D.Year;if (Year<1900)/bad data from the other objectError
52、1();Error=true;/置錯誤標(biāo)志elseSetError();/正確return *this;/-void cDate_t:print() /輸出char strN; for(int i=0;i<N;+i)stri=MonMonth-1i;/將月份的英文賦值進(jìn)strstri='0'if(Error)/如果日期出錯,輸出提示信息Error2();return;switch(format) /判斷以什么形式輸出case 1: /歐洲格式cout<<"The date is: "<< Day<<"/&q
53、uot;<<Month<<"/"<<Year<<"."<<" "<<GetDayOfWeekName()<<""<<endl;break;case 2: /美國格式cout<<"The date is: "<<Month<<"/"<<Day<<"/"<<Year<< "
54、."<<" "<<GetDayOfWeekName()<<""<<endl;break;case 3: /用英文月份形式代替數(shù)字cout<<"The date is: "<<Day<<"/"<<str<<"/"<<Year<< "."<<" "<<GetDayOfWeekName()<&
55、lt;""<<endl;break;default:cout<<"The format is not ok"<<endl;/-void cDate_t:print1() /輸出char strN; for(int i=0;i<N;+i)stri=MonMonth-1i;/將月份的英文賦值進(jìn)strstri='0'if(Error)/如果日期出錯,輸出提示信息Error2();return;switch(format) /判斷以什么形式輸出case 1: /歐洲格式cout<<Day<
56、;<"/"<<Month<<"/"<<Year<<"."<<" "<<GetDayOfWeekName()<<""<<endl;break;case 2: /美國格式cout<<Month<<"/"<<Day<<"/"<<Year<< "."<<&quo
57、t; "<<GetDayOfWeekName()<<""<<endl;break;case 3: /用英文月份形式代替數(shù)字cout<<Day<<"/"<<str<<"/"<<Year<< "."<<" "<<GetDayOfWeekName()<<""<<endl;break;default:cout<&l
58、t;"The format is not ok"<<endl;/-bool cDate_t:operator < (const cDate_t& D)const / 重載<運(yùn)算符/ return true if THIS object is < then the secondif (Year<D.Year) return true;if(Year=D.Year)if(Month<D.Month)return true;if(Month=D.Month)return (Day<D.Day);return false;/-
59、bool cDate_t:operator <= (const cDate_t &D)const / 重載<=運(yùn)算符/ return true if THIS object is <= then the secondif (Year<D.Year)return true;if(Year=D.Year)if(Month<D.Month) return true;if(Month=D.Month) return (Day<=D.Day);return false;/-bool cDate_t:operator > (const cDate_t& D)const /重載>運(yùn)算符/ return true if THIS object is > then the secondif (Year>D.Year)return true;if(Year=D.Year) if(Month>D.Month)return true;if(Month=D.Month)return (Day>D.Day);return false;/-bool cDate_t:operator >= (const cDate_t &D)const /重載>=運(yùn)算符/
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)間商業(yè)匯票貼現(xiàn)業(yè)務(wù)協(xié)議書
- 2025年正式版股權(quán)收益分配協(xié)議格式
- 2025年專業(yè)舞蹈藝術(shù)指導(dǎo)協(xié)議
- 2025年秋季青少年活動中心場地策劃與維護(hù)協(xié)議
- 合同條款的法律風(fēng)險控制策略
- 2025年典范珠寶客戶滿意服務(wù)協(xié)議
- 商業(yè)秘密保護(hù)的挑戰(zhàn)與對策
- 2025年員工年終獎金發(fā)放標(biāo)準(zhǔn)協(xié)議
- 企業(yè)財務(wù)透明度與法律責(zé)任風(fēng)險控制
- 智能化倉儲與物資儲備數(shù)字化轉(zhuǎn)型
- 小學(xué)語文教學(xué)研究(有答案)-國家開放大學(xué)2022年1月(2020秋)期末考試復(fù)習(xí)資料、試題及答案
- 描述性分析與不平等的度量方法(1)
- 微積分基本公式
- 參考食品加工操作流程圖
- 國科大葉齊祥機(jī)器學(xué)習(xí)期末考試
- 山東省普通高中學(xué)生發(fā)展報告
- 高新區(qū)孵化器亮化工程投標(biāo)文件商務(wù)標(biāo)格式
- DB45∕T 2418-2021 水運(yùn)工程交工檢測與竣工檢測規(guī)范
- 英雄壇說人物位置
- 旋流風(fēng)口、球型噴口選型參數(shù)表
- 監(jiān)理預(yù)驗收表格(共11頁)
評論
0/150
提交評論