搜索
您的当前位置:首页正文

C程序设计教案(第10章实验13次)

来源:知库网


实验 13 文件操作

一、 实验学时:2课时

二、 实验目标

1. 掌握文件及缓冲文件系统、文件指针的概念。

2. 学会使用文件打开、关闭、读、写等文件操作函数。

3. 学会用缓冲文件系统对文件进行简单的操作。

三、 实验要求:

1. 备。

在上实验课之前,每一个同学必须将实验的题目、程序编写完毕,做好充分的准

2. 所有实验环节均由每位同学独立完成,严禁抄袭他人实验结果,若发现有结果雷

同者,按实验课考核办法处理。

四、 实验步骤和内容

 【启动Visual C++】

 【新建工程】

 选中【C++ Source File】项,【新建源程序文件】

 编辑程序

 执行程序

1 编写一个程序,设计一个文件student.bin,其结构如下:

struct student

{

char no[10]; /*学号*/

char name[20]; /*姓名*/

char score[50]; /*成绩*/

}

要求实现学生记录添加、输出、查找(按学号进行)、修改(按学号进行)和删除(按学号进行)等功能。

2 编程要求

1)采用文字提示方式限定用户选择,如:>>1:新添 2:输出 3:查找 4:修改 5:

删除 0:退出 选择:用户输入对应的数字并按回车键后执行相应的功能。

2)用户可以循环操作直到选择退出为止。

3)程序的提示信息均以“>>”开头,运行结果不以“>>”开头。

输入如下代码:

/*

源文件名:ShiYan.c

功能:实现在文件中记录某一门课的成绩信息

*/

#include

#include

#include

/*定义结构体*/

struct student

{

char no[10];

char name[20];

char score[50];

};

char filename[100]=\"student.bin\";

FILE *fp;

void creat(); /*创建函数声明*/

void append(); /*添加函数声明*/

void search(); /*查找函数声明*/

void delete(); /*删除函数声明*/

void modify(); /*修改函数声明*/

void output(); /*输出函数声明*/

void main()

{

int num;

// creat(); /*先创建文件的内容*/

while(1)

{

printf(\">>单击任意键进入目录......\\n\");

getch();

printf(\" >>***********欢迎使用学生成绩系统***********\\n\\n\");

printf(\" >>* 1.添加记录,请按1 *\\n\");

printf(\" >>* 2.查找记录,请按2 *\\n\");

printf(\" >>* 3.修改记录,请按3 *\\n\");

printf(\" >>* 4.删除记录,请按4 *\\n\");

printf(\" >>* 5.输出记录,请按5 *\\n\");

printf(\" >>* 0.退出系统,请按0 *\\n\");

printf(\">>选择:\");

scanf(\"%d\

if(num>=0&&num<=5)

{

switch(num)

{

case 1:append();break;

case 2:search();break;

case 3:modify();break;

case 4:delete();break;

case 5:output();break;

case 0:exit(1);

}

printf(\"\\n\\n>>操作完毕,请再次选择!\");

}

else

printf(\"\\n\\n>>选择错误,请再次选择!\");

}

getch();

}

/*创建记录*/

void creat()

{

struct student one;

printf(\"\\n>>请输入文件名称:\");

scanf(\"%s\

if((fp=fopen(filename,\"w\"))==NULL)

{

printf(\"\\n>>对不起,不能建立文件!\");

exit(1);

}

fprintf(fp,\"%-10s%-20s%-50s\\n\学号\姓名\成绩\");

printf(\"\\n>>请输入学号、姓名及成绩(以0结束)\\n\");

scanf(\"%s\

while(strcmp(one.no,\"0\"))

{

scanf(\"%s%s\

fprintf(fp,\"%-10s%-20s%-50s\\n\

scanf(\"%s\

}

fclose(fp);

}

/*添加记录*/

void append()

{

struct student one;

if((fp=fopen(filename,\"a\"))==NULL)

{

printf(\"\\n>>对不起,不能打开文件!\");

exit(1);

}

printf(\"\\n>>请输入要添加的学号、姓名及成绩\\n\");

scanf(\"%s%s%s\

fprintf(fp,\"%-10s%-20s%-50s\\n\

fclose(fp);

}

/*查找记录*/

void search()

{

int k=0;

char nokey[10];

struct student one;

printf(\"\\n>>请输入学号:\");

scanf(\"%s\

if((fp=fopen(filename,\"rb\"))==NULL)

{

printf(\"\\n>>对不起,不能打开文件!\");

exit(1);

}

while(!feof(fp))

{

fscanf(fp,\"%s%s%s\\n\

if(!strcmp(nokey,one.no))

{

printf(\"\\n\\n>>已查找到,该记录为:\");

printf(\"\\n%-10s%-20s%-50s\

k=1;

}

}

if(!k)

printf(\"\\n\\n>>对不起,文件中没有此人的记录。\");

fclose(fp);

}

/*修改记录*/

void modify()

{

int k=0;

long offset;

char nokey[10];

struct student one;

printf(\"\\n>>请输入学号:\");

scanf(\"%s\

if((fp=fopen(filename,\"r+\"))==NULL)

{

printf(\"\\n>>对不起,不能打开文件!\");

exit(1);

}

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,\"%s%s%s\\n\

if(!strcmp(nokey,one.no))

{

k=1;

break;

}

}

if(k)

{

printf(\"\\n\\n>>已查找到,该记录为:\");

printf(\"\\n%-10s%-20s%-50s\

printf(\"\\n>>请输入新的学号、姓名及成绩:\");

scanf(\"%s%s%s\

fseek(fp,offset,SEEK_SET);

printf(\"%ld\

fprintf(fp,\"%-10s%-20s%-50s\\n\

}

else

printf(\"\\n\\n>>对不起,文件中没有此人的记录。\");

fclose(fp);

}

/*删除记录*/

void delete()

{

int m,k=0;

long offset;

char nokey[10];

struct student one;

printf(\"\\n>>请输入学号:\");

scanf(\"%s\

if((fp=fopen(filename,\"r+\"))==NULL)

{

printf(\"\\n>>对不起,不能打开文件!\");

exit(1);

}

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,\"%s%s%s\\n\

if(!strcmp(nokey,one.no))

{

k=1;

break;

}

}

if(k)

{

printf(\"\\n\\n>>已查找到,该记录为:\");

printf(\"\\n%-10s%-20s%-50s\

printf(\"\\n>>确实要删除记录,请按1;不删除记录,请按0:\");

scanf(\"%d\

if(m)

{

fseek(fp,offset,SEEK_SET);

fprintf(fp,\"%-10s%-20s%-50s\\n\

}

}

else

printf(\"\\n\\n>>对不起,文件中没有此人的记录。\");

fclose(fp);

}

/*输出记录*/

void output()

{

struct student one;

if((fp=fopen(filename,\"r\"))==NULL)

{

printf(\"\\n>>对不起,不能打开文件!\");

exit(1);

}

printf(\"\\n\\n%20s\\n\文件\");

while(!feof(fp))

{

fscanf(fp,\"%s%s%s\\n\

printf(\"%-10s%-20s%-50s\

}

fclose(fp);

}

编译、连接、和运行程序。程序运行后,观查屏幕显示结果。

五、 思考题

1. 文件操作函数fscanf()和scanf()区别

2. 文件操作函数fprintf()和printf()区别

六、 实验小结:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top