構造体を用いたプログラミング例


<style="t"ここでは構造体配列を利用して、電話帳を作成します。機能はデータ入力、名前からの電話番号検索、ファイルへの保存、読み出しとします。構造体のメンバは名前市外局番電話番号とします。市外局番は整数とし、名前、電話番号は文字列として格納します。


#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"

define MAX 100      /* MAXを100と定義 */

/* 構造体の宣言 */
struct phone_type{
    char name[40];
    int areacode;
    char number[9];
}phone[MAX];           
/* 100個分の構造体を用意した */

int loc=0;

/* 関数のプロトタイプ宣言 */
int menu(void);
void enter(void),load(void),save(void);
void find(void);

/* main関数 */
void main(void)
{
    int choice;

    do{                                      /* do-while文 */
        int choice=menu();
        switch(choice) {
            case(1): enter();
                break;
            case(2): find();
                break;
            case(3); save();
                break;
            case(4): load();
        }
    }while(choice!=5);
}

/* メニュー選択 */
menu(void)
{
    int i;

    printf("1.入力\n");
    printf("2.電話番号の検索\n");
    printf("3.保存\n");
    printf("4.読み出し\n");
    printf("5.終了\n");

    do{
printf("番号を入力して下さい:
");
i=getche();
printf("\n");
    }while(i<'1'||i>'5');
    return i-'0';
}

/* データ入力 */
void enter(void)
{
char temp[80];

for( ;loc<MAX; ){
    printf("名前を入力して下さい:
");
    gets(phone[loc].name);
    if (!*phone[loc].name) break;                
/* 名前の入力が無ければループからぬける */
            printf("市外局番を入力して下さい:
");
    gets(temp);
    phone[loc].areacode=atoi(temp);
    printf("電話番号を入力して下さい:
");
    gets(phone[loc].number);
    loc++;
}
}

/* 電話番号の入力 */
void find(void)
{
char name[80];
int i;

printf("検索したい人の名前を入力して下さい:
");
gets(name);
if(!*name) return;

for (i=0;i<100;i++)               
/* 検索する人の名前と同じ物が無いか構造体配列に格納された名前を一つずつ参照する */
   if (!strcmp(name,phone[i].name))
    printf("%s (%d) %s\n,phone[i].name,phone[i].areacode,phone[i].number);
}

/* ファイルの読み出し */
void load(void)
{
    FILE *fp

    if((fp=fopen("phone","r"))==NULL) {
printf("can not open file");
exit(1);
    }

    loc=0;
    while(!feof(fp)){
fscanf(fp,"%s%d%s",phone[i].name,phone[i].areacode,phone[i].number):
loc++;
    }
    fclose(fp)
}

/* 保存 */
void save(void)
{
    FILE *fp;
    int i;

    if((fp=fopen("phone","w"))==NULL) {
printf("cann not open file");
exit(1);
    }

    for(i=0;i<loc;i++) {
fprintf(fp, "%s %d, %s",phone[i].name,phone[i].areacode,phone[i].number);
    }
    fclose(fp)
}



「基礎講座もくじへ」

「Q&Aもくじへ」

「つぎへ」