科学计算器课程设计1.doc

上传人:文库蛋蛋多 文档编号:2386022 上传时间:2023-02-17 格式:DOC 页数:46 大小:397.50KB
返回 下载 相关 举报
科学计算器课程设计1.doc_第1页
第1页 / 共46页
科学计算器课程设计1.doc_第2页
第2页 / 共46页
科学计算器课程设计1.doc_第3页
第3页 / 共46页
科学计算器课程设计1.doc_第4页
第4页 / 共46页
科学计算器课程设计1.doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《科学计算器课程设计1.doc》由会员分享,可在线阅读,更多相关《科学计算器课程设计1.doc(46页珍藏版)》请在三一办公上搜索。

1、徐州师范大学物电学院课程设计报告课 程 名 称: 计算机程序设计实训 题 目: 科学计算器 专 业 班 级: 电子科学与技术 学 生 姓 名: 徐金富 学 生 学 号: 09223034 日 期: 2011/12/10 指 导 教 师: 赵纪平 物电学院教务部印制说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。答辩后学生根据答辩情况填写答辩记录表。4、报告正文字

2、数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。6、课程设计完成后,由指导教师根据完成情况写出总结。7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。一、课程设计目的、任务和内容要求:计算机语言程序设计是一门以编程实践为主的专业课,目的在于培养学生利用计算机语言进行软件开发所必需的基本思想和基本技能,进一步提高综合应用计算机语言的各种编程知识和技巧进行程序设计的能力,通过本次课程设计,学生应能达到具备设计功能较为复杂的应用程序的能力,

3、同时培养学生自主学习和独立创新的精神。任务如下: 1进行需求分析和概要设计,给出流程图。 2写出详细设计,熟悉其中采用的关键技术。3给出具体的编码实现并调试。4写课程设计报告提交源程序。内容要求:设计并完成软件系统。要求:1应具有简洁友好的用户界面。2要求软件系统的功能完整。3要求程序具备正确性,可读性和运行的高效性。 二、进度安排:第3天: 查找资料,进行需求分析和概要设计;第46天: 各模块的详细设计;第712天: 软件实现与调试;第1314天:写课程设计报告并提交源程序。三、主要参考文献:【1】 王敬栋 Visual C+课程设计案例精编(M) 北京:中国水利水电出版社 2006【2】

4、夏崇镨 任海军 Vsiual C+课程设计案例精编(M)北京:清华大学出版社2008【3】 郑阿奇Visual C+实用教程(M)北京:电子工业出版社 2010【4】 陈清华.Visual C+课程设计案例精选与编程指导(M)南京.东南大学出版社,2004【5】 夏崇镨 任海军 Vsiual C+课程设计案例精编(M)北京:清华大学出版社 2002 指导教师签字: 年 月 日目 录摘 要 IIAbstract . II1绪论 . 11.1 背景、目的 11.2 简易计算器的功能.12 设计方案简述 . 22.1 输入流程分析 .22.2 计算流程分析 .2 3 详细设计 . 43.1 起始设计

5、步骤 .4 3.1界面设计 . 5 4 设计结果及分析. . 104.1 测试设计结果 .10 4.2 设计分析 . . 105 总 结 . .12 参考文献 . . .13 附录 程序代码 . . .14 摘 要随着计算机网络通信技术、微电子技术的快速发展,作为21世纪的接班人,跟上时代的前进步伐,这就需要适应能够适应现实生活的节奏,现实生活中,很多时候要经行计算来处理一些事务,设计计算器可以帮助人们避免繁琐的计算,也可以加快人们办事效率,设计中运用MFC设计的是简单计算器,包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含三角函数,反三角函数,阶乘,对数,开

6、方,倒数等方面的运算。可对输入任意的操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。当出现错误会给出相应提示。关键词:简单计算器; MFC; 计算AbstractWith the computer network communication technology, the rapid development of microelectronics technology, as the successor to the 21st century, keep up the pace of the times, which need to adapt to adapt to the

7、 rhythm of real life, real life, many times to be calculated by the line deal with some matters, the design calculator can help people avoid complicated calculations, you can also expedite Renmen efficiency, the design of MFC design is the use of simple calculator, including the eyes and the unary o

