头文件 #define _CRT_SECURE_NO_WARNINGS 1 #include#include #include #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("%5st%1st%3st%1st%1st%1st%1st%1st%1st%1st%1sn", "|", "航班号","|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名","|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|n");
for (i = 0; i < k->m; i++)
{
printf("%5st%1st%3st%3st%9st%7st%9st%5dt%9st%5st%9sn", "|", 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("%5st%1st%3st%1st%1st%1st%1st%1st%1st%1st%1sn", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|n");
printf("%5st%1st%3st%3st%9st%7st%9st%5dt%9st%5st%9sn", "|", k->h[x].w, "|", k->h[x].e, "|", k->h[x].r, "|", k->h[x].t, "|", k->h[x].q, "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|n");
printf("%dn", 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("%5st%1st%3st%1st%1st%1st%1st%1st%1st%1st%1sn", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|n");
printf("%5st%1st%3st%3st%9st%7st%9st%5dt%9st%5st%9sn", "|", 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("%dn", 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("%2st%3st%1st%3st%st%1st%1st%1st%1st%1st%1st%1st%5stn", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|n");
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].y, xp)==0)
{
printf("%2st%1st%1st%1st%1st%3st%9st%3st%9st%1dt%1st%1st%5stn", "|", 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("%2st%3st%1st%3st%st%1st%1st%1st%1st%1st%1st%1st%5stn", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|n");
if (v->hk > 0)
{
for (i = 0; i < v->hk; i++)
{
printf("%2st%1st%1st%1st%1st%3st%9st%3st%9st%1dt%1st%1st%5stn", "|", 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("%5st%1st%3st%1st%1st%1st%1st%1st%1st%1st%1sn", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "剩员名额", "|", "终点站名", "|");
printf(" |-------------|---------------------|-----------------------|-----------------------|-----------------------|n");
printf("%5st%1st%3st%3st%9st%7st%9st%5dt%9st%5st%9sn", "|", 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("%2st%3st%1st%3st%st%1st%1st%1st%1st%1st%1st%1st%5stn", "|", "姓名", "|", "航班号", "|", "飞机型号", "|", "飞行周日", "|", "购票量", "|", "终点站", "|");
printf(" |--------------|---------------|-----------------------|-----------------------|---------------|-------------------|n");
for (i = 0; i < v->hk; i++)
{
if (strcmp(v->p[i].y, hk) == 0)
{
printf("%2st%1st%1st%1st%1st%3st%9st%3st%9st%1dt%1st%1st%5stn", "|", 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语言作业,希望对你们有帮助



