通讯录管理系统

 先上图,展示:

 又没有想法?

分析:

  • 一个菜单,八个功能
  • switch分支语句
  • 分文件式编写

utili.h

公用的头文件

#ifndef _UTILI_H_
#define _UTILI_H_

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

#define _CRT_SECURE_NO_WARNINGS
#endif

contact.h

通讯录头文件,必要的声明

#ifndef _CONTACT_H_
#define _CONTACT_H_

#include"utili.h"

#define	MAX_NAME_SIZE 256
#define MAX_TEL_SIZE 12
#define MAX_ADDRESS_SIZE 256
#define MAX_SEX_SIZE 3

#define MAX_CONTACT_SIZE 256

//定义人员信息结构体
typedef struct PersonInfo
{
	char name[MAX_NAME_SIZE];
	char sex[MAX_SEX_SIZE];
	char address[MAX_ADDRESS_SIZE];
	char tel[MAX_TEL_SIZE];
}PersonInfo;

//定义通讯录结构体
typedef struct Contact
{
	PersonInfo pers[MAX_CONTACT_SIZE];
	int capacity;
	int size;
}Contact;

//枚举
enum { QUIT, ADD, DEL, MODIFY, FIND, SORT, CLEAR, SHOW };

//函数声明
void initContact(Contact* con);
bool IsFull(Contact* con);
bool IsEmpty(Contact* con);
int FindByName(Contact* con, char* name);
void add(Contact* con);
void del(Contact* con);
void modify(Contact* con);
void find(Contact* con);
void sort(Contact* con);
void clear(Contact* con);
void show(Contact* con);
void quit(Contact* con);

#endif

contact.c

函数功能的实现

 contactmain.c

主函数

主函数 

#include"contact.h"

int main(int argc,char *argv[])
{
	system("title 通讯录管理系统");
	system("mode con cols=36 lines=20");
	system("color E0");
	Contact con;
	initContact(&con);

	int select=1;

	while (select)
	{
		printf("************ 通 讯 录 ************\n");
		printf("*  [1] 增加             [2] 删除 *\n");
		printf("*  [3] 修改             [4] 查找 *\n");
		printf("*  [5] 排序             [6] 清除 *\n");
		printf("*  [7] 显示             [0] 退出 *\n");
		printf("**********************************\n");
		printf("请输入:>");
		//输入及输入判定
		while (scanf("%d", &select) != 1 || select>7)
		{
			char ch;
			while ((ch = getchar()) != '\n')
			{
				continue;
			}
			printf("输入功能不在服务区!\n重新输入:>");
		}
		//switch分支语句
		switch (select)
		{
		case ADD:
			//增加
			add(&con);
			break;
		case DEL:
			del(&con);
			break;
		case MODIFY:
			modify(&con);
			break;
		case FIND:
			find(&con);
			break;
		case SORT:
			sort(&con);
			break;
		case CLEAR:
			clear(&con);
			break;
		case SHOW:
			show(&con);
			break;
		}
		
	}
}

方法

初始化contact结构体

void initContact(Contact *con)
{
	memset(con->pers, 0, sizeof(PersonInfo) * MAX_CONTACT_SIZE);
	con->capacity = MAX_CONTACT_SIZE;
	con->size = 0;
}

 判”满“

bool IsFull(Contact* con)
{
	return con->size >= con->capacity;
}

判”空“

bool IsEmpty(Contact* con)
{
	return (con->size == 0);
}

 

添加数据

void add(Contact* con)
{
	if (IsFull(con))
	{
		printf("都满了,还想加[~ _~]?\n");
		return ;
	}
	int count = 0;
	printf("输入添加数据个数:>\n");
	scanf("%d", &count);
	while (--count >= 0)
	{
		printf("------------------------------------\n");
		printf("输入姓名:>");
		scanf("%s", con->pers[con->size].name);
		printf("输入性别:>");
		scanf("%s", con->pers[con->size].sex);
		printf("输入住址:>");
		scanf("%s", con->pers[con->size].address);
		printf("输入电话:>");
		scanf("%s", con->pers[con->size].tel);
		con->size++;
	}
	printf("添加成功!\n");
}

删除数据

根据名字找下标

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

删除 

void del(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("都没朋友还想删谁,快去加盆友!加了再删\n");
		return;
	}
	char name[MAX_NAME_SIZE];
	printf("输入删除姓名:>");
	scanf("%s", name);
	int index = FindByName(con, name);
	if (index == -1)
	{
		printf("这个盆友还不认识呢[^o^]\n");
		return;
	}
	for (int i = index; i < con->size-1; i++)
	{
		con->pers[i] = con->pers[i + 1];
	}
	con->size--;
}

修改数据

void modify(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("建议先交一个盆友,再修改信息,不然没得改!\n");
		return;
	}
	char name[MAX_NAME_SIZE];
	printf("输入修改姓名:>");
	scanf("%s", name);
	int index = FindByName(con, name);
	if (index == -1)
	{
		printf("这个盆友还不认识呢[^o^]\n");
		return;
	}
	printf("原信息;>");
	printf("%-8s%-6s%-6s%-13s\n",
		con->pers[index].name,
		con->pers[index].sex,
		con->pers[index].address,
		con->pers[index].tel);
	printf("选择要修改的信息:>(1-名字 2-性别 3-住址 4-电话 0-不想改了)\n");
	int select = 0;
	while (scanf("%d", &select) != 1||select>4)
	{
		char ch;
		while ((ch = getchar()) != '\n')
		{
			continue;
		}
		printf("输入的功能不在服务区!\n重新输入:>");
	}
	printf("输入修改值:>");
	switch (select)
	{
	case 1:
			scanf("%s", con->pers[index].name);
			break;
	case 2:
		scanf("%s", con->pers[index].sex);
		break;
	case 3:
		scanf("%s", con->pers[index].address);
		break;
	case 4:
		scanf("%s", con->pers[index].tel);
		break;
	case 0:
		return;

	}
}

