通讯录管理系统-C语言

C语言实现的通讯录管理系统
模块要求:
模块1——主函数main():根据选单的选项调用各函数,并完成相应的功能。
模块2——Menu()的功能是:显示英文提示选单。
模块3——Quit()的功能是:退出选单。
模块4——Create()的功能是:创建新的通讯录。
模块5——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。
模块6——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信	息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
模块7——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
模块8——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
模块9——List()的功能是:显示通讯录中的所有记录。;
设计要求:
1) 每条信息至包含:姓名(NAME )、性别(GENDER)、电话(TEL)、城市(CITY)邮编(EIP)几项。
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力

源.h

#include<stdio.h>
#include<string.h>
#include<Windows.h>
typedef struct Address_List {/*节点类型定义*/
char NAME[20];
char GENDER[20];
char TEL[20];
char CITY[20];
char EIP[20];
struct Address_List *Next;
}Address_List;/*Address_list*为结构体指针类型*/
//Address_List* Create();
/*创建联系人信息函数*/
void Create();
void input(Address_List *p1);
/*添加联系人函数*/
void Add();
/*查找联系人函数(通过姓名查找)*/
void Find(Address_List *p2);
/*修改通讯录个人信息函数*/
void Alter(Address_List *p2);
/*删除通讯录个人信息函数*/
void Delete();
/*通讯录信息显示函数*/
//Address_List* List(Address_List *p1);
void List(Address_List *p1);
/*菜单功能显示函数*/
void Menu();
/*主函数*/
int main();

