扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdio.h
班戈网站建设公司创新互联公司,班戈网站设计制作,有大型网站制作公司丰富经验。已为班戈上千余家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的班戈做网站的公司定做!
#include stdlib.h
#include string.h
const char filename[]="查询结果.txt";
FILE *fp;
struct ticket
{
char banci[20]; //班次
char shifadi[20]; //始发地
char zhongdian[20];//终点站
int date; //日期
int rest; //剩余票数
struct ticket *next;
}Node;
//1、创建链表
struct ticket *creat(int n)
{
struct ticket *head,*tail,*newnode;
int i;
head=(struct ticket *)malloc(sizeof(Node));
head-next=NULL;
tail=head;
printf("车辆班次、始发地、终点站、日期(月 日 如九月六日0906)、剩余票数\n");
for(i=0;in;i++)
{
newnode=(struct ticket *)malloc(sizeof(Node));
printf("请输入第%d次的数据:\n",i+1);
scanf("%s",newnode-banci);
scanf("%s",newnode-shifadi);
scanf("%s",newnode-zhongdian);
scanf("%d",newnode-date);
scanf("%d",newnode-rest);
tail-next=newnode;
tail=newnode;
}
tail-next=NULL;
return(head);
}
//4、浏览
void print(struct ticket *head)
{
struct ticket *p;
p=head-next;
fp=fopen(filename,"ab+");
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
fprintf(fp,"班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%d\t%d \n",p-banci,p-shifadi,p-zhongdian,p-date,p-rest);
printf("%s\t%s\t%s\t%d\t%d \n",p-banci,p-shifadi,p-zhongdian,p-date,p-rest);
p=p-next;
}
fclose(fp);
}
//2、增加班次
struct ticket *insert (struct ticket *head)
{
struct ticket *newnode,*p, *q;
printf("输入增加的车辆班次、始发地、终点站、日期(月 日 如九月六日09 06)、剩余票数\n");
scanf("%s",Node.banci);
scanf("%s",Node.shifadi);
scanf("%s",Node.zhongdian);
scanf("%d",Node.date);
scanf("%d",Node.rest);
newnode=(struct ticket *)malloc(sizeof(Node));
strcpy(newnode-banci,Node.banci);
newnode-date=Node.date;
newnode-rest=Node.rest;
strcpy(newnode-shifadi,Node.shifadi);
strcpy(newnode-zhongdian,Node.zhongdian);
p=head-next;
if (p==NULL)
{
head-next=newnode;
newnode-next=NULL;
}else{
while(p!=NULL)
{
q=p;
p=p-next;
}
q-next=newnode;
newnode-next=NULL;
}
return (head);
}
//6、订票
struct ticket *book(struct ticket *head,char b[],int n)
{
struct ticket *p;
p=head-next;
if(n==1)
{
while(p!=NULLstrcmp(b,p-banci)!=0){
p=p-next;
}
if(p==NULL)
printf("你所预定的班次不存在");
if(strcmp(b,p-banci)==0)
{
if(p-rest0)
{
p-rest=p-rest-1;
printf("订票成功");
}
else{
printf("票已售完");
}
}
}
if(n==2)
{
while(p!=NULLstrcmp(b,p-banci)!=0){
p=p-next;
}
if(p==NULL){
printf("你所退定的班次不存在");
}
if(strcmp(b,p-banci)==0)
{
if(p-rest0)
{
p-rest=p-rest+1;
printf("退票成功");
}
}
}
return (head);
}
//3、删除班次
struct ticket *del(struct ticket *head,char b[])
{
struct ticket *p,*q;
p=head-next;
while(p!=NULLstrcmp(b,p-banci))
{
q=p;
p=p-next;
}
if (p==NULL)
{
printf("未找到你要删除的班次!~、\n");
}else{
if((p==head-next)(strcmp(b,p-banci)==0))
{
if (p-next==NULL)
{
free(p);
head-next=NULL;
}else{
head-next=p-next;
free(p);
}
printf("删除成功!~、\n");
}else if((p!=head-next)(strcmp(b,p-banci)==0))
{
if (p-next==NULL)
{
free(p);
q-next=NULL;
}else{
q-next=p-next;
free(p);
}
printf("删除成功!~、\n");
}
}
return (head);
}
//5、查询
struct ticket *chaxun1(struct ticket *head,char a[])
{
struct ticket *p;
p=head-next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p-banci,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p-banci,p-shifadi,p-zhongdian,p-date,p-rest);
break;
}
else
p=p-next;
}
if(p==NULL){
printf("查询班次不存在\n");
}
return(head);
}
struct ticket *chaxun2(struct ticket *head,char a[])
{
struct ticket *p;
p=head-next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(strcmp(p-shifadi,a)==0)
{
printf("%s\t%s\t%s\t%d\t%d \n",p-banci,p-shifadi,p-zhongdian,p-date,p-rest);
break;
}
else
p=p-next;
}
return(head);
}
struct ticket *chaxun3(struct ticket *head,int m)
{
struct ticket *p;
p=head-next;
printf("班次\t始发地\t终点地\t日期\t剩余票数 \n");
while(p!=NULL)
{
if(p-date==m)
{
printf("%s\t%s\t%s\t%d\t%d \n",p-banci,p-shifadi,p-zhongdian,p-date,p-rest);
break;
}
else
p=p-next;
}
return(head);
}
void main()
{
printf("=============================车票查询订购系统===============================\n");
printf("1、读入车辆班次初始化信息\n");
printf("2、增加班次信息\n");
printf("3、删除班次信息\n");
printf("4、浏览所有班次\n");
printf("5、查询\n");
printf("6、订票退票\n");
printf("7、退出\n");
while(1)
{
int i,n,m,x;
char a[20],d[20],e[20];
struct ticket *head;
printf("请输入要使用的业务前相应的数字:\t");
scanf("%d",i);
if(i==7)
break;
else
switch(i)
{
case 1: printf("输入录入的个数:\t");
scanf("%d",n);;
head=creat(n);
break;
case 2:
insert(head);
break;
case 3:
printf("输入要删除的班次:\t");
scanf("%s",e);
del(head,e);
break;
case 4:
print(head);
break;
case 5:printf("1、按班次查询:\t");
printf("2、按始发站查询:\t");
printf("3、按日期查询:\t");
scanf("%d",x);;
switch(x)
{
case 1:printf("输入要查询班次:\t");
scanf("%s",d);
chaxun1(head,d);break;
case 2:printf("输入要查询的始发站(请查询后输入有效的始发站):\t");
scanf("%s",d);
chaxun2(head,d);break;
case 3:printf("输入要查询的日期(格式0101):\t");
scanf("%d",m);;
chaxun3(head,m);break;
}
break;
case 6:
printf("订票输入1,退票输入2:\t");
scanf("%d",m);;
printf("输入你要订或退的班次:\t");
scanf("%s",a);
book(head,a,m);
break;
}
}
}
看了这个C语言版的车票订购查询系统吧,想必楼主会非常明白什么叫分块了,一个三百多行的程序 ,而主函数就占了50行左右,函数功能分工明确,各负其职,连在一起就可以组成一个有着增、删、改、查等功能的一个简单系统。分工其实就是把某一功能的代码放一起,避免重复使用,也使主函数简单明了。楼主觉得呢?
i=idx[low1].low是块中第一个元素的起始位置的值
int blksearch(sqlist r,index idx,find=0,hb;) // bn为块个数 //
{ int i,;low=1,high1=bn,midl,find=0,hb;
while(low1=high1!find)
{mid=(low1+high1)/2;
if(kidx[mid1].key)high1=mid-1;
else if(kidx[mid1],key)low1=mid1+1;
else{
low=mid1;
find=1;
}
到这里是初步锁定要查的元素在那个块,找到大的方向后 在块里进行进一步的搜索
if(low1bn)//如果low1的值没有超过块的总个数
i=idx[low1].low; //i赋值为该块内第一个元素的起始位置
然后进一步查到元素
包括返回值,函数名,形参列表和函数体四个部分。
例如 :
int findmin(int a[],int n){
//函数体
return min;
}
以上函数int 是返回值,findmin是函数名, int a[] int n是形参列表
可以,使用文件包含就可以了,比如你的主文件(包含main函数的)叫main.c,你可以写一个文件专门放置函数,叫func.h,然后在main.c中添加#include "func.h",编译时只需要编译main.c就可以了..举一反三,你想分成几个文件都可以,
注意,func.h这个文件名,其实你也可以叫做func.c,甚至不加任何后缀,直接使用func也是可以的,但是后缀.h更能体现此文件的性质..
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流