查找数据

void find(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("都没朋友还想找谁,快去加盆友!!!\n");
		return;
	}
	char name[MAX_NAME_SIZE];
	printf("输入查找姓名:>");
	scanf("%s", name);
	int index = FindByName(con, name);
	if (index == -1)
	{
		printf("这个盆友还不认识呢[^o^]\n");
		return;
	}
	printf("%-8s%-6s%-6s%-13s\n",
		con->pers[index].name,
		con->pers[index].sex,
		con->pers[index].address,
		con->pers[index].tel);
}

数据排序

void sort(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("是空的不用排,下一个......\n");
		return;
	}
	for (int i = 0; i < con->size - 1; i++)
	{
		for (int j = 0; j < con->size - i - 1; j++)
		{
			if (strcmp(con->pers[j].name, con->pers[j + 1].name))
			{
				PersonInfo ptmp = con->pers[j];
				con->pers[j] = con->pers[j + 1];
				con->pers[j + 1] = ptmp;
			}
		}
	}
	printf("排完了!\n");
}

数据清除

void clear(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("我说它都不用清除你信吗?你得信!因为是空的(^v^)\n ");
		return;
	}
	printf("着重考虑,里面可能有非常重要的人!!!(i_i)\n");
	printf("接着删就输13,输别的就算返悔.\n");
	int select = 0;
	while (scanf("%d", &select) != 1)
	{
		char ch;
		while ((ch = getchar()) != '\n')
		{
			continue;
		}
		break;
	}
	if (select == 13)
	{
		con->size = 0;
		printf("删完了,全删完了\n");
		return;
	}
	printf("就知道你不想删^v^\n");	
}

展示数据

void show(Contact* con)
{
	if (IsEmpty(con))
	{
		printf("都是空的还有展示的必要吗?\n");
		return;
	}
	for (int i = 0; i < con->size; i++)
	{
		printf("%-8s%-6s%-6s%-13s\n",
			con->pers[i].name,
			con->pers[i].sex,
			con->pers[i].address,
			con->pers[i].tel);
	}
}

退出

void quit(Contact* con)
{

}

改进

功能函数 结构类似

使用转移表(指针进阶学习

#include"contact.h"

int main(int argc,char *argv[])
{
	system("title 通讯录管理系统");
	system("mode con cols=36 lines=20");
	system("color E0");
	Contact con;
	initContact(&con);

	int select=1;

	void (*pfun[8])(Contact*) = {quit,add,del,modify,find,sort,clear,show };

	while (select)
	{
		printf("************ 通 讯 录 ************\n");
		printf("*  [1] 增加             [2] 删除 *\n");
		printf("*  [3] 修改             [4] 查找 *\n");
		printf("*  [5] 排序             [6] 清除 *\n");
		printf("*  [7] 显示             [0] 退出 *\n");
		printf("**********************************\n");
		printf("请输入:>");
		//输入及输入判定
		while (scanf("%d", &select) != 1 || select>7)
		{
			char ch;
			while ((ch = getchar()) != '\n')
			{
				continue;
			}
			printf("输入功能不在服务区!\n重新输入:>");
		}
		//switch分支语句
		/*switch (select)
		{
		case ADD:
			//增加
			add(&con);
			break;
		case DEL:
			del(&con);
			break;
		case MODIFY:
			modify(&con);
			break;
		case FIND:
			find(&con);
			break;
		case SORT:
			sort(&con);
			break;
		case CLEAR:
			clear(&con);
			break;
		case SHOW:
			show(&con);
			break;
		}*/
		
		//转移表
		(*pfun[select])(&con);
		system("cls");
		
	}
}

完成!

最难不过坚持!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb通讯录管理系统是一种基于JavaWeb技术开发的通讯录管理系统。它主要用于管理个人或企业的联系人信息,实现通讯录的增删改查功能。 该系统采用B/S架构,用户只需在浏览器中输入系统的URL地址即可访问系统,无需安装本地软件。同时,系统采用Java技术进行开发,具有良好的跨平台性和可移植性。 通讯录管理系统的主要功能包括: 1. 用户登录与身份验证:用户通过输入正确的用户名和密码进行登录系统系统对用户进行身份验证,以保证系统的安全性。 2. 通讯录信息的添加与修改:用户可以添加或修改联系人的信息,包括姓名、电话号码、电子邮件等信息。系统将存储、管理并维护这些联系人信息。 3. 通讯录信息的查询与展示:用户可以通过姓名或其他关键字进行查询,系统将根据查询条件进行联系人的检索,并将检索到的联系人信息展示给用户。 4. 通讯录信息的删除:用户可以删除不需要的联系人信息,系统将从数据库中删除相应的记录。 5. 导入与导出联系人信息:用户可以将联系人信息导入系统,或将系统中的联系人信息导出到本地,实现信息的灵活交互。 6. 用户管理系统支持管理员对用户的管理,包括用户的注册、修改密码等功能。 总之,JavaWeb通讯录管理系统是一款功能强大、易于使用的通讯录管理工具,可以帮助用户高效地管理和维护联系人信息,提高工作效率和信息管理的便捷性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值