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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4512377.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。

注意事项

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

c语言专业课程设计方案报告.doc

1、 上海应用技术学院 课 程 设 计 -第二学期 设计题目:日程管理 1.课程设计任务书 上海应用技术学院课程设计任务书 课程名称 程序设计语言课程设计 课程代码 B704010 设计题目 1. 算术练习 2. 个人收支管理 3. 通讯录 4. 成绩统计簿 5. 图书借阅管理 6. 日程表管理 题目序号 6 设计时间 7 月1 日—— 年 7 月 12日 系(院) 计算机和信息工程学院 专业 班级 一、 课程设计任务(条件)、具体技术参数(指标) 1. 在指

2、导书提供课程设计题目中选择一题或自选(但需经过指导老师认可) 2. 每个题目限一人完成,题目选定后不可更换。 3. 用户提供主操作界面应该方便用户操作。 4. 最终提交课程设计结果包含: a) 课程设计汇报电子稿。 c) 源程序文件。 d) 可实施程序文件。 二、 对课程设计结果要求(包含课程设计说明书、图纸、图表、实物等软硬件要求) 1. 分析课程设计题目标要求; 2. 写出具体设计说明; 3. 编写程序代码,调试程序使其能正确运行; 4. 设计完成软件要便于操作和使用,有整齐、美观使用界面; 5. 设计完成后提交课程设计汇报和源代码文件电子文档。 三、 课程设计工

3、作进度计划: 第一天 选择课程设计题目,分析课题要求,确定设计方案; 第二天 总体设计,模块划分 第三天绘制程序步骤图; 第四天 按功效模块编写具体设计说明; 第五天 编写程序代码 第六天 设计用户界面; 第七天运行和调试程序; 第八天写课程设计汇报; 第九天完成软件设计准备答辩 第十天 提交课程设计汇报;面试或答辩。 四、 关键参考资料 [1]谭浩强.C程序设计(第三版).北京:清华大学出版社, [2]谭浩强.C程序设计题解和上机指导(第三版).北京:清华大学出版社, [3] Herbert Schildt.C语言大全(第四版).北京:电子工业出版社,

4、 [4]Samuel P.Harbison Ⅲ,Guy L.Steele.C语言参考手册(第5版).北京:机械工业出版社, [5]程序设计语言课程设计指导书. 指导老师(署名): 教研室主任(署名): 7月1日 7 月 12日 目录: 1. 课程设计任务书**************2 2. 目标及要求******************6 2.1 课程设计目标 2.2

5、 课程设计要求 3. 课程设计内容说明************7 3.1.程序功效介绍 3.2程序设计整体设计说明 3.3数据结构设计 3.4程序结构设计 3.41程序子程序及功效设计 3.42函数关键调用关系图 3.43 各模块步骤图 4. 运行结果*******************17 5. 源程序代码分析*************31 6.课程设计感悟***************42 2.目标及要求 2.1 课程设计目标 本课程设计是计算机科学和技术专业关键实践性步骤之一,是在学生学习完《程序设计语言》课程后进行一次全方面综合练习

6、本课程设计目标和任务: 1) 巩固和加深学生对C语言课程基础知识了解和掌握; 2) 掌握C语言编程和程序调试基础技能; 3) 利用C语言进行基础软件设计; 4) 掌握书写程序设计说明文档能力 5) 提升利用C语言处理实际问题能力。 2.2 课程设计要求 1) 分析课程设计题目标要求; 2) 写出具体设计说明; 3) 编写程序代码,调试程序使其能正确运行; 4) 设计完成软件要便于操作和使用,有整齐、美观使用界面; 5) 设计完成后提交课程设计汇报和源代码文件电子文档。 3.课程设计内容说明 3.1.程序功效介绍 本系统关键功效是实现日程表管理,有添加日程,删

