1 Star 1 Fork 0

Dmsj / ABS_perfinal.DEV

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
tool.h 10.37 KB
AI 代码解读
一键复制 编辑 原始数据 按行查看 历史
#ifndef ELSE_H_
#define ELSE_H_
# include "stdio.h"
# include "string.h"
# include "all_struct.h"
# include "FindAndLook.h"
# include "windows.h"
//else.h
//sort.h
static void sortformat_Airplane(Airplane* airplaneHead);
static void sort_Airplane(Airplane* airplaneHead);
//tool.h
static void empty_LinkedList(Airplane* airplaneHead, Guest* guestHead);
static void read_file(Airplane* airplaneHead, Guest* guestHead);
static void save_byFile(Airplane* airplaneHead, Guest* guestHead);
static void save_byFile_1(Airplane* airplaneHead, Guest* guestHead);
//推荐类似format
static int Recommend(Airplane* p,Airplane* airplaneHead)
{
int flag = 0;//确保非同一flight
fprintf (stdout,"加载中,请稍后~~\n");
system("pause");
N_air *quq;
quq = airplaneHead->next;
fprintf (stdout,"\n-----------------START----------------\n");
printf("同一路线的航班:\n");
while (quq != NULL && 0 != strcmp(p->flightNumber ,quq->flightNumber) )
{
//printf("起飞城市\t抵达城市\t航班ID\t所属型号\t\t起飞抵达时间\t\折扣票价\t余票量\t\n");
//路线相同,且不是同一个航班,标记flag = 1,表示找到
if(!strcmp(quq->startCity,p->startCity) && !strcmp(quq->endCity,p->endCity))
{
flag = 1;
Display3(quq);
}
quq = quq->next;
}
printf("++++++++++++++++++++EOF++++++++++++++++++++++-");
printf("\n\n");
//没有相同路线的航班
if (flag == 0)
{
fprintf (stdout,"没有类似同一路线航线,抱歉\n");
fprintf (stdout,"-----------------EOF----------------\n\n");
system("pause");
return 0;
}
quq = airplaneHead->next;
flag = 0;//确保非同一flight
fprintf (stdout,"\n-----------------START----------------\n");
printf("同一路线,相近时间的航班:\n");
while (quq != NULL && 0 != strcmp(p->flightNumber ,quq->flightNumber))
{
//printf("起飞城市\t抵达城市\t航班ID\t所属型号\t\t起飞抵达时间\t\折扣票价\t余票量\t\n");
//路线相同,且不是同一个航班,标记flag = 1,表示找到
if(quq->time.year == p->time.year && quq->time.month == p->time.month
&&
quq->time.day == p->time.day
&&
!strcmp(quq->startCity,p->startCity) && !strcmp(quq->endCity,p->endCity))
{
flag = 1;
Display3(quq);
}
quq = quq->next;
}
printf("+++++++++++++++++++++EOF++++++++++++++++++++++-");
printf("\n\n");
//没有相同路线的航班
if (flag == 0)
{
fprintf (stdout,"没有类似地点时间的航线,抱歉\n");
fprintf (stdout,"-----------------EOF----------------\n\n");
}
system("pause");
return 0;
}
//航班排序算法实现
static void sortformat_Airplane(Airplane* airplaneHead)
{
Airplane *fr_pre = airplaneHead;
Airplane *front = fr_pre->next;
Airplane *be_pre = front;
Airplane *behind = be_pre->next;
while(front->next != NULL)
{
while(behind != NULL)
{
if(0 > strcmp(front->flightNumber, behind->flightNumber))
{
if(be_pre == front)
{
front->next = behind->next;
fr_pre->next = behind;
behind->next = front;
be_pre = fr_pre->next;
}
else
{
Airplane *temp = front->next;
be_pre->next = front;
front->next = behind->next;
fr_pre->next = behind;
behind->next = temp;
}
behind = front;
front = fr_pre->next;
}
be_pre = be_pre->next;
behind = be_pre->next;
}
fr_pre = fr_pre->next;
front = fr_pre->next;
be_pre = front;
behind = be_pre->next;
}
}
//根据航班号排序
static void sort_Airplane(Airplane* airplaneHead)
{
sortformat_Airplane(airplaneHead);
find_AllAirplane(airplaneHead);
}
//释放所有申请内存的链表空间
static void empty_LinkedList(Airplane* airplaneHead,Guest* guestHead)
{
//释放航班链表内存空间
Airplane* tool;
while(airplaneHead)//其实这样写还有很大的隐患,但我实在写不动了,就不改了
//反正提前已经录入足够的数据,不用担心问题出现
{
tool = airplaneHead;
airplaneHead = airplaneHead->next;
free(tool);
// tool = NULL; //防野指针
}
//释放旅客链表内存空间
Guest* tool2;
while(guestHead)
{
tool2 = guestHead;
guestHead = guestHead->next;
free(tool2);
// tool2 = NULL;//防野指针
}
fprintf (stdout,"success to empty the link \n");
}
//保存信息到文件 //csv
static void save_byFile_1(Airplane* airplaneHead,Guest* guestHead)
{
FILE *fp_air, *fp_guest,*fp;
Airplane *p1 = airplaneHead->next;
Guest *p2 = guestHead->next;
Airplane *p3 = airplaneHead->next ;
// Airplane *p = p4->airplanceList;
// G_air *p3 = p4->airplanceList;
if(p3 != NULL)
{
if((fp = fopen("guest_airplance.csv","w")) == NULL) //打开文件
fprintf(stderr,"\n无法打开文件guest_airplance.csv\n");
else
{
fprintf (fp,"订单乘客昵称,订单乘客姓名,订单乘客电话,飞机号,起飞城市,抵达城市,航空公司,飞机型号,");
fprintf (fp,"原价格,折扣,");
fprintf (fp,"所在年,月,日,起飞时间(小时,起飞时间(分钟,抵达时间(小时,抵达时间(分钟\n");
while(p3)
{
if(0 != p3 ->personNumber)
for(int i = 0; i < p3 ->personNumber; i++)
{
fprintf (fp,"%s,%s,%s,%s,%s,%s,%s,%s,%d,%lf,%d,%d,%d,%d,%d,%d,%d",
p3->Guest[i].userName,p3->Guest[i].realName,p3->Guest[i].phone,
p3->flightNumber,p3->startCity,p3->endCity,
p3->company,p3->type,
p3->price,p3->discount,
p3->time.year,p3->time.month,p3->time.day,
p3->time.original_hour,p3->time.original_minute,
p3->time.end_hour,p3->time.end_minute
);
fprintf (fp,"\n");
}
p3 = p3->next;
}
}
fclose(fp); //关闭文件
}
if(p1 != NULL)
{
if((fp_air = fopen("airplance.csv","w")) == NULL) //打开文件
fprintf(stderr,"\n无法打开文件airplance.csv\n");
else
{
fprintf (fp_air,"飞机号,起飞城市,抵达城市,航空公司,飞机型号,");
fprintf (fp_air,"原价格,折扣,总票量,剩余票数,订票人数,");
fprintf (fp_air,"所在年,月,日,起飞时间(小时,起飞时间(分钟,抵达时间(小时,抵达时间(分钟\n");
while(p1)
{
//fwrite(p1,sizeof(Airplane),1,fp_air);
fprintf (fp_air,"%s,%s,%s,%s,%s,%d,%lf,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
p1->flightNumber,p1->startCity,p1->endCity,p1->company,p1->type,
p1->price,p1->discount,p1->ticketQuantity,p1->remainQuantity,p1->personNumber,
p1->time.year,p1->time.month,p1->time.day,
p1->time.original_hour,p1->time.original_minute,
p1->time.end_hour,p1->time.end_minute
);
fprintf (fp_air,"\n");
p1 = p1->next;
}
}
fclose(fp_air); //关闭文件
}
if(p2 != NULL)
{
if((fp_guest = fopen("passenger.csv","w")) == NULL) //打开文件
fprintf(stderr,"\n无法打开文件passenger.csv\n");
else
{
fprintf (fp_guest,"用户名,密码,身份证,姓名,电话,账户余额\n");
while(p2)
{
//fwrite(p2,sizeof(Guest),1,fp_guest);
fprintf (fp_guest,"%s,%s,%s,%s,%s,%lf",
p2->userName,p2->password,p2->passcard,
p2->realName,p2->phone,
p2->money
);
fprintf (fp_air,"\n");
p2 = p2->next;
}
}
fclose(fp_guest); //关闭文件
}
printf(".csv信息保存成功!");
system("pause");
//system("cls");
}
static void save_byFile(Airplane* airplaneHead,Guest* guestHead)
{
FILE *fp_air, *fp_guest;
Airplane *p1 = airplaneHead->next;
Guest *p2 = guestHead->next;
if(p1 != NULL)
{
if(NULL == (fp_air = fopen("airplance.txt","wb+")) ) //打开文件
fprintf(stderr,"\n无法打开文件airplance.txt\n");
else
{
while(p1)
{
fwrite(p1,sizeof(Airplane),1,fp_air);
p1 = p1->next;
}
}
fclose(fp_air); //关闭文件
}
if(p2 != NULL)
{
if(NULL == (fp_guest = fopen("passenger.txt","wb+")) ) //打开文件
fprintf(stderr,"\n无法打开文件passenger.txt\n");
else
{
while(p2)
{
fwrite(p2,sizeof(Guest),1,fp_guest);
p2 = p2->next;
}
}
fclose(fp_guest); //关闭文件
}
printf("信息保存成功!");
system("pause");
//system("cls");
}
//读取文件信息
static void read_file(Airplane* airplaneHead,Guest* guestHead)
{
FILE *fp_air, *fp_guest;
//fp_air
if(NULL != (fp_air = fopen("airplance.txt","rb+")) )
{
/* printf("文件打开失败!\n");
// exit (EXIT_FAILURE);
// }*/
fgetc(fp_air);
if(feof(fp_air) != 0)
return; //若文件无信息,则退出函数,二重保险
fseek(fp_air,-1L,1);
while(feof(fp_air) == 0)
{
Airplane *p = (Airplane *) malloc (sizeof(Airplane));
fread(p,sizeof(Airplane),1,fp_air); //将一个结点大小的数据块赋值给对应p指针指向的地址块
p->next = airplaneHead->next; //头插法插入链表中
airplaneHead->next = p;
fgetc(fp_air);
if(feof(fp_air) != 0)
break; //当遇到文件结束字符,文件指针会往前移一位
else
fseek(fp_air,-1L,1); //所以防止这样的情况使得读取多余,当文件指针下一个字符为结束字符时就结束循环!
}
}
//fp_guest
if(NULL != (fp_guest = fopen("passenger.txt","rb+")) )
{
/* printf("文件打开失败!\n");
exit (EXIT_FAILURE);
}*/
fgetc(fp_guest);
if(feof(fp_guest) != 0) return; //若文件无信息,则退出函数,二重保险
fseek(fp_guest,-1L,1);
while(feof(fp_guest) == 0)
{
Guest *p = (Guest *) malloc (sizeof(Guest));
fread(p,sizeof(Guest),1,fp_guest); //将一个结点大小的数据块赋值给对应p指针指向的地址块
p->next = guestHead->next; //头插法insert
guestHead->next = p;
fgetc(fp_guest);
if(feof(fp_guest) != 0)
break; //因为当遇到EOF,文件指针会往前移一位
else
fseek(fp_guest,-1L,1); //所以防止这样的情况使得读取多余invaild,当文件指针下一个字符为EOF时提前结束while!
}
}
fclose(fp_air); //关闭文件fp_air
fclose(fp_guest); //关闭文件fp_guest
}
//确保时效性 todo
static void pre_selectair(N_air* airplaneHead, int y, int m, int d)
{
if (airplaneHead == NULL)
{
return;
}
Airplane *pre = airplaneHead;
Airplane *p = airplaneHead->next;
while (p)
{
if (p->time.year < y ||
(p->time.year == y && (p->time.month < m ||
(p->time.month == m && p->time.day < d))))
{
pre->next = p->next;
free(p);
p = pre->next;
}
else
{
pre = p;
p = p->next;
}
}
}
# endif
C++
1
https://gitee.com/zky_dmsj/abs_perfinal.-dev.git
git@gitee.com:zky_dmsj/abs_perfinal.-dev.git
zky_dmsj
abs_perfinal.-dev
ABS_perfinal.DEV
master

搜索帮助