通讯薄管理过程和代码

通讯薄管理 要求:(1)依次输入通讯薄的编号,用户名和电话号码,并生成一个.txt文本文件。
(2)可添加和删除通讯薄中的内容。
(3)可以修改通讯薄中某个用户的用户名或电话号码。
要过程和代码

通讯录管理运行结果:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct StNode
{
    char num[12];  //编号
    char name[20];  //用户名
    char phone[40];  //电话号码
    StNode* next;
};

const char* filename = "record.txt";

//读文件
struct StNode* ReadFile()
{
    struct StNode* head = 0;
    struct StNode* p, * t=0;
    FILE* fp = fopen(filename, "r");
    if (fp == 0)
    {
        printf("文件打开失败\n");
        return head;
    }
    while (!feof(fp))
    {
        p = (struct StNode*)malloc(sizeof(struct StNode));
        p->next = 0;
        p->num[0] = 0;
        p->name[0] = 0;
        p->phone[0] = 0;
        fscanf(fp, "%s %s %s", p->num, p->name, p->phone);
        if (strlen(p->phone) > 0) //
        {
            if (head == 0)
            {
                head = p;
                t = p;
            }
            else
            {
                t->next = p;
                t = p;
            }
        }
        else
            free(p);
        
    }
    fclose(fp);
    return head;
}

//写文件
void WriteFile(struct StNode* head)
{
    struct StNode* p=0;
    FILE* fp = fopen(filename, "w");
    p = head;
    while (p)
    {
        fprintf(fp, "%s %s %s\n", p->num, p->name, p->phone);
        p = p->next;
    }
    fclose(fp);
    fp = 0;
}

//录入信息
struct StNode* Input(struct StNode* head)
{
    struct StNode* p, * node, * t;
    system("cls");
    node = (struct StNode*)malloc(sizeof(struct StNode));

    printf("请输入编号:");
    scanf("%s", node->num);
    printf("请输入姓名:");
    scanf("%s", node->name);
    //录入信息
    printf("请输入手机号:");
    scanf("%s", node->phone);

    //判断输入的手机号是否已经存在
    t = head;
    while (t)
    {
        if (strcmp(t->phone, node->phone) == 0)
        {
            printf("该号码已存在,请重新输入:");
            scanf("%s", node->phone);
            t = head;
        }
        else
            t = t->next;
    }

    node->next = 0;
    if (head == 0)
    {
        head = node;
    }
    else
    {
        p = head;
        while (p->next)
            p = p->next;
        //新建节点
        p->next = node;
    }

    //写入文件
    WriteFile(head);
    system("pause");
    return head;
}
//显示所有手机信息
void showAll(struct StNode* head)
{
    struct StNode* p;
    int i = 1;
    system("cls");
    p = head;
    while (p)
    {
        printf("编号:%s\n", p->num);
        printf("姓名:%s\n", p->name);
        printf("手机号:%s\n",p->phone);
        i++;
        p = p->next;
    }
    system("pause");
}

//删除信息
struct StNode* Del(struct StNode* head)
{
    char tmp[40] = { 0 };
    struct StNode* p, * t;
    p = head;
    printf("请输入需要删除的手机号或者姓名:");
    scanf("%s", tmp);

    if (strcmp(head->name, tmp) == 0 || strcmp(head->phone, tmp) == 0)
    {
        p = head->next;
        free(head);
        head = p;
        return head;
    }
    p = head;
    t = head->next;
    while (t)
    {
        if (strcmp(t->name, tmp) == 0 || strcmp(t->phone, tmp) == 0)
        {
            printf("删除人员信息为:\n");
            printf("编号:%s\n", t->num);
            printf("姓名:%s\n", t->name);
            printf("手机号:%s\n", t->phone);
            p->next = t->next;
            free(t);
            break;
        }
    }
    system("pause");
    return head;
}


//查询信息
int Find(struct StNode* head)
{
    int flag = 0;
    struct StNode* p = head;
    char name[40] = { 0 };
    system("cls");
    printf("请输入手机号或者姓名或编号:");
    scanf("%s", &name);
    while (p)
    {
        if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0) || (strcmp(p->phone, name) == 0))
        {
            printf("编号:%s\n", p->num);
            printf("姓名:%s\n", p->name);
            printf("手机号:%s\n", p->phone);
            flag++;
        }
        p = p->next;
    }
    if (flag == 0)
        printf("查无此人\n");
    return flag;
}