7、除日程,查询日程,显示日程,设置日程,修改日程,日程排序,读取日程,保留日程功效。每个日程信息包含:日程时间,日程名称,日程详情,日程提醒,日程标识。 3.2程序设计整体设计说明 本系统主函数是整个程序关键,子函数之间也是有联络,对日程删除,查询,显示,修改,保留,必需是在添加了日程,或读取了日程情况下进行。部分基础操作在子函数中数次反复使用,即可单独设定函数,数次调用即可。 运行程序 开始后进入主菜单,用户即可选择选择要进行操作,比如,1为添加日程,用户需输入对应信息。选择2为删除日程,根据日期或名称选中对应日程后,能够删除日程或日程设置。等等功效。当选择不存在时提醒用户选择错误并

8、提醒重新选择。 3.3题目要求 3.31. 设计要求 基础功效: 添加日程信息; 删除日程信息; 查询管理; 设置管理; 拓展功效: 日程信息修改; 设置修改; 设置删除; 创新(自拟)功效: 程序实现其它功效由个人自拟。 3.32. 设计要求具体说明 添加日程信息: 需要输入日期、时间及相关事件名称,并提醒是否有时间冲突。 删除日程信息: 需要输入日期、时间后,显示相关事件名称,由用户确定是否删除。 查询功效: a) 查询提前提醒事件,即提醒将要发生日程信息; b) 查询某天日程信息。对已经过去和将要发生

9、事件要区分显示。 设置功效: a) 能够设置提前提醒时间。 b) 日程信息需写入文件,文件建立自我定义。 c) 输入日期、时间要进行合理性检验。 d) 设置提前提醒时间,并进行合理性检验。 拓展功效: a) 能进行日程表信息修改; b) 设置信息修改、删除。 3.33. 提醒: 定义适宜结构体类型,使用链表或数组方法组织数据。 3.4数据结构设计 本系统包含数据结构有: struct Date_time //定义时间结构体; {int year; int month; int day; int hour;

10、 int min; }; struct richeng //定义日程结构体; { struct Date_time date; struct Date_time remind_date; char name[100]; char detail[200]; struct richeng *next; }; 3.5程序结构设计 3.51程序子程序及功效设计 int main() //主函数 char Menu();

11、//显示菜单 int runnian(int year); //判定是否闰年 int time_panduan(struct Date_time time); //检验输入时间是否正当 int date_panduan(int year,int month,int day); //检验输入日期是否正当 struct richeng * select_name_program(); //根据名称选择日程 void show(struct richeng *p); //显示指针指向日程信息 void set_rem

12、ind_program(struct richeng *p) ; //设置日程提醒时间 struct richeng * select_program(); //选择日程 void add (); //添加日程 void delet_zhiding_richeng(struct richeng *p); //删除指定日程 void delet(); //删除日程 void search_zhiding_richeng(char name[100]); //按名称查询指定日程 void search();

13、 //查询日程 void xiugai(); //修改事日程信息 void read(); //读取日程文件 void write(); // 写入日程文件 3.52函数关键调用关系图 3.53 各模块步骤图 l 添加日程 l 删除日程 l 查询日程 l 显示日程 l 修改程序 l 读取日程 l 保

14、留日程 4.运行结果 1.点击运行,出现以下界面,可依据提醒,选择菜单,进行相关操作; 添加日程功效 2.选择菜单,输入1,进入添加日程功效,第一步:提醒输入日程时间,第二步:提醒输入日程名称,第三步:提醒输入日程具体内容。第四步:进入设置界面,提醒设置日程提醒时间。输入完成后回车,日程添加功效就完成了。 注意:在这个功效里,对于时间和日期正当性全部有检验,假如输入时间有错误,那么就会自动提醒输入不正确,请重新输入。 保留日程功效 3.完成菜单一添加日程功效后,按回车键返回主菜单,然后选择6,进入保留日程功效,选择6后,点击回车,界面提醒“ 保留成功”,这时日

15、程保留就完成了,日程就保留在了“我日程.txt”,文本文档里了。我们就完成了对日程写入保留功效。 文件读取功效 4.完成日程保留写入功效以后,就会自动返回主菜单,选择5,进入文件读取功效,点击回车,屏幕上会显示已保留日程全部信息,包含日程日期,日程名称,具体信息,提醒时间; 进入查询日程功效 5.完成读文件功效以后,点击回车,回到主菜单就能够选择其它功效进行操作,比如选择3,进入查询日程功效,界面自动提醒:1.查询指定日程,2.退出操作,选择1,查询指定日程,提醒输入查询日程名称 。输入要查询日程名称后,相关这条日程具体信息就会显示。然后选择0,退出查询功效,返回主界面。