#include"源.h"
Address_List *Head;/*建立节点*/
void Create() 
{/*尾插法建立单链表*/
//Address_List* Create() {  /*创建返回值类型为Address_list类型的函数*/
Address_List *s,*r;
int flag = 1;
char fname[20];
s = (Address_List*)malloc(sizeof(Address_List));  /*建立节点*/
if (s != NULL) {   /*判断申请节点是否成功*/
	Head = s;/*将头节点指向s,初始化链表*/
	r = s;/*创建尾指针,始终指向最后一个节点*/
	printf("\n\t\t\t☆☆☆Input Datas☆☆☆\n");
	printf("------------------------------------------------------------------\n");
	printf("Input 'yes' stand for continuing or 'no' stand for completing: \n");
	while (flag) {/*输入yes代表继续插入信息;输入no代表停止插入*/
		printf("Please input 'yes' or 'no':");
	loop1:	scanf_s("%s",fname,sizeof(fname));/*使用goto语句判断输入功能是否合法*/
		if (strcmp(fname, "yes") != 0 && strcmp(fname, "no") != 0) {
			printf("Please input the accurate choice:");
			goto loop1;
		}
		if (strcmp(fname, "no") == 0) { /*输入no则停止创建信息*/
			printf("\nInput completed!\n");
			printf("========================================================================\n");
			flag = 0;
			r->Next = NULL;/*尾节点地地址域赋空值*/
			free(s);/*释放p1节点*/
		}
		else {
			printf("NAME:");
			scanf_s("%s",&s->NAME,sizeof(s->NAME));
			printf("GENDER:");
			scanf_s("%s",&s->GENDER,sizeof(s->GENDER));
			printf("TEL:");
			scanf_s("%s",&s->TEL,sizeof(s->TEL));
			printf("CITY:");
			scanf_s("%s",&s->CITY,sizeof(s->CITY));
			printf("EIP:");
			scanf_s("%s",&s->EIP,sizeof(s->EIP));
			printf("=====================================\n");
			r = s;
			s = (Address_List*)malloc(sizeof(Address_List));/*申请新节点存放下个联系人信息*/
			if (s != NULL) {
				r->Next = s;/*将新申请的节点插入到当前链表的尾*/
			}
		}

	}
	//return s->Next;
}

}
void input(Address_List *p1) {/*输入添加信息*/
printf("NAME:");
scanf_s("%s",&p1->NAME,sizeof(p1->NAME));
printf("GENDER:");
scanf_s("%s",&p1->GENDER,sizeof(p1->GENDER));
printf("TEL:");
scanf_s("%s",&p1->TEL,sizeof(p1->TEL));
printf("CITY:");
scanf_s("%s",&p1->CITY,sizeof(p1->CITY));
printf("EIP:");
scanf_s("%s",&p1->EIP,sizeof(p1->EIP));
}
void Add() {   /*尾插法添加信息*/
Address_List *p1, *p3;
p1 = Head;   /*p1指向第一个节点*/
p3 = (Address_List*)malloc(sizeof(Address_List));  /*创建节点p3*/
p3->Next = NULL;  /*节点指针域赋空值*/
printf("\n\t\t\t☆☆☆Add data☆☆☆\n");
printf("----------------------------------------------------------------------\n");
printf("Please input the information of adder:\n");
input(p3);
while (p1->Next != NULL) {/*找到链表尾节点*/
		p1 = p1->Next;
	}
p1->Next = p3;/*使尾节点指向该节点*/
printf("Add completed!\n");
printf("======================================================================\n");

}
void Find(Address_List *p2) {
char name[20];
int flag = 0;
printf("\n\t\t\t☆☆☆View Data☆☆☆\n");
printf("----------------------------------------------------------------------\n");
printf("Please input the name of you want to find:");
scanf_s("%s", name,sizeof(name));
while (p2 != NULL)/*循环截至条件*/
{
	if (strcmp(name, p2->NAME) == 0)/*通过姓名查找到该信息*/
	{
		printf("Viewing data of you want to find:\n");/*输出个人信息*/
		printf("NAME:%s\n\t", p2->NAME);
		printf("GENDER:%s\n\t", p2->GENDER);
		printf("TEL:%s\n\t", p2->TEL);
		printf("CITY:%s\n\t", p2->CITY);
		printf("EIP:%s\t\n",p2->EIP);
		printf("======================================================================\n");
		flag = 1;
	}
	p2 = p2->Next;/*遍历链表*/
}
if (flag == 0)/*遍历链表没找到置标志域为0结束循环*/
{
	printf("\nThe person you are finding not exist!\n");
}
}
void Alter(Address_List *p2) {
char name[20];
int flag = 0, i;
printf("\n\t\t\t☆☆☆Modify Data☆☆☆\n");
printf("----------------------------------------------------------------------\n");
printf("Please input the name of you want to modify:");
scanf_s("%s", name,sizeof(name));  /*输入想要修改信息的姓名*/
while (p2 != NULL) {/*循环终止条件*/
	if (strcmp(name, p2->NAME) == 0) {  /*判断是否有该联系人*/
		printf("The basic infornamtions of the person\n");/*若有则输出该联系人的基本信息*/
		printf("NAME:%s\n\t", p2->NAME);
		printf("GENDER:%s\n\t", p2->GENDER);
		printf("TEL:%s\n\t", p2->TEL);
		printf("CITY:%s\n\t", p2->CITY);
		printf("EIP:%s\t\n", p2->EIP);
		printf("\nPlease choose the information you want to modify:\n");
		printf("\t1.NAME\t2.GENDER\t3.TEL\t4.CITY\n\t5.EIP\n");
		printf("\nYour choice is(1~5):");
		scanf_s("%d", &i);/*输入想要修改的信息编号*/
		printf("Please input the laterest information:\n");
		switch (i)
		{
		case 1:printf("NAME:");
			scanf_s("%s", &p2->NAME,sizeof(p2->NAME));
			break;
		case 2:printf("GENDER:");
			scanf_s("%s", &p2->GENDER,sizeof(p2->GENDER));
			break;
		case 3:printf("TEL:");
			scanf_s("%s", &p2->TEL,sizeof(p2->TEL));
			break;
		case 4:printf("CITY:");
			scanf_s("%s", &p2->CITY,sizeof(p2->CITY));
			break;
		case 5:printf("EIP:");
			scanf_s("%s", &p2->EIP,sizeof(p2->EIP));
			break;
		}
		printf("\nModified Success!\n");
		printf("=========================================================================\n");
		flag = 1;/*找到该联系人置标志域为1*/
	}
	p2 = p2->Next;/*遍历链表*/
}
if (flag == 0)/*没有找到该联系人置标志域为空结束循环*/
{
	printf("The person you are modify not exist!\n");
}
}
void Delete()          //删除数据
{
Address_List *p1, *p2;
p2 = (Address_List*)malloc(sizeof(Address_List));/*建立节点*/
char name[20];  //想要删除的人的姓名
printf("\n\t\t\t☆☆☆删除数据☆☆☆\n");
printf("----------------------------------------------------------------------\n");
printf("Please input the name you want to delete:");
scanf_s("%s", name,sizeof(name));/*输入要删除联系人的姓名*/
p1 = Head;/*p1指向第一个节点*/
if (Head == NULL)/*第一个节点为空任何信息*/
{
	printf("No datas!\n");
	printf("======================================================================\n");
}
if (strcmp(name, p1->NAME) == 0)/*找到该联系人*/
{
	Head = p1->Next;/*将头节点指向下一个节点(等价于删除此节点)*/
	printf("Deleted Success!\n");
	printf("======================================================================\n");
	return;
}
while (p1 != NULL && (strcmp(name, p1->NAME) != 0))/*循环终止条件;找到该联系人或是遍历完链表没有找到*/
{
	p2 = p1;/*记录当前节点*/
	p1 = p1->Next;/*遍历链表*/
}
if (p1 == NULL)/*遍历完链表查无此人*/
{
	printf("The person you are delete not exist!\n");
	printf("======================================================================\n");
	return;
}
if (p1->Next != NULL)/*即所要查找的不是最后一个节点*/
{
	p1 = p1->Next;/*将p1指向下一个节点*/
	p2->Next = p1;/*删除该节点*/
	printf("Delete Success!\n");
	printf("======================================================================\n");
	return;
}
else
{
	p2->Next = NULL;/*所要删除的节点是最后一个节点,直接赋空值*/
	printf("Delete Success!\n");
	printf("======================================================================\n");
	return;
}
}
void List(Address_List *p1) {
//Address_List* List(Address_List *p1) {
printf("\n\t\t\t☆☆☆View Data☆☆☆\n");
printf("----------------------------------------------------------------------\n");
if (p1 == NULL) {
	printf("No Data!\n");
}
while (p1 != NULL) {/*循环终止条件遍历完链表*/
	printf("NAME:%s\n\t", p1->NAME);/*输出信息*/
	printf("GENDER:%s\n\t", p1->GENDER);
	printf("TEL:%s\n\t", p1->TEL);
	printf("CITY:%s\n\t", p1->CITY);
	printf("EIP:%s\t\n", p1->EIP);
	printf("======================================================================\n");
	p1 = p1->Next;/*遍历链表*/
}
//return p1;
}
void Menu() {/*菜单选项*/
printf("\n\n\n");
printf("      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("      ***********************************************************\n");
printf("      \t\t\tAddress book management system\n");
printf("\n");
printf("      \t\t1. Input Data");/*创建联系人信息*/
printf("\t\t2. Add Data\n");/*添加联系人信息*/
printf("      \t\t3. Find Data");/*查找联系人信息*/
printf("\t\t4. Modify Data\n");/*修改联系人信息*/
printf("      \t\t5. Delete Data");/*删除联系人信息*/
printf("\t\t6. View Data\n");/*显示所有联系人信息*/
printf("\t\t7. Exit System\n");/*推出系统*/
printf("      ***********************************************************\n");
printf("      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("      -----------------------------------------------------------\n\n");
}

int main() 
{
int i;
while (1) {
	Menu();/*菜单显示*/
	printf("Please input the number of function:(1-7)");
loop:scanf_s("%d", &i);/*输入功能选择*/
	if (i < 0 || i>7) {
		Menu();
		printf("Errors! Please input the accurate number of function:");
		goto loop;/*定义goto语句,防止非法输入;若输出功能无则继续输入*/
	}
	switch (i)
	{
	case 1:
		Create();/*创建联系人信息*/
		break;
	case 2:
		Add();
		break;
	case 3:
		Find(Head);
		break;
	case 4:
		Alter(Head);
		break;
	case 5:
		Delete();
		break;
	case 6:
		List(Head);
		break;
	case 7:
		exit(1);
		break;
	default:
		break;
	}
}
system("pause");
return 0;
}
  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言课程设计: 通讯录管理系统 通讯录管理系统-C语言课程设计全文共16页,当前为第1页。 通讯录管理系统-C语言课程设计全文共16页,当前为第1页。 目录 需求分析………………………………………………………2 概要设计………………………………………………………2 详细设计………………………………………………………3 上机操作………………………………………………………14 实习心得………………………………………………………19 源程序 ………………………………………………………20 通讯录管理系统-C语言课程设计全文共16页,当前为第2页。 通讯录管理系统-C语言课程设计全文共16页,当前为第2页。 一、需求分析 具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。 数据包括:人名、工作单位、电话号码和E-MAIL地址。 可对记录中的姓名和电话号码进行修改。 可增加和删除记录。 可显示所有的保存记录。 可按人名或电话号码进行查询。 [提示] 建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。 根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出功能。 二、概要设计 根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出通讯录管理系统-C语言课程设计全文共16页,当前为第3页。 通讯录管理系统插入显示删除查询保存修改退出 通讯录管理系统-C语言课程设计全文共16页,当前为第3页。 通讯录管理系统 插入 显示 删除 查询 保存 修改 退出 三、详细设计 主函数; 主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 流程图 输入n,判断是否是0~6 开始显示一系列功能选项 N 输入n,判断是否是0~6 开始 显示一系列功能选项 根据n的值调用各功能模块函数结束 Y 根据n的值调用各功能模块函数 结束 【程序】 通讯录管理系统-C语言课程设计全文共16页,当前为第4页。int main() 开始输入要插入的记录个数ni从0到n-1调用Insert函数i!=0吗?返回主菜单保存调用Save函数结束NYY***********\n"); 通讯录管理系统-C语言课程设计全文共16页,当前为第4页。 开始 输入要插入的记录个数n i从0到n-1调用Insert函数 i!=0吗? 返回主菜单 保存调用Save函数 结束 N YY printf("\t\t**********************************************\n"); scanf("%d",&n); for(i=0;i<n;i++) ame); printf("请输入工作单位:\n"); scanf("%s",&pMan[Size+i].Depart); printf("请输入电话号码:\n"); scanf("%s",&pMan[Size+i].TEL); printf("请输入Email地址:\n"); scanf("%s",&pMan[Size+i].Email); } if(Save(pMan,Size+n)) { printf("\t\t*********** 恭喜!数据插入成功! ***********\n"); } else { printf("\t\t*********** 操作失败,请稍后再试 !***********\n"); } return Size+n; } 显示模块 通讯录管理系统-C语言课程设计全文共16页,当前为第5页。此模块为显示所有记录,流程图如下: 通讯录管理系统-C语言课程设计全文共16页,当前为第5页。 选择显示功能显示所有记录自动返回主菜单 选择显示功能 显示所有记录 自动返回主菜单 【程序】 通讯录管理系统-C语言课程设计全文共16页,当前为第6页。void Display(Man * pMan,int Size) 是否找到此姓名输入姓名开始提示没有找到显示找到的记录结束,返回主菜单NY开始输入要修改信息的姓名是否找到信息提示没有找到信息NY显示找到的信息提示是否删除NY提示未删除提示删除成功结束 { 通讯录管理系统-C语言课程设计全文共16页,当前为第6页。 是否找到此姓名 输入姓名 开始 提示没有找到 显示找到的记录 结束,返回主菜单 N Y 开始 输入要修改信息的姓名 是否找到信息 提示没有找到信息 N Y 显示找到的信息 提示是否删除 N Y 提示未删除 提示删除成功 结束 printf("您要删除的信息为:\n"); printf("%s\t\t%s\t%s\t%s\n",

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值