1. 程式人生 > >用c語言實現 一個通訊錄(實現 增加、刪除、查詢、修改、顯示、清空功能)

用c語言實現 一個通訊錄(實現 增加、刪除、查詢、修改、顯示、清空功能)

源程式標頭檔案contact.h

#ifndef _CONTACT_H__

#define _CONTACT_H__
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 15
#define ADDR_MAX 50
#define PEO_MAX 1000

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct people
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}*pPeople;

typedef struct contact
{
	struct people dhb[PEO_MAX];
    int count;
}*pCon;

void add_peo(pCon pcon);
void del_peo(pCon pcon);
void search_peo(pCon pcon);
void modify_peo(pCon pcon);
void show_peo(pCon pcon);
void clear_peo(pCon pcon);

#endif
</pre>源程式函式段實現<p></p><p></p><p></p><pre name="code" class="cpp">#include "contact.h"

int find(pCon pcon,char * name)
{
	int i=0;
	while(i<pcon->count)
	{
		if(strcmp(name,pcon->dhb[i].name)==0)//查詢到匹配的姓名就輸出i
			return i;
		i++;
	}	
		return -1;
	
}

void add_peo(pCon pcon)//增加儲存人函式
{
	//判斷
	if(pcon->count==PEO_MAX)
	{
		printf("儲存空間已滿\n");
		return ;
	}
	printf("name:>");
	scanf("%s",(pcon->dhb[pcon->count]).name);
	printf("sex:>");
	scanf("%s",(pcon->dhb[pcon->count]).sex);
	printf("age:>");
	scanf("%d",&((pcon->dhb[pcon->count]).age));
	printf("tele:>");
	scanf("%s",(pcon->dhb[pcon->count]).tele);
	printf("addr:>");
	scanf("%s",(pcon->dhb[pcon->count]).addr);
	pcon->count++;
}
void del_peo(pCon pcon)//刪除函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要刪除的姓名:>");
	scanf("%s",tmpName);
	ret=find(pcon,tmpName);
	if(-1 != ret)
	{
		int j=ret;
		for(;j<pcon->count-1;j++)
		{
			pcon->dhb[j]=pcon->dhb[j+1];//用後面的資料覆蓋所要刪除的資料
		}
		pcon->count--;//儲存人數減少一位
	}
	else
	{
		printf("找不到所要刪除的資訊\n");
	}
}
void search_peo(pCon pcon)//查詢函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要查詢的姓名:>");
	scanf("%s",tmpName);
	ret = find(pcon,tmpName);
	if(ret != -1)
	{
		printf("%s\t%s\t%d\t%s\t%s\t\n",
			pcon->dhb[ret].name,
			pcon->dhb[ret].sex,
			pcon->dhb[ret].age,
			pcon->dhb[ret].tele,
			pcon->dhb[ret].addr);
		
	}
	else
	{
		printf("不存在所要查詢的資訊\n");
	}
}
void modify_peo(pCon pcon)//修改資料函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要修改的姓名:>");
	scanf("%s",tmpName);
	ret = find(pcon,tmpName);
	if(-1 != ret)//找到修改姓名之後重新賦值
	{
		printf("name:>");
			scanf("%s",(pcon->dhb[ret]).name);
			printf("sex:>");
			scanf("%s",(pcon->dhb[ret]).sex);
			printf("age:>");
			scanf("%d",&((pcon->dhb[ret]).age));
			printf("tele:>");
			scanf("%s",(pcon->dhb[ret]).tele);
			printf("addr:>");
			scanf("%s",(pcon->dhb[ret]).addr);
	}
}
void show_peo(pCon pcon)//顯示函式
{
	int i;
	for(i=0;i<pcon->count;i++) //顯示並列印說有聯絡人資訊
	{
		printf("%s\t%s\t%d\t%s\t%s\t\n",
			pcon->dhb[i].name,
			pcon->dhb[i].sex,
			pcon->dhb[i].age,
			pcon->dhb[i].tele,
			pcon->dhb[i].addr);
	}
}
void clear_peo(pCon pcon)//清除所有聯絡人資訊
{
	pcon->count = 0;
}
</pre><p></p><p>源程式主函式呼叫段</p><p></p><p></p><pre name="code" class="cpp">#include "contact.h"

