天天看點

C語言的簡易通訊錄

在我們的平常生活中常常會用到電話通訊錄,常用的功能有添加聯系人,删除,查找,删除,清空,顯示,按姓名排序等

現在我們就來實作以下要求的簡易通訊錄

實作一個通訊錄;

通訊錄可以用來存儲1000個人的資訊,每個人的資訊包括:

姓名、性别、年齡、電話、住址

提供方法:

1. 添加聯系人資訊

2. 删除指定聯系人資訊

3. 查找指定聯系人資訊

4. 修改指定聯系人資訊

5. 顯示所有聯系人資訊

6. 清空所有聯系人

7. 以名字排序所有聯系人

要實作通訊錄,就要用到結構體。可以建立兩個結構體,一個用來存放資料的,另一個把這些資料存放起來。

相當于先建立一個檔案夾用來存放下的小電影,檔案夾可以按照國家來建立很多個嘛,然後再把這麼多的檔案夾放在你的隐藏空間裡。這裡按照國家起名的檔案夾就是第一個結構體,這個隐藏空間就是第二個結構體。隐藏空間肯定要用一個計算存了多少檔案夾的計數器,是以第二個結構體要定義一個計數器。

具體的怎麼實作直接來看代碼,注釋裡有解釋

按子產品化來寫

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

void menu()
{
	printf("***************************************************\n");
	printf("***1、添加聯系人資訊       2、删除指定聯系人資訊***\n");
	printf("***3、查找指定聯系人資訊   4、修改指定聯系人資訊***\n");
	printf("***5、顯示所有聯系人資訊   6、清空所有聯系人    ***\n");
	printf("***7、以名字排序所有聯系人 0、exit              ***\n");
	printf("***************************************************\n");
}

enum OP	//用枚舉法列出選項,直覺
{
	EXIT,
	ADD,
	DEL,
	FIND,
	MOD,
	SHOW,
	EMPTY,
	SORT
};

void test()
{
	int input = 0;
	struct Contact my_con;	//建立一個struct Contact類型的對象
	my_con.sz = 0;	//将計數器清零
	InitContact(&my_con);	//初始化對象
	do
	{
		menu();
		printf("請輸入你的選擇:>");
		scanf("%d",&input);
		switch (input)
		{
		case ADD:
			add_con(&my_con);
			break;
		case DEL:
			del_con(&my_con);
			break;
		case FIND:
			find_con(&my_con);
			break;
		case MOD:
			modifty_con(&my_con);
			break;
		case SHOW:
			show_con(&my_con);
			break;
		case EMPTY:
			empty_con(&my_con);
			break;
		case SORT:
			sort_con(&my_con);
			break;
		case EXIT:
			printf("退出\n");
			break;
		default:
			printf("選擇錯誤\n");
			break;
		}
	}while(input);

}

int main()
{
	test();
	system("pause");
	return 0;
}
           

Contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "Contact.h"

void InitContact(Contact pcon)	//靜态初始化
{
	pcon->sz = 0;
	memset(pcon->data,0,sizeof(pcon->data));
}

int add_con(Contact pcon)	//添加資料
{
	if(pcon->sz == MAX)	//派出存滿
	{
		printf("通訊錄已滿\n");
		return -1;
	}
	{
	printf("請輸入姓名:>");
	scanf("%s",pcon->data[pcon->sz].name);
	printf("請輸入性别:>");
	scanf("%s",pcon->data[pcon->sz].sex);
	printf("請輸入年齡:>");
	scanf("%d",&pcon->data[pcon->sz].age);
	printf("請輸入電話号碼:>");
	scanf("%s",pcon->data[pcon->sz].tel);
	printf("請輸入位址:>");
	scanf("%s",pcon->data[pcon->sz].addr);
	printf("添加成功\n");}
	pcon->sz++;		//存一個計數器加1
	return 0;
}

int del_con(Contact pcon)	//要删除的資料
{
	int i = 0;
	int ret = 0;
	if(pcon->sz == 0)	//如果沒有資料則傳回-1
	{
		printf("通訊錄裡沒有資訊\n");
		return 0;
	}
	ret = find_con(pcon);	//先周遊一遍
	if(ret != -1)
	{
		for(i=ret; i<pcon->sz-1; i++);
		{
			pcon->data[i] = pcon->data[i+1];	//删除相當于把後面的資料依次向前覆寫前面的資料
		}
		pcon->sz--;		//删除之後計數器減1
		return 1;
	}
	else 
	{
		printf("沒有要删除的人\n");
		return -1;
	}
}

