zoukankan      html  css  js  c++  java
  • 实验3 文件操作

    一.实验目的与要求:

    1. 学会使用文件操作函数实现对文件打开、关闭、读、写等操作。
    2. 学会对数据文件进行简单的操作。
    3. 深入理解 C++的输入输出的含义及其实现方法。
    4. 掌握标准输入输出流的应用。

    二.实验过程:

    1. 运行调试第8章编程示例8-2文本显示程序;将其改写为一个随机点名的程序,可以参考以下步骤:

        (1)     读入指定文本文件的程序,文本文件格式见参考内容;

        (2)     用随机函数根据文本文件的记录数量生成一个随机数;

        (3)     根据这个随机数,从所读取的记录中找到对应的记录,并输出显示;

    1. 若还有时间,请尝试运行调试第8章编程示例8.3-4;完成练习题8.4.1-3。

    三.示例代码:

    1. 编程示例8-2文本显示程序:

     

    #include <iostream>
    
    #include <fstream>
    
    using namespace std;
    
     
    
    int main() {
    
        int c;   // input character
    
        int i;   // loop counter
    
        char filename[81];
    
        char input_line[81];
    
     
    
        cout << "Enter a file name and press ENTER: ";
    
        cin.getline(filename, 80);
    
     
    
        ifstream file_in(filename);
    
     
    
        if (! file_in) {
    
            cout << "File " << filename << " could not be opened." << endl;
    
            system("PAUSE");
    
            return -1;
    
        }
    
     
    
        while (1) {
    
            for (i = 1; i <= 24 && ! file_in.eof(); i++) {
    
                file_in.getline(input_line, 80);
    
                cout << input_line << endl;
    
            }
    
            if (file_in.eof())
    
                break;
    
            cout << "More? (Press 'Q' and ENTER to quit.)";
    
            cin.getline(input_line, 80);
    
            c = input_line[0];
    
            if (c == 'Q' || c == 'q')
    
                break;
    
        }
    
        system("PAUSE");
    
        return 0;
    
    }
    

      

     

     

    1. 文本文件格式,从第二行起:

    序号 学号             姓名

    1    31140906012*  商**

    2    31150906010*  王*

    3    31150906011*  韩*

     

    1. 编程示例8-3:
    #include <iostream>
    
    #include <fstream>
    
    using namespace std;
    
     
    
    int get_int(int default_value);
    
    char name[20];
    
     
    
    int main() {
    
        char filename[81];
    
        int n;
    
        int age;
    
        int recsize = sizeof(name) + sizeof(int);
    
       
    
     
    
        cout << "Enter file name: ";
    
        cin.getline(filename, 80);
    
     
    
        // Open file for binary read and write.   
    
     
    
        fstream  fbin(filename, ios::binary | ios::out);
    
        if (!fbin) {
    
            cout << "Could not open file " << filename << endl;
    
            system("PAUSE");
    
            return -1;
    
        }
    
     
    
    //  Get record number to write to.
    
     
    
        cout << "Enter file record number: ";
    
        n = get_int(0);
    
     
    
        // Get data from end user.
    
     
    
        cout << "Enter name: ";
    
        cin.getline(name, 19);
    
        cout << "Enter age: ";
    
        age = get_int(0);
    
     
    
        // Write data to the file.
    
     
    
        fbin.seekp(n * recsize);
    
        fbin.write(name, 20);
    
        fbin.write(reinterpret_cast<char*>(&age), sizeof(int));
    
        fbin.close();
    
        system("PAUSE");
    
        return 0;
    
    }
    
     
    
    // Get integer function
    
    // Get an integer from keyboard; return default
    
    //  value if user enters 0-length string.
    
    //
    
    int get_int(int default_value) {
    
        char s[81];
    
     
    
        cin.getline(s, 80);
    
        if (strlen(s) == 0)
    
             return default_value;
    
        return atoi(s);
    
    }
    1. 编程示例8-4:
    #include <iostream>
    
    #include <fstream>
    
    using namespace std;
    
     
    
    int get_int(int default_value);
    
    char name[20];
    
     
    
    int main() {
    
        char filename[81];
    
        int n;
    
        int age;
    
        int recsize =  sizeof(name) + sizeof(int);
    
       
    
     
    
        cout << "Enter file name: ";
    
        cin.getline(filename, 80);
    
     
    
        // Open file for binary read access.
    
     
    
        fstream  fbin(filename, ios::binary | ios::in);
    
        if (!fbin) {
    
            cout << "Could not open file " << filename << endl;
    
            system("PAUSE");
    
            return -1;
    
        }
    
     
    
    while(1) {
    
     
    
            // Get record number and go to record.
    
     
    
            cout << "Enter file record number (-1 to quit): ";
    
            n = get_int(-1);
    
          if (n == -1)
    
              break;
    
           
    
          fbin.seekp(n * recsize);
    
     
    
            // Read data from the file.
    
     
    
            fbin.read(name, 20);
    
            fbin.read(reinterpret_cast<char*>(&age), sizeof(int));
    
     
    
            // Display the data and close.
    
       
    
            cout << "The name is: " << name << endl;
    
            cout << "The age is: " << age << endl;
    
        }
    
        fbin.close();
    
        system("PAUSE");
    
        return 0;
    
    }
    
     
    
    // Get integer function
    
    // Get an integer from keyboard; return default
    
    //  value if user enters 0-length string.
    
    //
    
    int get_int(int default_value) {
    
        char s[81];
    
     
    
        cin.getline(s, 80);
    
        if (strlen(s) == 0)
    
             return default_value;
    
        return atoi(s);
    
    }
  • 相关阅读:
    ES之2:海量数据处理之倒排索引
    架构-伸缩性
    ES之3:elasticsearch优化收集
    架构-扩展性
    关于静态方法与非静态方法的执行效率
    架构师
    拖库 洗库 撞库
    SOA架构设计经验分享—架构、职责、数据一致性
    mysql索引之五:多列索引
    mysql索引之四:复合索引之最左前缀原理,索引选择性,索引优化策略之前缀索引
  • 原文地址:https://www.cnblogs.com/opengl/p/6563588.html
Copyright © 2011-2022 走看看