admin 管理员组文章数量: 887026
2023年12月18日发(作者:spring festival英语作文80字)
《Android应用程序设计》
实 验 报 告
学生姓名:
班 级:
学 号:
指导教师: * * *
学 期:
2015-2016学年第2学期
1
实验1 搭建开发环境与第1个Android程序
【实验类型】验证性(必做)
【实验目的】1.熟悉Android开发环境的搭建
2.掌握用Eclipse开发Android程序的流程
教师签名
实验成绩
【实验内容】
一、搭建Android开发环境
按照下面的步骤,完成Android环境的搭建。
1.1 JDK的安装及配置
日 期
1.根据电脑的系统位数安装软件包里的JDK,安装目录设置为d:jdk1.x。(d为你的
安装盘,可以设为任意盘;x为你安装的jdk版本)
2. WIN7系统环境变量设置
(1)环境变量设置一
(2)环境变量设置二
2
(3)环境变量设置三
(4)环境变量设置四
1)创建新的环境变量。名:JAVA_HOME,值:x:jdk1.7
2)修改系统变量Path,在path变量值前添加这段:%JAVA_HOME%bin;
3)修改系统变量classpath,值为:
.;%JAVA_HOME%;%JAVA_HOME%;
(5)环境变量设置五
1)测试开发环境。在开始->搜索程序和文件里输入,打开cmd。
输入cd c: 命令进入c盘根目录。
3
2)在c盘根目录下使用记事本编写源文件,并存为java文件。
public class MyApp {
public static void main (String[] args) {
} }
n(“我能学好Java语言!”);
3)使用javac命令编译程序,在cmd命令行输入:javac
生成class类型文件。
4)使用java命令运行程序,在cmd命令行输入:java MyApp
如果在命令行显示结果“我能学好Java语言!”,则JDK环境配置成功。
1.2 Android SDK的安装及配置
1. 解压adt-bundle-windows-x86_文件,里面的SDK是免安装版。SDK本身自带Android4.4,如果想下载其他版本的,双击SDK ,下载需要的软件包(因为官网下载比较慢,而且经常出错,可以参考/harvic880925/article/details/37913801 中的方法,选择自己需要的离线安装)
2. 如果不安装其他Android包,则无需下载。但要在系统环境中配置一下SDK。
3. 在系统变量Path中添加下面两句:
X:Android-SDKsdkplatform-tools; X:Android-SDKsdktools;(其中X为你解压SDK的盘符名,对照添加…sdkplatform-tools,…sdktools这两个工具的路径)
1.3 Eclipse的汉化(选做)
1. 打开浏览器,在地址栏输入/babel/,进入Eclipse Babel官网。
2. 单击左侧”Downloads”,进入下载页面。
4
3. 复制”Babel Language Pack Update Site for luna”下方的
” /technology/babel/update-site/R0.12.1/luna”链接。
4. 启动Eclipse,单击“Help”菜单。
5. 单击“Install ”菜单项。
6. 单击“”按钮,显示增加仓库对话框。在“Name”栏中,输入“Eclipse Babel”,在“Location”栏中输入刚刚复制的网址。单击“OK”按钮联网查找可用软件包。
7. 选择“Babel Language Packs for eclipse”下的“Babel Language Pack for eclipse in
Chinese(Simplified)”,单击“Next>”按钮。显示的是插件的详细信息,包括插件名称、版本号和ID。单击“Next>”按钮继续。
8. 在下载完成后会询问是否安装该插件。
5
9. 单击“OK”按钮确认安装,在安装完成后会要求重新启动Eclipse,单击“Restart Now”按钮完成安装。
1.4 模拟器的安装和调试——Genymotion
由于Eclipse自带的模拟器AVD奇慢无比,极大的影响开发速度,所以建议安装Android模拟器之王——Genymotion,除了不能用地图之外,其他的功能和真机无差别。安装步骤请参考以下网址。
/article/
参考安装模拟器型号为Google Nexus 4 – 4.4.4 – API19 – 768x1280
1.5 真机调试
如果你安装不上Genymotion,那么你只能使用Android手机调试,但是手机一直连接电脑会不停的充电,损害手机,所以建议你还是把Genymotion的安装再仔细看看,一般都是可以安装成功的。真机调试步骤如下。
1. 把手机通过数据线连接在电脑上,设置android手机为USB调试模式。步骤: menu—> 设置 —> 应用程序 —> 开发 , 选择【USB调试】。
2. 如果是Winxp系统,系统会提示安装驱动,装好后进行命令行测试。如果是Win7系统,则可以直接进行命令行测试。打开命令行,如下图所示。
当显示如“I699cfad4f84 device”字样,那么就是检测到的手机设备型号。说明你已经成功6
连好手机了。
3. 接下来就开始在eclipse上调试android程序了,右击android工程->Run as->Android
Application,弹出如下窗口(如果项目要求的API版本高于测试手机API版本,则不会在图中显示手机折本):
4. 选中手机设备,点击OK之后,程序就开始在真机上安装了,安装好了之后就能看到运行效果。并且如果有异常,都会显示在Eclipse的命令行窗口显示错误提示。
二、创建第一个Android应用
参照课本《疯狂Android讲义》1.4节内容,用Eclipse创建第一个Android应用,并将、hello_以及运行后的应用截图填写在下方:
1. 主程序代码如下:
7
2. 布局文件hello_代码如下:
3. 运行效果图如下:
8
实验2 Activity的生命周期
【实验类型】验证性(必做)
【实验目的】1.熟悉Activity的生命周期
2.熟悉Eclipse的DDMS查看Logcat日志
教师签名
实验成绩
【实验内容】
一、熟悉Activity的生命周期
按照下面的步骤,完成代码的执行,查看Logcat日日 期
志,并将Logcat日志结果和应用运行的结果截图填写在空白处。
1.新建一个Android工程,命名为ActivityDemo。
2.修改,代码如下:
package tydemo;
import ty;
import ;
import ;
public class ActivityDemo extends Activity {
private static final String TAG = "ActivityDemo";
private EditText mEditText;
// Activity创建时被调用
public void onCreate(Bundle savedInstanceState) {
te(savedInstanceState);
setContentView(ty_main);
mEditText = (EditText)findViewById(xt);
Log.i(TAG, "start onCreate~~~");
}
// Activity创建或者从后台重新回到前台时被调用
@Override
protected void onStart() {
t();
Log.i(TAG, "start onStart~~~");
}
// Activity从后台重新回到前台时被调用
@Override
protected void onRestart() {
art();
Log.i(TAG, "start onRestart~~~");
}
// Activity创建或者从被覆盖、后台重新回到前台时被调用
@Override
9
protected void onResume() {
me();
Log.i(TAG, "start onResume~~~");
}
// Activity被覆盖到下面或者锁屏时被调用
@Override
protected void onPause() {
e();
Log.i(TAG, "start onPause~~~");
}
// 退出当前Activity或者跳转到新Activity时被调用
@Override
protected void onStop() {
();
Log.i(TAG, "start onStop~~~");
}
// 退出当前Activity时被调用,调用之后Activity就结束了
@Override
protected void onDestroy() {
roy();
Log.i(TAG, "start onDestroy~~~");
}
}
3.运行工程,将效果图贴在下方(主体部分截图):
10
11
4. 查看Logcat视窗。
(1)运行工程后打开了应用,先后会执行onCreate()->onStart()->onResume三个方法,这时打开DDMS视图,点击Logcat窗口的绿色“+”号,新建一个过滤器,并设置“by Log
Tag”项为ActivityDemo,窗口下面的“by Log Level”选择“info”,看一下LogCat视窗如下:
(2)点击模拟器的返回键时,这个应用程序将结束,这时候应用的Activity将先后调用onPause()->onStop()->onDestory()三个方法,参照上步的截图,将此时Logcat的截图贴在下方:
(3)按下模拟器的HOME键,应用中Activity先后执行了onPause()->onStop()这两个方法,Logcat如下图所示:
12
(4)在模拟器中再次点击ActivityDemo应用程序,则先后分别执行了onRestart()->onStart()->onResume()三个方法,如下图所示:
(5)修改activity_布局文件(增加了一个EditText),代码如下:
android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" /> 13 android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello It's MyApp" /> android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" />
修改代码中的onStop()方法如下:
protected void onStop() {
();
t("");
Log.e(TAG, "start onStop~~~");
}
(6)其他不变,运行ActivityDemo程序,在EditText里输入如"Frankie"字符串(如下图):
(7)这时按一下模拟器的HOME键,然后再次启动ActivityDemo应用程序,这时候EditText里并没有我们输入的"Frankie"字样,这是因为点击HOME键后,当前Activity调用了onStop方法,而在onStop方法中我们设置了EditText的文本为空。
要想保留原来输入的文字,需要在Activity几个方法里自己实现一些代码(主要是修改了onRestart和onPause两个方法),修改代码如下:
public class ActivityDemo extends Activity {
private static final String TAG = "ActivityDemo";
private EditText mEditText;
//定义一个String 类型用来存取我们EditText输入的值
private String mString;
public void onCreate(Bundle savedInstanceState) {
te(savedInstanceState);
setContentView();
mEditText = (EditText)findViewById(xt);
Log.e(TAG, "start onCreate~~~");
}
@Override
protected void onStart() {
t();
14
Log.e(TAG, "start onStart~~~");
}
// 当按HOME键时退到手机主界面,然后再次打开应用时,会启动onRestart方法
// 所以只要在onRestart方法中恢复先前状态
@Override
protected void onRestart() {
art();
t(mString);
Log.e(TAG, "start onRestart~~~");
}
@Override
protected void onResume() {
me();
Log.e(TAG, "start onResume~~~");
}
// 当按HOME键时退到手机主界面,当前的Activity会执行onPause方法
// 我们只需在onPause方法中将输入的值保存在mString
@Override
protected void onPause() {
e();
mString = t().toString();
Log.e(TAG, "start onPause~~~");
}
@Override
protected void onStop() {
();
Log.e(TAG, "start onStop~~~");
}
@Override
protected void onDestroy() {
roy();
Log.e(TAG, "start onDestroy~~~");
}
}
(8)重新运行ActivityDemo程序,重复第六步操作,当我们按HOME键后,再次启动应用程序时,EditText里有上次输入的"Frankie"字样,截图如下:
15
16
【思考题】 如果第8步中点击的不是HOME键,而是BACK键,那么再次启动应用程序时,EditText里还有上次输入的"Frankie"字样吗?为什么?
解答:没有了应为当你按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入,会直接显示程序栈中最上层的Activity ,不过。。。按home键,程序还会在后台运行,activity不会destroy,此时还是占用系统内存的,当运行某项占用内存的动作,内存不够,系统会自动回收不常用的内存。你的程序在别的手机上跑时候很可能是被干掉了。所有每次都会重新运行。。。长按home键进入 与 点击图标进入的生命周期执行有那么一点不一样的。。
17
实验3 UI界面编程(一)
【实验类型】验证性(必做)
【实验目的】1.熟悉帧布局和相对布局
2.了解线程与Handler机制
教师签名
实验成绩
【实验内容】
一、 实现“霓虹灯”效果
参照课本2.2.3小节“帧布局”(第56页),实现霓虹日 期
灯效果,并将实现的代码和运行后的效果图复制到下方空白处。
【注意:程序中使用了1这样的资源引用,需要在包资源管理器(package
explorer)中打开FrameLayoutTest/res/values文件夹,新建一个名叫“colors”的XML文件,并分别定义6个颜色资源。
代码如下:
】
1. 布局文件main_代码如下:
xmlns:tools="/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" 18 android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="03_tivity"> android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Time" android:layout_centerInParent="true" android:textAppearance="?android:attr/textAppearanceLarge"/>
19
2. 主程序代码如下:
import ;
import static .*;
public class ExampleUnitTest {
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
3. 运行效果图如下:
20
二、实现“梅花布局”效果
参照课本2.2.4小节“相对布局”(第59页),新建项目RelativeLayoutTest,实现梅花布局效果,并将实现的代码和运行后的效果图贴在空白处。
【注意:本例中使用了图片资源,将下方的图片复制到包资源管理器(package explorer)中的RelativeLayoutTest/res/drawable-hdpi中。
】
1. 布局文件main_代码如下:
2. 运行效果图如下:
21
【思考题】对本实验的第二题重新编写,用图片“树叶”实现“正方形”布局效果,给出代码。
22
实验4 UI界面编程(二)
【实验类型】验证性(必做)
【实验目的】1.熟悉ImageView控件
2.理解按钮的监听器
教师签名
实验成绩
3.了解Bitmap属性
【实验内容】
一、实现“图片浏览器”
日 期
参照课本2.4节“ImageView及其子类”中的实例(第85页),新建项目ImageViewTest,实现图片浏览器效果,并将实现的代码和运行后的效果图贴在空白处。
【注意:本例中使用图片资源,设置方法与实验3一致,自行准备任意四幅图片即可】
1. 布局文件main_代码如下:
2.
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增大透明度" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="降低透明度" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一张" /> 23 android:layout_width="457dp" android:layout_height="240px" android:src="@drawable/shuangta" android:scaleType="fitCenter" android:layout_weight="0.10" /> android:layout_width="172dp" android:layout_height="120dp" android:src="@drawable/qiao" android:layout_marginTop="10dp" android:layout_weight="0.23" />
3. 主程序代码如下:
import ty;
import ;
import Drawable;
import ;
import Event;
import ;
import kListener;
import hListener;
import ;
import iew;
24
public class ImageViewTest extends Activity
{
��
int[] images = new int[]{
g,
,
ta,
,
i,
};
int currentImg = 2;
private int alpha = 255;
@Override
public void onCreate(Bundle savedInstanceState)
{
te(savedInstanceState);
setContentView();
final Button plus = (Button) findViewById();
final Button minus = (Button) findViewById();
final ImageView image1 = (ImageView) findViewById(1);
final ImageView image2 = (ImageView) findViewById(2);
final Button next = (Button) findViewById();
lickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
geResource(
images[++currentImg % ]);
}
});
OnClickListener listener = new OnClickListener()
{
@Override
public void onClick(View v)
{
if (v == plus)
{
alpha += 20;
25
}
if (v == minus)
{
alpha -= 20;
}
if (alpha >= 255)
{
alpha = 255;
}
if (alpha <= 0)
{
alpha = 0;
}
ha(alpha);
}
};
lickListener(listener);
lickListener(listener);
ouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent event)
{
BitmapDrawable bitmapDrawable = (BitmapDrawable) image1
.getDrawable();
Bitmap bitmap = map();
double scale = th() / 320.0;
int x = (int) (() * scale);
int y = (int) (() * scale);
if (x + 120 > th())
{
x = th() - 120;
}
if (y + 120 > ght())
{
y = ght() - 120;
}
�
geBitmap(Bitmap(bitmap
26
, x, y, 120, 120));
ha(alpha);
return false;
}
});
}
}
3. 运行效果图如下:
27
28
【思考题】将本实验中程序的布局文件使用相对布局重新编写,效果必须和之前一样,应当如何实现?请给出代码。
29
1.
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增大透明度" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="降低透明度" /> android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一张" /> android:layout_width="457dp" android:layout_height="240px" android:src="@drawable/shuangta" android:scaleType="fitCenter" android:layout_weight="0.10" /> android:layout_width="172dp" android:layout_height="120dp" android:src="@drawable/qiao" android:layout_marginTop="10dp" android:layout_weight="0.23" />
实验5 UI界面编程(三)
30
【实验类型】验证性(必做)
【实验目的】1.熟悉ListView控件
2.掌握ArrayAdapter、SimpleAdapter和
教师签名
实验成绩
BaseAdapter的使用
【实验内容】
一、使用ArrayAdapter创建ListView
日 期
参照课本2.5.2小节中的实例“使用ArrayAdapter创建ListView”(第94页), 新建项目ArrayAdapterTest,实现列表效果,并将实现的代码和运行后的效果图贴在空白处。
【应用中使用了图片 】 1. 布局文件main_代码如下: 2. android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> ,以及布局文件d_item,参考代码如下: xmlns:android="/apk/res/android" android:id="@+id/TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24dp" android:checkMark="@drawable/ok" android:shadowColor="#f0f" android:shadowDx="4" android:shadowDy="4" android:shadowRadius="2"/> android:id="@+id/list1" android:layout_width="fill_parent" android:layout_height="wrap_content" 31 android:divider="#f00" android:dividerHeight="2px" android:headerDividersEnabled="false" /> android:id="@+id/list2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="#0f0" android:dividerHeight="2px" android:headerDividersEnabled="false" /> 2. 布局文件_array_代码如下: xmlns:android="/apk/res/android" android:id="@+id/TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24dp" android:checkMark="@drawable/ok" android:shadowColor="#f0f" android:shadowDx="4" android:shadowDy="4" android:shadowRadius="2"/> 32 3. 主程序代码如下: import ty; import ; import dapter; import ew; public class ArrayAdapterTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(); ListView list1 = (ListView) findViewById(1); String[] arr1 = { "陈雷", "吴昊", "陶海" }; ArrayAdapter (this, _item, arr1); pter(adapter1); ListView list2 = (ListView) findViewById(2); String[] arr2 = { "Java", "Hibernate", "Spring" , "Android" }; ArrayAdapter (this, d_item, arr2); pter(adapter2); } } 4. 运行效果图如下: 33 34 二、使用SimpleAdapter创建ListView 参照课本2.5.2小节中的实例“使用SimpleAdapter创建ListView”(第97页), 新建项目SimpleAdapterTest,实现列表效果,并将实现的代码和运行后的效果图贴在空白处。 1. 布局文件main_代码如下: 2. android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > android:layout_width="fill_parent" android:layout_height="wrap_content" /> 3. 主程序代码如下: 4. import ist; import p; import ; import ; import ty; import ; import ; import ew; import Adapter; public class SimpleAdapterTest extends Activity 35 { private String[] names = new String[] { "虎头", "弄玉", "李清照", "李白"}; private String[] descs = new String[] { "可爱的女孩", "现代艺术家" , "一个擅长文学的女性", "浪漫主义诗人"}; private int[] imageIds = new int[] { , , ao , }; @Override public void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(); List new ArrayList for (int i = 0; i < ; i++) { Map ("header", imageIds[i]); ("personName", names[i]); ("desc", descs[i]); (listItem); } SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, _item, new String[] { "personName", "header" , "desc"}, new int[] { , , }); ListView list = (ListView) findViewById(); pter(simpleAdapter); } 36 5. 运行效果图如下: 37 38 三、使用BaseAdapter实现多列表项 参照课本2.5.2小节中的实例“扩展BaseAdapter实现不存储列表的ListView”(第100页), 新建项目BaseAdapterTest,实现列表效果,并将实现的代码和运行后的效果图贴在空白处。【本例的图片资源: 】 1. 布局文件main_代码如下: 2. android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > android:id="@+id/myList" android:layout_width="match_parent" android:layout_height="match_parent"/> 3. 主程序代码如下: import ; import ty; import ; import ; import oup; import apter; import iew; import Layout; import ew; import ew; 39 public class BaseAdapterTest extends Activity { ListView myList; @Override public void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(); myList = (ListView) findViewById(); BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { return 5; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position , View convertView , ViewGroup parent) { LinearLayout line = new LinearLayout(); entation(0); ImageView image = new ImageView(); geResource(_launcher); TextView text = new TextView(); t("第" + (position +1 ) + "列"); tSize(30); tColor(Color. GREEN); w(image); w(text); 40 return line; } }; pter(adapter); } } 4. 运行效果图如下: 41 42 【思考题】上例中的BaseAdapter中getView方法使用的是动态布局和动态添加控件,实际开发中更多使用的是静态布局,即定义一个布局文件,然后配置为此适配器的布局。请同学们根据资料(网络或者课堂讲解)将上例修改为静态布局,然后实现出同样的列表效果。 43 android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:layout_weight="1" android:layout_text="列表1" android:layout_size="20dp" /> android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:layout_weight="1" android:layout_text="列表2" android:layout_size="20dp" /> android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:layout_weight="1" android:layout_text="列表3" android:layout_size="20dp" /> android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:layout_weight="1" android:layout_text="列表4" android:layout_size="20dp" /> 实验6 UI界面编程(四) 实验成绩 44 【实验类型】验证性(必做) 【实验目的】1.熟悉其他的一些常用组件 2.掌握Toast、ProgressDialog的使用 教师签名 【实验内容】 日 期 一、 带图片的消息提示 参照课本2.8.1小节中的实例“带图片的消息提示”(第138页), 新建项目ToastTest,实现一个带图片的消息提示框,并将实现的代码和运行后的效果图贴在空白处(本例布局文件中只有两个按钮,故不用贴出)。 【本例图片资源: 】 1. 主程序代码如下: 2. import ty; import ; import ; import y; import ; import kListener; import ; import iew; import Layout; import ew; import ; public class ToastTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(); Button simple = (Button) findViewById(); lickListener(new OnClickListener() { @Override public void onClick(View source) { Toast toast = xt( , "文本提示" 45 , _SHORT); (); } }); Button bn = (Button) findViewById(); lickListener(new OnClickListener() { @Override public void onClick(View source) { Toast toast = new Toast(); vity(, 0, 0); ImageView image = new ImageView(); geResource(); LinearLayout ll = new LinearLayout(); w(image); TextView textView = new TextView(); t("简单图片提示"); tSize(30); tColor(A); w(textView); w(ll); ation(_LONG); (); } }); } } 3. 运行效果图如下: 46 47 48
版权声明:本文标题:《Android应用程序设计》实验报告 (2) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702914406h435791.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论