在使用动态存储的时候发现每次程序结束保存的信息都会消失,但储存在文件中就轻松的解决了这个问题。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int ElementType;
typedef int Status;
typedef struct node
{
char name[20];
ElementType age;
char sex[10];
char phonenumber[20];
struct node *next;
}Node;
Status Menu(Node* head);
Status Menuupdate(Node* head);
Status Menudelete(Node* head);
Status Menuquery(Node* head);
int Length(Node* head);
Status init(Node** head);
Status inserttail(Node* head);
Status deleteindex(Node* head);
Status deletename(Node* head);
Status deletephonenumber(Node* head);
Status updateindex(Node* head);
Status updatename(Node* head);
Status updatephone(Node* head);
void queryindex(Node* head);
void queryname(Node* head);
void queryphonenumber(Node* head, FILE* file);
void print(Node* head);
void sort(Node* head);
void read(Node* head);
void write(Node* head);
int main(int argc, char **argv)
{
FILE* file = fopen("cmd.txt", "a+b");
int ret;
Node* head;
ret = init(&head);
if(ERROR == ret)
{
return -1;
}
read(head);
Menu(head);
sort(head);
print(head);
write(head);
fclose(file);
return 0;
}
//主菜单
Status Menu(Node* head)
{
int number;
printf("欢迎来到Coder通讯录!\n");
printf("\n");
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("5:弹出操作提示\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入指令\n");
while(scanf("%d", &number) == 1)
{
switch(number)
{
case 1:
{
inserttail(head);
break;
}
case 2:
{
Menudelete(head);
break;
}
case 3:
{
Menuupdate(head);
break;
}
case 4:
{
Menuquery(head);
break;
}
case 5:
{
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入数字\n");
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
return OK;
}
//修改方式菜单
Status Menuupdate(Node* head)
{
int ret;
int number;
printf("1.根据编号进行修改\n");
printf("\n");
printf("2.根据姓名进行修改\n");
printf("\n");
printf("3.根据手机号码进行修改\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
updateindex(head);
break;
}
case 2:
{
updatename(head);
break;
}
case 3:
{
updatephone(head);
break;
}
}
return OK;
}
//删除子菜单
Status Menudelete(Node* head)
{
int ret;
int number;
printf("1.根据编号进行删除\n");
printf("\n");
printf("2.根据姓名进行删除\n");
printf("\n");
printf("3.根据手机号码进行删除\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
typedef int ElementType;
typedef int Status;
typedef struct node
{
char name[20];
ElementType age;
char sex[10];
char phonenumber[20];
struct node *next;
}Node;
Status Menu(Node* head);
Status Menuupdate(Node* head);
Status Menudelete(Node* head);
Status Menuquery(Node* head);
int Length(Node* head);
Status init(Node** head);
Status inserttail(Node* head);
Status deleteindex(Node* head);
Status deletename(Node* head);
Status deletephonenumber(Node* head);
Status updateindex(Node* head);
Status updatename(Node* head);
Status updatephone(Node* head);
void queryindex(Node* head);
void queryname(Node* head);
void queryphonenumber(Node* head, FILE* file);
void print(Node* head);
void sort(Node* head);
void read(Node* head);
void write(Node* head);
int main(int argc, char **argv)
{
FILE* file = fopen("cmd.txt", "a+b");
int ret;
Node* head;
ret = init(&head);
if(ERROR == ret)
{
return -1;
}
read(head);
Menu(head);
sort(head);
print(head);
write(head);
fclose(file);
return 0;
}
//主菜单
Status Menu(Node* head)
{
int number;
printf("欢迎来到Coder通讯录!\n");
printf("\n");
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("5:弹出操作提示\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入指令\n");
while(scanf("%d", &number) == 1)
{
switch(number)
{
case 1:
{
inserttail(head);
break;
}
case 2:
{
Menudelete(head);
break;
}
case 3:
{
Menuupdate(head);
break;
}
case 4:
{
Menuquery(head);
break;
}
case 5:
{
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入数字\n");
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
return OK;
}
//修改方式菜单
Status Menuupdate(Node* head)
{
int ret;
int number;
printf("1.根据编号进行修改\n");
printf("\n");
printf("2.根据姓名进行修改\n");
printf("\n");
printf("3.根据手机号码进行修改\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
updateindex(head);
break;
}
case 2:
{
updatename(head);
break;
}
case 3:
{
updatephone(head);
break;
}
}
return OK;
}
//删除子菜单
Status Menudelete(Node* head)
{
int ret;
int number;
printf("1.根据编号进行删除\n");
printf("\n");
printf("2.根据姓名进行删除\n");
printf("\n");
printf("3.根据手机号码进行删除\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{