アドレス帳(静的版)

Contact.h ファイル

#プラグマ 1 回
#define SUM 100
#define NAME 10
#define TELE 12
#define ADDR 20

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

//列挙操作
オプション enum Option
{     EXIT,     ADD,     DELETE,     FIND,     MODIFY,     SHOW,     SORT};







//各連絡先情報の型
struct Peoinfo
{     char name[NAME];     int age;     char tele[TELE];     char address[ADDR];};




//アドレス帳データ
struct Contact
{     struct Peoinfo data[SUM]; //アドレス帳     int sz; //連絡先の統計};


//メニュー表示
void menu();

//接点を追加
void ADD_Contact(struct Contact* pA);

//連絡先を表示
void SHOW_Contact(struct Contact* pSH);

//連絡先のクエリ
void FIND_Contact(struct Contact* pF);

//連絡先を変更
void MODIFY_Contact(struct Contact* pM);

//連絡先を削除
void DELETE_Contact(struct Contact* pD);

//連絡先のソート
void SORT_Contact(struct Contact* pSO);

Contact.c ファイル

 

#define _CRT_SECURE_NO_WARNINGS
#include"Contact.h"

//菜单显表示
void menu()
{     printf("*****************************\n");     printf("***** 1.ADD 2.DELETE *****\n");     printf("***** 3.FIND 4.MODIFY *****\n");     printf("***** 5.SHOW 6.SORT *****\n");     printf("***** 0.EXIT *****\n");     printf("*****************************\n"); }






// 連絡先を名前で検索します(ヘッダー ファイルで宣言されていないため、.c ファイルでのみ使用できます)
int FindByName(const struct Contact* C,const char* N)
{     int i = 0;     for (i = 0 ; i < C->sz; i++)     {         if (0 == strcmp(&(C->data[i].name), N))         {             printf("見つかった:\n");             printf("% -10s %-10s%-20s%-20s\n", "名前", "年齢", "電話番号", "住所"); printf("%-10s%-10d%-20s %-20s\n" ,             & (C->data[i].name), C->data[i].age, &(C->data[i].tele), &(C->data[i].address)) ;             return i;         }     }     printf("連絡先が見つかりません\n");     return -1;}













//名前で並べ替えます(ヘッダー ファイルで宣言されていないため、.c ファイルでのみ使用できます)
int CmpByName(const struct Contact* c1, const struct Contact* c2)
{     return strcmp(c1->data->name, c2->データ->名前);}

//連絡先を追加
void ADD_Contact(struct Contact* pA)
{     //1. アドレス帳がいっぱいかどうかを判断します     if (pA->sz == SUM)     {         printf("アドレス帳がいっぱいなので、新しい連絡先を作成できません\ n" );         return;     }     //新しい連絡先を作成     printf("名前を入力してください:\n");     scanf("%s", &((pA->data[pA->sz]).name) );     printf( "年齢を入力してください:\n");     scanf("%d", &((pA->data[pA->sz]).age));     printf("電話番号を入力してください: \n");     scanf( "%s", &((pA->data[pA->sz]).tele));     printf("アドレスを入力してください:\n");     scanf("%s" 、&((pA->データ [pA->sz])。     printf("正常に追加されました\n");     pA->sz++;}

















//連絡先を表示
void SHOW_Contact(struct Contact* pSH)
{     printf("%-10s%-10s%-20s%-20s\n", "名前", "年齢", "電話番号", "住所");         //%-10s: 10 は印刷時の 10 文字の長さのスペースを指します。-10 は次のデータを印刷するために 10 文字の長さのスペースを占める左揃え (- 記号) を指します // %10s の場合は         、 10 文字の長さのスペースを右揃えで出力し、次のデータを出力します     int i = 0;     for (i = 0; i < pSH->sz; i++)     {         printf("%-10s%-10d%-20s%-20s \n"、&(pSH->data[i].name)、pSH->data[i].age、&(pSH->data[i].tele)、&(pSH->data[i]。アドレス));     }}








//連絡先のクエリ
void FIND_Contact(struct Contact* pF)
{     char name[20] = { 0 };     printf("連絡先名を入力してください:\n");     scanf("%s", name);     FindByName( pF 、名前);}




//連絡先を変更
void MODIFY_Contact(struct Contact* pM)
{     char name[20] = { 0 };     printf("変更する連絡先の名前を入力してください:\n");     scanf("%s", name ) ;     int i = FindByName(pM, name);     if (i != -1)     {         printf("名前を入力してください:\n");         scanf("%s", &(pM->data[i] .name ));         printf("年齢を入力してください:\n");         scanf("%d", &(pM->data[i].age));         printf("電話番号を入力してください:\n ");         scanf( "%s", &(pM->data[i].tele));         printf("アドレスを入力してください:\n");         scanf("%s", &(pM->data) [私]。         printf("変更が成功しました\n");     }}
















//連絡先を削除
void DELETE_Contact(struct Contact* pD)
{     char name[20] = { 0 };     printf("変更する連絡先の名前を入力してください:\n");     scanf("%s", name ) ;     int i = FindByName(pD, name);     if (i != -1)     {         printf("削除を確認するには次のように入力してください: 1\n削除をキャンセルするには次のように入力してください: 2\n");         int j = 0;         scanf(" %d",         if (1 == j)         {             for (j = i; j < pD->sz - 1; j++)             {                 pD->data[j] = pD->data[j + 1];             }             printf( "連絡先が正常に削除されました\n");             pD->sz--;         }     }     return;}




















//連絡先のソート
void SORT_Contact(struct Contact* pSO)
{     qsort(pSO->data, pSO->sz, sizeof(pSO->data[0]), CmpByName); // qsort() 関数のパラメータに注意してください質問、さまざまな種類のデータの qsort 並べ替えの練習}

test.c ファイル

#define _CRT_SECURE_NO_WARNINGS
#include"Contact.h"

int main()
{     int 入力;     構造体 C = { {0} ,0 };     struct Contact* p = &C;     do     {         メニュー();         printf("请选择:\n");         scanf("%d", &input);         switch (入力)         {         case ADD: ADD_Contact (p);             壊す;         case DELETE: DELETE_Contact (p);             壊す;         ケース FIND:  FIND_Contact (p);             壊す;         case MODIFY: MODIFY_Contact (p);             壊す;         ケースSHOW: SHOW_連絡先











            


            


          


            


            (p);
            壊す;
        case SORT:
            SORT_Contact (p);
            壊す;
        ケース終了:
            ブレーク;
        デフォルト:
            ブレーク;
        }
    } while (入力);
    0を返します。
}

 

おすすめ

転載: blog.csdn.net/libj2023/article/details/131584338