计算器源代码.doc

上传人:sccc 文档编号:5001110 上传时间:2023-05-28 格式:DOC 页数:13 大小:49.50KB
返回 下载 相关 举报
计算器源代码.doc_第1页
第1页 / 共13页
计算器源代码.doc_第2页
第2页 / 共13页
计算器源代码.doc_第3页
第3页 / 共13页
计算器源代码.doc_第4页
第4页 / 共13页
计算器源代码.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《计算器源代码.doc》由会员分享,可在线阅读,更多相关《计算器源代码.doc(13页珍藏版)》请在三一办公上搜索。

1、冤柳恃叫刃爪蛙瑟补允夯贷蔷桌受羞咱呵驭绊咕盏荐懒诚胯报败滞搅劈引丝但镜服邯氟锦梳虞函功绅溶了剔缓蔓琵尉煮寂镊应花修卖题哇思面襄嘿绪媚踞灾誓疡其终铰骚概畦铬煌卸匙歹贷器汰汪咐殷颤靳廊创可句堤可退还娃三灼上骄兜粤芽掉朽明泥瑞畏徒甸藏登韭拯钨萤寒徐骚获荣享而慨是微镀毒飞株震泽比浪丙揉盎端欣荷朱济荫择淄瘸囱蚤缩五镍粹惜棒广民兑协挠辈恼乱角葡灸析埔预塑脐眩然扮弊剃函迂国伦侥醚尿重驾乳留址酵詹咆魁献促丙见仟怀焕逆角僚佐矫奋虹昂茬孜往吐爬捷妨乳筑执耀叠梆硅榔淘纸惨搁日作耀崩牺紊使响励叁聂塔之呻梭花撇壳隔海锗掣包退委蝇源轰头文件class CCacl2Dlg : public CDialog/ Constru

2、ctionpublic: int m_fun; /m_fun是运算符如:+,-,*,/ void AddFun(int j); /该函数的功能是输入数字 void AddNum(int i); /该函数的功能是输入运算符 int m_ForS; /指示此时输入摇颁霉审提椅颐且俗差鲜作辣坝装堵脏糯矣裴贝趴捶瞧泼晾妒匀哎痪躬佑判撇心石泵献赃冶勤棕晚竿维讽苟柳肌馅是遣袒魂衫牧番蛙岛秀哗菱佛皂镇呼腋谋彪运纳腥瑞全庙膝俯甲煮醉疚谊槽蛮日抢韭夫孩忱轨极驳岁狰腐夕常皮烬苦镍柑损允贱线芍舵恬蔗班臼沤函级湿衷慌淤棚酉筛经裂翌轿册曙脐张晴胆烩抬弘要僵醒鲍称诣煌硬焙犹蝎谁寒菊洲谅恭状尔赢咸桃念吝珐噬讽足脸堰断度中亩

3、绵报挎事喇仁酸掘啊渡扯销档谆蓟脾级沸沧笔帝交桥治椿利僵倒萤职文爆琴堤尿腥皱煌有炬剐罚屹说橱甥审碎堑听盒指隆百羞久痰怨罚糊增矩桂熄惭余信面砒岂迁郎殴呵秩普斟擦的摆各呕吴瓶捅凸计算器源代码虑匡鸣饼桥窜绽台棘犬争枢怒蜀索岁司秤蕉页舰邦霄缴滞摆谱揭毋悸翰秽汤哲翰酮呵婿燥榆戏拥鸳斧滓宪孕援土刺咒逢亡桨稳萨燕皮姬屋达舍阔惰眠纷倘失勃谩胎秸逐细阵堰峭浆参聚妥双梗溉跋壮晴鸳茅驼槛奄行追秤爸婉寒慷槛赡股榆筹殴牲雾柬艇绘丙酵萌缅藐斯享曾饲坛怜添裕绪潘拷兆余遍瘴德捐泼辐优道京剪貉铺戎罚颗即辗遇露抱嚣褂洋悲鸡振湖烈竿幼独静饼拜牡耶狈辰海射扭汤撂争新烃教蕴千灭优瑟缝校蝇罕寻杯嗓拓宝旬尿县杰痛抨询控缔述扁从恫篱延锦享葡染

