基于VC++60的科学计算器实现.doc_第1页
基于VC++60的科学计算器实现.doc_第2页
基于VC++60的科学计算器实现.doc_第3页
基于VC++60的科学计算器实现.doc_第4页
基于VC++60的科学计算器实现.doc_第5页
免费预览已结束,剩余49页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要目前,科学计算器的应用非常广泛,从科研、生产、国防、文化、卫生、直到家庭生活,都离不开科学计算器的服务。通过使用科学计算器,避免了人工运算的繁琐,以及人工运算可能带来的较大误差和运算错误,给人们的运算带来了极大的方便。这篇文章主要介绍用软件的方法实现科学计算器系统,包括:科学计算器系统的概述,科学计算器系统的开发原理和主要实现的功能,子模块的设计和实现技术。其中,重点介绍了对话框、控件的使用,不调用库函数,通过计算方法的原理来实现函数计算。本系统需要实现以下功能:加、减、乘、除、余运算、倒数、乘方运算、开方运算、幂运算、对数运算、指数运算、正弦函数运算、余弦函数运算、正切函数运算、余切函数运算、反正弦函数运算、反余弦函数运算、反正切函数运算、反余切函数运算、排列组合运算和弧度与角度之间的转换,能输入正负数、小数,具有清零、退格功能,具有连续运算的能力。关键词:对话框、控件、计算方法ABSTRACTCurrently, the application of scientific calculator is very extensive. It can not be get away from the service of scientific calculator in the field of research, production, national defense, culture, hygiene, even family life. By using scientific calculator, the tedious artificial operation, the larger errors and operational mistakes, which are caused by artificial operation, can be avoided. It brings much convenience to peoples operation.This article mainly introduces a scientific calculator system implementing from the perspective of software. It includes the overview and developmental principle of scientific calculator system. It also contains the primary functions, which have been implemented, the design and implemental technology of sub-modules. Among them, it forces on introducing the usage of dialog box and controls as well as the implementation of mathematic function without using library function, but computing method. The system needs to achieve the following functions : adds, subtracts, multiplies, divides, the remainder operation, the countdown operation,radicand, power calculation, the log and index calculation, the operation of sine function, cosine function, tangent function, cotangent function, arc sine function, arc cosine function , arc tangent function and arc cotangent function, permutations and combinations operation, the conversion between radian and angle, the capability of inputting decimal, positive and negative numbers, the reset and backspace function, continuous operational capacity.Key words: dialog box, controls, computing method目 录摘 要IABSTRACTII第一章 科学计算器系统概述11.1 设计科学计算器系统的原由11.2 科学计算器的发展史11.3 Visual C+6.0简介2第二章 科学计算器系统的设计32.1 系统设计原理32.2 系统主要功能要求32.3 系统总体设计32.3.1 系统设计目标32.3.2 系统功能模块划分42.3.3 系统运行环境4第三章 科学计算器系统的实现53.1 对话框的实现53.1.1 对话框概述53.1.2主对话框、about对话框的创建53.1.3 消息对话框的创建63.1.4 加载菜单资源83.2 控件的实现83.2.1 静态文本控件83.2.2 文本编辑控件93.2.3 按钮控件93.2.4 单选按钮控件103.3 计算方法实现函数计算103.3.1 计算方法概述103.3.2 用计算方法原理实现sin运算113.3.3 调用库函数实现cos运算113.4 计算器功能的实现123.4.1 数字输入功能的实现123.4.2 退格功能的实现123.4.3 角度转换功能的实现143.4.4 连续计算功能的实现14第四章 系统运行效果与使用说明174.1 系统运行效果174.2 系统使用说明17第五章 系统的测试、运行维护与评价185.1 系统的测试185.2 系统的运行维护185.3 系统的评价18结 论19参考文献20致 谢21附 录2249第一章 科学计算器系统概述本章主要介绍了设计科学计算器系统的原由,科学计算器的发展史,以及编写科学计算器系统所用的Visual C+6.0的简介。1.1 设计科学计算器系统的原由人们在日常学习、工作和生活过程中,都少不了与“计算”打交道,从简单的加、减、乘、除法运算,乘方、开方运算,到复杂正弦、余弦、正切、余切运算,组合运算等,总会遇到许多关于计算方面的有问题,如:人工运算的繁琐,人工运算带来的较大误差以及人工运算造成的运算错误等。为了解决以上问题,便用软件方法设计了科学计算器系统。通过使用本系统,只需要进行简单的输入,即可得到相应的结果,给人们的运算带来了极大的方便。1.2 科学计算器的发展史1666年,在英国Samuel Morland发明了一部可以计算加数及减数的机械计数机。1673年, Gottfried Leibniz 制造了一部踏式(stepped)圆柱形转轮的计数机,叫“Stepped Reckoner”,这部计算器可以把重复的数字相乘,并自动地加入加数器里。1694年,德国数学家,Gottfried Leibniz ,把巴斯卡的Pascalene 改良,制造了一部可以计算乘数的机器,它仍然是用齿轮及刻度盘操作。1775年,The third Earl of Stanhope 发明了一部与Leibniz相似的乘法计算器。1893年,第一部四功能计算器被发明。1931年,Vannever Bush 发明了一部可以解决差分程序的计数机,这机器可以解决一些令数学家,科学家头痛的复杂差分程序。1935年,IBM (International Business Machine Corporation) 引入 IBM 601”,它是一部有算术部件及可在1秒钟内计算乘数的穿孔计算机器。 它对科学及商业的计算起很大的作用。总共制造了1500 部。1937年,Alan Turing 想出了一个 “通用机器(Universal Machine)” 的概念,可以执行任何的算法,形成了一个“可计算(computability)”的基本概念。Turing 的概念比其它同类型的发明为好,因为他用了符号处理(symbol processing) 的概念。1939年11月,John Vincent Atannsoff 与 John Berry 制造了一部16位加数器。它是第一部用真空管计算的机器。1939-40年,Schreyer 完成了用真空管的10位加数器,以及用氖气灯(霓虹灯)的存贮器。1940年1月,在 Bell Labs, Samuel Williams 及Stibitz 完成了一部可以计算复杂数字的机器,叫“复杂数字计数机(Complex Number Calculator)”,后来改称为“断电器计数机型号I (Model I Relay Calculator)” 。它用电话开关部分做逻辑部件:145个断电器,10个横杠开关。数字用“Plus 3BCD”代表。 1941年夏季,Atanasoff及Berry完成了一部专为解决联立线性方程系统(system of simultaneous linear equations) 的计算器,后来叫做“ABC (Atanasoff-Berry Computer)”,它有60个50位的存贮器,以电容器(capacitories)的形式安装在2个旋转的鼓上,时钟速度是60Hz。1941年2月,Zuse 完成“V3”(后来叫Z3),是第一部操作中可编写程序的计数机。它亦是用浮点操作,有7个位的指数,14位的尾数,以及一个正负号。存贮器可以贮存64个字,所以需要1400个断电器。它有多于1200个的算术及控制部件,而程序编写,输入,输出的与 Z1 相同。1943年1月 Howard H. Aiken完成 “ASCC Mark I”(自动按序控制计算器 Mark I ,Automatic Sequence - Controlled Calculator Mark I),亦称“Haward Mark I”。这部机器有51尺长,重5顿,由 750,000部份合并而成。它有72个累加器,每一个有自己的算术部件,及23位数的寄存器。 1946年,第一台电子数字积分计算器(ENIAC)在美国建造完成。 1949年,英国建造完成延迟存储电子自动计算器(EDSAC) 1952年,第一台“储存程序计算器”诞生。1959年,第一台小型科学计算器IBM620研制成功。 1.3 Visual C+6.0简介Visual C+6.0是微软公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT)的、面向对象的可视化集成工具。它的最大优点就是提供了功能强大的MFC类库,MFC(Microsoft Foundation Class)是一个很大的C+类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。本科学计算器系统就是使用Visual C+6.0编写的应用程序。第二章 科学计算器系统的设计本章主要介绍了科学计算器系统的设计原理,科学计算器系统的主要功能要求,以及科学计算器系统总体的设计。2.1 系统设计原理利用VC+6.0中的应用程序向导(AppWizard)工具创建Windows应用程序。AppWizard在创建新项目时提供了应用程序框架,自动生成框架程序的源文件,用户不必从开头开始编写代码就能很快地构建出程序原型。在AppWizard提供的应用程序框架的基础上,进行创建对话框,丰富用户界面,添加控件等操作,然后为所建好的用户界面增加响应消息,以及完成运算所需要的代码。2.2 系统主要功能要求本系统需要实现以下功能:加、减、乘、除、余运算、倒数、乘方运算、开方运算、幂运算、对数运算、指数运算、正弦函数运算、余弦函数运算、正切函数运算、余切函数运算、反正弦函数运算、反余弦函数运算、反正切函数运算、反余切函数运算、排列组合运算和弧度与角度之间的转换,能输入正负数、小数,具有清零、退格功能,具有连续运算的能力。2.3 系统总体设计主要包括科学计算器系统的设计目标,科学计算器系统的功能模块划分,以及科学计算器系统的运行环境。2.3.1 系统设计目标(1)能熟练使用vc+6.0编写完成各种运算程序,实现要求的各种功能,并且其中的某些运算,不调用库函数,自己编写实现。(2)能做到使该计算器使用起来简单、方便,让初次使用者对计算器的功能一目了然,轻松、容易的上手。(3)使计算器的界面做得简洁美观,有新意。 2.3.2 系统功能模块划分(1)对话框的实现:主对话框、about对话框的创建,消息对话框的创建,加载菜单资源。(2)控件的实现:静态文本控件,文本编辑控件,按钮控件,单选按钮控件。(3)计算方法实现函数计算:用计算方法原理实现sin运算, 调用库函数实现cos运算。(4)计算器功能的实现:数字输入功能的实现,退格功能的实现,角度转换功能的实现,连续计算功能的实现。2.3.3 系统运行环境系统是在VC+6.0环境下开发的,在Windows98/Windows2000/Windows NT/Windows XP平台下运行均可。第三章 科学计算器系统的实现本章主要介绍了科学计算器中对话框的实现,控件的实现,计算方法实现函数计算,以及科学计算器功能的实现。3.1 对话框的实现主要包括对话框概述,主对话框、about对话框的创建,消息对话框的创建,以及加载菜单资源的方法。3.1.1 对话框概述对话框是Windows应用程序中使用得最多的用户界面对象,大部分用户输入是从对话框中获取的。比如,用户在对话框上的文本框中输入文本,从列表框或组合框中进行选择,选择单选按钮或勾选复选框,单击按钮进行确认或取消操作。对话框为用户提供了一种标准途径来处理程序数据。因为大部分对话框在响应菜单项选择的时候出现,所以对话框也可以视为菜单命令的延伸。从编程的角度来看,开发人员必须记住的一点是对话框和通用控件都是窗口。所有的对话框和对话框控件都是CWnd的派生类,这就意味着对窗口能做的任何事情,对对话框或通用控件都适用。比如,他们都可以改变大小、移动、隐藏等。利用CWnd提供的大量函数,开发人员可以很方便地操作对话框和对话框控件。我们设计对话框的目的就是向对话框中添加和布置合适的控件,以实现与用户交互的功能。当我们决定创建对话框时,还必须确定对话框的模态。对于开发人员来说,这意味着在创建和取消对话框的两种函数之间选择一种。而对用户而言,对话框的模态特性决定激活对话框时应用程序的其他动作是否可以执行。模态对话框以一种排他的方式工作,当模态对话框出现时,虽然用户可以看到应用程序的其他界面对象,比如主窗口、菜单、工具栏等,但不能与这些对象交互。模态对话框还可以分为两种:应用程序级的和系统级的。对于应用程序级的模态对话框,用户还可以与其他应用程序交互。而Windows系统级的模态对话框取消了多任务,对于开发人员而言,要关心的主要是应用程序级的模态对话框。非模态对话框则以非排它的方式工作。出现这种对话框后,用户还可以与应用程序其他界面对象交互。3.1.2主对话框、about对话框的创建在VC+6.0中创建对话框一般分为4个步骤:(1)首先用户资源管理器创建一个对话框模板,以确定将哪些控件放入对话框并且设置控件的属性。(2)第二步要利用ClassWizard(类向导),根据对话框模板创建一个Cdialog的派生类。(3)第三步要编写一些创建对话框的代码,通常在响应某个菜单项或者工具栏按钮时出现对话框。(4)第四步则是要为对话框上的控件增加响应的消息处理,以及为对话框增加初始化代码。新创建好的主对话框如图3-1所示:图31 主对话框新创建好的about对话框如图3-2所示:图32 about对话框3.1.3 消息对话框的创建在编程应用的时候,常常利用消息对话框显示消息,或者利用消息对话框帮助程序调试。常用的消息对话框有两个:(1)MessageBoxWindows的API函数MessageBox()用来创建、显示和操作一个消息框。消息框包含根据应用程序定义的消息内容、消息框标题以及预定义的按钮、图表。消息框的函数定义如下:int MessageBox(HWND hWnd,/父窗口句柄,可以设置为NULL LPCTSTR lpText,/消息框中的文本 LPCTSTR lpCaption,/消息框标题 UINT uType/消息框样式);(2)AfxMessageBox()AfxMessageBox()实际上是对API函数MessageBox()的封装。他有两种定义形式:形式1:int AfxMessageBox(LPCTSTR lpszText, UINT nType=MB_OK, UINT nlDHelp=0);形式2:int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType=MB_OK, UINT nlDHelp=(UINT)-1);参数nType和上面的MessageBox()中的nType含义和取值都一致。所不同的是,对于第一种形式,lpszText是消息框的内容,而消息框的标题将由MFC框架取为主应用程序名。对于第二种形式,消息框的内容以nIDPrompt为ID号,从符号表(一种资源)中获得ID所对应的字符串。NIDPrompt是和应用程序相关的帮助信息ID。AfxMessageBox()最经常的用法是只输入一个参数:AfxMessageBox(注意:除数不能为0!);消息对话框如图3-3所示:图33 消息对话框3.1.4 加载菜单资源菜单资源建立后,需要将其添加到计算器对话框上。利用CMenu类的LoadMenu函数,将菜单资源加载到内存中。再调用SetMenu函数,将菜单填加到对话框上。实现代码如下:m_Menu=new CMenu;m_Menu-LoadMenu(IDR_MENU);/加载菜单资源模板SetMenu(m_Menu);/将菜单增加到对话框菜单资源如图3-4所示:图34 菜单资源3.2 控件的实现包括静态文本控件的实现,文本编辑控件的实现,按钮控件的实现,以及单选按钮控件的实现。3.2.1 静态文本控件静态文本(Static Text)控件主要起说明、显示文本信息和装饰的作用。静态文本控件本系统中主要用于装饰。静态文本控件如图3-5所示:图35 静态文本控件3.2.2 文本编辑控件文本编辑(Edit Box)控件是一种传统控件,实际上是一个简易的正文编辑器,用户可以在编辑框中输入并编辑正文。文本编辑框既可以是单行的,也可以是多行的,多行编辑框的编号是从零开始编辑的。在一个多行编辑框中,除了最后一行外,每一行的结尾处都有一对回车换行符,这对回车换行符是正文换行的标志,在屏幕上不可见。在本系统中,文本编辑控件主要用于数据的输出显示,不需要进行输入,因此在样式中设置为“只读”,排列文本设置为“靠右”。文本编辑控件如图3-6所示:图36文本编辑控件UpdateData(false)函数用于把用户输入的数据拷贝到对话框类的成员中去,本系统中用于把用户输入的数字和符号,在静态文本控件上显示出来。实际上是通过数据交换函数:void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_x);其中的DDX_Text函数,将用户通过控件输入的数据,由m_x传递给静态文本控件IDC_EDIT1显示出来。3.2.3 按钮控件按钮的作用是对鼠标的单击或双击做出反应并触发相应的事件,在按钮中既可以显示文本,也可以显示位图。响应鼠标对按钮的单击,是通过添加消息BN_CLICKED实现, 响应鼠标对按钮的双击,是通过添加消息BN_DOUBLECLICKED来实现。本系统中,主要通过单击按钮输出数据,供程序计算并由静态文本控件显示。按钮控件如图3-7所示:图37 按钮控件3.2.4 单选按钮控件单选按钮控件一般都是成组出现的,具有互斥的性质,即同组单选按钮中只能有一个是被选中的。单选按钮是一种特殊的按钮,它有选择和未选择两种状态。当单选按钮处于选择状态时,会在圆圈中显示一个黑色的实心圆。通过ClassWizard(类向导)为单选按钮添加一个类型为int的成员(本系统中使用m_rora)。虽然对话框上有多个单选按钮,但ClassWizard只允许我们添加一个成员变量。m_rora以一个整型值表示用户选择了单选按钮中哪个按钮,第一个按钮的索引值从0开始。为了在显示对话框时默认选中第一个按钮,在对话框的构造函数中将m_rora置为0,即m_rora=0。单选按钮控件如图3-8所示:图38 单选按钮控件3.3 计算方法实现函数计算包括计算方法的概述,用两种方法实现函数计算,即用计算方法原理实现sin运算、调用库函数实现cos运算。 3.3.1 计算方法概述计算方法是随着计算机产生发展而建立的一个重要的数学分支,其性质是研究建立应用计算机解决各种数学问题的数值计算方法与理论;任务是提供计算机上实际可行的、理论可靠的,计算复杂性好的各种常用算法;内容主要包括误差理论,方程求根,线性方程组求解,差值方法,数值积分,微分方程数值解法等。计算方法既具有理论上的高度抽象性与严密逻辑性,又具有应用的广泛性和高度技术性。3.3.2 用计算方法原理实现sin运算sin函数的实现,是用泰勒展开式算到double精度范围内。sinx=求和n从0到正无穷(-1)n/(2n+1)!*x (2n+1) 即:sinx=x-x3/3!+x5/5!-x7/7!+程序实现:x=fmod(x,2*PI);m_result=x;a=1;for(n=1;n0;i-)b*=i;for(j=2*n+1;j0;j-)c*=x;m_result+=(a/b)*c;其中,PI是圆周率,x为角度,函数fmod(x,2*PI)是求x在0到2之间的角,因为sin函数的周期是2。a=-a实现(-1)n,b*=i实现(2n+1)!, c*=x实现x (2n+1),最后由m_result+=(a/b)*c算出sin函数值。3.3.3 调用库函数实现cos运算调用库函数,能很方便的计算出cos函数的值。cos等函数的计算多包含在Math.h头文件中,若要使用,必须在程序开头加入文件包含语句#include Math.h。程序实现:if(m_rora=0)m_result=cos(m_first);else if(m_rora=1)m_result=cos(m_first/(180/PI);3.4 计算器功能的实现包括数字输入功能的实现,退格功能的实现,角度转换功能的实现,以及连续计算功能的实现。3.4.1 数字输入功能的实现为了实现数字输入功能,需要定义一个变量m_nonce保存输入的数字。当输入数字时,如果输入的是整数部分,即小数点没有按下,则只需要把原数字*10加上输入的数字,就能得到需要的数;如果输入的是小数部分,即小数点已经按下,就需要知道输入的数字需要插入到小数点后的位置,可以通过变量m_noncew记录小数点后有多少位,每输入个数字,小数部分m_noncew加1,通过调用pow函数,将输入的数插入到小数的末位的后面,完成数据的输入。程序实现:void CCalculatorDlg:InputNum(int x)/输入数字m_noncey=true;/当前操作数为有效if(m_noncep=false)/输入的是整数部分m_noncez*=10;m_noncez+=x;else/输入的是小数部分m_noncew+;m_noncex+=pow(10,(-1)*m_noncew)*x;/用pow()函数计算所输入的位置输入m_nonce=m_noncef*(m_noncez+m_noncex);m_x=m_nonce;UpdateData(false);3.4.2 退格功能的实现当输入数的时候,末尾输入错误时,就需要用到退格的功能。退格时,当输入的是整数部分,如果整数部分小于10,则数置为0,如果大于10,则去掉个位,原数除以10即可;当输入的是小数部分,如果此时小数部分只有一位,那么直接将小数部分置0,小数点标记m_noncep置为无效,如果小数部分不止一位,则将小数转换成相应的整数,去掉个位,再转换成小数,如:小数0.133转换成整数133,去掉个位3得13,再转换成小数0.13即可。程序实现:void CCalculatorDlg:OnBack()/退格if(m_noncey=false)m_x=m_first;UpdateData(false);else if(m_noncep=false)/输入的是整数部分if(m_noncez 1000#pragma once#endif / _MSC_VER 1000#include Math.h#define PI 3.14159265358979323846/ CCalculatorDlg dialogclass CCalculatorDlg : public CDialog/ Constructionpublic:CCalculatorDlg(CWnd* pParent = NULL);/ standard constructor void InputNum(int x);/输入数字void InputFun(int x);/输入运算符private:CMenu *m_Menu; /对话框菜单按钮double m_first,m_second,m_nonce;/记录第一、第二个、及当前操作数bool m_firsty,m_secondy,m_noncey;/记录第一、第二个、及当前操作数是否有效double m_noncez,m_noncex;/记录当前操作数的整数、小数部分int m_noncew;/记录当前操作数小数部分的位数int m_noncef;/标识当前操作数是否是负数bool m_noncep;/标识当前操作数是否按下了小数点符号,即是否输入的是小数部分int m_fun;/记录运算符double m_result;/记录结果double m_save;/保存结果bool m_savey;/记录保存结果是否有效/ Dialog Data/AFX_DATA(CCalculatorDlg)enum IDD = IDD_CALCULATOR_DIALOG ;CEditm_xedit;/传递控制数据doublem_x;/传递文本数据intm_rora;/标识当前操作数是弧度还是角度(0弧度,1角度)/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CCalculatorDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support /数据交换函数/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CCalculatorDlg)virtual BOOL OnInitDialog();/虚函数,可覆盖用来进行用户初始化操作afx_msg void OnPaint(); /响应消息ON_WM_PAINTafx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnAbout();afx_msg void OnCE();afx_msg void OnBack();afx_msg void On1();afx_msg void On2();afx_msg void On3();afx_msg void On4();afx_msg void On5();afx_msg void On6();afx_msg void On7();afx_msg void On8();afx_msg void On9();afx_msg void On0();afx_msg void OnPoint();afx_msg void OnMinus();afx_msg void OnAdd();afx_msg void OnSub();afx_msg void OnMul();afx_msg void OnDiv();afx_msg void OnSurplus();afx_msg void OnExtract();afx_msg void OnReciprocal();afx_msg void OnAmount();afx_msg void OnSin();afx_msg void OnCos();afx_msg void OnTan();afx_msg void OnCot();afx_msg void OnArcco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论