//修改手机信息
void ModInfo(struct StNode* head)
{
    int nmb = 0, i, j;
    struct StNode* p = head;
    struct StNode* arr[30];
    char name[40] = { 0 };
    system("cls");
    printf("请输入手机号或者姓名:");
    scanf("%s", &name);
    while (p)
    {
        if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0))
        {
            printf("编号:%s\n", p->num);
            printf("姓名:%s\n", p->name);
            printf("手机号:%s\n", p->phone);
            arr[nmb] = p;
            nmb++;
        }
        p = p->next;
    }
    if (nmb == 0)
        printf("查无此人\n");

    while (nmb != 1)
    {
        j = 0;
        printf("存在多条信息,请输入更多信息:");
        scanf("%s", name);
        for (i = 0; i < nmb; i++)
        {
            p = arr[i];
            if ((strcmp(p->name, name) == 0) || (strcmp(p->num, name) == 0) )
            {
                arr[j++] = p;
            }
        }
        nmb = j;
        if (nmb == 0)
        {
            printf("查无此人\n");
            system("pause");
            return;
        }
    }
    //
    printf("请输入姓名:");
    scanf("%s", arr[0]->name);
    printf("请输入手机号:");
    scanf("%s", arr[0]->phone);
    printf("修改完成");
    system("pause");
}
int main()
{
    struct StNode* head = 0;
    int opt = 0;
    int bgo = 1;
    head = ReadFile();
    while (bgo)
    {
        system("cls");
        printf("-------------------通讯薄管理----------------|\n");
        printf("|   1.录入手机信息                           |\n");
        printf("|   2.显示所有手机信息                       |\n");
        printf("|   3.手机信息查询                           |\n");
        printf("|   4.手机信息修改                           |\n");
        printf("|   5.删除信息                               |\n");
        printf("|   0.退出系统                               |\n");
        printf("----------------------------------------------\n");
        scanf("%d", &opt);
        switch (opt)
        {
        case 0:
            bgo = 0;
            break;
        case 1:
            head = Input(head);
            break;
        case 2:
            showAll(head);
            break;
        case 3:
            Find(head);
            system("pause");
            break;
        case 4:
            ModInfo(head);
            break;
        case 5:
            head = Del(head);
            break;
        }
    }
    return 0;
}


#include <stdio.h>
#include <string.h>
typedef struct _book
{
    int id;
    char name[20];
    char tel[20];
}book;

int readBooks(book *books)
{
    int n=0;
    FILE *fp = fopen("C:\\books.txt","r");
    if(fp == NULL)
        return 0;
    char buf[1000];
    while(fgets(buf,1000,fp) != NULL)
    {
        sscanf(buf,"%d %s %s",&books[n].id,books[n].name,books[n].tel);
        n++;
    }
    fclose(fp);
    return n;
}

void saveBooks(book *books,int n)
{
    FILE *fp = fopen("C:\\books.txt","w");
    for(int i=0;i<n;i++)
    {
        fprintf(fp,"%d %s %s\n",books[i].id,books[i].name,books[i].tel);
    }
    fclose(fp);
}

void showBooks(book *books,int n)
{
    printf("%-10s%-22s%-15s\n","编号","姓名","电话");
    for(int i=0;i<n;i++)
    {
        printf("%-10d%-22s%-15s\n",books[i].id,books[i].name,books[i].tel);
    }
}

int addBooks(book *books,int n)
{
    while(1)
    {
        printf("请输入要增加的联系人编号、姓名和电话:\n");
        scanf("%d %s %s",&books[n].id,books[n].name,books[n].tel);
        n++;
        getchar();
        printf("是否继续增加:(Y/N):");
        char ch = getchar();
        if(ch == 'N')
            break;
    }
    showBooks(books,n);
    return n;
}

int delBooks(book *books,int n)
{
    char name[20];
    printf("请输入要删除的联系人姓名:");
    scanf("%s",name);
    int i=0;
    for(i=0;i<n;i++)
    {
        if(strcmp(name,books[i].name) == 0)
        {
            for(int j=i;j<n-1;j++)
                books[j] = books[j+1];
            break;
        }
    }
    if(i<n)
    {
        n--;
        showBooks(books,n);
    }
    else
        printf("查无此人");
    return n;
}

void updateBooks(book *books,int n)
{
    char name[20];
    printf("请输入要修改的联系人姓名:");
    scanf("%s",name);
    int i=0;
    for(i=0;i<n;i++)
    {
        if(strcmp(name,books[i].name) == 0)
            break;
    }
    if(i==n)
    {
        printf("没有这个人");
        return;
    }
    printf("请输入要修改的联系人编号、姓名和电话:\n");
    scanf("%d %s %s",&books[i].id,books[i].name,books[i].tel);
    showBooks(books,n);
}

int main()
{
    book books[1000];
    int n=readBooks(books);
    n = addBooks(books,n);
    n = delBooks(books,n);
    updateBooks(books,n);
    saveBooks(books,n);
}
 

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632