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

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;
}
...全文
131 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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);
}
该工具支持多个型号,包括但不限于idata95w、idata95v以及iData95等。它是一种pda刷机软件,即个人数字助理(Personal Digital Assistant)设备的固件升级程序。刷机通常指的是将设备的固件或者操作系统进行更新或替换的过程,可以用来修复系统、提升设备性能或更新新功能。 刷机工具的操作过程通常包括连接设备到电脑、选择正确的固件版本、执行刷机程序以及等待过程完。在进行刷机之前,用户需要确保下载的刷机工具版本与自己的设备型号相匹配,并严格遵循操作说明,以避免刷机失败导致设备变砖(即设备无法启动)。 在压缩包文件列表中仅提到了"A5V2R2刷机工具",这可能表明该工具是为特定版本的idata95系列产品设计的。可能是指固件的版本号,比如A5V2R2可能代表某个版本的固件,其中A5可能表示版本类型,V2表示版本号,R2可能表示修订级别。 刷机工具有时还包含有解锁Bootloader(引导程序)的功能,这在某些设备中是进行刷机前的必要步骤。Bootloader是设备启动时首先运行的一段代码,负责加载操作系统。在一些设备上,Bootloader被锁定,以防止非授权的系统更改。解锁Bootloader可能会清除设备上的所有数据,因此这个过程需要谨慎操作。 刷机工具的使用通常涉及以下步骤: 1. 准备工作:备份好设备上的个人数据,确保数据安全。 2. 下载对应的刷机工具:根据设备型号下载相应的刷机工具,确保来源的安全可靠。 3. 启动设备至下载模式:这通常需要在设备关闭状态下同时按住特定的几个按键来进入。 4. 连接设备到电脑:使用USB数据线将设备连接到电脑。 5. 运行刷机工具:打开刷机工具软件,通常会有一个简单的用户界面指导用户完刷机过程。 6. 执行刷机程序:根据软件指示选择相应的固件文件,然后软件会自动完刷机过程。 7. 刷机后处理:刷机完后,通常需要手动启动设备或进行额外的配置以确保设备正常运行。 刷机不仅在技术上有一定风险,而且可能会使设备的保修失效。因此,如果有足够的经验或者不确定是否需要刷机,建议不要轻易尝试。此外,刷机也可能导致设备的某些功能无法使用或不稳定,所以在进行刷机之前应该进行充分的了解和准备。"
“1-考试报名系统1”项目是一个数据结构课程设计,旨在创建一个考试报名系统。该项目由汪明杰同学在软件学院软件工程专业,同济大学进行,指导教师为张颖。 本文档详细阐述了项目的分析、设计、实现和测试过程。首先,项目背景指出考试报名系统对学校教务管理的重要性,特别是在处理大量考试人员时的挑战。接着,项目需求分析部分明确了系统应具备的功能,包括用户友好性、数据处理能力等。 在项目要求中,功能要求详细列出了系统应具备的各个功能,如: 1.3.1 功能要求:这可能包括考生注册、考试选择、报名、取消报名、查询考试信息等功能。 1.3.2 输入格式:可能涉及考生信息输入的格式规范,如姓名、学号、选择的考试科目等。 1.3.3 输出格式:可能涉及打印报名功通知、查询结果展示等输出信息的格式。 项目设计部分讨论了数据结构和类的设计: 2.1 数据结构设计:可能使用数据结构如链表来存储和管理考生信息和考试数据。 2.2 类设计:包括结点类(ListNode)、双向链表类(List)以及数据库类(DataBase),用于构建系统的核心结构。 在项目实现章节,详细描述了各个功能的实现逻辑和代码,包括: 3.1 项目主体功能:涵盖系统的整体流程和代码实现。 3.2 项目初始化:如何加载初始数据,包括读取文件和手动输入。 3.3 插入数据:添加新的考生信息或考试报名。 3.4 删除数据:取消考生的报名。 3.5 修改数据:更新考生信息或考试选择。 3.6 查询数据:根据特定条件查找考生信息或考试详情。 3.7 统计数据:可能包括统计报名人数、考试科目选择情况等。 最后,项目测试部分涵盖了各种测试用例,确保系统的正确性和稳定性,如: 4.1 项目初始化测试:验证数据加载功能。 4.2 插入、删除、查找、修改和统计测试:分别检查各功能是否正常工作。 4.7 边界测试:测试特殊情况,如插入已存在的考生、删除不存在的考生等。 这个“1-考试报名系统1”项目涵盖了软件开发的完整生命周期,从需求分析到设计、实现和测试,体现了软件工程中的核心原则,特别是数据结构的应用和系统功能的实现。

33,320

社区成员

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

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