其他都成,就是无法保存(代人问的,因为这个问题我的程序也没解决)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
//存放结点的数据信息
struct Info
{
char name[18];
char phone[12];
char QQ[10];
};
typedef struct Info Elemtype; //数据域类型
//定义数据结构
typedef struct Node
{
Elemtype data; //数据域
struct Node *next; //指针域
}LNode,*record;
//建立链表,并初始化
record create();
//添加信息
record add_info(LNode *HL);
//删除信息
int del_info(LNode *HL);
//修改信息
int update_info(LNode *HL);
//以下为三种查找方式
int search_by_name(LNode *HL);
int search_by_phone(LNode *HL);
int search_by_QQ(LNode *HL);
//打印结点
void print_node(LNode *p1);
//保存数据
int save_data(LNode *HL);
//装载数据
record load_data();
//释放内存
void release_memery(record HL);
//建立链表,并初始化
record create()
{
record HL;
HL=NULL;
return HL;
}
//向链表中添加信息
record add_info(LNode *HL)
{
record newptr;
LNode *p=HL;
newptr=(record)malloc(sizeof(LNode));
if (!newptr)
{
printf("--------------------------------\n");
printf("申请内存空间失败!\n请按任意键继续...\n");
getch();
return 0;
}
printf("请输入姓名:\n");
gets(newptr->data.name);
printf("请输入电话:\n");
gets(newptr->data.phone);
printf("请输入QQ号:\n");
gets(newptr->data.QQ);
//将信息结点插入到链表的头部
newptr->next=HL;
HL=newptr;
printf("--------------------------------\n");
printf("添加信息成功!\n请按任意键继续...\n");
getch();
return HL;
}
//删除信息
int del_info(LNode *HL)
{
char name[18];
LNode *p,*q;
p=(LNode*)malloc(sizeof(LNode));
q=(LNode*)malloc(sizeof(LNode));
p=HL; q=NULL; //一定要先申请内存,然后才可以对其赋值
printf("请输入您要删除记录的姓名:\n");
gets(name);
while(p!=NULL)
{
if(strcmp(name,p->data.name)==0)
break;
else
{
q=p;
p=p->next;
}
}
if(p==NULL)
{
printf("--------------------------------\n");
printf("不存在这样的记录!\n请按任意键继续...\n");
getch();
return 0;
}
else
{
if(q==NULL)
HL=HL->next;
else
q->next=p->next;
free(p);
printf("--------------------------------\n");
printf("\n删除成功!\n请按任意键继续...\n");
getch();
return 1;
}
}
//修改信息
int update_info(LNode *HL)
{
char name[18];
LNode *p;
p=(record)malloc(sizeof(LNode));
p=HL;
printf("请输入您要修改记录的姓名:\n");
gets(name);
while(p!=NULL)
{
if(strcmp(name,p->data.name)==0)
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n修改失败!\n请按任意键继续...\n");
getch();
return 0;
}
printf("请输入新的姓名:");
gets(p->data.name);
printf("请输入新的电话:");
gets(p->data.phone);
printf("请输入新的QQ号:");
gets(p->data.QQ);
printf("--------------------------------\n");
printf("修改成功!\n请按任意键继续...\n");
getch();
return 1;
}
//打印结点
void print_node(LNode *p1)
{
printf("查找的结果如下:\n");
printf("--------------------------------\n");
printf("姓名:%s\n",p1->data.name);
printf("电话:%s\n",p1->data.phone);
printf("QQ号:%s\n",p1->data.QQ);
printf("--------------------------------\n");
printf("按任意键继续...");
}
//按姓名查询
int search_by_name(LNode *HL)
{
char name[18];
LNode *p=HL;
printf("请输入姓名:");
gets(name);
while(p!=NULL)
if(strcmp(name,p->data.name)==0)
{
//输出所查到的结点信息
print_node(p);
getch(); //按任意键继续
return 1;
}
else
p=p->next;
printf("--------------------------------\n");
printf("Sorry!没有您所要查找的信息!\n请按任意键继续...\n");
getch();
return 0;
}
//按电话查询
int search_by_phone(LNode *HL)
{
char phone[12];
LNode* p=HL;
printf("请输入电话:");
gets(phone);
while(p!=NULL)
if(!strcmp(phone,p->data.phone))
{
//输出所查到的结点信息
print_node(p);
getch();
return 1;
}
else
p=p->next;
printf("--------------------------------\n");
printf("Sorry!没有您所要查找的信息!\n请按任意键继续...\n");
getch();
return 0;
}