C语言通讯录管理系统课程设计

通讯录结构体

typedef struct record//定义通讯录结构体 
{
	int num;            //序号 
	char name[20];      //名字 
	char birthday[10];  //生日 
	char post[10];      //邮编 
	char phone[15];     //电话 
	char address[20];   //家庭住址 
}stu;

链表部分,插入使用头插法

typedef struct LNode//创建链表
{
	stu stu1;
	struct LNode *next;
}LinkList; 
LinkList *creatList()//初始化链表 
{
	LinkList *head;
	head=(LinkList*)malloc(sizeof(LinkList));
	head->next=NULL;
}
LinkList *creatNode(stu stu1)//创建结点 
{
	LinkList *newNode;
	newNode=(LinkList*)malloc(sizeof(LinkList));
	newNode->stu1=stu1;
	newNode->next=NULL;
	return newNode;
}
void insertNodebyhead(LinkList *head,stu stu1)//插入结点
{
	LinkList *newpeople=creatNode(stu1);
	newpeople->next=head->next;
	head->next=newpeople;
}

文件部分

void writeInfoToFile(LinkList *head)//写入文件 
{
	FILE *fp=fopen("通讯.txt","w+");
	LinkList *pMove=head->next;
	while(pMove)
	{
		fprintf(fp,"序号:%d\n",pMove->stu1.num); 
		fprintf(fp,"名字:%s\n",pMove->stu1.name);
		fprintf(fp,"电话:%s\n",pMove->stu1.phone);  
		fprintf(fp,"生日:%s\n",pMove->stu1.birthday); 
		fprintf(fp,"家庭住址:%s\n",pMove->stu1.address); 
		fprintf(fp,"邮编:%s\n",pMove->stu1.post);  
		pMove=pMove->next;
	}
	fclose(fp);
} 
stu stu1;
LinkList *newpeople=creatNode(stu1);
LinkList *head=creatList();
void readInfoFromFile(LinkList *head)//读取文件 
{
	FILE *fp;
    char a[100];
	fp=fopen("通讯.txt","rb");
	if(fp==NULL)
	{
		fp=fopen("通讯.txt","w+");
	} 
	while(fscanf(fp,"%s",a)!=EOF)
	{
		printf("%s\n",a); 
	}
	fclose(fp);
}

menu菜单

void menu()//菜单 
{
	printf("********通讯录管理系统*********\n"
	       "*      0.使用说明书           *\n"
	       "*      1.查询全部联系人       *\n"
	       "*      2.修改联系人信息       *\n"
	       "*      3.删除联系人信息       *\n"
	       "*      4.增加联系人信息       *<-----------------我是菜单\n" 
	       "*      5.查找联系人信息       *\n"
	       "*      6.查找联系人组信息     *\n"
	       "*      7.查询已保存的联系人   *\n"
	       "*      8.正常退出             *\n"
	       "********  请选择功能 **********");
}

效果展示图

主函数及主要功能部分

void begin()
{
		while(1)
	{
	  menu();
	  int a;
	  fflush(stdin);
	  scanf("%d",&a);
	  switch(a)
	 {
	   case 0:usingbook();break; 
	   case 1:link_order();printList();break;
	   case 2:changeList();break; 
	   case 3:deleteList1();break; 
	   case 4:InputList();
	   writeInfoToFile(head);break;
	   case 5:findList1();break;
	   case 6:findList2();break;
	   case 7:readInfoFromFile(head);
	   system("pause");
	   system("cls");break;
	   case 8:exit(0);break;
	   default:printf(" 输入错误!!!请仔细阅读功能列表");
	   system("pause");
	   system("cls"); 
	  }	   	  
	}
} 
int main()//主函数 
{
	system("color 97");
	welcome();
	system("pause");
	system("cls");
    begin();
	return 0;
}

全部代码展示

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
typedef struct record//定义通讯录结构体 
{
	int num;            //序号 
	char name[20];      //名字 
	char birthday[10];  //生日 
	char post[10];      //邮编 
	char phone[15];     //电话 
	char address[20];   //家庭住址 
}stu;
    int nu;            //序号 
	char nam[20];      //名字 
	char birthda[10];  //生日 
	char pos[10];      //邮编 
	char phon[15];     //电话 
	char addres[20];
