面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt

上传人(卖家):晟晟文业 文档编号:4460061 上传时间:2022-12-11 格式:PPT 页数:51 大小:399KB
下载 相关 举报
面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt_第1页
第1页 / 共51页
面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt_第2页
第2页 / 共51页
面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt_第3页
第3页 / 共51页
面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt_第4页
第4页 / 共51页
面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、 Hands-On实训教程系列实训教程系列第三章第三章系统实现系统实现 Hands-On实训教程系列实训教程系列上章回顾上章回顾l了解了解“储蓄综合业务平台储蓄综合业务平台”软件的系统架构软件的系统架构l了解本案例开发涉及技术了解本案例开发涉及技术结构体数组的访问结构体数组的访问文件操作文件操作l熟悉本案例的功能模块设计熟悉本案例的功能模块设计l熟悉本案例的界面设计要求熟悉本案例的界面设计要求 Hands-On实训教程系列实训教程系列本章目标本章目标l核心功能实现核心功能实现l主函数实现主函数实现l开户模块实现开户模块实现l销户模块实现销户模块实现l存款模块实现存款模块实现l取款模块实现取款模

2、块实现l查询模块实现查询模块实现 Hands-On实训教程系列实训教程系列l核心功能部分核心功能部分 Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-1l上一章中,对本案例的系统结构、功能模块设上一章中,对本案例的系统结构、功能模块设计进行了详细的说明。下面将带领大家实现本计进行了详细的说明。下面将带领大家实现本案例的核心功能,要实现核心功能,必须知道案例的核心功能,要实现核心功能,必须知道系统的技术要点,在这个过程之前我们先分析系统的技术要点,在这个过程之前我们先分析一下系统的技术要点,系统总体流程如下图所一下系统的技术要点,系统总体流程如下图所示:示:Hands-On实训

3、教程系列实训教程系列核心技术分析核心技术分析-2 Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-3l分析上面的流程图不难看出系统中除了退出模块各个分析上面的流程图不难看出系统中除了退出模块各个模块的实现都涉及了数据文件记录结构体和文本文档模块的实现都涉及了数据文件记录结构体和文本文档的操作,下面我们将与这些技术进行的操作,下面我们将与这些技术进行“亲密接触亲密接触”:学习学习C C语言结构体类型的定义,定义结构体类型变语言结构体类型的定义,定义结构体类型变量的方法,结构体类型变量的引用。量的方法,结构体类型变量的引用。学习使用学习使用C C语言语言typedeftypede

4、f定义类型。定义类型。学习使用学习使用C C语言文件操作库函数实现基于流式文件语言文件操作库函数实现基于流式文件的读写操作。的读写操作。好了,接下来让我们一起踏上打造这款好了,接下来让我们一起踏上打造这款“储蓄综合储蓄综合业务平台业务平台”的神秘之旅。的神秘之旅。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-4lC语言结构体类型介绍语言结构体类型介绍 l结构体类型的定义结构体类型的定义 在一些复杂的数据结构中,有时需要将不同类型的数据集合成一个有机的整体。在一些复杂的数据结构中,有时需要将不同类型的数据集合成一个有机的整体。如:一个学生的情况纪录单可能包括学号、姓名、性别、

5、年龄、成绩、家庭地址如:一个学生的情况纪录单可能包括学号、姓名、性别、年龄、成绩、家庭地址等数据项。这样的整体,等数据项。这样的整体,C语言中称为语言中称为“结构体结构体”数据结构,简称数据结构,简称“结构体结构体”(structure)。)。结构体是一种较为复杂而又非常灵活的构造型的数据类型。一个结构体类型的数结构体是一种较为复杂而又非常灵活的构造型的数据类型。一个结构体类型的数据可以由若干个称为成员(或域)的成分组成。不同的结构体类型其成员不同。据可以由若干个称为成员(或域)的成分组成。不同的结构体类型其成员不同。对于一个具体的结构体而言,其成员的数量是固定的,这一点与数组相同,但该对于一

