【C言語】第6章第11回:構造体を用いたデータベースの設計
構造体を使用して、シンプルかつ効率的なデータベースを設計できます。この章では、実用的なデータベースプログラムを作成する方法を学びます。
0. 記事の概要
この記事を読むメリット
- データ管理スキルの向上:構造体を活用した効率的なデータ管理が可能になります。
- 設計力の習得:データベース設計の基本的な考え方を理解できます。
- 実践的な応用:リアルなプロジェクトで役立つ知識を習得できます。
この記事で学べること
- 構造体を用いたデータベース設計の基本
- データの登録、検索、表示の実装
- 構造体を活用した高度なデータ操作
活用のイメージ
例えば、学生情報や商品の在庫管理システムを構築する際に、構造体を用いたデータベース設計を活用できます。これにより、データの登録、検索、表示が簡単になります。
1. 構造体を用いたデータベースの基本
1.1 データの登録と表示
#include <stdio.h>
// 学生情報を表す構造体
typedef struct {
int id;
char name[50];
float grade;
} Student;
// 学生情報を表示する関数
void displayStudent(Student student) {
printf("ID: %d, Name: %s, Grade: %.2f\n", student.id, student.name, student.grade);
}
int main() {
// 学生情報の登録
Student student1 = {1, "Alice", 88.5};
// 学生情報の表示
displayStudent(student1);
return 0;
}
動作説明
- 構造体の定義:学生のID、名前、成績を管理する
Student
構造体を定義します。 - データの登録:
Student
型の変数student1
にデータを登録します。 - データの表示:
displayStudent
関数を使用して、登録したデータを表示します。
2. 構造体を用いたデータベース操作
2.1 データの検索
#include <stdio.h>
#include <string.h>
// 学生情報を表す構造体
typedef struct {
int id;
char name[50];
float grade;
} Student;
// 学生情報を検索する関数
int findStudent(Student students[], int size, const char *name) {
for (int i = 0; i < size; i++) {
if (strcmp(students[i].name, name) == 0) {
return i; // 一致する学生のインデックスを返す
}
}
return -1; // 見つからない場合
}
int main() {
// 学生情報の配列を初期化
Student students[3] = {
{1, "Alice", 88.5},
{2, "Bob", 75.0},
{3, "Charlie", 92.0}
};
// 学生情報を検索
const char *searchName = "Bob";
int index = findStudent(students, 3, searchName);
if (index != -1) {
printf("Student Found: ");
printf("ID: %d, Name: %s, Grade: %.2f\n",
students[index].id, students[index].name, students[index].grade);
} else {
printf("Student not found.\n");
}
return 0;
}
動作説明
- 構造体配列の初期化:3人分の学生データを構造体配列
students
に格納します。 - 検索の実行:
findStudent
関数を使用し、name
が一致する学生を検索します。- 一致する学生のインデックスを返します。
- 結果の表示:検索結果に応じて学生情報を表示します。
3. 練習問題
以下の課題に挑戦して、構造体を使ったデータベース設計のスキルを高めましょう。
- 学生情報を追加・削除できるプログラムを作成してください。
- 商品の在庫情報を管理し、在庫数を更新できるプログラムを作成してください。
- 従業員情報(ID、名前、給与)を検索し、指定した従業員の給与を更新するプログラムを作成してください。
4. 練習問題の解答と解説
問3の解答
#include <stdio.h>
#include <string.h>
// 従業員情報を表す構造体
typedef struct {
int id;
char name[50];
float salary;
} Employee;
// 従業員情報を検索する関数
int findEmployee(Employee employees[], int size, const char *name) {
for (int i = 0; i < size; i++) {
if (strcmp(employees[i].name, name) == 0) {
return i; // 一致する従業員のインデックスを返す
}
}
return -1; // 見つからない場合
}
int main() {
// 従業員情報の配列を初期化
Employee employees[3] = {
{1, "Alice", 50000.0},
{2, "Bob", 55000.0},
{3, "Charlie", 60000.0}
};
// 従業員情報を検索
const char *searchName = "Bob";
int index = findEmployee(employees, 3, searchName);
if (index != -1) {
printf("Before Update: %s, Salary: %.2f\n",
employees[index].name, employees[index].salary);
// 給与を更新
employees[index].salary += 5000.0;
printf("After Update: %s, Salary: %.2f\n",
employees[index].name, employees[index].salary);
} else {
printf("Employee not found.\n");
}
return 0;
}
動作説明
- 構造体配列の初期化:3人分の従業員データを構造体配列
employees
に格納します。 - 検索の実行:
findEmployee
関数を使用して、指定された名前に一致する従業員を検索します。
- 給与の更新:検索結果を基に、該当従業員の給与を更新します。
- 結果の表示:給与の更新前後のデータを表示します。
5. まとめ
構造体を使ったデータベース設計は、複雑なデータ操作を効率的に行う上で非常に有用です。次回はさらに高度なデータ操作技術を学びます。