C语言课程设计|通讯录管理系统(含完整代码)

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

目录

菜单功能

录入联系人信息功能

查看系统中全部信息功能

查看单个信息功能

删除全部信息功能

删除单个信息功能

修改信息功能

完整代码


在长达一个多月的学习过程中,终于将C语言学完,因此专门写一个C语言课程设计来检验这一个多月的学习成果,由于写的比较急,因此代码有些还可以优化的地方,还请谅解!下面会对每个函数块的作用以及实现方法做出简单的论述。

菜单功能

函数作用:通过menu()函数来调用其他要使用到的功能。并在执行完以后重新返回该函数。

实现方法:主要通过goto语句,switch语句以及函数的调用三种方法来实现该功能。

void menu(){
	system("cls");
	printf("                                         ---------------------------------\n");
	printf("                                         ----------通讯录管理系统----------\n");
	printf("                                         ----------1、录入信息    ---------\n");
	printf("                                         ----------2、查看全部信息---------\n");
	printf("                                         ----------3、查看单个信息---------\n");
	printf("                                         ----------4、删除全部信息---------\n");
	printf("                                         ----------5、删除单个信息---------\n");
	printf("                                         ----------6、修改单个信息---------\n");
	printf("                                         ----------7、退出系统    ---------\n");
	int choice;
	printf("选择任意一个功能:\n");
	loop:
	scanf("%d",&choice);
	switch (choice){
		case 1:
			add_people();
			menu();
		case 2:
			views_people();
			menu();
		case 3:
			view_people();
			menu();
			break;
		case 4:
			delall_people();
			menu();
		case 5:
			del_people();
			menu();
		case 6:
			revise_people();
			menu();
		case 7:
			exit(1);
			break;
		default:
			printf("输入错误!请重新输入:");
			goto loop;
	}
}

录入联系人信息功能

函数作用:在使用其他功能之前,应当先将部分信息存储在管理系统中,从而才可以实现数据的增删改查。

实现方法:主要通过动态链表的创建而实现,首先创建结构体指针p1,p2,并通过malloc()函数获取空间,其中p1作为首指针,p2作为尾指针。在p1所指向的结构体获取数据之后,令p2所指向的结构体中的next指针,指向p1结构体的地址,这步操作完成之后,p1将其地址赋值给p2.随后p1再次通过malloc()函数获取一定的空间,在p1指向的结构体获取数据之后,重复之前的操作,直至不再开辟新的空间时停止,最后将NULL赋值给最后一个结构体中next指针,使其不再指向任何地址。

void add_people(){			//添加信息 
	system("cls");
	int count;
	printf("选择要添加联系人个数:\n");
	scanf("%d",&count);
	struct People *p1,*p2;
	p1=p2=(struct People*)malloc(LEN);
	int i=0;
	printf("------------------------------------\n");
    if(head==NULL){
		head = p1;
	}else{
		end->next = p1 ;
	}
	while(count>0){
		printf("请输第%d个联系人信息:\n",++i);
		printf("姓名:\n");
		scanf("%s",&p1->name);
		printf("性别:\n");
		scanf("%s",&p1->sex);
		printf("电话号码:\n");
		scanf("%d",&p1->num);
		printf("邮箱:\n");
		scanf("%s",&p1->email);
		printf("家庭地址:\n");
		scanf("%s",&p1->addr);
		count--;
		p2->next=p1;
		p2=p1;
		p1=(struct People*)malloc(LEN);
		system("cls");
	}
	p2->next=NULL;
	end=p2;
	printf("全部添加成功!\n");
	system("pause");
}

查看系统中全部信息功能

函数作用:将通讯录系统中所有数据呈现出来。

实现方法:定义一个结构体指针变量(局部变量)pt,将头指针head赋值给pt,通过循环输出pt指针所指向的结构体,并将所指向结构体中的next所指向的地址赋值给pt,从而实现对下一个结构体的访问。

void views_people(){			//查看全部信息 
	system("cls");
	struct People *pt;
	if(head!=NULL){
		for(pt=head;pt!=NULL;){
		printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
		pt=pt->next;
		printf("-------------------------------------------------------------\n");
		}
	}else{
		printf("该系统中无数据!");
	}
	system("pause");
}