6、个具体的结构体而言,其成员的数量是固定的,这一点与数组相同,但该结构体中各成员的数据类型可以不同,这是结构体与数组的重要区别。结构体中各成员的数据类型可以不同,这是结构体与数组的重要区别。结构体类型定义的一般形式:结构体类型定义的一般形式:struct 结构体名结构体名 结构体成员表列结构体成员表列 ;其中其中struct是关键字,结构体成员表列也称域表,每个成员也称结构体中的一个域。是关键字,结构体成员表列也称域表,每个成员也称结构体中的一个域。对每个成员都应进行类型说明。对每个成员都应进行类型说明。例如:例如:Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-5 struc

7、t student int num;char name20;char sex;int age;float score;1 结构体类型定义是由程序员根据设计需要自行定义的,因此结构体类型可以有结构体类型定义是由程序员根据设计需要自行定义的,因此结构体类型可以有多种,每种结构体类型都可以有自己的结构体名以及包含不同数目的成员。多种,每种结构体类型都可以有自己的结构体名以及包含不同数目的成员。2 若定义了一个结构体类型,那仅仅是定义类型而已,而不分配内存单元。例如若定义了一个结构体类型,那仅仅是定义类型而已,而不分配内存单元。例如上面已经定义了的上面已经定义了的struct student结构体类型

8、,结构体类型,struct student可以用来定义一个可以用来定义一个该类型的变量,并不意味着它的那些成员被分配了内存空间。该类型的变量,并不意味着它的那些成员被分配了内存空间。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-63 成员名可以与程序中的变量名相同,两者不成员名可以与程序中的变量名相同,两者不代表同一对象。例如,程序中可以另定义变量代表同一对象。例如,程序中可以另定义变量num,它与,它与struct student中的中的num是两回事,是两回事,互不干扰。互不干扰。4 结构体成员类型可以是整型、实型、字符型、结构体成员类型可以是整型、实型、字符型、数组、

9、指针等基本类型或构造类型,还可以是数组、指针等基本类型或构造类型,还可以是已定义过的结构体类型。已定义过的结构体类型。例如:例如:Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-7 struct date int year;int month;int day;struct student int num;char name20;char sex;struct date birthday;float score4;Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-8l结构体变量的定义结构体变量的定义 结构体类型的定义只是指出了该结构的组成情结构体类型的定义只是指

10、出了该结构的组成情况,表明存在有此种类型的结构模型。该结构况,表明存在有此种类型的结构模型。该结构体类型中不能存放具体的数据,系统也不会为体类型中不能存放具体的数据,系统也不会为它分配实际的存贮单元。为了能在程序中使用它分配实际的存贮单元。为了能在程序中使用结构体类型的数据,应在定义了某种结构体类结构体类型的数据,应在定义了某种结构体类型以后,再定义该结构体类型的变量,以便在型以后,再定义该结构体类型的变量,以便在结构体类型的变量中存放具体的数据。结构体类型的变量中存放具体的数据。结构体变量的定义有三种形式结构体变量的定义有三种形式:Hands-On实训教程系列实训教程系列核心技术分析核心技术

11、分析-9 struct student int num;char name20;char sex;int age;float score4;struct student st1,st2;l1先声明结构体类型,再定义结构体类型的变量。先声明结构体类型,再定义结构体类型的变量。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-10 struct student int num;char name20;char sex;int age;float score4;st1,st2;l2在声明结构体类型的同时定义结构体类型变量。在声明结构体类型的同时定义结构体类型变量。Hands-On实训

12、教程系列实训教程系列核心技术分析核心技术分析-11 struct int num;char name20;char sex;int age;float score4;st1,st2;l3直接定义结构体类型变量。直接定义结构体类型变量。l在关键字在关键字struct后省略了结构体名。不提倡使用这种后省略了结构体名。不提倡使用这种形式。形式。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-12l结构体变量的引用结构体变量的引用1.结构体变量整体引用结构体变量整体引用如果要将结构体变量整体引用则往往只限于将一个结构体变如果要将结构体变量整体引用则往往只限于将一个结构体变量直接赋值给

13、另一个具有相同类型的结构体变量。例如有声量直接赋值给另一个具有相同类型的结构体变量。例如有声明语句:明语句:struct student stux,stuy;,执行,执行stuy=stux;语句后语句后变量变量stuy中各成员的值都完全与中各成员的值都完全与stux各成员的值相等。各成员的值相等。2.结构体变量成员引用结构体变量成员引用对结构体成员的引用方式为:对结构体成员的引用方式为:结构体变量名结构体变量名.成员名成员名其中,其中,“.”为结构体成员运算符,它的优先级处于所有运算为结构体成员运算符,它的优先级处于所有运算符优先级的最高级别符优先级的最高级别。例如:例如:st1.num表示表

