版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块6数据存储设计6.1SharedPreferences6.2SQLite数据存储6.3文件存储Android学习路线1.1学习路线
学习目标1.1Android学习目标素质目标知识目标素质1.能够使用命令行实践SQLite数据库;2.能够通过Java编程实践SQLite数据库;3.能够恰当关联模型数据和SQLite数据表;4.能够灵活运用多种方式存储数据。能力目标1.理解Android数据存储方法;2.掌握SQLite数据库的使用方法;3.掌握SQLite数据表和模型数据的对应方法;4.掌握SharedPreferences的使用方法。1.变换问题观察的角度和站位;2.增强数据敏感性的认知;3.巩固数据安全的观念。1.1数据存储知识点预览#知识点重点难点应用说明1文件存储√√熟练掌握文件的读取接口和流程;熟练使用文件的读取和写入接口实现文件的操作;2SharedPreferences存储√√熟练掌握SharedPreferences文件的读取和写入;3SQLite数据库√√√掌握SQLite数据库的使用方法;知识解析问题导入学以致用课堂小结课后拓展1.1数据存储作业点评数据的存储方式?文件存储的使用?SQLite数据库的使用方法?知识解析问题导入学以致用课堂小结课后拓展1.1数据存储预习检查SharedPreferences存储的方式?如何实现SharedPreferences存储?知识解析问题导入学以致用课堂小结课后拓展1.1数据存储数据安全密码工作是党和国家的一项特殊重要工作,直接关系国家政治安全、经济安全、国防安全和信息安全。2019年10月26日十三届全国人大常委会第十四次会议通过了密码法,密码法的通过对全面提升密码工作法治化水平起到了关键性作用。
每天,国内有数以亿计的用户使用密码保护自己的信息与财产安全,不论登录社交账户进行沟通交流,还是利用移动支付购买商品,这些过程都有密码的身影,密码不分昼夜地保护着用户的安全,其实背后由“密码技术应用员”职业人员默默守护着密码的安全。
针对密码安全,首先在设置上要包含大小写字母、数字和标点符号,位数在8位以上;
不能包含名字、生日、手机号、车牌号、门牌号等关联号码;
定期修改密码,不勾选网站或其他平台保存密码一键登录;知识解析问题导入学以致用课堂小结课后拓展1.1数据存储数据存储方式Android数据存储五种方式;内存瞬时数据保存到存储设备变为持久化的数据;文件存储:数据通过I/O存储为文件,用于存储大数量的文本或者二进制数据;SharedPreferences存储:数据通过XML文件存储,用于存储简单的参数设置;数据库存储:数据通过轻量级的SqLite文件存储,用于存储复杂而关联数据;ContentProvider存储:应用程序数据数据共享存储,用于存储音视频和通讯录等系统数据;网络存储;通过在网络上提供存储空间来上传和下载数据。这种方式适用于需要云端存储大量数的应用。问题导入知识解析学以致用课堂小结课后拓展1.1SharedPreferences
SharedPreferences存储
存储结构为Key-Value的键值对;适用于简单而孤立的数据
存储路径data/data/应用程序包/shared_prefs/文件名.xmlXML文件实例存储路径问题导入知识解析学以致用课堂小结课后拓展1.1SharedPreferences
SharedPreferences存储四种操作模式操作模式说明Context.MODE_PRIVATE默认操作模式,代表该文件是私有数据,只能被应用本身访问Context.MODE_APPEND模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.Context.MODE_WORLD_READABLE表示当前文件可以被其他应用读取Context.MODE_WORLD_WRITEABLE表示当前文件可以被其他应用写入问题导入知识解析学以致用课堂小结课后拓展1.1SharedPreferences获取SharedPreferences数据的两种方式this.getPreferences(intmode):调用Activity对象的getPreferences()方法通过Activity对象获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity;this.getSharedPreferences(Stringname,intmode):调用Context对象的getPreferences()方法;
调用Context对象的getSharedPreferences()方法;以第一参数的name为文件名保存在系统中。问题导入知识解析学以致用课堂小结课后拓展1.1SharedPreferences通过SharedPreferences存储用户名和密码文件保存读取密码显示问题导入学以致用知识解析课堂小结课后拓展1.2SharedPreferences
XML文件读取
1SharedPreferences文件初始化privateSharedPreferencesmSharedPreferences;
privatevoidinitData(){
mSharedPreferences=getSharedPreferences("login",Context.MODE_PRIVATE);
}
2
键值对数据写入if(mCheckBoxPsd.isChecked()){
SharedPreferences.EditormEditor=mSharedPreferences.edit();//获取文件的编辑权限
mEditor.putString(“User”,name);//写入键值“User”
mEditor.putString(“Password”,psd);//写入键值“Password”
mEmit();//将键值对写入文件
}
3
读取键值对数据mEtName.setText(mSharedPreferences.getString(“User”,null));//读取键值“User”
mEtPsd.setText(mSharedPreferences.getString(“Password”,null));
//读取键值“Password”问题导入学以致用知识解析课堂小结课后拓展1.3小结本节通过密码法为切入点,了解密码安全使用的注意事项,主要讲解了数据存储的方式SharedPreferences,以及具体实现过程。要求初学者对Android的数据存储理解并掌握,方便学习后面的知识。问题导入课堂小结知识解析学以致用课后拓展1.4课后作业✎作业要求存储登录界面展示的信息。存储工匠坊欢迎界面的阅读量和点赞量。预习作业SQLite数据库的使用常用的数据存储方式
问题导入课后拓展知识解析学以致用课堂小结
每日寄语一个人的目标是从梦想开始的,一个人的幸福是从心态上把握的,而一个人的成功则是在行动中实现的。因为只有行动,才是否滋润你成功的食物和泉水。下节课见模块6数据存储设计6.1SharedPreferences6.2SQLite数据存储6.3文件存储Android学习路线1.1学习路线
学习目标1.1Android学习目标素质目标知识目标素质1.能够使用命令行实践SQLite数据库;2.能够通过Java编程实践SQLite数据库;3.能够恰当关联模型数据和SQLite数据表;4.能够灵活运用多种方式存储数据。能力目标1.理解Android数据存储方法;2.掌握SQLite数据库的使用方法;3.掌握SQLite数据表和模型数据的对应方法;4.掌握SharedPreferences的使用方法。1.变换问题观察的角度和站位;2.增强数据敏感性的认知;3.巩固数据安全的观念。1.1数据存储知识点预览#知识点重点难点应用说明1文件存储√√熟练掌握文件的读取接口和流程;熟练使用文件的读取和写入接口实现文件的操作;2SharedPreferences存储√√熟练掌握SharedPreferences文件的读取和写入;3SQLites数据库√√√熟练掌握SQLite数据库的基本操作;知识解析问题导入学以致用课堂小结课后拓展1.1数据存储作业点评知识解析问题导入学以致用课堂小结课后拓展请简述Android系统中五种数据存储方式各自的特点。请简述SharedPreferences如何存储数据。1.1数据存储预习检查知识解析问题导入学以致用课堂小结课后拓展SQLite数据库的使用ListView控件的作用1.1数据存储数据安全密码工作是党和国家的一项特殊重要工作,直接关系国家政治安全、经济安全、国防安全和信息安全。2019年10月26日十三届全国人大常委会第十四次会议通过了密码法,密码法的通过对全面提升密码工作法治化水平起到了关键性作用。
每天,国内有数以亿计的用户使用密码保护自己的信息与财产安全,不论登录社交账户进行沟通交流,还是利用移动支付购买商品,这些过程都有密码的身影,密码不分昼夜地保护着用户的安全,其实背后由“密码技术应用员”职业人员默默守护着密码的安全。
针对密码安全,首先在设置上要包含大小写字母、数字和标点符号,位数在8位以上;
不能包含名字、生日、手机号、车牌号、门牌号等关联号码;
定期修改密码,不勾选网站或其他平台保存密码一键登录;知识解析问题导入学以致用课堂小结课后拓展1.1数据存储数据存储方式Android数据存储五种方式;内存瞬时数据保存到存储设备变为持久化的数据;文件存储:数据通过I/O存储为文件,用于存储大数量的文本或者二进制数据;SharedPreferences存储:数据通过XML文件存储,用于存储简单的参数设置;数据库存储:数据通过轻量级的SqLite文件存储,用于存储复杂而关联数据;ContentProvider存储:应用程序数据数据共享存储,用于存储音视频和通讯录等系统数据;网络存储:通过在网络上提供存储空间来上传和下载数据。这种方式适用于需要云端存储大量数的应用。问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库
SQLite数据库特点问题导入知识解析学以致用课堂小结课后拓展SQLite是一个轻量级数据库,占用资源非常低,在内存中只需要占用几百KB的存储空间。SQLite是遵守ACID的关系型数据库管理系统,ACID是指数据库事务正确执行的四个基本要素。原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)SQLite保存数据时,支持NULL(零)、INTEGER(整数)、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)五种数据类型。
SQLite数据库创建问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库publicclassMyHelperextendsSQLiteOpenHelper{publicMyHelper(Contextcontext){super(context,"itcast.db",null,1);}publicvoidonCreate(SQLiteDatabasedb){db.execSQL("CREATETABLEinformation(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameVARCHAR(20),priceINTEGER)");}//当数据库的版本号增加时调用
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}}添加数据问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库publicvoidinsert(Stringname,Stringprice){SQLiteDatabasedb=helper.getWritableDatabase();ContentValuesvalues=newContentValues();values.put("name",name);values.put("price",price);longid=db.insert("information",null,values);db.close();}修改数据问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库publicintupdate(Stringname,Stringprice){ SQLiteDatabasedb=helper.getWritableDatabase();ContentValuesvalues=newContentValues();values.put("price",price);intnumber=db.update("information",values,"name=?",new String[]{name});db.close();returnnumber;}删除数据问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库publicintdelete(longid){ SQLiteDatabasedb=helper.getWritableDatabase();intnumber=db.delete("information","_id=?",newString[]{id+""});db.close();returnnumber;}查询数据问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库publicbooleanfind(longid){ SQLiteDatabasedb=helper.getReadableDatabase();
Cursorcursor=db.query("information",null,"_id=?",newString[]{id+""},null,null,null);booleanresult=cursor.moveToNext();cursor.close();
db.close();returnresult;}
SQLite中的事务问题导入知识解析学以致用课堂小结课后拓展1.1SQLite数据库PersonSQLiteOpenHelperhelper=newPersonSQLiteOpenHelper(getContext());SQLiteDatabasedb=helper.getWritableDatabase();db.beginTransaction();try{db.execSQL("updatepersonsetaccount=account-1000where name=?",newObject[]{"zhangsan"});db.execSQL("updatepersonsetaccount=account+1000where name=?",newObject[]{"wangwu"});db.setTransactionSuccessful();}catch(Exceptione){Log.i("事务处理失败",e.toString());}finally{db.endTransaction();db.close();}我的通讯录问题导入学以致用知识解析课堂小结课后拓展1.1SQLite数据库23功能描述:技术要点:实现步骤:
1用户交互界面的设计与实现界面逻辑代码的设计与实现创建通讯录实现添加,查询,修改,删除联系人信息。SQLite数据库的使用。1.4小结
本章讲解了SQLite数据库的相关知识,首先简单地介绍了SQLite数据库,然后讲解了如何使用SQLite数据库,SQLite数据库知识点非常重要,在实际开发中可以实现很多功能,例如电子商城中的购物车、网易新闻客户端等。因此,要求初学者必须掌握本章知识。问题导入课堂小结知识解析学以致用课后拓展1.5课后作业✎作业要求请简要说明SQLite数据库的创建过程。请简要说明BaseAdapter适配器包含几个抽象方法,以及这些方法的作用。创建自己的通讯录。预习作业什么是广播接收者以及其作用广播的类型
问题导入课后拓展知识解析学以致用课堂小结
每日寄语一个人的目标是从梦想开始的,一个人的幸福是从心态上把握的,而一个人的成功则是在行动中实现的。因为只有行动,才是否滋润你成功的食物和泉水。下节课见模块6数据存储设计6.1SharedPreferences6.2SQLite数据存储6.3文件存储Android学习路线1.1学习路线
学习目标1.1Android学习目标素质目标知识目标素质1.能够使用命令行实践SQLite数据库;2.能够通过Java编程实践SQLite数据库;3.能够恰当关联模型数据和SQLite数据表;4.能够灵活运用多种方式存储数据。能力目标1.理解Android数据存储方法;2.掌握SQLite数据库的使用方法;3.掌握SQLite数据表和模型数据的对应方法;4.掌握SharedPreferences的使用方法。1.变换问题观察的角度和站位;2.增强数据敏感性的认知;3.巩固数据安全的观念。1.1数据存储知识点预览#知识点重点难点应用说明1文件存储√√熟练掌握文件的读取接口和流程;熟练使用文件的读取和写入接口实现文件的操作;2SharedPreference存储√√熟练掌握SharedPreference文件的读取和写入;3SQLites数据库√√√熟练掌握SQLite数据库的基本操作;知识解析问题导入学以致用课堂小结课后拓展1.1数据存储作业点评知识解析问题导入学以致用课堂小结课后拓展请简述Android系统中五种数据存储方式各自的特点。请简述SharedPreferences如何存储数据。请简述SQList数据库的存储过程。1.1数据存储预习检查数据存储的方式?如何实现文件存储?知识解析问题导入学以致用课堂小结课后拓展1.1数据存储数据安全
《中华人民共和国数据安全法》已由中华人民共和国第十三届全国人民代表大会常务委员会第二十九次会议于2021年6月10日通过,现予公布,自2021年9月1日起施行。第二十条国家支持教育、科研机构和企业等开展数据开发利用技术和数据安全相关教育和培训,采取多种方式培养数据开发利用技术和数据安全专业人才,促进人才交流。知识解析问题导入学以致用课堂小结课后拓展1.1数据存储数据存储方式Android数据存储五种方式;内存瞬时数据保存到存储设备变为持久化的数据;问题导入知识解析学以致用课堂小结课后拓展文件存储:数据通过I/O存储为文件,用于存储大数量的文本或者二进制数据;SharedPreferences存储:数据通过XML文件存储,用于存储简单的参数设置;数据库存储:数据通过轻量级的SqLite文件存储,用于存储复杂而关联数据;ContentProvider存储:应用程序数据数据共享存储,用于存储音视频和通讯录等系统数据;网络存储:通过在网络上提供存储空间来上传和下载数据。这种方式适用于需要云端存储大量数的应用。1.1文件存储数据存储方式文件存储是Android中最基本的一种数据存储方式,它与Java中的文件存储类似,都是通过I/O流的形式把数据存储到文档中。Android中的文件存储分为内部存储和外部存储。内部存储将应用程序中的数据以文件方式存储到设备的内部,当创建的应用程序被卸载时,其内部存储文件也随之被删除。是将文件存储到一些外部设备上,例如SD卡或者设备内嵌的存储卡,属于永久性的存储方式。外部存储问题导入知识解析学以致用课堂小结课后拓展1.1文件存储文件存储方式Java提供的I/O流存储:FileOutputStream提供openFileOutPut方法写入文件;FileInputStream提供openFileInPut方法读取文件;Enviroment类:getExternalStorageDirectory方法对Android设备的SD卡进行数据读写Enviroment类设置方法说明getRootDirectory获取系统根目录路径getDataDirectory获取系统数据目录路径getDownloadCacheDirectory获取下载缓存目录路径getExternalStorageDirectory获取外部存储(SD卡)目录路径getExternalStorageState获取外部存储(SD卡)的状态getStorageState获取指定目录的状态问题导入知识解析学以致用课堂小结课后拓展1.1文件存储通过文件存储保存用户注册信息文件写入文件读取问题导入知识解析学以致用课堂小结课后拓展1.1文件存储外部存储外部存储:是将文件存储到一些外部设备上,例如SD卡或者设备内嵌的存储卡,属于永久性的存储方式。//获取外部存储中名字叫test.txt的路径Stringpath=Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.txt";//创建文件Filefile=newFile(path);接着我们需要判断文件是否存在,如果不存在,就创建该文件,代码如下所示:if(!file.exists()){//判断文件是否存在file.createNewFile();}问题导入知识解析学以致用课堂小结课后拓展1.1文件存储外部存储然后通过输出流写入自己想要写入的信息,若写入的是字符串信息,代码如下所示:try{if(!file.exists()){file.createNewFile();}//建立输出流,将第二个参数,设为true表示后面写入的数据会进行拼接。举个例子,第一次写入数据为:"Hello",第二次在写入数据"World",最终就会拼接成"HelloWorld",如果不想拼接可以不填。
FileOutputStreamfileOutputStream=newFileOutputStream(file,true);Stringtext="欢迎来到智能手机应用软件开发课堂";fileOutputStream.write(text.getBytes());//通过字节的方式写入数据fileOutputStream.close();//写入完毕记得关闭输出流}catch(IOExceptione){ e.printStackTrace();}
问题导入知识解析学以致用课堂小结课后拓展1.1文件存储内部存储内部存储:是将应用程序中的数据以文件方式存储到设备的内部,当创建的应用程序被卸载时,其内部存储文件也随之被删除。Activity提供了openFileOutput()方法可以用于把数据输出到文件中,我们用Context.getFileDir()获取内部存储的目录,代码如下所示:StringfileName="data.txt"; Stringcontent="helloworld"; FileOutputStream
fos; try{fos=openFileOutput(fileName,MODE_PRIVATE);fos.write(content.getBytes()); fos.close(); }catch(Exceptione){e.printStackTrace(); }
问题导入知识解析学以致用课堂小结课后拓展1.1文件存储文件存储的权限Android7.0后申请访问SD外部存储权限1权限申请privatevoidgetSdPermission(){
if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!=
PackageManager.PERMISSION_GRANTED){//首先检查应用是否有读取SD卡权限
ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);}//申请权限
if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
!=PackageManager.PERMISSION_GRANTED){//检查应用是否有写SD卡权限
ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);}//申请权限
}问题导入知识解析学以致用课堂小结课后拓展1.1文件存储文件存储的权限Android7.0后申请访问SD外部存储权限2权限申请处理publicvoidonRequestPermissionsResult(intrequestCode,@NonNullString[]permissions,@NonNullint[]grantResults){
switch(requestCode){
case1:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
}else{
Toast.makeText(this,"youdeniedthepermission",Toast.LENGTH_SHORT).show();}
break;}
}问题导入知识解析学以致用课堂小结课后拓展1.1文件存储文件保存和读取1文件保存publicstaticvoidsaveText(Stringpath,Stringtxt){
try{
FileOutputStreamfos=newFileOutputStream(path);//使用路径参数新建文件输出流;
fos.write(txt.getBytes());//将文本通过输出流保存到文件
fos.close();//关闭输出流
}catch(Exceptione){
e.printStackTrace();}}问题导入知识解析学以致用课堂小结课后拓展1.1文件存储文件保存和读取2文件读取publicstaticStringopenText(Stringpath){
StringreadStr=“”;
try{FileInputStreamfis=newFileInputStream(path);//新建文件输出流
byte[]b=newbyte[fis.available()];//新建字节数组
fis.read(b);//将文件内容通过输入流拷贝到字节数组
readStr=newString(b);//将字节数组内容转换为字符串
fis.close();//关闭输入流
}catch(Exceptione){.printStackTrace();}
returnreadStr;}问题导入知识解析学以致用课堂小结课后拓展1.1文件存储数据保存1获取系统时间publicstaticStringgetNowDateTime(StringformatStr){
Stringformat=formatStr;
if(format==null||format.length()<=0){
format=“yyyyMMddHHmmss”;
}
SimpleDateFormats_format=newSimpleDateFormat(format);//新建时间格式化对象
returns_format.format(newDate());
//使用时间格式化对象格式化当前时间
}问题导入学以致用知识解析课堂小结课后拓展1.1文件存储数据保存2保存数据到文件publicstaticStringsaveDataToFile(){//首先判断SD卡是否可以读取
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)==true){
//初始化文件路径
Stringfile_path=Environment.getExternalStorageDirectory()+“/”+getNowDateTime(“”)+“.txt”;
saveText(file_path,content);
//将数据保存到文件
mTvPath.setText(“用户注册信息文件的保存路径为:\n”+file_path);//在视图组件显示文件信息
Toast.makeText(this,“数据已写入SD卡文件:”,Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"未发现SD卡,请检查:",Toast.LENGTH_SHORT).show();}}问题导入学以致用知识解析课堂小结课后拓展1.1文件存储数据读取1获取文件夹的所有指定后缀名的文件publicstaticArrayList<File>getFileList(Stringpath,String[]extendArray){
ArrayList<File>displayedContent=newArrayList<File>();//新建文件列表对象
File[]files=null;
//新建文件对象数组
Filedirectory=newFile(path);//新建文件路径对象
if(extendArray!=null&&extendArray.length>0){
FilenameFilterfileFilter=getTypeFilter(extendArray);//新建文件过滤器对象
files=directory.listFiles(fileFilter);//文件夹中过滤后缀名后存入文件对象数组
}else{
files=directory.listFiles();
}
if(files!=null){//将文件对象数组中的文件存储到文件列表对象
for(Filef:files){
if(!f.isDirectory()&&!f.isHidden()){
displayedContent.add(f);
}
}
}
returndisplayedContent;
}问题导入学以致用知识解析课堂小结课后拓展1.1文件存储数据读取2指定文件夹的所有txt文档显示到Spinner控件privatevoidre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度全款购入进口跑车合同范本3篇
- 二零二五年度企业与个人投资回报对赌协议3篇
- 二零二五年度员工试用期工作内容调整及考核标准协议3篇
- 二零二五年度电商平台商家会员返利合同3篇
- 2025年度新能源汽车产业链投资基金合作协议3篇
- 2025年度公司股东内部关于企业并购整合的专项协议3篇
- 2025年度绿色能源项目分摊协议3篇
- 二零二五年度新能源汽车充电桩建设投资入股合同3篇
- 2025通信销售合同
- 2025年农村土地永久转让与农村电商合作框架合同3篇
- 承压设备事故及处理课件
- 煤层气现场监督工作要点
- 工会经费收支预算表
- 舒尔特方格55格200张提高专注力A4纸直接打印版
- 质量管理体系各条款的审核重点
- 聚丙烯化学品安全技术说明书(MSDS)
- BBC美丽中国英文字幕
- 卫生院工程施工组织设计方案
- CDR-临床痴呆评定量表
- 《八年级下学期语文教学个人工作总结》
- 铝合金门窗制作工艺卡片 - 修改
评论
0/150
提交评论