📄 fun2.c
字号:
/*********************************/
/********输出函数*****************/
/********************************/
# include "head2.h"
void print_perf2(DATA2 *head2)
{
int i=1;int j=1;
if(head2==NULL)
{
printf("没有任何数据,按任意键返回主菜单:");
printf("\n*****************************\n");
getch();
return;
}
else
printf("输出以下结果:\n");
printf("序号**************各序号码\n");
d1=head2;/*指向头指针*/
while(d1!=NULL)
{
printf("%ld ",d1->name2);
for(j=0;j<=6;j++)
printf("%4d",d1->number2[j]);
printf("\n");
d1=d1->next2;/*下一个结点**/
}
printf("any key to return\n");
getch();
return;
}
/*************************************************/
/**************保存函数***************************/
/**********************************************/
void save2(DATA2 *head2)
{
printf("input the file name2:\n");
scanf("%s",filename2);
if((fp=fopen(filename2,"wb"))==NULL)
{
printf("文件打开失败,按任意键返回菜单\n");
getch();
return;
}
d1=d2=head2;/*指向头指针*/
while(d1!=NULL)
{
if(fwrite(d1,sizeof(DATA2),1,fp)!=1)
{
printf("shi bai\n");
getch();
return;
}
d1=d1->next2;/*下一个结点**/
}
fclose(fp);
printf("saved,input any key to return menu:\n");
getch();
}
/***********************************************/
/***************插入函数***********************/
/********************************************/
DATA2 *insert_perf2(DATA2 *head2)
{
DATA2 *p3=NULL;
int i,m;
m=1;
d1=head2;
d2=head2;
while(m!=0)
{ /**申请一个新空间,已存放插入的数据**/
if((p3=(DATA2 *)malloc(LEN2))==NULL)
{
printf("内存不足,链表创建失败!\n");
getch();
return NULL;
}
printf("请输入号码的序号:\n");
scanf("%d",&p3->name2);
printf("请输入各个号码:\n");
for(i=0;i<=6;i++)
scanf("%d",&p3->number2[i]);
/**原链表没有一个数据**/
if(head2==NULL)
{
head2=p3;
p3->next2=NULL;
}
/**原链表有数据**/
else
{/*原彩票数据都是按有小到大排序的*/
/*大于则后移**/
while((p3->name2>d1->name2)&&(d1->next2!=NULL))
{
d2=d1;
d1=d1->next2;
}
/**不是插入到最后则小于等于则前插**/
if(p3->name2<=d1->name2)
{
/**原链表只有一个结点**/
if(head2==d1)
{
head2=p3;
p3->next2=d1;
}
/**原链表不止有一个结点**/
else
{
d2->next2=p3;
p3->next2=d1;
}
}
/*该数据是最大的 插入到最后**/
else
{
d1->next2=p3;
p3->next2=NULL;
}
}
printf("插入成功!想继续插入吗?按数字0退出,按数字1继续\n");
scanf("%d",&m);
}/*while循环结束**/
return(head2);
}
/********************************/
/*****载入函数*********************/
/************************************/
DATA2 *openfile2(void)
{
int i,n;
i=1;
n=1;
printf("输入文件名:\n");
scanf("%s",filename2);
/*文件打开*/
if((fp=fopen(filename2,"rb"))==NULL)
{
printf("文件打开失败,按任意键返回\n");
getch();
return(NULL);
}
/**申请一个新空间**/
if((d1=d2=(DATA2*)malloc(LEN2))==NULL)
{
printf("内存不足,链表创建失败!按任意键返回\n");
getch();
return(NULL);
}
/**读取整块数据到内存**/
if(fread(d1,sizeof(DATA2),1,fp)!=1)
{
printf("文件导入失败,按任意键返回\n");
getch();
return(NULL);
}
if(d1->next2==NULL)/*只有一个结点*/
{
head2=d1;
fclose(fp);
return(head2);
}
/*有多个结点*/
else
{
while(d1->next2!=NULL)
{
if(n==1)
head2=d1;/**表头**/
else
d2->next2=d1;
n=n+1;/*下一个结点*/
d2=d1;
/**申请一个新空间**/
if((d1=(DATA2*)malloc(LEN2))==NULL)
{
printf("内存不足,链表创建失败!按任意键返回\n");
getch();
return(NULL);
}
/**读取整块数据到内存**/
if(fread(d1,sizeof(DATA2),1,fp)!=1)
{
printf("文件导入失败,按任意键返回\n");
getch();
return(NULL);
}
}/*while循环结束*/
d2->next2=d1;
}/*else结束*/
fclose(fp);
printf("文件载入成功,按任意键返回\n");
getch();
return(head2);
}/**函数结束**/
/************************************/
/***********删除函数*****************/
/*************************************/
DATA2 * del_perf2( DATA2 * head2)
{
long int m;
int n=1;
/**没有数据**/
if(head2==NULL)
{
printf("没有任何号码,按任意键返回!\n");
getch();
return(head2);
}
while(n==1)
{
printf("输入想删除的彩票号码的序号\n");
scanf("%ld",&m);
d1=head2;/**指向头指针**/
d2=d1;
if(m==d1->name2)/*删除的是第一个结点*/
{
/*只有一个结点*/
if(d1->next2==NULL)
{
head2=d1=d2=NULL;
printf("只有一序号码已被删除,按任意键返回!\n");
getch();
return(head2);
}
/*不只有一个结点*/
else
{
head2=d1->next2;
}
}/****/
/*删除的不是第一个结点*/
while(m!=(d1->name2))/**相等退出**/
{
/**最后一个结点都没有找到相应的期号**/
if(d1->next2==NULL)
{
printf("没找到相应的序号,按任意键返回!\n");
getch();
return(head2);
}
/*否则p1,p2后移**/
else
{
d2=d1;
d1=d1->next2;
}
}
d2->next2=d1->next2;/**末尾处理**/
printf("已被删除\n继续删除请按'1'键,按'0'键返回主菜单!");
scanf("%d",&n);
}/*大的while循环结束*/
return(head2);
}/*该函数结束*/
/************************/
/****修改函数************/
/************************/
DATA2 * modify2( DATA2 * head2 )
{
int m,i,n;
n=1;
while(n==1)/*大循环*/
{
d1=d2=head2;
if(head2==NULL)/**没有数据**/
{
printf("没有任何号码可被修改,按任意键返回!\n");
getch();
return(head2);
}
printf("请输入你想修改的彩票号码的序号:\n");
scanf("%d",&m);
while(m<=0)
{
printf("彩票号码的序号应大于0!按任意键重新输入:\n");
getch();
scanf("%d",&m);
}
/**在原链表中查找该期期号**/
while(m!=d1->name2)
{
if(d1->next2==NULL)
{
printf("没找到所输入的彩票号码的序号,按任意键返回主菜单\n");
getch();
return(head2);
}
else
{
d2=d1;
d1=d1->next2;
}
}
/**在原链表中查找到该期期号则执行以下程序**/
printf("以下是你想修改的彩票号码的序号及号码:\n");
printf("序号: %4d\n",d1->name2);
printf("号码: ");
for(i=0;i<=6;i++)
printf("%2d",d1->number2[i]);
printf("\n修改请按'1',按'0'键返回\n");
scanf("%d",&n);
/**想修改**/
if(n==1)
{
printf("请输入新的序号: ");
scanf("%ld",&d1->name2);
printf("\n输入新号码,以空格相隔:\n");
for(i=0;i<=6;i++)
scanf("%d",&d1->number2[i]);
}
/**不想修改则返回**/
else
return(head2);
printf("继续修改请按'1',按'0'键返回主菜单\n");
scanf("%d",&n);
}/*结束大循环*/
return(head2);
}
/****************************/
/*****查找函数***************/
/****************************/
void search2(DATA2 * head2)
{
int m,i,n;
n=1;
while(n==1)/*大循环*/
{
d1=d2=head2;
if(head2==NULL)
{
printf("没有任何号码可被查找,按任意键返回!\n");
getch();
return;
}
printf("请输入你想查找的彩票号码的序号:\n");
scanf("%d",&m);
if(m<=0)
{
printf("彩票号码的序号应大于0:\n");
getch();
return;
}
/**在原链表中查找该期期号**/
while(m!=d1->name2)
{
if(d1->next2==NULL)
{
printf("没找到所输入的彩票号码的序号, 按任意键返回主菜单\n");
getch();
return;
}
else
{
d2=d1;
d1=d1->next2;
}
}
printf("以下是你想查找的彩票号码的序号及号码:\n");
printf("序号:%ld\n",d1->name2);
printf("号码: ");
for(i=0;i<=6;i++)
printf("%4d",d1->number2[i]);
printf("\n继续查找请按'1',按'0'键返回\n");
scanf("%d",&n);
}/*结束大循环*/
return;
}
/************************/
/*************************/
/*****结束文件***********/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -