ImageVerifierCode 换一换
格式:DOC , 页数:39 ,大小:977KB ,
资源ID:9898150      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9898150.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(毕业设计-任意复合梁结构截面性质可视化计算器.doc)为本站上传会员【鼓***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

毕业设计-任意复合梁结构截面性质可视化计算器.doc

1、任意复合梁结构截面性质可视化计算器 大学生创新训练计划 题 目:任意复合梁结构截面性质可视化计算器 学 院: 建筑与土木工程学院 系: 土木工程系 专 业: 土木工程 2015 年 1 月 项目计划书 摘要: 通过力学分析、数值计算和Matlab程序编写对任意复合梁结构截面性质进行计算,应用于形式简单但是计算过程繁杂的复合材料结构的截面,主要以本科生阶段的材料

2、力学的学习为基础,先以各种简单材料的截面的惯性矩为研究切入点,经过力学分析,数值计算等一系列前期准备之后,通过Matlab进行程序编写,使用GUI界面,使得到的结果直观可视化的呈现出来。本项目可使任意复合梁结构截面性质计算从复杂的计算过程中脱离出来,只需要将所求的任意形状的截面在可视化的界面中按提示输入或导入相应的坐标,即可获得所需的截面的性质。相比传统的计算,更为简便和直观,输出结果也更加丰富。 关键词:任意截面 惯性矩 Matlab程序 可视化界面 II 目录 一、 引言 - 2 - 二、 研究过程 - 2 -

3、一) 项目实施过程 - 2 - (二) 算法的研究探索过程 - 3 - (三) Matlab相关操作学习及研究过程 - 17 - 三、 研究成果 - 18 - 四、 经费预算 - 22 - 附录 - 23 - 任意复合梁结构截面性质(惯性矩部分) 可视化计算器 一、 引言 截面惯性矩,截面各微元面积与各微元至截面上某一指定轴线距离二次方乘积的积分。截面惯性矩是衡量截面抗弯能力的一个几何参数。任意截面图形内取微面积dA与其搭配z轴的距离y的平方的乘积y2dA定义为微面积对z轴的惯性矩,在整个图形范围内的积

4、分则称为此截面对z轴的惯性矩Iz。 工程结构中,弯曲变形是最常见的结构变形形式。在对其进行强度、刚度计算时,需要用到几何量——惯性矩。由于它相对于其它几何量而言,具有内容复杂,变化大,掌握起来难、烦等特点。 使用计算器可使任意复合梁结构截面惯性矩计算从复杂的计算过程中脱离出来,只需要将所求的任意形状的截面在可视化的界面中按提示输入或导入相应的坐标,即可获得所需的截面的性质。相比传统的计算,更为简便和直观,输出结果也更加丰富。 二、 研究过程 (一) 项目实施过程 2014年9月至12月 前期计算准备 1、 复习面积矩、惯性矩、极惯性矩的

5、求法。 2、 初步熟悉并学习matlab编程方法。 3、 小组分工对各种一般工程构件横截面的惯性矩、极惯性矩进行计算。 4、 12月15日进行小组讨论,对该阶段成果进行汇总。 2014年12月至2015年1月 基本截面图形程序编写 1、12月18日与指导老师交流,着手一般四边形形心主惯性矩程序运算,并学习matlab交互界面制作。 2、 分工对一般四边形形心主惯性矩进行计算,寻找最佳运算方法。 3、 12月27日小组讨论对运算方法进行整合。 4、 着手编程,初步得出一般四边形形心主惯性矩运算的程序。 5、 1月4日与指导老师交流,验算程序并在老师指导下得出程序合理化简化的方

6、法。 6、 1月14日进行小组讨论,讨论程序修改方案 7、 对程序语言按要求进行修改,使程序更为简洁,对用户交互界面中图形显示区域进行修改,初步修复了图形显示问题。 8、 1月21日与指导老师交流,检验当前成果,并提出对其他一般图形的运算编程。 (二) 算法的研究探索过程 经分析,工程上的复杂截面大多可以分解为多个三角形后进行分析计算,且三角形的几何性质是我们比较熟悉和容易分析,因此对给定三个顶点坐标的三角形的几何性质的计算是计算工程复杂截面基础与前提。 1、单元坐标法求截面静距、惯性矩及惯性积 已知三角形的三个顶点A、B、C的坐标分别为(x1,y1)、(x2,y2)

7、x3,y3)。根据三角形面积的定义及海伦公式可用三个顶点坐标表示三角形的面积为 (1) 根据静距、惯性矩及惯性积的定义及微积分的相关知识可用三角形的三个顶点坐标将其表示如下: (2) 同理 (3) (4) (5) (6) 2、简单三角形求主惯性矩 由形心的定义及其与静距的关系可得形心如下: (7) (8) 利用平行移轴定理可得三角形对形

8、心轴轴与轴的惯性矩和惯性积 (9) (10) (11) 在对形心轴的惯性矩及惯性积的基础上利用转轴公式求得截面的形心主惯性矩 (12) (13) 3、简单四边形形心主惯性矩的计算 求简单四边形的形心主惯性矩是在三角形的基础上进行,将四边形分成两个三角形进行计算。四个顶点按逆时针分别为A、B、C、D。由面积、静距、惯性矩及惯性积的定义可知,他们均满足叠加性,可得下面

9、的计算过程: (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (2

10、9) (30) (31) (32) (33) (34) (35) (36) 4、复杂多边形的形心主惯性矩计算 在已完成简单三角形和简单四边形的计算后,根据截面的几何性质的可叠加性,复杂多边形的计算就变得比较简单了,其实就是重复的过程,从算法说就是循

11、环累加的过程。因此复杂边形的计算就是将其分解为多个三角形而进行。这样,无论多复杂的截面,只要能分解为三角形就可以对其形心主惯性矩进行计算。计算过程如下: 由面积公式 (37) 计算得各个三角形的面积 由静距公式 (38) 计算得各个三角形的静距 及 同理由惯性矩及惯性积的公式 (39) (40) (41) 可得 及 由截面几何性质的可叠加性可得 (42) (43)

12、 (44) (45) (46) (47) 例如正六边形的推导法: 设正六边形的边长为a,由对称性可知,形心为O 求 先考虑 关于自己的形心惯性矩 (48) 所以,它关于x轴的惯性矩为 (49) 由惯性矩定义可得对x轴的惯性矩相同 考虑,关于自己的形心惯性矩 (50)

13、 (51) 所以 (52) 求 先考虑矩形,对自己形心的惯性矩 (53) (54) 再考虑 (55) (56) (57) 6、曲线图形组合截面的形心主惯性矩的计算 由于工程实际中并不是所有的截面都

14、是多边形,还可能包括圆形、半圆形、扇形以及多边形与曲线图形的组合,主要是指工程上应用比较多的多边形与半圆和扇形的组合以及圆截面。因为半圆、圆形及扇形截面的特殊性都有各自独特几何性质计算公式,因此当要计算这样的组合截面时只需在计算过程中将各自的几何性质带入循环与累加计算过程中就可以解决曲线截面及组合截面形心主惯性矩的计算。 (1) T字型 形心为,其中: (58) T形截面对形心轴的惯性矩: (59) T形截面对形心轴的惯性积: 所以, 便是形心主惯性矩。 (2) 工字型

15、 形心为C,其中: (60) 工字型截面对形心轴的惯性矩: (61) (62) 工字型截面对形心轴的惯性积: 所以, 便是形心主惯性矩。 (3) 半圆形 半圆惯性矩公式: (63) (为半圆的半径) (64) 形心C距离圆心 转轴公式前提:直角坐标系逆时针旋转角度后与直角坐标系重合 1、 (图) 当 时,则 如图(),由

16、 (65) (66) (67) 可得 (68) C 当时,的值和形心C的坐标也与上述一致。 2、 (图) 当 时,则 如图(),由 (69) (70) (71) C 当时,的值和形心C的坐标也与上述一致。 转轴公式: (

17、72) (73) (74) 综上可得: (75) (76) (77) 根据平行移轴公式: (78) (79) (80) (81) 即可得半圆形截面相对于直角坐标系的惯性矩、惯性积公式。

18、 (三) Matlab相关操作学习及研究过程 经过比较以及教师推荐选定Matlab的GUI色合计界面作为本软件的开发界面,充分利用MATLAB强大的计算及作图功能以及简便的界面设计构件。 前期自习了Matlab的常用语句,包括:常规运算,矩阵运算,定义函数,二维作图等。 之后开始自主学习GUI界面的设计及编程方法: 从界面排版开始,根据不同单元的不同用途在面板按照预期功能需要确立下主要的“数据导入”、“运算按钮”、“结果数值、图像显示”三个要素并进行分区。 通过视频学习与GUI相关的编码,设置“PushButton”、“Static Te

19、xt”、“Edit text”、“Axes”以及“Panel”来完成功能实现以及排版,期间深刻认识运用了“Tag”的含义,并自定义文字的格式控制。之后学习并使用了“文件调用”以及上述相关部分制作得初期成果。 三、 研究成果 (1) 按照格式在txt录入坐标数据 ,并保存。 (2)打开程序界面, (3)点击打开文件导入录入的txt文件 (4) 点击计算即可显示结果,其中蓝色星号即为形心 (五边形) (半圆形)

20、 (矩形) (T字型) (工字型) 四、 经费预算 开支科目 预算金费 (元) 主要用途 预计使用时间 1. 业务费 2400 (1)能源动力费 400 能源耗费 2014-08-01 至2015-05-31 (2)会议费 300 租用会议场所费用、会议资 料费、茶水费 2014-08-01 至2015-05-31 (3)

21、差旅费 500 会议注册费、交通费等 2014-08-01 至2015-05-31 (4)文献检索费 700 文献检索、复印、打印、网 络费等 2014-08-01 至2015-05-31 (5)论文出版费 500 论文版面费 2014-08-01 至2015-05-31 2.仪器设备购置费 0 3.材料费 600 购置进行试验需要的材料; 购置相关编程软件等 2014-08-01 至2015-05-31 4.企业注册费 0 预算经费总额 3000 附录 Matlab程序代码 funct

22、ion varargout = untitled(varargin) % UNTITLED M-file for untitled.fig % UNTITLED, by itself, creates a new UNTITLED or raises the existing % singleton*. % % H = UNTITLED returns the handle to a new UNTITLED or the handle to % the existing singleton*. % % UNTITLED('CA

23、LLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in UNTITLED.M with the given input arguments. % % UNTITLED('Property','Value',...) creates a new UNTITLED or raises the % existing singleton*. Starting from the left, property value pairs are %

24、 applied to the GUI before untitled_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to untitled_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only on

25、e % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Copyright 2002-2003 The MathWorks, Inc. % Edit the above text to modify the response to help untitled % Last Modified by GUIDE v2.5 23-Feb-2015 20:59:48 % Begin initialization code - DO NOT EDIT gui_Sin

26、gleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @untitled_OpeningFcn, ... 'gui_OutputFcn', @untitled_OutputFcn, ... 'gui_LayoutFcn', [] , ...

27、 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT

28、 EDIT % --- Executes just before untitled is made visible. function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles s

29、tructure with handles and user data (see GUIDATA) % varargin command line arguments to untitled (see VARARGIN) % Choose default command line output for untitled handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes untitled wait for user respons

30、e (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = untitled_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata

31、 reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObj

32、ect, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,pathname]=uigetfile(... {'*.txt','(*.txt)';... '*,*','ì

33、(*.*)'}, ... ''); if isequal(filename,0)||isequal(pathname,0) return; end % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be

34、 defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) if (get(handles.R1,'value')) A=get(handles.edit3,'string'); B=get(handles.edit4,'string'); a=str2num(A); b=str2num(B); Ix0=a^3*b/12; Iy0=b^3*a/12; Xba=b/2;

35、 Yba=a/2; c=num2str(Ix0); d=num2str(Iy0); e=num2str(Xba); f=num2str(Yba); QuaX=[0 0 b b 0]; QuaY=[0 a a 0 0]; plot(QuaX,QuaY,'r',Xba,Yba,'*'); set(handles.text4,'String',c); set(handles.text5,'String',d); set(handles.text17,'String',e); set(hand

36、les.text18,'String',f); elseif (get(handles.R2,'value')) A=get(handles.edit3,'string'); B=get(handles.edit4,'string'); X=get(handles.edit5,'string'); Y=get(handles.edit6,'string'); a=str2num(A); b=str2num(B); x=str2num(X); y=str2num(Y); E=[0 b b a a-x a;

37、 0 0 b a a-x a-x; y (b-y) (b-y) a-x 0 a-x; y y (b-y) a-x 0 0] n=4; for i=1:1:n x1=E(i,1); x2=E(i,2); x3=E(i,3); y1=E(i,4); y2=E(i,5); y3=E(i,6); delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]);

38、Sx(i)=delta(i)*(y1+y2+y3)/3; Sy(i)=delta(i)*(x1+x2+x3)/3; Ix(i)=delta(i)*(y1*y1+y2*y2+y3*y3+y1*y2+y2*y3+y1*y3)/6; Iy(i)=delta(i)*(x1*x1+x2*x2+x3*x3+x1*x2+x2*x3+x1*x3)/6; Ixy(i)=delta(i)*(2*(x1*y1+x2*y2+x3*y3)+x1*(y2+y3)+x2*(y1+y3)+x3*(y1+y2))/12; end for

39、 i=1:1:(n-1) j=1; SY=0; SX=0; Delta=0; Adelta=0; for j=1:1:(i+1) SY=SY+Sy(j); SX=SX+Sx(j); Delta=Delta+delta(j); Adelta=Adelta+abs(delta(j)); end

40、 Xba=(SY)/(Delta+eps); Yba=(SX)/(Delta+eps); IX=Ix(i)+Ix(i+1); IY=Iy(i)+Iy(i+1); IXY=Ixy(i)+Ixy(i+1); Ix(i+1)=IX; Iy(i+1)=IY; Ixy(i+1)=IXY; end IX=IX-Yba*Yba*(Delta); IY=IY-Xba*Xba*

41、Delta); Ix0=(IX+IY)/2+0.5*sqrt((IX-IY)^2+4*IXY*IXY); Iy0=(IX+IY)/2-0.5*sqrt((IY-IY)^2+4*IXY*IXY); c=num2str(Ix0); d=num2str(Iy0); e=num2str(Xba); f=num2str(-Yba); set(handles.text4,'String',c); set(handles.text5,'String',d); set(handles.text17,'String',e

42、); set(handles.text18,'String',f); E1=[0 b b (b-y) (b-y) y y 0 0]; E2=[0 0 -x -x -a -a -x -x 0]; plot(E1,E2,'b',Xba,-Yba,'*'); elseif (get(handles.R3,'value')) A=get(handles.edit3,'string'); B=get(handles.edit4,'string'); X=get(handles.edit5,'string'); Y=get(

43、handles.edit6,'string'); P=get(handles.edit7,'string'); O=get(handles.edit8,'string'); a=str2num(A); b=str2num(B); x=str2num(X); y=str2num(Y); p=str2num(P); o=str2num(O); E=[0 b b a a-x a; 0 0 b a a-x a-x; y (b-y) (b-y) a-x p a-x;

44、 y y (b-y) a-x p p; (y-o) (b-y+o) (b-y+o) p 0 p; (y-o) (y-o) (b-y+o) p 0 0]; n=6; for i=1:1:n x1=E(i,1); x2=E(i,2); x3=E(i,3); y1=E(i,4); y2=E(i,5); y3=E(i,6); delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]);

