#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <conio.h>
void fnFace( void ); //界面
void fnLoad( void ); //导入
void fnAppend( void ); //添加
void fnShow( void ); //查看
void fnModify( void ); //修改
void fnDel( void ); //删除
void fnDel_all( void ); //全部删除
void fnSave( void ); //保存
typedef struct node {
char name[8];
char phone[14];
char sex[4];
struct node *next;
}
NODE, *NODEP;
FILE *fp;
NODEP pHead = NULL;
void fnAppend( void )
{
NODEP New, temp = pHead;
int no,i;
system("cls");
printf("请输入写入记录的数量:");
scanf("%d", &no);
for( i=0; i<no; i++ )
{
New = ( NODEP )malloc( sizeof( NODE ) );
if( i==0 )
{
if( temp != NULL )
{
while( temp->next != NULL )
temp = temp->next;
temp->next = New;
}
else pHead = New;
}
else temp->next = New;
printf("/n请输入姓名:");
scanf("%s", New->name);
printf("/n请输入性别:");
scanf("%s", New->sex);
printf("/n请输入电话号码:");
scanf("%s", New->phone);
temp = New;
temp->next = NULL;
}
}
void fnDel( void )
{
NODEP Del,temp;
char find[8];
Del = temp = pHead;
system("cls");
printf("请输入删除的姓名:");
scanf("%s", find);
while( Del != NULL )
{
if( strcmp(Del->name,find) == 0 )
break;
temp = Del;
Del = Del->next;
}
if( Del != NULL )
temp->next = Del->next;
else
printf("/n查无此人!");
if( Del == pHead && pHead != NULL )
pHead = temp->next;
else
free( Del );
}
void fnDel_all( void )
{
char Choice;
system("cls");
printf("您确定要格式化吗?<Y/N>");
Choice = getche();
if( Choice=='Y' || Choice=='y' )
{
pHead = NULL;
printf("/n/n格式化已完成!");
}
}
void fnModify( void )
{
NODEP Mod = pHead;
char find[8];
system("cls");
printf("请输入要修改的姓名:");
scanf("%s", find);
while( Mod != NULL )
{
if( strcmp(Mod->name,find)==0 )
break;
Mod = Mod->next;
}
if( Mod == NULL )
printf("/n/n查无此人!");
else
{
printf("/n请输入新姓名:");
scanf("%s", Mod->name);
printf("/n请输入新性别:");
scanf("%s", Mod->sex);
printf("/n请输入新电话号码:");
scanf("%s", Mod->phone);
}
}
void fnLoad( void )
{
NODEP New, Temp;
int Read, i = 0;
fp = fopen("save.txt","r");
if( fp == NULL )
fp = fopen("save.txt","w+");
assert( fp != NULL );
while( 1 )
{
New = ( NODEP )malloc( sizeof( NODE ) );
New->next = NULL;
Read = fread(New, sizeof( NODE ), 1, fp);
if( Read == 0 ) break;
if( i == 0 )
pHead = New;
else
Temp->next = New;
Temp = New;
i++;
}
fclose( fp );
}
void fnSave( void )
{
NODEP Sav = pHead;
fp = fopen("save.txt","w");
assert( fp != NULL );
while( Sav != NULL )
{
fwrite( Sav,sizeof( NODE ),1,fp );
Sav = Sav->next;
}
fclose( fp );
printf("/n记录已保存!");
}
void fnShow( void )
{
NODEP temp = pHead;
int Count = 0;
system("cls");
printf("/t==================================================/n");
printf("/t Name Sex Phone /n");
if( temp == NULL ) printf("/n/t/t/t 暂无记录!/n/n");
while( temp != NULL )
{
Count++;
printf("/t--------------------------------------------------/n");
printf("/t %-12s %-11s %-12s/n", temp->name, temp->sex, temp->phone);
temp = temp->next;
}
printf("/t==================================================/n");
printf("/t总计: %d 人/n", Count);
}
void fnFace( void )
{
char Choose;
while( 1 )
{
system("cls");
printf("/n/n/t/t 欢迎使用通讯录管理系统 /n/n");
printf("/n/t/t 1. 查看记录 /n");
printf("/n/t/t 2. 添加记录 /n");
printf("/n/t/t 3. 修改记录 /n");
printf("/n/t/t 4. 删除记录 /n");
printf("/n/t/t 5. 保存记录 /n");
printf("/n/t/t 6. 格 式 化 /n");
printf("/n/t/t 0. 退出系统 /n");
printf("/n/n请输入选项:");
Choose = getche();
switch( Choose )
{
case '1': fnShow(); break;
case '2': fnAppend(); break;
case '3': fnModify(); break;
case '4': fnDel(); break;
case '5': fnSave(); break;
case '6': fnDel_all(); break;
case '0': fnSave(); exit( 0 ); break;
default: printf("/n选项为0 ~ 6之内!"); break;
}
printf("/n/n按任意键回主菜单...");
getch();
}
}
void main()
{
fnLoad();
fnFace();
}