数据结构课设—C语言实现通讯录管理系统(顺序表实现)

这篇具有很好参考价值的文章主要介绍了数据结构课设—C语言实现通讯录管理系统(顺序表实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个项目是我大一时期数据结构的课程设计,在我潜心研究下出来的,对于当时的我来说算是非常满意啦,哈哈哈哈哈哈哈哈哈哈☆*: .。. o(≧▽≦)o .。.:*☆

目录

一、引言

1.目的:

2.意义:

3.主要任务:

4.程序功能:

5.编译工具:

二、正文

1.系统模块:

2.算法流程图:

3.各个模块的实现:

(1)定义结构体

①定义xx(信息)结构体包含:

②定义结构体xxb(信息表)包含:

③实现代码:

(2)主函数main() 

①主函数模块main()的功能是:

   ②主函数模块main()流程如图(3)所示:

   ③主函数模块main()实现代码: 

(3)选单模块Menu() 

①选单模块Menu()的功能是:

②选单模块Menu()实现代码:

(4)退出选单模块Quit() 

①退出选单模块Quit()的功能是:

②退出选单模块Quit()实现代码:

(5)创建数据模块Create() 

①创建数据模块Create()的功能是:

②创建数据模块Create()的流程如图(4)所示:

③创建数据模块Create()实现代码:

(6)添加数据模块Add() 

①添加数据模块Add()的功能是:

②添加数据模块Add()的流程如图(5)所示:

③添加数据模块Add()实现代码:

(7)查询模块Find() 

①查询模块Find()的功能是:

②查询模块Find()的流程如图(6)所示:

③查询模块Find()实现代码:

(8)修改模块Alter() 

①修改模块Alter()的功能是:

②修改模块Alter()的流程如图(7)所示:

③修改模块Alter()实现代码:

(9)删除模块Delete() 

①删除模块Delete()的功能是:

②删除模块Delete()的流程如图(8)所示:

③删除模块Delete()实现代码:

(10)显示模块List() 

①显示模块List()的功能是:

②显示模块List()的流程如图(9)所示:

③显示模块List()实现代码:

(11)统计模块nv( ) 

①统计模块nv( )的功能是:

②统计模块nv( )的流程如图(10)所示:

③统计模块nv( )实现代码:

(12)显示公司信息模块ti( ) 

①显示公司信息模块ti( )的功能是:

②显示公司信息模块ti( )流程如图(11)所示:

③显示公司信息模块ti( )实现代码:

三、结论

四、参考文献

一、引言

1.目的:

(1)训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

2.意义:

(1)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

(2)训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养严谨的科学态度和良好的工作作风。

3.主要任务:

使用顺序表实现对通讯录信息的插入、查找、删除、修改、输出等操作,以及统计通讯录中男女比例和显示出同一公司中的人的信息。

4.程序功能:

(1)显示提示菜单。

(2)创建顺序表。

(3)创建通讯人信息。

(4)添加通讯人信息。

(5)查找指定联系人信息。

(6)修改指定联系人信息。

(7)删除指定联系人信息。

(8)显示所有联系人信息。

(9)统计通讯录中男女比例。

(10)显示出同一公司中的人的信息。

(11)退出通讯录管理系统。

5.编译工具:

编程语言:C语言。

编译环境:Visual Studio 2022。

二、正文

1.系统模块:

系统模块主要是用选单模块来调用各个小模块来实现任务要求的功能,根据任务要求,下面将系统功能进行详细设计划分,具体结构如图(1)所示。

 大一c语言通讯录管理系统,C,数据结构,c语言

图(1) 系统模块图

2.算法流程图:

本系统通过main()函数进行对menu()调用,然后通过menu()利用Switch函数实现

利用其它函数进行相关操作,具体流程如图(2)所示

大一c语言通讯录管理系统,C,数据结构,c语言

图(2) 算法流程图

3.各个模块的实现:

(1)定义结构体

①定义xx(信息)结构体包含:

编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20])、公司名称(char address[50])

②定义结构体xxb(信息表)包含:

单个信息(xx grxx[MaxLen])

表中共有多少信息(int length)

③实现代码:

typedef struct {
	char num[10];
	char name[10];
	char sex[10];
	char phone[20];
	char address[50];
}xx;
typedef struct
{
	xx grxx[MaxLen];
	int length;
}xxb;

(2)主函数main()

①主函数模块main()的功能是:

