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

📄 txl.cpp

📁 一个用vc实现的通讯录的建立
💻 CPP
字号:
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define NULL 0 
#define LEN sizeof(LNode) 
int length; 
int seat; 

typedef struct LNode
{ 
	int number; 
	int telenum; 
	char name[20]; 
	struct LNode *next; 
}LNode,*LinkList; 
//用于通讯录结点 

/*****************************插入结点********************************/
LinkList prior(LinkList L,LinkList p)
{ 
	if(L->next==NULL) return(L); 
	LinkList p_prior=L; 
	while(p_prior->next != p)
	{ 
		p_prior=p_prior->next;
	} 
	return (p_prior); 
} // 找到位于当前地址元素的前一元素的地址 
void insertYuanXu(LinkList L,LinkList Elem) 
{ //插入一个元素,使原有序表仍为有序 
	LinkList p=L->next; 
	while(p!=NULL && Elem->number>=p->number)
	{ 
		if(p->number==Elem->number)
		{
			printf(" 重复输入!!\n");return;
		} 
		p=p->next; 
	} //确定Elem插入的位置 
	if(p==NULL) { p=prior(L,p); Elem->next=NULL;p->next=Elem;} 
	else //若为空表,插到头结点之后 
	{
		p=prior(L,p); Elem->next=p->next; p->next=Elem; 
	} 
} 

/*****************************创建链表*****************************/
LinkList creatIncreLink() //创建一个非递减有序表,返回头结点地址 
{ 
	LinkList L=(LinkList)malloc(LEN); //头结点 
	L->next=NULL; 
	LinkList p; 
	int num=1; 
	int number,telenum; 
	char name[20]; 
	printf(" 请输入学生学号、姓名和电话号码,建立通讯录,以'0'为输入结束标志\n"); 
	printf(" Input number %d:",num); 
	scanf("%d",&number); 
	printf(" Input name %d: ",num); 
	char temp=getchar(); 
	gets(name); 
	printf(" Input the telephone number %d:",num); 
	scanf("%d",&telenum); 
	while (number>0){ 
		p=(LinkList)malloc(LEN); //新结点 
		p->number=number; 
		p->telenum=telenum; 
		strcpy(p->name,name); 
		insertYuanXu(L,p); //有序的插入新结点 
		num++; 
		printf(" Input number %d:",num); 
		scanf("%d",&number); 
		printf(" Input name %d: ",num); 
		temp=getchar(); 
		gets(name); 
		printf(" Input the telephone number %d:",num); 
		scanf("%d",&telenum); 
	} 
	return(L); 
} 

/*********************************查找结点**********************************/
int searchNum(LinkList L,int n)
{ // 按学号查找通讯者
	int flag=0; 
	LinkList p=L->next; 
	seat=1; 
	if(L->next==NULL) printf(" 该链表中没有元素,查找失败\n"); 
	else
	{ 
		while(p !=NULL)
		{ 
			if(p->number<=n)
				if(p->number==n)
				{ 
					flag=1; 
					printf(" 要查找的是第%d位通讯者:\n",seat); 
					printf(" Number: %d Name: %s TeleNo.:%d\n",p->number,p->name,p->telenum); 
				} 
				p=p->next;seat++;//!!!! 
		} 
	} 
	return flag; 
} 

/**********************************删除结点***********************************/
int deleteElem(LinkList L,int i) //从通讯录中删除第i个元素 
{ 
	LinkList p=L; 
	int j=0; 
	while (p->next!=NULL&&j<i-1)
	{ 
		p = p->next;j++; 
	} 
	if(!(p->next)||j>i-1) 
	{
		printf(" 第%d个元素删除失败\n",i);return 0;
	} 
//判断i是否合法,i既不能大于元素的个数,也不能小于等于0 
	LinkList q = p->next; 
	p->next = q->next; 
	free(q); //释放删除的结点 
	return 1; 
} 
int delNum(LinkList L,int n)
{
	int flag=0;
	LinkList p=L->next;
	seat=1;
	if(p==NULL) 
	{
		printf("该链表中没有元素,删除失败\n");
		return 0;
	}
	while(p!=NULL)
	{
		if(p->number==n)
		{
			flag=1;
			printf(" %d 被删除\n",p->number);
            deleteElem(L,seat);
			return 1;
		}
		else
		{
			p=p->next;
			seat++;
		}
	}
}

