简单的通讯录——第一版

35 篇文章 1 订阅
5 篇文章 0 订阅

实现效果如下图:

此C语言通讯录用来存储1000个人的信息,每个成员的信息包括有姓名、性别、年龄、电话、住址。


这次我们C语言通讯录V1.0提供的功能有:

1、添加联系人

2、删除联系人

3、修改联系人

4、查看所有联系人的信息

5、以名字排序所有联系人

7、清空所有联系人

8、退出系统


总体过程实现:

首先定义一个结构体,存储其中一位成员的信息,信息包括姓名、性别、年龄、电话和住址。

通讯录所实现的各个功能进行封装函数。


看过了C语言扫雷的朋友应该知道有C语言扫雷有三个部分,所以C语言通讯录的实现也包括了三个部分

通讯录的实现包括三个部分:

1总体框架——头文件的实现

2具体的函数的功能实现——封装函数

3测试部分


头文件部分代码实现如下:

test.h

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

#pragma warning(disable:4996)
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 20
#define ADD_MAX 50
#define MAX_SIZE 1000

struct contact
{
	char name[NAME_MAX];
	char sex[SEX_MAX];
	int age;
	char tele[TELE_MAX];
	char address[ADD_MAX];
};

struct A {
	struct contact arr[MAX_SIZE];
	int i;
};

void Print_menu();
void Add(struct A*con);
int dedelete_contact(struct A*con);
int revise_contact(struct A *pcon);
void print_contact(struct A *con);
int find_position(struct A*pcon);
int find_contact(struct A*pcon);
void _init_contact(struct A *pcon);
void put_empty(struct A *pcon);
void sort_name(struct A *pcon);

函数部分代码实现如下:

contact.c

#include"test.h"

//添加联系人的信息
void Add(struct A*con)
{
	printf("请输入名字:");
	scanf("%s", con->arr[con->i].name);//char类型在scanf中不需要取地址符
	printf("请输入性别:");
	scanf("%s", con->arr[con->i].sex);
	printf("请输入年龄:");
	scanf("%d",&(con->arr[con->i].age));//int类型在scanf中需要输入取地址符
	printf("请输入电话:");
	scanf("%s", con->arr[con->i].tele);
	printf("请输入地址:");
	scanf("%s", con->arr[con->i].address);
	con->i++;
	printf("添加完毕!\n");
}

//删除联系人
int dedelete_contact(struct A*pcon)
{
	int i = 0;
	int ret = find_position(pcon);//通过查找函数的返回值来确定
	printf("删除联系人\n");
	if (ret != -1)
	{
		for (i = ret; i < pcon->i - 1; i++)//通过后面的数据覆盖前面的数据达到删除数据的目的
		{
			pcon->arr[i] = pcon->arr[i + 1];
		}
		pcon->i--;
		return 1;
	}
	else
		printf("没有找到此联系人,无法删除此联系人\n");
	return 0;
}

//修改联系人的信息
int revise_contact(struct A *pcon)
{
	int ret = find_position(pcon);
	if (ret != -1)
	{
		printf("请输入需要修改联系人的信息:\n");
		printf("请输入名字:");
		scanf("%s", pcon->arr[ret].name);
		printf("请输入性别:");
		scanf("%s", pcon->arr[ret].sex);
		printf("请输入年龄:");
		scanf("%d", &(pcon->arr[ret].age));
		printf("请输入电话号码:");
		scanf("%s", pcon->arr[ret].tele);
		printf("请输入地址:");
		scanf("%s", pcon->arr[ret].address);
		return 1;
	}
	else
		printf("没有找到需要修改的联系人!!\n");
	return 0;
}

//查看所有联系人的信息
void print_contact(struct A *con)
{
	int i = 0;
	printf("打印所有联系人的信息\n");
	printf("%-10s%-5s%-5s%-15s%-20s\n", "name", "sex", "age", "tele", "address");
	for (i = 0; i < con->i ; i++)
	{
		printf("%-10s%-5s%-5d%-15s%-20s\n", con->arr[i].name, con->arr[i].sex, con->arr[i].age,
			con->arr[i].tele, con->arr[i].address);
	}
	printf("\n");
}

