一個簡單的通訊錄。。。

 上課的時候老師佈置了一個作業,利用結構體實現一個簡單地通訊錄,這可是我們大一的時候學期末的課設題目啊,不過還好現在的水平比之前高了那麼一點。。


實現一個通訊錄;

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

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


提供方法:

1. 添加聯繫人信息

2. 刪除指定聯繫人信息

3. 查找指定聯繫人信息

4. 修改指定聯繫人信息

5. 顯示所有聯繫人信息

6. 清空所有聯繫人

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


這個是通訊錄的主要功能。


這個比較大,所以我們寫在三個文件裏。

首先是頭文件:

#pragma once//宏定義,避免文件多次編譯。。。

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


#define MAX_NAME 10//使用簡單宏定義可用宏代替一個在程序中經常使用的常量,方便程序的修改
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX 1000

//人信息的結構體的定義
typedef struct People
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int  age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}peo;

//人數的結構體定義
typedef struct Contact
{
	peo con[MAX];
	int count;
}contact;

//枚舉,在下面使用的switch case 語句中,不用關心函數的順序對齊,比較方便
enum OP
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	CLEAR,
	SORT
};

//函數聲明
void init_contact(contact *pcon);
void add_contact(contact *pcon);
void del_contact(contact *pcon);
void search_contact(contact *pcon);
void modify_contact(contact *pcon);
void show_contact(contact *pcon);
void clear_contact(contact *pcon);
void sort_contact(contact *pcon);


函數實現部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

//初始化通訊錄
void init_contact(contact *pcon)
{
	pcon->count = 0;
}

//添加聯繫人
void add_contact(contact *pcon)
{
	if (pcon->count >= MAX)
	{
		printf("電話本已滿,無法添加");
		return;
	}
	printf("請輸入名字:");
	scanf("%s", pcon->con[pcon->count].name);
	printf("請輸入性別:");
	scanf("%s", pcon->con[pcon->count].sex);
	printf("請輸入年齡:");
	scanf("%d", &pcon->con[pcon->count].age);
	printf("請輸入電話:");
	scanf("%s", pcon->con[pcon->count].tele);
	printf("請輸入地址:");
	scanf("%s", pcon->con[pcon->count].addr);
    pcon->count++;
    printf("添加成功!\n");
}

//內部查找函數
static int find(contact *pcon,const char *name)//name用const保護,名字不被改變
{
	int i = 0;
	for (i = 0; i < pcon->count; i++)
	{
		if (strcmp(name, pcon->con[i].name) == 0)
			return i;
	}
	return -1;
}

//刪除聯繫人
void del_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("請輸入要刪除的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon,name);
	if (ret == -1)
	{
		printf("要刪除的人不存在!\n");
		return;
	}
	else
	{
		for (i = ret; i < pcon->count - 1; i++)
		{
			pcon->con[i] = pcon->con[i + 1];//從要刪除的那位開始,後面依次向                                                         //前覆蓋
		}
	}
	pcon->count--;
	printf("刪除成功\n");
}

//查找聯繫人
void search_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("請輸入要查找的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon, name);
	if (ret == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		printf("%10s   %5s   %d    %12s    %20s\n" ,
			pcon->con[ret].name,
			pcon->con[ret].sex,
			pcon->con[ret].age,
			pcon->con[ret].tele,
			pcon->con[ret].addr);
	}
}

//修改聯繫人
void modify_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("請輸入要修改的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon, name);
	if (ret == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else
	{
		printf("請輸入名字:");
		printf("%s", pcon->con[ret].name);
		printf("請輸入性別:");
		printf("%s", pcon->con[ret].sex);
		printf("請輸入年齡:");
		printf("%d", pcon->con[ret].age);
		printf("請輸入電話:");
		printf("%s", pcon->con[ret].tele);
		printf("請輸入地址:");
		printf("%s", pcon->con[ret].addr);
	}
}

//顯示聯繫人
void show_contact(contact *pcon)
{
	int i = 0;
	printf("%10s   %5s   %5s    %12s    %20s\n",
		"name", "sex", "age", "tele", "addr");
	for (i = 0; i < pcon->count; i++)
	{
		printf("%10s   %5s   %5d    %12s    %20s\n",
			pcon->con[i].name,
			pcon->con[i].sex,
			pcon->con[i].age,
			pcon->con[i].tele,
			pcon->con[i].addr);
	}
}

//清空聯繫人
void clear_contact(contact *pcon)
{
	pcon->count = 0;
	printf("清空成功\n");
}

//排序聯繫人,此函數用的是冒泡排序
void sort_contact(contact *pcon)
{
	int i = 0;
	int j = 0;
	peo tmp;
	for (i = 0; i < pcon->count - 1; i++)
	{
		for (j = 0; j < pcon->count - 1 - i; j++)
		{
			if (strcmp(pcon->con[j].name, pcon->con[j + 1].name)>0)
			{
				tmp = pcon->con[j];
				pcon->con[j + 1] = pcon->con[j];
				pcon->con[j] = tmp;
			}
		}
	}
	printf("排序完成\n");
}


測試部分:

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"

//簡易菜單
void menu()
{
	printf("***************************************\n");
	printf("              通訊錄                   \n");
	printf("            1.添加                     \n");
	printf("            2.刪除                     \n");
	printf("            3.查找                     \n");
	printf("            4.修改                     \n");
	printf("            5.顯示                     \n");
	printf("            6.清空                     \n");
	printf("            7.以名字排序               \n");
	printf("            0.EXIT                     \n");
	printf("***************************************\n");
}


void test()
{
	contact mycon;
	init_contact(&mycon);
	int input = 1;
	
	while (input)
	{
		menu();
		printf("請輸入選擇:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			add_contact(&mycon);
			break;
		case DEL:
			del_contact(&mycon);
			break;
		case SHOW:
			show_contact(&mycon);
			break;
		case SEARCH:
			search_contact(&mycon);
			break;
		case MODIFY:
			modify_contact(&mycon);
			break;
		case CLEAR:
			clear_contact(&mycon);
			break;
		case SORT:
			sort_contact(&mycon);
			break;
		case EXIT:
			exit(0);
			break;
		default:
			break;
       }
    }
}

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

 


這是一個簡單的通訊錄,以後會有更好更嚴謹,功能更完善的呈獻給大家。希望大家能一起交流,寫的不好的能多多指正。(*^__^*)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章