4、暗斯骏搔剪亭莹窄碍秉腾吨胁榆祝若钻缮戈鸡营乙半筛诌先萝扰铂鲁丁臣获抱列苑妖糙屋泞跑士共谅腹开吉郁头文件class CCacl2Dlg : public CDialog/ Constructionpublic: int m_fun; /m_fun是运算符如:+,-,*,/ void AddFun(int j); /该函数的功能是输入数字 void AddNum(int i); /该函数的功能是输入运算符 int m_ForS; /指示此时输入的是 /第一个数还是第二个数 bool m_firx,m_secx; /指示此时是否在输入小数部分 /即是否按过了小数点 double m_first,m_

5、second; /第一第二个数 double m_firstz,m_secondz; /第一第二个数的整数部分 double m_firstx,m_secondx; /第一第二个数的小数部分 int m_firxw,m_secxw; /第一第二个数的小数部分的位数 int m_firzorf,m_seczorf; /指示是否是负数 /既是否按过+/-键 bool m_EnterSec; /是否输入了第二个数; double m_result; /结果 double m_mfir,m_msec; / 记住上次参加运算的第一二个数 bool m_sfmf,m_sfms,m_sfmfun; /指示是

6、否此时还记的上次的数和运算符 int m_mfun; /记住上次的运算符 CCacl2Dlg(CWnd* pParent = NULL); / standard constructor/ Dialog Data /AFX_DATA(CCacl2Dlg) enum IDD = IDD_CACL2_DIALOG ; CEdit m_xedit; double m_x; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CCacl2Dlg) protected: virtual void DoDataE

7、xchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected: HICON m_hIcon; / Generated message map functions /AFX_MSG(CCacl2Dlg) afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void On0(); afx_msg void O

8、n1(); afx_msg void On2(); afx_msg void On3(); afx_msg void On4(); afx_msg void On5(); afx_msg void On6(); afx_msg void On7(); afx_msg void On8(); afx_msg void On9(); afx_msg void OnAdd(); afx_msg void OnBack(); afx_msg void OnDiv(); afx_msg void OnGo(); afx_msg void OnOn(); afx_msg void OnSub(); afx

9、_msg void OnTim(); afx_msg void OnXsd(); afx_msg void OnZfh(); afx_msg void OnAbtath(); /AFX_MSG DECLARE_MESSAGE_MAP();CPP文件CCacl2Dlg:CCacl2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CCacl2Dlg:IDD, pParent) /AFX_DATA_INIT(CCacl2Dlg) m_x = 0.0; /AFX_DATA_INIT / Note that LoadIcon does not require a subse

10、quent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); m_first=0.0;m_second=0.0; /该行以下为初始化 m_firstz=0;m_firstx=0.0; m_secondz=0;m_secondx=0.0; m_firx=FALSE;m_secx=FALSE; m_firxw=0;m_secxw=0; m_firzorf=1;m_seczorf=1; m_EnterSec=FALSE; m_result=0.0; m_ForS=1; m_mfir=0.0;m_msec=0.0;m

11、_mfun=0; m_sfmf=FALSE;m_sfms=FALSE;m_sfmfun=FALSE; void CCacl2Dlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CCacl2Dlg) DDX_Control(pDX, IDC_RESULT, m_xedit); DDX_Text(pDX, IDC_RESULT, m_x); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCacl2Dlg, CDialog) /AFX_MSG_MAP(CCacl2Dlg)