//搜索联系人的位置
int find_position(struct A*pcon)
{
	int i = 0;
	char name[20];
	printf("请输入需要查找联系人的名字:");
	scanf("%s", name);
	for (i = 0; i < pcon->i; i++)
	{
		if (strcmp(pcon->arr[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}


//搜索联系人的信息
int find_contact(struct A*pcon)
{
	printf("查找联系人\n");
	int ret = find_position(pcon);
	if (ret != -1)
	{
		printf("姓名:%s\n",pcon->arr[ret].name);
		printf("性别:%s\n",pcon->arr[ret].sex);
		printf("年龄:%d\n",pcon->arr[ret].age);
		printf("电话号码:%s\n",pcon->arr[ret].tele);
		printf("地址:%s\n",pcon->arr[ret].address);
		return 1;
	}
	else
		printf("没有找到此联系人!!\n");
	return 0;
}

//清空所有联系人
void put_empty(struct A *pcon)
{
	printf("清空联系人\n");
	memset(pcon->arr, 0, 1000 * sizeof(struct contact));
	pcon->i = 0;
}

//以名字排序所有联系人
void sort_name(struct A *pcon)
{
	printf("排序\n");
	char ch = 0;
	int i = 0;
	int j = 0;
	printf("请选择排序方式(‘<’代表由z->a,'>'代表由a->z):");
	fflush(stdin);
	scanf("%c", &ch);
	int flag = 0;
	if (ch == '>')
	{

		for (i = 0; i < pcon->i; i++)
		{
			flag = 0;
			for (j = 0; j < pcon->i - i - 1; j++)
			{
				if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)>0)
				{
					struct contact tmp = { 0 };
					tmp = pcon->arr[j];
					pcon->arr[j] = pcon->arr[j + 1];
					pcon->arr[j + 1] = tmp;
					flag = 1;
				}

			}
			if (flag == 0)
				break;
		}
	}
	else if (ch == '<')
	{
		for (i = 0; i < pcon->i; i++)
		{
			flag = 0;
			for (j = 0; j < pcon->i - i - 1; j++)
			{
				if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)<0)
				{
					struct contact tmp = { 0 };
					tmp = pcon->arr[j];
					pcon->arr[j] = pcon->arr[j + 1];
					pcon->arr[j + 1] = tmp;
					flag = 1;
				}
			}
			if (flag == 0)
				break;
		}
	}
	else
		printf("选择错误,请返回重新选择:\n");
	printf("排序结束!\n");
}


void _init_contact(struct A *pcon)
{
	pcon->i = 0;
	memset(pcon->arr, 0, MAX_SIZE * sizeof(struct contact));
}

void Print_menu()
{
	printf("*************************************************\n");
	printf("*********      通讯录 v1.0             **********\n");
	printf("*********     1、添加联系人            **********\n");
	printf("*********     2、删除联系人            **********\n");
	printf("*********     3、修改联系人            **********\n");
	printf("*********     4、查看所有联系人        **********\n");
	printf("*********     5、搜索联系人的信息      **********\n");
	printf("*********     6、以名字排序所有联系人  **********\n");
	printf("*********     7、清空所有联系人        **********\n");
	printf("*********     8、退出系统              **********\n");
	printf("*************************************************\n");
}

测试部分代码如下:

test.c

#include "test.h"

void test()
{
	struct A con;
	int input = 1;
	_init_contact(&con);
	while(input)
	{
		Print_menu();
		printf("请选择序号:");
		scanf("%d", &input);
		switch(input)
		{
			case 1:
				Add(&con);
				break;
			case 2:
				dedelete_contact(&con);
				break;
			case 3:
				revise_contact(&con);
				break;
			case 4:
				print_contact(&con);
				break;
			case 5:
				find_contact(&con);
				break;
			case 6:
				sort_name(&con);
				break;
			case 7:
				put_empty(&con);
				break;
			case 8:
				break;
			default:
				break;
		}
	}

}

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


