【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;
}
動作解説
- メニューの表示:選択肢を表示して、ユーザーの入力を受け取ります。
- 機能の選択:
switch
文で選択された機能を実行します。
- ループの維持:プログラムは
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");
}
動作解説
- ファイルのオープン:
fopen()
で追記モードでファイルを開きます。
- データの入力:名前と年齢をユーザーから入力します。
- データの書き込み:
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);
}
動作解説
- ファイルのオープン:
fopen()
で読み取りモードでファイルを開きます。
- データの表示:
fgets()
を使ってファイル内容を1行ずつ読み取り、コンソールに出力します。
2.4 データの削除
void deleteFile() {
if (remove("database.txt") == 0) {
printf("All records deleted successfully.\n");
} else {
printf("Error deleting records.\n");
}
}
動作解説
- ファイルの削除:
remove()
を使用してデータベースファイルを削除します。
- エラーチェック:削除が成功したかどうかを確認します。
3. 練習問題
#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;
}
動作解説
switch
文で選択された機能を実行します。while
ループで終了指示があるまで動作します。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");
}
動作解説
fopen()
で追記モードでファイルを開きます。fprintf()
で入力されたデータをファイルに追加します。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);
}
動作解説
fopen()
で読み取りモードでファイルを開きます。fgets()
を使ってファイル内容を1行ずつ読み取り、コンソールに出力します。void deleteFile() {
if (remove("database.txt") == 0) {
printf("All records deleted successfully.\n");
} else {
printf("Error deleting records.\n");
}
}
動作解説
remove()
を使用してデータベースファイルを削除します。以下の課題に挑戦して、ファイル操作の応用力を高めましょう。
- データの検索機能を追加してください(名前で検索)。
- データの編集機能を追加してください(特定のレコードを更新)。
- ファイルの内容をソートして表示する機能を追加してください。
4. 練習問題の解答と解説
詳細な解答例は次回の記事で取り上げます。
5. まとめ
本記事では、ファイル操作を使ったプロジェクト例として、簡易データベースを作成しました。次回は、さらに高度な機能を追加していきます。