通讯录第二版

address_list.h

#pragma once

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <errno.h>

#define DEFAULT_SZ 10
#define DEFAULT_INCREMENT 10

#define LENGTH
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 11
#define ADDR_MAX 30

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

typedef struct contact
{
	int num;
	int capacity;
	Info *data;
}contact;

void Initmy_contact(contact *pcon);//初始化结构体
void Check_capacity(contact *pcon);//检测容量
void Addcontact(contact *pcon);//添加联系人信息
void Delcontact(contact *pcon);//删除指定联系人信息
void Searchcontact(contact *pcon);//查找指定联系人信息
void Modifycontact(contact *pcon);//修改指定联系人信息
void Showcontact(contact *pcon);//显示所有联系人信息
void Emptycontact(contact *pcon);//清空所有联系人
void Sortcontact(contact *pcon);//以名字或年龄排序所有联系人
address_list.c
#define _CRT_SECURE_NO_WARNINGS 1

#include "address_list.h"

void Initmy_contact(contact *pcon)
{
	pcon->num = 0;
	pcon->capacity = DEFAULT_SZ;
	pcon->data = (Info *)calloc(DEFAULT_SZ, sizeof(Info));
}

void Check_capacity(contact *pcon)
{
	if(pcon->num == pcon->capacity)
	{
		Info *tmp = (Info *)realloc(pcon->data, (pcon->capacity + DEFAULT_INCREMENT)*sizeof(Info));
		if(tmp != NULL)
		{
			pcon->data = tmp;
			pcon->capacity+=DEFAULT_INCREMENT;
			printf("成功增容\n");
		}
		else
		{
			printf("%s\n", strerror(errno));
		}
	}
}

void Addcontact(contact *pcon)
{
	Check_capacity(pcon);
	printf("请输入名字:");
	scanf("%s", pcon->data[pcon->num].name);
	printf("请输入年龄:");
	scanf("%d", &(pcon->data[pcon->num].age));
	printf("请输入性别:");
	scanf("%s", pcon->data[pcon->num].sex);
	printf("请输入电话:");
	scanf("%s", pcon->data[pcon->num].tele);
	printf("请输入地址:");
	scanf("%s", pcon->data[pcon->num].addr);
	pcon->num++;

	printf("添加成功\n");
}

void Delcontact(contact *pcon)
{
	int i =0;
	int j =0;
	char name[NAME_MAX] = {0};
	if(pcon->num == 0)
	{
		printf("通讯录为空,无法删除!\n");
		return;
	}
	printf("请输入要删除的人名:");
	scanf("%s", name);
	for(i=0; i<pcon->num; i++)
	{
		if(strcmp(name, pcon->data[i].name) == 0)
		{
			break;
		}
	}
	if(i == pcon->num)
	{
		printf("要删除的人不存在\n");
		return;
	}
	for(j=i; j<pcon->num-1; j++)
	{
		pcon->data[j] = pcon->data[j+1];
	}
	pcon->num--;
	printf("删除成功\n");
}

void Searchcontact(contact *pcon)
{
	int i = 0;
	char name[NAME_MAX] = {0};
	printf("请输入你要找的人名:");
	scanf("%s", &name);
	for(i=0; i<pcon->num; i++)
	{
		if(strcmp(name, pcon->data[i].name) == 0)
		{
			printf("%15s  %4s  %5s  %11s  %10s\n",
				"名字", "性别", "年龄", "电话", "地址");
			printf("%15s  %4d  %5s  %11s  %10s\n",
				pcon->data[i].name,
				pcon->data[i].age,
				pcon->data[i].sex,
				pcon->data[i].tele,
				pcon->data[i].addr);
			return;
		}
	}
	printf("没有你要找的人\n");
}

void Modifycontact(contact *pcon)
{
	int i = 0;
	char name[NAME_MAX] = {0};
	printf("请输入要修改的人名:");
	scanf("%s", name);
	for(i=0; i<pcon->num; i++)
	{
		if(strcmp(name, pcon->data[i].name) == 0)
		{
			printf("请输入名字:");	
			scanf("%s", pcon->data[i].name);
			printf("请输入年龄:");
			scanf("%d", &pcon->data[i].age);
			printf("请输入性别:");
			scanf("%s", pcon->data[i].sex);
			printf("请输入电话:");
			scanf("%s", pcon->data[i].tele);
			printf("请输入地址:");
			scanf("%s", pcon->data[i].addr);

			printf("修改成功\n");
			return;
		}
	}
	printf("要修改的人不存在\n");
}

