欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《家庭财务管理系统》数据库技术及应用课程设计报告.pdf

    • 资源ID:85918745       资源大小:667.30KB        全文页数:24页
    • 资源格式: PDF        下载积分:19.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要19.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《家庭财务管理系统》数据库技术及应用课程设计报告.pdf

    .广西民族大学 高级数据库技术及应用 课程设计报告 课程设计题目:家庭财务管理系统 .word 专业资料 所属学院:信息科学与工程学院 软件学院 专业年级:2010 网络 姓名:郭璇 学号:110263100129 指导教师:葛丽娜 蒋荣萍 .word 专业资料 目 录 一课程设计名称.2 二课程设计目的.2 三系统概述.2 四系统需求分析.2 4.1 系统分析.2 4.2 系统需要实现的功能 .2 五系统设计说明.2 5.1 系统 E-R 图设计.3 5.2 系统数据库设计4 六实现方案描述.4 6.1 信息管理.4 6.1.1 读取信息.4 6.1.2 添加信息.6 6.1.3 删除信息.8 6.2 信息查询.8 6.2.1 按收支人员统计查询.8 6.2.2 按类型进行统计查询.11 6.2.3 同时按类型和人员查询.16 七课程设计总结 19 .word 专业资料 .word 专业资料 一.课程设计名称 家庭财务管理系统。二.课程设计目的 1、通过本次课程设计,对之前课程中学习的 Visual C+6.0 编程技术和数据库系统与应用进行一次综合的使用。2、通过开发小型数据库应用系统,充分地实践数据库系统开发的全过程,将书本中学到的数据库理论、数据库设计原理与技术应用到实践中,提高学生的动手能力。三.系统概述 随着经济的发展,人们的消费水平越来越高,消费的类型也在基本的柴米油盐上多了精神层次上的消费。但是这并不能让我们盲目消费,因此,家庭财务管理系统可对每天的收支进行记账,让我们清楚的知道家庭的收支情况。平衡收支情况能让我们的生活更加稳定,不会盲目消费,也可在有剩余闲钱的时候去娱乐放松一下。四 系统需求分析 4.1 系统分析 家庭财务管理系统可以对家庭成员,收支类型管理,并根据成员和收支类型添加和管理相应的收支信息。可对每个时间段中某成员或某类型的收支进行统计查询。4.2 系统需要实现的功能 实现家庭财务管理系统支出的相关功能,可以对每天的支出进行记账,记账要实现分类:1、按不同的支出类型分类;2、按不同的消费人员进行分类。可以对历史数据进行查询,查询要实现的功能:1、指定时间段,可以按类型进行该时间段的支出统计查询。.word 专业资料 2、指定时间段,可以按消费人员进行该时间段的支出统计查询。3、指定时间段,可以同时按类型和消费人员进行该时间段的支出统计查询。注:对历史数据的查询需要实现的是:设定消费,则可以查看该消费人员在特定时间段的消费总额,或者设定消费类型,则可以查看在特定时间段内该消费类型总额为多少。扩展功能:能同时实现家庭财务管理系统收入的相关功能,具体功能按照自己的想法实现。五系统设计说明 5.1 系统 E-R 图设计 .word 专业资料 5.2 系统数据库设计 家庭成员表(Member)字段名字 字段类型 主键 外键 是否为空 描述 Mname Char(10)是 成员名字 Mno Char(2)成员编号 Sex Char(2)成员性别 姓名 编号 性别 年龄 电话 成员 支出 时间 金额 收入 时间 金额 支出类型 收入类型 名称 编号 名称 编号 .word 专业资料 Age int 成员年龄 Phone Char(11)是 成员电话 支出类型表(Consume)字段名字 字段类型 主键 外键 是否为空 描述 Cname Char(20)是 支出类型名称 Cno Char(2)支出类型编号 成员支出表(CM)字段名字 字段类型 主键 外键 是否为空 描述 Mname Char(10)是 是 成员名字 Cname Char(20)是 是 支出类型名称 Ctime Datetime 是 支出时间 Cmoney Money 支出金额 收入类型信息(Income)字段名字 字段类型 主键 外键 是否为空 描述 Iname Char(20)是 收入类型名称 Ino Char(2)收入类型编号 成员收入信息(IM).word 专业资料 字段名字 字段类型 主键 外键 是否为空 描述 Mname Char(10)是 是 成员名字 Iname Char(20)是 是 收入类型名称 Itime Datetime 是 收入时间 Imoney Money 收入金额 六实现方案描述 6.1 信息管理 6.1.1 读取信息 对表格中的信息进行读取,方便用户查看已有的信息,对相应的信息进行管理。第一条:点击“第一条”按钮,显示表中第一条信息。上一条:点击“上一条”按钮,显示上一条信息,若直接点此按钮,从第一条记录开始显示。若记录已是第一条,提示用户已经是第一条信息。下一条:点击“下一条”按钮,显示下一条信息,若直接点此按钮,从第一条记录开始显示。若记录已是最后一条,提示用户已经是最后的信息。读取信息功能代码 void CMemberInfoDialog:OnTOOLBARMemberFirst()/TODO:Add your command handler code here MyMemberInfoSet.MoveFirst();/移动到第一条记录 DisplayRecord();/更新窗口显示 void CMemberInfoDialog:OnTOOLBARMemberPrevious()/TODO:Add your command handler code here if(m_MemberID.IsEmpty()MyMemberInfoSet.MoveFirst();.word 专业资料 DisplayRecord();else if(!MyMemberInfoSet.IsBOF()/不是第一条记录 MyMemberInfoSet.MovePrev();if(!MyMemberInfoSet.IsBOF()DisplayRecord();else MyMemberInfoSet.MoveNext();AfxMessageBox(已是第一条信息!);/*else MyMemberInfoSet.MoveNext();AfxMessageBox(已是第一条信息!);*/void CMemberInfoDialog:OnTOOLBARMemberNext()/TODO:Add your command handler code here if(m_MemberID.IsEmpty()MyMemberInfoSet.MoveFirst();DisplayRecord();else if(!MyMemberInfoSet.IsEOF()/不是移动到了最后一条 MyMemberInfoSet.MoveNext();/移动到下一条记录 if(!MyMemberInfoSet.IsEOF()/下一条不是移动到了最后一条 DisplayRecord();else MyMemberInfoSet.MovePrev();AfxMessageBox(已是最后一条信息!);.word 专业资料 6.1.2 添加信息 为每一个表格添加记录,对于不能为空的选项,在用户未填写的时候做出相应的提示,只有正确输入后才能添加。但由于主码要唯一,所以要进行判断用户输入的信息是否与表中记录冲突,如果冲突,提示用户修改相应的选项。正确无误后可以将记录保存到相应的表格里,实现对信息的添加。添加信息功能代码 else MyMemberInfoSet.MovePrev();AfxMessageBox(已是最后一条信息!);void CMemberInfoDialog:OnTOOLBARMemberSave()/TODO:Add your command handler code here UpdateData(true);/读入输入的资料 if(m_MemberName.IsEmpty()AfxMessageBox(请输入成员名字!);else if(m_MemberID.IsEmpty()AfxMessageBox(请输入成员编号!);else if(m_MemberSex.IsEmpty()AfxMessageBox(请输入成员性别!);else if(m_MemberAge100)AfxMessageBox(成员年龄应在到!);else CString Find_MName;CString Find_MNo;Find_MNo.Format(SELECT*FROM Member WHERE Mno=%s,m_MemberID);if(MyMemberInfoSet_MNo.IsOpen()/关闭表 MyMemberInfoSet_MNo.Close();if(!MyMemberInfoSet_MNo.Open(AFX_DB_USE_DEFAULT_TYPE,Find_MNo)AfxMessageBox(成员信息表打开失败!);if(MyMemberInfoSet_MNo.GetRecordCount()!=0)AfxMessageBox(成员编号不能重复,请修改后再保存!);if(MyMemberInfoSet_MNo.IsOpen()MyMemberInfoSet_MNo.Close();return;.word 专业资料 6.1.3 删除信息 用户点击“删除”按钮,可以对当前信息进行删除。因为删除信息后不可恢复,所以当用户删除信息时,再次询问是否要删除,只有用户确认后才能删除。删除信息功能代码 else Find_MName.Format(SELECT*FROM Member WHERE Mname=%s,m_MemberName);if(MyMemberInfoSet_MName.IsOpen()/关闭表 MyMemberInfoSet_MName.Close();if(!MyMemberInfoSet_MName.Open(AFX_DB_USE_DEFAULT_TYPE,Find_MName)AfxMessageBox(成员信息表打开失败!);if(MyMemberInfoSet_MName.GetRecordCount()!=0)AfxMessageBox(成员名字不能重复,请修改后再保存!);if(MyMemberInfoSet_MName.IsOpen()MyMemberInfoSet_MName.Close();return;MyMemberInfoSet.AddNew();/如果是添加记录,就调用添加记录的函数处理 MyMemberInfoSet.m_Mname=m_MemberName;/对应变量更新 MyMemberInfoSet.m_Mno=m_MemberID;MyMemberInfoSet.m_Sex=m_MemberSex;MyMemberInfoSet.m_Age=m_MemberAge;MyMemberInfoSet.m_Phone=m_MemberPhone;MyMemberInfoSet.Update();MyMemberInfoSet.Requery();AfxMessageBox(保存成功!);/m_Add=false;/设置添加状态为false DisplayRecord();/更新显示 .word 专业资料 void CMemberInfoDialog:OnTOOLBARMemberDelete()/TODO:Add your command handler code here int ret=MessageBox(是否要删除该记录?,提示,MB_OKCANCEL);if(ret=1)MyMemberInfoSet.Delete();/删除记录 MyMemberInfoSet.Requery();AfxMessageBox(删除成功!);else ;DisplayRecord();/更新显示 6.2 信息查询 6.2.1 按收支人员统计查询 按家庭成员查询收支情况,在下来列表中可供用户选择已用的成员,避免出现打错字等麻烦。用户选择时间,在相应的时间段内查询信息。如果该成员在该时段内没有收支情况,提示用户没有该成员的记录,如果有便在下来列表中显示详情和总额。如果选择的时间有错,提示用户重新输入。.word 专业资料 按支出人员统计查询界面和功能代码 void CSelect_CM_By_Member:OnBUTTONSelect()/TODO:Add your control notification handler code here m_List.DeleteAllItems();UpdateData(true);if(m_MemberName.IsEmpty()AfxMessageBox(请输入要查询的成员名字!);return;if(m_BeginTimem_EndTime)AfxMessageBox(时间输入有错,请重新输入!);return;if(m_MemberName=全部)m_TotalMoney=0;while(!By_MemberSet.IsEOF()if(m_BeginTimeBy_MemberSet.m_Ctime|By_MemberSet.m_Ctimem_EndTime)By_MemberSet.MoveNext();continue;CString Mname=By_MemberSet.m_Mname;CString Cname=By_MemberSet.m_Cname;Mname.TrimRight();Cname.TrimRight();CString Ctime=By_MemberSet.m_Ctime.Format(%Y-%m-%d);CString CMoney=By_MemberSet.m_Cmoney;m_List.InsertItem(0,);m_List.SetItemText(0,0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;By_MemberSet.MoveNext();UpdateData(false);return;.word 专业资料 else CString SelectMember;SelectMember=SELECT*FROM CM WHERE Mname=;SelectMember+=m_MemberName;SelectMember+=;if(By_MemberSet.IsOpen()By_MemberSet.Close();if(!By_MemberSet.Open(AFX_DB_USE_DEFAULT_TYPE,SelectMember)AfxMessageBox(Mumber表打开失败!);if(By_MemberSet.GetRecordCount()=0)AfxMessageBox(此成员不存在,请确认后再输入!);if(By_MemberSet.IsOpen()By_MemberSet.Close();return;while(m_BeginTimeBy_MemberSet.m_Ctime|By_MemberSet.m_Ctimem_EndTime)if(!By_MemberSet.IsEOF()By_MemberSet.MoveNext();else AfxMessageBox(此成员在此时段无消费记录!);if(By_MemberSet.IsOpen()By_MemberSet.Close();return;m_TotalMoney=0;while(!By_MemberSet.IsEOF()if(m_BeginTimeBy_MemberSet.m_Ctime|By_MemberSet.m_Ctimem_EndTime).word 专业资料 6.2.2 按类型进行统计查询 按收支类型查询收支情况,在下来列表中可供用户选择已用的类型,避免出现打错字等麻烦。用户选择时间,在相应的时间段内查询信息。如果该类型在该时段内没有收支情况,提示用户没有该类型的记录,如果有便在下来列表中显示详情和总额。如果选择的时间有错,提示用户重新输入。By_MemberSet.MoveNext();continue;CString Mname=By_MemberSet.m_Mname;CString Cname=By_MemberSet.m_Cname;CString Ctime=By_MemberSet.m_Ctime.Format(%Y-%m-%d);CString CMoney=By_MemberSet.m_Cmoney;Mname.TrimRight();Cname.TrimRight();m_List.InsertItem(0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;By_MemberSet.MoveNext();UpdateData(false);return;.word 专业资料 按类型进行统计查询界面和功能代码 BOOL CSelect_CM_By_Consume:OnInitDialog()CDialog:OnInitDialog();/TODO:Add extra initialization here CString SelectAll;SelectAll=SELECT*FROM CM;if(SelectAllConsume.IsOpen()SelectAllConsume.Close();if(!SelectAllConsume.Open(AFX_DB_USE_DEFAULT_TYPE,SelectAll)AfxMessageBox(消费信息表打开失败!);while(!SelectAllConsume.IsEOF()m_SelectConsumeName.AddString(SelectAllConsume.m_Cname);SelectAllConsume.MoveNext();m_List.InsertColumn(0,消费者);m_List.InsertColumn(1,消费类型);m_List.InsertColumn(2,时间);m_List.InsertColumn(3,金额(元);RECT rect;m_List.GetWindowRect(&rect);int wid=rect.right-rect.left;m_List.SetColumnWidth(0,wid/4-5);m_List.SetColumnWidth(1,wid/4);m_List.SetColumnWidth(2,wid/4);m_List.SetColumnWidth(3,wid/4);m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT);/TODO:Add extra initialization here CString sqlStr;sqlStr=SELECT*FROM CM;if(!By_ConsumeSet.Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)/打开数据表 AfxMessageBox(支出信息表打开失败!);return TRUE;/return TRUE unless you set the focus to a control /EXCEPTION:OCX Property Pages should return FALSE .word 专业资料 void CSelect_CM_By_Consume:OnBUTTONSelect()/TODO:Add your control notification handler code here m_List.DeleteAllItems();UpdateData(true);if(m_ConsumeName.IsEmpty()AfxMessageBox(请输入要查询的消费类型!);return;if(m_BeginTimem_EndTime)AfxMessageBox(时间输入有错,请重新输入!);return;if(m_ConsumeName=全部)/m_TotalMoney=0;while(!By_ConsumeSet.IsEOF()if(m_BeginTimeBy_ConsumeSet.m_Ctime|By_ConsumeSet.m_Ctimem_EndTime)By_ConsumeSet.MoveNext();continue;CString Mname=By_ConsumeSet.m_Mname;CString Cname=By_ConsumeSet.m_Cname;Mname.TrimRight();Cname.TrimRight();CString Ctime=By_ConsumeSet.m_Ctime.Format(%Y-%m-%d);CString CMoney=By_ConsumeSet.m_Cmoney;m_List.InsertItem(0,);m_List.SetItemText(0,0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;By_ConsumeSet.MoveNext();UpdateData(false);.word 专业资料 return;else CString SelectConsume;SelectConsume=SELECT*FROM CM WHERE Cname=;SelectConsume+=m_ConsumeName;SelectConsume+=;if(By_ConsumeSet.IsOpen()By_ConsumeSet.Close();if(!By_ConsumeSet.Open(AFX_DB_USE_DEFAULT_TYPE,SelectConsume)AfxMessageBox(消费类型表打开失败!);if(By_ConsumeSet.GetRecordCount()=0)AfxMessageBox(此成员不存在,请确认后再输入!);if(By_ConsumeSet.IsOpen()By_ConsumeSet.Close();return;while(m_BeginTimeBy_ConsumeSet.m_Ctime|By_ConsumeSet.m_Ctimem_EndTime)if(!By_ConsumeSet.IsEOF()By_ConsumeSet.MoveNext();else AfxMessageBox(此消费类型在此时段无消费记录!);if(By_ConsumeSet.IsOpen()By_ConsumeSet.Close();return;/m_TotalMoney=0;while(!By_ConsumeSet.IsEOF()if(m_BeginTimeBy_ConsumeSet.m_Ctime|By_ConsumeSet.m_Ctimem_EndTime).word 专业资料 By_ConsumeSet.MoveNext();continue;CString Mname=By_ConsumeSet.m_Mname;CString Cname=By_ConsumeSet.m_Cname;CString Ctime=By_ConsumeSet.m_Ctime.Format(%Y-%m-%d);CString CMoney=By_ConsumeSet.m_Cmoney;Mname.TrimRight();Cname.TrimRight();m_List.InsertItem(0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;By_ConsumeSet.MoveNext();UpdateData(false);return;6.2.3 同时按类型和人员查询 按收支类型和成员查询收支情况,在下来列表中可供用户选择已用的类型和成员,避免出现打错字等麻烦。用户选择时间,在相应的时间段内查询信息。如果该类型和成员在该时段内没有收支情况,提示用户没有该的记录,如果有便在下来列表中显示详情和总额。如果选择的时间有错,提示用户重新输入。.word 专业资料 按类型和人员统计查询界面和功能代码 void CSelect_CM:OnBUTTONSelect()/TODO:Add your control notification handler code here m_List.DeleteAllItems();UpdateData(true);if(m_ConsumeName.IsEmpty()AfxMessageBox(请输入要查询的消费类型!);return;if(m_MemberName.IsEmpty()AfxMessageBox(请输入要查询的成员名字!);return;if(m_BeginTimem_EndTime)AfxMessageBox(时间输入有错,请重新输入!);return;if(m_ConsumeName=全部|m_MemberName=全部).word 专业资料 /m_TotalMoney=0;while(!SelectCM.IsEOF()if(m_BeginTimeSelectCM.m_Ctime|SelectCM.m_Ctimem_EndTime)SelectCM.MoveNext();continue;CString Mname=SelectCM.m_Mname;CString Cname=SelectCM.m_Cname;Mname.TrimRight();Cname.TrimRight();CString Ctime=SelectCM.m_Ctime.Format(%Y-%m-%d);CString CMoney=SelectCM.m_Cmoney;m_List.InsertItem(0,);m_List.SetItemText(0,0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;SelectCM.MoveNext();UpdateData(false);return;else CString SelectCMInfo;SelectCMInfo=SELECT*FROM CM WHERE Cname=;SelectCMInfo+=m_ConsumeName;SelectCMInfo+=and Mname=;SelectCMInfo+=m_MemberName;SelectCMInfo+=;if(SelectCM.IsOpen()SelectCM.Close();if(!SelectCM.Open(AFX_DB_USE_DEFAULT_TYPE,SelectCMInfo)AfxMessageBox(消费类型表打开失败!);.word 专业资料 if(SelectCM.GetRecordCount()=0)AfxMessageBox(此信息不存在,请确认后再输入!);if(SelectCM.IsOpen()SelectCM.Close();return;while(m_BeginTimeSelectCM.m_Ctime|SelectCM.m_Ctimem_EndTime)if(!SelectCM.IsEOF()SelectCM.MoveNext();else AfxMessageBox(此消费信息在此时段无消费记录!);if(SelectCM.IsOpen()SelectCM.Close();return;/m_TotalMoney=0;while(!SelectCM.IsEOF()if(m_BeginTimeSelectCM.m_Ctime|SelectCM.m_Ctimem_EndTime)SelectCM.MoveNext();continue;CString Mname=SelectCM.m_Mname;CString Cname=SelectCM.m_Cname;CString Ctime=SelectCM.m_Ctime.Format(%Y-%m-%d);CString CMoney=SelectCM.m_Cmoney;Mname.TrimRight();Cname.TrimRight();m_List.InsertItem(0,Mname);m_List.SetItemText(0,1,Cname);m_List.SetItemText(0,2,Ctime);m_List.SetItemText(0,3,CMoney);int Money=atoi(CMoney);m_TotalMoney+=Money;.word 专业资料 SelectCM.MoveNext();UpdateData(false);return;七课程设计总结 经过为期两个星期的数据库应用系统设计使我收获了很多。数据库应用和平时上课所接触的程序是有很大的不同,所经受的考验和克服的困难是平时所无法比拟的。在这次设计中,我对 C+有了更进一步的了解,也很开心自己设计的软件可以对家庭财务管理。在课程设计中,我们认识到自己还有很多的知识没学好,基础知识没理清,许多东西还要翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些项目很困难,以后要克服,尽量保持一颗良好的心态。对于未来,我觉得我还有许多方面需要提高。首先要继续学习好基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。

    注意事项

    本文(《家庭财务管理系统》数据库技术及应用课程设计报告.pdf)为本站会员(g****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开