C言語は簡単な通信録を実現します.


C言語による簡単な通信録は、連絡先の追加、連絡先の削除、連絡先の検索、連絡先のすべての確認、連絡先情報の変更、連絡先の名前順の並べ替え、連絡先のすべての連絡先を空にする機能を有する.大体このプログラムコードを三つのブロックに分けられます.ヘッダファイル部分、テストコード部分、各モジュールコードは下記の通りです.
 
   Address List.
#define _CRT_SECURE_NO_WARNINGS 1
#include"AddressList.h"


void display()
{
	printf("************************
"); printf("******* *******
"); printf("**** 1. *****
"); printf("**** 2. *****
"); printf("**** 3. *****
"); printf("**** 4. *****
"); printf("**** 5. *****
"); printf("**** 6. *****
"); printf("**** 7. *****
"); printf("**** 0. ! *****
"); } // void InitNode(Person* p) { *p = NULL; } // void AddPerson(Person *p) { assert(p); Person Node = *p; if (*p == NULL) // { (*p) = (Person)malloc(sizeof(person)); // printf(" :"); scanf("%s", &(*p)->name); printf(" :"); scanf("%s", &(*p)->sex); printf(" :"); scanf("%d", &(*p)->age); printf(" :"); scanf("%s", &(*p)->phone); printf(" :"); scanf("%s", &(*p)->add); (*p)->next = NULL; // next } else // { while (Node->next) // Node = (Node)->next; (Node->next) = (Person)malloc(sizeof(person)); printf(" :"); scanf("%s", &(Node->next)->name); printf(" :"); scanf("%s", &(Node->next)->sex); printf(" :"); scanf("%d", &(Node->next)->age); printf(" :"); scanf("%s", &(Node->next)->phone); printf(" :"); scanf("%s", &(Node->next)->add); Node->next->next = NULL; // next } } // void DeletePerson(Person* node) { assert(node); Person p = *node; Person Pre = NULL; printf(" :"); char name[10]; scanf("%s", name); if (*node == NULL) { printf(" !
"); return; } while (*name!=*(p)->name) // { Pre = p;// p = p->next;// if (p == NULL)// { printf(" !
"); return; } } if (p != *node) // Pre->next = p->next; // next next( ) else // *node = (*node)->next; free(p); // } // Person FindPerson(Person p) { char name[10]; printf(" / :"); scanf("%s", name); if (p == NULL) { printf(" !
"); return NULL; } while (strcmp(name,p->name) != 0) // , , , , { p = p->next; if (p == NULL) { printf(" !
"); return NULL; } } printf("

"); printf("%-6s %-6s %-4d %-13s %-20s", p->name, p->sex, p->age, p->phone, p->add); printf("
"); return p; } // void ChangePerson(Person* p) { int n=0; Person node = FindPerson(*p); if (node == NULL) return; printf(" :
"); printf("1. 2. 3. 4. 5.
"); scanf("%d", &n); switch (n) { case 1: { printf(" :"); scanf("%s", node->name); break; } case 2: { printf(" :"); scanf("%s", node->sex); break; } case 3: { printf(" :"); scanf("%d", &node->age); break; } case 4: { printf(" :"); scanf("%s", node->phone); break; } case 5: { printf(" :"); scanf("%s", node->add); break; } default: { printf("
"); break; } } } // void DisplayPerson(Person node) { if (node == NULL) { printf(" !
"); return; } printf("

"); while(node!=NULL) { printf("%-6s %-6s %-4d %-13s %-20s", node->name, node->sex, node->age, node->phone, node->add); printf("
"); node = node->next; } } // void EmptyPerson(Person* p) { assert(p); if ((*p)->next != NULL) EmptyPerson(&((*p)->next)); // free(*p); *p = NULL; return; } // void SortPerson_name(Person* p) { assert(p); Person node = *p, Node = *p, pre = *p; int count = 0; while (node!= NULL) { count++; node = node->next; } for (int i = 1; i < count; i++) { for (int j = 1; j <= (count - i); j++) { if (strcmp(Node->name, Node->next->name)>0) { if (j == 1) // { Node = Node->next; pre->next = Node->next; Node->next = pre; *p = Node; } else { pre->next = Node->next; Node->next = Node->next->next; pre->next->next = Node; } } if (j > 1) { pre = pre->next; } Node = pre->next; } pre = *p; Node = pre; } }
 
Test.
#define _CRT_SECURE_NO_WARNINGS 1
#include"AddressList.h"
int main()
{
	int n = 0;
	Person p;
	InitNode(&p);//   
	while (1)
	{
		printf("***********************************************************************************
"); display(); printf("***********************************************************************************
"); printf("***********************************************************************************
"); scanf("%d", &n); switch (n) { case 1: { AddPerson(&p);// break; } case 2: { DeletePerson(&p);// break; } case 3: { FindPerson(p);// break; } case 4: { ChangePerson(&p);// break; } case 5: { DisplayPerson(p);// break; } case 6: { EmptyPerson(&p);// break; } case 7: { SortPerson_name(&p);// break; } case 0: { return 0;// break; } default: { printf(" !
"); break; } } } system("pause"); return 0; }
 
AdderssList.h
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include

#define Max 10

typedef struct PersonNode
{
	char name[10];
	char sex[4];
	int age;
	int phone[12];
	char add[50];
	struct PersonNode* next;
}*Person,person;
 

void display();
void InitNode(Person* node);
void AddPerson(Person* node);
void DeletePerson();
Person FindPerson();
void ChangePerson();
void DisplayPerson();
void EmptyPerson();
void SortPerson_name();
 
(環境:VS 2013)
本人の能力は有限で、もし間違いがあれば、皆さん、よろしくお願いします.