电子通讯录(1)

这是一个基于链表的项目,由于之前学习了怎样来创建一个单链表,在一个基础上就想来做一个电子通讯录玩玩。

项目需求: 制作一个电子通讯录,通过该通讯录能存入好友 ID 号、姓名(英文) 、手机号码、家庭住址、公司电话。

模块包括  :

  主界面:主要显示软件功能。
A)  添加好友信息。
B)  列表好友信息。(包含排序功能)
C)  搜索好友
D)  删除好友


  添加好友:
用户输入 INSERT 命令后,让用户输入好友信息。添加成功或失败都需要提示用户。


  列表好友:
用户输入 DISPLAY 命令后,好友信息升序排列。


  搜索好友:
用户输入 SEARCH 命令后,让用户输入将要搜索好友姓名查询。如果未搜索到
请友好提示。如果搜索到,显示出该好友信息。

  删除好友:
用户输入 DELETE 命令后,让用输入将要删除好友姓名删除,如果存在同名的
多个好友,则列表出,所有同名的好友信息,让用户通过输入 ID 号删除。提示用
户删除成功。  


由于用链表来实现,将每个好友的信息都放入一个结构体中作为一个结点。首先要先创建这个链表,将每个好友的信息添加到这个链表中构成这个通讯录。其次就是对这个通讯录进行操作,说白了就是对链表进行增删改查等。

一个好友包括5个信息。可以建一个如下的结构体。

typedef struct friend
{
	int id;                    //结点数据
	char name[20];
	char phone[20];
	char addr[20];
	char company_phone[20];
	struct friend *next;       //结点指针
}Friend;
typedef Friend* PFriend;        //重命名结点指针类型

我这次是用头结点的方式来创建的链表的。在main函数中定义一个PFriend类型的结点为head_node。

创建链表我用的是尾插法,在结构体中有id,name[]等数据,我选择用id作为一个递增的值,通过id++就可以不断的插入结点。

         因为主界面会显示4个内容,在主函数中用switch..case..语句来判断。

下面是初写的一个只能实现添加好友的版本。

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

#define OK          	0
#define ERROR      	   -1
#define MALLOC_ERROR   -2

typedef struct friend
{
	int id;                         //结点数据
	char name[20];
	char phone[20];
	char addr[20];
	char company_phone[20];
	struct friend *next;           //结点指针
}Friend;
typedef Friend *PFriend;           //重命名结点指针类型

int Add_Friend(PFriend s,int id)
{
	if (s == NULL)
	{
		return ERROR;
	}
	
	//要插入的朋友信息
	PFriend friend = (PFriend)malloc(sizeof(Friend)/sizeof(char));
	if (friend == NULL)
	{
		return MALLOC_ERROR;
	}
	friend->id = id;
	printf ("\n\tput your name:");
	scanf ("%s",friend->name);
	printf ("\n\tput your phone:");
	scanf ("%s",friend->phone);
	printf ("\n\tput your addr:");
	scanf ("%s",friend->addr);
	printf ("\n\tput your company_phone:");
	scanf ("%s",friend->company_phone);
	
	friend->next = NULL;
	
	//找最后一个结点
	PFriend temp = s;
	while (temp->next)
	{
		temp->next = temp;
	}
	temp->next = friend;
	
	return OK;
	
}

void interface()
{
	printf ("1) 添加好友\n");
	printf ("2) 列举好友\n");
	printf ("3) 搜索好友\n");
	printf ("4) 删除好友\n");
	printf ("请选择:");
}

int main()
{
	int id = 0;
	
	PFriend head_node = (PFriend)malloc(sizeof(Friend)/sizeof(char));
	if (head_node == NULL)
	{
		return MALLOC_ERROR;
	}
	head_node->next == NULL;
	
	//选择
	char choice[2];
	system("clear");            //清屏
	while(1)
	{
		interface();
		scanf ("%s",choice);      //字符串以"\n"结尾
		switch(choice[0])
		{
			case '1'://添加好友
			{
				id++;
				if (Add_Friend(head_node,id) != OK)
				{
					return ERROR;
					system("clear");
					printf ("\n\n\n");
					printf ("\t添加好友失败,请重新添加!");
				}
				system("clear");
				printf ("\n\n\n");
				printf ("\t添加好友成功!\n");
				break;
			}
			case'2'://列举好友
			{
				break;
			}
			case'3'://搜索好友
			{
				break;
			}
			case'4'://删除好友
			{
				break;
			}
			default:
			{
				system("clear");
				printf ("\n\n\n");
				printf ("请输入正确的选项!\n\n\n");
				break;
			}
		}
	}
	
	system("claer");
	return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值