8、perator function. Binocular operators include basic arithmetic, and power functions, unary include trigonometric functions, inverse trigonometric functions, factorial, logarithm, square root, reciprocal and other aspects of operations. The operation can enter any number, including decimals and integ

9、ers, and positive and negative for all of the above operations and to continuous operation. When an error will give a prompt.Keywords:Simple Calculator;MFC ;Calculation1绪论1.1背景、目的21世纪,随着科技的发展,人们生活节奏的加快,要想跟上时代的前进步伐,这需要我们适应能够适应现实生活的节奏,而生活中有很多方面需要进行计算,如统计,测量,等等各方面需要处理大量的计算任务,如果只靠人脑通过笔来计算,那效率低下,还烦琐。而且容易

10、出错,这就需要处理事件快捷的工具计算器。目前所有计算机带自带计算器,大大的方便人们的计算,处理事务,本设计中,运用MFC实现计算器的功能。同样可以方便生活中处理计算类的事件,避免烦琐的计算,提高人们的处理计算事件的办事效率,而且计算不会出错。当输入有错时候,可以自动提示错误。计算器的发展已经经过几十年的过程,现在的计算器种类繁多,运算功能强大,在各行各业中均有应用,它的发展让人们节省了很多时间精力,计算器的发展正在向各个方向延伸,每个行业所需要的计算有差别,这就发展了各种类型单独的计算器,计算的运算速度,计算数字的庞大也在不断向前发展,本设计中的简易计算器,可以实现简单的单目和双目运算,方便一

11、些简单事务的处理。1.2简易计算器的功能计算器的功能多少决定了计算器的实用价值,本设计中的简易计算器实现的主要功能有:1)简单的四则运算:加、减、乘、除 以及取百分数2)开方、幂运算、倒数、对数、阶乘、平方3)正弦、余弦、正切这些功能都是很常见的需要计算器功能,它可以帮助人们完成很多需要计算处理的功能。所以次简易计算器很有实用价值,可以很好的帮助使用者,让计算变的简单化,不必去进行复杂的笔算,很大程度上的减轻了使用者的精神上的损耗,也很大程度上提高了使用者的办事效率。2 设计方案简述2.1输入流程分析如图2-1是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_

12、show为零。按下数字按钮后,判断m_show的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。NNY键入一个数是否为正数?m_show =10*m_show+im_show=10*m_show-i是否为小数?用UpdateData(FALSE)刷新显示还原m_show根据小数点后位数将键入的数除以n次10累加到m_showYN继续键入数字?Y输入数据子函数编辑框关联变量m_show=0图2-1 输入数据子函数流程图2.2计算流程分析回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_show存入data1,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直

13、接对其处理得出结果。若按下清零,则m_show等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至m_show中。若需用算出的结果继续运算则当按下运算符号时,将自动先将m_show的数字保存到data1中再进行运算。科学计算器总流程图如图2-2所示Y开始输入数据子函数编辑框关联的变量保存至data1输入数据子函数进行运算运算是否合法把结果保存到data1m_show清零弹出对话框显示错误NY是否用保存的结果继续进行运算N结束jie双目运算符单目运算符是否开始新一轮的计算YN图22 科学计算器总流程图3 详细设计过程3.1 起始设计步骤1.

14、打开Microsoft Visual C+ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizardexe工程,输入工程名jianyijisuanqi及其所在位置,点击确定.2. 将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成.新建工程信息如图3-1图3-1这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图3-2所示图3-23.2 界面设计3.2.1.创建控件在图2所示的Resoure View选项卡中打开Dialog资源组,双击IDD_JIANYIJISUANQI_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,

15、包括编辑框和按钮的创建。其中按钮的创建以“1”为例进行介绍,其他按钮的创建可参照它进行操作。1)在图3-2中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图3-3所示,在该对话框中输入ID属性,再选择styles中将Align test中选择Right 。图3-32)在图3-2中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹

16、出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图3-4所示,在该对话框中输入控件的ID值和标题属性。图3-4按照“1”的操作过程编辑完成其他按钮和编辑框等对象的属性。各按钮与编辑框等对象的属性如表3-1、3- 2、3-3、3-4所示表3-1 数字按钮和编辑框等对象的属性控件类型ID属性设计Edit BOXIDC_SHOW_EDITButtonIDC_NUM1_BUTTON1ButtonIDC_NUM2_BUTTON2ButtonIDC_NUM3_BUTTON3ButtonIDC_NUM4_BUTTON4ButtonIDC_NUM5_BUTTON5ButtonIDC_

17、NUM6_BUTTON6ButtonIDC_NUM7_BUTTON7ButtonIDC_NUM8_BUTTON8ButtonIDC_NUM9_BUTTON9ButtonIDC_NUM0_BUTTON0表3-2. 四则运算的按钮对象属性ButtonIDC_FU1_BUTTONButtonIDC_FU2_BUTTONButtonIDC_FU3_BUTTONButtonIDC_FU4_BUTTON表3-3 三角函数集反三角函数的属性ButtonIDC_SIN_BUTTONsinButtonIDC_COS_BUTTONcosButtonIDC_TAN_BUTTONtan表3-4 其他按钮的属性Butt

18、onIDC_LOG_BUTTONlogButtonIDC_MOD_BUTTONmodButtonIDC_KE2_BUTTONx2ButtonIDC_KE4_BUTTON10xButtonIDC_FU7_BUTTON.ButtonIDC_EQUAL_BUTTON=ButtonIDC_FU5_BUTTON%ButtonIDC_FU6_BUTTON+/-ButtonIDC_BACKSPACE_BUTTON回删ButtonIDC_C_BUTTON清零ButtonIDC_KE1_BUTTON1/xButtonIDC_LN_BUTTONlnButtonIDC_CE_BUTTON完成后界面如图3-5所示图3

19、-53.2.2程序运行时初始化1)jianyijisuanqiDlg.cpp里加上头文件#include math.h以及定义#define pi 3.141592653589792)jianyijisuanqiDlg.h中变量的定义bool decimal=0;/判断是否小数double data2=0;double data1=0;double data_dec=0;double data_int=0;/输入数据整数与小数部分double value=0;double count=10;int type;/存放运算类型3.2.3连接变量和代码 1) 给编辑框连接变量。在编辑框上单击鼠标右键

20、,在弹出菜单中选择“建立类向导”菜单项,弹出MFC ClassWizard对话框,选择Member Variables选项卡,再将Class name中选择CjianyijisuanqiDlg.双击IDC_SHOW_EDIT,弹出Add Menber Variable,连接变量为m_show,变量类型设定为cstring 型。如图3-6所示。图3-62) 给“1”按钮连接代码。在“1”按钮上单击鼠标右键,选择“建立类向导”菜单项,在弹出的对话框中选择Messages Maps选项卡,然后在Object IDs列表框中双击选择IDC_NUM1_BUTTON,在Messages列表框中选择双击BN

21、_CLICKED项,即给“1”按钮选择单击按钮事件,如图3-7所示图3-7“1”按钮链接代码对话框即对应的添加按钮“1”的代码void CJSQDlg:OnNum1Button() / TODO: Add your control notification handler code hereUpdateData();if(m_Flag=1)m_Flag = 0;m_Show=;m_Show+=1;elseif(m_Show=0)m_Show=;m_Show+=1;UpdateData(false);其他按钮如参照按钮“1”来连接代码,详细代码见附录。4 设计结果及分析4.1 测试设计结果1).

22、输入“100”,“-”,“28.5”,“ =”,得到结果如图4-1所示图4-12). 输入”60”,”cos”运行结果如图4-2所示图4-24.2设计分析4.2.1操作数的输入编辑框所关联的变量为m_show,程序开始时为0。每按下一个数字键按钮,就把它累加到m_show里并刷新显示。BOOL型变量用docimal来判断是否有小数点和一个整型数data_int来表示小数点后的数据的位数。当docimal=1时,表示有小数点,否则则表示无小数点。按下小数点按钮后执行docimal=1。当按下一个数字键时,首先根据decimal判断是否按下小数点,若有即运行count=count*10,则为此次键

