首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

三向十字链表的保留和载入函数,把电脑搞到死机,直接切了电源。

2012-09-09 
三向十字链表的保存和载入函数,把电脑搞到死机,直接切了电源。。。#includestdio.h#includestdlib.h#incl

三向十字链表的保存和载入函数,把电脑搞到死机,直接切了电源。。。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//定义结构类型
typedef struct in_basic
{
char pool_name[4]; //塘号
char seed_num[8]; //苗种编号
char time[11]; //投养时间
int num; //投养数量
float price; //单价
char *resource; //苗种来源
char list_num[5]; //供货单号
struct in_basic* next;
}IN_BASIC;

typedef struct seed_basic
{
char pool_name[4]; //塘号
char seed_num[8]; //苗种编号
char seed_name[20]; //苗种名称
char spe[5]; //规格
struct in_basic* inext;
struct seed_basic* next;
}SEED_BASIC;




typedef struct pool_basic
{
float size; //水面积
char pool_name[4]; //塘号
struct seed_basic* snext;
struct pool_basic* next;
}POOL_BASIC;


//增加链表信息
  void add(POOL_BASIC** head)
{
POOL_BASIC *hp=*head,*p;
SEED_BASIC *pp;
IN_BASIC *ppp;
char ch;
do
{
  printf("确实要录入信息?(y/n)\n");
  getchar();
  ch=getchar();
}while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y');
  if(ch=='n'||ch=='N')
  return;
lop:printf("(1)请输入鱼塘基本信息:\n");
  p=(POOL_BASIC *)malloc(sizeof(POOL_BASIC));
printf(" 塘号:");
scanf("%s",p->pool_name);
printf("水面积:");
scanf("%f",&p->size);
getchar();
p->snext=NULL;
p->next=hp;
hp=p;

  *head=hp;

while (p!=NULL)
 {
printf("(2)请输入%s的苗种基本信息:",p->pool_name);
printf("\n");
looop:pp=(SEED_BASIC*)malloc(sizeof(SEED_BASIC));

printf(" 苗种编号:");
scanf("%s",pp->seed_num);
printf(" 苗种名称:");
scanf("%s",pp->seed_name);
printf(" 规格:");
scanf("%s",pp->spe);
getchar();
strcpy(pp->pool_name, p->pool_name);
pp->next=p->snext;
p->snext=pp;
pp->inext=NULL;
while(pp!=NULL)
  {
  loop:printf("(3)请输入%s的投苗基本信息:",pp->seed_name);
  ppp=(IN_BASIC*)malloc(sizeof(IN_BASIC));
  printf("\n");
printf(" 投养时间:");
scanf("%s", ppp->time);
printf(" 投养数量:");
scanf("%d",&ppp->num);
printf(" 单价:");
scanf("%f",&ppp->price);
ppp->resource=(char *)malloc(sizeof(char)*20);
printf(" 苗种来源:");
scanf("%s",ppp->resource);
printf(" 供货单号:");
scanf("%s",ppp->list_num);
getchar();
strcpy(ppp->pool_name,pp->pool_name);
strcpy(ppp->seed_num, pp->seed_num);
ppp->next=pp->inext;
pp->inext=ppp;
  printf("(3)是否继续输入%s的投苗基本信息?(y/n):",pp->seed_name);
ch=getchar();
getchar();
  while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y')
  {
printf("(3)是否继续输入%s的投苗基本信息?(y/n):",pp->seed_name);
ch=getchar();
getchar();
}
  if(ch=='Y'||ch=='y')
  goto loop;
  else
printf("(2)是否继续输入%s的苗种基本信息?(y/n):",p->pool_name);
ch=getchar();
getchar();
while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y')
  {
printf("(2)是否继续输入%s的苗种基本信息?(y/n):",p->pool_name);


ch=getchar();
getchar();
  }
  if(ch=='Y'||ch=='y')
  goto looop;
  else if(ch=='N'||ch=='n')
  break;
}
printf("(1)是否继续输入鱼塘基本信息?(y/n):");
ch=getchar();
getchar();
while(ch!='y'&&ch!='Y'&&ch!='n'&&ch!='N')
  {
  printf("(1)是否继续输入鱼塘基本信息?(y/n):");
  ch=getchar();
  getchar();
  }
  if(ch=='y'||ch=='Y')
  goto lop;
  else break;
 }
 *head=p;
}