void show_menu()
{
	printf("***************************\n");
	printf("*   1>add       2>del     *\n");
	printf("*   3>search    4>modify  *\n");
	printf("*   5>show      6>clear   *\n");
	printf("***************************\n");
}
int main()
{
	struct contact my_contact;
	int input=1;
	my_contact.count = 0;
	
	while(input)
	{
		show_menu();
		printf("please input:>");
		scanf("%d",&input);
		switch(input)//判斷並呼叫函式
		{
		case 1:
			{
				add_peo(&my_contact);
				system("cls");//呼叫清屏函式
			    break;
			}
		case 2:
			{
				del_peo(&my_contact);
				system("cls");//呼叫清屏函式
				break;
			}
		case 3:
			search_peo(&my_contact);
			break;
		case 4:
			{
				modify_peo(&my_contact);
				system("cls");//呼叫清屏函式
				break;
			}
		case 5:
			show_peo(&my_contact);
			break;
		case 6:
			clear_peo(&my_contact);
			break;
		default:
			break;
		}
	}
	return 0;
}

增加聯絡人函式
void add_peo(pCon pcon)//增加儲存人函式
{
	//判斷
	if(pcon->count==PEO_MAX)
	{
		printf("儲存空間已滿\n");
		return ;
	}
	printf("name:>");
	scanf("%s",(pcon->dhb[pcon->count]).name);
	printf("sex:>");
	scanf("%s",(pcon->dhb[pcon->count]).sex);
	printf("age:>");
	scanf("%d",&((pcon->dhb[pcon->count]).age));
	printf("tele:>");
	scanf("%s",(pcon->dhb[pcon->count]).tele);
	printf("addr:>");
	scanf("%s",(pcon->dhb[pcon->count]).addr);
	pcon->count++;
}


刪除聯絡人函式

void del_peo(pCon pcon)//刪除函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要刪除的姓名:>");
	scanf("%s",tmpName);
	ret=find(pcon,tmpName);
	if(-1 != ret)
	{
		int j=ret;
		for(;j<pcon->count-1;j++)
		{
			pcon->dhb[j]=pcon->dhb[j+1];//用後面的資料覆蓋所要刪除的資料
		}
		pcon->count--;//儲存人數減少一位
	}
	else
	{
		printf("找不到所要刪除的資訊\n");
	}
}


查詢聯絡人函式段

void search_peo(pCon pcon)//查詢函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要查詢的姓名:>");
	scanf("%s",tmpName);
	ret = find(pcon,tmpName);
	if(ret != -1)
	{
		printf("%s\t%s\t%d\t%s\t%s\t\n",
			pcon->dhb[ret].name,
			pcon->dhb[ret].sex,
			pcon->dhb[ret].age,
			pcon->dhb[ret].tele,
			pcon->dhb[ret].addr);
		
	}
	else
	{
		printf("不存在所要查詢的資訊\n");
	}
}


修改聯絡人函式段

void modify_peo(pCon pcon)//修改資料函式
{
	char tmpName[NAME_MAX];
	int ret=0;
	printf("請輸入你所要修改的姓名:>");
	scanf("%s",tmpName);
	ret = find(pcon,tmpName);
	if(-1 != ret)//找到修改姓名之後重新賦值
	{
		printf("name:>");
			scanf("%s",(pcon->dhb[ret]).name);
			printf("sex:>");
			scanf("%s",(pcon->dhb[ret]).sex);
			printf("age:>");
			scanf("%d",&((pcon->dhb[ret]).age));
			printf("tele:>");
			scanf("%s",(pcon->dhb[ret]).tele);
			printf("addr:>");
			scanf("%s",(pcon->dhb[ret]).addr);
	}
}


顯示聯絡人函式段
void show_peo(pCon pcon)//顯示函式
{
	int i;
	for(i=0;i<pcon->count;i++) //顯示並列印說有聯絡人資訊
	{
		printf("%s\t%s\t%d\t%s\t%s\t\n",
			pcon->dhb[i].name,
			pcon->dhb[i].sex,
			pcon->dhb[i].age,
			pcon->dhb[i].tele,
			pcon->dhb[i].addr);
	}
}

清空聯絡人函式段

void clear_peo(pCon pcon)//清除所有聯絡人資訊
{
	pcon->count = 0;
}