int find_con(Contact pcon)	//查找,為後面的其他選項提供周遊
{
	int i = 0;
	char name[NAME_MAX];
	printf("請輸入名字:>");
	scanf("%s",name);
	for(i=0; i<pcon->sz; i++)
	{
		if(strcmp(pcon->data[i].name,name)==0)
		{
			printf("%10s",pcon->data[i].name);
			printf("%4s",pcon->data[i].sex);
			printf("%4d",pcon->data[i].age);
			printf("%12s",pcon->data[i].tel);
			printf("%20s",pcon->data[i].addr);
			printf("\n");
			return i;
		}
	}
	return -1;
}

int modifty_con(Contact pcon)	//要修改的内容
{
	int i = 0;
	int ret = 0;
	if(pcon->sz == 0)	//如果沒資料則傳回
	{
		printf("沒有可修改的資料\n");
		return 0;
	}
	ret = find_con(pcon);	//先在周遊一遍,看有沒有要修改的資料
	if(ret != -1)
	{
		printf("請重新輸入要改的資料\n");
		printf("請輸入姓名:>");
		scanf("%s",pcon->data[pcon->sz].name);
		printf("請輸入性别:>");
		scanf("%s",pcon->data[pcon->sz].sex);
		printf("請輸入年齡:>");
		scanf("%d",pcon->data[pcon->sz].age);
		printf("請輸入電話:>");
		scanf("%s",pcon->data[pcon->sz].tel);
		printf("請輸入位址:>");
		scanf("%s",pcon->data[pcon->sz].addr);
		return 1;
	}
	else
	{
		printf("沒找到要修改的名字\n");
		return -1;
	}
}

int show_con(Contact pcon)	//将所有資訊按存入時間來顯示出來
{
	int i = 0;
	for(i=0; i<pcon->sz; i++)	//時間順序
	{
		printf("%10s",pcon->data[i].name);
		printf("%4s",pcon->data[i].sex);
		printf("%4d",pcon->data[i].age);
		printf("%12s",pcon->data[i].tel);
		printf("%20s",pcon->data[i].addr);
		printf("\n");
	}
	printf("\n");
	return 0;
}

int empty_con(Contact pcon)	//清空資料
{
	pcon->sz = 0;	//隻是将要計數器清零,實際資料還在(相當于位址變為起始位址指針)
	return 0;
}

int sort_con(Contact pcon)	//按姓名字母大小排序顯示
{
	int tmp = 0;
	int ret = 0;
	int i = 0;
	int j = 0;
	PeoInfo swp ;	//定義另一個PeoInfo的對象
	if(pcon->sz == 0)	//如果清單為空,則傳回
	{
		printf("沒有可靠的資料\n");
		return 0;
	}
	for(i=0; i<pcon->sz-1; i++)
	{
		for(j=0; j<pcon->sz-i-1; j++)
		{
			if(strcmp(pcon->data[j].name,pcon->data[j+1].name)>0)	//按照名字的大小,按照從小到大冒泡排序
			{
				swp = pcon->data[j];
				pcon->data[j] = pcon->data[j+1];
				pcon->data[j+1] = swp;
			}
		}
	}
	tmp = show_con(pcon);	//将排序後的列印出來
	return 0;
}
           

Contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#define _CRT_SECURE_NO_WARNINGS 1
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define NAME_MAX 20
#define SEX_MAX 4
#define TEL_MAX 12
#define ADDR_MAX 30
#define MAX 1000

typedef struct PeoInfo	//定義一個存一個資料的結構體
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tel[TEL_MAX];
	char addr[ADDR_MAX];
}PeoInfo;

typedef struct Contact	//定義一個能存放1000個類型為PeoInfo類型的結構體
{
	PeoInfo data[MAX];
	int sz;
};

typedef struct Contact *Contact;	//将結構體重命名為一個結構體指針,用來直接指向結構體内容
void InitContact(Contact pcon);
int add_con(Contact pcon);
int del_con(Contact pcon);
int find_con(Contact pcon);
int modifty_con(Contact pcon);
int show_con(Contact pcon);
int empty_con(Contact pcon);
int sort_con(Contact pcon);



#endif //__CONTACT_H__
           
C語言的簡易通訊錄
C語言的簡易通訊錄
C語言的簡易通訊錄
C語言的簡易通訊錄
C語言的簡易通訊錄

繼續閱讀