需求
制作一个电子通讯录,通过该通讯录能存入好友ID 号、姓名(英文)、手机号码、家庭住址、公司电话。
模块
l 主界面:主要显示软件功能。
A) 添加好友信息。
B) 列表好友信息。(包含排序功能)
C) 搜索好友
D) 删除好友
添加好友:
用户输入 INSERT 命令后,让用户输入好友信息。添加成功或失败都需要提示用户
列表好友:
用户输入 DISPLAY 命令后,好友信息升序排列。
搜索好友:
用户输入 SEARCH 命令后,让用户输入将要搜索好友姓名查询。如果未搜索到请友好提示。如果搜索到,显示出该好友信息。
删除好友:
用户输入 DELETE 命令后,让用户输入将要删除好友姓名删除,如果存在同名的多个好友,则列表出,所有同名的好友信息,让用户通过输入 ID 号删除。提示用户删除成功。
//头文件
#ifndef __addresslist_H__
#define __addresslist_H__
#define TRUE 1
#define FALSE 0
typedef struct address
{
int ID;
char name[20];
int telephone;
char home[50];
int Co;
struct address* next;
}Node;
Node* Create_list();//头结点
int Insert(Node*h);//添加
void Display(Node*h);//排序显示
int Find(Node*h);//搜索好友
int Delete(Node*H);//删除好友
//功能模块函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "addresslist.h"
//主界面
void menu()
{
printf("************通讯录**************\n");
printf("* *\n");
printf("* 1:添加好友 *\n");
printf("* 2:列表好友 *\n");
printf("* 3:搜索好友 *\n");
printf("* 4:删除好友 *\n");
printf("* 5: 退出 *\n");
printf("* *\n");
printf("********************************\n");
printf("\n");
}
//创建头结点
Node* Create_list()
{
Node*list = (Node*)malloc(sizeof(Node)/sizeof(char));
if (list == NULL)
return NULL;
list->next = NULL;
return list;
}
//添加好友
int Insert(Node*h)
{
if (h == NULL)
{
return FALSE;
}
Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
printf("添加失败\n");
return FALSE;
}
printf("*************添加好友************\n");
printf("请输入好友信息\n");//一步步提示添加信息
printf("好友ID:");
scanf("%d", &node->ID);
printf("好友姓名:");
scanf("%s", node->name);
printf("联系方式:");
scanf("%d", &node->telephone);
printf("家庭住址:");
scanf("%s", node->home);
printf("公司电话:");
scanf("%d", &node->Co);
Node*tmp = h;
while(tmp->next)
{
tmp = tmp->next;
}
tmp->next = node;
node->next = NULL;
printf("添加成功\n");
return TRUE;
}
//显示好友
void Display(Node*h)
{
if (h->next == NULL)
{
printf("当前无好友\n");
return;
}
Node*tmp = h->next;//h是头结点的地址,h->next是第一个结点的地址
printf("***************好友列表****************\n");
while (tmp)
{
printf("——————————————————————————\n");
printf("\tID:%d\n", tmp->ID);
printf("\t姓名:%s\n", tmp->name);
printf("\t联系方式:%d\n", tmp->telephone);
printf("\t家庭住址:%s\n", tmp->home);
printf("\t公司电话:%d\n", tmp->Co);
printf("——————————————————————————\n");
printf("\n");
tmp = tmp->next;
}
printf("\n");
}
//搜索好友
int Find(Node*h)
{
char name[20];
int count = 0;
Node*tmp = NULL;
if (h->next == NULL)
{
printf("当前无好友\n");
return FALSE;
}
printf("**************查询*****************\n");
putchar('\n');
printf("请输入要查找的好友姓名:");
scanf("%s", name);
tmp = h->next;//h是头结点的地址,h->next是第一个结点的地址
while(tmp)
{
if(strcmp(name, tmp->name) == 0)
{
printf("——————————————————————————\n");
printf("\tID:%d\n", tmp->ID);
printf("\t姓名:%s\n", tmp->name);
printf("\t联系方式:%d\n", tmp->telephone);
printf("\t家庭住址:%s\n", tmp->home);
printf("\t公司电话:%d\n", tmp->Co);
printf("——————————————————————————\n");
printf("\n");
count++;
}
tmp = tmp->next;
}
if(0 == count)
{
printf("当前未有此好友\n");
return FALSE;
}
return TRUE;
}
//删除好友
int Delete(Node*h)
{
char name[20];
Node*tmp = NULL;
Node*p = NULL;
int count = 0;
int i;
if (h->next == NULL)
{
printf("当前无好友\n");
return FALSE;
}
printf("**************删除*****************\n");
putchar('\n');
printf("请输入要删除的好友姓名:");
scanf("%s", name);
tmp = h->next;
while(tmp)
{
if(strcmp(name, tmp->name) == 0)
{
count++;
}
tmp = tmp->next;
}
if(count > 1)
{
tmp = h->next;
while(tmp)
{
if(strcmp(name, tmp->name) == 0)
{
printf("——————————————————————————\n");
printf("\tID:%d\n", tmp->ID);
printf("\t姓名:%s\n", tmp->name);
printf("\t联系方式:%d\n", tmp->telephone);
printf("\t家庭住址:%s\n", tmp->home);
printf("\t公司电话:%d\n", tmp->Co);
printf("——————————————————————————\n");
printf("\n");
}
tmp = tmp->next;
}
printf("请输入要删除好友的ID:");
scanf("%d", &i);
tmp = h;//找到要删好友的前一个好友
while(tmp->next)
{
if(i == tmp->next->ID)//tmp指向要删好友的前一个好友
{
break;
}
tmp = tmp->next;
}
if(tmp->next == NULL)
{
printf("输入有误,删除失败\n");
return FALSE;
}
p = tmp->next;//p指向要删好友
tmp->next = p->next;
free(p);
printf("删除成功\n");
}
else if(count == 1)
{
tmp = h;//找到要删好友的前一个好友
while(tmp->next)
{
if(strcmp(name, tmp->next->name) == 0)//tmp指向要删好友的前一个好友
{
break;
}
tmp = tmp->next;
}
p = tmp->next;//p指向要删好友
tmp->next = p->next;
free(p);
printf("删除成功\n");
}
else
{
printf("当前无此好友\n");
}
return TRUE;
}
//主函数
#include <stdio.h>
#include <stdlib.h>
#include "addresslist.h"
int main()
{
int func;//功能选项
int top;
Node* head = Create_list();
if (head == NULL)
{
return -1;
}
while(1)
{
func = 0;
menu();
printf("请输入您需要的功能选项:");
scanf("%d", &func);
switch(func)
{
case 1:
{
system("clear");
Insert(head);//头插
printf("返回主界面请按1:");
scanf("%d", &top);
if(top == 1)
{
break;
}
else
{
while(1)
{
printf("输入错误指令请重新输入!\n");
scanf("%d", &top);
if(top == 1)
{
break;
}
}
break;
}
}
case 2:
{
system("clear");
Display(head);//按添加顺序排列
printf("返回主界面请按1:");
scanf("%d", &top);
if(top == 1)
{
break;
}
else
{
while(1)
{
printf("输入错误指令请重新输入!\n");
scanf("%d", &top);
if(top == 1)
{
break;
}
}
break;
}
}
case 3:
{
system("clear");
Find(head);
printf("返回主界面请按1:");
scanf("%d", &top);
if(top == 1)
{
break;
}
else
{
while(1)
{
printf("输入错误指令请重新输入!\n");
scanf("%d", &top);
if(top == 1)
{
break;
}
}
break;
}
}
case 4:
{
system("clear");
Delete(head);
printf("返回主界面请按1:");
scanf("%d", &top);
if(top == 1)
{
break;
}
else
{
while(1)
{
printf("输入错误指令请重新输入!\n");
scanf("%d", &top);
if(top == 1)
{
break;
}
}
break;
}
}
case 5:
{
exit(0);
}
default:
system("clear");
printf("输入错误指令请重新输入!\n");
sleep(1);
printf("正在返回主界面\n");
printf(".\n");
sleep(1);
printf("..\n");
sleep(1);
printf("...\n");
sleep(1);
break;
}
}
return 0;
}