C语言函数的封装操作

China☆狼群 提交于 2019-11-29 10:08:45

C语言函数的封装操作

**//C语言函数封装操作
//文件项目建立
//建立文件索引+命名

//#ifndef STRUCTURE_H
//#define STRUCTURE_H
//endif#
//主函数体加入预处理指令操作****

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include"structure.h"
#include "enter.h"
#include"list.h"
#include"load.h"
#include"book.h"
#include"search1.h"
#include"search2.h"
#include"quit.h"
#include"channge.h"
#include"save.h"
#include"menu_select.h"
#define N 20
#define Q 40

/*主函数*/
main()
{  int i;
   FLY flight[Q];
   int length;  /*保存记录长度*/
    for(;;)/*无限循环*/
   {
      switch(menu_select())   /*调用主菜单函数,返回值整数作开关语句的条件*/
      {
     case 0:length=enter(flight);break;/*输入记录*/
         case 1:list(flight,length);break; /*显示全部记录*/
     case 2:search1(flight,length);break; /*查找记录*/
         case 3:search2(flight,length);break; /*查找记录*/
         case 4:book(flight,length);break;    /*订票*/
         case 5:quit(flight,length);break;    /*退票*/
         case 6:channge(flight,length);break; /*修改航班信息*/
         case 7:save(flight,length);break;    /*保存文件*/
         case 8:length=load(flight); break;   /*读文件*/
         case 9:exit(0); /*如返回值为则程序结束*/
      }
   }

} 


#ifndef _STRUCTURE_H_
#define _STRUCTURE_H_
/*定义数据结构*/
/*乘客信息*/
typedef struct
{
 char number[10];/*编号*/
 char id[20];    /*证件号*/
 char name[10];  /*姓名*/
 int count;      /*订票数*/
 char flightname[10];/*乘坐航班号*/
}GUEST;

 /*航班信息*/
typedef struct
{char planenumber[10];/*航班号*/
 char Take_off_city[20];/*起飞城市*/
 char Arrived_in_city[20];/*抵达城市*/
 char takeoff_time[20];/*起飞时间*/
 char Landing_time[20];/*降落时间*/
 int shipping;            /*舱位数*/
 char price[5];       /*票价*/
 char discount[5];    /*折扣*/
 GUEST guest[20];
 int sit;
}FLY;
#endif


#include "stdio.h"
#include"enter.h"
int enter(FLY t[])
{
   int i,k,n,m,w,j;
   char *s;
   printf("输入航线总数(n<=40):");/*输入航线总数*/
   scanf("%d",&n);
   while(n>40||n<0)
   {
   printf("输入错误!!再次输入(0<n<=40):");/*输入航线总数*/
   scanf("%d",&n);
   }
   printf("                  输入航班的信息\n\n");/*提示信息*/
   printf("航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位  价格 折扣\n");
   printf("------------------------------------------------------------------------------\n");
   for(i=0;i<n;i++)
   {
      scanf("%s",t[i].planenumber);/*输入姓名*/
      scanf("%s",t[i].Take_off_city);/*输入起飞城市*/
      scanf("%s",t[i].Arrived_in_city);/*输入降落城市*/
      scanf("%s",t[i].takeoff_time);/*输入起飞时间*/
      scanf("%s",t[i].Landing_time);/*输入降落时间*/
      scanf("%d",&t[i].shipping);/*输入舱位数*/
      scanf("%s",t[i].price);/*输入票价*/
      scanf("%s",t[i].discount);/*输入折扣*/
   }
   printf("-----------------------------------------------------------------------------\n");
 for(i=0;i<n;i++)
 {
 	t[i].sit=0;
 }
 return n; /*返回记录条数*/
}
#ifndef _ENTER_H_
#define _ENTER_H_

#include "structure.h"

int enter(FLY t[]);

#endif


#include "list.h"
#include"stdio.h"

void list(FLY t[],int n)
{
   int i;
   printf("航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位  价格 折扣\n");
   printf("------------------------------------------------------------------------------\n");
   for(i=0;i<n;i++)
   printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
   printf("             ************************end*******************\n");
}

#ifndef _LIST_H
#define _LIST_H

#include "structure.h"

void list(FLY t[],int n);

#endif

#include"stdio.h"
#include"load.h"
#include"stdlib.h"

/*读入函数,参数为结构体数组*/
int load(FLY t[])
{
   int i,n,j;
   FILE *fp; /*指向文件的指针*/
   if((fp=fopen("record1.txt","rb"))==NULL)/*打开文件*/
   {
      printf("不能打开\n");  /*不能打开*/
      exit(1);  /*退出*/
   }
   fscanf(fp,"%d",&n); /*读入记录数*/
   for(i=0;i<n;i++)
   {
   fscanf(fp,"%s   %s    %s    %s    %s    %d    %s    %s",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,&t[i].shipping,t[i].price,t[i].discount);
    fscanf(fp,"%d",&t[i].sit); /*读入记录数*/
    for(j=0;j<t[i].sit;j++)
      fscanf(fp,"%s    %s   %s   %d    %s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,&t[i].guest[j].count,t[i].guest[j].flightname); /*按格式读入记录*/
   }
   fclose(fp);  /*关闭文件*/
   printf("你已经成功从文件读取数据!!!\n\n\n\n"); /*显示读取成功*/
  return n; /*返回记录数*/
}

#ifndef _LOAD_H
#define _LOAD_H

#include"structure.h"
int load(FLY t[]);
#endif






#include"string.h"
#include"stdio.h"
#include"book.h"
/*订票*/
void book(FLY t[],int n)
{
   char s[20],number1[10],name1[10],id1[20],flightname1[10];
   int i,j=0,m,k,count1;
     printf("输入你想预订的票数:");
     scanf("%d",&m);
     printf("号码     姓名       证件号         订的票数  航班号\n"); /*提示信息*/
     printf("------------------------------------------------------------\n");
  for(k=0;k<m;k++)
   {
     scanf("%s",number1);
     scanf("%s",name1);/*输入订票客户姓名*/
     scanf("%s",id1);/*输入证件号*/
     scanf("%d",&count1);/*输入订票票数*/
     scanf("%s",flightname1);/*输入航班号*/
     for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
   {
      if(strcmp(flightname1,t[i].planenumber)==0)  /*记录中的航班名和待比较的是否相等*/
      {
      j=t[i].sit;
      strcpy(t[i].guest[j].number,number1);
      strcpy(t[i].guest[j].name,name1);
      strcpy(t[i].guest[j].id,id1);
      t[i].guest[j].count=count1;
      strcpy(t[i].guest[j].flightname,flightname1);
      t[i].shipping=t[i].shipping-count1;
      t[i].sit++;
      break;   /*相等,则返回该记录的下标号,程序提前结结束*/
      }
    }
   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/
   {
    printf("对不起!没有此航班\n");
    m=m+2;
    k++;
    }
  }
}


#ifndef _BOOK_H
#define _BOOK_H

#include"structure.h"
void book(FLY t[],int n);
#endif



#include"stdio.h"
#include"search1.h"
#include"string.h"

/*按航班号查找记录*/

void search1(FLY t[],int n)
{
   char s[20];   /*保存待查找航班名字符串*/
   int i;
   printf("输入你想查找的航班名:");
   scanf("%s",s); /*输入待查找航班名*/
   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
   {
      if(strcmp(s,t[i].planenumber)==0)  /*记录中的航班名和待比较的是否相等*/
      break;   /*相等,则返回该记录的下标号,程序提前结结束*/
   }
   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/
      printf("没有找到\n");
   else
    {
     printf("航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位  价格 折扣\n"); /*显示记录*/
     printf("------------------------------------------------------------------------------\n");
     printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
   }
}


#ifndef _SEARCH1_H
#define _SEARCH1_H

#include"structure.h"
void search1(FLY t[],int n);
#endif

#include"stdio.h"
#include"search2.h"
#include"string.h"

/*按起降城市查找记录*/
void search2(FLY t[],int n)
{
   char s1[20];
   char s2[20];
   int i;
   printf("输入起飞城市名称:");
   scanf("%s",s1); /*输入起飞城市名*/
   printf("输入降落城市名称:");
   scanf("%s",s2); /*输入降落城市名*/
   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
   {
      if((strcmp(s1,t[i].Take_off_city)==0)&&(strcmp(s2,t[i].Arrived_in_city)==0))  /*记录中的城市和待比较的是否相等*/
      break;   /*相等,则返回该记录的下标号,程序提前结结束*/
   }
   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/
      printf("没有找到\n");
   else
    {
     printf("航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位  价格 折扣\n"); /*找到,显示记录*/
     printf("------------------------------------------------------------------------------\n");
     printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
   }
}

#ifndef _SEARCH2_H
#define _SEARCH2_H

#include"structure.h"
void search2(FLY t[],int n);
#endif



#include"stdio.h"
#include"quit.h"
#include"string.h"
/*退票*/
void quit(FLY t[],int n)
{
   char s1[20],s2[20];   /*保存待查找航班名和证件号字符串*/
   int i,k,j,h,l,ch;
   printf("请输入你想退订的航班号:");
   scanf("%s",s1); /*输入待查找航班名*/
   printf("请输入你的证件号:");
   scanf("%s",s2); /*输入待查找证件号*/
   printf("号码     姓名       证件号         订的票数  航班号\n"); /*显示提示*/
   printf("------------------------------------------------------------\n");
   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
    {
     for(j=0;j<t[i].sit;j++)
       if((strcmp(s1,t[i].guest[j].flightname)==0)&&(strcmp(s2,t[i].guest[j].id)==0))
      {
      printf("%-11s%-16s%-16s%-14d%-10s\n",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[j].flightname);
      t[i].shipping=t[i].shipping+t[i].guest[j].count;
      l=j;
      h=i;
      break;
      }
    }
   i=h;
   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/
      printf("没有找到\n");
   else
   {
     printf("你是否确认删除(1/0)\n");  /*确认是否要删除*/
      scanf("%d",&ch);  /*输入一个整数或*/
    if(ch==1)  /*如果确认删除整数为*/
     {
    for(k=l+1;k<t[i].sit;k++)
     {
     strcpy(t[i].guest[k-1].number,t[i].guest[k].number); /*将后一条记录的姓名拷贝到前一条*/
     strcpy(t[i].guest[k-1].name,t[i].guest[k].name);
     strcpy(t[i].guest[k-1].id,t[i].guest[k].id);
     t[i].guest[k-1].count=t[i].guest[k].count;
     strcpy(t[i].guest[k-1].flightname,t[i].guest[k].flightname);
      }
    t[i].sit--;
     }
     printf("退票成功!!\n");/*提示退票成功*/
   }
}

#ifndef _QUIT_H_
#define _QUIT_H_

#include"structure.h"

void quit(FLY t[],int n);



#endif
#ifndef _CHANNGE_H_
#define _CHANNGE_H_

#include"structure.h" 


void channge(FLY t[],int n);
#endif

#include"stdio.h"
#include"channge.h"
#include"string.h"




/*修改航班信息*/
void channge(FLY t[],int n)
{
   char s[20];  /*要删除记录的姓名*/
   int i,j;
   printf("请输入你要修改的航班号:"); /*提示信息*/
   scanf("%s",s);/*输入航班名*/
   for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
   {
      if(strcmp(s,t[i].planenumber)==0)  /*记录中的航班名和待比较的是否相等*/
      break;   /*相等,则返回该记录的下标号,程序提前结结束*/
   }
   if(i>n-1)  /*如果整数i值大于n-1,说明没找到*/
      printf("没有找到\n");
   else
    {
     printf("航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位  价格 折扣\n"); /*找到,显示原先记录*/
     printf("------------------------------------------------------------------------------\n");
     printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
     printf("please input the new information:\n");
      scanf("%s",t[i].planenumber);/*输入航班名*/
      scanf("%s",t[i].Take_off_city);/*输入起始城市*/
      scanf("%s",t[i].Arrived_in_city);/*输入终点城市*/
      scanf("%s",t[i].takeoff_time);/*输入起飞时间*/
      scanf("%s",t[i].Landing_time);/*输入降落时间*/
      scanf("%d",t[i].shipping);/*输入座位号*/
      scanf("%s",t[i].price);/*输入票价*/
      scanf("%s",t[i].discount);/*输入折扣*/
   }
}

#include"stdio.h"
#include"save.h"
#include"string.h"
#include"stdlib.h"



/*保存资料*/
void save(FLY t[],int n)
{
   int i,j;
   FILE *fp;  /*指向文件的指针*/
   if((fp=fopen("record1.txt","wb"))==NULL)  /*打开文件,并判断打开是否正常*/
   {
      printf("can not open file\n");/*没打开*/
      exit(1);  /*退出*/
   }
   printf("\n保存文件\n"); /*输出提示信息*/
   fprintf(fp,"%d",n);  /*将记录数写入文件*/
   fprintf(fp,"\r\n");  /*将换行符号写入文件*/
   for(i=0;i<n;i++)
   {
    fprintf(fp,"%s   %s    %s    %s    %s    %d    %s    %s",t[i].planenumber,t[i].Take_off_city,t[i].Arrived_in_city,t[i].takeoff_time,t[i].Landing_time,t[i].shipping,t[i].price,t[i].discount);
    fprintf(fp,"\r\n");  /*将换行符号写入文件*/
    fprintf(fp,"%d",t[i].sit); /*将记录数写入文件*/
    fprintf(fp,"\r\n");  /*将换行符号写入文件*/
    for(j=0;j<t[i].sit;j++)
   {fprintf(fp,"%s    %s   %s   %d    %s",t[i].guest[j].number,t[i].guest[j].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[j].flightname);/*格式写入记录*/
    fprintf(fp,"\r\n"); /*将换行符号写入文件*/
   }
   }
   fclose(fp);/*关闭文件*/
   printf("****恭喜!保存成功***\n"); /*显示保存成功*/
}



#ifndef _SAVE_H_
#define _SAVE_H_

#include"structure.h" 


void save(FLY t[],int n);

#endif

#ifndef _MENU_SELECT_H_
#define _MENU_SELECT_H_

#include"menu_select.h" 


int menu_select();

#endif

#include"stdio.h"
#include"menu_select.h"





/*菜单函数,函数返回值为整数,代表所选的菜单项*/
int menu_select()
{
   int c;
   printf("按任意键返回主菜单\n");
   /*提示压任意键继续*/
  // getch(); /*读入任意字符*/
   printf("                                  Welcome  to\n\n");
   printf("                              Tickets Booking System\n\n");
   printf("                ********************MENU****************\n\n");
   printf("                           0. 输入航班信息\n");
   printf("                           1. 列出航班的信息\n");
   printf("                           2. 按航班号查询航班信息\n");
   printf("                           3. 按城市来查询航班\n");
   printf("                           4. 订票程序\n");
   printf("                           5. 退票系统\n");
   printf("                           6. 修改飞机航班的信息\n");
   printf("                           7. 保存文件\n");
   printf("                           8. 读取和下载文件\n");
   printf("                           9. 退出\n");
   printf("                *****************************************\n\n");
   do{
      printf("\n     输入你的选择项(0~9):"); /*提示输入选项*/
      scanf("%d",&c); /*输入选择项*/
   }while(c<0||c>9); /*选择项不在~9之间重输*/
   return c; /*返回选择项,主程序根据该数调用相应的函数*/
}

/*输入函数*/
/*显示记录,参数为记录数组和记录条数*/
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!