23、入的数所处的位数,将键入的数除以count然后累加到编辑框所关联的变量m_show上,若没有则把m_show乘以10,然后累加到编辑框所关联的变量m_show上。4.2.2单目运算符功能的实现由于单目运算符中必须有执行运算的函数,因而头文件中要加入math.h,如m_show=sqrt(m_show).按下按钮即可实现其功能。4.2.3双目运算符功能的实现双目运算符需要两个操作数才能运算,所以在执行双目运算符按钮的函数代码中,要把m_show中的值保存到变量data1中,然后把m_show清零。这样即可保存第一个操作数。运算在实现部分在“=”中实现,过程4.2.4中阐述的。4.2.4等于按钮的

24、功能实现我们在每个函数中运用了type来定义运算类型,每个函数的type不同(如加法type=0;减法type=1);在等于号按钮的实现时候,我们用switch(type)来实现,当case 0时候,实现加法运算value=data1+data2;break;当case 1时候,同样实现减法运算value=data1-data2;break;用break来跳出函数,结束运算,现实结果。5 总结在此我要感谢赵纪平老师,她严谨的治学态度、追求卓越的生活精神,特别是她教课时候的激情深深地感染着我。我还要感谢所有关心帮助过我的同学。基于VC+下的设计,可以看出VC+它的多态性,继承性,封装性的优越特点

25、,这让编译设计更加的简单方便,特别是它的继承性。使用MFC减少了大量建立Windows程序时必须编写的代码,由于VC+的继承和封装,正是由于MFC编程方法充分利用了面向对象技术优点,使的设计程序编程时极少需要关心对象方法的实现细节,而只需要简单的调用自己已有对象的方法就可以了。简单的说,MFC的优点可以归结为以下几点:(1) MFC是C+的Microsoft Windows应用程序的编程接口。(2) MFC开发的应用程序使用了标准化的结构。(3) 使用MFC开发的应用程序不仅小,而且运行快。(4) Visual C+工具降低了编码的复杂性。(5) MFC库功能丰富经过长达2个星期的VC+课程设

26、计和多番测试,终于将设计的简易计算器能够完成功能描述内容中的全部功能。在本学期中我们开设了Visual C+实用教程课的MFC部分皆为需要实践内容,在开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。正所谓“纸上谈兵终觉浅,觉知此事要躬行。”所以在本学期末的课程设计是很及时、很必要的。这样不仅能够加深我们对MFC程序设计的掌握,而且还及时、真正的做到了学以致用。让我感受到了:学完VC+后做课程设计得基本功过硬,设计过程中不得有半点马虎。同时在实践过程中提高自己找错纠错能力,通常错误就那几种,多练习就熟练了。同时在设计过程中多思考,能否更好的完成实现。设计过程中我们要善于查找资料提高自

27、己的信息搜索查询能力,要善于利用并能更哈的利用网络来获得知识,获得帮助。在面临无从下手等这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。当我们有了明确的目的,就可以发挥自己的头脑来完成实现它了。在设计过程中我们要善于思考。在程序设计过程中总会有些实现难点和最初完成程序时免不了的有许多不足,这就需要自己根据代码及实现的功能去认真思考并解决遇到的难点。只有这样不断纠正不断思考,才能完成程序设计功能目的,才能在实践中不断提升自己。通过本次的课程设计让我学到了并收获了很多,不仅仅巩固了先前学的MFC程序设计知识,让我认识到了自己很多的不足,而且此次课程设计还培养了我的动手实践能力

28、,让我的创造性思维得到拓展。它还让我感受到了实践的重要性。 参考文献【1】 郑阿奇Visual C+实用教程(M)北京:电子工业出版社 2010【2】 王敬栋 Visual C+课程设计案例精编(M) 北京:中国水利水电出版社 2006【3】 夏崇镨 任海军 Vsiual C+课程设计案例精编(M)北京:清华大学出版社2008【4】 陈清华.Visual C+课程设计案例精选与编程指导(M)南京.东南大学出版社,2004【5】 夏崇镨 任海军 Vsiual C+课程设计案例精编(M)北京:清华大学出版社 2002附录程序代码/ JSQDlg.cpp : implementation file/

