用C语言写了一个简单的通讯录,说简单一是功能简单,二是也没有加读写文件操作,只是作为链表操作的一个练习,希望能给这方面的新手一此引导和帮助。

代码:

/* 转贴请注明出处                  */
/* 作者:小浦原(ID:blueboy82006)           */
/* http://blog.csdn.net/blueboy82006         */
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
typedef struct node{
  char name[12];
  char phone[13];
  struct node *next;
}LNode;
LNode *h;               //头结点
static int flag=1;          //通讯录创建标记
int CreateNode(void)         //创建单循环链表
{
  if(flag)
  {
    LNode *p;
    h=(LNode *)malloc(sizeof(LNode));
    h->next=NULL;
    p=h;
    flag--;
    return 1;
  }
  else
    return 0;
}
int InsertNode(void)        //插入函数
{
  if(!flag)
  {
    LNode *t;
    char name1[12];
    char phone1[13];
    printf("/n输入姓名:");
    scanf("%s",name1);
    printf("/n输入联系电话:");
    scanf("%s",phone1);
    t=(LNode *)malloc(sizeof(LNode));
    strcpy(t->name,name1);
    strcpy(t->phone,phone1);
    t->next=h->next;
    h->next=t;
    return 1;
  }
  else
    return 0;
}
int SearchNode(void)        //查询函数
{
  if(!flag)
  {
    LNode *p;
    int x=0;
    char name1[12];
    printf("/n输入查询姓名:");
    scanf("%s",name1);
    p=h;
    printf("/n查询结果:");
    while(p->next)
    {
      p=p->next;
      if(strcmp(p->name,name1)==0)
      {
        printf("/n姓名:%s/n联系电话:%s/n",p->name,p->phone);
        x++;
      }
    }
    if(!x)
      printf("/n没有找到相关信息!");
    return 1;
  }else
    return 0;
}
int DeletNode(void)        //删除函数
{
  if(!flag)
  {
    LNode *pre,*p;
    char name1[12];
    p=h;
    printf("/n输入要删除联系人的姓名:");
    scanf("%s",name1);
    while(p->next)
    {
      pre=p;
      p=p->next;
      if(strcmp(p->name,name1)==0)
      {
        pre->next=p->next;
        free(p);
        printf("删除成功!/n");
        break;
      }
    }
    if(!p->next)
      printf("/n没有找到要删除的信息!");
    return 1;
  }
  else
    return 0;
}
int PrintNode(void)        //输出函数
{
  if(!flag)
  {
    LNode *p;
    p=h;
    while(p->next)
    {
      p=p->next;
      printf("/n姓名:%s /t联系电话:%s",p->name,p->phone);
    }
    return 1;
  }
  else
    return 0;
}
int main()             //主函数
{
  char n;
  printf("/n/n");
  printf("/t/t     通讯录/t/n");
  printf("/t/t|————————————————|/n");
  printf("/t/t|                |/n");
  printf("/t/t| [1] 建立通讯录         |/n");
  printf("/t/t| [2] 插入联系人的姓名      |/n");
  printf("/t/t| [3] 查找联系人的姓名      |/n");
  printf("/t/t| [4] 删除联系人的姓名      |/n");
  printf("/t/t| [5] 输出所有联系人信息     |/n");
  printf("/t/t| [0] 退出            |/n");
  printf("/t/t|                |/n");
  printf("/t/t| 如未建立新表,请先建立!    |/n");
  printf("/t/t|                |/n");
  printf("/t/t|————————————————|/n");
  printf("/n");
  printf("请输入你的选项(0-5):");
  while(1)
  {
    scanf("%s",&n);
    while(!(n=='0'||n=='1'||n=='2'||n=='3'||n=='4'||n=='5'))
    {
      printf("请输入你的选项(0-5):");
      scanf("%s",&n);
    }
    system("CLS");
    switch(n)
    {
    case '0':{
      printf("/n/t/t感谢您的使用!/n");
      return 0;
         }
    case '1':{
      if(CreateNode())
        printf("通讯录建立成功!/n");
      else
        printf("通讯录已建立,无需重复建立!/n");
      break;
         }
    case '2':{
      if(InsertNode())
        printf("添加成功!/n");
      else
        printf("添加失败,请先创建通讯录!/n");
      break;
         }
    case '3':{
      if(SearchNode())
        printf("/n");
      else
        printf("查找失败,请先创建通讯录!/n");
      break;
         }
    case '4':{
      if(DeletNode())
        printf("/n");
      else
        printf("删除失败,请先创建通讯录!/n");
      break;
         }
    case '5':{
      if(PrintNode())
        printf("/n以上是全部联系人信息./n");
      else
        printf("ERROR,请先创建通讯录!/n");

      break;
         }
    default:{printf("输入不符合要求!");}
    }
    printf("/n/n");
    printf("/t/t     通讯录/t/n");
    printf("/t/t|————————————————|/n");
    printf("/t/t|                |/n");
    printf("/t/t| [1] 建立通讯录         |/n");
    printf("/t/t| [2] 插入联系人的姓名      |/n");
    printf("/t/t| [3] 查找联系人的姓名      |/n");
    printf("/t/t| [4] 删除联系人的姓名      |/n");
    printf("/t/t| [5] 输出所有联系人信息     |/n");
    printf("/t/t| [0] 退出            |/n");
    printf("/t/t|                |/n");
    printf("/t/t| 如未建立新表,请先建立!    |/n");
    printf("/t/t|                |/n");
    printf("/t/t|————————————————|/n");
    printf("/n");
  }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

01-28 10:23
查看更多