【Android开发】移动程序设计期末复习练习题(二) 目录 Android基础入门 一、填空题 二、判断题 三、选择题 四、简答题 Android常见界面布局 一、填空题 二、判断题 三、选择题 四、简答题 五、编程题 Android常见界面控件 一、判断题 二、选择题 三、简答题 四、编程题 程序活动单Activity 一、填空题 二、判断题 三、选择题 四、简答题 数据存储 一、判断题 二、选择题 三、简答题 四、编程题 使用内容提供者共享数据 一、判断题 二、选择题 三、简答题 四、编程题 广播机制 一、填空题 二、判断题 三、选择题 四、简答题。 五、编程题 服务 一、填空题 二、判断题 三、选择题 四、简答题 五、编程题 网络编程 一、填空题 二、判断题 三、选择题 四、简答题 五、编程题 图形图像处理 一、判断题 二、选择题 三、简答题 多媒体应用开发 一、判断题 二、选择题 三、简答题 四、编程题 Android基础入门 一、填空题 Dalvik中的Dx工具会把部分class文件转换成____dex___文件。如果希望在XML布局文件中调用颜色资源,可以使用___@color__调用。Android程序入口的Activity是在___AndroidManifest.xml__文件中注册的。Android中查看应用程序日志的工具是__LogCat___。 二、判断题 Dalvik是Google公司设计的用于Android平台的虚拟机。( T )Android应用程序的主要语言是Java。( T )Android系统采用分层架构,分别是应用程序层、应用程序框架层、核心类库和Linux内核。( T )第三代移动通讯技术(3G)包括TD-LTE和FDD-LTE两种制式。( F )Android程序中,Log.e()用于输出警告级别的日志信息。( F )每个Dalvik虚拟机实例都是一个独立的进程空间,并且每个进程之间不可以通信。( F ) 三、选择题 Dalvik虚拟机是基于( )的架构。 栈 B. 堆 C. 寄存器 D. 存储器 Android项目中的主题和样式资源,通常放在哪个目录下?( ) res/drawable B. res/layout C. res/values D. assets 下列关于AndroidManifest.xml文件的说法中,错误的是( ) A. 它是整个程序的配置文件 B. 可以在该文件中配置程序所需的权限 C. 可以在该文件中注册程序用到的组件 D. 该文件可以设置UI布局 Dalvik虚拟机属于Android系统架构中的哪一层?( ) A. 应用程序层 B. 应用程序框架层 C. 核心类库层 D. Linux内核层 Android中短信、联系人管理、浏览器等属于Android系统架构中的哪一层?( ) A. 应用程序层 B. 应用程序框架层 C. 核心类库层 D. Linux内核层 四、简答题 1. 简述如何搭建Android开发环境。 2. 简述Android源代码的编译过程。 3. 简述Android系统架构包含的层次以及各层的特点。 Android系统架构从高到低分为四层,分别是应用程序层、应用程序框架层、核心类库、Linux内核 应用程序层:一个核心应用程序的集合,安装在手机中的应用程序都属于这一层。 应用程序框架层:主要提供了构建应用程序时用到的各种API。 核心类库:包含了系统库和Android运行环境 Linux内核:为Android设备的各种硬件提供了底层的驱动。 Android常见界面布局 一、填空题 Android的常见布局都直接或者间接的继承自____ViewGroup___类。Android中的TableLayout继承自____LinearLayout____。表格布局TableLayout可以通过____TableRow____控制表格的行数。____RelativeLayout____布局通过相对定位的方式指定子控件的位置。在R.java文件中,android:id属性会自动生成对应的___int___类型的值。 二、判断题 ViewGroup是盛装界面控件的容器。( T )如果在帧布局FrameLayout中放入三个所有属性都相同的按钮,那么能够在屏幕上显示的是第1个被添加的按钮。( F )Android中的布局文件通常放在res/layout文件夹中。( T )TableLayout继承自LinearLayout,因此它完全支持LinearLayout所支持的属性。( T )LinearLayout布局中的android:layout_weight属性用于设置布局内控件所占的权重。( T ) 三、选择题 下列属性中,用于设置线性布局方向的是( )。 A.orientation B.gravity C.layout_gravity D.padding 下列选项中,不属于Android布局的是( )。 A.FrameLayout B.LinearLayout C.Button D.RelativeLayout 帧布局FrameLayout是将其中的组件放在自己的哪个位置?( ) A.左上角 B.右上角 C.左下角 D.右下角 对于XML布局文件,android:layout_width属性的值不可以是什么?( ) A.match_parent B.fill_parent C.wrap_content D.match_content 下列关于RelativeLayout的描述,正确的是( )。 A.RelativeLayout表示绝对布局,可以自定义控件的x、y的位置 B.RelativeLayout表示帧布局,可以实现标签切换的功能 C.RelativeLayout表示相对布局,其中控件的位置都是相对位置 D.RelativeLayout表示表格布局,需要配合TableRow一起使用 四、简答题 列举Android中的常用布局,并简述他们各自的特点。 RelativeLayout(相对布局):通过相对位置的方式来指定布局内子控件的位置。LinerLayout(线性布局):通过android:orientation属性来指定子控件水平垂直排列。TableLayout(表格布局):采用行列的方式来管控布局,一个TableRow代表一行。FrameLayout(帧布局):该布局会在屏幕上创建一块空白的区域,添加到该区域的每一个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中所有控件会与左上角对齐。 五、编程题 使用TableLayout布局实现一个简单的计算器界面。 Android常见界面控件 一、判断题 1. Android的控件样式,每一个XML属性都对应一个Java方法。( T ) 2.当指定RadioButton按钮的android:checked属性为true时,表示未选中状态。( F ) 3.AlertDialog对话框能够直接通过new关键字创建对象。( F ) 4.Toast是Android系统提供的轻量级信息提醒机制,用于向用户提示即时消息。( T ) 5.ListView列表中的数据是通过Adapter加载的。( T ) 二、选择题 1. 在XML布局中定义了一个Button,决定Button按钮上显示文字的属性是() A.android:value B.android:text C.android:id D.android:textvalue 2. 下列选项中,哪个用于设置TextView中文字显示的大小?( ) A.android:textSize=”18” B.android:size=”18” C.android:textSize=’18sp’ D.android:size=”18sp” 3. 使用EditText控件时,当文本内容为空时,如果想做一些提示,那么可以使用的属性是( ) A.android:text B.android:background C.android:inputType D.android:hint 4. 为了让一个ImageView显示一张图片,可以通过设置的属性是( ) A.android:src B.android:background C.android:img D.android:value 5.下列关于ListView的说法中,正确的是( ) A.ListView的条目不能设置事件 B.ListView不设置Adapter也能显示数据内容 C.当数据超出能显示范围时,ListView自动具有可滚动的特性 D.若ListView当前能显示10条,一共有100条数据,则产生了100个View 6. CheckBox被选择的监听事件通常使用以下哪个方法()? A.setOnClickListener B.setOnCheckedChangeListener C.setOnMenuItemSelectedListener D.setOnCheckedListener 7. 当使用EditText控件时,能够使文本框设置为多行显示的属性是( ) A.android:lines B.android:layout_height C.android:textcolor D.android:textsize 8. 下列关于AlertDialog的描述,错误的是() A.使用new关键字创建AlertDialog的实例 B.对话框的显示需要调用show方法 C.setPositiveButton方法是用来设置确定按钮的 D.setNegativeButton方法是用来设置取消按钮的 三、简答题 1. 简述ListView与RecyclerView的区别 展示效果:RecyclerView控件可以通过LayoutManager类实现横向或竖向的列表效果、瀑布流效果和GridView效果,而ListView控件只能实现竖直的列表效果。 适配器:RecyclerView控件使用的是RecyclerView.Adapter适配器,该适配器将BaseAdapter中的getView()方法拆分为onCreateViewHolder()方法和onBindViewHolder()方法,强制使用ViewHolder类,使代码编写规范化,避免初学者写的代码性能不高。 复用效果:RecyclerView控件复用Item对象的工作由该控件自己实现,而ListView控件复用Item对象的工作需要开发者通过convertView的setTag()方法和getTag()方法进行操作。 动画效果:RecyclerView控件可以通过setItemAnimator()方法为Item添加动画效果,而ListView控件并没有实现动画效果,但我们可以在Adapter自己实现item的动画效果。 2. 简述实现Button按钮的事件的方式有哪几种? 1、在布局文件中指定onClick属性的方式设置事件。 2、使用匿名内部类的方式设置事件。 3、通过为Activity实现OnClickListener接口的方式设置事件。 3. 简述AlertDialog对话框的创建过程。 四、编程题 1. 开发一个整数加法的程序,实现将计算结果显示到界面上的功能。 2. 开发一个自定义对话框,其界面中显示标题、提示内容、确定和取消按钮。当回退健时,用于提示用户是否退出应用。 程序活动单Activity 一、填空题 1. Activity的启动模式包括standard、singleTop、singleTask和____singleInstance_____。 2.启动一个新的Activity并且这个Activity的返回数据,需要重写____startActivityForResult()____方法。 3.发送隐式Intent后,Android系统会使用____IntentFilter____匹配相应的组件。 4.在清单文件中为Activity添加<intent-filter>标签时,必须添加的属性名为___<category android:name=”android.intent.category.DEFAULT”/>_____,否则隐式Intent无法开启该Activity。 5. Activity的____finish()____方法用于关闭当前的Activity。 二、判断题 1.如果Activity不设置启动模式,则默认为standard。( T ) 2. Fragment与Activity的生命周期方法是一致的。( F ) 3.如果想要关闭当前的Activity,可以调用Activity提供的finish()方法。( T ) 4. <intent-filter>标签中间只能包含一个action属性。( F ) 5. 默认情况下,Activity的启动方式是standard。( T ) 三、选择题 1.下列选项中,不属于Android四大组件的是( )。 A.Service B.Activity C.Handler D.ContentProvider 2.下列关于Android中Activity管理方式的描述中,正确的是( )。 A.Android以堆的形式管理Activity B.Android以栈的形式管理Activity C.Android以树的形式管理Activity D.Android以链表的形式管理Activity 3.下列选项中,哪个不是Activity生命周期方法( )。 A.onCreate() B.startActivity() C.onStart() D.onResume() 4.下列方法中,哪个是启动Activity的方法( )。 A.startActivity() B.goToActivity() C.startActivityResult() D.以上都是 5.下列关于Intent的描述中,正确的是( )。 A.Intent不能够实现应用程序间的数据共享 B.Intent可以实现界面的切换,还可以在不同组件间直接进行数据传递 C.使用显式Intent可以不指定要跳转的目标组件 D.隐式Intent不会明确指出需要激活的目标组件,所以无法实现组件之间的数据跳转 四、简答题 1. 简述Activity的生命周期的方法及什么时候被调用。 onCreate():Activity创建时调用,通常做一些初始化配置 onStart():Activity即将可见时调用。 onResume():Activity焦点时调用 onPause():当前Activity被其他Activity覆盖或锁屏时调用 onDestroy():Activity销毁时调用。 onRestart():Activity从停止状态到再次启动时调用。 2. 简述Activity的四种启动模式及其特点。 3. 简述Activity、Intent、IntentFilter的作用。 数据存储 一、判断题 1.SQLite是Android自带的一个轻量级的数据库,支持基本SQL语法。( T ) 2.Android中的文件存储方式,分为内部存储方式和外部存储方式。( T ) 3.使用openFileOutput()方式打开应用程序的输出流时,只需要指定文件名。( F ) 4.当Android SDK版本低于23时,应用程序想要操作SD卡数据,必须在清单文件中添加权限。( T ) 5.SQLiteDatabase类的update()方法用于删除数据库表中的数据。( F ) 6.SQLite数据库的事务操作满足原子性、一致性、隔离性和持续性。( T ) 二、选择题 1.下列关于SharedPreferences存取文件的描述中,错误的是( )。 A.属于移动存储解决方式 B.SharedPreferences处理的就是key-value对 C.读取xml的路径是/sdcard/shared_prefs D.文本的保存格式是xml 2.下列选项中,不属于getSharedPreferences方法的文件操作模式参数是( )。 A.Context.MODE_PRIVATE B.Context.MODE_PUBLIC C.Context.MODE_WORLD_READABLE D.Context.MODE_WORLD_WRITEABLE 3.下列方法中,( )方法是sharedPreferences其编辑器的方法? A.getEdit() B.edit() C.setEdit() D.getAll 4.Android对数据库的表进行查询操作时,会使用SQLiteDatabase类中的( )方法? A.insert() B.execSQL() C.query() D.update() 5.下列关于SQLite数据库的描述中,错误的是( ) A.SqliteOpenHelper类有创建数据库和更新数据库版本的的功能。 B.SqliteDatabase类是用来操作数据库的。 C.每次调用SqliteDatabase的getWritableDatabase方法时,都会执行SqliteOpenHelper的onCreate()方法。 D.当数据库版本发生变化时,会调用SqliteOpenHelper的onUpgrade()方法更新数据库。 6.下列初始化SharedPreferences的代码中,正确的是( ) A.SharedPreferences sp = new SharedPreferences(); B.SharedPreferences sp = SharedPreferences.getDefault(); C.SharedPreferences sp = SharedPreferences.Factory(); D.SharedPreferences sp = getSharedPreferences(); 三、简答题 1.简述数据库事物的4个基本要素。 2.简述Android数据存储的方式。 四、编程题 1. 使用SQLite数据库的事务操作,编写一段模拟银行转账的逻辑代码。 2. 编写一个用户登录的程序,要求登录的用户名和密码存入到SharedPreferences。 3. 编写一个购物车程序,实现在界面中以列表的形式显示购物车的商品信息,商品信息包括商品名称、价格和数量功能,并能够对购物车中的商品信息进行增删改查。 使用内容提供者共享数据 一、判断题 Uri主要有三部分组成,分别是scheme、authority和path。( T )内容观察者ContentObserver用于观察指定URI代表的数据的变化。( T )内容提供者主要功能是实现跨程序共享数据的功能。( T )Android中通过内容解析者手机通讯录数据库的内容时,不需要加入读取手机通讯录的权限。( F )Android系统的UriMatcher类用于匹配Uri。( T ) 二、选择题 如果一个应用程序想要访问另外一个应用程序的数据库,那么需要通过()实现。 A.BroadcastReceiver B.Activity C.ContentProvider D.AIDL 下列方法中,哪个方法能够得到ContentProvider的实例对象。( ) A.new ContentResolver() B.getContentResolver() C.newInstance() D.ContentUris.newInstance() 自定义内容观察者时,需要继承的类是( )。 A.BaseObserver B.ContentObserver C.BasicObserver D.DefalutObserver 查询手机系统短信时,内容提供者对应的Uri为( )。 A.Contacts.Photos.CONTENT_URI B.Contacts.People.CONTENT_URI C.“content://sms/” D.Media.EXTERNAL_CONTENT_URI 下列关于ContentProvider的描述,错误的是( ) A.ContentProvider 是一个抽象类,只有继承后才能使用 B.ContentProvider只有在AndroidManifest.xml文件中注册后才能运行 C.ContentProvider为其他应用程序提供了统一的访问数据库的方式 D.以上说法都不对 三、简答题 简述内容提供者的工作原理。 当B程序需要操作A程序数据库中的数据,一般需要A程序使用ContentProvider暴露数据,才能被其他程序操作。B程序通过ContentResolver操作A程序暴露出来的数据,而A程序会将操作结果返回给ContentResolver,然后ContentResolver再将操作结果返回给B程序。 简述内容观察者的工作原理。 使用ContentObserver观察A程序的数据时,首先要在A程序的ContentProvider中调用ContentResolver的notifyChange()方法。调用此方法后,当B程序操作A程序中的数据时,A程序会向“消息中心”发送数据变化的消息,此时C程序会观察到“消息中心”的数据有变化,会触发ContentObserver的onChange()方法。 四、编程题 编写一个程序,联系人数据库会对联系人的资料模块化,分成多个表保存数据,表与表之间使用id相关联。根据不同的Uri联系人表中的相关信息如下所示: (1)通过ContactsContract.Contacts.CONTENT_URI的UriContacts表中的联系人id和姓名,其字段分别为ContactsContract.Contacts._ID、ContactsContract.Contacts. DISPLAY_NAME。 (2)通过ContactsContract.CommonDataKinds.Phone.CONTENT_URI的UriData表中的联系人id和电话,其字段分别为ContactsContract.CommonDataKinds.Phone.CONTACT_ID、ContactsContract. CommonDataKinds.Phone.NUMBER。 请根据上述系统联系人数据库的相关信息,编写一个程序,用于读取系统联系人的姓名和电话,并将读取的信息显示在界面中。 广播机制 一、填空题 ____BroadcastReceiver____用来监听来自系统或者应用程序的广播。广播接收者的注册方式有两种,分别是____动态注册____和____静态注册____。 二、判断题 Broadcast表示广播,它是一种运用在应用程序之间传递消息的机制。( T )在清单文件注册广播接收者时,可在<intent-filter>标签中使用priority属性设置优先级别,属性值越大优先级越高。( T )有序广播的广播效率比无序广播更高。( F )动态注册的广播接收者的生命周期依赖于注册广播的组件。( T )Android中广播接收者必须在清单文件里面注册。( F ) 三、选择题 下列选项中,关于广播类型的说法,错误的是( )(多选) A、Android中的广播类型分有序广播和无序广播 B、无序广播是按照一定的优先级进行接收 C、无序广播可以被拦截,可以被修改数据 D、有序广播按照一定的优先级进行发送 广播机制作为Android组件间的通信方式,使用的场景有哪些( )(多选) A、在同一个APP内部的同一组件内进行消息通信 B、不同APP的组件之间进行消息通信 C、在同一个APP内部的不同组件之间进行消息通信(单个进程) D、在同一个APP具有多个进程的不同组件之间进行消息通信 四、简答题。 简述广播机制的实现过程。简述有序广播和无序广播的区别。 五、编程题 编写一个程序,实现无序广播的发送和接收。 服务 一、填空题 1. 如果想要停止bindService()方法启动的服务,需要调用___unBindService()__方法。 2. Android系统的服务的通信方式分为___本地服务__和___远程服务__。 3. 远程服务通过___AIDL__实现服务的通信。 二、判断题 1.Service服务是运行在子线程中的。( F ) 2.不管使用哪种方式启动Service,它的生命周期都是一样的。( F ) 3.使用服务的通信方式进行通信时,必须保证服务是以绑定的方式开启的,否则无法通信。( T ) 4.一个组件只能绑定一个服务。( F ) 5.远程服务和本地服务都运行在同一个进程中。( F ) 三、选择题 1.如果通过bindService方式开启服务,那么服务的生命周期是( ) A.onCreate()→onStart()→onBind()→onDestroy() B.onCreate()→onBind()→onDestroy() C.onCreate()→onBind ()→onUnBind()→onDestroy() D.onCreate()→onStart ()→onBind ()→onUnBind()→onDestroy() 2.下列关于Service服务的描述中,错误的是( ) A.Service是没有用户可见的界面,不能与用户交互 B.Service可以通过Context.startService()来启动 C.Service可以通过Context.bindService()来启动 D.Service无需在清单文件中进行配置。 3.下列关于Service的方法描述,错误的是( ) A.onCreate()表示第一次创建服务时执行的方法 B.调用startService()方法启动服务时执行的方法是onStartCommand() C.调用bindService()方法启动服务时执行的方法是onBind() D.调用startService ()方法断开服务绑定时执行的方法是onUnbind() 四、简答题 1. 简述Service的两种启动方式的区别。 2. 简述Service的生命周期。 五、编程题 编写一个验证码的程序,当该程序的验证码按钮时,使用服务实现倒计时60秒的功能,并将倒计时的时间显示在验证码的按钮上。 网络编程 一、填空题 1. HttpURLConnection继承自____URLConnection___类。 2. Android系统默认提供的内置浏览器使用的是____WebKit___引擎。 3. Android中解析JSON数据的org.json包中,最重要的两个类是____JSONObject___和JSONArray。 二、判断题 1. HttpURLConnection用于发送HTTP请求和HTTP响应。( T ) 2. Android中的WebView控件是专门用于浏览网页的,其使用方法与其他控件一样。( T ) 3. Android中要访问网络,必须在AndroidManifest.xml中注册网络访问权限。( T ) 4. HttpURLConnection是抽象类,不能直接实例化对象,需要使用URL的openConnection()方法获得。( T ) 5. 使用HttpURLConnection进行HTTP网络通信时,GET方式发送的请求只能发送大小在1024个字节内的数据。( T ) 6. Android内置的浏览器使用的是WebView引擎。( F ) 三、选择题 1. Android针对HTTP实现网络通信的方式主要包括( )。(多选) A.使用HttpURLConnection实现 B.使用ServiceConnection实现 C.使用HttpClient实现 D.使用HttpConnection实现 2. Android中的HttpURLConnection中的输入/输出流操作被统一封装成了( )。 (多选) A.HttpGet B.HttpPost C.HttpRequest D.HttpResponse 四、简答题 简述使用HttpURLConnection 访问网络的步骤。 五、编程题 请写出使用JSONArray类解析JSON数据的主要逻辑代码,JSON数据如下所示。 [{“name”:”LiLi”, “score”:”95″},{“name”:”LiLei”, “score”:”99″}, {“name”:”王小明”, “score”:”100″},{“name”:”LiLei”, “score”:”89″}] 图形图像处理 一、判断题 1. Paint类表示画笔,主要用于描述图形的颜色和风格。( T ) 2.Android提供的Matrix类能够结合其他API对图形变换,例如,旋转、缩放、倾斜。( T ) 3.Bitmap的decodeFile()方法用于从文件中解析Bitmap对象。( T ) 二、选择题 1.下列关于Android动画的描述中,正确的是( )。(多选) Android中的动画通常分为逐帧动画和补间动画两种。逐帧动画就是顺序播放一组预定义的静态图像,形成的动画效果。补间动画就是通过对场景中的对象不断进行图像变化来产生动画效果。实现补间动画时,只需要定义动画开始和结束的关键帧,其他过渡有系统自动计算补齐。 2. Android提供了哪些补间动画?( )(多选) 透明度渐变动画(AlphaAnimation)旋转动画(RotateAnimation)缩放动画(ScaleAnimation)平移动画(TranslateAnimation) 3. Android绘制图像时最常用的类包括( )。(多选) BitmapBitmapFactoryPaintCanvas 4. Android中使用Canvas类中的( )方法可以绘制椭圆。 drawRect()drawOval()drawCircle()drawLine() 5. 下列关于Canvas类的描述,错误的是( )。 Canvas表示画布Canvas可以绘制各种各样的图形Canvas和Paint作用一样Canvas类的drawRect()方法用于绘制矩形 三、简答题 简述逐帧动画的工作原理。 多媒体应用开发 一、判断题 1.SurfaceView继承自View,它是显示图像的控件。( T ) 2.SurfaceView具有双缓冲技术。( T ) 3.使用MediaPlayer播放视频时,SurfaceView显示视频的时候必须要在子线程中更新。( F ) 4.Android中可以使用SoundPool同时播放多个音频文件。( T ) 5.使用VideoView播放视频时,需要使用setVideoPath( )设置播放视频路径。( T ) 二、选择题 1. 下列关于多媒体应用开发的描述中,正确的是()。(多选) 可以使用mediaPlayer或SoundPool播放音频。使用MediaPlayer每次只能播放一个音频,适用于播放长音乐或背景音乐。使用SoundPool可以同时播放多个短小音频,适用于播放按键音或消息提示音。SoundPool和SurfaceView一起使用,还可以播放视频。 MediaPlayer中的setAudioStreamType()方法支持的音频类型包括( )。(多选) A.音乐 B.响铃 C.闹钟 D.提示音 3.下列关于MeidiaPlayer的描述,错误的是( )。 MediaPlayer是用于播放音频和视频的。MadiaPlayer对音频文件提供了非常全面的控制方法。MadiaPlayer会调用底层的音频驱动播放音频。MadiaPlayer只可以播放音频不能播放视频。 三、简答题 1. 简述使用MediaPlayer播放音频的步骤。 2. 简要介绍一下SoundPool使用的场景。 四、编程题 编写一个使用SurfaceView播放视频的程序,实现当触摸屏幕时,显示播放和暂停的按钮、进度条、播放视频的当前时间以及视频的总时间,在触摸事件消失的5秒后自动隐藏显示的内容。 都看到这了还不点赞收藏进收藏夹积灰???
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/51278.html