这是一个基于链表的项目,由于之前学习了怎样来创建一个单链表,在一个基础上就想来做一个电子通讯录玩玩。
项目需求: 制作一个电子通讯录,通过该通讯录能存入好友 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;
}