欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    输入输出流.ppt

    • 资源ID:5377241       资源大小:1.29MB        全文页数:146页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    输入输出流.ppt

    第10章 输入/输出流,I/O(输入/输出)流类库提供对象之间的数据交互服务 流类库预定义了一批流对象,连接常用的外部输入/输出设备 用户可以定义所需的I/O流对象,使用流库提供的一些功能,实现数据传输,流类库,流类库(stream library)是用继承方法建立的输入输出类库 流类库具有两个平行的基类:streambuf 和 ios 类,所有流类库均以两者之一作为基类 streambuf 类提供对缓冲区的低级操作设置缓冲区,对缓冲区指针进行操作向缓冲区存/取字符 ios 类及其派生类提供用户使用流类的接口,支持对streambuf 的缓冲区输入/输出的格式化或非格式化转换,streambuf,1.streambuf,对缓冲区的低级操作,streambuf,1.streambuf,对缓冲区的低级操作,文件缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,字符串缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,标准I/O缓冲区管理,2.ios,提供用户接口,ios,iostream,2.ios,提供用户接口,ios,iostream,输入流,输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,11.5 文件处理,文件是由一系列数据构成的序列。例如,一组计算或处理结果可以构成一个文件。一个班所有学生的档案数据也可以构成一个文件。每个文件的内容都保存在外存储器中,每个文件都有一个名字,这个名字用标识符来表示。把数据存放在外存储器是以文件的方式进行,从外存储器把数据取出来也以文件的方式进行。在C+中,必须使用文件来解决数据的存储问题。,C+语言系统把文件看成无结构的字节流。根据文件中数据的编码方式可以把文件分为文本文件和二进制文件。根据文件中数据的存取方式可以把文件分为顺序文件和随机文件。在C+中,要进行数据的存取需要使用三个类:文件输入流类ifstream、文件输出流类ofstream 和文件输入输出流类fstream。文件输入流类ifstream:提取文件中的数据到内存。文件输出流类ofstream:把内存中的数据插入到文件。文件输入输出流类fstream:上述两种功能都有。,11.5.1 文件和流,文件字节序号,文件结束符,文件长度=n,11.5.1 文件和流,文件指针,11.5.1 文件和流,文件结束,11.5.1 文件和流,文件中字节存放的都是数据的编码,这些编码可以是各种信息的编码。应用程序对字节序列可以作出各种类型数据或其它信息的解释。如果文件中的每一个字节存放的是ASC码,则每个字节表示一个字符。以ASC码方式存放数据的文件称为文本文件。文本文件是一种顺序文件。在文本文件中,需要使用一个表示文件结束的标识常量EOF,它在iostream中定义,值为26(0 x1A)。关闭文件后,该字符被自动添加到文件的尾部。,以二进制代码方式存放数据的文件称为二进制文件。二进制文件是一种随机文件。当把内存中的数据存放到二进制文件时,C+把数据转换成二进制代码写到二进制文件中去。当从二进制文件中取数据时,C+把文件中的字节流解释为各种类型数据读出来存放到内存。,-内存-,ifstream,ofstream,读文件,写文件,11.5.2 打开和关闭文件,文件操作的基本步骤:1.打开文件2.读/写文件3.关闭文件,1.打开文件,包括建立文件流对象;调用open()函数连接外部文件。打开文件有两种方法:(1)首先建立流对象,然后调用open()函数连接外部文件流类 对象名;对象名.open(文件名,方式);,ifstream、ofstream 或 fstream,例如:打开一个已有文件datafile.dat,准备读:ifstream infile;/建立输入文件流对象 infile.open(datafile.dat,ios:in);/连接文件,指定打开方式 打开(创建)一个文件newfile.dat,准备写:ofstream outfile;/建立输出文件流对象 outfile.open(d:newfile.dat,ios:out);/连接文件,指定打开方式,(2)调用流类带参数的构造函数,建立流对象的同时连接外部文件流类 对象名(文件名,方式);,ifstream、ofstream 或 fstream,例如:ifstream infile(datafile.dat,ios:in);ofstream outfile(d:newfile.dat,ios:out);fstream rwfile(myfile.dat,ios:in|ios:out);,用或运算符“|”连接两个表示打开方式的标识常量,2.关闭文件,例如:ofstream ofile;/创建输出文件流 ofile.open(myfile1,ios:out);/ofile流与文件“myfile1”相关联/访问文件“myfile1”ofile.close();/关闭文件“myfile1”ofile.open(myfile2,ios:out);/重用ofile流,关闭文件操作的作用是把缓冲区数据完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接。关闭文件要使用流类的成员函数close()。当一个流对象的生存期结束,系统也会自动关闭文件。,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,11.5.3 文本文件,把描述某种信息的数据组织成一个整体,这个整体称为一个记录。记录是由一个或若干个数据构成。在把一些相关数据写到文本文件时,可以把这些相关数据组织成一个一个记录写到文本文件中。为了便于标识,每个记录的后面增加一个换行符,作为记录之间的分隔。数据之间可以用空白符、制表符、换行符等来分隔。文本文件可以看成是由若干个记录构成,每个记录占一行,每行后面有一个换行符。,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,0 1 2 3 4 5,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,c=,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,endl,n,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,c=,3 2 1,n,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,建立输出文件流对象,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,默认方式打开文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,插入字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,把整型数转换成字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,以指定格式插入数据,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,#include int main()ofstream out(a:test);if(!out)cout cannot open file.;return;out 10 123.45;out nThis is a short text file.;out.close();,把一个整数、一个浮点数和一个串写到文件 a:test 中,对数值常量做转换,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,int i,float f,char ch,char str1,char str2,10,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,float f,char ch,char str1,char str2,123.45,int i 10,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,char ch,char str1,char str2,T,int i 10,float f 123.45,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,char str1,char str2,his,int i 10,float f 123.45,char ch T,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,ifstream in,char str2,is,int i 10,float f 123.45,char ch T,char str1 his,#include int main()char ch;int i;float f;char str1 10,str2 10;ifstream in(a:test);if(!in)cout i f ch str1 str2;cout i ends f ends ch n;cout str1 str2 endl;in.close();,从文件 a:test 中读出一个整数、一个浮点数、一个字符和两个串,int i 10,float f 123.45,char ch T,char str1 his,char str2 is,ostream cout,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ch,ofstream f2,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,ifstream f1,ofstream f2,ch,把文件 a:test 复制到文件 a:testnew 中,#include int main()char ch;ifstream f1(a:test);if(!f1)cout cannot open test for input.;return;ofstream f2(a:testnew);if(!f2)cout cannot open testnew for ouput.;return;while(f1,把文件 a:test 复制到文件 a:testnew 中,#includeint main()char str=tNew string;ofstream f2(a:testnew,ios:app);/追加方式 if(!f2)cout cannot open testnew for ouput.;return;f2 str;/插入字符串 f2.close();,在文件 a:testnew 的末尾添加字符串,插入串,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,文件名,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,学生记录,建立一个包含学生学号、姓名、成绩的文本文件,#include#include using namespace std;int main()char fileName30,name30;int number,score;ofstream outstuf;cout fileName;outstuf.open(fileName,ios:out);if(!outstuf)cerr number name score)outstuf number name score n;cout?;outstuf.close();,/建立输出文件流对象,/输入文件名,/连接文件,指定打开方式,/调用重载算符函数测试流,/写入一行标题,/向流插入数据,/关闭文件,输入结束,文件关闭时操作系统把缓冲区数据写入磁盘,读文本文件。在屏幕显示学生记录,以及最高分数、最低分数和平均分数,#include#include using namespace std;int main()char name30,s80;int number,score;int n=0,max,min,total=0;double ave;ifstream instuf(a:student.txt,ios:in);if(!instuf)cerr number name score)cout max)max=score;if(score min)min=score;total+=score;n+;ave=double(total)/n;cout maximal is:max endl minimal is:min endl average is:”ave endl;instuf.clo

    注意事项

    本文(输入输出流.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开