




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章系統(tǒng)實(shí)現(xiàn)上章回顧了解“儲(chǔ)蓄綜合業(yè)務(wù)平臺(tái)”軟件的系統(tǒng)架構(gòu)了解本案例開(kāi)發(fā)涉及技術(shù)結(jié)構(gòu)體數(shù)組的訪問(wèn)文件操作熟悉本案例的功能模塊設(shè)計(jì)熟悉本案例的界面設(shè)計(jì)要求本章目標(biāo)核心功能實(shí)現(xiàn)主函數(shù)實(shí)現(xiàn)開(kāi)戶模塊實(shí)現(xiàn)銷戶模塊實(shí)現(xiàn)存款模塊實(shí)現(xiàn)取款模塊實(shí)現(xiàn)查詢模塊實(shí)現(xiàn)核心功能部分核心技術(shù)分析-1上一章中,對(duì)本案例的系統(tǒng)結(jié)構(gòu)、功能模塊設(shè)計(jì)進(jìn)行了詳細(xì)的說(shuō)明。下面將帶領(lǐng)大家實(shí)現(xiàn)本案例的核心功能,要實(shí)現(xiàn)核心功能,必須知道系統(tǒng)的技術(shù)要點(diǎn),在這個(gè)過(guò)程之前我們先分析一下系統(tǒng)的技術(shù)要點(diǎn),系統(tǒng)總體流程如下圖所示:核心技術(shù)分析-2核心技術(shù)分析-3分析上面的流程圖不難看出系統(tǒng)中除了退出模塊各個(gè)模塊的實(shí)現(xiàn)都涉及了數(shù)據(jù)文件記錄結(jié)構(gòu)體和文本文檔的操作,下面我們將與這些技術(shù)進(jìn)行“親密接觸”:學(xué)習(xí)C語(yǔ)言結(jié)構(gòu)體類型的定義,定義結(jié)構(gòu)體類型變量的方法,結(jié)構(gòu)體類型變量的引用。學(xué)習(xí)使用C語(yǔ)言typedef定義類型。學(xué)習(xí)使用C語(yǔ)言文件操作庫(kù)函數(shù)實(shí)現(xiàn)基于流式文件的讀寫操作。好了,接下來(lái)讓我們一起踏上打造這款“儲(chǔ)蓄綜合業(yè)務(wù)平臺(tái)”的神秘之旅。
核心技術(shù)分析-4C語(yǔ)言結(jié)構(gòu)體類型介紹結(jié)構(gòu)體類型的定義在一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中,有時(shí)需要將不同類型的數(shù)據(jù)集合成一個(gè)有機(jī)的整體。如:一個(gè)學(xué)生的情況紀(jì)錄單可能包括學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等數(shù)據(jù)項(xiàng)。這樣的整體,C語(yǔ)言中稱為“結(jié)構(gòu)體”數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)稱“結(jié)構(gòu)體”(structure)。結(jié)構(gòu)體是一種較為復(fù)雜而又非常靈活的構(gòu)造型的數(shù)據(jù)類型。一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù)可以由若干個(gè)稱為成員(或域)的成分組成。不同的結(jié)構(gòu)體類型其成員不同。對(duì)于一個(gè)具體的結(jié)構(gòu)體而言,其成員的數(shù)量是固定的,這一點(diǎn)與數(shù)組相同,但該結(jié)構(gòu)體中各成員的數(shù)據(jù)類型可以不同,這是結(jié)構(gòu)體與數(shù)組的重要區(qū)別。結(jié)構(gòu)體類型定義的一般形式:struct結(jié)構(gòu)體名{結(jié)構(gòu)體成員表列};其中struct是關(guān)鍵字,結(jié)構(gòu)體成員表列也稱域表,每個(gè)成員也稱結(jié)構(gòu)體中的一個(gè)域。對(duì)每個(gè)成員都應(yīng)進(jìn)行類型說(shuō)明。例如:核心技術(shù)分析-5structstudent{intnum;charname[20];charsex;intage;floatscore;}
1結(jié)構(gòu)體類型定義是由程序員根據(jù)設(shè)計(jì)需要自行定義的,因此結(jié)構(gòu)體類型可以有多種,每種結(jié)構(gòu)體類型都可以有自己的結(jié)構(gòu)體名以及包含不同數(shù)目的成員。2若定義了一個(gè)結(jié)構(gòu)體類型,那僅僅是定義類型而已,而不分配內(nèi)存單元。例如上面已經(jīng)定義了的structstudent結(jié)構(gòu)體類型,structstudent可以用來(lái)定義一個(gè)該類型的變量,并不意味著它的那些成員被分配了內(nèi)存空間。核心技術(shù)分析-63成員名可以與程序中的變量名相同,兩者不代表同一對(duì)象。例如,程序中可以另定義變量num,它與structstudent中的num是兩回事,互不干擾。4結(jié)構(gòu)體成員類型可以是整型、實(shí)型、字符型、數(shù)組、指針等基本類型或構(gòu)造類型,還可以是已定義過(guò)的結(jié)構(gòu)體類型。例如:核心技術(shù)分析-7structdate{intyear;intmonth;intday;};structstudent{intnum;charname[20];charsex;structdatebirthday;floatscore[4];};核心技術(shù)分析-8結(jié)構(gòu)體變量的定義結(jié)構(gòu)體類型的定義只是指出了該結(jié)構(gòu)的組成情況,表明存在有此種類型的結(jié)構(gòu)模型。該結(jié)構(gòu)體類型中不能存放具體的數(shù)據(jù),系統(tǒng)也不會(huì)為它分配實(shí)際的存貯單元。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)在定義了某種結(jié)構(gòu)體類型以后,再定義該結(jié)構(gòu)體類型的變量,以便在結(jié)構(gòu)體類型的變量中存放具體的數(shù)據(jù)。結(jié)構(gòu)體變量的定義有三種形式:
核心技術(shù)分析-9structstudent{intnum;charname[20];charsex;intage;floatscore[4];};structstudentst1,st2;
1.先聲明結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型的變量。核心技術(shù)分析-10structstudent{intnum;charname[20];charsex;intage;floatscore[4];}st1,st2;
2.在聲明結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體類型變量。
核心技術(shù)分析-11struct{intnum;charname[20];charsex;intage;floatscore[4];}st1,st2;
3.直接定義結(jié)構(gòu)體類型變量。在關(guān)鍵字struct后省略了結(jié)構(gòu)體名。不提倡使用這種形式。
核心技術(shù)分析-12結(jié)構(gòu)體變量的引用1.結(jié)構(gòu)體變量整體引用如果要將結(jié)構(gòu)體變量整體引用則往往只限于將一個(gè)結(jié)構(gòu)體變量直接賦值給另一個(gè)具有相同類型的結(jié)構(gòu)體變量。例如有聲明語(yǔ)句:structstudentstux,stuy;,執(zhí)行stuy=stux;語(yǔ)句后變量stuy中各成員的值都完全與stux各成員的值相等。2.結(jié)構(gòu)體變量成員引用 對(duì)結(jié)構(gòu)體成員的引用方式為:結(jié)構(gòu)體變量名.成員名其中,“.”為結(jié)構(gòu)體成員運(yùn)算符,它的優(yōu)先級(jí)處于所有運(yùn)算符優(yōu)先級(jí)的最高級(jí)別。例如:st1.num表示st1變量中的num成員,可以對(duì)它賦值st1.num=1001,這時(shí)st1.num就相當(dāng)于一個(gè)整型數(shù)。
核心技術(shù)分析-13使用C語(yǔ)言typedef定義類型typedef為C語(yǔ)言的關(guān)鍵字,作用是為一種數(shù)據(jù)類型定義一個(gè)新名字。這里的數(shù)據(jù)類型包括內(nèi)部數(shù)據(jù)類型(int,char等)和自定義的數(shù)據(jù)類型(struct等)。在編程中使用typedef目的一般有兩個(gè),一個(gè)是給變量一個(gè)易記且意義明確的新名字,另一個(gè)是簡(jiǎn)化一些比較復(fù)雜的類型聲明。核心技術(shù)分析-14typedef的最簡(jiǎn)單使用,例如:
typedeflongbyte_4;
作用:給C提供的標(biāo)準(zhǔn)數(shù)據(jù)類型long起個(gè)新名字,叫byte_4。核心技術(shù)分析-15typedef與結(jié)構(gòu)體結(jié)合使用,例如:structstudent{intnum;charname[20];charsex;intage;floatscore[4];};
typedefstructstudentSTUDENT;STUDENTst1,st2;
核心技術(shù)分析-16作用:typedef為結(jié)構(gòu)體structstudent起了一個(gè)名字,叫STUDENT因此,STUDENT實(shí)際上相當(dāng)于structstudent,我們可以使用STUDENT來(lái)定義變量。
核心技術(shù)分析-17C語(yǔ)言文件操作介紹在ANSIC中,對(duì)文件的操作分為兩種方式,即流式文件操作和I/O文件操作,本系統(tǒng)使用了流式文件操作,下面介紹之:流式文件操作是通過(guò)緩沖區(qū)來(lái)進(jìn)行;流式文件操作是圍繞一個(gè)FILE指針來(lái)進(jìn)行。這種方式的文件操作有一個(gè)重要的結(jié)構(gòu)FILE,F(xiàn)ILE在stdio.h中定義如下:
核心技術(shù)分析-18FILE這個(gè)結(jié)構(gòu)包含了文件操作的基本屬性,對(duì)文件的操作都要通過(guò)這個(gè)結(jié)構(gòu)的指針來(lái)進(jìn)行。此種文件操作常用的函數(shù)和功能如下:typedefstruct{intlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/intbsize;/*Buffersize*/unsignedchar_FAR*buffer;/*Datatransferbuffer*/unsignedchar_FAR*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;/*ThisistheFILEobject*/
核心技術(shù)分析-19fopen()打開(kāi)流
fclose()關(guān)閉流
fputc()寫一個(gè)字符到流中fgetc()從流中讀一個(gè)字符fseek()在流中定位到指定的字符fputs()寫字符串到流fgets()從流中讀一行或指定個(gè)字符
fprintf()按格式輸入到流
fscanf()從流中按格式讀取feof()到達(dá)文件尾時(shí)返回真值
ferror()發(fā)生錯(cuò)誤時(shí)返回其值rewind()復(fù)位文件定位器到文件開(kāi)始處remove()刪除文件fread()從流中讀指定個(gè)數(shù)的字符fwrite()向流中寫指定個(gè)數(shù)的字符tmpfile()生成一個(gè)臨時(shí)文件流tmpnam()生成一個(gè)唯一的文件名核心技術(shù)分析-20下面就介紹一下這些函數(shù)(紅色標(biāo)注的是本系統(tǒng)使用到的函數(shù))
1.fopen()
fopen的原型是:FILE*fopen(constchar*filename,constchar*mode),fopen實(shí)現(xiàn)三個(gè)功能:
1、為使用而打開(kāi)一個(gè)流
2、把一個(gè)文件和此流相連接
3、給此流返回一個(gè)FILE指針
參數(shù)filename指向要打開(kāi)的文件名,mode表示打開(kāi)狀態(tài)的字符串,其取值如下:
“rt”只讀打開(kāi)一個(gè)文本文件,只允許讀數(shù)據(jù)
“wt”只寫打開(kāi)或建立一個(gè)文本文件,只允許寫數(shù)據(jù)
“at”追加打開(kāi)一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)
“rb”只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)
“wb”只寫打開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù)
“ab”追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)
“rt+”讀寫打開(kāi)一個(gè)文本文件,允許讀和寫
“wt+”讀寫打開(kāi)或建立一個(gè)文本文件,允許讀寫
“at+”讀寫打開(kāi)一個(gè)文本文件,允許讀,或在文件末追加數(shù)據(jù)
“rb+”讀寫打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫
“wb+”讀寫打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫
“ab+”讀寫打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)
注:系統(tǒng)默認(rèn)的是以文本模式打開(kāi),所以打開(kāi)一個(gè)文本文件時(shí)‘t’字符可以省略。核心技術(shù)分析-21對(duì)于文件使用方式有以下幾點(diǎn)說(shuō)明:1)文件使用方式由r,w,a,t,b,+六個(gè)字符拼成,各字符的含義是:r(read):讀w(write):寫a(append):追加t(text):文本文件,可省略不寫b(banary):二進(jìn)制文件+:讀和寫2)凡用“r”打開(kāi)一個(gè)文件時(shí),該文件必須已經(jīng)存在,且只能從該文件讀出。3)用“w”打開(kāi)的文件只能向該文件寫入。若打開(kāi)的文件不存在,則以指定的文件名建立該文件,若打開(kāi)的文件已經(jīng)存在,則將該文件刪去,重建一個(gè)新文件。4)若要向一個(gè)已存在的文件追加新的信息,只能用“a”方式打開(kāi)文件。但此時(shí)該文件必須是存在的,否則將會(huì)出錯(cuò)。5)在打開(kāi)一個(gè)文件時(shí),函數(shù)返回一個(gè)FILE指針,所以申明一個(gè)FILE指針后不用初始化,而是用fopen()來(lái)返回一個(gè)指針并與一個(gè)特定的文件相連,如果失敗,fopen將返回一個(gè)空指針值NULL,在程序中可以用這一信息來(lái)判別是否完成打開(kāi)文件的工作,并作相應(yīng)的處理。例:核心技術(shù)分析-22fopen函數(shù)使用示例:FILE*fp;
if(fp=fopen("123.456","wb")){puts("打開(kāi)文件成功");}else{puts("打開(kāi)文件成敗");}
核心技術(shù)分析-232.fclose()
fclose()的功能就是關(guān)閉用fopen()打開(kāi)的文件,其原型是:intfclose(FILE*fp);如果成功,返回0,失敗返回EOF。
在程序結(jié)束時(shí)一定要記得關(guān)閉打開(kāi)的文件,不然可能會(huì)造成數(shù)據(jù)丟失的情況,我以前就經(jīng)常犯這樣的毛病。例:fclose(fp);核心技術(shù)分析-243.fputc()
向流寫一個(gè)字符,原型是intfputc(intc,FILE*stream);成功返回這個(gè)字符,失敗返回EOF。例:
fputc('X',fp);
4.fgetc()
從流中讀一個(gè)字符,原型是intfgetc(FILE*stream);成功返回這個(gè)字符,失敗返回EOF。例:charch1=fgetc(fp);
核心技術(shù)分析-255.fseek()
此函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中,功能是定位到流中指定的位置,原型是intfseek(FILE*stream,longoffset,intwhence);如果成功返回0,參數(shù)offset是移動(dòng)的字符數(shù),whence是移動(dòng)的基準(zhǔn),取值是:
符號(hào)常量值基準(zhǔn)位置
SEEK_SET0文件開(kāi)頭
SEEK_CUR1當(dāng)前讀寫的位置
SEEK_END2文件尾部例:fseek(fp,1234L,SEEK_CUR);//把讀寫位置從當(dāng)前位置向后移動(dòng)1234字節(jié)(L后綴表示長(zhǎng)整數(shù))fseek(fp,0L,SEEK_END);//把讀寫位置移動(dòng)到文件尾核心技術(shù)分析-266.fputs()
寫一個(gè)字符串到流中,原型intfputs(constchar*s,FILE*stream);例:fputs("ILoveYou",fp);
7.fprintf()
按格式輸入到流,其原型是intfprintf(FILE*fp,constchar*format,[argument,...]);其功能是以格式控制串(format)所指定的格式,向fp所指定的流輸入數(shù)據(jù),數(shù)據(jù)項(xiàng)列寫在格式控制串后的參數(shù)表中。例:fprintf(fp,"%2d%s",4,"Hahaha");
核心技術(shù)分析-278.fgets()
從流中讀一行或指定個(gè)字符,原型是char*fgets(char*s,intn,FILE*stream);從流中讀取n-1個(gè)字符,除非讀完一行,參數(shù)s是來(lái)接收字符串,如果成功則返回s的指針,否則返回NULL。例:如果一個(gè)文件的當(dāng)前位置的文本如下:Love,IHaveBut........如果用fgets(str,4,file1);則執(zhí)行后str="Lov",讀取了4-1=3個(gè)字符,而如果用fgets(str,23,file1);則執(zhí)行后str="Love,IHave",讀取了一行(不包括行尾的‘\n’)。核心技術(shù)分析-289.fscanf()
從流中按格式讀取,其原型是intfscanf(FILE*stream,constchar*format,[address,...]);其用法和scanf()相同,不過(guò)不是從控制臺(tái)讀取,而是從流讀取罷了。例:fscanf(fp,"%d%d",&x,&y);
10.feof()
檢測(cè)是否已到文件尾,是返回真,否則返回0,其原型是intfeof(FILE*stream);例:
if(feof(fp)){printf("已到文件尾");}核心技術(shù)分析-2911.ferror()
原型是intferror(FILE*stream);返回流最近的錯(cuò)誤代碼,可用clearerr()來(lái)清除它,clearerr()的原型是voidclearerr(FILE*stream);。例:printf("%d",ferror(fp));
12.rewind()
把當(dāng)前的讀寫位置回到文件開(kāi)始,原型是void
rewind(FILE*stream);其實(shí)本函數(shù)相當(dāng)于fseek(fp,0L,SEEK_SET)。例:
rewind(fp);
核心技術(shù)分析-3013.remove()
刪除文件,原型是intremove(constchar*filename);參數(shù)就是要?jiǎng)h除的文件名,成功返回0。例:remove("c:\io.sys");
14.fread()
從流中讀指定個(gè)數(shù)的字符,原型是size_tfread(void*ptr,size_tsize,size_tn,FILE*stream);參數(shù)ptr是保存讀取的數(shù)據(jù),void*的指針可用任何類型的指針來(lái)替換,如char*、int*等等來(lái)替換;size是每塊的字節(jié)數(shù);n是讀取的塊數(shù),如果成功,返回實(shí)際讀取的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中。例:
charx[4230];FILE*file1=fopen("c:\msdos.sys","r");fread(x,200,12,file1);//共讀取200*12=2400個(gè)字節(jié)核心技術(shù)分析-3115.fwrite()
與fread對(duì)應(yīng),向流中寫指定的數(shù)據(jù),原型是size_tfwrite(constvoid*ptr,size_tsize,size_tn,FILE*stream);參數(shù)ptr是要寫入的數(shù)據(jù)指針,void*的指針可用任何類型的指針來(lái)替換,如char*、int*等等來(lái)替換;size是每塊的字節(jié)數(shù);n是要寫的塊數(shù),如果成功,返回實(shí)際寫入的塊數(shù)(不是字節(jié)數(shù)),本函數(shù)一般用于二進(jìn)制模式打開(kāi)的文件中。例:charx[]="ILoveYou";fwire(x,6,12,fp);//寫入6*12=72字節(jié)將把"ILove"寫到流fp中12次,共72字節(jié)16.tmpfile()
其原型是FILE*tmpfile(void);生成一個(gè)臨時(shí)文件,以"w+b"的模式打開(kāi),并返回這個(gè)臨時(shí)流的指針,如果失敗返回NULL。在程序結(jié)束時(shí),這個(gè)文件會(huì)被自動(dòng)刪除。例:
FILE*fp=tmpfile();
核心技術(shù)分析-3217.tmpnam();
其原型為char*tmpnam(char*s);生成一個(gè)唯一的文件名,其實(shí)tmpfile()就調(diào)用了此函數(shù),參數(shù)s用來(lái)保存得到的文件名,并返回這個(gè)指針,如果失敗,返回NULL。例:tmpnam(str1);
核心技術(shù)實(shí)現(xiàn)-1下面我們就使用上面所提到的技術(shù)實(shí)現(xiàn)本系統(tǒng)的核心功能:結(jié)構(gòu)體類型定義要將讀取出的數(shù)據(jù)放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中,首先要定義結(jié)構(gòu)體,注意:定義結(jié)構(gòu)體時(shí)字符數(shù)組成員變量的長(zhǎng)度要大于系統(tǒng)所要求的最大長(zhǎng)度一位,這一位用來(lái)存放字符串的結(jié)束標(biāo)志‘\0’,數(shù)據(jù)文件記錄結(jié)構(gòu)體的定義如下:核心技術(shù)實(shí)現(xiàn)-2
//數(shù)據(jù)文件記錄結(jié)構(gòu)structrecord{ intaccNumber;//帳號(hào) characcName[9];//戶名 characcPWD[7];//密碼 doublebalance;//余額 charflag[2];//銷戶標(biāo)志};
核心技術(shù)實(shí)現(xiàn)-3使用C語(yǔ)言typedef定義類型typedef為結(jié)構(gòu)體structrecord起了一個(gè)名字,叫RECORD。因此,RECORD實(shí)際上相當(dāng)于structrecord,我們可以使用RECORD來(lái)定義結(jié)構(gòu)體數(shù)組變量。如下:
//自定義數(shù)據(jù)類型typedefstructrecordRECORD;//定義結(jié)構(gòu)體數(shù)組RECORDrs[N_MAXREC_NO];核心技術(shù)實(shí)現(xiàn)-4提示:因?yàn)槌送顺瞿K各個(gè)模塊的實(shí)現(xiàn)都涉及了數(shù)據(jù)文件記錄結(jié)構(gòu)體,所以數(shù)據(jù)文件記錄結(jié)構(gòu)體類型和結(jié)構(gòu)體數(shù)組變量要定義成全局的。核心技術(shù)實(shí)現(xiàn)-5流式文件的讀、寫操作的實(shí)現(xiàn)由于本系統(tǒng)是通過(guò)文本文件來(lái)保存數(shù)據(jù)的,對(duì)文本文件的操作分為兩種方式,即流式文件操作和I/O文件操作,本系統(tǒng)使用了流式文件操作,所以對(duì)流式文件的讀、寫操作就顯得尤為重要,所以我們就先來(lái)實(shí)現(xiàn)流式文件的讀、寫操作函數(shù)吧!在實(shí)現(xiàn)流式文件的讀、寫操作函數(shù)之前,先回顧一下本系統(tǒng)使用到的幾個(gè)流式文件操作函數(shù):fopen()實(shí)現(xiàn)打開(kāi)流、把一個(gè)文件和此流相連接、給此流返回一個(gè)FILE指針。feof()檢測(cè)是否已到文件尾,是返回真,否則返回。fgets()實(shí)現(xiàn)從流中讀一行或指定個(gè)字符。fprintf()按格式輸入到流。fclose()的功能就是關(guān)閉用fopen()打開(kāi)的文件,如果成功,返回0,失敗返回EOF。在程序結(jié)束時(shí)一定要記得關(guān)閉打開(kāi)的文件,不然可能會(huì)造成數(shù)據(jù)丟失的情況。在這里對(duì)于以上函數(shù)就不做過(guò)多的介紹了,大家可以查閱技術(shù)分析小節(jié)的C語(yǔ)言文件操作介紹來(lái)了解它們的使用方法。核心技術(shù)實(shí)現(xiàn)-6流式文件讀操作的實(shí)現(xiàn)該函數(shù)的功能是從文件中一行一行讀取數(shù)據(jù)放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中。返回值:數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組最大下標(biāo)值。要將讀取出的數(shù)據(jù)放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中,首先要定義結(jié)構(gòu)體,結(jié)構(gòu)體的定義已經(jīng)在前面講過(guò)了,這里不再贅述。要打開(kāi)流文件,“文件指針名”必須是被說(shuō)明為FILE類型的指針變量;定義流文件指針如下:核心技術(shù)實(shí)現(xiàn)-7被打開(kāi)的文件名稱組成時(shí)用到了宏定義如下:FILE*fp;//文件指針
#defineFILE_DATA_PATH"c:"http://文件存放路徑
組成文件名并以只讀方式打開(kāi)文本文件,如下:strcpy(SrcFile,FILE_DATA_PATH);strcat(SrcFile,"\Bank");fp=fopen(SrcFile,"r");if(fp==NULL){return-1;}
核心技術(shù)實(shí)現(xiàn)-8從文件中一行一行讀取數(shù)據(jù)放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中,代碼如下://從文件中一行一行讀取數(shù)據(jù)放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中while((!feof(fp))&&((fgets(cLineStr,MAXLINE,fp))!=NULL)){length=strlen(cLineStr);for(k=0;k<length;k++){memset(cTmp,0,sizeof(cTmp));memcpy(cTmp,&cLineStr[k],1);//文件中各個(gè)成員中間用逗號(hào)分開(kāi)if(cTmp[0]!=','){strcat(cData,cTmp);}//將從文件中讀取出的成員變量?jī)?nèi)容放入數(shù)據(jù)文件記錄結(jié)構(gòu)體數(shù)組中相應(yīng)位置else{if(j==0){rs[i].accNumber=atoi(cData);}核心技術(shù)實(shí)現(xiàn)-9
if(j==1){//去掉cData右邊的空格rightTrim(cData);strcpy(rs[i].accName,cData);}if(j==2){//去掉cData右邊的空格rightTrim(cData);strcpy(rs[i].accPWD,cData);}if(j==3){rs[i].balance=atof(cData);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省安全員考試題庫(kù)
- 2025年吉林省安全員B證考試題庫(kù)
- 重慶工商大學(xué)派斯學(xué)院《酒店?duì)I銷》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島港灣職業(yè)技術(shù)學(xué)院《口腔設(shè)備學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢東湖學(xué)院《社會(huì)哲學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年海南省建筑安全員-C證考試(專職安全員)題庫(kù)附答案
- 南京信息工程大學(xué)《少兒體操與健美操》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京審計(jì)大學(xué)金審學(xué)院《生物合成實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東青年職業(yè)學(xué)院《建筑法規(guī)1》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢生物工程學(xué)院《婦女健康與康復(fù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 地理-廣東省上進(jìn)聯(lián)考領(lǐng)航高中聯(lián)盟2025屆高三下學(xué)期開(kāi)學(xué)考試題和答案
- GB/T 20032-2024項(xiàng)目風(fēng)險(xiǎn)管理應(yīng)用指南
- 博鰲亞洲論壇:創(chuàng)新報(bào)告2024
- 2025年全國(guó)青少年禁毒知識(shí)競(jìng)賽題庫(kù)及答案(401一516) - 副本
- 2024年山東傳媒職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2025年高三歷史高考第二輪復(fù)習(xí)知識(shí)梳理中國(guó)史部分復(fù)習(xí)提綱
- 2025年蒙鹽集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 精神科醫(yī)療質(zhì)控課件
- 護(hù)理三基三嚴(yán)習(xí)題+參考答案
- 椎間孔鏡的手術(shù)配合
- 《電子商務(wù)基礎(chǔ)》課件-1.電子商務(wù)認(rèn)知與發(fā)展
評(píng)論
0/150
提交評(píng)論