C语言:通讯录管理系统

// 序号排序  


#include<stdio.h>
#include<stdlib.h> //调用了system("cls")清屏和exit函数
#include<string.h>
#include<conio.h>//输入输出头文件  包含getch putch等不回显函数

FILE *fp;//文件指针
int n=0;
struct ADDRESS
{
	char name[20];//姓名
	char number[20];//号码
	char danwei[30];//工作单位
	char address[40];//住址
}t[50];


//创建通讯录
void create()
{
	void menu_select();
	system("color 2e");
	if((fp=fopen("通讯录.txt","r"))==NULL)
	{
		printf("--------------无通讯录----------------\n\n");
		printf("************正在创建,请稍后**********\n\n");
		fp=fopen("通讯录.txt","w");
		printf("------------按任意键继续--------------\n");
		getch();
		system("cls");
		printf("*******************创建成功!***************\n\n");
		printf("--------------通讯录管理系统:---------------\n\n");
		printf("		 □      		\n");
		printf("	□□□□□□□□□□□ 	\n");
		printf("	   □ □ □    	\n");
		printf("	  □  □  □   	\n");
		printf("	□□   □   □□		\n");
		printf("	  □□□□□□    	\n");
		printf(" 	       □     	\n");
		printf(" 	      □      	\n");
		printf("	□□□□□□□□□□□ 	\n");
		printf("	     □          \n");
		printf(" 	      □          \n");
		printf(" 	  □□□□				\n\n");
		printf("--------------按任意键进入主菜单------------\n\n");
		getch();
		system("cls"); 
		menu_select();
	}
	else
	{
		int i;
		for(i=0;i<50;i++)
		{
			if(fscanf(fp,"%s%s%s%s",t[i].name,t[i].number,t[i].danwei,t[i].address)==-1)
			{
				n=i;
				break;
			}
		}	
		fclose(fp);
		printf("--------------通讯录管理系统:---------------\n\n");
		printf("		 □      		\n");
		printf("	□□□□□□□□□□□ 	\n");
		printf("	   □ □ □    	\n");
		printf("	  □  □  □   	\n");
		printf("	□□   □   □□		\n");
		printf("	  □□□□□□    	\n");
		printf(" 	       □    		\n");
		printf(" 	      □     		\n");
		printf("	□□□□□□□□□□□ 	\n");
		printf("	     □      	\n");
		printf(" 	      □     	   \n");
		printf(" 	  □□□□				\n\n");
		printf("--------------按任意键进入主菜单------------\n\n");	
		getch();
		system("cls"); 
		menu_select();
	}
}



//输入记录
void get()
{
	void menu_select();
	printf("***************请输入联系人信息***************\n");
	loop:
	{
		printf("输入姓名:\n");
		scanf("%s",t[n].name);
		if(t[n].name==" ")
			goto loop;
	}
	printf("输入号码:\n");
	scanf("%s",t[n].number);
	printf("输入工作单位:\n");
	scanf("%s",t[n].danwei);
	printf("输入住址:\n");
	scanf("%s",t[n].address);
	n++;
	printf("***************是否继续添加(Y/N):***************\n");
	if(getch()=='Y')
		get();
	system("cls"); 
	menu_select();
}

//显示全部记录
void list()
{
	void menu_select();
	int i;
	if(n!=0)
	{
		printf("---------------全部记录:----------------\n");
		for(i=0;i<n;i++)
		{
			printf("***************************************\n");
			printf("序号: %d\n",i);
			printf("姓名: %s\n",t[i].name);
			printf("号码: %s\n",t[i].number);
			printf("工作单位: %s\n",t[i].danwei);
			printf("住址: %s\n",t[i].address);
			printf("***************************************\n");
			printf("---------------------------------------\n\n");
		}
		printf("共%d个联系人\n\n",n);
		printf("**********按任意键返回主菜单...********\n");
		getch();
		system("cls"); 
		menu_select();
	}
	else
		printf("---------------无联系人----------------\n");
		printf("**********按任意键返回主菜单...********\n");
		printf("---------------------------------------\n");
		getch();
		system("cls");   //清屏
		menu_select();
}


//按姓名查找显示记录
void searchbyname()
{
	void menu_select();
	int flag=0;
	int i=0;
	char mingzi[20];
	printf("***************按姓名查找:***************\n");
	printf("***************请输入姓名:***************\n");
	scanf("%s",mingzi);
	for(i=0;i<n;i++)
	{
		if(strcmp(t[i].name,mingzi)==0)
		{
			printf("***************联系人信息如下:***************\n");
			printf("序号: %d\n",i);
			printf("姓名: %s\n",t[i].name);
			printf("号码: %s\n",t[i].number);
			printf("工作单位: %s\n",t[i].danwei);
			printf("住址: %s\n",t[i].address);
			printf("*********************************************\n");
			flag++;
			getch();
			system("cls"); 
			menu_select();
		}
	}
	if(flag==0)
	{
		printf("***************输入信息有误,没有此联系人:*********\n\n\n");
		printf("***************按任意键返回主菜单...***************\n");
		getch();
		system("cls"); 
		menu_select();
	}
}

//按姓名排序
void sort()//用ASII码排序
{
	void menu_select();
	int i,j,k;
	ADDRESS temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(strcmp(t[k].name,t[j].name)>0)
				k=j;
			if(k!=i)
			{
				temp=t[i];
				t[i]=t[k];
				t[k]=temp;
			}
		}
	}
	printf("***************按姓名排序:***************\n");
	for(i=0;i<n;i++)
	{
		printf("---------------------------------------------\n");
		printf("序号: %d\n",i);
		printf("姓名: %s\n",t[i].name);
		printf("号码: %s\n",t[i].number);
		printf("工作单位: %s\n",t[i].danwei);
		printf("住址: %s\n",t[i].address);
		printf("---------------------------------------------\n");
	}
	printf("************按任意键返回主菜单...*********\n");
	getch();
	system("cls"); 
	menu_select();
}

//按序号查找显示记录
void searchbyindex()
{
	void menu_select();
	int i;
	printf("***************按序号查找:***************\n");
	scanf("%d",&i);
	if(i<n)
	{
		printf("序号: %d\n",i);
		printf("姓名: %s\n",t[i].name);
		printf("号码: %s\n",t[i].number);
		printf("工作单位: %s\n",t[i].danwei);
		printf("住址: %s\n",t[i].address);
		printf("************按任意键返回主菜单...*********\n");
		getch();
		system("cls"); 
		menu_select();
	}
	else
		printf("***************没有这个纪录:***************\n");
		printf("************按任意键返回主菜单...**********\n");
		getch();
		system("cls"); 
		menu_select();
}

//总查找
void init()
{
	void searchbyname();
	void searchbyindex();
	void menu_select(); 
	char i;
	printf("---------------查找方式:----------------\n");
	printf("***************a.   姓名:***************\n");
	printf("***************b.   序号:***************\n");
	printf("***************c.   返回:***************\n");
	printf("----------------------------------------\n");
	i=getch();
	switch(i)
	{
		case 'a': searchbyname(); break;
		case 'b': searchbyindex();break;
		case 'c':
		{
			system("cls");
			menu_select(); 
			break;
		}
		default:	menu_select();
	}
}

//插入记录(按姓名)
void add()
{
	void menu_select();
	int i,j,k;
	ADDRESS temp;
	loop:
	{
		printf("输入姓名:\n");
		scanf("%s",t[n].name);
		if(t[n].name==" ")
			goto loop;
	}
	printf("输入号码:\n");
	scanf("%s",t[n].number);
	printf("输入工作单位:\n");
	scanf("%s",t[n].danwei);
	printf("输入住址:\n");
	scanf("%s",t[n].address);
	n++;

	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(strcmp(t[k].name,t[j].name)>0)
				k=j;
			if(k!=i)
			{
				temp=t[i];
				t[i]=t[k];
				t[k]=temp;
			}
		}
	}

	printf("******************已插入*********************\n\n");
	printf("************按任意键返回主菜单...************\n");
	getch();
	system("cls"); 
	menu_select();
}

//删除全部记录
void delall()
{
	void menu_select();
	printf("-------------确认删除?(Y/N)-------------\n");
	if(getch()=='Y')
	{
		fopen("通讯录.txt","w");//用w模式打开一个已有的文件 文件内容会被删除 以便程序以一个空文件开始操作
		n=0;
		printf("----------------已经删除-----------------\n");
		printf("************按任意键返回主菜单...**********\n");
		getch();
		system("cls");
		menu_select();
	}
	else
		system("cls");
		menu_select();;
}


//删除姓名
void delname()
{
	void menu_select();
	int flag=0;
	int i=0;
	char mingzi[20];
	printf("************请输入要删除的姓名:************\n");
	scanf("%s",mingzi);
	for(i=0;i<n;i++)
	{
		if(strcmp(t[i].name,mingzi)==0)
		{
			flag++;
			printf("***************删除的信息如下:**************\n");
			printf("序号: %d\n",i);
			printf("姓名: %s\n",t[i].name);
			printf("号码: %s\n",t[i].number);
			printf("工作单位: %s\n",t[i].danwei);
			printf("住址: %s\n",t[i].address);
			printf("***************是否要删除?(Y/N)**************\n");
			printf("*********************************************\n");	
			if(getch()=='Y')
			{
				for(;i<n-1;i++)
				{
					t[i]=t[i+1];
				}
				n=n-1;
				printf("******************已删除*****************\n");
				getch();
				system("cls"); 
				menu_select();
			}
			if(getch()=='N')
			{
				getch();
				system("cls"); 
				menu_select();
			}
		}
	}
		if(flag==0)
		{
			printf("***************输入信息有误,没有此联系人:*********\n\n\n");
			printf("***************按任意键返回主菜单...***************\n");
			getch();
			system("cls"); 
			menu_select();
		}
}

//删除
void Delete()
{
	void menu_select();
	void delname();
	void delall();
	char i;
	printf("---------------删除方式:----------------\n");
	printf("*************a.按姓名删除:**************\n");
	printf("***************b.全部删除:**************\n");
	printf("***************c.   返回:***************\n");
	i=getch();
	switch(i)
	{
		case 'a': delname();	 break;
		case 'b': delall();	   	 break;
		case 'c':
		{
			system("cls");
			menu_select(); 
			break;
		}
		default:	menu_select();
	}
}

//退出
void exit()
{
	int i=0;
	fp=fopen("通讯录.txt","w");
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%s ",t[i].name);
		fprintf(fp,"%s ",t[i].number);
		fprintf(fp,"%s ",t[i].danwei);
		fprintf(fp,"%s ",t[i].address);
	}
	fclose(fp);
	exit(0);
}

//主菜单函数
void menu_select()
{
	void menu_select(); //主菜单函数
	void init();    	//查找记录
	void create();     //创建记录
	void list(); //显示全部记录
	void searchbyname();//按姓名查找显示记录
	void delall();//删除记录 
	void add();//插入记录
	void get();//输入记录
	void searchbyindex();//按序号查找显示记录
	void sort();//按姓名排序 
	void exit();//退出并保存到文件
	char c;
	system("color 9e");
	printf("***************MENU*************** \n");
	printf("0. Enter record /*输入记录*/ \n");
	printf("1. list the file /*显示全部记录*/ \n");
	printf("2. search record on name /*查找记录*/ \n");
	printf("3. display record on order /*按序号查找显示*/ \n");
	printf("4. delete a record /*删除记录*/ \n");
	printf("5. add record /*插入记录*/ \n");
	printf("6. sort by name /*按姓名排序*/ \n");
	printf("7. quit /*退出并保存到文件中*/ \n");
	printf("********************************** \n");
	c=getch();
	switch(c)
	{
		case '0':	get();				break;
		case '1':	list();				break;
		case '2':	init();			   	break;
		case '3':	searchbyindex();   	break;
		case '4':	Delete();		    break;
		case '5':	add();		    	break;
		case '6':	sort();		    	break;
		case '7':	exit();				break;
		default:	menu_select();
	}
	return;
}


//主函数
void main()
{
	create();
	menu_select(); 
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值