16、 注意;假如输入日程名称不正确,系统会自动提醒,查找日程不存在。 修改功效 6.返回主菜单后选择4,进入日程修改功效,然后提醒输入要修改日程名称,输入名称,进入修改界面,1.修改日程时间,2.修改日程名称,3.修改日程详情,4.修改日程提醒时间, 0.退出。选择要修改内容,如选择4修改日程提醒时间,回车后,输入新提醒时间,回车,选择0完成,回车,返回主菜单,然后选择6保留日程,再选择5,读取日程,界面就显示修改后新日程新信息了,这么话,修改就成功了。 删除功效 6. 完成修改功效后,回车进入主菜单,选择2,进入删除功效,输入要删除日程名称,回车进入删除界面,选

17、择1,确定删除,删除后,界面显示删除成功 。并返回主菜单。选择6,保留删除,选择5,读取日程,就看不到刚刚删除那条日程信息了。 5. 源程序代码: #include #include //stdlib 头文件里包含了C语言部分函数 #include //字符串头文件 #define A sizeof(struct richeng) //宏定义 就是在程序编译前,用sizeof(struct richeng) 替换A

18、 struct Date_time //定义时间结构体; {int year; int month; int day; int hour; int min; }; struct richeng //定义日程结构体; { struct Date_time date; //包含了时间结构体 struct Date_time remind_date; //提醒时间 char name[100]; ch

19、ar detail[200]; struct richeng *next; }*head=NULL,*p0= NULL; //*head指向开头,*p0指向末尾 char set[20]; char Menu(); //显示菜单 int runnian(int year); //判定是否闰年 int time_panduan(struct Date_time time); //检验输入时间是否正确 int date_panduan(int year,int month,i

20、nt day); //检验输入日期是否正确 void show(struct richeng *p); //显示指针指向日程事件信息 struct richeng * select_name_program(); //按名称选择日程 struct richeng * select_program(); //选择日程 void set_remind_program(struct richeng *p) ; //设置日程提醒日期 void add (); //添加日程 void delet_zhiding_richeng(struc

21、t richeng *p); //删除指定日程 void delet(); //删除日程 void search_zhiding_richeng(char name[100]); //查询指定日程,按名称查询 void search(); //查询日程 void xiugai(); //修改事日程 void read(); //读取日程 void write(); // 写入文件 int main() //主函数 { struct richeng *p;

22、 //定义了结构体日程指针 char x; char filename[100]; do { x=Menu(); switch(x) { case'0': printf("\n*****谢谢使用*****\n\n"); break; case'1': add(); break; case'2': delet(); break; case'3': search(); break; case'4': xiugai(

23、); break; case'5': read(); break; case'6': write(); break; default: printf("菜单选择错误!请重新选择!"); } }while(x != '0'); return 0; } char Menu() //显示菜单 ; { char x[10]; printf("\n**************¥¥¥¥欢迎使用日程表系统¥¥¥¥*******

24、\n"); printf(" 1)添加日程\n"); printf(" 2)删除日程\n"); printf(" 3)查询日程\n"); printf(" 4)修改日程\n"); printf(" 5)读取日程\n"); printf(" 6)保留日程\n"); printf(" 0)退出操作\n"); printf("**********************************************************\n\n"); printf("请选择菜单序号0-6:"); gets(x

25、); return x[0]; } void add () //添加日程 ; { struct richeng *p; struct Date_time time; char RC_name[50]; char RC_detail[100]; do { printf("请输入日程日期,时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%2d",&time.year,&time.month,&time.day,&time.hour,&time.min); }whil