14、示st1变量中的变量中的num成员,可以对它赋值成员,可以对它赋值st1.num=1001,这时这时st1.num就相当于一个整型数。就相当于一个整型数。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-13l使用使用C语言语言typedef定义类型定义类型 typedef为为C语言的关键字,作用是为一种数语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括据类型定义一个新名字。这里的数据类型包括内部数据类型(内部数据类型(int,char等)和自定义的数据等)和自定义的数据类型(类型(struct等)。等)。在编程中使用在编程中使用typedef目的一般有两个

15、,一个目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。个是简化一些比较复杂的类型声明。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-14ltypedef的最简单使用,例如:的最简单使用,例如:typedef long byte_4;l作用:给作用:给C提供的标准数据类型提供的标准数据类型long起个新起个新名字,叫名字,叫byte_4。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-15typedef与结构体结合使用,例如:与结构体结合使用,例如:struct studen

16、t int num;char name20;char sex;int age;float score4;typedef struct student STUDENT;STUDENT st1,st2;Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-16l作用:作用:ltypedef为结构体为结构体struct student起了一个名起了一个名字,叫字,叫STUDENTl因此,因此,STUDENT实际上相当于实际上相当于struct student,我们可以使用,我们可以使用STUDENT来定义变来定义变量。量。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-

17、17lC语言文件操作介绍语言文件操作介绍在在ANSI C中,对文件的操作分为两种方式,中,对文件的操作分为两种方式,即流式文件操作和即流式文件操作和I/O文件操作,本系统使用文件操作,本系统使用了流式文件操作,下面介绍之:了流式文件操作,下面介绍之:流式文件操作是通过缓冲区来进行;流式文件流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个操作是围绕一个FILE指针来进行。这种方式指针来进行。这种方式的文件操作有一个重要的结构的文件操作有一个重要的结构FILE,FILE在在stdio.h中定义如下:中定义如下:Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-18lFILE这

18、个结构包含了文件操作的基本属性,对文件的操作都要通过这个这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行。此种文件操作常用的函数和功能如下:结构的指针来进行。此种文件操作常用的函数和功能如下:typedef struct int level;/*fill/empty level of buffer*/unsigned flags;/*File status flags*/char fd;/*File descriptor*/unsigned char hold;/*Ungetc char if no buffer*/int bsize;/*Buffer size*/u

19、nsigned char _FAR*buffer;/*Data transfer buffer*/unsigned char _FAR*curp;/*Current active pointer*/unsigned istemp;/*Temporary file indicator*/short token;/*Used for validity checking*/FILE;/*This is the FILE object*/Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-19lfopen()打开流打开流 lfclose()关闭流关闭流 lfputc()写一个字符到流中写

20、一个字符到流中 lfgetc()从流中读一个字符从流中读一个字符 lfseek()在流中定位到指定的字符在流中定位到指定的字符 lfputs()写字符串到流写字符串到流 lfgets()从流中读一行或指定个字符从流中读一行或指定个字符 lfprintf()按格式输入到流按格式输入到流 lfscanf()从流中按格式读取从流中按格式读取 lfeof()到达文件尾时返回真值到达文件尾时返回真值 lferror()发生错误时返回其值发生错误时返回其值 lrewind()复位文件定位器到文件开始处复位文件定位器到文件开始处 lremove()删除文件删除文件 lfread()从流中读指定个数的字符从流

21、中读指定个数的字符 lfwrite()向流中写指定个数的字符向流中写指定个数的字符 ltmpfile()生成一个临时文件流生成一个临时文件流 ltmpnam()生成一个唯一的文件名生成一个唯一的文件名 Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-20l下面就介绍一下这些函数下面就介绍一下这些函数(红色标注的是本系统使用到的函数)(红色标注的是本系统使用到的函数)1.fopen()fopen的原型是:的原型是:FILE*fopen(const char*filename,const char*mode),fopen实现三个功能:实现三个功能:1、为使用而打开一个流、为使用而

