#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>//定义access函数(判断指定文件是否具有可读、可写、可执行等权限)的头文件
#define N 100001
#define PRINT "%d\t\t%s\t\t%s\t\t%d\t\t\n",Flight[i].flightnumber,Flight[i].startstaion,Flight[i].endstation,Flight[i].count //定义输出格式
//头文件
struct flight
{
int flightnumber;//航班号
char startstaion[20];//起始站
char endstation[20];//终点站
int count;//机票数量
}Flight[N];//航班信息
typedef struct
{
char name[20];
char secret[10];
}Client;//用户信息
int i, m = 0;//全局变量,标志航班数量
char ch[10];//相对于flag
void MainMenu();//主页面
void OptionMenu();//输入选择 进入功能区
void Login(Client client[]);//登陆
void Clearing();//函数初始化
void Build();//创建航班信息
void Read();//读取
void SaveInformation();//保存航班信息
void AddInformation();//增加信息函数
void output();//航班信息输出
void FlightInformation();//航班信息浏览
int main()//主函数
{
MainMenu();//菜单
OptionMenu();//输入选择
return 0;
}
void MainMenu()//菜单
{
printf("***************************************\n");
printf(" 欢迎进入航班订票系统\n");
printf(" 0.请登录您的账号... \n");
printf(" 1.航班信息浏览 \n");
printf(" 2.航班查询(按航班号) \n");
printf(" 3.航班订票 \n");
printf(" 4.航班退票 \n");
printf(" 5.退出系统 \n");
printf("***************************************\n");
}
void OptionMenu()//选择功能
{
Clearing();//函数初始化
int number1;//表示选择
Client* user;
user = (Client*)malloc(sizeof(Client));//动态内存分配
do
{
system("cls");//清屏
MainMenu();
printf("请选择...\n");
scanf("%d", &number1);//输入
getchar();//吸收换行符
switch (number1)
{
case 0:
printf("为了您的信息准确、安全,请先登陆...\n");
Sleep(500);
Login(user);//登陆
AddInformation();
break;//增加信息函数
case 1:FlightInformation(); break;//浏览航班信息
case 5:
SaveInformation();//保存信息
printf(" 感谢使用航班订票系统,再见! \n");
exit(0);
default:
printf("您输入不对,只能输入0-5...\n");
printf("请重新输入...\n");
Sleep(500);//停留
}
} while ((number1 <= 5) && (number1 >= 0));//结束标志
}
void Login(Client client[])//登陆
{
printf("请输入您的账号: \n");
scanf("%s", &client->name);
printf("请输入您的密码: \n");
scanf("%s", &client->secret);
FILE* fp = fopen("B.txt", "a");//定义文件指针 用户账号 密码文件
char clientNam[20] = "\n账号:";//定义账号 密码
char clientsecret[10] = "\n密码:";
fputs(clientNam, fp);
fputs(client->name, fp);
fputs(clientsecret, fp);
fputs(client->secret, fp);
fclose(fp);
fp = NULL;
printf("登陆成功!\n");
}
void Clearing()//函数初始化
{
if (_access("flight.dat", 0)) Build();//没有权限对文件进行操作就建立
else Read();//阅读
}
void Build()//创建航班信息数据文件
{
FILE* fp1;//定义文件指针
if ((fp1 = fopen("flight.dat", "wb")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
printf("请依次输入航班信息...\n");
for (i = 0; i < N; i++)
{
printf("请输入航班号:\n");
scanf("%d", &Flight[i].flightnumber);
printf("请输入起始站:\n");
scanf("%s", Flight[i].startstaion);
printf("请输入终点站:\n");
scanf("%s", Flight[i].endstation);
printf("请输入预售机票数:\n");
scanf("%d", &Flight[i].count);
fwrite(&Flight[i], sizeof(struct flight), 1, fp1);//写入文件
m++;//航班增加
printf("已添加,是否继续添加航班信息?(Y/N)\n");
scanf("%s", ch);
if (!strcmp(ch, "Y"))
{
fclose(fp1);
return;
}
}
}
void Read()//读取文件
{
FILE* fp2;//定义文件指针
if ((fp2 = fopen("flight.dat", "r")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
i = 0;
while (!feof(fp2))//用文件结束符来判断文件是否被关闭 feof()函数 即检验文件是否到了末尾
{
fread(&Flight[i], sizeof(struct flight), 1, fp2);
i++;
m++;//计算航班数
}
m--;
fclose(fp2);
}
void AddInformation()//增加信息函数
{
do
{
printf("请依次输入航班信息...\n");
printf("请输入航班号:\n");
scanf("%d", &Flight[i].flightnumber);
printf("请输入起始站:\n");
scanf("%s", Flight[i].startstaion);
printf("请输入终点站:\n");
scanf("%s", Flight[i].endstation);
printf("请输入预售机票数:\n");
scanf("%d", &Flight[i].count);
m++;//航班数量增加
printf("已添加,是否继续添加航班信息?(Y/N)\n");
scanf("%s", ch);
} while (!strcmp(ch, "Y"));
}
void SaveInformation()//保存航班信息
{
FILE* fp3;
if ((fp3 = fopen("flight.dat", "wb")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
for (i = 0; i < m; i++)
{
fwrite(&Flight[i], sizeof(struct flight), 1, fp3);
}
fclose(fp3);
}
void output()//航班信息输出
{
printf("航班号\t\t起始站\t\t终点站\t\t机票数\t\t\n");
for (i = 0; i < m; i++)
{
printf(PRINT);
}
}
void FlightInformation()//航班信息浏览
{
printf("目前的航班信息如下...\n");
output();
printf("请按enter键返回上级菜单...\n");
getchar();//吸收换行符
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>//定义access函数(判断指定文件是否具有可读、可写、可执行等权限)的头文件
#define N 100001
#define PRINT "%d\t\t%s\t\t%s\t\t%d\t\t\n",Flight[i].flightnumber,Flight[i].startstaion,Flight[i].endstation,Flight[i].count //定义输出格式
//头文件
struct flight
{
int flightnumber;//航班号
char startstaion[20];//起始站
char endstation[20];//终点站
int count;//机票数量
}Flight[N];//航班信息
typedef struct
{
char name[20];
char secret[10];
}Client;//用户信息
int i, m = 0;//全局变量,标志航班数量
char ch[10];//相对于flag
void MainMenu();//主页面
void OptionMenu();//输入选择 进入功能区
void Login(Client client[]);//登陆
void Clearing();//函数初始化
void Build();//创建航班信息
void Read();//读取
void SaveInformation();//保存航班信息
void AddInformation();//增加信息函数
void output();//航班信息输出
void FlightInformation();//航班信息浏览
int main()//主函数
{
MainMenu();//菜单
OptionMenu();//输入选择
return 0;
}
void MainMenu()//菜单
{
printf("***************************************\n");
printf(" 欢迎进入航班订票系统\n");
printf(" 0.请登录您的账号... \n");
printf(" 1.航班信息浏览 \n");
printf(" 2.航班查询(按航班号) \n");
printf(" 3.航班订票 \n");
printf(" 4.航班退票 \n");
printf(" 5.退出系统 \n");
printf("***************************************\n");
}
void OptionMenu()//选择功能
{
Clearing();//函数初始化
int number1;//表示选择
Client* user;
user = (Client*)malloc(sizeof(Client));//动态内存分配
do
{
system("cls");//清屏
MainMenu();
printf("请选择...\n");
scanf("%d", &number1);//输入
getchar();//吸收换行符
switch (number1)
{
case 0:
printf("为了您的信息准确、安全,请先登陆...\n");
Sleep(500);
Login(user);//登陆
AddInformation();
break;//增加信息函数
case 1:FlightInformation(); break;//浏览航班信息
case 5:
SaveInformation();//保存信息
printf(" 感谢使用航班订票系统,再见! \n");
exit(0);
default:
printf("您输入不对,只能输入0-5...\n");
printf("请重新输入...\n");
Sleep(500);//停留
}
} while ((number1 <= 5) && (number1 >= 0));//结束标志
}
void Login(Client client[])//登陆
{
printf("请输入您的账号: \n");
scanf("%s", &client->name);
printf("请输入您的密码: \n");
scanf("%s", &client->secret);
FILE* fp = fopen("B.txt", "a");//定义文件指针 用户账号 密码文件
char clientNam[20] = "\n账号:";//定义账号 密码
char clientsecret[10] = "\n密码:";
fputs(clientNam, fp);
fputs(client->name, fp);
fputs(clientsecret, fp);
fputs(client->secret, fp);
fclose(fp);
fp = NULL;
printf("登陆成功!\n");
}
void Clearing()//函数初始化
{
if (_access("flight.dat", 0)==-1) Build();//没有权限对文件进行操作就建立
else Read();//阅读
}
void Build()//创建航班信息数据文件
{
FILE* fp1;//定义文件指针
if ((fp1 = fopen("flight.dat", "wb")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
printf("请依次输入航班信息...\n");
for (i = 0; i < N; i++)
{
printf("请输入航班号:\n");
scanf("%d", &Flight[i].flightnumber);
printf("请输入起始站:\n");
scanf("%s", Flight[i].startstaion);
printf("请输入终点站:\n");
scanf("%s", Flight[i].endstation);
printf("请输入预售机票数:\n");
scanf("%d", &Flight[i].count);
fwrite(&Flight[i], sizeof(struct flight), 1, fp1);//写入文件
m++;//航班增加
printf("已添加,是否继续添加航班信息?(Y/N)\n");
scanf("%s", ch);
if (strcmp(ch, "Y")!=0)
{
fclose(fp1);
return;
}
}
}
void Read()//读取文件
{
FILE* fp2;//定义文件指针
if ((fp2 = fopen("flight.dat", "r")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
i = 0;
while (!feof(fp2))//用文件结束符来判断文件是否被关闭 feof()函数 即检验文件是否到了末尾
{
fread(&Flight[i], sizeof(struct flight), 1, fp2);
i++;
m++;//计算航班数
}
m--;
fclose(fp2);
}
void AddInformation()//增加信息函数
{
i = 0;
do
{
printf("请依次输入航班信息...\n");
printf("请输入航班号:\n");
scanf("%d", &Flight[i].flightnumber);
printf("请输入起始站:\n");
scanf("%s", Flight[i].startstaion);
printf("请输入终点站:\n");
scanf("%s", Flight[i].endstation);
printf("请输入预售机票数:\n");
scanf("%d", &Flight[i].count);
m++;//航班数量增加
i++;
printf("已添加,是否继续添加航班信息?(Y/N)\n");
scanf("%s", ch);
} while (!strcmp(ch, "Y"));
}
void SaveInformation()//保存航班信息
{
FILE* fp3;
if ((fp3 = fopen("flight.dat", "wb")) == NULL)
{
printf("创建航班信息文件失败!\n");
getchar();
return;
}
for (i = 0; i < m; i++)
{
fwrite(&Flight[i], sizeof(struct flight), 1, fp3);
}
fclose(fp3);
}
void output()//航班信息输出
{
printf("航班号\t\t起始站\t\t终点站\t\t机票数\t\t\n");
for (i = 0; i < m; i++)
{
printf("%d\t\t%s\t\t%s\t\t%d\t\t\n", Flight[i].flightnumber, Flight[i].startstaion, Flight[i].endstation, Flight[i].count);
}
}
void FlightInformation()//航班信息浏览
{
printf("目前的航班信息如下...\n");
output();
printf("请按enter键返回上级菜单...\n");
getchar();//吸收换行符
}