需求
制作一个电子通信录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、公司电话。
模块
·主界面:主要显示软件功能
A) 添加好友信息
B) 列表好友信息
C) 搜索好友
D) 更新好友信息
F) 删除好友
·添加好友:
用户输入命令后,让用户输入好友信息,个人电话号码不能为空,添加成功或失败都需要提示信息。
·列表好友:
可以根据电话号码或名称排序进行显示,使用堆排序和快速排序。
·搜索好友:
要求可以根据三种方式搜索:ID、名字、个人号码。如果未搜索到请提示,如果搜索到,显示出该好友信息。
·更新好友信息:
根据好友名字进行更新,可以改写除名字外所有信息。
·删除好友:
要求可以根据三种方式删除:ID、名字、个人号码。如果不存在该用户则提示,删除成功后提示。
使用文件进行输入输出,初始信息存储在“data.txt”中,完成对通讯录的操作后将所有信息存入“datachange.txt”中。
声明部分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define T 1
#define F 0
#define MAX 20
struct ListNode
{
int number;
char name[MAX];
char phonenumber[MAX];
char homenumber[MAX];
char qqnumber[MAX];
};
typedef struct list
{
struct ListNode p;
struct list *next;
}*List;
int init(List *member,List pointer[]);
void menu();
int select1(List member,List pointer[]);
int input(List member);
void creatpointer(List member,List pointer[]);
int view(List member,List pointer[]);
int search(List member);
int delete(List member);
int change(List member);
void print1(List pointer[],int len);
void Quick (List pointer[],int low,int high);
int pivotkey1(List pointer[],int low,int high);
int pivotkey2(List pointer[],int low,int high);
void swap(List pointer[],int low,int high);
void heapadjust(List pointer[],int i,int m);
void heap(List pointer[],int len);
int readfile(List member);
int writerfile(List pointer[]);
循环链表初始化
int init(List *member,List pointer[])
{
List newnode = (List)malloc(sizeof(struct list));
if(NULL == newnode)
{
return F;
}
newnode->p.number = 142000;
newnode->next = newnode;
*member = newnode;
pointer[0] = newnode;
return T;
}
菜单和选择函数
void menu()
{
printf("***************************************\n");
printf("*****这 是 一 个 简 单 的 通 讯 录*****\n");
printf("********键 入 数 字 选 择 功 能********\n");
printf("******* 1: 新 建 联 系 人 *******\n");
printf("******* 2: 查 看 联 系 人 *******\n");
printf("******* 3: 查 找 联 系 人 *******\n");
printf("******* 4: 删 除 联 系 人 *******\n");
printf("******* 5: 修 改 联 系 人 *******\n");
printf("******* 6: 退 出 通 讯 录 *******\n");
printf("*************** 请 输 入 **************\n");
printf("***************************************\n");
}
int select1(List member,List pointer[])
{
creatpointer(member,pointer);
int option;
while(option != 6)
{
menu();
scanf("%d",&option);
switch(option)
{
case 1:{
input(member);
printf("*******输 入 完 成,返 回 菜 单*******\n");
creatpointer(member,pointer);
break;
}
case 2:{
view(member,pointer);
printf("*******查 看 完 成,返 回 菜 单*******\n");
break;
}
case 3:{
search(member);
printf("*******查 找 完 成,返 回 菜 单*******\n");
break;
}
case 4:{
delete(member);
printf("*******删 除 完 成,返 回 菜 单*******\n");
creatpointer(member,pointer);
break;
}
case 5:{
change(member);
printf("*******修 改 完 成,返 回 菜 单*******\n");
break;
}
case 6:{
printf("*******欢 迎 再 次 使 用,谢 谢 !*******\n");
writerfile(pointer);
break;
}
default:{
printf("*******输 入 有 误,请 重 新 输 入 !*******\n");
break;
}
}
}
re