22、打开一个流 2、把一个文件和此流相连接、把一个文件和此流相连接 3、给此流返回一个、给此流返回一个FILE指针指针参数参数filename指向要打开的文件名,指向要打开的文件名,mode表示打开状态的字符串,其取值如下:表示打开状态的字符串,其取值如下:“rt”只读打开一个文本文件,只允许读数据只读打开一个文本文件,只允许读数据“wt”只写打开或建立一个文本文件,只允许写数据只写打开或建立一个文本文件,只允许写数据“at”追加打开一个文本文件,并在文件末尾写数据追加打开一个文本文件,并在文件末尾写数据“rb”只读打开一个二进制文件,只允许读数据只读打开一个二进制文件,只允许读数据“wb”只写打

23、开或建立一个二进制文件,只允许写数据只写打开或建立一个二进制文件,只允许写数据“ab”追加打开一个二进制文件,并在文件末尾写数据追加打开一个二进制文件,并在文件末尾写数据“rt+”读写打开一个文本文件,允许读和写读写打开一个文本文件,允许读和写“wt+”读写打开或建立一个文本文件,允许读写读写打开或建立一个文本文件,允许读写“at+”读写打开一个文本文件,允许读,或在文件末追加数据读写打开一个文本文件,允许读,或在文件末追加数据“rb+”读写打开一个二进制文件,允许读和写读写打开一个二进制文件,允许读和写“wb+”读写打开或建立一个二进制文件,允许读和写读写打开或建立一个二进制文件,允许读和写

24、“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据读写打开一个二进制文件,允许读,或在文件末追加数据 注:系统默认的是以文本模式打开,所以打开一个文本文件时注:系统默认的是以文本模式打开,所以打开一个文本文件时t字符可以省略。字符可以省略。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-21l对于文件使用方式有以下几点说明:对于文件使用方式有以下几点说明:l1)文件使用方式由文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:六个字符拼成,各字符的含义是:r(read):读读 w(write):写写 a(append):追加追加 t(text):文本文

25、件,可省略不写文本文件,可省略不写 b(banary):二进制文件二进制文件+:读和写读和写 l2)凡用凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。打开一个文件时,该文件必须已经存在,且只能从该文件读出。l3)用用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。l4)若要向一个已存在的文件追加新的信息,只能用若要向一个已存在的文件追加新的信息,只能用“a”方

26、式打开文件。但此时该方式打开文件。但此时该文件必须是存在的,否则将会出错。文件必须是存在的,否则将会出错。l5)在打开一个文件时,函数返回一个在打开一个文件时,函数返回一个FILE指针,所以申明一个指针,所以申明一个FILE指针后不用初指针后不用初始化,而是用始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果失败,来返回一个指针并与一个特定的文件相连,如果失败,fopen将返回一个空指针值将返回一个空指针值NULL,在程序中可以用这一信息来判别是否完成打开,在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。文件的工作,并作相应的处理。例例:Hands-On实

