摘要本系统为学生成绩管理系统。采用的开发工具是 C++运行环境。 使用的技术有:数据库的访问;系统的查询。学生成绩管理系统是一个教育单位不可缺少的部分,使用计算机对学生成绩进行管理,具有手工管理所无法比拟的优点。例如检索迅速、查找方便、运行速度快、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生成绩管理的效率,也是企业的科学化、系统化、网络化、正规化管理的重要途径。信息管理系统(MIS)是进行信息的采集、存储、加工、使用、维护和使用的系统,它是随着管理科学和技术科学的发展而形成的。学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理,这种管理方式存在着许多缺点,如:效率低、保密性差,可操作性低,另外时间一长,将产生大量的文件和数据,这对于查找、更新、储存和维护都带来了不少的困难。 现在有一个趋势,编译器厂商试图把其特有的“对象模型”和图形界面(GUI)细节推销给用户。比如微软的COM和Inprise的类属性“properties”。对于用户来说,这既不必要,也不情愿。我所希望看到的程序库,应该是用标准C++打造,界面灵活,值得信赖的程序库。通常,这些界面应该是平台无关的。C++的表达能力极强,即使不使用大量的宏,也应该足以达成这一要求。就算有些地方无法百分之百的遵守这一原则,也应该将对于平台和厂家的依赖性限制起来。这个目标的完成情况,可以反映软件工具产业对于应用程序开发行业的关注程度。我感觉目前对于那些独立的、跨平台厂商来说,并不存在相应的市场。如果能够建立这样的市场,也许能够促进厂商们为客户做出“真正有用的”产品。关键词:学生、成绩、查询、管理。前言随着计算机技术的飞速发展,计算机在日常管理中应用迅速得到了普及,不久的将来将成为人们生活中不可或缺的一部分,利用计算机进行学生成绩信息的管理势在必行。本系统结合当前学校的实际,经过实际的需求分析,采用功能强大的C++作为开发工具而开发出来的单机版学籍管理系统。该系统适用性强,可操作性强,简单易行。 整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,该系统定义添加、插入、查找、统计、删除、排序、修改成员函数,定义学生类数组和定义一个整型全局变量来记录学生,形成顺序表。插入,删除用顺序表的运算来实现,把姓名和学号都定义为String类变量有利于同时查找,排序使用冒泡法排序,打印姓名不为空的学生来做统计,输入姓名查询出学生后再重新给此学生成绩赋值来实现修改。经过实际使用证明,本文所设计的学生成绩管理系统可以满足学校学生成绩管理方面的需要。学生成绩管理系统的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,操作麻烦,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,比手工管理有着无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套成绩管理软件成为很有必要的事情,在下面的各章中我们将以开发一套学生成绩管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。下面就让我们开始正文的介绍。第一章 系统的概述系统概述:本系统为学生成绩管理系统,是一个具有综合性学校学生成绩管理系统,它集成了学生成绩的添加,学生成绩的查询,学生成绩的统计,学生的成绩的排序,修改与删除等多种功能,其开发主要包括数据库的建立和维护及查询,修改,排序,统计等功能的实现,因而具有较强的实用性,先进性和可操作性。1,1系统及其需求分析1,1,1系统需求对于一个综合性较强的学校,我校是专科本科于一体的多层次,多功能,综合型学校,未来的几年我学院将更进一步的发展,全院的所有成员都在为学院的更上新台阶而努力奋斗着,2007年通过教育部专家组的检查评估,我院(郑州经济管理干部学院)和纺专已经联合升本——河南工程学院,成为河南省普通本科学校.到目前到止,学校对学生成绩的管理工作仍然是以电子表格Excel2000为主,由于近几年学校的快速发展,招生规模原来越大,在校学生已达到几万多人,这样学生成绩管理,特别是查找学生,学生统计,学生的修改,删除,排序等带来一定的操作性困难,也给我校老师带来了很多的麻烦,教务处管理员急切希望开发出符合我校实际的学生成绩管理系统.通过调查分析,要求该系统具有以下功能:由于操作人员的计算机操作水平相对较差,要求有良好的人机界面.由于该系统的使用要有数据安全性,要求有较好的用户权限管理.原始数据的处理,简单方便.方便的数据查询,支持多条件查询.方便数据输出报表的打印.数据主要计算自动完成,尽量减少人工干预.1,1,2可行性分析目的:可行性研究的目的是以最小的代价在尽可能的时间内确定问题是否能解决.能及时的有效的操作,为操作者带来更大的便利,节省更多的时间,尽可能的使操作人性化,简单化,高效化。通过课程设计培养了我的动手能力以及综合运用所学的C++语言基础理论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。经济上的可行性:由于现在我校为各办公室配备了微机,而且用于学生成绩管理的微机都是P4级的机器,在存储量,速度方面都能满足数据库运行的要求.利用这个系统也可以节省不必要的开支。技术上的可行性:由于本系统管理的对象实体是:学生成绩的删除,修改,查询,替换,统计等,他们之间通过学生可以联系起来,涉及的计算过程不是很复杂,在技术难度方面,由于有指导老师的指导和图书馆有丰富的相关参考文献,特别是网上资料丰富,参考一些功能模块程序的设计的系统语言几代码,以及这些年来我从事C/C++中学习的知识以及自己的实际操作经验总结,本系统目标的实现是完全可以的.本系统的设计是在C++中文版环境下,使用C/C++开发成功.它可运行于C++相关平台的数据库开发系统.C++它不仅可以简化数据库管理,而且应用程序的开发流程更为合理;它使组织数据,定义数据库规则和建立应用程序等工作变行简单易行,用户可以快速地创建表单,查询,修改和统计学生的信息.1,2系统设计背景21世纪以来,人类经济高速发展,人们的生活发生了日新月异的变化,特别是计算机的应用及普及;已经深入到政治,经济,生活的各个领域,便人们从过去繁复的手工劳动中得以解脱.科学技术的发展决定了我们必须利用网络,利用科技来解决显示生活中许多问题,学校信息管理系统软件为学校学生成绩管理部门带来了极大方便;因此,开发一套完善的学生学籍管理系统显得尤为必要.1,3系统功能简介本系统适用于大中专院校,其功能主要分为五大类:系统维护:维护系统的正常运行和安全性设置,包括数据备份,数据恢复,信息的查询,修改,删除和统计等.数据处理:用于对插入学生,查找学生,删除学生及删除信息等数据录入,是数据查询,报表的主要数据来源.第二章 怎样开发一个学生成绩管理系统 编程环境的选择C/C++应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。C/C++语言提供了简单的语言运行环境,利用这些代码可用于设计界面和实现各种功能,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统C/C++是一个相对较好的选择。 关系型数据库的实现Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。 二者的结合(DBA)微软的JET数据库引擎提供了与数据库打交道的途径,我们是通过它以及c++在面向Internet的编程中却无任何优势可言.跨平台的电子商务软件最害怕顾及各种平台之间的天差地别的系统调用,最害怕时不时的由于内存泄漏而的优势在这里却成为了劣势.即使在windows平台上开发基于windows dna的solution。DATA 控件在数据库中的信息与将信息显示给用户看的C++程序之间架起了一座桥梁。我们可以设置DATA控件的各个属性,告诉它要调用那个数据库的哪个部分。缺省情况下,DATA控件根据数据库中的一个或多个数据表建立一个dynaset-type(动态集合)类型的记录集合。一个记录集合是动态的也就意味着,当原来的数据表中的容改变了以后,该记录集合中的记录也会随之改变。DATA控件还提供了用来浏览不同记录的各种跳转按钮。将DATA控件放置在窗体中之后,我们还必须在该控件与要处理的数据库之间建立联系。第三章 C++语言的及其编程环境3.1 C++语言概述C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。 另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。 C++语言发展C++语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员 C++的设计原则• C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 • C++设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 • C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 • C++设计成尽可能与C兼容,籍此提供一个从C到C++的平滑过渡。 • C++避免平台限定或没有普遍用途的特性。 • C++不使用会带来额外开销的特性。 • C++设计成无需复杂的程序设计环境。3. 4 C++的Hello World程序在使用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显示“Hello, world!”然后结束运行: (事实上这并不是符合98标准[ISO C++]的C++程序,而且在多数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,应将iostream改为)#include
毕业论文里的代码可以有背景色。根据查询相关公开信息显示,毕业论文里的代码可以从编译器进行直接的截取,保留有编译器所附带的底色进行使用。论文是一个汉语词语,古典文学常见论文一词,谓交谈辞章或交流思想。
相关论文:Vc++下如何利用Matlab工具箱进行数字信号处理摘要: 本文详述了在Vc环境下如何利用Matlab工具箱进行数字信号处理,全文以Matlab工具箱中功率谱密度分析函数为例,介绍了通过Matlab自带的引擎、Matlab自身的编译器以及利用MathTools公司的Matcom进行对工具箱函数的调用。 关键词:Matlab M-文件 引擎 编译器 Matcom Vc++Matlab的信号处理工具箱是信号算法文件的集合,它处理的基本对象是信号与系统,信号处理工具箱位于目录、Toolbox\Signal下,利用工具箱中的文件可以实现信号的变换、滤波、谱估计、滤波器设计等。在其它的环境如Vc下如果能调用Matlab工具箱中的文件,会大大地加快一些算法的实现,同时其可靠性也很高。利用Matlab引擎 Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数: engOpen, engGetArray, engPutArray, engEvaString, engOutputBuffer ,engClose与客户机进行交互。下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框 .cpp文件中加入”” 和“” 头文件,下面给出部分程序清单。Void CtestmatlabDlg::OnMatlabEngine(){Engine *ep;mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL;double datax[1024];char buffer[1024];for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要{double samt=(double)(); datax[j]=sin(**samt**);}double *pPxx,*pFxx;if(!(ep=engOpen(" \0"))){//打开Matlab引擎,建立与本地Matlab的连接fprintf(stderr,"\n Can't start MATLAB engine\n");exit(-1);} double Fs[1]={1024};//因为Matlab所有参与运算的参数都是矩阵的形式,因而下列几行将参数转变double nfft[1]={1024};//成Matlab可接受的矩阵形式。T=mxCreateDoubleMatrix(1,1024,mxREAL);mnfft=mxCreateDoubleMatrix(1,1,mxREAL);mFs=mxCreateDoubleMatrix(1,1,mxREAL);mxSetName(T,"T");mxSetName(mnfft,"mnfft");mxSetName(mFs,"mFs");memcpy((char*)mxGetPr(T),(char*)datax, 1024*sizeof(double));memcpy((char*)mxGetPr(mnfft),(char*)nfft, sizeof(double));memcpy((char*)mxGetPr(mFs),(char*)Fs,1*sizeof(double));engPutArray(ep,T); //将转化的参数放入引擎中,此时可在Matlab command窗口下查看此参数engPutArray(ep,mnfft); engPutArray(ep,mFs);engEvalString(ep,"[pxx,fo]=psd(T,mnfft,mFs);"); //利用引擎执行工具箱中文件engOutputBuffer(ep,buffer,512); //如只想看显示图形,可将返回参数去掉,psd无返回参数缺省情况下会自动画图形result=engGetArray(ep,"pxx");//取出引擎中的数据放在所指的区域中供后续处理pPxx=mxGetPr(result); result=engGetArray(ep,"fo");pFxx=mxGetPr(result);engEvalString(ep,"plot(fo,10*log10(pxx));");//利用引擎画图engEvalString(ep,"title('功率谱分析');");engEvalString(ep,"xlabel('Hz');");engEvalString(ep,"ylable('db');");mxDestroyArray(T); //释放内存mxDestroyArray(mFs);mxDestroyArray(mnfft);mxDestroyArray(result);engEvalString(ep,"close;");engClose(ep);}上述程序在Vc下编译需要将 和两个动态库利用以下的命令:lib/def:<自己的Matlab的安装路径,下同>e:\ Matlab\extern\include\*.def /machine:ix86 /out:*.lib来生成程序所需的静态连接库和,将和所在的目录加入Vc++ project/link/object/library modules下即可。利用Matlab自身的编译器调用工具箱中的函数 Matlab的编译器可将Matlab的M文件转换为为C或C++的源代码以产生完全脱离Matlab运行环境的独立的运用程序,但Matlab本身的资料说明编译器如用来建立独立的运用程序,不能调用Matlab工具箱中的函数,这非常不利于搞一些特殊的算法。本人研究了一段时间发现,工具箱中的函数既然是M文件就一定可以用编译器来编译,以提供如Vc的调用函数,但是编译器只能编译一个独立的M文件,即这个 M文件不依赖于其他的M文件。如果M文件中又调用了其他的M文件,可将被调用的M文件拷贝到调用M文件的相应位置,作适当的改动就可以用于编译器编译。编译器不支持图形函数,所以M文件中如有图形函数需注释掉。当Matlab的编译器mcc加入适当的参数-e(mcc –e *.*)或-p(mcc –p *.*)就可生成将输入的M文件转换为适用于特定运用的C或C++源代码。这样如果要在Vc下编译通过,还需连入以下几个库, , , . . 以及Matlab C MATH库,建议采用前述的方法将动态连接改为静态连接。对于C/C++编译环境的设置,在Matlab command窗口下运行mex –setup 然后依提示操作,而对于C/C++连接环境的设置,运行mbuild –setup依提示操作即可。下面给出利用编译器将Matlab工具箱中文件生成可供Vc调用的函数。将文件拷贝一份至Matlab\bin目录下,改写相应调用的M文件如, 等。为生成的代码简洁,对于采集数据处理输入参数很明了的情况下可作大量的删减,最终使成为一个不依赖于其他M文件的独立的M文件,注意千万注释掉作图代码,最终改成如下形式,限于篇幅给出关键的几步: function [Pxx,f]=psd(Fs,nfft,noverlap,x)window=o,5*(1-cos(2*pi*(1:nfft)’/(nffft+1)));//hanning 窗dflag=’none’;window=window(;)………………………………….以上只要稍懂Matlab语言和信号处理知识就可完成这项工作。假设上述代码重新存为,在Matlab command 窗口下设置好环境参数运行mcc –e testwin,则可在Matlab\bin下生成 ,如运行mcc –p testwin 则生成. Vc下建立一个基于对话框的文件,然后在对话框里加一个Button控件OnButtonPsd 将上述生成的.c文件的头文件加入到工程的.cpp中,且将#ifdef_cplusplus extern “c”{#end ifc代码声明加入Vc的包含文件和生成的.C的包含文件之间将#ifdef_cplusplus}#end if加入.cpp文件未尾为了简洁且便于处理将生成的c函数稍改动,给出部分代码如下: void CTestpsdwinDlg::OnButtonPsd(){mxArray* x_rhs_;//指向采集数据存放区Fs=23510;//数据采集的频率 nfft=1024;//1024点的fftdouble datax[1024]//采集的数据x_rhs_mxCreateDoubleMatrix(1,1024,mxReal);memcpy(mxGetPr(x_rhs_),datax,1024*sizeof(double));noverlap=512;……………….……………….mccCopy(&Pxx,&Spec);mccCopy(&f,&frevgg_vector);for(int j=0;j<(int)(nfft/2+1);j++){datap[j]=mccGetRealVectorElement(&Pxx, (j+1));//功率谱密度存于datap[]数组dataf[j]=mccGetRealVectorElement(&f, (j+1));//相应频率存于数组dataf[]中}mccFreeMatrix(&Pxx);……………….SendMessageBox(WM_PAINT,0,0);//利用Vc下的图形函数画图Return;}如上生成的程序可读性不太好,而生成的c++代码则可读性较好,但千万注意只能用 Matlab的MATH库,不可用c++的MATH库,否则编译会出错,限于篇幅在此不述。3)利用Matcom调用工具箱中的函数Matcom编译M文件,先将M文件按照与Matcom的cpp库的对应关系翻译为cpp源代码,然后用对应版本的c编译器将cpp文件编译成相应的exe或dll文件,所以第一次运行要指定c编译器的路径,否则无法编译,指定好的编译信息就写在Matcom\bin\文件中,不过这一步按装matcom时,它自动寻找编译器并将其写入文件中,版中使用 OCX控件,因而它支持图形操作。我们依然用上述的文件,不要将图形函数注释掉,利用Mideva来生成可被Vc调用的信号处理程序。运行Mideva在主界面上直打开M文件,在菜单中选择compile to dll,输入testwin..在Matcom debug目录下可以找到这样的几个文件, ,等。 将上述和加入工程中,project/add to project/files并且在相应的文件中加入”” 加连接库:Tools\option\directory\ , 选include选项,加入e:\matcom45\lib (包含) library选项,加入e:\matcom45\lib4) project\add to project\files 文件类型选项选(.lib)将e:\matcom45\lib\加入工程中编译运行。相应代码如下:void CtestmatcomDlg::OnpsdButton(){double datap[512],dataf[512];initM(MATCOM_VERSION);//初始化matcom库Mm Fs,nfft,noverlap;//创建矩阵Mm x=zeros(1,1024);Fs=1024;nfft=1024;noverlap=128;dMm(Pxx_o);dMm(f_o);//创建并命名矩阵datax[];//数据采集的数据存于此数组中for(int i=1;i<=1024;i++){(1,i)=datax[i+1];//给x阵赋值}testwin(Fs,nfft,noverlap,x,i_o,Pxx,f_o);//matcom生成的函数for(i=0;i<513;i++){//取出功率谱密度分析结果dataf[i]=(i+1,1);datap[i]=(i+1,1);}exitM();return;}可见利用Matcom进行M文件转换非常的容易,生成的代码可读性很好,以上的转换同时生成了可供Vc调用的动态连接库,其使用和一般的动态库一样使用。同时需指明Matcom不仅可转换独立的不依赖于其它M文件的M文件,同时可转换调用其它M文件的M文件嵌套。条件是这此M文件在同一个目录下面,如前所述的可直接用上述方法转换,生成了多个重载形式的psd函数结论: 利用Mtlab引擎调用工具箱中的函数可节省大量的系统资源,应用程序整体性能较好,但不可脱离Matlab 的环境运行。用Matlab编译器进行工具箱函数的调用,须转换相应的M文件使其成为独立的M文件,且不支持图形函数,转换的代码可读性不太好。用Matcom 进行转换非常方便,生成的代码可读性很好,支持图形函数,且代码执行的速度比不转换平均要快倍以上。以上程序在Vc++ 中调试通过,以上方法在工程实践中已得到很好的运用。仅供参考,请自借鉴希望对您有帮助
使用的是 "<>" 尖括号的话,表示让编译器在系统头文件夹中查找对应名字的头文件,当使用""""引号时,就是让编译器在当前程序目录下查找对应名字的头文件,如果没有找到,则编译器会再在系统头文件夹中查找该头文件.所以,这里,你应该把#include <>改为#include ""还有,你上面的程序的写法是不标准的,(但是能通过许多编译器)应该这么写#include
第一章 绪 论 §1-1 课题研究的背景 §1-2 信号与系统分析国内外研究现状 §1-3 Matlab概述§1-4 课题研究的目的及意义 §1-5 论文主要内容及结构 第二章 MATLAB在信号与系统分析中的应用 §2-1 信号与系统分析2-1-1 国内外关于该课题的研究现状及发展趋势 2-1-2 信号与系统分析方法分类 §2-2 Matlab在信号与系统分析中应用的简介§2-3 本章小结 第三章 Matlab在信号与系统分析中应用模型设计 §3-1 引言 §3-2 系统分析 §3-3 模型建立(是本章重点需要扩充) 第四章 (具体实例实现) §4-1 §4-2 §4-3 实验结果分析 §4-4 本章小结 第五章 结束语 参考文献 致 谢 最好找本MATLAB在信号与系统分析中的应用的书来看看。可以看看飞思科技产品研发中心出的一系列关于matlab应用的书,会对你有帮助的!祝顺利!
205 浏览 4 回答
144 浏览 5 回答
154 浏览 2 回答
164 浏览 6 回答
209 浏览 9 回答
246 浏览 2 回答
311 浏览 3 回答
197 浏览 4 回答
269 浏览 5 回答
346 浏览 5 回答
218 浏览 6 回答
180 浏览 2 回答
307 浏览 4 回答
330 浏览 5 回答
242 浏览 3 回答