查看单个信息功能

函数作用:有目的性地寻找联系人的所有信息。

实现方法:将链表中的数据一一遍历,与所输入的数据进行对比,若匹配成功,则将该指针所指向结构体中的数据输出。

void view_people(){		//单个查询,通过名字查询 
	system("cls");
	struct People *pt;
	printf("输入要查询的联系人名字:\n");
	char name[10];
	int flag=1;
	scanf("%s",&name);
	for(pt=head;pt!=NULL;){
		if(strcmp(pt->name,name)==0){
			printf("成功找到!\n");
			printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
			flag=0;
			break;
		}
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
	}
	system("pause");
}

删除全部信息功能

函数作用:将管理系统中的所有数据删除。

实现方法:仍然是对链表一一遍历,在遍历的过程中通过free()函数将其开辟的空间释放,从而达到数据删除的作用。

void delall_people(){		//全部删除 
	system("cls");
	printf("正在删除中···\n");
	system("pause");
	struct People *pt;
	for(pt=head;pt!=NULL;){
		struct People *temp=pt;
		pt=pt->next;
		free(pt);
	}
	head=NULL;
	end=NULL;
	printf("删除成功!\n");
	system("pause");
}

删除单个信息功能

函数作用:有目的性地删除一些失效信息

实现方法:依然是通过遍历找到想要删除的指针,不过在这之前应该定义一个结构体指针用来获取pt的地址。其目的是为了能够在删除该指针之前将该指针之前的数据与之后的数据能够连接起来。

void del_people(){			//删除单个联系人信息 
	system("cls");
	struct People *pt,*temp;
	pt=head;
	printf("请输入要删除的联系人:");
	char name[10];
	scanf("%s",&name);
	 int flag=1;
	while(pt!=NULL){
		if(strcmp(name,pt->name)==0){
			if(pt==head){
                head = pt->next;
				flag = 0;
				printf("删除成功!\n");
				system("pause");
            }else{
                printf("删除成功···\n");
			    system("pause");
			    temp->next=pt->next;
			    free(pt);
			    flag=0;
			    break;
            }
            
		}
		temp=pt;
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
		system("pause");
	}
}

修改信息功能

函数作用:修改通讯录管理系统中的一些错误信息

实现方法:其核心依然是通过遍历找到要修改的指针,从而实现对数据的修改。