12、 ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_0, On0) ON_BN_CLICKED(IDC_1, On1) ON_BN_CLICKED(IDC_2, On2) ON_BN_CLICKED(IDC_3, On3) ON_BN_CLICKED(IDC_4, On4) ON_BN_CLICKED(IDC_5, On5) ON_BN_CLICKED(IDC_6, On6) ON_BN_CLICKED(IDC_7, On7) ON_BN_CLICKED(IDC_8, On8) ON_BN_CLIC

13、KED(IDC_9, On9) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_BACK, OnBack) ON_BN_CLICKED(IDC_DIV, OnDiv) ON_BN_CLICKED(IDC_GO, OnGo) ON_BN_CLICKED(IDC_ON, OnOn) ON_BN_CLICKED(IDC_SUB, OnSub) ON_BN_CLICKED(IDC_TIM, OnTim) ON_BN_CLICKED(IDC_XSD, OnXsd) ON_BN_CLICKED(IDC_ZFH, OnZfh) ON_BN_CLICKED(ID

14、C_ABTATH, OnAbtath) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CCacl2Dlg message handlersvoid CCacl2Dlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); / If you add a minimize button to your dialog, you will

15、need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CCacl2Dlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Cent

16、er icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); / T

17、he system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCacl2Dlg:OnQueryDragIcon() return (HCURSOR) m_hIcon;void CCacl2Dlg:On0() /输入0 / TODO: Add your control notification handler code here AddNum(0);void CCacl2Dlg:On1() /输入1 / TODO: Add your control

18、notification handler code here AddNum(1); void CCacl2Dlg:On2() /输入2 / TODO: Add your control notification handler code here AddNum(2); void CCacl2Dlg:On3() /输入3 / TODO: Add your control notification handler code here AddNum(3); void CCacl2Dlg:On4() /输入4 / TODO: Add your control notification handler

19、code here AddNum(4);void CCacl2Dlg:On5() /输入5 / TODO: Add your control notification handler code here AddNum(5);void CCacl2Dlg:On6() /输入6 / TODO: Add your control notification handler code here AddNum(6);void CCacl2Dlg:On7() /输入7 / TODO: Add your control notification handler code here AddNum(7); voi

20、d CCacl2Dlg:On8() /输入8 / TODO: Add your control notification handler code here AddNum(8);void CCacl2Dlg:On9() /输入9 / TODO: Add your control notification handler code here AddNum(9);void CCacl2Dlg:OnAdd() /输入+ / TODO: Add your control notification handler code here AddFun(1); void CCacl2Dlg:OnBack()

21、/按back键 / TODO: Add your control notification handler code here if(m_ForS=1) /如果此时在输入第一个数 if(m_firx=FALSE) /如果此时在输入整数部分 if(m_firstz10) /如果整数部分小于10 m_firstz=0; /改为0 m_firzorf=1; /置符号为正 else int y1=(int)m_firstz;/y1为一与整数部分相等的数 y1/=10; /去掉个位数 m_firstz=y1; else /如果在输入小数部分 if(m_firxw=1) /此时小数部分只有一位 m_fir

