通信录

#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(); 
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X252618759

创建不易,需要鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值