版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第72章文件類型
第12章文件類型
12」文件類型與文件指針
12.2文件的打開與關閉
12.3文件的讀寫與建立
12.4文件輔助操作
12.5程序設計舉例
第72章文件類型
12.1文件類型與文件指針
1.文本文件和二進制文件
c語言文件把數(shù)據(jù)看作是一連串的字符(字節(jié))。
c語言文件是一個字符(字節(jié))的序列,是一字符流或
字節(jié)流,是一種流式文件。根據(jù)數(shù)據(jù)的組織形式,可
分為文本文件和二進制文件。
第72章文件類型
文本文件又稱為ASCII文件,每一個字節(jié)中存放一
個ASCII代碼,代表一個字符。例如,一個整數(shù)123,
若用ASCII文件存放,占3個字節(jié)的存儲單元,1、2、
3各用一個字節(jié)存儲。而1、2、3的ASCII碼分別為49、
50、51,故123用ASCII文件存放時,存放形式為
OOllOOOlOOllOOlOOOllOOllo
二進制文件是直接用數(shù)據(jù)的二進制形式存放。例
如,對整數(shù)整3,二進制為0000000001111011,用二進
制文件存放,需2個字節(jié),存放形式為
0000000001111011o
第72章文件類型
2.緩沖文件系統(tǒng)和非緩沖文件系統(tǒng)
在緩沖文件系統(tǒng)中,系統(tǒng)自動在內(nèi)存中為每個正在
使用的文件開辟一個緩沖區(qū),文件的存取都是通過緩沖
區(qū)進行的。緩沖區(qū)相當于一個中轉站,它的大小由具體
的C版本規(guī)定,一般為512字節(jié)。緩沖文件系統(tǒng)原來用于
處理文本文件。
在非緩沖文件系統(tǒng)中,系統(tǒng)不為所打開的文件自動
開辟緩沖區(qū),緩沖區(qū)的開辟由程序完成。非緩沖文件系
統(tǒng)原來用于處理二進制文件。
第72章文件類型
ANSIC不再采用非緩沖文件系統(tǒng),而只采用緩沖
文件系統(tǒng),在處理二進制文件時,也通過緩沖文件系
統(tǒng)進行。ANSIC通過擴充緩沖文件系統(tǒng),使緩沖文件
系統(tǒng)既能處理文本文件,又能處理二進制文件。
第上章文件類型
3.內(nèi)部文件和外部文件
存放在外部介質上的文件稱為外部文件,通過文件
名標識。C程序中的文件稱為內(nèi)部文件,用文件指針來
描述。
程序中要實現(xiàn)對文件的處理,先必須在內(nèi)部文件與
外部文件之間建立聯(lián)系,打開文件;然后方可對文件進
行操作。文件最基本的操作是讀寫操作;操作完成應當
切斷內(nèi)部文件與外部文件之間的聯(lián)系,關閉文件。
對文件進行的所有操作通過C編譯系統(tǒng)提供的標準
函數(shù)完成,這些函數(shù)的信息包含在頭文件“stdio.h”中。
第72章文件類型
12.1.2文件類型
文件類型是一特殊的結構體類型,一般命名為
FILEo用戶可以直接使用FILE來定義文件類型變量,
存放要處理的文件的基本信息。
各種C編譯系統(tǒng)的FILE定義可以不同,但均包含
進行文件操作所需的各種信息。
第72章文件類型
下面是TURBOC中對FILE的定義:
typedefstruct
{shortlevel;
unsignedflags;
charfd;
unsignedcharhold;
shortbsize;
unsignedchar"buffer;
unsignedchar*curp;
unsignedistemp;
shorttoken;
}FILE;
第72章文件類型
12.1.3文件指針變量
對文件的描述,往往通過指向文件的文件指針變量
來進行。文件指針變量定義的形式為:
FILE*文件指針變量;
例如:FILE*fp,*fpa[10];
定義了文件指針變量班和文件指針變量數(shù)組中a。文
件指針變量幣及文件指針變量數(shù)組Sa的每個分量可以指
向一個文件的信息。
第72章文件類型
12.2文件的打開與關閉
12.2.1文件的打開
文件的打開用fopen()函數(shù)完成,調用方式通常
為:
fp=fopen(文件名,文件使用方式);
第72章文件類型
文件使用方式共有12種,用特定字符形成的字符串
來描述。
(1)"r"方式,以只讀方式打開文本文件。
這時從文件中讀數(shù)據(jù)到內(nèi)存,故要求文件已經(jīng)存在。
用〃r〃方式打開的文件只能讀,不能同時寫。
(2)〃w〃方式,以只寫方式打開文本文件。
這時將內(nèi)存中的數(shù)據(jù)寫入到磁盤文件中。若文件不
存在,建立新文件;若文件存在,則刷新文件,重新建
立。用〃w〃方式打開的文件只能寫,不能同時讀。
第72章文件類型
(3)〃a〃方式,為文本文件的追加方式。
用于向已存在的文件尾部追加新的數(shù)據(jù),而文件中原來
的數(shù)據(jù)不被破壞。
(4)〃r+"、〃w+〃、〃a+”方式,打開的文本文件既能讀又能
同時寫。
〃r+〃方式:在讀的同時可以進行寫。讀寫位置指針在頭
部,若原來存在此文件,則以覆蓋方式寫。
"w+〃方式:在寫的同時可以進行讀。由于打開文件時,
文件原來的內(nèi)容被刷新,一般不要在打開文件后立即讀文
件。
〃a+J在追加的同時可以進行讀。讀文件時,從文件首
部開始;寫文件時,在文件尾部追加。
第72章文件類型
(5)〃rb〃、〃wb”、〃ab〃、〃rb+〃、〃wb+〃、〃ab+〃是使用
二進制文件相應的六種方式。
打開文件可得到三個信息:
①要訪問的文件名。
②使用文件的方式。
③哪一個指針變量用于指向被打開的文件。
打開成功,返回文件指針(文件信息區(qū)的起始地
址);不能打開,返回空指針。
第72章文件類型
例如:
(1)fp=fopen("student.dat","w");
以只寫方式打開當前盤當前目錄下的文本文件中的學
生數(shù)據(jù)文件,用戶可將數(shù)據(jù)寫入此磁盤文件中。
(2)fp=fopen("c:\cj\cjc.dat",student.dat","r");
以只讀方式打開C盤成績子目錄下C語言成績文件,
用戶可將文件中數(shù)據(jù)讀出來。但此文件必須存在,否則會
出錯。
第72章文件類型
(3)fp=fopen(〃PRG〃,〃ab+");
打開二進制文件PRG,在讀的同時也可以寫。
為確保文件的讀寫操作,對文件是否已正常打開往
往加上if語句進行控制。例如:
if(fp=fopen(("student.dat","w")==NULL)
{printf("不能打開文件!”);
exit(0);
第72章文件類型
說明:
(1)不是所有編譯系統(tǒng)均提供以上12種文件使用方式。
(2)用"r〃、"rb〃方式打開的文件必須已經(jīng)存在。
(3)用"w"、"wb"方式打開的文件,可以存在也可以不
存在。不存在時,則新建文件;存在時,重新建立,原
文件內(nèi)容不被保留。
(4)在讀寫文本文件時,對回車換行符要進行轉換,
讀時回車換行符轉換成換行符,寫時回車換行符轉換成回
車、換行兩個字符。對二進制文件,不進行這種轉換。
第72章文件類型
(5)程序運行時,系統(tǒng)自動打開標準輸入stdin、
標準輸出stdout、標準出錯輸出stderr三個標準文件。
stdin>stdout>stderr由系統(tǒng)自動定義,可直接使用。
(6)標準設備文件可與普通文件一樣操作,但將
產(chǎn)生特殊效果。如寫到打印機,將在程序中實現(xiàn)打印
輸出控制。
第72章文件類型
12.2.2文件的關閉
文件在使用完后,應及時關閉。文件的關閉用
fclose()函數(shù)完成,調用方式為:
fclose(文件指針變量);
關閉文件將使文件指針變量與文件名脫鉤,即指針
變量不再指向該文件。文件關閉后不能再用該指針變量
對文件進行操作,該指針變量可再指向其它文件。
順利執(zhí)行了關閉操作,將返回函數(shù)值0。如返回一
個非0值,則表示文件關閉出錯。
第72章文件類型
12.3文件的讀寫與建立
12.3.1字符級數(shù)據(jù)的讀和寫
1.字符級數(shù)據(jù)的讀
函數(shù)原型:
intfgetc(FILE*fp);
功能:從文件指針中所指向的文件中讀取一個字節(jié)的
代碼值(字符),作為函數(shù)的返回值。正常情況下為一
個字符,讀到文件尾或出錯時為EOF(-1)o
第72章文件類型
說明:
(1)讀完一字節(jié)數(shù)據(jù)后,文件指針自動后移。
(2)getc和魚etc是等價的宏。
(3)若文件指針為stdin,貝悔etc(stdin)功能與
getchar()等價。
第72章文件類型
2.字符級數(shù)據(jù)的寫
函數(shù)原型:
intfputc(intch,FILE*fp);
功能:將ch寫入文件指針中所指向的文件中。寫入
成功返回字符值,不成功返回值EOF。
說明:
(1)寫入數(shù)據(jù)前,文件指針自動后移。
(2)puttc和finite是等價的宏。
(3)若文件指針為stdout,貝II幣utc(stdout)功能與
puttchar()等價。
(4)文件的建立通過寫操作完成。
第72章文件類型
12.3.2字級數(shù)據(jù)的讀和寫
1.字級數(shù)據(jù)的讀
函數(shù)原型:
intgetw(FILE*fp);
功能:
從文件指針中所指文件中讀一個字的數(shù)據(jù)(整
數(shù)),并以它作為函數(shù)的返回值。
說明:
非標準C所提供函數(shù)。
第72章文件類型
2.字節(jié)數(shù)據(jù)的寫
函數(shù)原型:
intputw(intw,FILE*fp);
功能:
寫一個字的數(shù)據(jù)(整數(shù))到文件指針中所指的
文件中,并以它作為函數(shù)的返回值。
說明:非標準C所提供函數(shù)。
第72章文件類型
12.3.3字符串級數(shù)據(jù)的讀和寫
1.字符串數(shù)據(jù)的讀
函數(shù)原型:
char*fgets(char*str,intlen,FILE*fp);
功能:
從文件指針S所指的文件中讀入一個長度為len-1的
字符串,送入到str所指內(nèi)存地址中。返回值為str的首地
址,若讀到文件尾或出錯,則返回值為NULL。
第72章文件類型
說明:
(1)字符串讀入后在最后加結尾符,\0,。
(2)將讀到的回車符作為字符存儲。這點與gets()
函數(shù)不同,gets()把讀到的回車符轉換成結尾符。
(3)字符串數(shù)據(jù)的讀和寫亦稱“行處理”。
第72章文件類型
2.字符串數(shù)據(jù)的寫
函數(shù)原型:
intfputs(char*str,FILE*fp);
功能:
將str指針所指字符串寫入到文件指針中所指文
件中。若該函數(shù)成功調用,返回函數(shù)值0,否則返
回函數(shù)值非0。
第72章文件類型
12.3.4數(shù)據(jù)塊數(shù)據(jù)的讀和寫
1.數(shù)據(jù)塊數(shù)據(jù)的讀
函數(shù)原型:
unsignedfread(void*buffer,unsignedsize,unsigned
count,FILE*fp);
功能:從文件指針fjp所指的文件中讀取count個大小為size
字節(jié)的數(shù)據(jù)塊到buffer指針所指的內(nèi)存中。讀到的數(shù)據(jù)可
能含有各種不同的類型。若該函數(shù)成功調用,返回count
的值。
第72章文件類型
例如:
inta[100];
fread(a,2,100,fp);/*從中讀取100個大小為
2字節(jié)的數(shù)據(jù)塊(整數(shù))到數(shù)組a中*/
第72章文件類型
2.數(shù)據(jù)塊數(shù)據(jù)的寫
函數(shù)原型:
unsignedfwrite(void*buffer,unsignedsize,unsignedcount,
FILE*fp);
功能:向文件指針中所指的文件寫入由buffer指針所
標識的count個大小為size字節(jié)的數(shù)據(jù)塊。若該函數(shù)成功
調用,返回count的值。例如:
inta[100];
fwrite(a,2,100,fp);/*將整個數(shù)組a寫入文件中中*/
第72章文件類型
12.3.5格式化數(shù)據(jù)的讀和寫
函數(shù)原型:
intfscanf(FILE*fp,格式字串,變量地址表);
intfprintf(FILE*fp,格式字串,變量表);
使用fscanf()和幣rintf()函數(shù)對磁盤文件進行讀
和寫,相當方便。但是輸入時需將ASCII碼轉換為二進制,
輸出時需將二進制轉換成ASCII碼,需花費較多的時間,
故一般較少采用,而是使用fread()和fwrite()函數(shù)。
第72章文件類型
例如:
inti,j;
floatf;
fscanf(fp,〃%d%d%P,&i,&j,&f);/*
從中中按指定格式讀取數(shù)據(jù)至i、j、f中*/
第上章文件類型________________
12.3.6文件的建立步驟
對文件操作前必須打開文件,文件打開后才可進
行讀寫操作,操作完成應關閉文件。
文件的建立步驟如下:
(1)以寫方式打開文件。
(2)將數(shù)據(jù)寫入文件,多個數(shù)據(jù)反復寫入。
(3)寫完數(shù)據(jù)關閉文件。
第72章文件類型
例12-1定義一個函數(shù),建立存放26個英文小寫字母的文件LF.DAT。
voidcreatfile()
{char1;
FILE*fp;
if((fp=fopen("LF.DAT","w"))==NULL)/*打開文件*/
{printf("不能打開文件!");
exit(0);
}
fbr(l='a';1++)/*寫入數(shù)據(jù)*/
fputc(1,fp);
fclose(fp);/*關閉文件*/
第72章文件類型
例12?2定義一個函數(shù),建立存放某班50個同學姓名、
C語言成績的數(shù)據(jù)文件CCJ.DAT,原始數(shù)據(jù)由數(shù)組參數(shù)傳入。
voidcreatfile(floatx[])
{inti;
FILE*fp;
if((fp=fopen(〃CCJ.DAT〃,〃wb"))==NULL)/*打開文件*/
{printf("不能打開文件!”);
exit(0);
}
for(i=0;iv=50;i++)/*寫入數(shù)據(jù)*/
fwrite(x+i,4,1,fp);
fclose(fp);/*關閉文件*/
第72章文件類型
寫入數(shù)據(jù)也可以整體一次完成:
fwrite(x,4,50,fp);
⑴文件的建立在操作系統(tǒng)下可通過改向操作完成。
(2)數(shù)據(jù)源文件也可通過任何字處理軟件建立。
(3)執(zhí)行一個向打印機寫的操作,可在程序中實現(xiàn)數(shù)據(jù)
的打印輸出。
例如:
fp=fopen("PRN:","w");
fputs("HUNANCOMPUTER",fp);/*打印輸出
HUNANCOMPUTER*/
打印輸”也喈接住手系統(tǒng)
第72章文件類型
12.3.7文件的讀取控制
while(fgetc(fp)!=EOF)
{讀取數(shù)據(jù)}
或
while(!feof(fp))
{讀取數(shù)據(jù)}
對于二進制文件,由于最后一個數(shù)據(jù)可能為-1
(EOF),最好用feof()函數(shù)判斷。
第72章文件類型
例12-3從上例建立的文件CCJ.DAT中讀出學生的C
語言成績,求出每個學生與平均成績之差。
/*程序12-3,求每個學生與平均成績之差*/
structst
{char*name;
floatcj;
}C[200];
main()
{inti=0,n;
floatsum=0,av;
floatsav[200];
FILE*fp;
第72章文件類型
if((fp=fopen("CCJ.EAT",〃rb〃))==NULL)/*打開文件*/
{printf("不能打開文件!");
while(!feof(fjp))/*讀數(shù)據(jù),同時進行累加*/
{fread(c+i,4,1,fp);
sum+=c[i].cj;
i++;
}
n=i;
av=sum/n;/*求平均成績*/
for(i=0;i<n;i++)/*求與平均成績之差并輸出*/
{sav[i]=c[i].cj-av;
printf("%s,%6.1f,c[i].name,c[i].cj,sav[i]);
第72章文件類型
12.4文件輔助操作
1.反繞函數(shù)
函數(shù)原型:
voidrewind(FILE*fp);
功能:使文件的讀寫位置指針返回文件開頭。
第72章文件類型
2.隨機定位函數(shù)
函數(shù)原型:
intfseek(FILE*fp,longintnumbytes,intorigin);
功能:將文件的位置指針移動numbytes個字節(jié),
numbytes為正數(shù)表示后移,為負數(shù)表示前移。其中移動的
開始位置由origin確定,origin的值可以為0、1、2,或
SEEK-SET、SEEK-CUR、SEEK-END,分另U代表
“文件開頭”、“當前位置”、“文件末尾”三個特殊位
置。________________________________
第72章文件類型
例如:
(1)fseek(fp,1001,0);/*將文件的位置指針
移動到離文件開頭100個字節(jié)處*/
(2)fseek(fp,501,1);/*將文件的位置指針向
前移動50個字節(jié)處*/
(3)fseek(fp,-101,2);/*將文件的位置指針
向后移10個字節(jié)處*/利用隨機定位函數(shù)實現(xiàn)對文件的隨
機讀寫。
第72章文件類型
3.求當前讀寫位置函數(shù)
函數(shù)原型:
longintftell(FILE*fp);
功能:
得到文件的當前讀寫位置指針,用相對于文件開
頭的位移量來表示。若出現(xiàn)調用錯誤,返回值為-1。
第72章文件類型
4.出錯檢測函數(shù)
函數(shù)原型:
intferror(FILE*fp);
功能:
檢查文件中各種輸入輸出函數(shù)調用是否出錯。
若得到的函數(shù)值為0,表示未出錯;得到的函數(shù)值非
0,表示出錯。
調用fopen()函數(shù)時,ferror初值自動置0。
第/Z章文件類型________________
5.初始化清零函數(shù)
函數(shù)原型:
voidclearerr(FILE*fp);
功能:
清除文件錯誤標志和文件結束,將文件錯誤標志和
文件結束標志置0。
輸入輸出函數(shù)調用出錯后,出錯標志一直保留,直到
對同一文件調用clearerr()函數(shù)、rewind()函數(shù)或任
一輸入輸出函數(shù)。
第72章文件類型
12.5程序設計舉例
例12-4從鍵盤輸入若干字符,存入某磁盤文件中,
然后從文件中讀取數(shù)據(jù)打印輸出。
/*程序12-4,輸入若干字符至文件,并打印輸出*/
main
{charch,*fhame;
FILE*fp,*pp;
scanf("%s",fname);/*輸入磁盤文件名*/
/*建立文件*/
第72章文件類型
if((fp=fopen(fhame,"w"))==NULL)
{printf("文件不能打開!");
exit(0);
ch=getchar();
while(ch!='\n')
{fputc(ch,fp);
ch=getchar();
fblose(fp);
/*從剛建立的磁盤文件中讀取數(shù)據(jù),打印輸出*/
if((fp=fbpen(fhame,"r"))==NULL)
{printf("數(shù)據(jù)文件不能打開!");
exit(0);
第72章文件類型
if((pp=fbpen("PRN:","w〃))==NULL)
{printf("打印機沒能連接!〃);
exit(0);
}
ch=fgetc(fp);
while(!feof(fp))
{fprintf(pp,"%6c",ch)
ch=fgetc(fp);
fclose(fp);
fclose(pp);
第72章文件類型
例12?5學生信息包含有學號、姓名、年齡、成績
及住址,從鍵盤輸入n個學生的這些信息,然后存入一個
磁盤文件STUDENT.DAT中。
/*程序12-5,建立學生信息文件*/
#defineSIZE200
structstudent
{intnum;
char*name;
intage;
floatscore;
char*addr;
}stud[SIZE];
intn;
第72章文件類型
voidsave()/*建立文件STUDENT.DAT*/
{FILE*fp;
inti;
if((fp=fbpen("STUDENT.DAT",〃wb"))==NULL)
{printf("不能建立文件!");
exit(0);
}
for(i=0;i<n;i++)
if(fwrite(&stud[i],sizeof(structstudent),1,fp)!=1)
{printf("文件不能寫!\n");
exit(0);
}
第72章文件類型
fclose(fp);
}
main()
{inti;
scanf("%d",&n);
for(i=0;i<n;i++)/*從鍵盤輸入數(shù)據(jù)*/
scanf("%d%s%d%f%s",&stud[i].mum,stud[i].name,
&stud[i].age,&stud[i].score,stud[i].addr);
save();/*調用函數(shù)建立文件*/
第72章文件類型
例12-6編寫類似DOS拷貝命令的文件復制程序。
/*程序12-6,拷貝命令程序*/
main(intargc,char*argv[])
{inti;
FILE*fps,*fpt;
if(argc!=3)
{puts("命令行參數(shù)格式是:執(zhí)行文件名源文件名目標文件名〃);
exit(0);
}
if((fps=fbpen(argv[1],"rb"))==NULL)
{printf("源文件不能打開!");
exit(0);
第72章文件類型
if((fpt=fbpen(argv[2],"wb"))==NULL)
{printf("目標文件不能建立!");
exit(0);
}
while(!feof(fps))
{fread(&i,2,1,fps);
fwrite(&i,2,1,fpt);
fclsoe(fps);
fclose(fpt);
第72章文件類型
例12-7對例11-5建立的磁盤文件STUDENT.DAT,
首先在屏幕上輸出文件內(nèi)容,然后使指針移到開頭,實現(xiàn)
文件的復制。
/*程序12-7,文件的輸出復制操作*/
#defineSIZE200
structstudent
{intnum;
char*name;
intage;
floatscore;
char*addr;
}stud;
第72章文件類型
main()
{FILE*fpl,*fp2;
char*tname;
inti=0;
if((fpl=fopen("STUDENT.DAT",〃rb"))=NULL)
{printf("不能打開文件!");
exit(0);
}
while(!feof(fpl))/*屏幕輸出*/
{fread(&stud,sizeof(structstu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行工作總結精準營銷客戶頻頻
- 激勵員工的創(chuàng)新方式計劃
- 電子商務行業(yè)管理顧問工作總結
- 《淺水灣拉斯維加斯》課件
- 2022年湖南省永州市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2024年江蘇省淮安市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2024年內(nèi)蒙古自治區(qū)巴彥淖爾市公開招聘警務輔助人員輔警筆試自考題2卷含答案
- 2021年浙江省溫州市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 江蘇省無錫市(2024年-2025年小學六年級語文)統(tǒng)編版質量測試((上下)學期)試卷及答案
- 2025年燃氣摻混設備項目提案報告模式
- 培訓內(nèi)驅力的課件
- 管理后臺策劃方案
- 人防、物防、技防工作措施
- 市場部培訓課程課件
- 八年級歷史上冊論述題匯總
- 資產(chǎn)評估學教程(第八版)習題及答案 喬志敏
- 提高留置針規(guī)范使用率
- 垃圾清運服務投標方案(技術方案)
- 《民俗旅游學》教學大綱(含課程思政元素)
- 人教版小學三年級上學期期末數(shù)學試卷(及答案)
- 2021年學校意識形態(tài)工作總結
評論
0/150
提交評論