数据结构课程设计之通讯录管理系统

这是一个数据结构课程设计项目,基于C语言实现,针对原有的基础版进行了加强。系统已能成功处理文件,实现了保存功能。同时,新增了按姓名、电话号码和编号进行查询及删除的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构的第二个课程设计,在c语言课程设计的基础上加以改进,(加强版),保存一下代码,对文件的处理,还是有一点一问题,还有待改进

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>/*屏幕操作函数库*/
struct node
{
    int num; //编号
    char name[10];//姓名
    char addr[20];//地址
    char telenum[20];//电话号码
};
typedef node telebook;
struct Lnode
{
    telebook data;
    Lnode *next;
};
typedef Lnode Link;
Link *L;//创建头节点

void Find_Num(Link *L);
void Find_Name(Link *L);
void Find_Tel(Link *L);
void DestoryLink(Link *L);

Link *CreatLink(Link* L)//创建
{
    Link *q,*p;
    FILE *fp;
    char flag='y';
    int i=0;
    L=(Link *)malloc(sizeof(Link)); //创建头节点
    q=L;//尾指针指向头指针
    if((fp=fopen("telebook.txt","ab+"))==NULL)/* 若读写打开二进制文件telebook.txt失败,则显示出错信息 */
        {
            printf("打开文件有误!");
            exit(0);
        }
    while(flag=='y')
    {
        p=(Link *)malloc(sizeof(Link));
        printf("录入信息:\n");
        printf("编号:\n");
        scanf("%d",&p->data.num);
        printf("姓名:\n");
        scanf("%s",p->data.name);
        printf("地址:\n");
        scanf("%s",p->data.addr);
        printf("电话号码:\n");
        scanf("%s",p->data.telenum);
        q->next=p;
        q=p;
        printf("继续添加?(y/n)\n");
        scanf("%s",&flag);
        while(flag!='y'&&flag!='n')
        {
            printf("输入错误,请重新输入\n");
            scanf("%s",&flag);
            i++;
            if(i>2)
                break;
        }
    }
    fwrite(q,sizeof(Link),1,fp);
    fclose(fp);
    q->next=NULL;
    return L;
}

void InsertLink(Link *L)//插入
{
   Link *q,*p;
   q=L;
   int j=0,i;
   printf("输入要插入的位置:\n");
   scanf("%d",&i);
   while(j<i-1&&q->next!=NULL)//查找第i-1个元素
   {
       j++;
       q=q->next;
   }
   if(q==NULL)//没有找到第i-1个元素
    printf("没有找到要插入的位置!\n");
   else
   {
       p=(Link *)malloc(sizeof(Link));
       printf("输入要插入的信息:\n");
       printf("编号:\n");
       scanf("%d",&p->data.num);
       printf("姓名:\n");
       scanf("%s",p->data.name);
       printf("地址:\n");
       scanf("%s",p->data.addr);
       printf("电话号码:\n");
       scanf("%s",p->data.telenum);
       p->next=q->next;
       q->next=p;
       printf("插入成功!\n");
   }
}

void PrintLink(Link *L)//显示
{
    Link *p;
    p=L;
    if(p==NULL||p->next==NULL) //链表为空
    printf("您的操作有误,请确保您的通讯录不为空!\n");
    else
    {
        p=L->next;
        while(p!=NULL)
        {
            printf("|  编号   |   姓名    |   电话号码     |     地址       |\n");
            printf("|---------|-----------|----------------|--------------
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值