45、 Sx(i)=delta(i)*(y1+y2+y3)/3; Sy(i)=delta(i)*(x1+x2+x3)/3; Ix(i)=delta(i)*(y1*y1+y2*y2+y3*y3+y1*y2+y2*y3+y1*y3)/6; Iy(i)=delta(i)*(x1*x1+x2*x2+x3*x3+x1*x2+x2*x3+x1*x3)/6; Ixy(i)=delta(i)*(2*(x1*y1+x2*y2+x3*y3)+x1*(y2+y3)+x2*(y1+y3)+x3*(y1+y2))/12; end

46、 for i=1:1:(n-1) j=1; SY=0; SX=0; Delta=0; Adelta=0; for j=1:1:(i+1) SY=SY+Sy(j); SX=SX+Sx(j); Delta=Delta+delta(j); Adelta=Adelta+abs(delta(j));

47、 end Xba=(SY)/(Delta+eps); Yba=(SX)/(Delta+eps); IX=Ix(i)+Ix(i+1); IY=Iy(i)+Iy(i+1); IXY=Ixy(i)+Ixy(i+1); Ix(i+1)=IX; Iy(i+1)=IY; Ixy(i+1)=IXY; end IX=IX-Yba*Yba*(Delta); IY=IY-

48、Xba*Xba*(Delta); Ix0=(IX+IY)/2+0.5*sqrt((IX-IY)^2+4*IXY*IXY); Iy0=(IX+IY)/2-0.5*sqrt((IY-IY)^2+4*IXY*IXY); c=num2str(Ix0); d=num2str(Iy0); e=num2str(Xba); f=num2str(-Yba); set(handles.text4,'String',c); set(handles.text5,'String',d); set(handles.text17,'S

49、tring',e); set(handles.text18,'String',f); E1=[0 b b (b-y) (b-y) (b-y+o) (b-y+o) (y-o) (y-o) y y 0 0]; E2=[0 0 -x -x (-a+p) (-a+p) -a -a (-a+p) (-a+p) -x -x 0]; plot(E1,E2,'y',Xba,-Yba,'*'); else Sta=importdata('1.txt'); n=size(Sta,1); i=1; line(1)=0; halfc(1)=0; for i

50、1:1:n if Sta(i,1)==1 x1=Sta(i,2); x2=Sta(i,4); x3=Sta(i,6); y1=Sta(i,3); y2=Sta(i,5); y3=Sta(i,7); delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]); Sx(i)=delta(i)*(y1+y2+y3)/3; Sy(i)=delta(i)*(x1+x2+x3)/3; I

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服