基于顺序表基础实现通讯录项目

基于顺序表基础实现通讯录项目

前言

Hello,亲爱的CSDN的小伙伴们,你们好!基于上一篇博客的基础上,今天我来带领大家实现通讯录项目,上一篇博客在这里哦!顺序表的实现

通讯录的实现

顺序表的实现在上一篇博文中,这里就不再过多讲解了。
我们知道顺序表可以插入内置类型,也可以插入自定义类型。实现通讯录项目,我们要自定义联系人系列内容,再一条一条的插入顺序表中,就构成了我们所知的通讯录。
接下来是代码的实现

通讯录的头文件

#define NAME_MAX  20
#define GENDER_MAX  10
#define AGE_MAX  20
#define TEL_MAX  20
#define ADDR_MAX  100
typedef struct personInfo
{
	char name[NAME_MAX];
	char gender[GENDER_MAX];
	int age[AGE_MAX];
	char tel[TEL_MAX];
	char addr[ADDR_MAX];
}personInfo;

typedef struct SeqList Contract;

//通讯录的初始化
void ContractInit(Contract* con);
//通讯录的销毁
void ContractDeatory(Contract* con);
//通讯录的添加
void ContractAdd(Contract* con);
//通讯录的删除
void ContractDel(Contract* con);
//通讯录的修改
void ContractModefy(Contract* con);
//通讯录的展示
void ContractShow(Contract* con);
//通讯录的查找
void ContractFind(Contract* con);

通讯录的源文件

#include"Contract.h"
#include"SeqList.h"
void ContractInit(Contract* con)
{
	SLInit(con);
}

void ContractDeatory(Contract* con)
{
	SLDestory(con);
}

void ContractAdd(Contract* con)
{
	personInfo info;
	printf("请输入要添加的联系人姓名\n");
	scanf("%s", info.name);
	printf("请输入要添加的联系人性别\n");
	scanf("%s", info.gender);
	printf("请输入要添加的联系人年龄\n");
	scanf("%s", &info.age);
	printf("请输入要添加的联系人电话\n");
	scanf("%s", info.tel);
	printf("请输入要添加的联系人地址\n");
	scanf("%s", info.addr);

	SLPushback(con, info);

}

int FindByName(Contract* con, char name[])
{
	for (int i = 0; i < con->size; i++)
	{
		if (0 == strcmp(con->arr[i].name, name))
		{
			return i;
		}
		else
			return -1;
	}
}

void ContractDel(Contract* con)
{
	//要删除的数据必须要存在、
	//查找
	char name[NAME_MAX];
	printf("请输入要删除的联系人姓名:\n");
	scanf("%s", name);
	int find = FindByName(con, name);
	if (find < 0)
	{
		printf("要删除的数据不存在\n");
		return;
	}
	SLErase(con, find);
	printf("删除成功\n");
}
void ContractShow(Contract* con)
{
	printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
	for (int i = 0; i < con->size; i++)
	{
		printf("%s %s %d %s %s\n",con->arr[i].name,con->arr[i].gender,con->arr[i].age,con->arr[i].tel,con->arr[i].addr);
	}
}

void ContractModefy(Contract* con)
{
	char name[NAME_MAX];
	printf("请输入要修改的联系人姓名:\n");
	scanf("%s", name);
	int find = FindByName(con, name);
	if (find < 0)
	{
		printf("要修改的数据不存在\n");
		return;
	}
	printf("请输入新的联系人姓名:\n");
	scanf("%s", con->arr[find].name);
	printf("请输入新的联系人性别:\n");
	scanf("%s", con->arr[find].gender);
	printf("请输入新的联系人年龄:\n");
	scanf("%d", con->arr[find].age);
	printf("请输入新的联系人电话:\n");
	scanf("%s", con->arr[find].tel);
	printf("请输入新的联系人地址:\n");
	scanf("%s", con->arr[find].addr);
	printf("修改成功\n");
}

void ContractFind(Contract* con)
{
	//查找
	char name[NAME_MAX];
	printf("请输入要查找的联系人姓名:\n");
	scanf("%s", name);
	int find = FindByName(con, name);
	if (find < 0)
	{
		printf("要查找的数据不存在\n");
		return;
	}
	printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");
		printf("%s %s %d %s %s\n", con->arr[find].name, con->arr[find].gender, con->arr[find].age, con->arr[find].tel, con->arr[find].addr);


}

需要注意的是,这里的头文件和源文件需要结合顺序表的实现一起写,大家可以翻稳定主页寻找码源。
(完)

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要定义通讯录的联系人实体类: ```java public class Contact { private String name; private String phoneNumber; private String email; public Contact(String name, String phoneNumber, String email) { this.name = name; this.phoneNumber = phoneNumber; this.email = email; } public String getName() { return name; } public String getPhoneNumber() { return phoneNumber; } public String getEmail() { return email; } @Override public String toString() { return "Name: " + name + ", Phone number: " + phoneNumber + ", Email: " + email; } } ``` 接下来,我们需要实现顺序类: ```java public class ContactList { private Contact[] contacts; private int size; public ContactList(int capacity) { contacts = new Contact[capacity]; size = 0; } public int getSize() { return size; } public void addContact(Contact contact) { if (size == contacts.length) { throw new RuntimeException("Contact list is full"); } contacts[size++] = contact; } public Contact getContact(int index) { if (index < 0 || index >= size) { throw new RuntimeException("Invalid index"); } return contacts[index]; } public void removeContact(int index) { if (index < 0 || index >= size) { throw new RuntimeException("Invalid index"); } for (int i = index; i < size - 1; i++) { contacts[i] = contacts[i + 1]; } contacts[size - 1] = null; size--; } public void updateContact(int index, Contact contact) { if (index < 0 || index >= size) { throw new RuntimeException("Invalid index"); } contacts[index] = contact; } public Contact[] getAllContacts() { Contact[] result = new Contact[size]; for (int i = 0; i < size; i++) { result[i] = contacts[i]; } return result; } } ``` 然后,我们可以在主函数中使用顺序类来实现通讯录: ```java public static void main(String[] args) { ContactList contactList = new ContactList(10); contactList.addContact(new Contact("Alice", "1234567890", "alice@example.com")); contactList.addContact(new Contact("Bob", "2345678901", "bob@example.com")); contactList.addContact(new Contact("Charlie", "3456789012", "charlie@example.com")); contactList.removeContact(1); contactList.updateContact(0, new Contact("Alice", "0987654321", "alice@example.com")); Contact[] contacts = contactList.getAllContacts(); for (Contact contact : contacts) { System.out.println(contact); } } ``` 输出结果: ``` Name: Alice, Phone number: 0987654321, Email: alice@example.com Name: Charlie, Phone number: 3456789012, Email: charlie@example.com ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值