Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の構造体を使って在庫管理システムを作成する方法

構造体(Structure)とは、異なるデータ型の変数をひとつの名前のもとにまとめたデータ構造のことです。C言語では、商品名・価格・数量・製造日など、性質の異なる複数の情報をひとまとめに扱いたい場合に構造体が非常に役立ちます。

構造体の主な特徴

C言語における構造体には、以下のような特徴があります。

  • 代入演算子(=)を使うことで、ある構造体変数の全メンバーの内容を、同じ型の別の構造体変数へ一括してコピーできます。

  • 複雑なデータを扱う場合は、構造体の中に別の構造体を定義することができます。これをネストされた構造体(入れ子構造)と呼びます。

  • 関数への引数として、構造体全体・構造体の個々のメンバー・構造体のアドレスのいずれも渡すことが可能です。

  • 構造体へのポインタ(構造体ポインタ)を作成することもできます。

プログラム例:構造体で在庫情報を管理する

以下は、構造体を使用して在庫システムを実現するC言語プログラムです。日付用の構造体「date」を商品詳細用の構造体「details」の中に組み込んだ、ネスト構造を採用しています。

#include<stdio.h>
#include<conio.h>
void main(){
    struct date{
        int day;
        int month;
        int year;
    };
    struct details{
        char name[20];
        int price;
        int code;
        int qty;
        struct date mfg;
    };
    struct details item[50];
    int n,i;
    printf("Enter number of items:");
    scanf("%d",&n);
    fflush(stdin);
    for(i=0;i<n;i++){
        fflush(stdin);
        printf("Item name:");
        scanf("%s",item[i].name);
        fflush(stdin);
        printf("Item code:");
        scanf("%d",&item[i].code);
        fflush(stdin);
        printf("Quantity:");
        scanf("%d",&item[i].qty);
        fflush(stdin);
        printf("price:");
        scanf("%d",&item[i].price);
        fflush(stdin);
        printf("Manufacturing date(dd-mm-yyyy):");
        scanf("%d-%d-%d",&item[i].mfg.day,&item[i].mfg.month,&item[i].mfg.year);
    }
    printf(" ***** INVENTORY *****\n");
    printf("------------------------------------------------------------------\n");
    printf("S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE\n");
    printf("------------------------------------------------------------------\n");
    for(i=0;i<n;i++)
        printf("%d %-15s %-d %-5d %-5d%d/%d/%d\n",i+1,item[i].name,item[i].code,item[i].qty,item[i].price,item[i].mfg.day,item[i].mfg.month,item[i].mfg.year);
    printf("------------------------------------------------------------------\n");
    getch();
}

プログラムのポイント

  • struct date:日(day)・月(month)・年(year)の3つのint型メンバーを持つ構造体です。
  • struct details:商品名(name)、価格(price)、コード(code)、数量(qty)に加え、上記のdate構造体型のメンバーmfg(製造日)を含みます。
  • struct details item[50]:最大50件の商品データを格納できる構造体配列を宣言しています。
  • scanf("%d-%d-%d", ...):製造日を「日-月-年」の形式で一度に入力するテクニックです。
  • %-15s などの書式指定:出力時に列幅を揃えることで、見やすい表形式の一覧を表示します。

実行結果

上記のプログラムを実行すると、以下のような結果が得られます。

Enter number of items:5
Item name:pen
Item code:12
Quantity:50
price:25
Manufacturing date(dd-mm-yyyy):12-02-2020
Item name:pencil
Item code:15
Quantity:100
price:30
Manufacturing date(dd-mm-yyyy):11-03-2020
Item name:book
Item code:34
Quantity:30
price:60
Manufacturing date(dd-mm-yyyy):15-04-2020
Item name:bag
Item code:39
Quantity:20
price:70
Manufacturing date(dd-mm-yyyy):12-03-2021
Item name:sharpner
Item code:33
Quantity:20
price:40
Manufacturing date(dd-mm-yyyy):12-04-2021
***** INVENTORY *****
------------------------------------------------------------------
S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE
------------------------------------------------------------------
1     pen     12       50         25    12/2/2020
2   pencil   15       100        30    11/3/2020
3    book    34       30         60    15/4/2020
4    bag     39       20         70    12/3/2021
5  sharpner  33       20         40    12/4/2021

まとめ

このように、構造体を使うことで、商品名や価格といった異なる型のデータをひとつの単位として整理でき、在庫管理のような実用的なシステムを簡潔に実装できます。特にネストされた構造体を活用すれば、「商品」という大きな概念の中に「製造日」という小さなデータ群を自然に組み込むことができ、コードの可読性と保守性が大きく向上します。

  1. 【C言語】数字パターンを出力するプログラムの作り方

    プログラムの概要 数値パターンとは、「パターンルール」と呼ばれる規則に基づいて生成された数列のことです。パターンルールでは、1つまたは複数の数学的操作を用いて、数列内の連続する数値同士の関係を表現します。 C言語では、for文による繰り返し処理を組み合わせることで、このような規則性のある数字パターンを簡単に出力できます。本記事では、代表的な2種類のパターン(三角形型とひし形型)を出力するプログラムを紹介します。 パターンの例 パターン1(三角形型) 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 パターン1では、各行の先頭の数字が行番号と一致し、隣の要素は直前の値に「

  2. C++で構造体を使って従業員情報を格納・表示する方法【初心者向け解説】

    C++における構造体(struct)とは構造体(structure)とは、異なるデータ型の項目をひとつにまとめたデータ集合です。整数や文字列、浮動小数点数など、型の異なる複数のレコードを扱う複雑なデータ構造を作成する際に非常に役立ちます。C++では、struct キーワードを使って構造体を定義します。構造体の基本的な定義例は以下の通りです。struct employee {    int empID;    char name[50];    float salary;};こ