void del_people(){			//删除单个联系人信息 
	system("cls");
	struct People *pt,*temp;
	pt=head;
	printf("请输入要删除的联系人:");
	char name[10];
	scanf("%s",&name);
	 int flag=1;
	while(pt!=NULL){
		if(strcmp(name,pt->name)==0){
			printf("删除成功···\n");
			system("pause");
			temp->next=pt->next;
			free(pt);
			flag=0;
			break;
		}
		temp=pt;
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
		system("pause");
	}
}

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct People)
struct People{
	char name[10];		//姓名 
	char sex[4];		//性别 
	int num;			//电话号码 
	char email[20];		//邮箱 
	char addr[30];		//家庭地址
	struct People* next;
};
struct People* head =NULL;
struct People* end =NULL;
void add_people(){			//添加信息 
	system("cls");
	int count;
	printf("选择要添加联系人个数:\n");
	scanf("%d",&count);
	struct People *p1,*p2;
	p1=p2=(struct People*)malloc(LEN);
	int i=0;
	printf("------------------------------------\n");
    if(head==NULL){
		head = p1;
	}else{
		end->next = p1 ;
	}
	while(count>0){
		printf("请输第%d个联系人信息:\n",++i);
		printf("姓名:\n");
		scanf("%s",&p1->name);
		printf("性别:\n");
		scanf("%s",&p1->sex);
		printf("电话号码:\n");
		scanf("%d",&p1->num);
		printf("邮箱:\n");
		scanf("%s",&p1->email);
		printf("家庭地址:\n");
		scanf("%s",&p1->addr);
		count--;
		p2->next=p1;
		p2=p1;
		p1=(struct People*)malloc(LEN);
		system("cls");
	}
	p2->next=NULL;
	end=p2;
	printf("全部添加成功!\n");
	system("pause");
}
void views_people(){			//查看全部信息 
	system("cls");
	struct People *pt;
	if(head!=NULL){
		for(pt=head;pt!=NULL;){
		printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
		pt=pt->next;
		printf("-------------------------------------------------------------\n");
		}
	}else{
		printf("该系统中无数据!");
	}
	system("pause");
}
void delall_people(){		//全部删除 
	system("cls");
	printf("正在删除中···\n");
	system("pause");
	struct People *pt;
	for(pt=head;pt!=NULL;){
		struct People *temp=pt;
		pt=pt->next;
		free(pt);
	}
	head=NULL;
	end=NULL;
	printf("删除成功!\n");
	system("pause");
}
void view_people(){		//单个查询,通过名字查询 
	system("cls");
	struct People *pt;
	printf("输入要查询的联系人名字:\n");
	char name[10];
	int flag=1;
	scanf("%s",&name);
	for(pt=head;pt!=NULL;){
		if(strcmp(pt->name,name)==0){
			printf("成功找到!\n");
			printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
			flag=0;
			break;
		}
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
	}
	system("pause");
}
void revise_people(){		//修改内容 
	system("cls");
	struct People *pt;
	printf("输入要修改的联系人名字:\n");
	char name[10];
	int flag=1;
	scanf("%s",&name);
	for(pt=head;pt!=NULL;){
		if(strcmp(name,pt->name)==0){
			printf("成功找到!\n");
			printf("姓名:%s\n性别:%s\n电话号码:%d\n邮箱:%s\n家庭地址:%s\n",pt->name,pt->sex,pt->num,pt->email,pt->addr);
			flag=0;
			printf("请分别进行修改:\n");
			printf("姓名:\n");
			scanf("%s",&pt->name);
			printf("性别:\n");
			scanf("%s",&pt->sex);
			printf("电话号码:\n");
			scanf("%d",&pt->num);
			printf("邮箱:\n");
			scanf("%s",&pt->email);
			printf("家庭地址:\n");
			scanf("%s",&pt->addr);
			break;
		}
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
	}
	system("pause");
}
void del_people(){			//删除单个联系人信息 
	system("cls");
	struct People *pt,*temp;
	pt=head;
	printf("请输入要删除的联系人:");
	char name[10];
	scanf("%s",&name);
	 int flag=1;
	while(pt!=NULL){
		if(strcmp(name,pt->name)==0){
			if(pt==head){
                head = pt->next;
				flag = 0;
				printf("删除成功!\n");
				system("pause");
            }else{
                printf("删除成功···\n");
			    system("pause");
			    temp->next=pt->next;
			    free(pt);
			    flag=0;
			    break;
            }
            
		}
		temp=pt;
		pt=pt->next;
	}
	if(flag){
		printf("不好意思,未找到!\n");
		system("pause");
	}
}
void menu(){
	system("cls");
	printf("                                         ---------------------------------\n");
	printf("                                         ----------通讯录管理系统----------\n");
	printf("                                         ----------1、录入信息    ---------\n");
	printf("                                         ----------2、查看全部信息---------\n");
	printf("                                         ----------3、查看单个信息---------\n");
	printf("                                         ----------4、删除全部信息---------\n");
	printf("                                         ----------5、删除单个信息---------\n");
	printf("                                         ----------6、修改单个信息---------\n");
	printf("                                         ----------7、退出系统    ---------\n");
	int choice;
	printf("选择任意一个功能:\n");
	loop:
	scanf("%d",&choice);
	switch (choice){
		case 1:
			add_people();
			menu();
		case 2:
			views_people();
			menu();
		case 3:
			view_people();
			menu();
			break;
		case 4:
			delall_people();
			menu();
		case 5:
			del_people();
			menu();
		case 6:
			revise_people();
			menu();
		case 7:
			exit(1);
			break;
		default:
			printf("输入错误!请重新输入:");
			goto loop;
	}
}
int main(){
	void add_people();
	void views_people();
	void delall_people();
	void view_people();
	void revise_people();
	void del_people();
	void menu();
	menu();
	return 0;
} 

其中可能会有一些令人难以解读的地方,还请评论区告诉我,对其加以修改。 文章来源地址https://www.toymoban.com/news/detail-788755.html

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

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

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

相关文章

  • 【C语言】优化通讯录管理系统

    【C语言】优化通讯录管理系统

    大家好,我是苏貝,本篇博客带大家优化上一篇的通讯录,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 在上一篇博文 实现通讯录管理系统 的最后,我们了解了那段代码的问题:通讯录的大小是固定的100个元素,如果想要存放1000个人的信息,那么空间就

    2024年02月06日
    浏览(42)
  • 【C语言】实现通讯录管理系统

    【C语言】实现通讯录管理系统

    大家好,我是苏貝,本篇博客带大家实现通讯录,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 本文将使用C语言来实现通讯录管理系统,该通讯录包括若干联系人,和每个联系人的姓名、年龄、性别、电话、地址。此通讯录的功能包括:增加联系人信息,

    2024年02月08日
    浏览(40)
  • c语言:通讯录管理系统(文件版本)

    c语言:通讯录管理系统(文件版本)

    前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 基础增删查改功能版本 :c语言:通讯录管理系统(增删查改)-CSDN博客 动态分配内存版本 :c语言:通讯录管理系统(动态分配内存版)-CSDN博客         本文是在基础的通

    2024年02月07日
    浏览(39)
  • 【C语言】优化通讯录管理系统2

    【C语言】优化通讯录管理系统2

    本篇博客是基于上一篇博客写出来的,了解上一篇博客 大家好,我是苏貝,本篇博客带大家再次优化上一篇的通讯录,实现将录入的数据在程序退出后存储到文件中,在下一次程序开始时打开文件获取数据,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 既

    2024年02月04日
    浏览(40)
  • c语言:通讯录管理系统(增删查改)

    c语言:通讯录管理系统(增删查改)

      前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 动态分配内测版 :c语言:通讯录管理系统(动态分配内存版)-CSDN博客 文件版本 :c语言:通讯录管理系统(文件版本)-CSDN博客 目录 一.大体的框架 主函数初步设计 联系

    2024年02月08日
    浏览(42)
  • 【C语言】通讯录管理系统(附图解、源码)

    【C语言】通讯录管理系统(附图解、源码)

    目录 一.前言 二.准备工作 三.ContactTest.c测试区 1.菜单 2.选择功能 四.Contact.h头文件引用区 1.通讯录成员结构体函数的创建 2.实现功能函数的创建 五.ContactRealize.c功能实现区 1.初始化成员信息 2.查找目标成员位置 3.增加联系人 4.删除指定联系人 5.查找指定联系人 6.修改指定联系

    2024年02月03日
    浏览(42)
  • 学生通讯录管理系统的设计与实现

    学生通讯录管理系统的设计与实现

    1.1 问题的描述 学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。 1.2 问题分析和任务定义 (1)输入数据建立通讯录; (2)查询通讯录中满足要求的信息; (3)插入新的通讯录信息; (4)删除不需要的通讯

    2024年02月10日
    浏览(38)
  • c语言:通讯录管理系统(动态分配内存版)

    c语言:通讯录管理系统(动态分配内存版)

    前言: 本通讯录管理系统一共三个版本,除此文章以外还有如下俩个版本,大家可以根据需求自取: 基础增删查改功能版本 :c语言:通讯录管理系统(增删查改)_luming.02的博客-CSDN博客 文件保存版本 :c语言:通讯录管理系统(文件版本)-CSDN博客         本文是在基

    2024年02月08日
    浏览(50)
  • C语言用链表实现通讯录管理系统

    C语言用链表实现通讯录管理系统

    目录 总体思路 具体代码 编译通过 总体代码 一、创建一个结构体保存通讯录信息。 二、构建链表,并存于文件中。 三、实现链表结点的增加、删除、查询、输出。 一、创建一个结构体,保存信息。 二、用尾插法创建一个链表,并让用户选择是否输入数据。 三、将链表数据

    2024年02月02日
    浏览(42)
  • 精通C语言:打造高效便捷的通讯录管理系统

    精通C语言:打造高效便捷的通讯录管理系统

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言项目 贝蒂的主页:Betty‘s blog 在我们大致学习完C语言之后,我们就可以利用目前所学的知识去做一些有意思的项目,而今天贝蒂就带大家完成一个通讯录的简易实现, 本章你可能需要

    2024年02月19日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包