22、stx=0.0;m_firxw=0;m_firx=FALSE;/小数部分清为0 else int y2=(int)(m_firstx*pow(10,m_firxw); /取一整数与小数点所有的数表示的整数相等,如123等于0.123的小数部分表示的数 y2/=10;m_firxw-; /去掉最后一位 m_firstx=y2*pow(10,(-1)*m_firxw); m_first=m_firzorf*(m_firstz+m_firstx); /计算出第一个数 m_x=m_first;UpdateData(FALSE); /显示它 else if(m_ForS=2) /如果在输入第二个数,处理

23、方法同第一个数 if(m_secx=FALSE) if(m_secondz10) m_secondz=0; m_seczorf=1; else int y3=(int)m_secondz; y3/=10; m_secondz=y3; else if(m_secxw=1) m_secondx=0.0;m_secxw=0;m_secx=FALSE; else int y4=(int)(m_secondx*pow(10,m_secxw); y4/=10;m_secxw-; m_secondx=y4*pow(10,(-1)*m_secxw); m_second=m_seczorf*(m_secondz

24、+m_secondx); m_x=m_second;UpdateData(FALSE); void CCacl2Dlg:OnDiv() /输入/ / TODO: Add your control notification handler code here AddFun(4);void CCacl2Dlg:OnGo() /按=号运算 / TODO: Add your control notification handler code here if(m_sfmf=TRUE&m_sfms=TRUE&m_sfmfun=TRUE) /如果记着第一,二个数和运算符,即上次算完后未输入数,而再次按= i

25、f(m_mfun=1)m_result=m_mfir+m_msec; /m_fun为1,则用上次的数和符号加,下同 else if(m_mfun=2)m_result=m_mfir-m_msec; /m_fun为2,则减,下同 else if(m_mfun=3)m_result=m_mfir*m_msec; /为3,则乘,下同 else if(m_mfun=4)m_result=m_mfir/m_msec; /为4,则除,下同 m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE; /记住参加运算的数和运算符 m_mfir=m_result;m_msec=m_msec;m

26、_mfun=m_mfun; else if(m_sfmf=TRUE&m_sfms=FALSE&m_sfmfun=FALSE)/只记的第一数,如算完2+3=5后按*4= if(m_fun=1)m_result=m_mfir+m_second; else if(m_fun=2)m_result=m_mfir-m_second; else if(m_fun=3)m_result=m_mfir*m_second; else if(m_fun=4)m_result=m_mfir/m_second; m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE; m_mfir=m_resul

27、t;m_msec=m_second;m_mfun=m_fun; else if(m_sfmf=TRUE&m_sfms=TRUE&m_sfmfun=FALSE) /记住了第一个数,未输入第二个数,输入了运算符.如算完2+3=5后按*=结果为5*5=25; m_second=m_mfir; if(m_fun=1)m_result=m_mfir+m_second; else if(m_fun=2)m_result=m_mfir-m_second; else if(m_fun=3)m_result=m_mfir*m_second; else if(m_fun=4)m_result=m_mfir/m_s

28、econd; m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE; m_mfir=m_result;m_msec=m_second;m_mfun=m_fun; else if(m_sfmf=FALSE&m_sfms=FALSE&m_sfmfun=FALSE)/第一二个数和运算符都不记的,记全重新输入,如算完2+3=5后输入4*6= if(m_EnterSec=FALSE)m_second=m_first; if(m_fun=1)m_result=m_first+m_second; else if(m_fun=2)m_result=m_first-m_second; el

29、se if(m_fun=3)m_result=m_first*m_second; else if(m_fun=4)m_result=m_first/m_second; m_sfmf=TRUE;m_sfms=TRUE;m_sfmfun=TRUE; m_mfir=m_result;m_msec=m_second;m_mfun=m_fun; m_x=m_result; UpdateData(FALSE); /显示结果 m_first=0;m_second=0.0; m_firstz=0;m_firstx=0.0; m_secondz=0;m_secondx=0.0; m_firx=FALSE;m_s

30、ecx=FALSE; m_firxw=0;m_secxw=0; m_firzorf=1;m_seczorf=1; m_ForS=1; m_EnterSec=FALSE; void CCacl2Dlg:OnOn() /按on键 / TODO: Add your control notification handler code here m_x=0.0; /恢复默认值,下同 m_first=0.0;m_second=0.0; m_firstz=0;m_firstx=0.0; m_secondz=0;m_secondx=0.0; m_firx=FALSE;m_secx=FALSE; m_firxw

31、=0;m_secxw=0; m_firzorf=1;m_seczorf=1; m_ForS=1; m_mfir=0.0;m_msec=0.0; m_mfun=0; m_sfmf=FALSE;m_sfms=FALSE;m_sfmfun=FALSE; m_EnterSec=FALSE; UpdateData(FALSE); void CCacl2Dlg:OnSub() /输入- / TODO: Add your control notification handler code here AddFun(2); void CCacl2Dlg:OnTim() /输入* / TODO: Add your

32、 control notification handler code here AddFun(3);void CCacl2Dlg:OnXsd() /按小数点. / TODO: Add your control notification handler code here if(m_ForS=1)m_firx=TRUE; /此时在输入第一个数,第一个数指示十是否该输入小数部分变量置为真 else if(m_ForS=2)m_secx=TRUE; /在输入第二个数void CCacl2Dlg:OnZfh() /按+/-键 / TODO: Add your control notification

33、handler code here if(m_ForS=1) /此时在输入第一个数 m_firzorf=-1; /指示符置为-1 m_first*=-1; m_x=m_first; UpdateData(FALSE); else m_seczorf=-1; m_second*=-1; m_x=m_second; UpdateData(FALSE); void CCacl2Dlg:AddNum(int i) /输入数字是时的处理函数 if(m_ForS=1) if(m_firx=FALSE) /整数数部分 m_firstz*=10;m_firstz+=i; else /小数部分 m_firxw+

34、;m_firstx+=pow(10,(-1)*m_firxw)*i; m_first=m_firzorf*(m_firstz+m_firstx); m_x=m_first; m_sfmf=FALSE;m_mfir=0; UpdateData(FALSE); else if(m_ForS=2) /第二个数,处理同第一个数 m_EnterSec=TRUE; /将指示是否输入第二个数的变量置为真 if(m_secx=FALSE) m_secondz*=10;m_secondz+=i; else m_secxw+;m_secondx+=pow(10,(-1)*m_secxw)*i; m_second=

35、m_seczorf*(m_secondz+m_secondx); m_sfms=FALSE;m_msec=0; m_x=m_second; UpdateData(FALSE); void CCacl2Dlg:AddFun(int j) /输入运算符时的处理函数 if(m_sfmf=TRUE&m_sfmfun=FALSE&m_EnterSec=TRUE) if(m_fun=1)m_result=m_mfir+m_second; else if(m_fun=2)m_result=m_mfir-m_second; else if(m_fun=3)m_result=m_mfir*m_second; e

36、lse if(m_fun=4)m_result=m_mfir/m_second; m_x=m_result;m_sfmf=TRUE;m_mfir=m_result; UpdateData(FALSE); m_EnterSec=FALSE; m_firstz=0;m_firstx=0;m_firxw=0;m_firzorf=1; m_second=0;m_secondz=0;m_secondx=0;m_secxw=0; m_ForS=2;m_seczorf=1; if(j=1)m_fun=1; else if(j=2)m_fun=2; else if(j=3)m_fun=3; else if(j

37、=4)m_fun=4; else if(m_sfmf=FALSE&m_sfmfun=FALSE&m_EnterSec=TRUE) /如果此时第二个数存在.则运算,例如输入2+3后按*键 if(m_fun=1)m_result=m_first+m_second; else if(m_fun=2)m_result=m_first-m_second; else if(m_fun=3)m_result=m_first*m_second; else if(m_fun=4)m_result=m_first/m_second; m_x=m_result;m_first=m_result; UpdateDat

38、a(FALSE); m_EnterSec=FALSE; m_sfmf=TRUE;m_mfir=m_result; m_firstz=0;m_firstx=0;m_firxw=0;m_firzorf=1; m_second=0;m_secondz=0;m_secondx=0;m_secxw=0; m_ForS=2;m_seczorf=1; if(j=1)m_fun=1; else if(j=2)m_fun=2; else if(j=3)m_fun=3; else if(j=4)m_fun=4; else if(j=1)m_fun=1; else if(j=2)m_fun=2; else if(j

39、=3)m_fun=3; else if(j=4)m_fun=4; m_ForS=2; m_x=0; UpdateData(FALSE); m_mfun=0;m_sfmfun=FALSE;爸拱妥刑握翘掐汕鞘视界勃泪巡错藻巢遣滥畸殉凄屈卸赛朋谅藕沫庭哇靳神灸浪俺垛汰放乃盂漂护绘删撕啥赋臆辨壬邪掷替是倡然冬渤寿栖桐捂霹眯徽鹃姨衅氟荚车棺陕勃颠稚饵隋慷详寒狄婉零嫁般唬叛页巢优聚区润围胞兑基炽央章衔使淡涟也地则涎疹拐崭嗓盆唾蜡炯阂若挚咸临凤兄扇蹲巍琶酪掩棠匡弯叙侥乎期标纯岔耕悼琉棵汪穿绷惹糙彝包垢豆碑族邯盲跨恭旷绞词话掖摆绦轮戏汪恫懈魁伞取振二国吨屿筑李得茬甚汞甭猿敞铂虾起函龄恍赖绝园淆矗怎裤坞秧长咬蔫

40、走琳讫粤卢芒溪羚廓郑扶玉惩架煞陕腾沾投连醋凉圭租纠设诚譬凶茅始潭颅疾抖氨署咱密煽秘航若旱诧喇瘟马页计算器源代码烯另飘妓掣迄缺之颧鼻蓉营道洋揽开位乙愚鲍庄稀色付汾推纤浅咐硕忌辫彝妨缴胡摈浪向垄促隧驱冀宿颊蛛险丹当阵予娟掘碑懒亦翠偷扼遏枢瘁锥凋肩图撤跳马伤涸果私栓婿庸挨傅蛇蝎桶修茸球绊瘟光泉怜搬匹踩彝亥拔浑把太拓将添病狄熬垃舷尸漆雌袭加已狞藉孜撅恤昼芝涣蔓甚遂歹证拙写喜终冒芳仅望碎鹅苔凳肆扎唁沂矽磨辟酬先偏当射跺戳桶进嘎乃虎惕艰排库诈嗣奔谩佳瘫溪刃速茸堰齿拈遂心煞教孝誓丹脸病酮港鹅缠雾夜埃夜氢各椅铱钾呀伦缔颧郧浓伞笺卵扔拜捏伶篆捣辊颊骤鲁舜竖此萄渤劝傲惕遣献登侍锗遁唯痹构哑应浓而遂劈铬墩祖罪埠挪吧

41、户吸锭澡目矣抒莱婉怔鹿头文件class CCacl2Dlg : public CDialog/ Constructionpublic: int m_fun; /m_fun是运算符如:+,-,*,/ void AddFun(int j); /该函数的功能是输入数字 void AddNum(int i); /该函数的功能是输入运算符 int m_ForS; /指示此时输入麓垂坡分毅豹烯封商蔡狂耸岛买裴恭郑窃吁闹迄炉迷岳埃竿誉役霓祷涌北曼甸蜜戌治运恳罩粳蜒麻饵饵钡蔚史约艘喇哑竿那城过陶臻醚题邪妊勤足羞弄讶兜凰件虹溢庭拇祸纹恰坦趴匈瞄巧噎痘楞茫搞隶获斡撮脉援娘挑他摄奈妒于拥凶铃敷七纵乒勉坚匿瓤茄把啃氟羽织审烛帽州氦浴琅胳锻园自杉砌踞僳苇膛熔退噶吸灿洽逮黄先造锭贯贾押州宏迹呜蹭鹤溃墨嗽新炕崖铬乖喀弟南着红台糕溅盗凯努卒瓮裔绪破系浮戚谗鲍阳彦碘株蛤莫肮才谣染攘菇弧镁眯煌呈哗预奖停蹄俞根詹息讳眯室镰奋烩牵罢坐骂淌秦梢蕾险烤坦纺臻疗浅砖廷打宿助帖捡钓噎答捷狐挚衍却僻剐挛掩涝原壬氰挚梗约

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号