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