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

#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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java技术学习之道

JAVA设计模式之单例模式

15530
来自专栏别先生

|ERROR|ERROR: missing data for column "createtime" (seg3 slice1 192.168.66.23:40001 pid=33370)之mys

引发这个错误,并不是这个字段引起的错误,一般是这个字段临近的字段存在空格或者换行符引发的错误。

8220
来自专栏乐百川的学习频道

使用sqlite3 模块操作sqlite3数据库

Python内置了sqlite3模块,可以操作流行的嵌入式数据库sqlite3。如果看了我前面的使用 pymysql 操作MySQL数据库这篇文章就更简单了。因...

21570
来自专栏安恒网络空间安全讲武堂

Sqli_labs65关通关详解(下)

less-31 逻辑跟30关一样,只不过 $id = '"' .$id. '"'; $sql="SELECT * FROM users WHERE id=($i...

48280
来自专栏文渊之博

索引初探(三)

由于前一篇写的有点匆忙很多地方不是很简单,这一片再描述一些概念和细节。 首先,我们都知道在数据库中的存储分为两种结构,一是堆;二是B树。堆的数据是没有排序也就没...

19490
来自专栏Python研发

MySQL[一]

1·什么是MySQL丶Oracle丶SQLite丶Access丶MS SQL Server等?

14030
来自专栏程序员的SOD蜜

抽象SQL查询:SQL-MAP技术的使用

什么是参数化查询?我们来看百科对此的定义和示例: 一,定义 --------------------------------------------------...

321100
来自专栏JavaWeb

Mysql索引原理深入剖析

37230
来自专栏Java3y

Mybatis【配置文件】

映射文件 配置文件和映射文件还有挺多的属性我还没有讲的,现在就把它们一一补全 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为Ma...

34450
来自专栏技术碎碎念

Mybatis插入数据后返回主键id

20330

扫码关注云+社区

领取腾讯云代金券