通讯录中的每个数据记录应包括以下内容:序号,姓名,电话,地址等内容。要求实现如下功能:
1.能够显示所有的已录通讯录
2.能够实现新记录的录入
3.能够实现任何一条记录的删除
4.实现任意一条记录的修改
5.可以根据姓名,电话或地址查询相关信息
6.系统的退出
要求:至少二百行
通讯录中的每个数据记录应包括以下内容:序号,姓名,电话,地址等内容。要求实现如下功能:
1.能够显示所有的已录通讯录
2.能够实现新记录的录入
3.能够实现任何一条记录的删除
4.实现任意一条记录的修改
5.可以根据姓名,电话或地址查询相关信息
6.系统的退出
要求:至少二百行
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Node struct node
Node
{
char szName[20];
char szPhoneNum[12];
Node *next;
};
Node *strpHead;
Node *strpCurrent;
void HandleChoice_f(int );
void AddRecord_f();
void InsertNode_f(Node *);
Node *InsertPoint_f(char *);
void MakeNewHead_f(Node *);
void AddToEnd_f(Node *);
void MoveToEnd_f();
void DisplayList_f();
void DeleteRecord_f();
void DelHead_f();
void DelEnd_f(Node *);
void DelMid_f(Node *);
int VerifyDel_f();
void DelNode_f(Node *);
void DelList_f();
void SearchByName_f();
void WriteFile_f();
void LoadFile_f();
void Help_f();
int main()
{
int nChoice;
printf( "Welcome to PhoneBook 1.0 for dos and freedos\n");
printf( "Press Enter To Continue\n");
system("pause");
system("cls");
strpHead = NULL;
LoadFile_f();
do
{
printf( "1 - Add record\n");
printf( "2 - Display all records\n");
printf( "3 - Search for friend by name\n");
printf( "4 - Delete record\n");
printf( "5 - Help\n");
printf( "6 - Exit program\n");
printf( "Enter choice: ");
scanf("%d", & nChoice);
HandleChoice_f(nChoice);
} while(nChoice != 6);
return 0;
}
void HandleChoice_f(int nChoice)
{
switch(nChoice)
{
case 1:
AddRecord_f();
break;
case 2:
DisplayList_f();
break;
case 3:
SearchByName_f();
break;
case 4:
DeleteRecord_f();
break;
case 5:
Help_f();
break;
case 6:
WriteFile_f();
if(strpHead != NULL)
{
DelList_f();
}
break;
default :
printf("Invalid choice\n");
break;
}
}
void AddRecord_f()
{
Node *strpNew;
strpNew=(Node *)malloc(sizeof(Node));
getchar();
printf( "Name: ");
gets(strpNew->szName);
printf( "Phone Number: ");
gets(strpNew->szPhoneNum);
InsertNode_f(strpNew);
system("cls");
}
void InsertNode_f(Node *strpNew)
{
Node *strpFront;
Node *strpBack;
system("cls");
if(strpHead == NULL)
{
strpNew->next = NULL;
strpHead = strpNew;
}
else
{
if(strcmp(strpNew->szName, strpHead->szName) < 0)
{
MakeNewHead_f(strpNew);
}
else
{
strpCurrent = InsertPoint_f(strpNew->szName);
strpFront = strpCurrent;
strpBack = strpCurrent->next;
if(strpBack == NULL)
{
AddToEnd_f(strpNew);
}
else
{
strpFront->next = strpNew;
strpNew->next = strpBack;
}
}
}
}
Node *InsertPoint_f(char *szName)
{
char szTempName[20];
Node *strpTemp;
int nTemp;
if(strpHead->next != NULL)
{
strpCurrent = strpHead;
strpTemp = strpCurrent->next;
strcpy(szTempName, strpTemp->szName);
nTemp = strcmp(szName,szTempName);
while((nTemp > 0) && (strpCurrent->next !=NULL))
{
strpCurrent = strpTemp;
if(strpCurrent->next != NULL)
{
strpTemp = strpCurrent->next;
strcpy(szTempName, strpTemp->szName);
nTemp = strcmp(szName,szTempName);
}
}
}
else
{
strpCurrent = strpHead;
}
return(strpCurrent);
}
void MakeNewHead_f(Node*strpNew)
{
Node *strpTemp;
strpTemp = strpHead;
strpNew->next = strpTemp;
strpHead = strpNew;
}
void AddToEnd_f(Node *strpNew)
{
strpNew->next = NULL;
MoveToEnd_f();
strpCurrent->next = strpNew;
}
void MoveToEnd_f()
{
strpCurrent = strpHead;
while(strpCurrent->next != NULL)
{
strpCurrent = strpCurrent->next;
}
}