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を返します。
}