//遍历函数
void traverse(POOL_BASIC *head)
{
POOL_BASIC *p=head;
SEED_BASIC *pp;
IN_BASIC *ppp;
int i=1;
  if(head==NULL)
  {
  printf("链表中没有信息!");
  getchar();
  return;
  }
for(;p!=NULL;p=p->next,i++)
{
printf("(%d)\n",i);
printf("-------------------------------------------\n");
printf("鱼塘基本信息:\n");
printf("塘号:%s",p->pool_name);
printf(" ");
printf("水面积:%.2f",p->size);
printf("\n");
pp=p->snext;
while(pp!=NULL)
{
printf("**************************************");
printf("\n");
printf("苗种基本信息:\n");
printf("苗种编号:%s", pp->seed_num);
printf(" ");
printf("苗种名称:%s",pp->seed_name);
printf(" ");
printf("规格:%s",pp->spe);
printf("\n");
printf("**************************************\n");
ppp=pp->inext;
while(ppp!=NULL)
  {
  printf("##########################################################\n");
  printf("投苗基本信息:\n");
printf("投养时间:%-11s",ppp->time);
printf(" ");
printf("投养数量:%d",ppp->num);
printf(" ");
printf("单价:%.2f",ppp->price);
printf("\n");
printf("苗种来源:%-11s",ppp->resource);
printf(" ");
printf("供货单号:%s",ppp->list_num);
printf("\n");
printf("##########################################################\n");
ppp=ppp->next;
  }

pp=pp->next;
}
printf("-------------------------------------------\n");
}
getchar();
}

//保存函数
void save(POOL_BASIC* head)
{
FILE *fp1, *fp2, *fp3;
POOL_BASIC *p=head;
SEED_BASIC *pp;
IN_BASIC *ppp;
if(head==NULL)
{
printf("没有信息,保存失败!");
getchar();
return;
}
if((fp1=fopen("pool.dat","wb"))==NULL)
exit(-1);
if((fp2=fopen("seed.dat","wb"))==NULL)
exit(-1);
if((fp3=fopen("in.dat","wb"))==NULL)
exit(-1);
while(p!=NULL)
{
fwrite(p,sizeof(POOL_BASIC) ,1, fp1);
pp=p->snext;
while(pp!=NULL)
{
fwrite(pp,sizeof(SEED_BASIC), 1, fp2);
ppp=pp->inext;
while(ppp!=NULL)
{
fwrite(ppp,sizeof(IN_BASIC), 1, fp3);
ppp=ppp->next;
}
pp=pp->next;
}
p=p->next;
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
printf("已经保存!");
getchar();
}




//载入数据
void load(POOL_BASIC** head)
{
FILE *fp1;
FILE *fp2;
FILE *fp3;
POOL_BASIC *hp=NULL, *p=*head;


SEED_BASIC *pp;
IN_BASIC* ppp;
if((fp1=fopen("pool.dat","rb"))==NULL)
exit(-1);
if((fp2=fopen("seed.dat","rb"))==NULL)
exit(-1);
if((fp3=fopen("in.dat","rb"))==NULL)
exit(-1);
while(!feof(fp1))
{
p=(POOL_BASIC *)malloc(sizeof(POOL_BASIC));
fread(p, sizeof(POOL_BASIC), 1, fp1);
p->snext=NULL;
p->next=hp;
hp=p;
}
*head=hp;
  printf("第一结点读完");
  getchar();
while(!feof(fp2))
{
pp=(SEED_BASIC*)malloc(sizeof(SEED_BASIC));
fread(pp, sizeof(SEED_BASIC), 1, fp2);
p=*head;
while(p!=NULL)
{
if(!strcmp(p->pool_name, pp->pool_name))
{
pp->inext=NULL;
pp->next=p->snext;
p->snext=pp;
break;
}
else
p=p->next;
}
}

while(!feof(fp3))
{
ppp=(IN_BASIC*)malloc(sizeof(IN_BASIC));
fread(ppp, sizeof(IN_BASIC), 1, fp3);
p=*head;
while(p!=NULL)
{
pp=p->snext;
while(pp!=NULL)
{
if(!strcmp(ppp->pool_name,pp->pool_name)&&(!strcmp(ppp->seed_num, pp->seed_name)))
{
ppp->next=pp->inext;
pp->inext=ppp;
break;
}
else
pp=pp->next;
}
p=p->next;
}
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
printf("已经载入!");
getchar();
}


上面的就是我写的保存函数和载入函数,保存函数不知道有没有问题,载入函数肯定有问题,我点了载入后,没反应,狂点了几下回车,然后就死机了。。。。


[解决办法]
这么长……保证没人看,嘿嘿

热点排行