根据选单的选项调用各函数,并完成相应的功能。运用if判断用户输入的数值是否正确,用goto实现输错数值后的重新赋值,然后运用switch函数进行功能的选择。

②主函数模块main()流程如图(3)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(3) 主函数模块main()流程图

③主函数模块main()实现代码:      

int main()
{
	xxb L;
	int i;
	InitList(&L);
	while (1) {
		Menu();
		printf("请输入您想要的功能:(1-9)\t");
	loop:scanf_s(" %d", &i);
		if (i <= 0 || i >= 10)
		{
			system("cls");
			Menu();
			printf("未设定功能,请重新输入:");

			goto loop;
		}
		switch (i)
		{
		case 1:
			Create(&L);
			break;
		case 2:
			Add(&L);
			break;
		case 3:
			Find(L);
			break;
		case 4:
			Alter(&L);
			break;
		case 5:
			Delete(&L);
			break;
		case 6:
			List(L);
			break;
		case 7:
			nv(L);
			break;
		case 8:
			ti(L);
			break;
		case 9:
			Quit();
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}

(3)选单模块Menu()

①选单模块Menu()的功能是:

显示提示选单。使用printf函数进行界面排版。

②选单模块Menu()实现代码:

void Menu()
{
	printf("\t\t\t《通讯录管理系统菜单》\n");
	printf(">————————————————————————————————\n");
	printf("*\t1.新建联系人\n");
	printf("*\t2.添加联系人信息\n");
	printf("*\t3.查找指定联系人信息\n");
	printf("*\t4.修改指定联系人\n");
	printf("*\t5.删除指定联系人\n");
	printf("*\t6.显示全部联系人信息\n");
	printf("*\t7.显示本通讯录男女比例\n");
	printf("*\t8.显示出同一公司中的人的信息\n");
	printf("*\t9.退出菜单\n");
	printf(">————————————————————————————————\n");
}

(4)退出选单模块Quit()

①退出选单模块Quit()的功能是:

退出选单。运用exit()函数直接退出选单。

②退出选单模块Quit()实现代码:

void Quit()
{
	exit(0);
}

(5)创建数据模块Create()

①创建数据模块Create()的功能是:

创建新的数据记录。先判断通讯录是否满员,再进行输入内容,对编号进行判断是否重复,在输入其他数据,最后询问是否继续添加,使用循环结构进行多次写入。

②创建数据模块Create()的流程如图(4)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(4) 创建数据模块Create()流程图

③创建数据模块Create()实现代码:

void Create(xxb* L)
{
	xx x;
	char ch;
	int n = 0, i;
	do
	{
		printf(">————————————————————————————————\n");
		if (L->length == MaxLen)
		{
			printf("通讯录已满!\n");
			system("pause");
			system("cls");
			return;
		}
		printf("请输入通讯者的编号:");
		fflush(stdin);
	num:gets(x.num);
		for (i = 0; i < L->length; i++)
		{
			if (strcmp(L->grxx[i].num, x.num) == 0)
			{
				printf(">————————————————————————————————\n");
				printf("已有此编号,请重新输入:");
				goto num;
			}
		}
		printf("请输入通讯者的姓名:");
		gets(x.name);
		printf("请输入通讯者的性别:");
		gets(x.sex);
		printf("请输入通讯者的电话:");
		gets(x.phone);
		printf("请输入通讯者的公司名称:");
		gets(x.address);
		L->grxx[L->length++] = x;
		n++;
		printf(">————————————————————————————————\n");
		printf("是否继续添加通讯者信息?(Y/N):");
		scanf_s(" %c", &ch);
	} while (ch == 'y' || ch == 'Y');
	printf(">————————————————————————————————\n");
	printf("本次共添加%d位信息\n", n);
	system("pause");
	system("cls");
	return;
}

(6)添加数据模块Add()

①添加数据模块Add()的功能是:

增加新的数据记录,并返回选单。判断通讯录是否满员,再进行输入内容,对编号进行判断,对编号进行判断是否重复,在输入其他数据

②添加数据模块Add()的流程如图(5)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(5) 添加数据模块Add()流程图

③添加数据模块Add()实现代码:

void Add(xxb* L)
{
	xx x;
	char ch;
	printf(">————————————————————————————————\n");
	if (L->length == MaxLen)
	{
		printf("通讯录已满!\n");
		return;
	}
	printf("请输入通讯者的编号:");
	fflush(stdin);
num:gets(x.num);
	for (int i = 0; i < L->length; i++)
	{
		if (strcmp(L->grxx[i].num, x.num) == 0)
		{
			printf(">————————————————————————————————\n");
			printf("已有此编号,请重新输入:");
			goto num;
		}
	}
	printf("请输入通讯者的姓名:");
	gets(x.name);
	printf("请输入通讯者的性别:");
	gets(x.sex);
	printf("请输入通讯者的电话:");
	gets(x.phone);
	printf("请输入通讯者的公司名称:");
	gets(x.address);
	L->grxx[L->length++] = x;
	printf(">————————————————————————————————\n");
	printf("添加成功!\n");
	system("pause");
	system("cls");
	return;
}

(7)查询模块Find()

①查询模块Find()的功能是:

按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。先判断客户要根据什么值查找,再根据输入值进行判断查找,找到就输出其他信息,没找到就返回菜单。运用switch ( )和if的多层嵌套来判断客户想要实现的功能,再用for循环来查找数据,进行显示操作。

②查询模块Find()的流程如图(6)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(6) 查询模块Find()流程图

③查询模块Find()实现代码:

void Find(xxb L)
{
	int i;
	xx r;
	char e[20];
	printf(">————————————————————————————————\n");
	printf("1.按姓名查找\n");
	printf("2.按手机号码查找\n");
	printf("3.按编号查找\n");
	printf("0.返回菜单\n");
	printf(">————————————————————————————————\n");
	printf("请选择查找方式:");
loop1:scanf_s (" %d", &i);
	if (i < 0 || i > 3) {
		printf(">————————————————————————————————\n");
		printf("未设定功能,请重新输入:");
		goto loop1;
	}
	switch (i)
	{
	case 1:
		printf(">————————————————————————————————\n");
		printf("请输入姓名:");
		scanf_s ("%s", e);
		for (i = 0; i < L.length; i++)
		{
			r = L.grxx[i];
			if (strcmp(r.name, e) == 0)
			{
				printf(">————————————————————————————————\n");
				printf("姓名为(%s)的通讯者的其他信息为:\n编号:%s\t性别:%s\t电话:%s\t公司名称:%s\n", e, r.num, r.sex, r.phone, r.address);
				printf(">————————————————————————————————\n");
				system("pause");
				system("cls");
				return;
			}
		}
		printf(">————————————————————————————————\n");
		printf("未找到姓名为(%s)的通讯者\n", e);
		system("pause");
		system("cls");
		break;
	case 2:
		printf(">————————————————————————————————\n");
		printf("请输入电话:");
		scanf_s ("%s", e);
		for (i = 0; i < L.length; i++)
		{
			r = L.grxx[i];
			if (strcmp(r.phone, e) == 0)
			{
				printf(">————————————————————————————————\n");
				printf("电话为(%s)的通讯者的其他信息为:\n编号:%s\t性别:%s\t电话:%s\t公司名称:%s\n", e, r.num, r.name, r.sex, r.address);
				printf(">————————————————————————————————\n");
				system("pause");
				system("cls");
				return;
			}
		}
		printf(">————————————————————————————————\n");
		printf("未找到姓名为(%s)的通讯者\n", e);
		system("pause");
		system("cls");
		break;
	case 3:
		printf(">————————————————————————————————\n");
		printf("请输入编号:");
		scanf_s ("%s", e);
		for (i = 0; i < L.length; i++)
		{
			r = L.grxx[i];
			if (strcmp(r.num, e) == 0)
			{
				printf(">————————————————————————————————\n");
				printf("编号为(%s)的通讯者的其他信息为:\n编号:%s\t性别:%s\t电话:%s\t公司名称:%s\n", e, r.name, r.sex, r.phone, r.address);
				printf(">————————————————————————————————\n");
				system("pause");
				system("cls");
				return;
			}
		}
		printf(">————————————————————————————————\n");
		printf("未找到姓名为(%s)的通讯者\n", e);
		system("pause");
		system("cls");
		break;
	case 0:
		system("cls");
		break;
	}
	return;
}

(8)修改模块Alter()

①修改模块Alter()的功能是:

修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。根据客户输入的修改方式进入对应的修改界面,再根据输入值进行修改,修改成功后返回菜单。运用switch ( )和if的多层嵌套来判断客户想要实现的功能,再用for循环来查找数据,进行修改操作。

②修改模块Alter()的流程如图(7)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(7) 修改模块Alter()流程图

③修改模块Alter()实现代码:

void Alter(xxb* L)
{
	int i, k = 0;
	xx r;
	char e[20];
	printf(">————————————————————————————————\n");
	printf("1.按姓名修改\n");
	printf("2.按手机号码修改\n");
	printf("3.按编号修改\n");
	printf("0.返回菜单\n");
	printf(">————————————————————————————————\n");
	printf("请选择修改方式:");
loop2:scanf_s (" %d", &i);
	if (i < 0 || i > 3) {
		printf(">————————————————————————————————\n");
		printf("未设定功能,请重新输入:");
		goto loop2;
	}
	switch (i)
	{
	case 1:
		printf(">————————————————————————————————\n");
		printf("请输入要修改人的姓名:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.name, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到姓名为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("姓名为(%s)的通讯者的原信息为:\n编号:%s\t性别:%s\t手机号码:%s\t公司名称:%s\n", e, r.num, r.sex, r.phone, r.address);
			printf(">————————————————————————————————\n");
			printf("请选择要修改的数据\n");
			printf("\t1.姓名;\n");
			printf("\t2.性别;\n");
			printf("\t3.电话;\n");
			printf("\t4.公司名称;\n");
			printf("\t0.退出\n");
			printf(">————————————————————————————————\n");
			printf("您要修改姓名为(%s)通讯者的哪项数据?\n", e);
			scanf_s ("%d", &k);
			switch (k)
			{
			case 1:
				printf("请输入新姓名:");
				scanf_s ("%s", r.name);
				break;
			case 2:
				printf("请输入新性别:");
				scanf_s ("%s", r.sex);
				break;
			case 3:
				printf("请输入新手机号码:");
				scanf_s ("%s", r.phone);
				break;
			case 4:
				printf("请输入新公司名称:");
				scanf_s ("%s", r.address);
				break;
			}
			L->grxx[i] = r;
			printf(">————————————————————————————————\n");
			printf("修改成功!\n");
		}
		system("pause");
		system("cls");
		break;
	case 2:
		printf(">————————————————————————————————\n");
		printf("请输入要修改人的手机号码:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.phone, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到手机号码为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("手机号码为(%s)的通讯者的原信息为:\n编号:%s\t性别:%s\t手机号码:%s\t公司名称:%s\n", e, r.num, r.name, r.sex, r.address);
			printf(">————————————————————————————————\n");
			printf("请选择要修改的数据\n");
			printf("\t1.姓名;\n");
			printf("\t2.性别;\n");
			printf("\t3.电话;\n");
			printf("\t4.公司名称;\n");
			printf("\t0.退出\n");
			printf(">————————————————————————————————\n");
			printf("您要修改手机号码为(%s)通讯者的哪项数据?\n", e);
			scanf_s ("%d", &k);
			switch (k)
			{
			case 1:
				printf("请输入新姓名:");
				scanf_s ("%s", r.name);
				break;
			case 2:
				printf("请输入新性别:");
				scanf_s ("%s", r.sex);
				break;
			case 3:
				printf("请输入新手机号码:");
				scanf_s ("%s", r.phone);
				break;
			case 4:
				printf("请输入新公司名称:");
				scanf_s ("%s", r.address);
				break;
			}
			L->grxx[i] = r;
			printf(">————————————————————————————————\n");
			printf("修改成功!\n");
		}
		system("pause");
		system("cls");
		break;
	case 3:
		printf(">————————————————————————————————\n");
		printf("请输入要修改人的编号:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.num, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到姓名为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("编号为(%s)的通讯者的其他信息为:\n编号:%s\t性别:%s\t电话:%s\t公司名称:%s\n", e, r.name, r.sex, r.phone, r.address);
			printf(">————————————————————————————————\n");
			printf("请选择要修改的数据\n");
			printf("\t1.姓名;\n");
			printf("\t2.性别;\n");
			printf("\t3.电话;\n");
			printf("\t4.公司名称;\n");
			printf("\t0.退出\n");
			printf(">————————————————————————————————\n");
			printf("您要修改手机号码为(%s)通讯者的哪项数据?\n", e);
			scanf_s ("%d", &k);
			switch (k)
			{
			case 1:
				printf("请输入新姓名:");
				scanf_s ("%s", r.name);
				break;
			case 2:
				printf("请输入新性别:");
				scanf_s ("%s", r.sex);
				break;
			case 3:
				printf("请输入新手机号码:");
				scanf_s ("%s", r.phone);
				break;
			case 4:
				printf("请输入新公司名称:");
				scanf_s ("%s", r.address);
				break;
			}
			L->grxx[i] = r;
			printf(">————————————————————————————————\n");
			printf("修改成功!\n");
		}
		system("pause");
		system("cls");
		break;
	case 0:
		system("cls");
		break;
	}
	return;
}

(9)删除模块Delete()

①删除模块Delete()的功能是:

删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。根据客户输入的修改方式进入对应的删除界面,再根据输入值进行删除,最终确定客户是否删除,取消删除或删除成功后返回菜单。运用switch ( )和if的多层嵌套来判断客户想要实现的功能,再用for循环来查找数据,进行删除操作。

②删除模块Delete()的流程如图(8)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(8) 删除模块Delete()流程图

③删除模块Delete()实现代码:

void Delete(xxb* L)
{
	int i, j, k = 0;
	xx r;
	char e[20], y;
	printf(">————————————————————————————————\n");
	printf("1.按姓名删除\n");
	printf("2.按手机号码删除\n");
	printf("3.按编号删除\n");
	printf("0.返回菜单\n");
	printf(">————————————————————————————————\n");
	printf("请选择修改方式:");
loop3:scanf_s (" %d", &i);
	if (i < 0 || i > 3) {
		printf(">————————————————————————————————\n");
		printf("未设定功能,请重新输入:");
		goto loop3;
	}
	switch (i)
	{
	case 1:
		printf(">————————————————————————————————\n");
		printf("请输入要删除的通讯者的姓名:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.name, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到姓名为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("姓名为(%s)的通讯者的原信息为:\n编号:%s\t性别:%s\t手机号码:%s\t公司名称:%s\n", e, r.num, r.sex, r.phone, r.address);
			printf(">————————————————————————————————\n");
			printf("您确定要删除吗?(Y/N)\n");
			scanf_s (" %c", &y);
			if (y == 'y' || y == 'Y')
			{
				for (j = i; j < L->length; j++)
					L->grxx[j] = L->grxx[j + 1];
				L->length--;
				printf(">————————————————————————————————\n");
				printf("删除成功!\n");
				system("pause");
				system("cls");
				return;
			}
			else
			{
				printf(">————————————————————————————————\n");
				printf("您已取消删除!\n");
				system("pause");
				system("cls");
				return;
			}
		}
		system("pause");
		system("cls");
		break;
	case 2:
		printf(">————————————————————————————————\n");
		printf("请输入要删除的通讯者的手机号码:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.phone, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到手机号码为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("手机号码为(%s)的通讯者的原信息为:\n编号:%s\t性别:%s\t手机号码:%s\t公司名称:%s\n", e, r.num, r.name, r.sex, r.address);
			printf(">————————————————————————————————\n");
			printf("您确定要删除吗?(Y/N)\n");
			scanf_s (" %c", &y);
			if (y == 'y' || y == 'Y')
			{
				for (j = i; j < L->length; j++)
					L->grxx[j] = L->grxx[j + 1];
				L->length--;
				printf(">————————————————————————————————\n");
				printf("删除成功!\n");
				system("pause");
				system("cls");
				return;
			}
			else
			{
				printf(">————————————————————————————————\n");
				printf("您已取消删除!\n");
				system("pause");
				system("cls");
				return;
			}
		}
		system("pause");
		system("cls");
		break;
	case 3:
		printf(">————————————————————————————————\n");
		printf("请输入要删除的通讯者的编号:");
		scanf_s ("%s", e);
		for (i = 0; i < L->length; i++)
		{
			r = L->grxx[i];
			if (strcmp(r.phone, e) == 0)
			{
				k = 1;
				break;
			}
		}
		if (k == 0)
		{
			printf(">————————————————————————————————\n");
			printf("未找到编号为(%s)的通讯者\n", e);
			system("pause");
			system("cls");
			break;
		}
		else
		{
			printf(">————————————————————————————————\n");
			printf("编号为(%s)的通讯者的其他信息为:\n编号:%s\t性别:%s\t电话:%s\t公司名称:%s\n", e, r.name, r.sex, r.phone, r.address);
			printf(">————————————————————————————————\n");
			printf("您确定要删除吗?(Y/N)\n");
			scanf_s (" %c", &y);
			if (y == 'y' || y == 'Y')
			{
				for (j = i; j < L->length; j++)
					L->grxx[j] = L->grxx[j + 1];
				L->length--;
				printf(">————————————————————————————————\n");
				printf("删除成功!\n");
				system("pause");
				system("cls");
				return;
			}
			else
			{
				printf(">————————————————————————————————\n");
				printf("您已取消删除!\n");
				system("pause");
				system("cls");
				return;
			}
		}
		system("pause");
		system("cls");
		break;
	case 0:
		system("cls");
		break;
	}
	return;
}

(10)显示模块List()

①显示模块List()的功能是:

显示所有记录。运用for实现数据的查找配合printf进行数据的输出。

②显示模块List()的流程如图(9)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(9) 显示模块List()流程图

③显示模块List()实现代码:

void List(xxb L)
{
	xx r;
	int i;
	printf("通讯者信息:\n");
	for (i = 0; i < L.length; i++)
	{
		r = L.grxx[i];
		printf("(%d)编号:%s\t姓名:%s\t性别:%s\t电话:%s\t公司名称:%s\n", i + 1, r.num, r.name, r.sex, r.phone, r.address);
	}
	system("pause");
	system("cls");
	return;
}

(11)统计模块nv( )

①统计模块nv( )的功能是:

统计通讯录中男女比例。运用for实现数据的查找,if判断是否为男,为男则n++否则v++,显示男女比例n:v,返回选单。

②统计模块nv( )的流程如图(10)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(10) 统计模块nv( )流程图

③统计模块nv( )实现代码:

void nv(xxb L)
{
	int i, n = 0, v = 0;
	for (i = 0; i < L.length; i++)
	{
		if (strcmp(L.grxx[i].sex, "男") == 0)
			n++;
		else
			v++;
	}
	printf(">————————————————————————————————\n");
	printf("通讯录中男女比例为%d:%d", n, v);
	system("pause");
	system("cls");
	return;
}

(12)显示公司信息模块ti( )

①显示公司信息模块ti( )的功能是:

显示出同一公司中的人的信息。运用for判断通讯录中是否有数据属于此公司,如果没有数据就返回选单,如果有数据属于此公司再判断属于此公司的通讯者并输出他们的信息,运行完成后回到选单。

②显示公司信息模块ti( )流程如图(11)所示:

大一c语言通讯录管理系统,C,数据结构,c语言

图(11) 显示公司信息模块ti( )流程图

③显示公司信息模块ti( )实现代码:

void ti(xxb L)
{
	xx r;
	int i, k = 0;
	char e[20];
	printf(">————————————————————————————————\n");
	printf("请输入您要查找人员信息的公司名称:");
	scanf_s (" %s", e);
	for (i = 0; i < L.length; i++)
	{
		if (strcmp(L.grxx[i].address, e) == 0)
		{
			k = 1;
			break;
		}
	}
	if (k == 0)
	{
		printf(">————————————————————————————————\n");
		printf("本通讯录没有公司为(%s)的人员信息!", e);
		system("pause");
		system("cls");
		return;
	}
	else
	{
		printf(">————————————————————————————————\n");
		printf("本通讯录里公司为(%s)的所有人员信息为:\n", e);
		for (i = 0; i < L.length; i++)
		{
			r = L.grxx[i];
			if (strcmp(L.grxx[i].address, e) == 0)
				printf("(%d)编号:%s\t姓名:%s\t性别:%s\t电话:%s\t公司名称:%s\n", k++, r.num, r.name, r.sex, r.phone, r.address);
		}
		printf(">————————————————————————————————\n");
		system("pause");
		system("cls");
		return;
	}
	return;
}

三、结论

通讯录管理系统是我设计的第1个系统,面对现实当中通讯录管理的实际需求,我总结分析并设计了不同模块来满足需求。在模块的设计和调试当中,我感受到对顺序表有了更多的领悟,我会在之后巩固c语言的知识,坚持勤学勤练。在本次设计当中有许多我想要实现的复杂功能没能成功,系统在体验方面仍有不足。我会继续努力探索,掌握技巧实现更多更便利的功能。

我的通讯录管理系统总共设置了InitList( )、Menu( )、Quit( )、Create( )、Add( )、Find( )、Alter( )、Delete( )、List( )、nv( )、ti( )、main( )十二个模块;其中除去课题中要求的模块还有InitList( )模块,是用来定义顺序表的。同时我还定义了我自己的数据结构所需要的内存量length用来返回表中的数据数量,方便了各大模块的遍历。

本系统还可以添加更多的模块来使现在所拥有的模块变得更简洁运行速度更快,比如定义一个查找模块,使得原来的查找模块与删除模块、修改模块共用查找代码,让原来的查找模块、删除模块、修改模块变得更加简洁;

本系统其实还有很多可以优化的地方,各个模块的代码可以进行大幅度的缩减,有些模块也并未达到我理想的最佳效果,不过本次课设让我学到了很多,让我对顺序表的认知变多,也接触到了以前并未接触到的函数,总体来说我对我的第一个系统还是比较满意的。

四、参考文献

[1]谭浩强。C语言程序设计.北京:清华大学出版社,1997.文章来源地址https://www.toymoban.com/news/detail-783833.html

到了这里,关于数据结构课设—C语言实现通讯录管理系统(顺序表实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【(数据结构) —— 顺序表的应用-通讯录的实现】

    C语言基础要求:结构体、动态内存管理、顺序表、文件件操作 (1). 功能要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系人信息 (2).重

    2024年02月08日
    浏览(48)
  • 数据结构(初阶):顺序表实战通讯录

    数据结构(初阶)第一节:数据结构概论-CSDN博客 数据结构(初阶)第二节:顺序表-CSDN博客         本文将以C语言和顺序表实现通讯录基础管理,实现功能包括增、删、改、查等,在实现相关功能时需要用到在第二节中顺序表的相关内容,需要友友们掌握顺序表的相关

    2024年04月16日
    浏览(37)
  • 数据结构--学生通讯录管理系统

    文章目录 一、问题描述 二、系统功能设计 三、各个代码部分 四、整体代码及其运行 五、总结 学生通讯录管理系统--C语言实现 在现实中,用学号和姓名来记录学生需要花费大量的纸质材料,并且出现容易丢失、查找困难等问题。 “学生通讯管理系统”是为了帮助老师、同

    2024年02月11日
    浏览(59)
  • 【数据结构】:顺序表及其通讯录应用

    1.1为什么会存在数据结构? 我们常常接触到诸如生活中的姓名、身份证、网页内的图片、视频等各种各样的信息,这些信息就是我们常说的数据。在使用这些数据时,我们发现随着数据的增加,当我们要单独寻找某一个数据时就会非常困难,就像图书馆内书籍如果没有按一定

    2024年04月26日
    浏览(43)
  • 数据结构之使用顺序表写出通讯录

    昨天我们踏入了数据结构的深山,并且和顺序表battle了一番,虽说最后赢了,但同时也留下了一个问题: 如何从顺序表的增删查改加强到通讯录的的增删查改 ,别急,今天就带你一探究竟。 我们昨天实现了顺序表的头删,头插,尾删尾插,选择插入,选择删除,以及初始化

    2024年01月23日
    浏览(57)
  • python数据结构实验设计(单链表):通讯录管理

    目录 摘要 一、课程设计目的及内容 创新功能: 二、算法及设计过程分析 1.总流程 2.主界面 3.文件处理与生成单链表 4.查看所有联系人信息 5.查看人数 6.查找联系人(以姓名或号码为依据) 7.对姓名或号码输入进行模糊查找  8.添加联系人 9.删除联系人  10.合并两个通

    2024年01月16日
    浏览(35)
  • C语言实现建立手机通讯录(顺序结构)

    今天来和大家分享一个简易通讯录(C语言实现) 首先要介绍一下通讯录的基本功能 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 总结,考虑到数据结构中的顺序表和单链表,我们可以采用这两种结构来实现。本文选择

    2024年02月07日
    浏览(42)
  • 数据结构课设(C语言)——校园导航系统

    校园导航系统不是很难,因为最短路径已经有了Dijkstra算法,这就可以直接用。 我们需要的只是往这个算法里面加参数还有对界面的创作,这些都很简单。不过用算法还得需要了解算法,所以建议大家还是去理解一下这个算法的内涵。实际运行可能和我的运行结果有出入,应

    2024年02月02日
    浏览(41)
  • 内部排序算法比较-数据结构C语言课设

    名称: 内部排序算法比较 内容: 在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的比较次数和移动次数,以取得直观感受。 任务: (1)对以下7中常会用的内部排序算法进行比较

    2024年02月12日
    浏览(55)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包