数据结构课设:简单的通讯录系统设计
这两天数据结构课设,本人选题为:简单的通讯录系统设计,选题非常简单,但在做的过程中深感基础不牢,
链表的基本操作也不是太熟悉。不过还是终于完成了, 参考了这位前辈的博客,链接在此
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE //具体个人信息
{
char bianhao[10];
char name[10];
char phone[15];
} Datatype;
typedef struct node //节点
{
Datatype d;
struct node *next;
} Linknode;
typedef Linknode *LinkList;
void creat(LinkList &l, int m) //创建链表
{
LinkList r, s;
Datatype dk;
l = (LinkList)malloc(sizeof(Linknode));
l->next = NULL;
r = l;
for (int i = 0; i < m; i++)
{
s = (LinkList)malloc(sizeof(Linknode));
printf("请输入你第%d位的信息:\n", i + 1);
printf("请依次输入编号、姓名、电话:\n");
scanf("%s", dk.bianhao);
scanf("%s", dk.name);
scanf("%s", dk.phone);
s->d = dk;
s->next = NULL;
r->next = s;
r = s;
}
}
int Listlength(LinkList l) //测链表长度
{
int j = 0;
LinkList p = l->next;
while (p)
{
j++;
p = p->next;
}
return j;
}
int LinkInsert(LinkList &l, int i, Datatype d) //插入节点信息
{
LinkList p, s;
int j = 1;
p = l->next;
int length = Listlength(l);
if (!p || i > length + 1)
return 0;
while (p && j < i - 1)
{
p = p->next;
j++;
}
s = (LinkList)malloc(sizeof(Linknode));
s->d = d;
s->next = p->next;
p->next = s;
return 1;
}
int LinkDelete(LinkList &l, int i) //删除节点信息
{
LinkList p, q;
int j = 0;
p = l;
int length = Listlength(l);
if (!p || i > length)
return 0;
while (p && j < i - 1)
{
p = p->next;
j++;
}
q = p->next;
printf("要删除人的具体信息为:\n");
printf("编号:%s\t姓名:%s\t电话:%s\n", q->d.bianhao, q->d.name, q->d.phone);
p->next = q->next;
return 1;
}
int Getlem(LinkList l, int i) //查询某个人的信息
{
int j = 1;
LinkList p = l->next;
int length = Listlength(l);
if (!p || i > length)
return 0;
while (j < i)
{
p = p->next;
j++;
}
printf("要查人的具体信息为:\n");
printf("编号:%s\t姓名:%s\t电话:%s\n", p->d.bianhao, p->d.name, p->d.phone);
return 1;
}
void print(LinkList l) //输出所有信息
{
LinkList p = l->next;
while (p)
{
printf("编号:%s\t姓名:%s\t电话:%s\n", p->d.bianhao, p->d.name, p->d.phone);
p = p->next;
}
}
int main()
{
LinkList l;
int n, locate, m;
Datatype dk;
int w;
printf("欢迎进入通讯录管理系统!\n");
printf("************建立通讯录请按1************\n");
printf("************插入信息请按2************\n");
printf("************查询信息请按3************\n");
printf("************删除信息请按4************\n");
printf("************输出信息请按5************\n");
printf("************退出系统请按0************\n");
p:
scanf("%d", &n);
switch (n)
{
case /* constant-expression */ 1:
/* code */
printf("请问你要建立有多少个人的通讯录\n");
scanf("%d", &m);
creat(l, m);
printf("请问你接下来要进行的操作是\n");
goto p;
case 2:
printf("请问你要在第几位插入:\n");
scanf("%d", &locate);
printf("请输入插入人的具体信息:\n");
printf("依次输入编号、姓名、电话:\n");
scanf("%s", dk.bianhao);
scanf("%s", dk.name);
scanf("%s", dk.phone);
LinkInsert(l, locate, dk);
printf("请问你接下来要进行的操作是\n");
goto p;
case 3:
printf("请问你要查询第几位的信息\n");
scanf("%d", &locate);
Getlem(l, locate);
printf("请问你接下来要进行的操作是\n");
goto p;
case 4:
printf("请问你要删除第几位的信息\n");
scanf("%d", &locate);
LinkDelete(l, locate);
printf("请问你接下来要进行的操作是\n");
goto p;
case 5:
print(l);
printf("请问你接下来要进行的操作是\n");
goto p;
case 0:
printf("成功退出系统!\n");
exit(0);
default:
printf("操作错误,请重新输入!\n");
goto p;
}
return 0;
}