首页 > 编程知识 正文

c语言管理系统链表文件(c语言通讯录管理系统PPT)

时间:2023-05-04 15:23:15 阅读:68891 作者:498

通讯录管理系统是链表的常用应用,也是我们必须要掌握的一个用链表实现的小项目制作。
下面来看代码

#include <stdio.h>#include <stdlib.h>typedef struct //定义每个人员信息结构体 {char num[5]; //编号 char name[9];//姓名 char sex[3]; //性别 char phone[13]; //电话 char addr[31]; //地址 }DataType; typedef struct node //定义链表类型 { DataType data; //数据域 struct node *next; //指针域 }ListNode;typedef ListNode *LinkList;void CreateList(LinkList &L,int m)//通讯录链表的建立 { int i; LinkList s,r; L=(LinkList)malloc(sizeof(ListNode)); L->next=NULL; r=L; //尾节点 for(i=0;i<m;i++) { s=(LinkList)malloc(sizeof(ListNode)); //新建的节点 printf("输入第%d位编号:",i+1); scanf("%s",&s->data.num); printf("n输入姓名:"); scanf("%s",&s->data.name); printf("n输入性别:"); scanf("%s",&s->data.sex); printf("n输入电话:"); scanf("%s",&s->data.phone); printf("n输入地址:"); scanf("%s",&s->data.addr); s->next=NULL; r->next=s; //插入尾节点之后 r=s; }}int ListLength(LinkList L) //求通讯录链表的长度 { LinkList p; int length=0; p=L->next; while(p) { length++; p=p->next; } return length; } int ListInsert(LinkList &L,int i,DataType d) //通讯录链表的插入 { LinkList p,s; int length; length=ListLength(L); p=L->next; int j=1; if(!p||i>length+1) //如果是空表或者查询位置不符合要求 return 0; while(p&&j<i-1) //使p指向要添加位置的前一个元素 { p=p->next; j++; } s=(LinkList)malloc(sizeof(LinkList)); s->data=d; s->next=p->next; p->next=s; return 1; }int ListDelete(LinkList &L,int i){ LinkList p,q;//p为要删除的前一个节点,q为要删除的节点 p=L; int j=0; int length; length=ListLength(L); if(!p||i>length) //如果是空表或者查询位置不符合要求 return 0; while(p&&j<i-1) //使p指向要删除位置的前一个元素 { p=p->next; j++; } q=p->next; //q指向后一个元素 printf("n被删除的人员信息为:n"); printf("n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",q->data.num,q->data.name,q->data.sex,q->data.phone,q->data.addr); p->next=q->next; return 1; } int GetElem(LinkList L,int i,DataType &d) //查询第i个成员信息 { LinkList p; p=L->next; int j=1; int length; length=ListLength(L); if(!p||i>length) //如果是空表或者查询位置不符合要求 return 0; while(j<i) {p=p->next; j++; } d=p->data; return 1;}void print(LinkList L) //打印通讯录人员信息 { LinkList p; p=L->next; while(p) { printf("n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr); p=p->next; } } void menu() { printf("--------------------------------------------1.通讯录链表的建立----------------------------------------------------------"); printf("n--------------------------------------------2.通讯者节点的插入----------------------------------------------------------"); printf("n--------------------------------------------3.通讯者节点的查询----------------------------------------------------------"); printf("n--------------------------------------------4.通讯者节点的删除----------------------------------------------------------"); printf("n--------------------------------------------5.通讯录链表的输出----------------------------------------------------------"); printf("n--------------------------------------------0.退出管理系统--------------------------------------------------------------"); } int main() { LinkList L; DataType d,d1; int m,location,length,choose; menu(); p: printf("n请输入你的选项:"); scanf("%d",&choose); switch(choose) { case 1:printf("请输入通讯录人数:");scanf("%d",&m);CreateList(L,m);goto p; case 2:printf("n输入要插入的位置:");scanf("%d",&location);printf("输入插入人员的编号:"); scanf("%s",&d.num);printf("n输入姓名:"); scanf("%s",&d.name); printf("n输入性别:");scanf("%s",&d.sex);printf("n输入电话:");scanf("%s",&d.phone);printf("n输入地址:");scanf("%s",&d.addr);ListInsert(L,location,d);goto p; case 3:printf("n请输入查询位置");scanf("%d",&location);GetElem(L,location,d); printf("查询到的人员信息为:n");printf("n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",d.num,d.name,d.sex,d.phone,d.addr);goto p; case 4:printf("n输入要删除的位置:");scanf("%d",&location);ListDelete(L,location);goto p; case 5:print(L);goto p; case 0:printf("系统已退出。");exit(0); default:printf("输入错误,请重新输入");goto p; } return 0; }

下面是运行结果图

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。