其他都成,就是无法保存(代人问的,因为这个问题我的程序也没解决)

winhkey 2005-11-01 10:46:27
#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;
}
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
winhkey 2005-11-04
  • 打赏
  • 举报
回复
谢谢大家,昨晚问题已解决,请斑竹帮忙结贴
record load_data()
{
FILE *fp1;
record p;
record HL;
HL=NULL;//(record)malloc(sizeof(LNode));
//HL->next=NULL;
.
.
.
K 2005-11-04
  • 打赏
  • 举报
回复
record create()
{
record HL;
HL=NULL;
return HL;
}//这个 - -;总是返回0,有什么意义吗?

//你最好重新写一个,估计会比除错的时间段很多
Flood1984 2005-11-03
  • 打赏
  • 举报
回复
只大致看了下保存数据的程序.
你试试
写文件使用函数 fprintf,然后用记事本打开文件,看写了些什么进去了
lujun-cc 2005-11-03
  • 打赏
  • 举报
回复
汗,这么长的代码,慢慢读读说!
tangyanb 2005-11-03
  • 打赏
  • 举报
回复
肯定没人~
winhkey 2005-11-03
  • 打赏
  • 举报
回复
有人指点一下吗
winhkey 2005-11-01
  • 打赏
  • 举报
回复
//按QQ号查询
int search_by_QQ(LNode *HL)
{
char QQ[10];
LNode *p=HL;

printf("请输入QQ号:");
gets(QQ);
while(p!=NULL)
if(!strcmp(QQ,p->data.QQ))
{
//输出所查到的结点信息
print_node(p);
getch();
return 1;
}
else
p=p->next;

printf("--------------------------------\n");
printf("Sorry!没有您所要查找的信息!\n请按任意键继续...\n");
getch();
return 0;
}

//保存数据
int save_data(LNode *HL)
{
FILE *fp;
record p=HL->next; //

if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return 0;
}

while(p)
{
fwrite(p,sizeof(LNode),1,fp); //将数据写入fp中
p=p->next;
}
fclose(fp);
return 1;
}

//装载数据///装载数据时有误
record load_data()
{
FILE *fp1;
record p;
record HL;
HL=(record)malloc(sizeof(LNode));
HL->next=NULL;

fp1=fopen("data.txt","ab+");
if(!fp1)
{
printf("装载数据失败!");
getch();
return NULL;
}
while(!feof(fp1))
{
p=(record)malloc(sizeof(LNode));
if(fread(p,sizeof(LNode),1,fp1)==1) //将文件的内容放入结点中
//将该结点挂入链中
{
p->next=NULL;
HL->next=p;
HL=p;
}
}
fclose(fp1);
return HL;
}

//释放内存
void release_memery(record HL)
{
record p=HL;
record tmp=NULL;
tmp=(record)malloc(sizeof(LNode));

while(p)
{
tmp=p->next;
free(p);
p=tmp;
}
}
void print_graph()
{
printf("\t\t\t------------------------\n");
}



//主界面,提供第一步执行的操作
void disp_main_menu()
{
system("cls");
printf("\n\n");
print_graph();
printf("\t\t\t\t通讯录\n");
print_graph();
printf("\n\t\t\t 1. 查 询 信 息\n\n");
printf("\t\t\t 2. 编 辑 信 息\n\n");
printf("\t\t\t 3. 退 出 系 统\n");
}

//查询界面
void disp_search_menu()
{
system("cls");
printf("\n\n");
print_graph();
printf("\t\t\t\t查询菜单\n");
print_graph();
printf("\n\t\t\t 1. 按 姓 名 查 询\n\n");
printf("\t\t\t 2. 按 电 话 查 询\n\n");
printf("\t\t\t 3. 按 QQ 号 查 询\n\n");
printf("\t\t\t 4. 返 回 主 界 面\n");
}

//编辑界面
void disp_edit_menu()
{
system("cls");
printf("\n\n");
print_graph();
printf("\t\t\t\t编辑菜单\n");
print_graph();
printf("\n\t\t\t 1. 添 加 信 息\n\n");
printf("\t\t\t 2. 删 除 信 息\n\n");
printf("\t\t\t 3. 修 改 信 息\n\n");
printf("\t\t\t 4. 返 回 主 界 面\n");
}

void main()
{
char ch;
LNode *list;
int quit=0;

list=create();

//装入数据
list=load_data();
do
{
disp_main_menu();
ch=getch();
switch(ch)
{
case '1': //查询信息
{
int sub1_run=1;
while(sub1_run)
{
disp_search_menu();
ch=getch();
switch(ch)
{
case '1': //按姓名查找
search_by_name(list);
break;
case '2': //按电话查找
search_by_phone(list);
break;
case '3': //按QQ号查找
search_by_QQ(list);
break;
case '4': //返回主菜单
sub1_run=0;
break;
} //switch
}//while case 1
} //case 1
break;
case '2': //编辑信息
{
int sub2_run=1;
while(sub2_run)
{
disp_edit_menu();
ch=getch();
switch(ch)
{
case '1':
list=add_info(list);
break;
case '2':
del_info(list);
break;
case '3':
update_info(list);
break;
case '4':
sub2_run=0;
break;
}
} //while case 2
}
break;
case '3': //退出系统
quit=1;
break;
default:
printf("请输入1~3!");
getch();
break;

} //switch
system("cls");
} while(!quit); //do

//保存数据(有错误)
save_data(list);

release_memery(list);
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