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

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

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

注意事项

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

软件课程设计--C语言.docx

1、软件课程设计C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题目:火车订票系统小组成员:指导教师:完成时间:一.需求设计:1. 每条线路所涉及的信息有:起点、终点、站名、车次、票价、时间、座位号。2. 作为示意系统,全部数据可以只放在内存中。3. 系统能实现的功能和操作如下: .查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。 .承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客广办理订 票手续,输出座位号:若巳满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排 队候补。 .承办退票业务:根据客户提供的情况(车次、时间、

2、座位号)为客户办理退票手续,然后查 询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办 理订票手续,否则依次询问其他排队候补的客户。 登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。 统计功能:将每次车的订票,退票结果统计出来。 管理功能:列车管理员可以通过调用函数来查看车票极其用户情况. .查询功能:用户可以查询自己需要的车辆信息.二.总体设计1.程序流程图:是否是需要的车次 是While循环是否已到头指针否是否是需要的车站名是输出所需的信息是是错误移动指针否否程序代码:void inquire。struct ticket *p;struct

3、station *q;int t;in+ *o *s;printffplease enter the number:); scanf(”d”,&f);/*输入需要的车次*/printfCplease enter the station:*);scanf(%d,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/while(p=!null)if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给o*/while(q-next=!headl)if(q-name=h)s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p

4、=p-next;/*横向链表移针*/printf(,%d,;,%d,;%d,/o-nurn/o-nurn2,o-time); /*输出横向链表的数据*/printf(%s,%d,%d,%d,“%d”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first;功能说明:本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查 找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本 车次的所有信息.4. Cancel()函数: 程序流程图:输入需要的车次号输入需要

5、到达的车站名While循环是否需要的车次横向结点值给。While循环是否是需要的车站名是使mark的值为0纵向结点值给s纵向链表移针横向链表移针当横向链表卜一个指针为空时输出s点的数据输出。点的数据程序代码;void cancel()struct ticket *p;struct station *q;int t;int *o *s;printfCplease enter the number*:); scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t; /*初始化p的

6、值*/while(p =!null)if(p-number=t)(q=p-down;0=p;/*把符合条件的横向链表结点的数据给0*/while(q-next=!headl)if(q-name=h)(q-mark=0; /*修改 mark 标记*/s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already cancel!);pintf(”d”,“d“,”d”,o-num,o-num2,otime); /*输出横向链表的数据*/ printf(%s,“d,%d,%d,“%d

7、”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first;功能说明:本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向 链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标 识是其为0.最后输出所有关于本车次的所有信息.5. you。函数: 程序代码:void you()struct you *head;struct you *p;p=(struct you *)malloc(len);scanf(%d,&p-name,&p-num,&p-numl,

8、&p-fime,&p-timel);goto First; 用户查询代码:(注:本函数用于管理人员查询用户)void find()struct you *head;struct you *p;int u;scanf(%d,&u);while(p=!null)if(p-num=u)s=p;)p=p-next; 功能说明:本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因 此未在用户界面上显示出来.6. 统计模块:void total() int *p*q;int n;P”;while(p=!null)(while(q-next=!headl)if (mark= 1)(

9、n=n+l;)q=q-next;p=p-next;printffthe number of the booked ticket are :, printf(%d,n);6.所用变量声明: 横向链表结点的结构体:struct ticketint num;int numl;int time;struct ticket *next;struct station *down;;int t;纵向链表结点的结构体:struct stationint name;int time;int money;int mark;struct station *next; 用户信息链表结点的结构体:struct you(

10、int name;int num;int numl;int time;int timel;struct you *next;四.程序说明书:木系统用于火车站的车票管理.主要方便用户订票,也可方便管理人员管理车票.当用户看到 用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进 行.完成后,程序会显示您己经成功的订票或退票.完成后程序会自动回到起始位置.管理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况.具体说明:1. 提示程序操作者输入预设的数据.2. 提示用户进行订票操作.3. 提示用户进行查询自己需要的车票的操作.4. 提示用户进行退票操作

11、.5. 提示用户输入自己的相关信息./L.程序调试:本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用来实现.组员在各自的 编制和调试中基本都实现所需的功能.但在联调的过程中,由于我们使用了大量的传递指针形的函 数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以让我们遗憾的是联调并 没有成功.我们也会吸取教训,在函数编制时注意数值的传递.六.运行结果: 输入:2K717,Beijing,11:00yuci,12:00,10,0,56yangyuan】:00,20,0,56Shijiazhuang,2:00,30,56输入:k717Shijiazhuang输出:you

12、 have already booked the ticket!K717,shijiazhuang,ll:00,3:00,30,56七.程序源代码:#include #include #define null 0#define len sizeof(struct ticket)struct ticket(int num;int numl;int time;struct ticket *next;struct station *down;):int t;struct station/*公共变量声明*/(int name;int time;int money;int mark;struct sta

13、tion *next;struct you(int name;int num;int numl;int time;int timel;struct you *next;struct ticket *in()struct ticket *in()/* 一个返回指针形的函数*/struct ticket *head;/*头结点*/struct ticket *pl *p2;struct station *sl *s2;int m,n;int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*7scanf(”d”,&m);/*输入一共所需的车票信息

14、总数*/scanf(%d,&n);/*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=pl;P2印1;pl二(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/headl=sl=s2;pl-down=sl=s2;/*指向纵向链表的头结点*/scanf(”dL”d”,”d”,&pl-num,&pl-num2,&pl-time); /*输入横向链表的数据*/ for i=0;inext=s2;s2=sl;sl=(struct ticket )*malloc(le

15、n);/*建立纵向链表*/scanf(%s,%d,%d,%d,%d”,sl-name,&sl-time,&sl-money,&sl-seat,&sl-mark);/*输入纵向链表的数据*/sl-next=headl; /*纵向链表为循环链表*/按1键按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2.总体设计说明:.数据结构设计:程序二数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信 息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下 一个结点的指

16、针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次 到站,票价,到达时间,是否己被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0 时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排 在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的 车次,起始站,要到的站,时间.己经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号 码,已购车票的车次,出发时间,到达时间.车票

17、信息链表示意图:车次起始站发车时间downn nextp2-next=null;return(head);/*返回头指针*/goto first;/*返回头指针*/void book()(struct ticket *p;struct station *q;int t;int *o *s;printf(please enter the number:);scanf(%d,&f);/*输入需要的车次*/printf(please enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/while(p=!null)if(p-numb

18、er=t)(q=p-down;o=p; /*把符合条件的横向锥表结点的数据给0*/while(q-next=!headl)(if(q-name=h)(if (q-mark=l)printfCyour ticket is unused);elseq-mark=l;/*修改 mark 标记*/s=q:s=q:/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already booked!);printfC,%d,/%d,7,%d,o-num/o-num2/o-time); /*输出横向链表

19、的数据*/ printf(%s,%d,%d,%d,“%d,s-nQme,&s-汁 ime,&s-money,&s-seat,&s-mark); /* 输 出纵向链表的数据*/goto first;void inquire()struct ticket *p;struct station *q;int t;int *o *s;printffplease enter the number;);scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/while

20、(p=!null)(if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给。*/while(q-next=!headl)if(q-name=h)s=q:/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printf(”d“,“d“,”d”,o-num,o-num2,o-time); /*输出横向链表的数据*/printf(%s;*%d,%d,%d*7%dwname,&stime,&smoney,&sseat,&smQrk); /* 输出纵向链表的数据*/goto first;void canc

21、el()(struct ticket *p;struct station *q;int t;int *o *s;printffplease enter the number:); scanf(%d,&f);/*输入需要的车次*/printffplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给0*/while(q-next=!headl)(if(q-name = h)(q-mark=0; /*修改 mark 标记*/s=

22、q;/*把符合条件的纵向链表的数据给s*/q=q-next; /*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already cancel!);printf(,%d,;,%d;%d,/o-num/o-num2,o-time); /*输出横向链表的数据*/ printf(%s,%d,%d,%d,“%d”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输出纵向链表的数据*/goto first;void you()struct you *head;struct you *p;p=(struct you

23、 *)malloc(len);scanf(%cr,&p-name,&p-num,&p-numl,&p-fime,&p-timel);goto First;void find() struct you *head; struct you *p;int u;scanfC%dw,&u); while(p=!null)if(p-num=u)s=p;)p=p-next;void total()int *p,*q;int n;Pfwhile(p =!null)(while(q-next=!headl)(if (mark=l)(n=n+l;)q=q-next;p=p-next; printffthe num

24、ber of the booked ticket are :M); printfC%dn);Main()(int *t;int c;First: printffwelcome to our ticket system!nH);printfCl.intput the data.nM); /*按 1 键输入数据*/ printfC2.book the ticket.n);/*按 2 键订车票*/printf(n3.inquire the ticketAn); /*按 3 键查询车票*/ printfC4.cancel the ticket.nH);/*按 4 键退车票*/printf(H5.inp

25、ut your own data.nn); /*按 5 谜输入个人信息*/ scanf(%d,&c);switch(c)(case T: t=in(); break;case 2: book(); break;case 3: inquire。; break;case 4: cancel(); break;case 5: you() ; break;default : printfCyou enter an error numbernM);)八.结束语:课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能 力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以

26、后从事计算机方面的工作奠定 了基础。通过两周的学习,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交 流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。在对所学的有限知识的理 解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。但因为对专业知识没 有很深的认识,所以其中难免有一些是错误的或者是不合理的,希望老师多指教。在课程设计的过程中,老师的指导对我起了非常大的帮助,在此表示感谢,谢谢各位老师的辛勤 工作!更多内容:C+Pimer第四版部分习题解答麻省理工算法导论翻译浙江大学ACM试题解答(四月)浙江大学ACM试题解答(三月)华容道游戏与算法中国

27、象棋对战程序C语言源代码三维建筑物图像的二维建模分段线性骨架基于图论的图像分割技术Linux文件系统分层模型汉语编程企业管理应用软件可行性研究报告汉语编程企业管理应用软件需求说明书计算机专业操作系统课程设计报告软件可行性报告软件需求分析报告两种计算Ack(m,n)的非递归算法浙江大学计算机复试解答1浙江大学计算机复试解答2浙江大学计算机复试解答3Trackback: http:下一站名到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中己购票用户信息链表示意图:用户姓名身份证号码已购车票的

28、车次号出发时间 到达时间注:座位号包含在车次号中算法的设计:主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函 数,实现相应的功能。在主函数开始处做下First标识,以便在其他函数中使用9oto ig句返回 主函数的用户界面。In()函数:In()函数负责输入各种信息,链表中车票信息的初始值.Book。函数:Book。函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark 值.Inquire。函数:Inquire。函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.Cancel。函数:Cancel()函数主要负责退票功能

29、.主要是遍历整个链表查找到需要的结点,然后修改 mark的值.you。函数:you()函数主要负责输入用户信息,主要是创建-个单链表,将用户信息放入.并提供管 理人员的查询功能.Find。函数:Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息.TotalQ 函数:Total()函数主要负责统计整个订票系统的情况.三.详细设计:1. 主函数: 程序代码:Main()(int *t;int c;First: printfCwelcome to our ticket system!nH);printfCl.intput the data.); /*按 1 键输入数据*/ pri

30、ntf(tt2.book the ticket.nH);/*按 2 键订车票*/printfC3.inquire the ticket.nH); /*按 3 键查询车票*/ printfC4.cancel the ticketAn);/*按 4 键退车票*/printf(5.input your own data.n); /*按 5 键输入个人信息*/ scanf(%d,&c);switch(c)(case T: t=in(); break;case 2: book(); break;case 3: inquire。; break;case 4: cancel(); break;case 5:

31、 you() ; break;default : printffyou enter an error numbern); 功能说明:通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入 实现该功能函数完成用户所需要的功能.2. In()函数:程序流程图:建立横向链表头结点输入m,n的值For循环,m是否为0建立结点 向结点输入数据For循环,n是否为0否建立纵向结点向结点输入数据是返回头指针Goto到用户界面程序代码:struct ticket *in()/*一个返回指针形的函数*/(struct ticket *head; /*头结点*/struct

32、 ticket *pl *p2;struct station *sl *s2;int m,n;int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/ scanf(”d”,&m);/*输入一共所需的车票信息总数*/scanf(%d,&n);/*输入从始发站到终点站共有几站*/head=null;for(i=0;inext=pl;P2=pl;pl=(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/ headl=sl=s2;pl-dow

33、n=sl=s2;/*指向纵向链表的头结点*/scanf(”d”,”d”,”d“,&pl-num,&pl-num2,&pl-time); /*输入横向链表的数据*/ for(i=0;inext=s2;s2=sl;sl=(struct ticket )*malloc(len); /*建立纵向链表*/scanf(%s,%d,%d%d,“%d,sl-name,&sl-time,&sl-money,&sl-seat,&sl-mark);/*输入纵向链表的数据*/sl-next=headl; /*纵向链表为循环链表*7p2-next=null;return(head);/* 返回头指针*/goto fir

34、st;/*返回头指针*/功能说明:通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3. Book ()函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给。While循环是否是需要的车站名是 使mark的值为1纵向结点值给s 纵向链表移针横向链表移针当横向链表下一个指针为空时输出S点的数据输出。点的数据Mark是否为1错误否是程序代码:void book()(struct ticket *p;struct station *q;int t;int

35、 *o *s;printfCplease enter the number:);scanf(%d,&f);/*输入需要的车次*/printfCplease enter the station:);scanf(%d,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null)if(p-number=t)(q=p-down;o=p;/*把符合条件的横向链表结点的数据给0*/while(q-next=!headl) if(q-name=h)(if (q-mark=l)printfCyour ticket is unused);elseq-mark=l;/*修改 ma

36、rk 标记*/s=q;/*把符合条件的纵向链表的数据给s*/q=q-next;/*纵向链表移针*/p=p-next;/*横向链表移针*/printfCyour ticket has already booked!);printfC,%d,;,%d;%d,/o-num/o-num2,o-time); /*输出横向链表的数据*/printf(%s,%d,%d,%d,%d”,s-name,&s-time,&s-money,&s-seat,&s-mak); /* 输 出纵向链表的数据*/goto first; 功能说明:本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为己定车票.如果mark己经为1则 输出错误信息.3.inquire。函数:程序流程图:输入需要的车次号输入需要到达的车站名While循环是否已到空

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

关于我们      便捷服务       自信AI       AI导航        获赠5币

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

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

gongan.png浙公网安备33021202000488号   

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

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服