typedef struct LNode//创建链表
{
	stu stu1;
	struct LNode *next;
}LinkList; 
LinkList *creatList()//初始化链表 
{
	LinkList *head;
	head=(LinkList*)malloc(sizeof(LinkList));
	head->next=NULL;
}
LinkList *creatNode(stu stu1)//创建结点 
{
	LinkList *newNode;
	newNode=(LinkList*)malloc(sizeof(LinkList));
	newNode->stu1=stu1;
	newNode->next=NULL;
	return newNode;
}
void insertNodebyhead(LinkList *head,stu stu1)//插入结点
{
	LinkList *newpeople=creatNode(stu1);
	newpeople->next=head->next;
	head->next=newpeople;
}
void writeInfoToFile(LinkList *head)//写入文件 
{
	FILE *fp=fopen("通讯.txt","w+");
	LinkList *pMove=head->next;
	while(pMove)
	{
		fprintf(fp,"序号:%d\n",pMove->stu1.num); 
		fprintf(fp,"名字:%s\n",pMove->stu1.name);
		fprintf(fp,"电话:%s\n",pMove->stu1.phone);  
		fprintf(fp,"生日:%s\n",pMove->stu1.birthday); 
		fprintf(fp,"家庭住址:%s\n",pMove->stu1.address); 
		fprintf(fp,"邮编:%s\n",pMove->stu1.post);  
		pMove=pMove->next;
	}
	fclose(fp);
} 
stu stu1;
LinkList *newpeople=creatNode(stu1);
LinkList *head=creatList();
void readInfoFromFile(LinkList *head)//读取文件 
{
	FILE *fp;
    char a[100];
	fp=fopen("通讯.txt","rb");
	if(fp==NULL)
	{
		fp=fopen("通讯.txt","w+");
	} 
	while(fscanf(fp,"%s",a)!=EOF)
	{
		printf("%s\n",a); 
	}
	fclose(fp);
}
void link_order()//序号排序 
{
	LinkList *pb, *pf, temp;
	pf=head->next;
	while(pf->next!=NULL){
		pb=pf->next;
		while(pb!=NULL){
			if(pf->stu1.num>pb->stu1.num){
				temp=*pf;
				*pf=*pb;
				*pb=temp;
				temp.next=pf->next;
				pf->next=pb->next;
				pb->next=temp.next;
			}
			pb=pb->next;
		}
		pf=pf->next;
	}
	return;
} 

void InputList()//输入模块 
{
	stu stu1;
	LinkList *pMove=head->next;
	LinkList *newpeople=creatNode(stu1);
	newpeople->next=head->next;
	head->next=newpeople;
	printf("请输入序号:");
	scanf("%d",&newpeople->stu1.num);
	printf("请输入名字:"); 
	scanf("%s",newpeople->stu1.name);
	printf("请输入电话:");
	scanf("%s",newpeople->stu1.phone);
	printf("请输入生日:");
	scanf("%s",newpeople->stu1.birthday);
	printf("请输入家庭住址:");
	scanf("%s",newpeople->stu1.address);
	printf("请输入邮编:");
	scanf("%s",newpeople->stu1.post);
	system("pause");
	system("cls");
}
void printList()//(打印/查询) 模块 
{
	LinkList *pMove = head->next;	
		if(pMove==NULL)
		{
		printf("通讯录中无联系人,请添加!");
		system("pause");
		system("cls");
        return;
	    }
	    while(pMove!=NULL) 
		{
		printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post); 
		printf("_______________\n");
		pMove=pMove->next;
	    }
	    printf("\n");
	    system("pause");
	    system("cls");
}
void deleteList1()//删除单人模块 
{
	stu stu1;
	int num;
	printf("请输入要删除的联系人序号:");
	fflush(stdin);
	scanf("%d",&num);
	LinkList* posNode=head->next;
	LinkList* posFrontNode=head;
	if(posNode==NULL)
	{
		printf("数据为空!\n");
		system("pause");
	    system("cls");
		return; 			
	}
	while(posNode->stu1.num!=num)
	{
		posFrontNode=posNode;
		posNode=posNode->next; 
		if(posNode==NULL)
		{
			printf("输入错误!\n");
			system("pause");
	        system("cls");
			return;
		}
    }
   posFrontNode->next=posNode->next;
	
	free(posNode);
	system("pause");
	system("cls");
}
void changeList(){
	LinkList* pMove=head->next;
	printf("请输入要修改联系人的姓名:"); 
	char name[100];
	scanf("%s",name);
	int choose;
	if(pMove!=NULL){
	while(strcmp(pMove->stu1.name,name)==0){
		printf("你想要修改的信息选项1.序号 2.姓名 3.电话 4.生日 5.家庭住址 6.邮编 7.退出修改\n");
		fflush(stdin);
		scanf("%d",&choose);
		switch(choose)
		{
		case 1:
			printf("请输入你要修改的序号\n");
			fflush(stdin);
			scanf("%d",&nu);
			stu1.num=nu;
			printf("修改成功!\n");
			break;
		case 2:
			printf("请输入你要修改的姓名\n");
			fflush(stdin);
			scanf("%s",nam);
			strcpy(pMove->stu1.name,nam);
			printf("修改成功!\n");
			break;
		case 3:
			printf("请输入你要修改的电话\n");
			fflush(stdin);
			scanf("%s",phon);
			strcpy(pMove->stu1.phone,phon);
			printf("修改成功!\n");
			break;
		case 4:
			printf("请输入你要修改的生日\n");
			fflush(stdin);
			scanf("%s",birthda);
			strcpy(pMove->stu1.birthday,birthda);
			printf("修改成功!\n");
			break;
		case 5:	
			printf("请输入你要修改的家庭住址\n");
			fflush(stdin);
			scanf("%s",addres);
			strcpy(pMove->stu1.address,addres);
			printf("修改成功!\n");
			break;
		case 6:
			printf("请输入你要修改的邮编\n");
			fflush(stdin);
			scanf("%s",pos);
			strcpy(pMove->stu1.post,pos);
			printf("修改成功!\n");
			break;
		case 7:system("pause");
	        system("cls");
		return;
		default:
			printf("请输入正确的选项!\n");
			break;
		}
	}
	}
	else
	{
		printf("通讯录为空,无法修改");
	}
}
void fkey2()//家庭地址查询子钥匙 
{
	LinkList *pMove =head->next;
	char b[20];
	printf("请输入家庭住址:");
	fflush(stdin);
	scanf("%s",b);
	while(pMove)
	{
	   if(strcmp(b,pMove->stu1.address)==0)
	   {
	   printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
	   printf("_______________\n");
	   }
	    else
	   {
	   	printf("没有找到符合该条件联系人!");
		return; 
	   }
	   pMove=pMove->next;
	}	
}
void fkey1()//邮编查询子钥匙 
{
	LinkList *pMove =head->next;
	char b[20];
	printf("请输入邮编:"); 
	fflush(stdin);
	scanf("%s",b);
	while(pMove)
	{
	   if(strcmp(b,pMove->stu1.post)==0)
	   {
	   printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
	   printf("_______________\n");
	   }
	    else
	   {
	   	printf("没有找到符合该条件联系人!");
		return; 
	   }
	   pMove=pMove->next;
	}	
}
void findList2()//查询模块2(联系人组) 
{   
    int b;	
	printf("请选择你的查询方式:1.邮编查询:2.家庭住址查询");
	fflush(stdin);
	scanf("%d",&b);
	switch(b)
	{
	case 1:fkey1();break;
	case 2:fkey2();break;
    }
	system("pause");
	system("cls");
}
void Fkey1()//姓名查询子钥匙 
{
	LinkList *pMove =head->next;
	char b[20];	
	printf("请输入姓名:"); 
	fflush(stdin);
	scanf("%s",b);
	while(pMove)
	{
	   if(strcmp(b,pMove->stu1.name)==0)
	   {
	   printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
	   return;
	   }
	   pMove=pMove->next;
	}
	printf("没有找到符合该条件联系人!");	
}
void Fkey2()//电话查询子钥匙 
{
	LinkList *pMove =head->next;
	char b[20];
	printf("请输入电话:"); 
	fflush(stdin);
	scanf("%s",b);
	while(pMove)
	{
	   if(strcmp(b,pMove->stu1.phone)==0)
	   {
	   printf("-序号:%d-\n-名字:%s-\n-电话:%s-\n-生日:%s-\n-家庭住址:%s-\n-邮编:%s-\n",pMove->stu1.num,pMove->stu1.name,pMove->stu1.phone,pMove->stu1.birthday,pMove->stu1.address,pMove->stu1.post);
	   return;
	   }
	   pMove=pMove->next;
	}
	   	printf("没有找到符合该条件联系人!");	
}
void findList1()//查询模块1(联系人) 
{
    int b;
	printf("请选择你的查询方式:1.姓名查询2.电话号码查询:");
	fflush(stdin);
	scanf("%d",&b);
	switch(b)
	{
	case 1:Fkey1();break;
	case 2:Fkey2();break;
    }
    system("pause");
    system("cls");  
}
void usingbook()
{	
	printf("本程序可用于通讯录人员的录入与查询\n并且在录入后会自动保存\n可支持单人姓名,电话号码查询\n也可支持根据家庭住址,邮编查询联系人组\n"); 
	system("pause");
    system("cls"); 
}
void menu()//菜单 
{
	printf("********通讯录管理系统*********\n"
	       "*      0.使用说明书           *\n"
	       "*      1.查询全部联系人       *\n"
	       "*      2.修改联系人信息       *\n"
	       "*      3.删除联系人信息       *\n"
	       "*      4.增加联系人信息       *<-----------------我是菜单\n" 
	       "*      5.查找联系人信息       *\n"
	       "*      6.查找联系人组信息     *\n"
	       "*      7.查询已保存的联系人   *\n"
	       "*      8.正常退出             *\n"
	       "********  请选择功能 **********");
} 
void welcome()//欢迎系统 
{
	char a[20];
	printf("欢迎进入通讯录管理系统,请输入通行账号:\n");
	scanf("%s",a);
	printf("Joker,欢迎!");
}

void begin()
{
		while(1)
	{
	  menu();
	  int a;
	  fflush(stdin);
	  scanf("%d",&a);
	  switch(a)
	 {
	   case 0:usingbook();break; 
	   case 1:link_order();printList();break;
	   case 2:changeList();break; 
	   case 3:deleteList1();break; 
	   case 4:InputList();
	   writeInfoToFile(head);break;
	   case 5:findList1();break;
	   case 6:findList2();break;
	   case 7:readInfoFromFile(head);
	   system("pause");
	   system("cls");break;
	   case 8:exit(0);break;
	   default:printf(" 输入错误!!!请仔细阅读功能列表");
	   system("pause");
	   system("cls"); 
	  }	   	  
	}
} 
int main()//主函数 
{
	system("color 97");
	welcome();
	system("pause");
	system("cls");
    begin();
	return 0;
}

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker700

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值