29、#include stdafx.h#include JSQ.h#include JSQDlg.h#include math.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX

30、_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INI

31、T(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CJSQDlg dialogCJSQDlg:CJSQDlg(CWnd* pParent /*=N

32、ULL*/): CDialog(CJSQDlg:IDD, pParent)/AFX_DATA_INIT(CJSQDlg)m_M = _T();m_Show = _T(0);/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CJSQDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DAT

33、A_MAP(CJSQDlg)DDX_Text(pDX, IDC_M_EDIT, m_M);DDX_Text(pDX, IDC_SHOW_EDIT, m_Show);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CJSQDlg, CDialog)/AFX_MSG_MAP(CJSQDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_NUM0_BUTTON, OnNum0Button)ON_BN_CLICKED(IDC_NUM1_BUTTON, OnNum1Button)ON_BN_CLI

34、CKED(IDC_NUM2_BUTTON, OnNum2Button)ON_BN_CLICKED(IDC_NUM3_BUTTON, OnNum3Button)ON_BN_CLICKED(IDC_NUM4_BUTTON, OnNum4Button)ON_BN_CLICKED(IDC_NUM5_BUTTON, OnNum5Button)ON_BN_CLICKED(IDC_NUM6_BUTTON, OnNum6Button)ON_BN_CLICKED(IDC_NUM7_BUTTON, OnNum7Button)ON_BN_CLICKED(IDC_NUM8_BUTTON, OnNum8Button)O

35、N_BN_CLICKED(IDC_NUM9_BUTTON, OnNum9Button)ON_BN_CLICKED(IDC_FU7_BUTTON, OnFu7Button)ON_BN_CLICKED(IDC_BACKSPACE_BUTTON, OnBackspaceButton)ON_BN_CLICKED(IDC_CE_BUTTON, OnCeButton)ON_BN_CLICKED(IDC_FU6_BUTTON, OnFu6Button)ON_BN_CLICKED(IDC_C_BUTTON, Onclear)ON_BN_CLICKED(IDC_FU1_BUTTON, OnFu1Button)O

36、N_BN_CLICKED(IDC_FU2_BUTTON, OnFu2Button)ON_BN_CLICKED(IDC_FU3_BUTTON, OnFu3Button)ON_BN_CLICKED(IDC_FU4_BUTTON, OnFu4Button)ON_BN_CLICKED(IDC_EQUAL_BUTTON, OnEqualButton)ON_BN_CLICKED(IDC_KE1_BUTTON, OnKe1Button)ON_BN_CLICKED(IDC_SIN_BUTTON, OnSinButton)ON_BN_CLICKED(IDC_COS_BUTTON, OnCosButton)ON_

37、BN_CLICKED(IDC_TAN_BUTTON, OnTanButton)ON_BN_CLICKED(IDC_KE2_BUTTON, OnKe2Button)ON_BN_CLICKED(IDC_LN_BUTTON, OnLnButton)ON_BN_CLICKED(IDC_LOG_BUTTON, OnLogButton)ON_BN_CLICKED(IDC_KE3_BUTTON, OnKe3Button)ON_BN_CLICKED(IDC_KE4_BUTTON, OnKe4Button)ON_BN_CLICKED(IDC_MOD_BUTTON, OnModButton)ON_BN_CLICK

38、ED(IDC_FU5_BUTTON, OnFu5Button)ON_BN_CLICKED(IDC_M1_BUTTON, OnM1Button)ON_BN_CLICKED(IDC_M2_BUTTON, OnM2Button)ON_BN_CLICKED(IDC_MR_BUTTON, OnMrButton)ON_BN_CLICKED(IDC_MC_BUTTON, OnMcButton)ON_WM_CTLCOLOR()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CJSQDlg message handlersBOOL CJSQDlg:OnInitDialog()CDialog:OnI

39、nitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework doe

40、s this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CJSQDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();else

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号