📄 新建 文本文档.txt
字号:
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<conio.h>
#include<string.h>
typedef int ElemType; //元素类型
typedef struct LNode
{
ElemType num;
char name[100];
ElemType telnum;
char address[100];
struct LNode *next;
}LNode, *LinkList;
void wait()
{
printf("\n\n按任意键继续\n");
getch();
}
void print(LinkList &head)
{//6.输出通讯录信息
LNode *p;
printf("\n现有的通讯录数据为:\n");
p=head->next; //head头节点
if(!p)
printf("通讯录链表为空。");
while(p)
{
printf("%d ",p->num);
printf("%s ",p->name);
printf("%d ",p->telnum);
printf("%s\n",p->address);
p=p->next;
}
}
LNode *InsertNode(LinkList &head,LNode *p)
{//2.通讯录插入操作
LNode *p1,*p2,*p3;
p1=head->next;
p2=p3=head;
while(p1)
{
if(p1->num>p->num)
{
p2->next = p;
p->next = p1;
break;
}
else if(p1->num<p->num)
{
p1=p1->next;
p2=p2->next;
}
else if(p1->num==p->num)
{
printf("\n该学号已存在!\n");
return head;
}
}
if(p1==NULL)
{
p2->next=p;
p->next=p1;
}
return head;
}
LNode *orderlist()
{//1.利用2这个函数建立通讯录链表
LNode *head,*p;
printf("\n请输入数据(以0为结束标志):\n");
head=(LNode *)malloc(sizeof(LNode));
p=(LNode *)malloc(sizeof(LNode));
head->next=NULL;
scanf("%d",&p->num);
scanf("%s",&p->name);
scanf("%d",&p->telnum);
scanf("%s",&p->address);
while(p->num!=0)
{
head=InsertNode(head,p);
p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->num);
scanf("%s",&p->name);
scanf("%d",&p->telnum);
scanf("%s",&p->address);
}
return head;
}
LNode *SearchNode1(LinkList &head,int num)
{//3-1.学号查找方式。查找学号等于num的节点
LNode *p1,*p2;
if(head->next == NULL) //首先判断是否非空链表
{
printf("通讯录为空\n");
return NULL;
}
p1 = head->next;
while(num > p1->num&&p1->next != NULL) //在链表中查找该num
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{//找到后
printf("\n该学生的信息为:\n");
printf("%d ",p1->num);
printf("%s ",p1->name);
printf("%d ",p1->telnum);
printf("%s\n",p1->address);
return p1;
}
else
{
printf("\n查无此人!\n"); //未找到
return NULL;
}
}
void SearchNode2(LinkList &head,char name[])
{//3-2.姓名查找方式。查找姓名等于name的节点
LNode *p1,*p2;
int f = 0,nf = 0;
if(head->next == NULL) //首先判断是否非空链表
{
printf("通讯录为空\n");
nf = 1;
}
if(nf == 0)
{
p1 = head->next;
while(p1 != NULL) //在链表中查找该name
{
if(strcmp(name,p1->name) == 0)
{//找到后
printf("\n该学生的信息为:\n");
printf("%d ",p1->num);
printf("%s ",p1->name);
printf("%d ",p1->telnum);
printf("%s\n",p1->address);
f = 1;
}
p2 = p1;
p1 = p1->next;
}
if(f == 0)
{
printf("\n查无此人!\n"); //未找到
}
}
}
void DelNode1(LinkList &head,int num)
{//4-1. 学号查找方式删除
LNode *p1,*p2;
p1 = head->next;
while(num != p1->num&&p1->next != NULL) //在链表中查找该num
{
p2 = p1;
p1 = p1->next;
}
p1 = SearchNode1(head,num);
if(p1 != NULL)
{
if(p1 == head->next)
head->next = p1->next;
else
p2->next = p1->next;
free(p1);//删除操作
printf("\n删除完毕!\n");
}
}
void DelNode2(LinkList &head,char name[])
{//4-2. 姓名查找方式删除
LNode *p1,*p2;
int nf = 0;
SearchNode2(head,name);
if(head->next == NULL) //首先判断是否非空链表
{
nf = 1;
}
if(nf == 0)
{
p2 = p1 = head->next;
while(p1 != NULL ) //在链表中查找该name
{
if(strcmp(name,p1->name) == 0)
{//找到后
if(p1 == head->next)
head->next = p1->next;
else
{
p2->next = p1->next;
}
printf("\n删除完毕!\n");
}
p2 = p1;
p1 = p1->next;
}
}
}
int main()
{
LNode *L,*p;
int i,f=0,c,n,choice;
char name[100];
while(1)
{
system("cls");
printf("\t 2.1 通讯录管理系统\n");
printf("\t 作者:王有燕\n");
for (i = 1; i <= 60; i++)
printf("=");
printf("\n");
printf("\t 1.通讯录链表的建立\n");
printf("\t 2.通讯者结点的插入\n");
printf("\t 3.通讯者结点的查询\n");
printf("\t 4.通讯者结点的删除\n");
printf("\t 5.通讯录链表的输出\n");
printf("\t 0.退出管理系统\n");
for (i = 1; i <= 60; i++)
printf("=");
printf("\n请选择:");
scanf("%d",&choice);
switch (choice)
{
case 1:
{
system("cls");
printf("------------通讯录输入建立---------------");
printf("\n说明:\n");
printf("格式:学号 姓名 电话号码 地址\n");
printf("\n结束标志:0 0 0 0\n");
printf("\n请输入学生数据(包括学号和姓名):\n");
L=orderlist();
f=1;
wait();
break;
}
case 2:
{
system("cls");
if(f)
{
printf("--------------通讯录插入操作----------------\n");
printf("\n请输入要插入的元素的信息\n");
p = (LNode *)malloc(sizeof(LNode));
scanf("%d",&p->num);
scanf("%s",&p->name);
scanf("%d",&p->telnum);
scanf("%s",&p->address);
L = InsertNode(L,p);
}
else
printf("请先选择1输入数据。");
wait();
break;
}
case 3:
{
system("cls");
if(f)
{
printf("请选择查找方式:(1.学号查找 2.姓名查找)\n");
scanf("%d",&c);
if(c == 1)
{
printf("\n请输入要查询的学生学号:");
scanf("%d",&n);
SearchNode1(L,n);
}
if(c == 2)
{
printf("\n请输入要查询的学生姓名:");
scanf("%s",&name);
SearchNode2(L,name);
}
if(c != 1&&c != 2)
printf("\n输入错误!\n");
}
else
printf("请先选择1输入数据。");
wait();
break;
}
case 4:
{
system("cls");
if(f)
{
printf("请选择查找删除方式:(1.学号查找删除 2.姓名查找删除)\n");
scanf("%d",&c);
if(c == 1)
{
printf("\n请输入要删除的学生学号:");
scanf("%d",&n);
DelNode1(L,n);
}
if(c == 2)
{
printf("\n请输入要删除的学生姓名:");
scanf("%s",&name);
DelNode2(L,name);
}
if(c != 1&&c != 2)
printf("\n输入错误!\n");
}
else
printf("请先选择1输入数据。");
wait();
break;
}
case 5:
{
system("cls");
if(f)
print(L);
else
printf("请选择1输入数据");
wait();
break;
}
case 0:
{
exit(0);
break;
}
default:
{
printf("\n无此选项");
wait();
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -