您的位置:首页 > 财经 > 产业 > 天津在线制作网站_微信开发功能_关键词怎样做优化排名_seo网站有优化培训班吗

天津在线制作网站_微信开发功能_关键词怎样做优化排名_seo网站有优化培训班吗

2025/1/1 19:43:47 来源:https://blog.csdn.net/hxj_686/article/details/144797019  浏览:    关键词:天津在线制作网站_微信开发功能_关键词怎样做优化排名_seo网站有优化培训班吗
天津在线制作网站_微信开发功能_关键词怎样做优化排名_seo网站有优化培训班吗

实验 文件管理

一、实验目的

通过本次实验对一个班级学生成绩的管理,使学生了解文件的主要操作。详细的目标如下:

  1. 通过实验中文件的创建、复制和删除等操作完成对文件管理。
  2. 了解文件、文件目录的结构。
  3. 掌握文件的读写、文件指针移动基本操作,并了解文件控制的作用。

二、实验内容

  1. 学生了解实验目的,创建文件、输入班级成绩、保存文件等功能需要画出流程框图。
  2. 利用磁盘文件对学生成绩进行管理:查询成绩、修改成绩、显示所有的学生成绩。
  3. 编写一个班级成绩复制到另一个文件的功能。
  4. 学习使用文件控制,实现指定班级成绩文件的删除操作。
  5. 实现目录的管理,创建与删除子目录、搜索指定的文件等(选做)。

  1. 程序设计(原理、数据结构设计、流程图)

原理

该程序的主要目的是管理班级学生的成绩,包括创建文件、输入成绩、显示成绩、修改成绩、复制文件和删除文件。程序通过命令行界面与用户交互,允许用户选择不同的操作。每个操作都对应一个特定的函数,负责处理相关的文件操作和数据管理。

数据结构设计

在程序中,使用了一个简单的结构体 Student 来存储学生的姓名和成绩。该结构体的定义如下:

struct Student {

    string name; // 学生姓名

    int score;   // 学生成绩

};

程序中还使用了 vector<Student> 来存储多个学生的信息,便于在修改成绩时进行遍历和更新。

流程图

(2)核心函数

以下是程序中的核心函数及其功能说明:

创建文件 (createFile)

功能:检查文件是否已存在,如果不存在则创建新文件。

输入:文件名。

输出:创建成功或失败的消息。

void createFile(const string& filename);

输入成绩 (inputScores)

功能:允许用户输入多个学生的姓名和成绩,并将其写入文件。

输入:文件名。

输出:输入成功的消息。

void inputScores(const string& filename);

显示成绩 (displayScores)

功能:从文件中读取并显示所有学生的成绩。

输入:文件名。

输出:所有学生成绩的列表。

void displayScores(const string& filename);

修改成绩 (modifyScore)

功能:读取文件中的成绩,允许用户修改特定学生的成绩,然后将更新后的数据写回文件。

输入:文件名。

输出:修改成功的消息。

void modifyScore(const string& filename);

复制文件 (copyFile)

功能:将一个文件的内容复制到另一个文件。

输入:源文件名和目标文件名。

输出:复制成功或失败的消息。

void copyFile(const string& source, const string& destination);

删除文件 (deleteFile)

功能:删除指定的文件。

输入:文件名。

输出:删除成功或失败的消息。

void deleteFile(const string& filename);

(3)测试截图

源码:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

struct Student {
    string name;
    int score;
};

// 函数声明
void createFile(const string& filename);
void inputScores(const string& filename);
void displayScores(const string& filename);
void modifyScore(const string& filename);
void copyFile(const string& source, const string& destination);
void deleteFile(const string& filename);

int main() {
    string filename = "scores.txt";
    int choice;

    do {
        cout << "1. 创建文件\n";
        cout << "2. 输入班级成绩\n";
        cout << "3. 显示所有成绩\n";
        cout << "4. 修改成绩\n";
        cout << "5. 复制成绩文件\n";
        cout << "6. 删除成绩文件\n";
        cout << "0. 退出\n";
        cout << "选择操作: ";
    
        cin >> choice;

        switch (choice) {
        case 1:
            createFile(filename);
            break;
        case 2:
            inputScores(filename);
            break;
        case 3:
            displayScores(filename);
            break;
        case 4:
            modifyScore(filename);
            break;
        case 5: {
            string destination;
            cout << "输入目标文件名: ";
            cin >> destination;
            copyFile(filename, destination);
            break;
        }
        case 6:
            deleteFile(filename);
            break;
        case 0:
            cout << "退出程序。\n";
            break;
        default:
            cout << "无效选择,请重试。\n";
        }
        cout << "\n";
        cout << "\n";    
        
    } while (choice != 0);

    return 0;
}

// 创建文件
void createFile(const string& filename) {
    // 检查文件是否已存在
    ifstream ifs(filename);
    if (ifs) {
        cout << "文件 " << filename << " 已经存在,请选择其他操作。\n";
        ifs.close();
        return; // 文件已存在,返回
    }
    ifs.close(); // 关闭文件流

    ofstream ofs(filename);
    if (ofs) {
        cout << "文件 " << filename << " 创建成功。\n";
    }
    else {
        cout << "文件创建失败。\n";
    }
    ofs.close();
}

// 输入班级成绩
void inputScores(const string& filename) {
    ofstream ofs(filename, ios::app); // 以追加模式打开
    if (!ofs) {
        cout << "无法打开文件。\n";
        return;
    }

    int n;
    cout << "输入学生数量: ";
    cin >> n;

    for (int i = 0; i < n; ++i) {
        Student student;
        cout << "输入学生姓名: ";
        cin >> student.name;
        cout << "输入学生成绩: ";
        cin >> student.score;
        ofs << student.name << " " << student.score << endl;
    }

    ofs.close();
    cout << "成绩输入成功。\n";
}

// 显示所有成绩
void displayScores(const string& filename) {
    ifstream ifs(filename);
    if (!ifs) {
        cout << "无法打开文件。\n";
        return;
    }

    string line;
    cout << "所有学生成绩:\n";
    while (getline(ifs, line)) {
        cout << line << endl;
    }

    ifs.close();
}

// 修改成绩
void modifyScore(const string& filename) {
    vector<Student> students;
    ifstream ifs(filename);
    if (!ifs) {
        cout << "无法打开文件。\n";
        return;
    }

    string name;
    int newScore;
    while (ifs >> name >> newScore) {
        students.push_back({ name, newScore });
    }
    ifs.close();

    cout << "输入要修改成绩的学生姓名: ";
    cin >> name;
    cout << "输入新的成绩: ";
    cin >> newScore;

    for (auto& student : students) {
        if (student.name == name) {
            student.score = newScore;
            break;
        }
    }

    ofstream ofs(filename);
    for (const auto& student : students) {
        ofs << student.name << " " << student.score << endl;
    }
    ofs.close();
    cout << "成绩修改成功。\n";
}

// 复制文件
void copyFile(const string& source, const string& destination) {
    ifstream ifs(source);
    ofstream ofs(destination);
    if (!ifs || !ofs) {
        cout << "文件复制失败。\n";
        return;
    }

    string line;
    while (getline(ifs, line)) {
        ofs << line << endl;
    }

    cout << "文件复制成功。\n";
    ifs.close();
    ofs.close();
}

// 删除文件
void deleteFile(const string& filename) {
    if (remove(filename.c_str()) == 0) {
        cout << "文件 " << filename << " 删除成功。\n";
    }
    else {
        cout << "文件删除失败。\n";
    }
}
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com