⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mingdan.cpp

📁 这是一个利用C语言环境下开发的通讯表的小程序
💻 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 + -