收藏 分享(赏)

客户资源管理系统SQL Server数据库课程设计.doc

上传人:精品资料 文档编号:10922723 上传时间:2020-01-21 格式:DOC 页数:35 大小:870KB
下载 相关 举报
客户资源管理系统SQL Server数据库课程设计.doc_第1页
第1页 / 共35页
客户资源管理系统SQL Server数据库课程设计.doc_第2页
第2页 / 共35页
客户资源管理系统SQL Server数据库课程设计.doc_第3页
第3页 / 共35页
客户资源管理系统SQL Server数据库课程设计.doc_第4页
第4页 / 共35页
客户资源管理系统SQL Server数据库课程设计.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、客户资源管理系统- 1 -学院:数学与计算科学学院姓名:叶俊耀学号:1007010103专业:10 信息技术一班指导老师:文一凭客户资源管理系统- 2 -目录一、 设计目的 .2二、 系统设计 .2三、 功能模块划分 .2四、 系统流程分析 .3五、 数据库设计 .3六、 连接数据库 .6七、 系统演示 .7八、 相关代码展示 .12九、 感想与总结 .72客户资源管理系统- 3 -一、 设计目的随着新技术的广泛应用,全世界范围内的各个企业都在经历一场深刻的改革,尤其是在企业怎样与客户潜在客户进行互动交流这一点上体现的特别明显。从管理的角度来说,企业关注的焦点有改进内部运作转移到更多地关注客户

2、上来。目前的 CRM(客户关系管理)软件通过建立一个系统,是企业在客户服务,市场竞争,销售及支持方面彼此协调的全新关系实体,为企业带来长久地竞争优势,从而提高了生产率。本系统适合中小企业的客户资源管理,提供对客户的有效管理。二、 系统设计系统设计分以下几个方面:1) 进入系统前要身份验证,用户名,密码,输入正确后方可进入,2) 用户可以根据需要定义客户类型信息。3) 对客户类型信息进行修改和删除。4) 对用户的详细信息进行修改和删除。5) 用户可以定义客户的详细信息。6) 在系统对客户进行查询和编译。三、 功能模块划分客户资源管理系统身份验证 客户信息管理 类型管理 查询管理增加新类型 按姓名

3、查询增加新客户详细信息查询修改新客户 修改类型信息删除新客户 删除类型信息客户资源管理系统功能模块示意图 身份验证:提供了系统的访问控制功能。客户资源管理系统- 4 - 类型管理:即系统的配置信息管理,还包括的功能是添加,修改,删除客户类型信息,客户类型信息包括客户的地区,职位,行业等。 客服信息管理:提供功能未添加,修改和删除客户基本信息。客户基本信息包括姓名,年龄,行业,职位,联系方式,爱好等信息。 查询管理:包括按姓名查询,详细信息查询。这种查询接口可以方便利用 SQL Server 数据库强大功能为客户提供服务。四、 系统流程分析前面分析中已经定义了系统各个功能模块,下面是系统运行的流

4、程分析图:登陆界面 用户验证 客户信息管理类型管理查询管理退出系统登陆成功登陆失败系统流程图五、 数据库设计创建数据库 crm. 数据库需求设计:系统的需求具体体现在福各种信息的保存,修改,和查询等方面,因此,一个满足系统要求的数据库必须总分照顾到对各种信息的输入输出,以免遗漏导致开发时返工。通过对系统的功能分析,客户资源管理需要包含以下数据信息。1. 地方信息:包括地方 ID,地方名称。2. 结识途径:包括结识途径 ID,结识途径名称。3. 职业信息:包括职业 ID,职业名称。4. 行业信息:包括行业 ID,行业名称。5. 客户信息:包括客户 ID,姓名,所在地区,职业,行业,所在单位,结识

5、途径, E-mail,地址,固定电话,移动电话,爱好,备注信息。 数据库逻辑结构设计:通过需求分析创建了 5 个表,表之间的关系如下 E-R 图所示客户资源管理系统- 5 -客户资源管理系统 E-R 图Approach 表(结识途径)Profession 表(职业)客户资源管理系统- 6 -Area 表(地区)Customer 表(客户表)Vocation 表(行业)为了提高数据库的存储效率和系统的功率,对 customer_info_tab 创建存储过程add_customer_info_tab 代码如下:USE crmgocreate procedure add_customer_info

6、_tab客户资源管理系统- 7 -(param1 int,param2 varchar(24),param3 varchar(24),param4 varchar(24),param5 varchar(24),param6 varchar(24),param7 varchar(24),param8 varchar(24),param9 varchar(24),param10 varchar(24),param11 varchar(60),param12 varchar(1000)ASDELETE FROM customer_info_tab WHERE id=param1;INSERT INT

7、O customer_info_tab (id,name,area,profession,vocation,company,approach,email,phone,mobile,interest,memo)VALUES(param1,param2,param3,param4,param5,param6,param7,param8,param9,param10,param11,param12);六、 连接数据库数据库用 ODBC 方式连接数据库 crm,对数据库 crm 设置用户名为:CUSTOMERS, 密码:123456.连接字段要三个参数:数据源名称,数据库用户名,数据库用户密码。系统登

8、录窗口如下所示:登陆窗口输入 crm 数据源名称,用户名:CUSTOMERS,密码:123456,可以连接数据库。客户资源管理系统- 8 -ODBC 连接方式数据库在数据源名称点击 crm 会出现如下窗口:点击确定就可以连接到数据库了.七、 系统演示在登陆窗口上输入后连接完数据库后会出现一个住对话窗口,这个窗口如下所示:客户资源管理系统- 9 -系统主对话窗口对于地区信息管理的模块,如在界面的“地区名称”文本框中输入“大同” ,单击“添加”按钮,就可以在地区信息列表控件中看到新添加的“大同”如图所示:添加地区信息客户资源管理系统- 10 -对于地区信息管理的“修改”功能,如要修改下拉列表框中的

9、“海口”为“三亚”就点击“海口”,在地区名称中修改海口为三亚,就完成对海口的修改,如图所示:选择修改信息信息修改完成对于地区信息管理的“删除”功能,如要删除列表框中的“湘潭”,只要点击“湘潭”之后,再点击“删除”,就会删除掉“湘潭”,如图所示:客户资源管理系统- 11 -点击删除信息点击删除后:信息已删除。其他列表框中的添加,删除,修改的功能都是如此操作的。就不介绍了。对于客户信息管理模块,如在界面上的“姓名”文本框中输入“王力”在“所在地区”下拉列表框选择“武汉” ,在“职业”下拉列表框中选择“教授” ,在“行业”下拉列表框中选择“科研” ,在“所在单位”文本框中输入“湖南科技大学” ,在“

10、结识途径“下拉列表框中选择“订单” , 在 email 文本框中输入 在“固定电话”文本框中输入“027809895320” ,在“移动电话”输入“15197211305” ,在“爱好”文本框中输入钓鱼,在说明文本框输入“化学领域知名教授” 。如图所示:输入信息页面客户资源管理系统- 12 -单击添加按钮,客户信息就显示在列表控件上了,如图所示:如果要删除客户信息,点击你要删除的客户所在列,我们要删除 12 号客户,点击客户所在列,再单击删除,如图所示:点击删除后客户删除页面12 号客户已经被删除。对于“详细查询”模块的使用,如在“所在地区”下拉菜单选择“贵阳”之后,会在列表控件中,列出所有

11、在“贵阳”的用户消息,如图所示:选择地区方式查询页面客户资源管理系统- 13 -八、 相关代码展示使用 SQL Server2000 创建的数据库,数据库的代码如下所示:1. 创建表的脚本如下:CREATE TABLE approach_info_tab (approach_id int NOT NULL ,approach_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,PRIMARY KEY CLUSTERED (approach_id) ON PRIMARY ,UNIQUE NONCLUSTERED (approach_name

12、) ON PRIMARY ) ON PRIMARYGOCREATE TABLE area_info_tab (area_id int NOT NULL ,area_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,PRIMARY KEY CLUSTERED (area_id) ON PRIMARY ,UNIQUE NONCLUSTERED (area_name) ON PRIMARY ) ON PRIMARYGOCREATE TABLE customer_info_tab (id int IDENTITY (1, 1) NOT NULL

13、 ,name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,area varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,profession varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,vocation varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,company varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,approach varchar (24) COLLATE C

14、hinese_PRC_CI_AS NULL ,email varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,phone varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,mobile varchar (24) COLLATE Chinese_PRC_CI_AS NULL ,interest varchar (100) COLLATE Chinese_PRC_CI_AS NULL ,客户资源管理系统- 14 -memo varchar (1000) COLLATE Chinese_PRC_CI_AS NULL ,PR

15、IMARY KEY CLUSTERED (id) ON PRIMARY ,UNIQUE NONCLUSTERED (name) ON PRIMARY ,CONSTRAINT FK_customer_info_tab_area_info_tab FOREIGN KEY (area) REFERENCES area_info_tab (area_name),CONSTRAINT FK_customer_info_tab_profession_info_tab FOREIGN KEY (profession) REFERENCES profession_info_tab (profession_na

16、me),CONSTRAINT FK_customer_info_tab_vocation_info_tab FOREIGN KEY (vocation) REFERENCES vocation_info_tab (vocation_name) ON PRIMARYGOCREATE TABLE profession_info_tab (profession_id int NOT NULL ,profession_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,PRIMARY KEY CLUSTERED (profession_id) O

17、N PRIMARY ,UNIQUE NONCLUSTERED (profession_name) ON PRIMARY ) ON PRIMARYGOCREATE TABLE vocation_info_tab (客户资源管理系统- 15 -vocation_id int NOT NULL ,vocation_name varchar (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,PRIMARY KEY CLUSTERED (vocation_id) ON PRIMARY ,UNIQUE NONCLUSTERED (vocation_name) ON PRIM

18、ARY ) ON PRIMARYGO2. 登陆数据库的代码:用 vc+6.0MFC 的 window 编程,创建登陆窗口,同时添加命令响应,以下是登陆对话框的命令响应函数,连接数据库 crm.void CLoginDlg1:OnOK() / TODO: Add extra validation hereUpdateData(true);CDatabase m_db;CString strConnect;strConnect.Format(“DSN=%s;UID=%s;PWD=%s“,m_bDSN,m_bUsername,m_bPassword);/TRYm_db.OpenEx(strConne

19、ct);CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);客户资源管理系统- 16 -END_CATCHCDia

20、log:OnOK();3. 信息列表控件的控制函数:void CCRDBS1007010103Dlg:InitControl()/DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;m_listArea.SetExtendedStyle(dwExStyle);m_listApproach.SetExtendedStyle(dwExStyle);m_listProfession.SetExtendedStyle

21、(dwExStyle);m_listVocation.SetExtendedStyle(dwExStyle);m_listCR.SetExtendedStyle(dwExStyle);/m_listArea.InsertColumn(0,“地区 ID“,LVCFMT_CENTER,50);m_listArea.InsertColumn(1,“地区名称“,LVCFMT_CENTER,90);/m_listApproach.InsertColumn(0,“结识途径“,LVCFMT_CENTER,50);m_listApproach.InsertColumn(1,“结识途径名称“,LVCFMT_CE

22、NTER,90);/m_listProfession.InsertColumn(0,“职位 ID“,LVCFMT_CENTER,50);m_listProfession.InsertColumn(1,“职位名称“,LVCFMT_CENTER,90);/m_listVocation.InsertColumn(0,“行业 ID“,LVCFMT_CENTER,50);m_listVocation.InsertColumn(1,“行业名称“,LVCFMT_CENTER,90);/m_listCR.InsertColumn(0,“客户 ID“,LVCFMT_CENTER,60);m_listCR.Ins

23、ertColumn(1,“客户名称“,LVCFMT_CENTER,80);m_listCR.InsertColumn(2,“所在地区“,LVCFMT_CENTER,80);m_listCR.InsertColumn(3,“职业“,LVCFMT_CENTER,80);m_listCR.InsertColumn(4,“行业“,LVCFMT_CENTER,80);m_listCR.InsertColumn(5,“所在单位“,LVCFMT_CENTER,80);m_listCR.InsertColumn(6,“结识途径“,LVCFMT_CENTER,80);m_listCR.InsertColumn(

24、7,“e-mail“,LVCFMT_CENTER,80);m_listCR.InsertColumn(8,“固定电话“,LVCFMT_CENTER,80);m_listCR.InsertColumn(9,“移动电话“,LVCFMT_CENTER,80);m_listCR.InsertColumn(10,“爱好“,LVCFMT_CENTER,80);m_listCR.InsertColumn(11,“说明“,LVCFMT_CENTER,140);客户资源管理系统- 17 -4. 向四个系统信息列表控件插入数据的控制函数:void CCRDBS1007010103Dlg:InitCtrlData(

25、)if(m_db.IsOpen()MessageBox(“数据库未打开“);return ;TRYCRecordset rs(rs.Open(CRecordset:dynaset,“select *from area_info_tab order by area_id“);while(!rs.IsEOF()int id;CString area;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldVal

26、ue(1,area);InsertConfigItem(rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,“select *from approach_info_tab order by approach_id“);while(!rs.IsEOF()int id;CString approach;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/客户资源管理系统- 1

27、8 -rs.GetFieldValue(1,approach);InsertConfigItem(rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,“select *from profession_info_tab order by profession_id“);while(!rs.IsEOF()int id;CString profession;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iV

28、al;var.Clear();/rs.GetFieldValue(1,profession);InsertConfigItem(rs.MoveNext();rs.Close();/rs.Open(CRecordset:dynaset,“select *from vocation_info_tab order by vocation_id“);while(!rs.IsEOF()int id;CString vocation;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id

29、=var.m_iVal;var.Clear();/rs.GetFieldValue(1,vocation);InsertConfigItem(rs.MoveNext();rs.Close();/客户资源管理系统- 19 -rs.Open(CRecordset:dynaset,“select *from customer_info_tab order by id“);while(!rs.IsEOF()int id;CString name,area,profession,vocation,company;CString approach,email,phone,mobile,interest,m

30、emo;CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)id=var.m_iVal;var.Clear();/rs.GetFieldValue(1,name);rs.GetFieldValue(2,area);rs.GetFieldValue(3,profession);rs.GetFieldValue(4,vocation);rs.GetFieldValue(5,company);rs.GetFieldValue(6,email);rs.GetFieldValue(7,a

31、pproach);rs.GetFieldValue(8,phone);rs.GetFieldValue(9,mobile);rs.GetFieldValue(10,interest);rs.GetFieldValue(11,memo);/InsertCRInfoItem(id,name,area,profession,vocation,company,approach,phone,email,mobile,interest,memo);rs.MoveNext();rs.Close();/RefreshAreaComboData();RefreshApprComboData();RefreshP

32、rofComboData();RefreshVocComboData();CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)客户资源管理系统- 20 -pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);Afx

33、MessageBox(szError);END_CATCH5. 刷新列表信息控件的控制函数:void CCRDBS1007010103Dlg:RefreshApprComboData()m_comboApproach.ResetContent();TRYCRecordset rs(/rs.Open(CRecordset:dynaset,“select *from approach_info_tab“);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboApproach.AddString(strName);

34、rs.MoveNext();m_comboApproach.SetCurSel(0);CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();客户资源管理系统- 21 -AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,10

35、0);AfxMessageBox(szError);END_CATCHvoid CCRDBS1007010103Dlg:RefreshProfComboData()m_comboProfession.ResetContent();TRYCRecordset rs(/rs.Open(CRecordset:dynaset,“select *from profession_info_tab“);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboProfession.AddString(strName);rs.Mo

36、veNext();m_comboProfession.SetCurSel(0);CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);客户资源管理系统- 22 -AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);

37、AfxMessageBox(szError);END_CATCHvoid CCRDBS1007010103Dlg:RefreshVocComboData()m_comboVocation.ResetContent();TRYCRecordset rs(/rs.Open(CRecordset:dynaset,“select *from vocation_info_tab“);while(!rs.IsEOF()CString strName;/rs.GetFieldValue(1,strName);m_comboVocation.AddString(strName);rs.MoveNext();m

38、_comboVocation.SetCurSel(0);CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;客户资源管理系统- 23 -e-GetErrorMessage(szError,100);AfxMessageBo

39、x(szError);END_CATCH6. 添加地区信息函数:void CCRDBS1007010103Dlg:OnBtnAreaAdd() / TODO: Add your control notification handler code hereif(!UpdateData()return ;if(m_strConfigArea.IsEmpty()AfxMessageBox(“请填写你的地区名称 “);return;TRYCRecordset rs(CString sql;rs.Open(CRecordset:dynaset,“Select max(area_id)from area_

40、info_tab “);/int newID=1;if(!rs.IsEOF()CDBVariant var;/rs.GetFieldValue(short)0,var,SQL_C_SLONG);if(var.m_dwType!=DBVT_NULL)newID=var.m_iVal+1;sql.Format(“Insert into area_info_tab(area_id,“ “area_name )“VALUES(“ “%d,%s)“,newID,m_strConfigArea);TRACE(sql);m_db.ExecuteSQL(sql);/InsertConfigItem(Refre

41、shAreaComboData();CATCH(CDBException,ex)客户资源管理系统- 24 -AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError)

42、;END_CATCH7. 修改地区信息函数:void CCRDBS1007010103Dlg:OnBtnAreaMod() / TODO: Add your control notification handler code hereif(!UpdateData()return ;if(m_strConfigArea.IsEmpty() AfxMessageBox(“请填写你要修改的地区 “);return;int nItem=m_listArea.GetNextItem(-1,LVNI_SELECTED);/if(nItem=-1)AfxMessageBox(“没有选择要修改的地区信息 “)

43、;return;/int id=atoi(m_listArea.GetItemText(nItem,0);TRYCRecordset rs(CString sql;sql.Format(“update area_info_tab “set area_name=%s “where area_id=%d“,m_strConfigArea,id);客户资源管理系统- 25 -TRACE(sql);m_db.ExecuteSQL(sql);/m_listArea.SetItemText(nItem,1,m_strConfigArea);RefreshAreaComboData();CATCH(CDBE

44、xception,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH8. 地区删除信息函数:void CCRDBS100701010

45、3Dlg:OnBtnAreaDel() / TODO: Add your control notification handler code hereint nItem=m_listArea.GetNextItem(-1,LVNI_SELECTED);/if(nItem=-1)AfxMessageBox(“没有选择要删除的地区信息 “);return;/int id=atoi(m_listArea.GetItemText(nItem,0);TRY客户资源管理系统- 26 -CString deleteSql;deleteSql.Format(“delete from area_info_tab

46、 where area_id=%d“,id);m_db.ExecuteSQL(deleteSql);/m_listArea.DeleteItem(nItem);/RefreshAreaComboData();CATCH(CDBException,ex)AfxMessageBox(ex-m_strError);AfxMessageBox(ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox(“MEMORY EXCEPTION“);AND_CATCH(CException,

47、e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox(szError);END_CATCH9. 详细信息查询函数:创建一个新类:CDetailQueryDlg 对的 OnInitDialog()函数对信息进行控制输出,同时在CCRDBS1007010103Dlg 类中的调用函数 OnButtonDetailQuery0(),和在主窗口上的“详细查询”按钮进行消息响应,就可以调用 CDetailQueryDlg.cpp 实现信息的展示,函数如下所示:/ DetailQueryDlg.cpp : implementation

48、 file/#include “stdafx.h“#include “CRDBS1007010103 叶俊耀.h“#include “DetailQueryDlg.h“#include “CRDBS1007010103 叶俊耀 Dlg.h“#ifdef _DEBUG客户资源管理系统- 27 -#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CDetailQueryDlg dialogCDetailQueryDlg:CDetailQueryDlg(CWnd* pParent /*=NULL*/): CDialog(CDetailQueryDlg:IDD, pParent)/AFX_DATA_INIT(CDetailQu

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报