分享
分销 收藏 举报 申诉 / 39
播放页_导航下方通栏广告

类型校园导游服务咨询系统C++(含源代码)说明指导书.doc

  • 上传人:精****
  • 文档编号:2741669
  • 上传时间:2024-06-05
  • 格式:DOC
  • 页数:39
  • 大小:203.54KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    校园 导游 服务 咨询 系统 源代码 说明 指导书
    资源描述:
    计算机科学与技术教研室 课程设计阐明书 (-第1学期) 课程名称 算法与数据构造课程设计 设计题目 校园附近门店服务查询系统 学号 姓名 小构成员 起止时间: 1 月 日至 年 1 月 日 课程设计 评语 在为期两周课程设计中,该生准时到课,课堂体现良好,参加了课程设计整个过程,实现了校园附近门店服务查询系统如下功能:对某一门店服务信息位置进行添加、查询、修改和删除,并可查找两门店之间最短途径。其课程设计阐明书填写对的,条理清晰,对于课程设计过程简介详细,代码对的,可见对于数据构造程序有了一定独立编程能力并且对课本知识掌握较纯熟。作品演示较纯熟,能按照设计规定完毕指定功能且能加入某些自己想法。答辩过程中回答问题较流利,对数据构造程序掌握纯熟。 平时成绩 报告成绩 演示与答辩成绩 成绩总评 指引教师 (签字) 年月日 注:成绩均用百分制。总成绩=平时成绩*20%+报告成绩*40%+演示与答辩成绩*40% 设计题目:校园附近门店服务查询系统 1、课程设计目 (1)数据构造课程设计是综合运用数据构造课程中学到几种典型数据构造,以及程序设计语言(C++语言),自行实现一种较为完整应用系统。 (2)通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计办法和环节,灵活运用并深刻理解典型数据构造在软件开发中应用。 (3)学会将知识应用于实际办法,提高分析和解决问题能力,增长综合能力。 1)纯熟掌握链表存储构造及其建立过程和惯用操作; 2)学会自己调试程序办法并掌握一定技巧; 3)通过温习旧知识,学习新知识,并提高分析和解决问题能力。 2、课程设计正文 2.1概要设计 2.1.1 系统分析 该系统重要功能涉及:增添服务信息、查询服务信息、修改服务信息、删除服务信息以及推荐途径等。 1.主程序模块:连接各种功能子模块,使用循环等待顾客操作,完毕程序基本操作实现功能。 2.菜单显示模块:生成每个菜单显示界面,使程序更简朴清晰。 3.查询服务信息:顾客在选取此功能模块后,按照屏幕上方提示服务信息名称及其相应编号,规定顾客输入想要查询服务信息编号,回车后系统将在已存储服务信息中进行匹配,若该景点信息尚未存储则将提示错误;若找到相应信息则系统将输出服务信息,显示于幕上方。 4.查询两服务信息最短途径:运用弗洛伊德算法,顾客在选取此功能模块后,按照屏幕上方提示服务信息名称及其相应编号,规定顾客输入起点和终点编号,系统将在已存储景点中进行匹配,若未找到所需查询服务信息编号,系统将提示错误并规定顾客再次输入。若输入信息合法,则回车后系统将给出最短途径,显示于屏幕上方。 5.删除服务信息:顾客操作功能模块,由主程序直接调用函数模块,将功能具象化,系统工具函数模块,先查找到所存在服务信息,然后对顾客但愿删除服务信息进行删除操作,若所要删除服务信息不存在,则输出不存在此服务信息。 2.1.2系统构造图 系统要实现功能:1、增添服务信息;2、修改服务信息;3查询服务信息;4、查询两服务信息之间最短途径;5、删除服务信息;6、退出系统。 校园服务信息管理系统 系统构造图如图1 修改服务信息 删除服务信息 查询服务信息 增添服务信息 退出系统 查询最短途径 图1系统构造图 2.2详细设计 2.2.1数据类型定义 #include<stdio.h> #include<iostream> #include<stdlib.h> #include<string.h> #define N 100 //服务信息个数最大100 #define Road 1000 //定义途径为1000 intNum=9; //当前服务信息个数 using namespace std; typedefstructElemtype { char name[30]; char number[10]; char introduce[200]; }Elemtype; typedefstruct Place { intnum; //位置序号 Place *next; Elemtype date; //服务信息信息 }Place; //定义服务信息 2.2.2 存储构造: h D1 D2 D3 单链表如下: 图2单链表 数据域 指针域 每个结点包括数据域和指针域: 图3结点图 2.2.3 函数声明 (1)服务信息查询函数 函数名:void find(Place *&head) 操作成果:查找需要服务信息 分析:输入所要查找服务信息编号,为链表建立一种附加表头结点,将p付给表头指针;同步判断输入字符串与否满足条件;用if语句判断与否输入完毕。 (2)服务信息增添函数 函数名:void add(Place *&head) 操作成果:增长新服务信息 分析:运用指针p指向Place *&head构造体,增长服务信息位置、编号、名称等信息将p赋给表头指针,初始化count为0,用循环语句遍历进行保存。 (3)服务信息修改函数 函数名:void replace(Place *&head) 操作成果:对原有服务信息进行修改 分析:使用while与for语句遍历链表,对已经存在服务信息进行修改并保存。 (4)服务信息删除函数 函数名:void deleted(Place *&head) 操作成果:删除已经不存在服务信息 分析:用for与if语句,找到所要删除字符串,用while语句删除已经不存在服务信息。 (5)求两服务信息之间最短途径函数 函数名:intshortdistance(Place *head) 操作成果:查找两个服务信息之间最短途径 分析:运用弗洛伊德算法,写出函数,再运用函数计算出两个服务信息之间最短途径并输出运算成果。 (7)主菜单控制函数 函数名:void menu() 操作成果: 显示如下几种菜单:1) 查询服务信息;2) 修改服务信息;3) 增长服务信息;4) 除服务信息;5)途径搜索;6) 退出系统; 2.2.4函数流程图 系统流程图如图4 开始 初始化 写入服务信息信息 Case 1 Case 2 Case 3 查询服务 途径搜索 T T F F T end F 删除服务 图4系统流程图 2.2.5代码(见附录) 2.3程序测试成果 (1) 主菜单函数 (2) 查询服务信息函数 (3) 增添服务信息函数 (4) 修改服务信息函数 (5) 删除服务信息函数 (6) 途径搜索函数 3、课程设计总结 到当前为止已经学习了一学期数据构造,再加上如今通过算法与数据构造课程设计,是我对数据构造这门课有了比较深理解。固然,在学习过程中也遇到各种各样困难,但是已经通过各种途径解决了。在解决这些问题过程中让我也学到了许多课本上没有知识以及团队合伙重要性。 通过这次课程设计,我对程序中算法概念理解更加透彻。算法是程序中必不可少某些,它是指解题方案精确而完整描述,是一系列解决问题清晰指令,算法代表着用系统办法描述解决问题方略机制。也就是说,可以对一定规范输入,在有限时间内获得所规定输出。如果一种算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同算法也许用不同步间、空间或效率来完毕同样任务。同步,在选取算法时必要考虑算法时间复杂度和空间复杂度,这样才干让程序正常,高效运营。 在系统设计时也遇到了诸多问题,例如在设计MGr.legs()函数时,一方面我想到是使用数组来保存信息,但发现这种设计无法以便让程序中各个独立算法访问存储服务信息,编写代码时十分复杂,日后,在出查阅有关书籍和阅读了网上其他有关算法后,我选取了使用链表来保存信息,同步其他函数模块也可以以便访问这某些信息,达到了我想要实现功能。 通过本次课程设计,也学到了诸多,例如团队力量永远不不大于个人力量,细节决定成败等等。不但重新温习了此前学到知识,还学习到许多新知识,也结识到了自己许多局限性。例如耐心不够,有时侯调试程序时,发现了一种错误,但是总是解决不了,心里就会感到厌烦,不想继续做下去。尚有不够细心,每一次改写完程序后,检查了一遍,自己以为没有错了,成果一调试发现又有错误等等。但是也发现了自己某些长处,例如善于听取她人意见,虚心求教等。 最后,通过全组人齐心合力,最后将程序编写了出来,并且使之得到实现咱们预期目。通过本次课程设计,从一定成度上提高了咱们对数据构造熟悉度,也提高了咱们独立编程能力,同步也体会到在程序设计过程中团队合伙,共同解决问题重要性。 4、 参照文献 [1]严蔚敏等.数据构造[M](C语言版).清华大学出版社,1997.4. [2] 张乃孝主编. 算法与数据构造 [M](C语言版). 高等教诲出版社,. [3] 李廉治,姜文清,郭福顺.数据构造[M].大连理工大学出版社,1989. 答辩记录 答辩小组教师: 提问与答辩状况记录如下: 1、求最短途径函数是怎么运营? 答:一方面需要顾客将所要查找到两服务分别输入,然后运用所编写void folyd()函数进行对两服务位置之间最短距离进行计算,然后用void display(inti,int j)函数对所得到成果进行输出,顾客便可以从中得到所推荐最短途径。 2、重要功能查询是如何实现? 答:重要是在单链表上进行顺序查找,查找成功时,开辟空间,输入要查找服务编号信息,门店信息查询会有一种查询方式,通过提示进入switch选取语句进行选取,在这个过程中还运用了for、while等语句进行操作。 3、程序初始化是如何设计? 答:程序初始化先通过void init(Place *&head)定义服务信息,涉及服务位置、服务编号、服务内容等信息,然后运用MGr.legs[i][j]=Road函数定义服务之间距离,确立了服务信息,定义了程序初始化。 源代码: #include<stdio.h> #include<iostream> #include<stdlib.h> #include<string.h> #define N 100 //服务个数最大100 #define Road 1000 //定义途径为1000 int Num=9; //当前服务个数 using namespace std; typedef struct Elemtype { char name[30]; char number[10]; char introduce[200]; }Elemtype; typedef struct Place { int num; //位置序号 Place *next; Elemtype date; //服务信息 }Place; //定义服务 typedef struct MGraph { Place place; int legs[N][N]; //存储途径长 }MGraph; MGraph MGr; //全局变量,定义MGr为MGraph类型 int shortest[N][N]; //定义全局变量存贮最小途径 int path[N][N]; //定义存贮途径 Place *p; void init(Place *&head) //定义服务位置 { Place *p,*q; head=(Place *)malloc(sizeof(Place)); head->next=NULL; q=head; p=(Place *)malloc(sizeof(Place)); p->num=1; strcpy(p->date.name,"购物"); strcpy(p->date.number,"1"); strcpy(p->date.introduce,"位于学校北公寓西行30M处,有两层楼大小,货品十分齐全,地处学校门口,是同窗们常去地方,提供各种购物服务。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=2; strcpy(p->date.name,"上网"); strcpy(p->date.number,"2"); strcpy(p->date.introduce,"位于学校北公寓东行20M处,有两个店铺可供选取,生意火爆,提供上网服务。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=3; strcpy(p->date.name,"洗浴"); strcpy(p->date.number,"3"); strcpy(p->date.introduce,"位于学校北公寓南行650M处,是学生们经常去地方,适合平民消费,价格实惠,水温适度,但距离学校较远。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=4; strcpy(p->date.name,"清真小吃"); strcpy(p->date.number,"4"); strcpy(p->date.introduce,"位于学校北公寓南行400M处,作为老店,很受附近居民欢迎,可提供烧烤,凉菜等服务,适合夜晚在此就餐。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=5; strcpy(p->date.name,"打印文献"); strcpy(p->date.number,"5"); strcpy(p->date.introduce,"位于学校北公寓东行80M处,提供打印文献、制作光盘等服务,价格较实惠,营业时间较长。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=6; strcpy(p->date.name,"火锅"); strcpy(p->date.number,"6"); strcpy(p->date.introduce,"位于学校北公寓南行150M处,作为试营业商铺,服务态度较好,菜种齐全,适合多人会餐。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=7; strcpy(p->date.name,"早餐"); strcpy(p->date.number,"7"); strcpy(p->date.introduce,"位于学校北公寓西行300M处,只有早上开放提供服务,其她时间段不营业,菜系有油条、豆浆等。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=8; strcpy(p->date.name,"快递"); strcpy(p->date.number,"8"); strcpy(p->date.introduce,"位于学校北公寓南行300M处,可获取收发韵达、申通快递等服务。"); p->next=q->next; q->next=p; q=p; p=(Place *)malloc(sizeof(Place)); p->num=9; strcpy(p->date.name,"照相"); strcpy(p->date.number,"9"); strcpy(p->date.introduce,"位于学校北公寓南行100M处,可获取快照、艺术照、证件照等服务。"); p->next=q->next; q->next=p; q=p; int i,j; //定义服务间距离 for(i=1;i<=N;i++) { for(j=1;j<=N;j++) { MGr.legs[i][j]=Road; } } for(i=1;i<=N;i++) shortest[i][j]=0; MGr.legs[0][1]=MGr.legs[1][0]=30; MGr.legs[0][2]=MGr.legs[2][0]=19; MGr.legs[0][3]=MGr.legs[3][0]=100; MGr.legs[3][4]=MGr.legs[4][3]=50; MGr.legs[3][5]=MGr.legs[5][3]=20; MGr.legs[4][5]=MGr.legs[5][4]=15; MGr.legs[5][6]=MGr.legs[6][5]=18; MGr.legs[6][7]=MGr.legs[7][6]=24; MGr.legs[1][2]=MGr.legs[2][1]=50; MGr.legs[2][7]=MGr.legs[7][2]=20; MGr.legs[8][7]=MGr.legs[7][8]=16; MGr.legs[7][9]=MGr.legs[9][7]=26; } void folyd() //佛洛依德算法 { int i,j,k; for(i=1;i<=N;i++) { for(j=1;j<=N;j++) { shortest[i][j]=MGr.legs[i][j]; path[i][j]=0; } } for(k=1;k<=N;k++) { for(i=1;i<=N;i++) { for(j=1;j<=N;j++) { if(shortest[i][j]>(shortest[i][k]+shortest[k][j])) { shortest[i][j]=shortest[i][k]+shortest[k][j]; path[i][j]=k; path[j][i]=k; //记录通过途径 } } } } } void display(int i,int j) //输出两个服务途径及最短途径 { int a,b; a=i; b=j; cout<<"咱们向您推荐最短途径是: "; if(i<j) { cout<<a; while(path[i][j]!=0) { cout<<"->"<<path[i][j]; if(i<j) j=path[i][j]; else i=path[j][i]; } cout<<"->"<<b<<endl; cout<<" "<<endl; cout<<"您所查找"<<a<<"->"<<b<<"两个服务之间最短距离为:"<<shortest[a][b]<<"米。"<<endl; } else { cout<<a; while(path[i][j]!=0) { cout<<"->"<<path[i][j]; if(i<j) j=path[i][j]; else i=path[j][i]; } cout<<"->"<<b<<endl; cout<<"您所查找"<<a<<"->"<<b<<"两个服务之间最短途径是:"<<shortest[a][b]<<" 米。"<<endl; } cout<<" "<<endl; } int shortdistance(Place *head) //查找两服务之间最短途径 { int i,j; Place *t=head->next,*q=head->next; cout<<"请输入要查询两个服务位置序号:"<<endl; cin>>i>>j; while(t) { if(t->num==i)break; else t=t->next; } while(q) { if(q->num==j)break; else q=q->next; } if(q==NULL||t==NULL) cout<<"抱歉,没有通向途径!"<<endl; else { folyd(); display(i,j); } cout<<endl; return 1; } void add(Place *&head) //增长服务 { Place *p,*t=head->next; p=(Place *)malloc(sizeof(Place)); int a; int b; int x; int y; int i; cout<<"请输入添加服务位置(需输入不不大于9整数)。"; cin>>p->num; cout<<endl; while(t) { if(t->num==p->num) { cout<<"此位置已被其他服务占用,请重新输入其他空白位置。"<<endl; cout<<" "<<endl; cin>>p->num;continue; } else t=t->next; } if(t==NULL) { cout<<"服务编号:"; cin>>p->date.number; cout<<"服务名字:"; cin>>p->date.name; cout<<"服务简介:"; cin>>p->date.introduce; x=p->num; cout<<endl; cout<<"请输入途径条数、有关服务位置y、途径长度"<<endl; cin>>a; cout<<endl; for(i=1;i<=a;i++) { cin>>y; cin>>b; MGr.legs[x][y]=MGr.legs[y][x]=b; } cout<<"服务位置:"<<p->num<<endl; cout<<"服务编号:"<<p->date.number<<endl; cout<<"服务名称:"<<p->date.name<<endl; cout<<"服务简介:"<<p->date.introduce<<endl; cout<<" "<<endl; Place *q=head->next; while(q->next) { q=q->next; } p->next=q->next; q->next=p; Num++; } } void deleted(Place *&head) //删除服务 { int text=0; char cnum[10]; Place *p=head; cout<<"输入删除服务编号:"<<endl; cout<<" "<<endl; cin>>cnum; while(p->next) { if(strcmp(p->next->date.number,cnum)==0) { cout<<"恭喜您,您已成功将服务 "<<p->next->date.name<<" 关闭!"<<endl; p->next=p->next->next; Num--; break; } else { if(p->next==NULL) cout<<"该服务不存在!"<<endl; cout<<" "<<endl; p=p->next; } } cout<<endl; } void find(Place *&head) //查询服务 { int n; Place *p=head; cout<<"输入查询服务位置序号:"; cout<<" "<<endl; cin>>n; while(p->next) { if(p->next->num==n) { cout<<"服务位置:"<<p->next->num<<endl; cout<<"服务编号:"<<p->next->date.number<<endl; cout<<"服务名称:"<<p->next->date.name<<endl; cout<<"服务简介:"<<p->next->date.introduce<<endl; break; } else p=p->next; } if(p->next==NULL) cout<<"该服务不存在!"<<endl; cout<<" "<<endl; cout<<" "<<endl; } void replace(Place *&head) //修改服务 { char name1[20]; char number1[10],number2[10]; char introduce1[100]; Place *p=head; cout<<"输入要修改服务编号:"<<endl; cout<<" "<<endl; cin>>number1; while(p->next) { if(strcmp(p->next->date.number,number1)==0) { cout<<"请输入新服务名称:"; cin>>name1; cout<<"请输入新服务编号:"; cin>>number2; cout<<"请输入新服务简介:"; cin>>introduce1; strcpy(p->next->date.name,name1); strcpy(p->next->date.number,number2); strcpy(p->next->date.introduce,introduce1); cout<<endl; cout<<"服务位置:"<<p->next->num<<endl; cout<<"服务编号:"<<p->next->date.number<<endl; cout<<"服务名称:"<<p->next->date.name<<endl; cout<<"服务简介:"<<p->next->date.introduce<<endl; cout<<endl; break; } else p=p->next; } if(p->next==NULL) cout<<"该服务不存在!"<<endl; cout<<" "<<endl; cout<<endl; } void menu() //主菜单 { cout<<" "<<endl; cout<<" "<<endl; cout<<"1 查询服务请按1键; "<<endl; cout<<"2 修改服务请按2键; "<<endl; cout<<"3 增长服务请按3键; "<<endl; cout<<"4 删除服务请按4键 "<<endl; cout<<"5 途径搜索请按5键 "<<endl; cout<<"6 退出系统请按6键; "<<endl; cout<<" "<<endl; cout<<" "<<endl; } void main() //主函数 { cout<<" 欢迎使用衡水学院服务查询系统 "<<endl; cout<<" "<<endl; cout<<endl; int x; init(p); while(1) { cout<<"当前存在服务个数为:"<<Num<<endl; cout<<endl; menu(); cin>>x; switch(x) { case 1:find(p);break; case 2:replace(p);break; case 3:add(p);break; case 4:deleted(p);break; case 5:shortdistance(p);break; case 6: cout<<" 恭喜您,成功退出系统! "<<endl; exit(0); } } }
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:校园导游服务咨询系统C++(含源代码)说明指导书.doc
    链接地址:https://www.zixin.com.cn/doc/2741669.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


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

    自信网络  |  ZixinNetwork