C言語

【C言語】第7章第10回:ファイル操作を使ったプロジェクト例

これまで学んだファイル操作の知識を活かして、実践的なプロジェクトを作成します。本記事では、シンプルなデータベース管理システムを作成し、その仕組みを学びます。

0. 記事の概要

この記事を読むメリット

  • 実践的なスキルの習得:ファイル操作を活用したプロジェクトの作成方法を学べます。
  • プロジェクト経験の向上:実際に動くプログラムを構築することで、スキルを強化します。
  • 応用力の向上:データベースやファイル操作の応用例を学べます。

この記事で学べること

  • 簡易データベースの作成
  • ファイル操作の実践例
  • データの追加、削除、表示の実装

活用のイメージ

この記事を読むことで、C言語を使ってデータベースのようなファイルベースのアプリケーションを作成できるスキルを習得できます。

1. プロジェクトの概要

1.1 プロジェクトの目的

シンプルなデータベース管理システムを構築し、以下の機能を実現します。

  • データの追加
  • データの表示
  • データの削除

1.2 使用するファイル操作

このプロジェクトでは、以下のファイル操作を使用します。

  • fopen():ファイルを開く
  • fprintf():ファイルにデータを書き込む
  • fgets():ファイルからデータを読み取る
  • remove():ファイルを削除する

2. プログラムの詳細

2.1 メニューシステムの構築

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void addRecord();
void viewRecords();
void deleteFile();

int main() {
    int choice;

    while (1) {
        printf("==== Simple Database System ====\n");
        printf("1. Add Record\n");
        printf("2. View Records\n");
        printf("3. Delete All Records\n");
        printf("4. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addRecord();
                break;
            case 2:
                viewRecords();
                break;
            case 3:
                deleteFile();
                break;
            case 4:
                printf("Exiting the program.\n");
                exit(0);
            default:
                printf("Invalid choice. Please try again.\n");
        }
    }

    return 0;
}
動作解説
  1. メニューの表示:選択肢を表示して、ユーザーの入力を受け取ります。
  2. 機能の選択:switch文で選択された機能を実行します。
  3. ループの維持:プログラムはwhileループで終了指示があるまで動作します。

2.2 データの追加

void addRecord() {
    FILE *file = fopen("database.txt", "a");
    if (file == NULL) {
        printf("Error opening file.\n");
        return;
    }

    char name[50];
    int age;
    printf("Enter Name: ");
    scanf("%s", name);
    printf("Enter Age: ");
    scanf("%d", &age);

    fprintf(file, "%s,%d\n", name, age);
    fclose(file);
    printf("Record added successfully.\n");
}
動作解説
  1. ファイルのオープン:fopen()で追記モードでファイルを開きます。
  2. データの入力:名前と年齢をユーザーから入力します。
  3. データの書き込み:fprintf()で入力されたデータをファイルに追加します。

2.3 データの表示

void viewRecords() {
    FILE *file = fopen("database.txt", "r");
    if (file == NULL) {
        printf("No records found.\n");
        return;
    }

    char line[100];
    printf("==== Records ====\n");
    while (fgets(line, sizeof(line), file) != NULL) {
        printf("%s", line);
    }

    fclose(file);
}
動作解説
  1. ファイルのオープン:fopen()で読み取りモードでファイルを開きます。
  2. データの表示:fgets()を使ってファイル内容を1行ずつ読み取り、コンソールに出力します。

2.4 データの削除

void deleteFile() {
    if (remove("database.txt") == 0) {
        printf("All records deleted successfully.\n");
    } else {
        printf("Error deleting records.\n");
    }
}
動作解説
  1. ファイルの削除:remove()を使用してデータベースファイルを削除します。
  2. エラーチェック:削除が成功したかどうかを確認します。

3. 練習問題

以下の課題に挑戦して、ファイル操作の応用力を高めましょう。

  1. データの検索機能を追加してください(名前で検索)。
  2. データの編集機能を追加してください(特定のレコードを更新)。
  3. ファイルの内容をソートして表示する機能を追加してください。

4. 練習問題の解答と解説

詳細な解答例は次回の記事で取り上げます。

5. まとめ

本記事では、ファイル操作を使ったプロジェクト例として、簡易データベースを作成しました。次回は、さらに高度な機能を追加していきます。