void Showcontact(contact *pcon)
{
	int i = 0;
	if(pcon->num == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	printf("%15s  %4s  %5s  %11s  %10s\n", 
		"名字", "年龄", "性别", "电话", "地址");
	for(i=0; i<pcon->num; i++)
	{
		printf("%15s  %4d  %5s  %11s  %10s\n",
			pcon->data[i].name,
			pcon->data[i].age,
			pcon->data[i].sex,
			pcon->data[i].tele,
			pcon->data[i].addr);
	}
}

void Sortcontact(contact *pcon)
{
	int i = 0;
	int j = 0;
	Info data = {0};
	int input = 0;
	if(pcon->num == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	printf("####1.按名字   2.按年龄####\n");
	scanf("%d", &input);
	switch(input)
	{
	case 1:
		{
			for(i=0; i<pcon->num-1; i++)
			{
				for(j=0; j<pcon->num-1-i; j++)
				{
					if(strcmp(pcon->data[j].name, pcon->data[j+1].name) > 0)
					{
						data = pcon->data[j+1];
						pcon->data[j+1] = pcon->data[j];
						pcon->data[j] = data;
					}
				}
			}
			printf("排序成功\n");
			return;
		}
	case 2:
		{
			for(i=0; i<pcon->num-1; i++)
			{
				for(j=0; j<pcon->num-1-i; j++)
				{
					if(pcon->data[j].age > pcon->data[j+1].age)
					{
						data = pcon->data[j+1];
						pcon->data[j+1] = pcon->data[j];
						pcon->data[j] = data;
					}
				}
			}
			printf("排序成功\n");
			return;
		}
	}
}

void Emptycontact(contact *pcon)
{
	memset(pcon->data, 0, (pcon->capacity*sizeof(Info)));
	pcon->num = 0;
	printf("成功清空!\n");
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1

#include "address_list.h"

void menu()
{
	printf("*****************************\n");
	printf("****1.add       2.del    ****\n");
	printf("****3.search    4.modify ****\n");
	printf("****5.show      6.empty  ****\n");
	printf("****7.sort      0.exit   ****\n");
	printf("*****************************\n");
}

enum option
{
	EXIT,
	ADD, 
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	EMPTY,
	SORT
};

int main()
{
	int input = 0;
	contact my_contact;
	Initmy_contact(&my_contact);
	do
	{
		menu();
		printf("请输入:");
		scanf("%d", &input);
		switch(input)
		{
		case ADD:
			Addcontact(&my_contact);
			break;
		case DEL:
			Delcontact(&my_contact);
			break;
		case SEARCH:
			Searchcontact(&my_contact);
			break;
		case MODIFY:
			Modifycontact(&my_contact);
			break;
		case SHOW:
			Showcontact(&my_contact);
			break;
		case EMPTY:
			Emptycontact(&my_contact);
			break;
		case SORT:
			Sortcontact(&my_contact);
			break;
		case EXIT:
			free(my_contact.data);
			my_contact.data = NULL;
			break;
		default:
			printf("输入错误!\n");
			break;
		}
	}while(input);
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您提供Ajax通讯录的完整。这个通讯录使用了Ajax技术,可以在不刷新整个页面的情况下实现添加、编辑、删除联系人等功能。下面是该应用的html、css、js代码: HTML代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax通讯录</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>Ajax通讯录</h1> <div class="form"> <h2>添加联系人</h2> <form id="add-contact-form"> <input type="text" id="name" placeholder="姓名" required> <input type="text" id="phone" placeholder="电话" required> <input type="text" id="email" placeholder="邮箱" required> <button type="submit">添加</button> </form> </div> <div class="contacts"> <h2>联系人列表</h2> <ul id="contact-list"> </ul> </div> </div> <script src="script.js"></script> </body> </html> ``` CSS代码: ```css * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Arial, sans-serif; background-color: #eee; } .container { max-width: 800px; margin: 0 auto; padding: 20px; background-color: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); } h1 { text-align: center; margin-bottom: 20px; } .form { margin-bottom: 20px; } .form h2 { margin-bottom: 10px; } .contacts h2 { margin-bottom: 10px; } form input { display: block; width: 100%; padding: 10px; margin-bottom: 10px; border: none; border-radius: 5px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } form button { display: block; width: 100%; padding: 10px; margin-top: 10px; background-color: #4CAF50; color: #fff; border: none; border-radius: 5px; cursor: pointer; } ul { list-style: none; margin: 0; padding: 0; } li { padding: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); } li span { font-weight: bold; } li button { background-color: #f44336; color: #fff; border: none; border-radius: 5px; cursor: pointer; float: right; } ``` JS代码: ```js const form = document.getElementById('add-contact-form'); const nameInput = document.getElementById('name'); const phoneInput = document.getElementById('phone'); const emailInput = document.getElementById('email'); const contactList = document.getElementById('contact-list'); function getContacts() { fetch('http://localhost:3000/contacts') .then(res => res.json()) .then(data => { contactList.innerHTML = ''; data.forEach(contact => { const li = document.createElement('li'); li.innerHTML = `<span>${contact.name}</span> - ${contact.phone} - ${contact.email} <button data-id="${contact.id}">删除</button>`; contactList.appendChild(li); }); }); } getContacts(); form.addEventListener('submit', e => { e.preventDefault(); const name = nameInput.value; const phone = phoneInput.value; const email = emailInput.value; fetch('http://localhost:3000/contacts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name, phone, email }) }) .then(res => res.json()) .then(data => { getContacts(); form.reset(); }); }); contactList.addEventListener('click', e => { if (e.target.tagName === 'BUTTON') { const id = e.target.dataset.id; fetch(`http://localhost:3000/contacts/${id}`, { method: 'DELETE' }) .then(res => res.json()) .then(data => { getContacts(); }); } }); ``` 这是一个简单的Ajax通讯录应用,您可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值