/****************************输出链表*********************************/
void printList(LinkList L)
{ // 打印头结点地址为L的通讯录 
	printf("\n  ---------------------------------------\n"); 
	printf("  Number Name TelephoneNo.\n"); 
	printf("  -----------------------------------------\n"); 
	LinkList p=L; 
	int n=1; 
	if(L->next==NULL) printf(" 该链表中没有元素\n"); 
	else 
		while(p->next !=NULL){ 
			printf("  %2d %-9d",n,p->next->number); 
			printf("  %-7s %d\n",p->next->name,p->next->telenum); 
			p=p->next; 
			n++; 
		} 
		printf("  -----------------------------------------\n"); 
		return ; 
}


void main() 
{ 
	LinkList L; 
	printf("\n ☆====================☆=通讯录=☆=======================☆\n"); 
	printf(" 以下为功能菜单,请键入数字,选择算法:(2,3,4,5,6功能建立在1的基础上)\n"); 
	printf(" 功能 1 通讯录链表的建立:\n"); 
	printf(" 功能 2 通讯者结点的插入:\n"); 
	printf(" 功能 3 通讯者结点的查询:\n"); 
	printf(" 功能 4 通讯者结点的删除:\n"); 
	printf(" 功能 5 通讯录链表的输出:\n");
	printf(" 功能 0 退出管理系统\n"); 
	int flag=0; 
	int menu; 
	printf(" 请选择0-5:"); 
	scanf("%d",&menu); 
	while(menu!=0)
	{ 
		switch(menu)
		{ 
		case 1:
			{ 
				L=creatIncreLink(); 
				printf(" 建立通讯录:"); 
				printList(L); 
				flag=1; 
				break; 
			} 
		case 2:
			{ 
				if(flag==1)
				{ 
					int number,telenum; 
					char name[20]; 
					printf(" 请输入通讯者的学号和姓名:\n"); 
					printf(" Input the number: "); 
					scanf("%d",&number); 
					printf(" Input the name: "); 
					char temp=getchar(); 
					gets(name); 
					printf(" Input the telephone number: "); 
					scanf("%d",&telenum); 
					LinkList p=(LinkList)malloc(LEN); //新结点 
					p->number=number; 
					strcpy(p->name,name); 
					p->telenum=telenum; 
					insertYuanXu(L,p); //有序的插入新结点 
					printf(" 插入后:"); 
					printList(L); 
				} 
				else printf("\n ERROR: 通讯录还没有建立,请先建立通讯录\n"); 
				break; 
			} 
		case 3:
			{ 
				int n; 
				int s; 
				if(flag==1)
				{ 
					printf("\n Input the number:"); 
					scanf("%d",&n); 
					s=searchNum(L,n); 
					if(s==0) printf(" 无此通讯者,查找失败!\n"); 
				}
				else printf(" ERROR!!!\n");
				break; 
			} 
		case 4:
			{ 
				int n,f; 
				if(flag==1)
				{
					printf(" Input the number: "); 
					scanf("%d",&n); 
					f=delNum(L,n); 
					if(f!=0)
					{ 
						printf(" 删除后:\n"); 
						printList(L); 
					} 
					else printf(" 无该学号,删除失败!\n");
				}
				else printf("ERROR!!!\n");break;
			} 
		case 5:
			{
				printf(" 当前通讯录内容如下:\n"); 
				printList(L);
				break;
			}
		case 0: 
			exit(0); 
default: printf("\n 没有此功能,重新输入\n"); 
}//switch 
printf(" 选择功能:"); 
	scanf("%d",&menu); 
	}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -