首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组版个人通讯录-C语言

数组版个人通讯录-C语言

作者头像
WindCoder
发布2018-09-19 18:21:25
2.1K0
发布2018-09-19 18:21:25
举报
文章被收录于专栏:WindCoderWindCoder
#ifndef ADDRESSLIST_H_2013_06_18
#define ADDRESSLIST_H_2013_06_18
/************************************************************************
函数名:struct message
功能:定义通讯录结构体变量
参数:
返回值:
************************************************************************/
struct message
{
	char name[20];     /*定义输入名字的数组*/
	char phone[20];   /*定义输入电话号码的数组*/
	char QQ[13];     /*定义输入QQ的数组*/
	char email[20]; /*定义输入邮箱的数组*/
	char addr[40]; /*定义输入地址的数组*/
}MESS[1000];      /*默认1000个数据*/

//程序用到的所有函数

void mainMenu();                            /*主菜单函数*/
void add();                                /*增加联系人函数*/
void readfile();                          /*文件中读入函数*/
void writefile();                        /*文件中写入函数*/
void modify();                          /*修改联系人函数*/
void modify_name();                    /*姓名修改*/
void modify_phone();                  /*电话号码修改*/
void findMessage();                  /*查找联系人函数*/
void findMessage_name();            /*按姓名查找*/
void findMessage_phone();          /*按号码查找*/
void del();                       /*删除联系人函数*/
void del_all();               /*全部删除*/
void del_dange();               /*单个删除*/
void del_phone();
void del_name();
void printMessage();           /*号码显示*/
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include "addressList.h"

int n=0;     //记录数据联系人数量
FILE *fp;   //定义文件

/************************************************************************
函数名:readfile
功能:  读取文件
参数:
返回值:空
************************************************************************/
void readfile()
{
	if((fp=fopen("c:\通讯录.txt","r"))==NULL)
	{
		printf("nttt    通讯录文件不存在");
		if ((fp=fopen("通讯录2.txt","w"))==NULL)
		{
			printf("ntt建立失败");
			exit(0);
		}
		else
		{
			printf("nt-----------------欢迎使用通讯录管理系统------------------");
			printf("nt                    通讯录文件已建立                     ");
			printf("nt                   按任意键进入主菜单                    ");
			printf("nt---------------------------------------------------------");
			getch();
			return ;
		}
		exit(0);
	}
	fseek(fp,0,2); /*文件位置指针移动到文件末尾*/
	if (ftell(fp)>0) /*文件不为空*/
	{
		rewind(fp); /*文件位置指针移动到文件开始位置*/
		for (n=0;!feof(fp) && fread(&MESS[n],sizeof(struct message),1,fp);n++);
		printf("nt----------     欢迎使用通讯录管理系统    ----------------");
		printf("nt                   文件导入成功                          ");
		printf("nt                 按任意键返回主菜单                      ");
		printf("nt---------------------------------------------------------");
		getch();
		return;
	}
	printf("nt------------      欢迎使用通讯录管理系统   --------------");
	printf("nt                     文件导入成功                        ");
	printf("nt                通讯录文件中无任何纪录                   ");
	printf("nt                  按任意键返回主菜单                     ");
	printf("nt---------------------------------------------------------");
	getch();
	return;
}
/************************************************************************
函数名: mainMenu
功能: 文件主菜单
参数:
返回值:空
************************************************************************/
void mainMenu()
{
	char c;
	system("cls");
	printf("ntt|-------     欢迎您使用通讯录管理系统       -----|");
	printf("ntt|         1-添加联系人    2-查询和显示联系人     |");
	printf("ntt|         3-删除联系人    4-修改联系人           |");
	printf("ntt|         5-保存退出      0-不保存退出           |");
	printf("ntt|------------------------------------------------|");
	printf("ntt请选择您所所要的服务:");
	c=getch();
	switch (c)
	{
	case '1':add();break;
	case '2':findMessage();break;
	case '3':del();break;
	case '4':modify();break;
	case '5':writefile();break;
	case '0':exit(0);
	default:mainMenu();
	}
}
/************************************************************************
函数名: add
功能:添加新联系人
参数:
返回值:空
************************************************************************/
void add()
{
	printf("ntt------------------ 请输入联系人信息 --------------------n");
	printf("ntt输入联系人姓名:");
	scanf("%s",MESS[n].name);
	printf("ntt输入联系人电话号码:");
	scanf("%s",MESS[n].phone);
	printf("ntt输入联系人QQ:");
	scanf("%s",MESS[n].QQ);
	printf("ntt输入联系人邮箱:");
	scanf("%s",MESS[n].email);
	printf("ntt输入联系人地址:");
	scanf("%s",MESS[n].addr);
	n++;
	printf("ntt是否继续添加联系人?(Y/N):"); /*是否继续输入联系人.*/
	if (getch()=='y')
	{
		system("cls");
		add();
	}
		return;
}
/************************************************************************
函数名:writefile
功能: 联系人写入文件
参数:
返回值:空
************************************************************************/
void writefile()     /*联系人写入文件*/
{
	int i;
	if ((fp=fopen("c:\通讯录.txt","w"))==NULL)
	{
		printf("ntt文件打开失败");
	}
	for (i=0;i<n;i++)
	{
		if (fwrite(&MESS[i],sizeof(struct message),1,fp)!=1)
		{
			printf("ntt写入文件错误!n");
		}
	}
	fclose(fp); /*关闭文件*/
	printf("nt------------------------------------------------------"); /*输出提示信息*/
	printf("ntt通讯录文件已保存");
	printf("ntt谢谢使用,欢迎再次使用!n");
	printf("ntt按任意键退出程序ntt");      /*输出完毕*/
	exit(0);
	printf("nt------------------------------------------------------");
}

/************************************************************************
函数名:findMessage
功能:查询联系人选择菜单
参数:
返回值:空
************************************************************************/
void findMessage()
{
	char c;
	system("cls");
	printf("ntt------------------- 显示和查询联系人 ------------------");
	printf("ntt|        1-显示所有              2-按姓名查询         |");
	printf("ntt|        3-按电话查询            4-返回主菜单         |");
	printf("ntt|------------------------------------------------------");
	printf("ntt请选择您所所要的服务:");
	c=getch();
	switch (c)
	{
	case '1':printMessage();break;   /*显示所有号码*/
	case '2':findMessage_name();break;  /*调用按姓名查询函数*/
	case '3':findMessage_phone();break;  /*调用按号码查询函数*/
	case '4':mainMenu();break;       /*主菜单*/
	}
}
/************************************************************************
函数名:printMessage
功能:显示所有联系人函数
参数:
返回值:空
************************************************************************/
void printMessage()
{
	int i;
	system("cls");//清楚屏幕
	if(n!=0)
	{
		printf("ntt----------欢迎您查询通讯录所有联系人信息-------------");
		for (i=0;i<n;i++)     /*依次序显示*/
		{
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt QQ : %s",MESS[i].QQ);
			printf("ntt邮箱: %s",MESS[i].email);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt--------------------------------------------------");
			if (i+1<n)
			{
				printf("ntt-----------------------");
				//system("pause");//返回错误信息
			}
		}
		printf("ntt---------------------------------------------");
	}
	else                                          //无联系人
	{
		("ntt通讯录中无任何纪录");
	}
	printf("ntt按任意键返回主菜单:");
	getch();
	return;
}
/************************************************************************
函数名:findMessage_phone()
功能:按号码查询函数
参数:
返回值:空
************************************************************************/
void findMessage_phone()
{
	int mark=0;
	int i;
	char phone[15];
	printf("ntt------------------- 按电话查找 -------------------------");
	printf("ntt请输入电话号码:");
	scanf("%s",phone);
	for(i=0;i<n;i++)
	{
		if (strcmp(MESS[i].phone,phone)==0)//对比查找函数
		{
			printf("ntt------------ 以下是您查找的学生信息 ------------");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt QQ : %s",MESS[i].QQ);
			printf("ntt邮箱: %s",MESS[i].email);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt------------------------------------------------");
			printf("ntt按任意键返回主菜单:");
			mark++;
			getch();
			return;
		}
	}
	if (mark==0)
	{
		printf("ntt没有找到联系人的信息");
		printf("ntt按任意键返回主菜单");
		getch();
		return;
	}
}
/************************************************************************
函数名:findMessage_name()
功能:按姓名查询
参数:
返回值:空
************************************************************************/
void findMessage_name()
{
	int mark=0;
	int i;
	char name[20];
	printf("ntt----------------按姓名查找 --------------------");
	printf("ntt请输入您要查找的姓名:");
	scanf("%s",name);
	for(i=0;i<n;i++)
	{
		if (strcmp(MESS[i].name,name)==0)
		{
			printf("ntt------------ 以下是您查找的联系人信息 ---------------");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt QQ : %s",MESS[i].QQ);
			printf("ntt邮箱: %s",MESS[i].email);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt---------------------------------------------------");
			mark++;
			getch();
			return;
		}
	}
	if (mark==0)
	{
		printf("ntt没有找到联系人的信息");
		printf("ntt按任意键返回主菜单");
		getch();
		return;
	}
}

/************************************************************************
函数名:del()
功能:删除联系人菜单
参数:
返回值:空
************************************************************************/
void del()
{
	char c;
	if(n==0)     /*如果通讯录中没有一个记录输出以下部分*/
	{
		printf("ntt对不起,文件中无任何纪录");
		printf("ntt按任意键返回主菜单");
		getch();
		return;
	}
	system("cls");      /*清屏*/
	printf("ntt-----------------  删除菜单 ----------------------");
	printf("ntt|           1-删除所有 2-删除单个                |");
	printf("ntt|                3-返回主菜单                    |");
	printf("ntt|-------------------------------------------------");
	printf("ntt请选择您所所要的服务:");
	c=getch();
	switch (c)
	{
	case '1':del_all();break;
	case '2':del_dange();break;
	case '3':mainMenu();break;
	default:mainMenu();break;
	}
}
/************************************************************************
函数名:del_dange
功能:删除单个联系人
参数:
返回值:空
************************************************************************/
void del_dange()
{
	char c;
	printf("nt----------------------------------------------------------");
	printf("ntt   1-按姓名删除    2-按电话删除");
	printf("ntt请选择您所所要的服务:");
	printf("nt----------------------------------------------------------");
	c=getch();
	switch (c)
	{
	case '1':del_name();break;
	case '2':del_phone();break;
	}
}
/************************************************************************
函数名:del_all
功能:删除所有联系人
参数:
返回值:空
************************************************************************/
void del_all()
{
	printf("ntt确认删除?(y/n)");
	if (getch()=='y')
	{
		fclose(fp);
		if ((fp=fopen("通讯录.txt","w"))==NULL)   /*文件空输出*/
		{
			printf("ntt不能打开文件,删除失败");
			readfile();
		}
		n=0;
		printf("ntt纪录已删除,按任意键返回主菜单");
		getch();
		return;
	}
	else
		return;
}
/************************************************************************
函数名:del_name()
功能:按姓名删除联系人
参数:
返回值:空
************************************************************************/
void del_name()
{
	int i,m,mark=0,a=0;
	char name[20];
	printf("ntt请输入要删除联系人姓名:");
	scanf("%s",name);    /*键盘输入姓名*/
	for (i=a;i<n;i++)
	{
		if (strcmp(MESS[i].name,name) == 0) //对比字符串查找到要删除的联系人
		{
			printf("ntt以下是您要删除的联系人纪录:");
			printf("ntt--------------------------------");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt--------------------------------");
			printf("ntt是否删除?(y/n)");
			if (getch()=='y') // 实现删除功能
			{
				for (m=i;m<n-1;m++)
				MESS[m]=MESS[m+1];    /*将通讯录的想前移*/
				n--;
				mark++;
				printf("ntt删除成功");
				printf("ntt是否继续删除?(y/n)");
				if (getch()=='y')
					del_name();   /*继续调用删除函数*/
				return;
			}
			else
				return;
		}
		continue;
	}
	if (mark==0)
	{
		printf("ntt没有该联系人的纪录");
		printf("ntt是否继续删除?(y/n)");
		if (getch()=='y')
			del_name();
		return;
	}
}
/************************************************************************
函数名:del_phone
功能:按电话号码删除联系人
参数:
返回值:空
************************************************************************/
void del_phone()
{
	int i,m,mark=0;
	char phone[20];
	printf("ntt请输入要删除联系人电话号码:");
	scanf("%s",phone);
	if(n==0)
	{
		printf("ntt对不起,文件中无任何纪录");
		printf("ntt按任意键返回主菜单");
		getch();
		return;
	}
	for (i=0;i<n;i++)
	{
		if (strcmp(MESS[i].phone,phone)==0)
		{
			printf("ntt以下是您要删除的联系人纪录:");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt是否删除?(y/n)");
			if (getch()=='y')
			{
				for (m=i;m<n-1;m++) //递推替换实现删除
					MESS[m]=MESS[m+1];
				n--;
				mark++; //记录删除次数
				printf("ntt删除成功");
				printf("ntt是否继续删除?(y/n)");
				if (getch()=='y')
					del_phone();
				return;
			}
			else
				return;
		}
		continue;

	}
	if (mark==0)
	{
		printf("ntt没有该联系人的纪录");
		printf("ntt是否继续删除?(y/n)");
		if (getch()=='y')
			return ;
	}
}

/************************************************************************
函数名:modify
功能:修改联系人
参数:
返回值:空
************************************************************************/
void modify()     /*修改函数*/
{
	char c;
	if(n==0)
	{
		printf("ntt对不起,文件中无任何纪录");
		printf("ntt按任意键返回主菜单");
		getch();
		return;
	}
	system("cls");
	printf("ntt-----------------修改联系人菜单-----------------------");
	printf("ntt|          1-按姓名修改    2-按电话修改              |");
	printf("ntt|              任意键-按返回主菜单                   |");
	printf("ntt------------------------------------------------------");
	c=getch();
	switch(c)
	{
	case '1':modify_name();break;
	case '2':modify_phone();break;
	default:mainMenu();break;
	}
}
/************************************************************************
函数名:modify_name
功能:  按姓名修改
参数:
返回值:空
************************************************************************/
void modify_name()
{
	char c;
	int i,mark=0;
	char name[20];
	printf("ntt请输入要修改的联系人姓名:");
	scanf("%s",name);
	if(n==0)
	{
		printf("ntt文件中无任何联系人");
		printf("ntt按任意键返回主菜单");
		getch(); mark++;
		return;
	}
	for(i=0;i<n;i++)
	{
		if(strcmp(MESS[i].name,name)==0)
		{
			printf("ntt以下是您要修改的联系人信息");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt QQ : %s",MESS[i].QQ);
			printf("ntt邮箱: %s",MESS[i].email);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt是否修改(y/n)");
			if(getch()=='y')
			{
				printf("nt------------请选择修改信息---------------");
				printf("nt         1-修改姓名     2-修改电话       ");
				printf("nt         3-修改QQ       4-修改邮箱       ");
				printf("nt                5-修改地址               ");
				printf("nt-----------------------------------------");
				printf("nt请选择您所所要的服务:");
				scanf("%s",&c);
				switch(c)
				{
				case '1': printf("nt请输入新姓名: ");
					scanf("%s",MESS[i].name);break;
				case'2':printf("nt请输入新电话: %s");
					scanf("%s",MESS[i].phone);break;
				case'3':printf("nt请输入新QQ: ");
					scanf("%s",MESS[i].QQ);break;
				case'4':printf("nt请输入新邮箱: ");
					scanf("%s",MESS[i].email);break;
				case'5':printf("nt请输入新地址: ");
					scanf("%s",MESS[i].addr);break;
				}
			}
		}
	}
    if(mark==0)
	{
		printf("ntt没有找到联系人信息");
		printf("nt是否继续修改?(Y/N):");
		if(getch()=='y')
			modify_name();
		return;
	}
}
/************************************************************************
函数名:modify_phone
功能:按电话修改
参数:
返回值:空
************************************************************************/
void modify_phone()
{
	char c,phone[15];
	int i,mark=0;
	printf("ntt请输入要修改联系人的号码:");
	scanf("%s",phone);
	if(n==0)
	{
		printf("ntt文件中无任何联系人");
		printf("ntt按任意键返回主菜单");
		getch();mark++;
		return;
	}
	for(i=0;i<n;i++)
	{
		if(strcmp(MESS[i].phone,phone)==0)
		{
			printf("ntt以下是您要修改的联系人信息");
			printf("ntt姓名: %s",MESS[i].name);
			printf("ntt电话: %s",MESS[i].phone);
			printf("ntt QQ : %s",MESS[i].QQ);
			printf("ntt邮箱: %s",MESS[i].email);
			printf("ntt地址: %s",MESS[i].addr);
			printf("ntt是否修改(y/n)");
			if(getch()=='y')
			{
				printf("nt------------请选择修改信息---------------");
				printf("nt         1-修改姓名     2-修改电话       ");
				printf("nt         3-修改QQ       4-修改邮箱       ");
				printf("nt                5-修改地址               ");
				printf("nt-----------------------------------------");
				printf("nt请选择您所所要的服务:");
				scanf("%s",&c);
				switch(c)
				{
				case'1': printf("nt请输入新姓名: ");
					scanf("%s",MESS[i].name);break;
				case'2':printf("nt请输入新电话: ");
					scanf("%s",MESS[i].phone);break;
				case'3':printf("nt请输入新QQ: ");
					scanf("%s",MESS[i].QQ);break;
				case'4':printf("nt请输入新邮箱: ");
					scanf("%s",MESS[i].email);break;
				case'5':printf("nt请输入新地址: ");
					scanf("%s",MESS[i].addr);break;
				}
			}
		}
	}
	if(mark==0)
	{
		printf("nt没有该联系人信息");
		printf("nt是否继续修改?(Y/N):");
		if(getch()=='y')
			modify_phone();
		return;
	}
}
/*
功能:个人通讯录
日期:2013-06-18
*/

#include<stdio.h>
#include<stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include "addressList.h"

int main(void)
{
	readfile();
	while(1)
	{
		mainMenu();
	}

	system("pause");
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档