27、训教程系列实训教程系列核心技术分析核心技术分析-22lfopen函数使用示例:函数使用示例:FILE*fp;if(fp=fopen(123.456,wb)puts(打开文件成功打开文件成功);else puts(打开文件成败打开文件成败);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-23l2.fclose()fclose()的功能就是关闭用的功能就是关闭用fopen()打开的文件,其打开的文件,其原型是:原型是:int fclose(FILE*fp);如果成功,返回如果成功,返回0,失败失败返回返回EOF。在程序结束时一定要记得关闭打开的文件,不然可能在程序结束时一定要记

28、得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的毛病。会造成数据丢失的情况,我以前就经常犯这样的毛病。例:例:fclose(fp);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-24l3.fputc()向流写一个字符,原型是向流写一个字符,原型是int fputc(int c,FILE*stream);成功返回这个字符成功返回这个字符,失败返回失败返回EOF。例:。例:fputc(X,fp);l4.fgetc()从流中读一个字符,原型是从流中读一个字符,原型是int fgetc(FILE*stream);成功返回这个字符成功返回这个字符,失败返回失败返回

29、EOF。例:。例:char ch1=fgetc(fp);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-25l5.fseek()此函数一般用于二进制模式打开的文件中,功能是定位此函数一般用于二进制模式打开的文件中,功能是定位到流中指定的位置,原型是到流中指定的位置,原型是int fseek(FILE*stream,long offset,int whence);如果成功返回如果成功返回0,参数,参数offset是移动的字是移动的字符数,符数,whence是移动的基准,取值是:是移动的基准,取值是:符号常量值基准位置符号常量值基准位置 SEEK_SET 0 文件开头文件开头 S

30、EEK_CUR 1 当前读写的位置当前读写的位置 SEEK_END 2 文件尾部文件尾部 例:例:fseek(fp,1234L,SEEK_CUR);/把读写位置从当前位置向后移动把读写位置从当前位置向后移动1234字节字节(L后缀后缀表示长整数表示长整数)fseek(fp,0L,SEEK_END);/把读写位置移动到文件尾把读写位置移动到文件尾 Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-26l6.fputs()写一个字符串到流中,原型写一个字符串到流中,原型int fputs(const char*s,FILE*stream);例:例:fputs(I Love You,

31、fp);l7.fprintf()按格式输入到流,其原型是按格式输入到流,其原型是int fprintf(FILE*fp,const char*format,argument,.);其功能是以格其功能是以格式控制串式控制串(format)所指定的格式,向所指定的格式,向fp所指定的流输所指定的流输入数据,数据项列写在格式控制串后的参数表中。入数据,数据项列写在格式控制串后的参数表中。例:例:fprintf(fp,%2d%s,4,Hahaha);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-27l8.fgets()从流中读一行或指定个字符,原型是从流中读一行或指定个字符,原型是

32、char*fgets(char*s,int n,FILE*stream);从流中读取从流中读取n-1个字符,除非读完一行,个字符,除非读完一行,参数参数s是来接收字符串,如果成功则返回是来接收字符串,如果成功则返回s的指针,否则返回的指针,否则返回NULL。例:。例:如果一个文件的当前位置的文本如下:如果一个文件的当前位置的文本如下:Love,I Have But.如果用如果用 fgets(str,4,file1);则执行后则执行后str=Lov,读取了,读取了4-1=3个字符,而如果用个字符,而如果用 fgets(str,23,file1);则执行后则执行后str=Love,I Have,读

33、取了一行,读取了一行(不包括行尾的不包括行尾的n)。Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-28l9.fscanf()从流中按格式读取,其原型是从流中按格式读取,其原型是int fscanf(FILE*stream,const char*format,address,.);其用法和其用法和scanf()相同,相同,不过不是从控制台读取,而是从流读取罢了。例:不过不是从控制台读取,而是从流读取罢了。例:fscanf(fp,%d%d,&x,&y);l10.feof()检测是否已到文件尾,是返回真,否则返回检测是否已到文件尾,是返回真,否则返回0,其原型是,其原型是int

34、feof(FILE*stream);例:例:if(feof(fp)printf(已到文件尾已到文件尾);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-29l11.ferror()原型是原型是int ferror(FILE*stream);返回流最近的错误代码,返回流最近的错误代码,可用可用clearerr()来清除它,来清除它,clearerr()的原型是的原型是void clearerr(FILE*stream);。例:。例:printf(%d,ferror(fp);l12.rewind()把当前的读写位置回到文件开始,原型是把当前的读写位置回到文件开始,原型是void

35、rewind(FILE*stream);其实本函数相当于其实本函数相当于fseek(fp,0L,SEEK_SET)。例:。例:rewind(fp);Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-30l13.remove()删除文件,原型是删除文件,原型是int remove(const char*filename);参参数就是要删除的文件名,成功返回数就是要删除的文件名,成功返回0。例:。例:remove(c:io.sys);l14.fread()从流中读指定个数的字符,原型是从流中读指定个数的字符,原型是size_t fread(void*ptr,size_t size,

36、size_t n,FILE*stream);参数参数ptr是保存读取的是保存读取的数据,数据,void*的指针可用任何类型的指针来替换,如的指针可用任何类型的指针来替换,如char*、int*等等来替换;等等来替换;size是每块的字节数;是每块的字节数;n是读取的块数,如是读取的块数,如果成功,返回实际读取的块数果成功,返回实际读取的块数(不是字节数不是字节数),本函数一般用于,本函数一般用于二进制模式打开的文件中。二进制模式打开的文件中。例:例:char x4230;FILE*file1=fopen(c:msdos.sys,r);fread(x,200,12,file1);/共读取共读取2

37、00*12=2400个字节个字节 Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-31l15.fwrite()与与fread对应,向流中写指定的数据,原型是对应,向流中写指定的数据,原型是size_t fwrite(const void*ptr,size_t size,size_t n,FILE*stream);参数参数ptr是要写入的数据指针,是要写入的数据指针,void*的指针的指针可用任何类型的指针来替换,如可用任何类型的指针来替换,如char*、int*等等来替换;等等来替换;size是每块的字节数;是每块的字节数;n是要写的块数,如果成功,返回实际写入的块数是要写的

38、块数,如果成功,返回实际写入的块数(不是字节数不是字节数),本函数一般用于二,本函数一般用于二进制模式打开的文件中。例:进制模式打开的文件中。例:char x=I Love You;fwire(x,6,12,fp);/写入写入6*12=72字节字节 将把将把I Love写到流写到流fp中中12次,共次,共72字节字节l16.tmpfile()其原型是其原型是FILE*tmpfile(void);生成一个临时文件,以生成一个临时文件,以w+b的模式打开,并返的模式打开,并返回这个临时流的指针,如果失败返回回这个临时流的指针,如果失败返回NULL。在程序结束时,这个文件会被自动。在程序结束时,这个

39、文件会被自动删除。删除。例:例:FILE*fp=tmpfile();Hands-On实训教程系列实训教程系列核心技术分析核心技术分析-32l17.tmpnam();其原型为其原型为char*tmpnam(char*s);生成一生成一个唯一的文件名,其实个唯一的文件名,其实tmpfile()就调用了此函就调用了此函数,参数数,参数s用来保存得到的文件名,并返回这用来保存得到的文件名,并返回这个指针,如果失败,返回个指针,如果失败,返回NULL。例:。例:tmpnam(str1);Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-1l下面我们就使用上面所提到的技术实现本系统下面我们

40、就使用上面所提到的技术实现本系统的核心功能:的核心功能:l结构体类型定义结构体类型定义要将读取出的数据放入数据文件记录结构体数要将读取出的数据放入数据文件记录结构体数组中,首先要定义结构体,注意:定义结构体组中,首先要定义结构体,注意:定义结构体时字符数组成员变量的长度要大于系统所要求时字符数组成员变量的长度要大于系统所要求的最大长度一位,这一位用来存放字符串的结的最大长度一位,这一位用来存放字符串的结束标志束标志0,数据文件记录结构体的定义如,数据文件记录结构体的定义如下:下:Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-2/数据文件记录结构数据文件记录结构struct

41、recordint accNumber;/帐号帐号char accName9;/户名户名char accPWD7;/密码密码double balance;/余额余额char flag2;/销户标志销户标志;Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-3l使用使用C语言语言typedef定义类型定义类型typedef为结构体为结构体struct record起了一个名字,叫起了一个名字,叫RECORD。因此,。因此,RECORD实际上相当于实际上相当于struct record,我们可以使用,我们可以使用RECORD来定义结构体数组来定义结构体数组变量。如下:变量。如下:/

42、自定义数据类型自定义数据类型typedef struct record RECORD;/定义结构体数组定义结构体数组RECORD rsN_MAXREC_NO;Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-4l提示:因为除了退出模块各个模块的实现都涉提示:因为除了退出模块各个模块的实现都涉及了数据文件记录结构体,所以数据文件记录及了数据文件记录结构体,所以数据文件记录结构体类型和结构体数组变量要定义成全局的。结构体类型和结构体数组变量要定义成全局的。Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-5l流式文件的读、写操作的实现流式文件的读、写操作的实现由于本

43、系统是通过文本文件来保存数据的,对文本文件的操由于本系统是通过文本文件来保存数据的,对文本文件的操作分为两种方式,即流式文件操作和作分为两种方式,即流式文件操作和I/O文件操作,本系统使文件操作,本系统使用了流式文件操作,所以对流式文件的读、写操作就显得尤用了流式文件操作,所以对流式文件的读、写操作就显得尤为重要,所以我们就先来实现流式文件的读、写操作函数吧!为重要,所以我们就先来实现流式文件的读、写操作函数吧!在实现流式文件的读、写操作函数之前,先回顾一下本系统在实现流式文件的读、写操作函数之前,先回顾一下本系统使用到的几个流式文件操作函数:使用到的几个流式文件操作函数:fopen()实现打

44、开流、把一实现打开流、把一个文件和此流相连接、给此流返回一个个文件和此流相连接、给此流返回一个FILE指针。指针。feof()检测检测是否已到文件尾,是返回真,否则返回。是否已到文件尾,是返回真,否则返回。fgets()实现从流中实现从流中读一行或指定个字符。读一行或指定个字符。fprintf()按格式输入到流。按格式输入到流。fclose()的的功能就是关闭用功能就是关闭用fopen()打开的文件,如果成功,返回打开的文件,如果成功,返回0,失败失败返回返回EOF。在程序结束时一定要记得关闭打开的文件,不然。在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况。可能会造成数据丢

45、失的情况。在这里对于以上函数就不做过多的介绍了,大家可以查阅技在这里对于以上函数就不做过多的介绍了,大家可以查阅技术分析小节的术分析小节的C语言文件操作介绍来了解它们的使用方法。语言文件操作介绍来了解它们的使用方法。Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-6l 流式文件读操作的实现流式文件读操作的实现该函数的功能是从文件中一行一行读取数据放入数该函数的功能是从文件中一行一行读取数据放入数据文件记录结构体数组中。返回值:数据文件记录据文件记录结构体数组中。返回值:数据文件记录结构体数组最大下标值。结构体数组最大下标值。要将读取出的数据放入数据文件记录结构体数组中,要将读

46、取出的数据放入数据文件记录结构体数组中,首先要定义结构体,结构体的定义已经在前面讲过首先要定义结构体,结构体的定义已经在前面讲过了,这里不再赘述。了,这里不再赘述。要打开流文件,要打开流文件,“文件指针名文件指针名”必须是被说明为必须是被说明为FILE 类型的指针变量;定义流文件指针如下:类型的指针变量;定义流文件指针如下:Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-7l被打开的文件名称组成时用到了宏定义如下:被打开的文件名称组成时用到了宏定义如下:FILE*fp;/文件指针文件指针#define FILE_DATA_PATH c:/文件存放路径文件存放路径 l组成文件名

47、并以只读方式打开文本文件,如下:组成文件名并以只读方式打开文本文件,如下:strcpy(SrcFile,FILE_DATA_PATH);strcat(SrcFile,Bank);fp=fopen(SrcFile,r);if(fp=NULL)return-1;Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-8l从文件中一行一行读取数据放入数据文件记录结构体数组中,代码如下:从文件中一行一行读取数据放入数据文件记录结构体数组中,代码如下:/从文件中一行一行读取数据放入数据文件记录结构体数组中从文件中一行一行读取数据放入数据文件记录结构体数组中 while(!feof(fp)&(f

48、gets(cLineStr,MAXLINE,fp)!=NULL)length=strlen(cLineStr);for(k=0;klength;k+)memset(cTmp,0,sizeof(cTmp);memcpy(cTmp,&cLineStrk,1);/文件中各个成员中间用逗号分开文件中各个成员中间用逗号分开 if(cTmp0!=,)strcat(cData,cTmp);/将从文件中读取出的成员变量内容放入数据文件记录结构体数组中相应位置将从文件中读取出的成员变量内容放入数据文件记录结构体数组中相应位置 else if(j=0)rsi.accNumber=atoi(cData);Hands

49、-On实训教程系列实训教程系列核心技术实现核心技术实现-9 if(j=1)/去掉去掉cData右边的空格右边的空格 rightTrim(cData);strcpy(rsi.accName,cData);if(j=2)/去掉去掉cData右边的空格右边的空格 rightTrim(cData);strcpy(rsi.accPWD,cData);if(j=3)rsi.balance=atof(cData);Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-10 if(j=4)/去掉去掉cData右边的空格右边的空格 rightTrim(cData);strcpy(rsi.flag,c

50、Data);memset(cData,0,sizeof(cData);j+;if(j=5)break;/end for j=0;i+;/end while Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-11l关闭流文件,返回数据文件记录结构体数组最大下标关闭流文件,返回数据文件记录结构体数组最大下标值,如下:值,如下:fclose(fp);/返回数据文件记录结构体数组最大下标值返回数据文件记录结构体数组最大下标值 i-;return i;Hands-On实训教程系列实训教程系列核心技术实现核心技术实现-12l流式文件写操作的实现流式文件写操作的实现该函数的功能是将数据文件记

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(面向过程项目实训C语言版储蓄综合业务平台-Read课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|