26、e(time_panduan(time)==0); //输入日程时间 printf("日程名称(100个字符以内):\n"); scanf("%s",RC_name); //输入日程名称 printf("具体描述 (200个字符以内):\n"); scanf("%s",RC_detail); //输入日程具体信息 p=(struct richeng * )malloc(A); //Malloc 向系统申请分配指定size个字节内存空间 strcpy((*p).name, RC_name)

27、 strcpy((*p).detail, RC_detail); (*p).date.year = time.year; //赋值 (*p).date.month = time.month; (*p).date.day = time.day; (*p).date.hour = time.hour; (*p).date.min = time.min; printf("添加日程设置\n"); //添加日程同时是否添加日程设置 set_remind_program(p);

28、 //调用设置日程提醒时间函数 if(head == NULL) //寻求插入位置,新添加日程插到后面 { head = p0 = p; p0->next = NULL; } else { p0->next = p; p0 = p; p0->next = NULL; //p0一直指向最终一个数据 } printf("\n-----------------------按回车键返回-----------------------\n"); } int runnian(in

29、t year) //判定闰年; { int RN=0; if( (year % 4 == 0 && year%100 != 0) || ( year % 400 == 0 ) ) RN=1; else RN=0; return RN; } int time_panduan(struct Date_time time) //检验输入时间是否正确 { int Y=1; int day_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if( runni

30、an(time.year) == 1) { day_of_month[1]=29; } if(time.year > 9999 || time.year <= 0) Y=0; if(time.month > 12 || time.month <= 0) Y=0; if(time.day>day_of_month[time.month-1] || time.day <= 0) Y=0; if(time.hour > 24 || time.hour < 0 ) Y=0; if(time.min > 60 || tim

31、e.min < 0 ) Y=0; if(Y== 0) printf("输入错误!\n"); return Y; } int date_panduan(int year,int month,int day) //检验输入日期是否正确 { int Y= 1; int day_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if(runnian(year)==1) { day_of_month[1]=29; } if(year > 9999 || year <=

32、 0) Y=0; if(month > 12 || month <= 0) Y=0; if(day>day_of_month[month-1] || day <= 0) Y=0; if(Y== 0) printf("输入错误!\n"); return Y; } void set_remind_program(struct richeng *p) //设置日程提醒日期 { do { printf("请输入日程提醒时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%d",

33、 &p->remind_date.year,&p->remind_date.month,&p->remind_date.day, &p->remind_date.hour,&p->remind_date.min); getchar(); }while(time_panduan(p->remind_date) == 0); //对输入时间进行判定 } void delet () //删除日程 { struct richeng *p; p=select_program(); //调

34、用选择日程函数 if( p == NULL) { return; } getchar(); delet_zhiding_richeng(p); //调用删除指定日程函数 } void delet_zhiding_richeng(struct richeng *p) //删除指定日程 { struct richeng *p_s; struct richeng *p_l; int s = 0; int sure = 0; p_s = p_l = head; while( p_s != NULL

35、 //指针不为空 && ( strcmp(p_s->name,p->name) != 0 || p_s->date.year != p->date.year || p_s->date.month != p->date.month || p_s->date.day != p->date.day || p_s->date.hour != p->date.hour || p_s->date.min != p->date.min ) ) {

36、 p_l = p_s; p_s =p_s->next; //p_s指向指定日程,p_l指向此日程上一个 } //删除此日程事件 printf("确定删除?:\n"); printf("1.删除\n"); scanf("%d",&sure); getchar(); if(sure == 1) { if(p_s == head && p_s != NULL) head=p_s->next; else if(p_s != NULL)

37、 p_l->next = p_s->next; } printf("删除成功\n"); } struct richeng * select_program() //选择日程 { struct Date_time time; struct richeng *p,*p1; char select_event[50]; int sel =0; p=select_name_program(); return(p); //返回指向选中日程指针 } struct richeng * select_name

38、program() //按名称选择日程 { struct richeng *p; char select_event[50]; int i=0; printf("\n请输入日程名称:"); scanf("%s",select_event); p=head; printf("\n请确定日程信息:\n"); while( p !=NULL && strcmp(p->name,select_event) != 0) p=p->next; if(p == NULL) //假如没有找到指定日程 { pr

