#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();//吸收换行符
}
可以看看为什么有时候连续输入航班信息时,浏览的页面会不会输出一些信息吗?(有点急 )
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 书山客 2022-01-08 14:00关注
#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();//吸收换行符 }
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
- ¥15 FileNotFoundError 解决方案
- ¥15 uniapp实现如下图的图表功能
- ¥15 u-subsection如何修改相邻两个节点样式
- ¥30 vs2010开发 WFP(windows filtering platform)
- ¥15 服务端控制goose报文控制块的发布问题
- ¥15 学习指导与未来导向啊
- ¥15 求多普勒频移瞬时表达式
- ¥15 如果要做一个老年人平板有哪些需求
- ¥15 k8s生产配置推荐配置及部署方案