C++语言基础 例程 文件的随机读写

贺老师的教学链接  本课讲解

示例:写到尾再从头读

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main( )
{
    int a[10], b[10];
    fstream iofile("f1.dat",ios::in|ios::out);
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    cout<<"enter 10 integer numbers:"<<endl;
    for(int i=0; i<10; i++)
    {
        cin>>a[i];
        iofile<<a[i]<<" ";
    }
    cout<<"The numbers have been writen to file. "<<endl;
    cout<<"Display the data by read from file: "<<endl;
    iofile.seekg(0, ios::beg);  //文件指针重回文件开始位置
    for(int i=0; i<10; i++)
    {
        iofile>>b[i];
        cout<<b[i]<<" ";
    }
    cout<<endl;
    iofile.close();
    return 0;
}

学生数据处理

#include<iostream>
#include <fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct student
{
    int num;
    char name[20];
    float score;
};
int main( )
{
    student stud[5]= {{1001,"Li",85},{1002,"Fun",97.5},{1004,"Wang",54},
        {1006,"Tan",76.5},{1010,"ling",96}
    };
    fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
    //用fstream类定义输入输出二进制文件流对象iofile
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        abort( );
    }
    //(1)向磁盘文件输出5个学生的数据并显示出来
    cout<<"(1)向磁盘文件输出5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.write((char *)&stud[i],sizeof(stud[i]));
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }

    //(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
    cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
    student stud1[5];                  //用来存放从磁盘文件读入的数据
    for(int i=0; i<5; i=i+2)
    {
        iofile.seekg(i*sizeof(stud[i]),ios::beg);  //定位于第0,2,4学生数据开头
        iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
        //先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
        cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
        //输出stud1[0],stud[1]和stud[2]各成员的值
    }
    cout<<endl;

    //(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
    cout<<"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
    stud[2].num=1012;                         //修改第3个学生(序号为2)的数据
    strcpy(stud[2].name,"Wu");
    stud[2].score=60;
    iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
    iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
    iofile.seekg(0,ios::beg);                       //重新定位于文件开头

    //(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
    cout<<"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }
    iofile.close( );
    return 0;
}

学生数据处理(OO版)

#include<iostream>
#include <fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
class Student
{
public:
    Student(void) {}
    Student(int n, char nam[20], float s):num(n),score(s)
    {
        strcpy(name,nam);
    }
    void setNum(int n)
    {
        num=n;
    }
    void setName(char nam[20])
    {
        strcpy(name,nam);
    }
    void setScore(float s)
    {
        score=s;
    }
    void show()
    {
        cout<<num<<" "<<name<<" "<<score<<endl;    //显示通过<<的重载实现更自然
    }
private:
    int num;
    char name[20];
    float score;
};

int main( )
{
    Student stud[5]=
    {
        Student(1001,"Li",85),
        Student(1002,"Fun",97.5),
        Student(1004,"Wang",54),
        Student(1006,"Tan",76.5),
        Student(1010,"ling",96)
    };
    fstream iofile("stud.dat",ios::in|ios::out|ios::binary);

    //用fstream类定义输入输出二进制文件流对象iofile
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        abort( );
    }
    //(1)向磁盘文件输出5个学生的数据并显示出来
    cout<<"(1)向磁盘文件输出5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.write((char *)&stud[i],sizeof(stud[i]));
        stud[i].show();
    }

    //(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
    cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
    Student stud1[5];                  //用来存放从磁盘文件读入的数据
    for(int i=0; i<5; i=i+2)
    {
        iofile.seekg(i*sizeof(stud[i]),ios::beg);  //定位于第0,2,4学生数据开头
        iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));  //先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
        stud1[i/2].show();		//输出stud1[0],stud[1]和stud[2]各成员的值
    }
    cout<<endl;

    //(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
    cout<<"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
    stud[2].setNum(1012);                         //修改第3个学生(序号为2)的数据
    stud[2].setName("Wu");
    stud[2].setScore(60);
    iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
    iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
    iofile.seekg(0,ios::beg);                       //重新定位于文件开头

    //(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
    cout<<"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"<<endl;
    for(int i=0; i<5; i++)
    {
        iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
       stud[i].show();
    }
    iofile.close( );
    return 0;
}
时间: 2024-09-30 07:02:02

C++语言基础 例程 文件的随机读写的相关文章

C++语言基础 例程 二进制文件及其顺序读写

贺老师的教学链接  本课讲解 对比ASCII文件和二进制文件 //将short int x=12345写入文本文件 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { short int x=12345; ofstream outfile("binary.dat"); if(!outfile) { cerr<&l

Java对文件的随机读写以及压缩处理操作_java

Java中文件的随机读写 Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表所示. 需要注意的是,mode 表示所创建的随机读写文件的操作状态,其取值包括

C语言基础之文件操作基本常识

  我们都知道,在C语言中,文件操作都是由库函数来完成的.下面会给大家介绍到输入输出等函数,供参考 . 由于程序中经常有大量对文件的输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件(也称非标准文件(流)输入输出(I/O)系统). 我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf(),printf

《C++语言基础》程序阅读——二进制文件及文件的随机读写

返回:贺老师课程教学链接 1.阅读并运行下面的两个程序,分别用记事本和二进制文件阅读器(请自行下载Binary Viewer等程序,或者用DOS中的Debug程序,并百度其用法).查看其内容,并理解文件存储的原理. (1) #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a; ofstream outfile("f1

《C++语言基础》实践项目——二进制文件及文件的随机读写

返回:贺老师课程教学链接 [项目1-用二进制文件处理学生成绩] (1)定义学生类,其中包含学号.姓名.C++课.高数和英语成绩及总分数据成员,成员函数根据需要确定. (2)读入学生的成绩,并求出总分,用对象数组进行存储.ASCII文件score.dat中保存的是100名学生的学号.姓名和C++课.高数和英语成绩. (3)将所有数据保存到一个二进制文件binary_score.dat中,最后通过键盘输入你的信息,并写入到文件中(咱不谦虚,三科全100分,期末求好运). (4)为验证输出文件正确,再

C++语言基础 例程 文本文件的读写

贺老师的教学链接  本课讲解 示例:将数据写入ASCII文件 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a[10]; ofstream outfile("f1.dat",ios::out);//定义文件流对象,打开磁盘文件"f1.dat" if(!outfile) //如果打开失败

C++语言基础 例程 应用系统开发:银行储蓄系统

贺老师的教学链接  本课讲解 说明:(1)下面的代码,只演示了利用链表作为存储结构的可选处理方法,本讲提到的其他方面的拓展,请感兴趣做下去的同学自行使用相关技术组合起来,形成一个完整的系统.(2)运行程序,登录用户名和密码,请阅读程序,从程序中找出.建议建立多文件项目,将代码拷贝到IDE中看.(3)本程序由我的2011级学生刘镇参加企业组织的实训中完成,原文在:点击打开链接 Record.h #ifndef HEADER_RECORD //条件编译 #define HEADER_RECORD #

C++语言基础 例程 C++中的输入和输出

贺老师的教学链接 程序将自行识别符号 #include <iostream> using namespace std; int main() { int a,b; char op; cin>>a>>op>>b cout<<"result: "<<'\n'; cout<<"a: "<<a<<'\n'; cout<<"b: "<

C++语言基础 例程 标准输入流

贺老师的教学链接  本课讲解 例: 输入个数不确定的成绩 #include <iostream> using namespace std; int main( ) { float grade; cout<<"enter grade:"; while(cin>>grade)//能从cin流读取数据 { if(grade>=85) cout<<grade<<" GOOD!"<<endl; if