C 小型通讯录

本文介绍了一个基于链表的通讯录程序设计,包括添加、修改、删除、查询和显示联系人信息的功能实现。程序使用C语言编写,通过菜单引导用户进行操作,实现了基本的数据管理和查询需求。
  1. 内容描述:
    编写一个实用的小型通讯录程序,在链表程序的基础上增加查询功能。要求使用文件进行存取。
  2. 设计要求:
    a:建立文件
    b:文件的存取和显示
    c:删除记录
    d:查询记录

1.系统流程图
在这里插入图片描述
2.查询函数流程图
在这里插入图片描述

四、程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list{
    struct list *next;
    char name[30];//用户名称
    char addr[50];//地址
    char num[8];//号码 
}user;
 
void insert(user *h);
void edit(user *h);
void del(user *h);
void S_byName(user *h);
void S_byNum(user *h);
void display(user *h);
 
int main()
{
    int flag;
    user *head=(user *)malloc(sizeof(user));
    head->next=NULL;
    while(1)
    {
        printf("通讯录目录系统\n");
        printf("    1、添加新电话用户信息\n");
        printf("    2、修改电话用户信息\n");
        printf("    3、删除已有电话用户信息\n");
        printf("    4、根据用户名查询电话信息\n");
        printf("    5、根据电话号码查询用户信息\n");
        printf("    6、显示全部用户信息\n");
        printf("    7、退出\n");
        printf("请选择:");
        scanf("%d",&flag);
        if(flag==1)
            insert(head);
        else if(flag==2)
            edit(head);
        else if(flag==3)
            del(head);
        else if(flag==4)
            S_byName(head);
        else if(flag==5)
               S_byNum(head);
          else if(flag==6)
            display(head);
        else if(flag==7)
            return 0;
        else
            printf("输入有误,请重新选择!\n");
    }
}
void insert(user *h)
{
    user *p=(user *)malloc(sizeof(user));
    p->next=h->next;
    h->next=p;
    printf("请输入新增用户名称(最多30个字):");
    scanf("%s",p->name);
    printf("请输入新增用户的家庭住址(最多50字):");
    scanf("%s",p->addr);
    printf("请输入新增用户的电话号码(8位数):");
    scanf("%s",p->num);
    printf("新用户记录成功添加:%s  %s  %s\n\n",p->name,p->addr,p->num);
}
void edit(user *h)
{
    char name[30];
    int flag=0;
    user *lh=h->next;
    printf("输入要修改用户的名称:");
    scanf("%s",name);
    while(lh)
    {
        if(strcmp(name,lh->name)==0)
        {
            flag=1;
            printf("请输入新的名称(30字以内):");
            scanf("%s",lh->name);
            printf("请输入新的地址(50字以内):");
            scanf("%s",lh->addr);
            printf("请输入新的号码(8位):");
            scanf("%s",lh->num); 
            printf("用户记录修改成功:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
            break;
        }
        lh=lh->next;
    }
    if(!flag)
        printf("不存在这样的用户\n\n");
}
void S_byName(user *h)
{
    char name[30];
    int flag=0;
    user *lh=h->next;
    printf("输入要查找的用户名称:");
    scanf("%s",name);
    while(lh)
    {
        if(strcmp(name,lh->name)==0)
        {
            flag=1;
            printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
            break;
        }
        lh=lh->next;
    }
    if(!flag)
        printf("用户名不存在\n\n");
}
void S_byNum(user *h)
{
    char num[30];
    int flag=0;
    user *lh=h->next;
    printf("输入要查找的电话号码:");
    scanf("%s",num);
    while(lh)
    {
        if(strcmp(num,lh->num)==0)
        {
            flag=1;
            printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
            break;
        }
        lh=lh->next;
    }
    if(!flag)
        printf("找不到匹配的号码\n\n");
}
void display(user *h)
{
    user *lh=h->next;
    int i=1;
    while(lh)
    {
        printf("第%d条用户信息:%s  %s  %s\n",i,lh->name,lh->addr,lh->num);
        lh=lh->next;
        i++;
    }
    printf("\n");
}
void del(user *h)
{
    char name[30];
    int flag=0;
    user *lh=h;
    printf("输入要删除的用户名称:");
    scanf("%s",name);
    while(lh->next)
    {
        if(strcmp(name,lh->next->name)==0)
        {
            flag=1;
            printf("删除用户成功:%s  %s  %s\n\n",lh->next->name,lh->next->addr,lh->next->num);
            lh->next=lh->next->next;
            break;
        }
        lh=lh->next;
    }
    if(!flag)
        printf("用户名不存在\n\n");
}

运行:
菜单:
在这里插入图片描述

  1. 添加
    在这里插入图片描述
  2. 显示
    在这里插入图片描述
  3. 修改
    在这里插入图片描述
  4. 查询
    在这里插入图片描述
  5. 删除
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值