总结:虽然这是通讯录的第一个版本,但是让我对于函数的运用和结构体的运用有了一个很深刻的印象。从第一个小程序C语言扫雷到现在的C语言通讯录,我对于C语言的一些运用方面感觉更加的成熟,虽然写这个程序中遇到了一些麻烦,但是我希望各位都可以自己去想,多思考才可以学的更加深刻。最后,如有不对,请多指教。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用Java顺序表实现简易通讯录的代码: 首先,在Java中需要定义一个类来表示通讯录中的每一个联系人,这个类包含联系人的姓名和电话号码两个属性: ```java public class Contact { private String name; private String phoneNumber; public Contact(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } } ``` 接下来,我们用一个顺序表来存储所有的联系人信息: ```java public class ContactList { private Contact[] contacts; private int size; public ContactList(int capacity) { contacts = new Contact[capacity]; size = 0; } public boolean add(Contact contact) { if (size >= contacts.length) { return false; } contacts[size++] = contact; return true; } public boolean remove(int index) { if (index < 0 || index >= size) { return false; } for (int i = index; i < size - 1; i++) { contacts[i] = contacts[i + 1]; } contacts[--size] = null; return true; } public Contact get(int index) { if (index < 0 || index >= size) { return null; } return contacts[index]; } public int size() { return size; } } ``` 在这个类中,我们定义了一个Contact类型的数组来存储所有的联系人信息,同时还有一个size变量来记录当前已经存储的联系人数目。在这个类中,我们提供了以下几个方法: - add(Contact contact):向通讯录中添加一个联系人,如果当前已经存储的联系人数目已经达到了数组的容量,则添加失败。 - remove(int index):根据给定的下标从通讯录删除一个联系人,如果给定的下标越界,则删除失败。 - get(int index):根据给定的下标获取通讯录中指定位置的联系人,如果给定的下标越界,则返回null。 - size():获取当前通讯录中已经存储的联系人数目。 我们可以使用这个类来实现一个简单通讯录应用程序,这个程序可以让用户输入联系人的姓名和电话号码,然后将其添加到通讯录中,也可以让用户删除指定位置的联系人,还可以列出所有已经存储的联系人信息。下面是这个应用程序的代码: ```java import java.util.Scanner; public class ContactApp { public static void main(String[] args) { ContactList contactList = new ContactList(10); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请选择操作:"); System.out.println("1. 添加联系人"); System.out.println("2. 删除联系人"); System.out.println("3. 列出所有联系人"); System.out.println("4. 退出"); int choice = scanner.nextInt(); scanner.nextLine(); switch (choice) { case 1: System.out.println("请输入联系人姓名:"); String name = scanner.nextLine(); System.out.println("请输入联系人电话号码:"); String phoneNumber = scanner.nextLine(); Contact contact = new Contact(name, phoneNumber); if (contactList.add(contact)) { System.out.println("添加成功!"); } else { System.out.println("添加失败,通讯录已满!"); } break; case 2: System.out.println("请输入要删除联系人的下标:"); int index = scanner.nextInt(); if (contactList.remove(index)) { System.out.println("删除成功!"); } else { System.out.println("删除失败,下标越界!"); } break; case 3: System.out.println("所有联系人信息:"); for (int i = 0; i < contactList.size(); i++) { Contact c = contactList.get(i); System.out.println((i + 1) + ". " + c.getName() + " " + c.getPhoneNumber()); } break; case 4: System.out.println("谢谢使用!"); return; default: System.out.println("输入错误,请重新输入!"); break; } } } } ``` 这个应用程序首先创建了一个ContactList对象来存储所有的联系人信息。然后,它通过一个无限循环来等待用户输入选择,并根据用户的选择执行相应的操作。当用户选择退出程序时,程序会结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值