通讯录(链表)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node
{
    char name[21];   // 名字 最长可以输入20个字符 最后1位作后面的越界检查用
    char phone[12];  // 电话 同上
    char address[31];  // 多余的 
    struct node *next;
};

typedef struct node Node;
typedef Node * Link;

int dispaly1();                // 外文件函数声明

void creat_head(Link *);       //创建带表头的单向链表
void creat_node(Link *);       //创建新的结点
void mode_choose(Link head);   //模式选择 增删查改 显示 退出
void insert_name(Link);        // 增 先输入姓名
void insert_num(Link);         //先输入电话
void insert_sort(Link,Link);   //链表插入结点 同时排序
void search_name(Link,int);    //按姓名查找
void search_num(Link,int);     //按电话查找
void display(Link);            //显示
void release(Link *);          //释放链表
int mygets(char *,int);        //从键盘输入字符串
int check_name(char *);        //按照姓名查 
int check_num(char *);         //按照电话查    //删和改建立在查的基础上

int main()
{
    Link head;

    creat_head(&head);

    mode_choose(head);

    release(&head);

    return 0;
}

void creat_head(Link * head)    //创建一个带表头结点的链表
{
    creat_node(head);
}

void creat_node(Link * new_node)  //创建一个新的结点 并将该结点的指针域指向空
{
    *new_node = (Link)malloc(sizeof(Node));
    (*new_node)->next = NULL;
}


void mode_choose(Link head)
{
    char Mode[2]="1",mode1[2],mode2[2],mode3[2],mode4[2];

    while(1)
    {
        if(Mode[0] != '5')   // 选择模式前现清屏 显示时不能清屏
        {
            display1();
        }
        printf("选择模式:");
        while(mygets(Mode,2)); //从键盘读入只有一个字符的字符串

        switch(Mode[0])
        {
            case '1':    printf("<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n");
                         printf("<<<   插入: 1 先输入姓名    2 先输入电话    3 退出此模式    >>>\n");
                         printf("<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n");

                         while(1)
                         {
                             printf("选择子模式:");
                             while(mygets(mode1,2));
                             printf("><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><\n");
                             
                             switch(mode1[0])
                             {
                                 case '1':insert_name(head);break;    //先输入姓名
                                 case '2':insert_num(head);break;     //先电话
                                 case '3':break;
                                 default :printf("输入错误!");break; //提示
                             }

                             if(mode1[0] == '3')  //跳出死循环
                             {
                                 break;
                             }
                         }
                         break;

            case '2':    printf("><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><\n");
                         printf("<<<   查找: 1 按姓名查找   2 按电话查找     3 退出此模式    >>>\n");
                         printf("><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><\n");

                         while(1)
                         {
                             printf("选择子模式:");
                             while(mygets(mode2,2));
                             printf("><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><\n");

                             switch(mode2[0])
                             {
                                 case '1':search_name(head,1);break; //按名字查找  参数1 为查找
                                 case '2':search_num(head,1);break;  //按电话查找
             
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值