39、intf("\n*****没有找到日程*****\n"); getchar(); return NULL; } show(p); return p; } void show(struct richeng *p) //显示指针指向日程事件信息 { struct tm *newtime; printf("$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("*日程名称:%s\n",(*p).name); printf("*日程时间:%-4d-%-2d-%-2d %-d:%-2d\n", (*p).

40、date.year, (*p).date.month, (*p).date.day, (*p).date.hour, (*p).date.min); printf("*日程详情:%s\n",p->detail); printf("*提醒时间:%-4d-%-2d-%-2d %-d:%-2d\n", (*p).remind_date.year, (*p).remind_date.month, (*p).remind_date.day, (*p).remind_date.hour, (*p)

41、remind_date.min ); printf("\n"); } void search() //查询日程 { struct Date_time time; char RC_name[50]; int X =0; do { printf("\n请选择:\n"); printf("1.查询指定日程\n"); printf("0.退出操作:\n"); scanf("%d",&X); getchar(); switch(X) { case 0: break; case

42、1: printf("请输入事件名称:"); scanf("%s",RC_name); getchar(); search_zhiding_richeng(RC_name); break; default: printf("\n选择错误!\n\n"); } }while( X!= 0); } void search_zhiding_richeng(char name[50]) //查询指定日程,按名称查询 { struct richeng *p,*p_event; p=head;

43、 p_event = NULL; printf("\n******查询日程信息以下******\n\n"); while(p != NULL) { if(strcmp((*p).name, name) == 0) { p_event = p; show(p); } p = (*p).next; } //假如一直没有找到指定日程 if(p_event == NULL) { printf("\n*****无查询日程*****\n"); } } void xiug

44、ai() { struct richeng *p; struct Date_time time; struct Date_time remind_time; char RC_name[100]; char RC_detail[200]; int s = 0; p=select_program(); //选中日程事件 if( p == NULL) { printf("\n*****无查找信息*****\n"); getchar(); return; } do { printf("\n**请选择要修改项目

45、\n"); printf("1.修改日程时间\n"); printf("2.修改日程名称\n"); printf("3.修改日程详情\n"); printf("4.修改日程提醒\n"); printf("0.完成\n"); scanf("%d",&s); getchar(); switch(s) { case 0: break; case 1: //输入日程时间 printf("请输入日程日期,时间(年-月-日 时:分):\n"); scanf("%d-%d-%d %d:%d"

46、 &time.year,&time.month,&time.day,&time.hour,&time.min); (*p).date.year = time.year; (*p).date.month = time.month; (*p).date.day = time.day; (*p).date.hour = time.hour; (*p).date.min = time.min; break; case 2: //输入日程名称 printf("日程事件名称(10

47、0个字符以内):\n"); scanf("%s",RC_name); strcpy((*p).name, RC_name); break; case 3: //输入日程详情 printf("具体描述 (200个字符以内:)\n"); scanf("%s",RC_detail); strcpy((*p).detail, RC_detail); break; case 4: //输入提醒时间 printf("提醒日程日期,时间(年-月-日 时:分):\n");

48、 scanf("%d-%d-%d %d:%d", &remind_time.year, &remind_time.month, &remind_time.day, &remind_time.hour, &remind_time.min); (*p).remind_date.year = remind_time.year; (*p).remind_date.month = remind_time.month; (*p).remind_date.day = remind_t

49、ime.day; (*p).remind_date.hour = remind_time.hour; (*p).remind_date.min = remind_time.min; break; default: printf("\n菜单选择错误!请重新选择!\n"); } }while( s != 0); } void read() { struct richeng *p; FILE *fp; fp = fopen("我日程.txt","rb"); if(fp == NULL) {

50、 printf("\n文件无法打开!\n"); exit (0); } head = NULL; printf("\n*****读取信息以下*****\n\n"); while(!feof(fp)) //指向文件末尾 { p=(struct richeng *) malloc(A); if(fread(p,A,1,fp) != 1) //用sizeof(struct richeng) 替换A break; show(p); if(head == NULL)

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

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

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

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

gongan.png浙公网安备33021202000488号   

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

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

客服