c语言 实现简易通讯录

头文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stddef.h>
#include<stdlib.h>
#define Max_name 20
#define Max_sex 10
#define Max_tele 12
#define Max_addr 30

#define inc 2
#define Max 3
struct str{
	char name[Max_name];
	int age;
	char sex[Max_sex];
	char tele[Max_tele];
	char addr[Max_addr];
}s[Max]; //创建空通讯录

struct str1 {
	struct str* s;//存放信息
	int sz; // 记录位置
	int a;//储存最大值
}s1;

enum stu {
	exit_,
	add,
	del,
	modify,
	query,
	print
};

void menu() ;
void dest(struct str1* p);
void inituser(struct str1 *p);
void adduser(struct str1* p);
void prints1(struct str1* p);
void deluser(struct str1* p);
void modifyuser(struct str1* p);
void queryuser(struct str1* p);

函数实现文件

#include"head.h"

void  menu()
{
	printf("----------------------------------\n");
	printf("|   1.add            2.del       |\n");
	printf("|   3.modify         4.query     |\n");
	printf("|   5.print          0.exit_      |\n");
	printf("----------------------------------\n");
}

void inituser(struct str1 *p)
{
	p->s=(struct str1*)malloc(sizeof(struct str1)*Max);
	if (p->s == NULL)
	{
		perror(inituser);
		return;
	}
	p->sz = 0;
	p->a = Max;
}

void dest(struct str1* p)
{
	free(p->s);
	p->s = NULL;
	p->a = 0;
	p->sz = 0;
}

void adduser(struct str1* p)
{
	if (p->sz==p->a)
	{
		struct str1* ptr = realloc(p->s, sizeof(struct str1*)*inc);
		if (ptr != NULL)
		{
			ptr = p->s;
			p->a += inc;
			return;
		}
		else
		{
			perror(adduser);
			return;
		}
	}
	printf("请输入姓名:");
	scanf("%s", p->s[p->sz].name);
	printf("请输入年龄:");
	scanf("%d", &(p->s[p->sz].age));
	printf("请输入性别:");
	scanf("%s", p->s[p->sz].sex);
	printf("请输入电话:");
	scanf("%s", p->s[p->sz].tele);
	printf("请输入地址:");
	scanf("%s", p->s[p->sz].addr);
	printf("添加成功\n");
	p->sz++;
}

void deluser(struct str1* p)
{
	int i = 0;
	if (p->s == 0)
	{
		printf("通讯录已全部删除");
		return;
	}
	printf("请输入删除的序号:\n");
	scanf("%d", &i);
	for (;i< p->sz; i++)
	{
		memmove(&(p->s[i - 1].name), &(p->s[i].name), sizeof(struct str));
	}
	p->sz--;
	printf("删除成功\n");
}

void modifyuser(struct str1* p)
{
	int i = 0;
	int j = 0;
	printf("请输入要修改的序号\n");
	scanf("%d", &i);
	if (i>p->sz)
	{
		printf("用户不存在\n");
		return;
	}
	printf("本条信息为:\n");
	printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n", p->s[i-1].name, p->s[i - 1].age, p->s[i - 1].sex, p->s[i - 1].tele, p->s[i - 1].addr);
	printf("请输入需要修改的属性\n 1.姓名  2.年龄  3.性别  4.电话   5.地址   0.退出:\n");
	scanf("%d", &j);
	enum stu {
		exit,
		name,
		age,
		sex,
		tele,
		addr
	};
	switch (j)
	{
	case exit:
		break;
	case name:
		printf("请输入修改之后的名字:\n");
		scanf("%s", p->s[i - 1].name);
		break;
	case age:
		printf("请输入修改之后的年龄:\n");
		scanf("%d", &(p->s[i - 1].age));
		break;
	case sex:
		printf("请输入修改之后的性别:\n");
		scanf("%s", p->s[i - 1].sex);
		break;
	case tele:
		printf("请输入修改之后的电话:\n");
		scanf("%s", p->s[i - 1].tele);
		break;
	case addr:
		printf("请输入修改之后的地址:\n");
		scanf("%s", p->s[i - 1].addr);
		break;
	default:
		break;
	}
	printf("修改完成\n");
}

void queryuser(struct str1* p)
{
	
	int i = 0;
	int j = 0;
	printf("请输入查询方式:\n");
	printf("请输入需要查询的属性\n 1.姓名  2.序号  0.退出:\n");
	scanf("%d", &i);
	enum stu {
		exit,
		name,
		num
	};
	switch (i)
	{
	case exit:
		break;
	case name:
		printf("请输入查询的名字\n");
		char name[Max_name];
		scanf("%s", name);
		for (j = 0; j < p->sz; j++)
		{
			if (strcmp(name, p->s[j].name) == 0)
			{
				printf("查找结果为:\n");
				printf("姓名%-20s\t年龄%-5d\t性别%-5s\t%电话-12s\t地址%-20s\n", p->s[j].name, p->s[j].age, p->s[j].sex, p->s[j].tele, p->s[j].addr);
			}
		}
		break;
		/*
	case age:
		break;
	case sex:     //这几种就不写了,把上面的name改成相应的属性就行了;
		break;
	case tele:
		break;
	case addr:
		break;
		*/
	case num:
		printf("请输入查询序号\n");
		int j = 0;
		scanf("%d", &j);
		printf("查询结果为:\n");
		printf("姓名%-20s\t年龄%-5d\t性别%-5s\t电话%-12s\t地址%-20s\n", p->s[j-1].name, p->s[j-1].age, p->s[j - 1].sex, p->s[j - 1].tele, p->s[j - 1].addr);
	default:
		break;
	}
}

void prints1(struct str1* p)
{
	int i = 0;
	printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","姓名","年龄", "性别","电话","地址");
	for (i = 0; i < p->sz; i++)
	{
		printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n", p->s[i].name, p->s[i].age, p->s[i].sex, p->s[i].tele, p->s[i].addr);
	}
}

测试文件

#include"head.h"

int sz = 0;//通讯录当前共有的元素
int main()
{
	int i = 0;
	inituser(&s1);//初始化通讯录
	do
	{
		menu();
		printf("请输入选项\n");
		scanf("%d", &i);
		switch(i)
		{
		case add:
			adduser(&s1);
			break;
		case del:
			deluser(&s1);
			break;
		case modify:
			modifyuser(&s1);
			break;
		case query:
			queryuser(&s1);
			break;
		case print:
			prints1(&s1);
			break;
		case exit_:
			dest(&s1);
			break;
		default:
			break;
		}
	} while (i);
	return 0;
}

比较简陋的通讯录,仓促完成,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值