📄 mingdan.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//元素结点
typedef struct NODE
{
char name[10];
int num;
NODE *next;
}NODE;
//插入
NODE *insert(NODE *class1,NODE *node)
{
NODE *p,*q;//临时变量
p=q=class1;
if(!(p->next)) //处理第一个元素的插入
{
p->next=node;
node->next=NULL;
return class1;
}
else if(p->next)
{
p=p->next;
while(node->num>p->num) //将指针移至适当位置
{
p=p->next;
q=q->next; //q始终在p之前的一个位置
if(!p)
{
q->next=node;
node->next=NULL;
return class1;
}
}
node->next=q->next; //头插法
q->next=node;
return class1;
}
return class1;
}
//建立通讯录
NODE *CreatTXL()
{
NODE *class1; //通讯录的头指针
int i=1; //计数器
class1=(NODE *)malloc(sizeof(NODE));
class1->num=0; //人数
strcpy(class1->name,"class1");//班级名
class1->next=NULL;
printf("\n请输入每个同学的学号和姓名,如果创建完成,在学号一栏输入-1:");
for(;;i++)
{
NODE *node;
node=(NODE *)malloc(sizeof(NODE));
node->next=NULL;
printf("\n第%d次输入:\n",i);
printf("学号:");
scanf("%d",&(node->num));
if(node->num==-1)
{
printf("\n通讯表创建完毕\n");
break;
}
printf("姓名:");
scanf("%s",node->name);
class1=insert(class1,node);
(class1->num)++; //人数加一
}
printf("\n");
return class1;
}
//按学号查询
NODE *SearchNum(NODE *class1,int num)
{
NODE *p;
p=class1;
if(!p->next)
{
printf("还未有任何信息!\n\n");
return p;
}
p=p->next;
while(p)
{
if(p->num==num)
{
printf("\n该学生信息为:\n");
printf("学号:%d\n",p->num);
printf("姓名:%s\n\n",p->name);
return p;
}
p=p->next;
}
printf("\n对不起,该学生信息不存在!\n\n");
return p;
}
//按名字查询
void SearchName(NODE *class1,char name1[])
{
NODE *p;
int flag=0; //找到为1,未找到标0
p=class1;
if(!p->next)
{
printf("还未输入任何信息!\n\n");
return;
}
p=p->next;
while(p)
{
if(strcmp(p->name,name1)==0)
{
flag=1;
printf("\n您要查询的学生信息为:\n");
printf("学号:%d\n",p->num);
printf("姓名:%s\n\n",p->name);
}
p=p->next;
}
if(flag==0)
printf("\n对不起,您要查询的学生信息不存在!\n\n");
return;
}
//查询
void Search(NODE *class1)
{
int choice=-1;
int num; //学号
char name1[10]; //姓名
printf("请选择用学号还是姓名查询,用学号输入1,用姓名输入2,退出请按0\n");
scanf("%d",&choice);
while(choice!=0)
{
if(choice==1)
{
printf("\n请输入您想要查询的学生的学号:\n"); //学号
scanf("%d",&num);
SearchNum(class1,num);
printf("请选择用学号还是姓名查询,用学号输入1,用姓名输入2,退出请按0\n");
scanf("%d",&choice);
}
else if(choice==2)
{
printf("\n请输入您想查询的学生姓名:\n"); //姓名
scanf("%s",name1);
SearchName(class1,name1);
printf("请选择用学号还是姓名查询,用学号输入1,用姓名输入2,退出请按0\n");
scanf("%d",&choice);
}
else
printf("输入有误,请重新输入\n");
}
}
//结点删除
void Delete(NODE *class1,NODE *node)
{
NODE *p,*q;
p=q=class1;
p=p->next;
while(p->num!=node->num)
{
p=p->next;
q=q->next; //q始终在p之前一个结点
}
q->next=p->next;
free(p);
}
//链接表的输出
void Print(NODE *class1)
{
NODE *p;
p=class1;
for(p=p->next;p;p=p->next)
{
printf("学号:%d\n",p->num);
printf("姓名:%s\n\n",p->name);
}
}
void main()
{
int choice=-1; //选择
NODE *class1; //通讯录头结点
class1=(NODE *)malloc(sizeof(NODE));
NODE *node; //临时结点
node=(NODE *)malloc(sizeof(NODE));
int num; //暂存学号
while(choice!=0)
{
printf("\n*************** 菜单 ***************\n\n");
printf("1.通讯录链表的建立\n");
printf("2.通讯者结点的插入\n");
printf("3.通讯者结点的查询\n");
printf("4.通讯者结点的删除\n");
printf("5.通讯录链表的输出\n");
printf("0.退出管理系统\n\n");
printf("************************************\n\n");
printf("请选择0-5:\n");
scanf("%d",&choice);
if(choice==0)//退出
{
printf("\n已退出程序!\n");
break;
}
else if(choice==1)//创建通讯录
{
class1=CreatTXL();
}
else if(choice==2)//插入
{
printf("请输入您想插入的学生的信息(结束插入请在学号一栏输入-1):\n");
printf("学号:");
scanf("%d",&(node->num));
while(node->num!=-1)
{
printf("姓名:");
scanf("%s",node->name);
insert(class1,node);
node=(NODE *)malloc(sizeof(NODE));
printf("\n学号:");
scanf("%d",&(node->num));
}
printf("\n插入信息成功!\n\n");
}
else if(choice==3) //查询
{
Search(class1);
}
else if(choice==4)//按学号删除
{
printf("请输入您想删除的学生的学号(退出删除程序,请输入-1):\n");
scanf("%d",&num);
while(num!=-1)
{
node=SearchNum(class1,num);
Delete(class1,node);
printf("删除成功!\n\n");
printf("请输入您想删除的学生的学号(退出删除程序,请输入-1):\n");
scanf("%d",&num);
}
}
else if(choice==5)//链接表的输出
Print(class1);
else
printf("输入有误,请重新输入!\n\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -