较简单的c语言航班管理系统
发布时间
阅读量:
阅读量
头文件
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define Q 10//终点站名
#define W 10//航班号
#define E 10//飞机型号
#define R 10//飞行周日
//#define T 10//剩员名额
#define Y 20//姓名
//#define Z 5//购票量
#define PK 3
typedef struct H//航班管理
{
int g;
char q[Q];
char w[W];
char e[E];
char r[R];
int t;
int LP;
//char y[Y];
//int z;
}H;
typedef struct K
{
//struct H h[PK];
struct H* h;
int gk;
int m;
}K;
typedef struct P
{
char q[Q];
char ok[W];
char e[E];
char r[R];
int t;
char y[Y];
int z;
}P;
typedef struct V
{
//struct P p[PK];
struct P* p;
int nk;
int hk;//
}V;
void moop(struct V* v);//初始化
void mak(struct K* k);//初始化
int minm();//登录返回
void mok(struct K* k); // 录入航班信息
void xin(struct K* k);//查看航班信息
void shant(struct K* k,struct V* v);//删除航班信息
void shan(struct V* v,struct K* k); //订票
void kplo(struct V* v,struct K* k);//查看订票信息
void mopl(struct V* v);//浏览乘客信息
void xiu(struct K* k);//修改信息
void xiud(struct V* v, struct K* k);//修改订票信息
void baoc(struct K* k);//保存
void poom(struct K* k);//写入数据
void baon(struct V* v);//保存
void pook(struct V* v);//写入数据
#include"prk.h"
void moop(struct V* v)//初始化,开辟空间
{
v->p = (struct P*)malloc(3 * sizeof(struct P));
v->nk = PK;
//memset(v->p, 0, sizeof(v->p));
v->hk = 0;
pook(v);
}
void pook(struct V* v)//写入数据,文件操作
{
struct P jo = { 0 };
FILE* pf = fopen("teskppt.txt", "rb");
if (!pf)
{
pf = fopen("teskppt.ini", "w");
}
while (fread(&jo, sizeof(struct P), 1, pf))
{
v->p[v->hk] = jo;
v->hk++;
}
fclose(pf);
pf = NULL;
}
void mak(struct K* k)//初始化,开辟空间
{
k->h = (struct H*)malloc(3 * sizeof(struct H));
k->gk =PK;
k->m = 0;
poom(k);
}
void poom(struct K* k)//写入数据,文件操作
{
struct H jo = { 0 };
FILE* pf = fopen("teksakt.txt", "rb");
if (!pf)
{
pf = fopen("teskppt.ini", "w");
}
while (fread(&jo, sizeof(struct H), 1, pf))
{
k->h[k->m] = jo;
k->m++;
}
fclose(pf);
pf = NULL;
}
void molp(struct K* k)//当空间不足时,增加空间
{
if (k->m == k->gk)
{
struct H* p1 = realloc(k->h, (k->gk + 2) * sizeof(struct H));
if (p1 != NULL)
{
k->h = p1;
k->gk = k->gk + 2;
printf("增加空间成功\n");
}
}
}
void malp(struct V* v)//当空间不足时,增加空间
{
if (v->hk == v->nk)
{
struct P* p2 = realloc(v->p, (v->nk + 2) * sizeof(struct P));
if (p2 != NULL)
{
v->p = p2;
v->nk = v->nk + 2;
printf("增加空间成功\n");
}
}
}
int minm(int op)//乘客或票务人输入账号密码登录
{
int kp;
char hao[12] = "987654321";//账号
char mim[12] = "123456789";//密码
char zah[12] = { 0 };//账号
char mai[12];//密码
if (op == 1)
{
printf("----------- 票 务 员 登 录 -------------\n");
}
if (op == 2)
{
printf("----------- 乘 客 登 录 -------------\n");
}
printf("账号(9位)>|:");
scanf("%s", zah);
printf("密码(9位)>|:");
scanf("%s", mai);
printf("是否确认登录: 是(1) 否(2)\n");
printf("是否登录>:");
scanf("%d", &kp);
if (kp == 1)
{
if (strcmp(hao, zah) == 0)
{
if (strcmp(mim, mai) == 0)
{
printf("登录成功\n");
return 2;
}
else
{
printf("密码输入错误\n");
return 5;
}
}
if (strcmp(hao, zah) != 0)
{
printf("账号输入错误\n");
return 5;
}
}
if (kp == 2)
{
return 5;
}
return 5;
}
void mok(struct K* k)//票务人录入航班信息
{
int x = 0;
int i = 0;
molp(k);
printf("航班号>:");
scanf("%s", k->h[k->m].w);
for (i = 0; i < k->m+1; i++)
{
if (strcmp(k->h[i-1].w, k->h[k->m].w) == 0)
{
x = 1;
printf("已存在该航班信息请重新选择输入\n");
break;
}
}
if (x == 0)
{
printf("飞机型号>:");
scanf("%s", k->h[k->m].e);
printf("飞行周日>:");
scanf("%s", k->h[k->m].r);
printf("剩员名额>:");
scanf("%d", &k->h[k->m].t);
printf("终点站名>:");
scanf("%s", k->h[k->m].q);
k->h[k->m].LP = k->h[k->m].t;
k->m++;
}
}
void xin(struct K* k)//乘客或票务人查看航班信息
{
int i = 0;
if (k->m== 0)
{
printf("信息为空\n");
}
else
{
printf(" |---------- 航 班 信 息 管 理 系 统 ------------|\n");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\n", "|", "航班号","|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名","|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
for (i = 0; i < k->m; i++)
{
printf("%5s\t%1s\t%3s\t%3s\t%9s\t%7s\t%9s\t%5d\t%9s\t%5s\t%9s\n", "|", k->h[i].w, "|", k->h[i].e, "|", k->h[i].r, "|", k->h[i].t,"|", k->h[i].q, "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
}
}
}
void shant(struct K* k,struct V* v)//票务人删除航班信息
{
int ko = 0;
int nm = 0;
int ps = 0;
int s = 1;
int i = 0;
int xang = 0;
int x = 0;
int y = 0;
char hp[Q];
printf("请输入航班号>:");
scanf("%s", hp);
for (x = 0; x < k->m; x++)
{
if (strcmp(k->h[x].w, hp) == 0&& k->h[x].t == k->h[x].LP)
{
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\n", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%3s\t%9s\t%7s\t%9s\t%5d\t%9s\t%5s\t%9s\n", "|", k->h[x].w, "|", k->h[x].e, "|", k->h[x].r, "|", k->h[x].t, "|", k->h[x].q, "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%d\n", v->hk);
ko++;
y = x;
printf("是否删除该航班信息 是(1)否(2)\n");
printf(">:");
scanf("%d", &xang);
break;
}
if (strcmp(k->h[x].w, hp) == 0 && k->h[x].t != k->h[x].LP)
{
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\n", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%3s\t%9s\t%7s\t%9s\t%5d\t%9s\t%5s\t%9s\n", "|", k->h[x].w, "|", k->h[x].e, "|", k->h[x].r, "|", k->h[x].t, "|", k->h[x].q, "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("此航班已有人购票是否删除并退票 是(1) 否(2)\n");
ko++;
printf(">:");
scanf("%d", &xang);
break;
}
}
if (xang == 1)
{
for (y = x; y < k->m; y++)
{
k->h[y] = k->h[y + 1];
}
k->m--;
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].ok, hp) == 0)
{
ps = i;
for (ps = i; ps < v->hk + 1; ps++)
{
v->p[ps] = v->p[ps + 1];
}
v->hk--;
i--;
}
}
printf("删除成功\n");
}
if (xang == 1)
{
printf("%d\n", nm);
}
if (xang == 2)
{
printf("已退出\n");
}
if (ko == 0)
{
printf("没有此航班信息\n");
}
}
void shan(struct V* v,struct K* k)//乘客订票
{
int i = 0;
malp(v);
printf("航班号>:");
scanf("%s", v->p[v->hk].ok);
for (i = 0; i < k->m; i++)
{
if (strcmp(k->h[i].w, v->p[v->hk].ok) == 0)
{
printf("请输入姓名>:");
scanf("%s", v->p[v->hk].y);
printf("请输入购票量>:");
scanf("%d", &v->p[v->hk].z);
if (v->p[v->hk].z <= k->h[i].t)
{
strcpy(v->p[v->hk].ok, k->h[i].w);
strcpy(v->p[v->hk].e, k->h[i].e);
strcpy(v->p[v->hk].r, k->h[i].r);
strcpy(v->p[v->hk].q, k->h[i].q);
k->h[i].t = k->h[i].t - v->p[v->hk].z;
//v->p[v->hk] = k->h[k->m];
v->hk++;
printf("购票成功\n");
break;
}
else
{
printf("购票失败\n");
printf("该航班剩员名额为>:");
printf("%d名\n", k->h[i].t);
break;
}
}
}
if (i == k->m)
{
printf("没有此航班号\n");
}
}
void kplo(struct V* v,struct K* k)//乘客查看订票信息
{
int x = 0;
int i = 0;
char xp[Q];
printf("请输入姓名查找>:");
scanf("%s", xp);
printf(" |----------- 订 票 信 息 ---------------|\n");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
printf("%2s\t%3s\t%1s\t%3s\t%s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%5s\t\n", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].y, xp)==0)
{
printf("%2s\t%1s\t%1s\t%1s\t%1s\t%3s\t%9s\t%3s\t%9s\t%1d\t%1s\t%1s\t%5s\t\n", "|", v->p[i].y, "|", v->p[i].ok, "|", v->p[i].e, "|", v->p[i].r, "|", v->p[i].z, "|", v->p[i].q, "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
x++;
}
}
if (x == 0)
{
printf("没有此人信息\n");
}
}
void mopl(struct V* v)//票务人浏览乘客信息
{
int i = 0;
printf(" |----------- 乘 客 信 息 管 理 ---------------|\n");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
printf("%2s\t%3s\t%1s\t%3s\t%s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%5s\t\n", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
if (v->hk > 0)
{
for (i = 0; i < v->hk; i++)
{
printf("%2s\t%1s\t%1s\t%1s\t%1s\t%3s\t%9s\t%3s\t%9s\t%1d\t%1s\t%1s\t%5s\t\n", "|", v->p[i].y, "|", v->p[i].ok, "|", v->p[i].e, "|", v->p[i].r, "|", v->p[i].z, "|", v->p[i].q, "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
}
}
else
{
printf("信息为空\n");
}
}
void xiu(struct K* k)//票务人修改信息
{
int a = 0;
int i = 0;
char hk[Q];
printf("请输入要修改信息的航班号\n");
printf(" >:");
scanf("%s", hk);
for (i = 0; i < k->m; i++)
{
if (strcmp(k->h[i].w, hk) == 0)
{
printf(" |---------- 航 班 信 息 ------------|\n");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\n", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("%5s\t%1s\t%3s\t%3s\t%9s\t%7s\t%9s\t%5d\t%9s\t%5s\t%9s\n", "|", k->h[i].w, "|", k->h[i].e, "|", k->h[i].r, "|", k->h[i].t, "|", k->h[i].q, "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|\n");
printf("是否修改 是(1) 否(2)\n");
printf(" >:");
scanf("%d", &a);
}
if (a == 1)
{
printf("飞机型号>:");
scanf("%s", k->h[i].e);
printf("飞行周日>:");
scanf("%s", k->h[i].r);
printf("剩员名额>:");
scanf("%d", &k->h[i].t);
printf("终点站名>:");
scanf("%s", k->h[i].q);
k->h[i].LP = k->h[i].t;
printf("修改成功\n");
break;
}
if (a == 2)
{
printf("退出成功\n");
break;
}
}
if (a == 0)
{
printf("没有该航班信息\n");
}
}
void xiud(struct V* v, struct K* k)//乘客退票
{
int q = 10;
int y = 0;
int x = 0;
int i = 0;
char hk[Q];
printf("请输入姓名>:");
scanf_s("%s", hk);
printf(" |----------- 订 票 信 息 ---------------|\n");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
printf("%2s\t%3s\t%1s\t%3s\t%s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%5s\t\n", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].y, hk) == 0)
{
printf("%2s\t%1s\t%1s\t%1s\t%1s\t%3s\t%9s\t%3s\t%9s\t%1d\t%1s\t%1s\t%5s\t\n", "|", v->p[i].y, "|", v->p[i].ok, "|", v->p[i].e, "|", v->p[i].r, "|", v->p[i].z, "|", v->p[i].q, "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|\n");
q++;
}
}
if (q > 10)
{
printf("是否确认退票 是(1) 否(2)\n");
printf(" >:");
scanf("%d", &q);
}
if (q == 10)
{
printf("没有该信息\n");
}
if (q == 1)
{
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].y, hk) == 0)
{
for (y = 0; y < k->m; y++)
{
if (strcmp(k->h[y].w, v->p[i].ok) == 0)
{
k->h[y].t = k->h[y].t + v->p[i].z;
break;
}
}
x = i;
for (x = i; x < v->hk; x++)
{
v->p[x] = v->p[x + 1];
}
v->hk--;
i--;
}
}
printf("退票成功\n");
}
if (q == 2)
{
printf("已退出\n");
}
}
void baoc(struct K* k)//保存,文件操作
{
int i = 0;
FILE* pf = fopen("teksakt.txt", "wb");
for (i = 0; i < k->m; i++)
{
fwrite(&(k->h[i]), sizeof(struct H), 1, pf);
}
fclose(pf);
pf = NULL;
}
void baon(struct V* v)//保存,文件操作
{
int i = 0;
FILE* pf = fopen("teskppt.txt", "wb");
for (i = 0; i < v->hk; i++)
{
fwrite(&(v->p[i]), sizeof(struct P), 1, pf);
}
fclose(pf);
pf = NULL;
}
#include"prk.h"
void mpk()
{
printf("--------------------------------------------------\n");
printf("**************************************************\n");
printf("************* 1 票务员 ******************\n");
printf("************* 2 乘客 ******************\n");
printf("************* 3 保存 ******************\n");
printf("************* 0 退出 ******************\n");
printf("**************************************************\n");
printf(" 航 班 信 息 管 理 系 统 \n");
printf("--------------------------------------------------\n");
}
void seak()
{
printf("--------------------------------------------------\n");
printf("**************************************************\n");
printf("********** 1 录入航班信息 *************\n");
printf("********** 2 修改信息 *************\n");
printf("********** 3 删除航班信息 *************\n");
printf("********** 4 浏览乘客信息 *************\n");
printf("********** 5 查看航班信息 *************\n");
printf("********** 0 退出 *************\n");
printf("**************************************************\n");
printf(" 票 务 员 \n");
printf("--------------------------------------------------\n");
}
void kpl()
{
printf("--------------------------------------------------\n");
printf("**************************************************\n");
printf("************ 1 订票 ***********\n");
printf("************ 2 查看航班信息 ***********\n");
printf("************ 3 查看订票信息 ***********\n");
printf("************ 4 退票 ***********\n");
printf("************ 0 退出 ***********\n");
printf("**************************************************\n");
printf(" 乘 客 \n");
printf("--------------------------------------------------\n");
}
int main()
{
int hk;
struct K k;
struct V v;
mak(&k);//初始化
moop(&v);//初始化
int a;
int op;
do
{
mpk();
printf("输入>:");
scanf("%d", &op);
switch (op)
{
case 1:
hk=minm(op);
if (hk == 2)
{
seak();// 票务员
do
{
printf("输入>:");
scanf("%d", &a);
switch (a)
{
case 1:
mok(&k);// 录入航班信息
seak();
break;
case 2:
xiu(&k);//修改信息
seak();
break;
case 3:
shant(&k, &v);//删除航班信息
seak();
break;
case 4:
mopl(&v);//浏览乘客信息
seak();
break;
case 5:
xin(&k);
seak();//查看航班信息
break;
case 0:
break;
default:
printf("输入错误\n");
seak();
break;
}
} while (a);
}
break;
case 2:
hk = minm(op);
if (hk == 2)
{
do
{
kpl();// 乘客
printf("输入>:");
scanf("%d", &a);
switch (a)
{
case 1:
shan(&v, &k);//订票
break;
case 2:
xin(&k);
break;
case 3:
kplo(&v, &k);//查看订票信息
break;
case 4:
xiud(&v, &k);//退票
break;
case 0:
break;
default:
printf("输入错误\n");
break;
}
} while (a);
}
break;
case 3:
baoc(&k);//保存
baon(&v);//保存
printf("保存成功\n");
break;
case 0:
break;
default:
printf("输入错误\n");
break;
}
} while (op);
return 0;
}
较简单的一个c语言作业,希望对你们有帮助
全部评论 (0)
还没有任何评论哟~
