C言語は簡単な通信録を実現します.
C言語による簡単な通信録は、連絡先の追加、連絡先の削除、連絡先の検索、連絡先のすべての確認、連絡先情報の変更、連絡先の名前順の並べ替え、連絡先のすべての連絡先を空にする機能を有する.大体このプログラムコードを三つのブロックに分けられます.ヘッダファイル部分、テストコード部分、各モジュールコードは下記の通りです.
Address List.
Test.
AdderssList.h
(環境:VS 2013)
本人の能力は有限で、もし間違いがあれば、皆さん、よろしくお願いします.
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)
本人の能力は有限で、もし間違いがあれば、皆さん、よろしくお願いします.