本文目录一览:
c语言编程:航班信息管理程序
编译无错!
#include<stdio.h>
struct Art
{
long int hangbanh;
char qdcity[10];
char zdcity[10];
char qftime[20];
char gettime[20];
char jx[10];
char banqi[15];
} a[100];
int s;
void cunqu()
{
int i = 0;
long int k;
printf("请输入航班号,输入-1结束:");
scanf("%ld", &k);
while (k != -1)
{
a[i].hangbanh = k;
printf("\n请输入终点站:");
scanf("%s", a[i].zdcity);
printf("\n请输入起飞时间:");
scanf("%s", a[i].qftime);
printf("\n请输入到达时间:");
scanf("%s", a[i].gettime);
printf("\n请输入机型:");
scanf("%s", a[i].jx);
printf("\n请输入班期:");
scanf("%s", a[i].banqi);
i++;
printf("\n\n请输入航班号,输入-1结束:");
scanf("%ld", &k);
}
s = i;
}
void caxun()
{
long int k;
printf("请输入航班号\n");
scanf("%ld", &k);
for (int i = 0; i < s; i++)
if (k == a[i].hangbanh)
{
printf("航班号%ld\n", a[i].hangbanh);
printf("起点站%s\n", a[i].qdcity);
printf("终点站%s\n", a[i].zdcity);
printf("起飞时间%s\n", a[i].qftime);
printf("到达时间%s\n", a[i].gettime);
printf("机型%s\n", a[i].jx);
printf("班期%s\n", a[i].banqi);
}
}
void paixu()
{
int i, j;
struct Art t;
for (i = 0; i < s; i++)
for (j = i; j < s; j++)
if (a[i].hangbanh < a[j].hangbanh)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < s; i++)
{
printf("航班号%ld\n", a[i].hangbanh);
printf("起点站%s\n", a[i].qdcity);
printf("终点站%s\n", a[i].zdcity);
printf("起飞时间%s\n", a[i].qftime);
printf("到达时间%s\n", a[i].gettime);
printf("机型%s\n", a[i].jx);
printf("班期%s\n\n", a[i].banqi);
}
}
void prit()
{
printf("\t1.存取\n");
printf("\t2.查询\n");
printf("\t3.排序\n");
}
void main()
{
int k;
prit();
do
{
printf("请选择:");
scanf("%d", &k);
switch (k)
{
case 1:
cunqu();
break;
case 2:
caxun();
break;
case 3:
paixu();
break;
case 0:
break;
default:
break;
}
} while (k != 0);
}
c语言程序设计关于航班信息管理
void distribute(slnode *sl, int i, arrtype_n f, arrtype_n e)
{
int j, p;
for (j = 0; j < radix_n; j++)
{
f[j] = e[j] = 0;
}
for (p = sl[0].next; p; p = sl[p].next)
{
j = sl[p].keys[i] % 48;
if (!f[j])
f[j] = p;
else
sl[e[j]].next = p;
e[j] = p;
}
}
void collect(slnode *sl, int i, arrtype_n f, arrtype_n e)
{
int j, t;
for (j = 0; !f[j]; j++)
;
sl[0].next = f[j];
t = e[j];
while (j < radix_n - 1)
{
for (j = j + 1; j < radix_n - 1 && !f[j]; j++)
;
if (f[j])
{
sl[t].next = f[j];
t = e[j];
}
}
sl[t].next = 0;
}
void distribute_c(slnode *sl, int i, arrtype_c f, arrtype_c e)
{
int j, p;
for (j = 0; j < radix_c; j++)
{
f[j] = e[j] = 0;
}
for (p = sl[0].next; p; p = sl[p].next)
{
j = sl[p].keys[i] % 65;
if (!f[j])
f[j] = p;
else
sl[e[j]].next = p;
e[j] = p;
}
}
void collect_c(slnode *sl, int i, arrtype_c f, arrtype_c e)
{
int j, t;
for (j = 0; !f[j]; j++)
;
sl[0].next = f[j];
t = e[j];
while (j < radix_c - 1)
{
for (j = j + 1; j < radix_c - 1 && !f[j]; j++)
;
if (f[j])
{
sl[t].next = f[j];
t = e[j];
}
}
sl[t].next = 0;
}
void radixsort(sllist l) // 链式
{
int i;
arrtype_n fn, en;
arrtype_c fc, ec;
for (i = 0; i < l.length; i++)
l.sl[i].next = i + 1;
l.sl[l.length].next = 0;
for (i = l.keynum - 1; i >= 2; i--)
{
distribute(l.sl, i, fn, en);
collect(l.sl, i, fn, en);
}
for (i = 1; i >= 0; i--)
{
distribute_c(l.sl, i, fc, ec);
collect_c(l.sl, i, fc, ec);
}
}
void arrange(sllist l) // 重新整理
{
int p, q, i;
slnode temp;
p = l.sl[0].next;
for (i = 1; i < l.length; i++)
{
while (p < i)
p = l.sl[p].next;
q = l.sl[p].next;
if (p != i)
{
temp = l.sl[p];
l.sl[p] = l.sl[i];
l.sl[i] = temp;
l.sl[i].next = p;
}
p = q;
}
}
int binsearch(sllist l, keytype key[])
{
int low, high, mid;
low = 1;
high = l.length;
while (low <= high)
{
mid = (low + high) / 2;
if (strcmp(key, l.sl[mid].keys) == 0)
return mid;
else if (strcmp(key, l.sl[mid].keys) < 0)
high = mid - 1;
else
low = mid + 1;
}
return 0;
}
void seqsearch(sllist l, keytype key[], int i)
{
int j, k, m = 0;
printf("*************************************************************\n");
printf("* 航班号 起始站 终点站 航班期 起飞时间 到达时间 机型 票价*\n");
for (j = 1; j <= l.length; j++)
{
switch (i)
{
case 2:
k = strcmp(key, l.sl[j].others.start);
break;
case 3:
k = strcmp(key, l.sl[j].others.end);
break;
case 4:
k = strcmp(key, l.sl[j].others.time1);
break;
case 5:
k = strcmp(key, l.sl[j].others.time2);
break;
}
if (k == 0)
{
m = 1;
printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n", l.sl[j].keys, l.sl[j].others.start, l.sl[j].others.end, l.sl[j].others.sche, l.sl[j].others.time1, l.sl[j].others.time2, l.sl[j].others.model, l.sl[j].others.price);
}
}
if (m == 0)
printf("* 无此航班信息,可能是输入错误*\n");
printf("*************************************************************\n");
}
void searchcon(sllist l)
{
keytype key[keylen];
int i = 1, k;
while (i >= 1 && i <= 5)
{
printf("\n ********************\n");
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(" 请选择(0-5):");
scanf("%d", &i);
printf("\n");
switch (i)
{
case 1:
printf("输入要查询的航班号(字母要大写):");
scanf("%s", key);
k = binsearch(l, key);
printf("*************************************************************\n");
if (k == 0)
printf("* 无此航班信息,可能是输入错误!*\n");
else
{
printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价*\n");
printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n", l.sl[k].keys, l.sl[k].others.start, l.sl[k].others.end, l.sl[k].others.sche, l.sl[k].others.time1, l.sl[k].others.time2, l.sl[k].others.model, l.sl[k].others.price);
}
printf("*************************************************************\n");
break;
case 2:
printf("输入要查询的航班起点站名:");
scanf("%s", key);
seqsearch(l, key, i);
break;
case 3:
printf("输入要查询的航班起点站名:");
scanf("%s", key);
seqsearch(l, key, i);
break;
case 4:
printf("输入要查询的航班起点站名:");
scanf("%s", key);
seqsearch(l, key, i);
break;
case 5:
printf("输入要查询的航班起点站名:");
scanf("%s", key);
seqsearch(l, key, i);
break;
case 0:
printf("\n\n\n 再 见\n\n");
}
}
}
void inputdata(sllist l)
{
int i = ++l.length;
char yn = 'y';
while (yn == 'y' || yn == 'Y')
{
printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n");
scanf("%s%s%s%s%s%s%s%d", l.sl[i].keys, l.sl[i].others.start, l.sl[i].others.end, l.sl[i].others.sche, l.sl[i].others.time1, l.sl[i].others.time2, l.sl[i].others.model, l.sl[i].others.price);
++i;
getchar();
radixsort(l);
arrange(l);
printf("继续输入吗?y/n:");
scanf("%c", &yn);
}
l.length = i - 1;
}
void main()
{
sllist l;
l.keynum = 6;
l.length = 0;
inputdata(l);
searchcon(l);
}
c语言程序设计 航班信息管理
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
/* conio.h不是C标准库中的头文件。conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 */
#define MAXSIZE 4 /* 定义航线量的最大值 */
typedef struct wat_ros
{
char name[10]; /* 姓名 */
int req_amt; /* 订票量 */
struct wat_ros *next;
} qnode, *qptr;
typedef struct pqueue
{
qptr front; /* 等候替补客户名单域的头指针 */
qptr rear; /* 等候替补客户名单域的属指针 */
} linkqueue;
typedef struct ord_ros
{
char name[10]; /* 客户姓名 */
int ord_amt; /* 订票量 */
int grade; /* 舱位等级 */
struct ord_ros *next;
} linklist;
struct airline
{
char ter_name[10]; /* 终点站名 */
char air_num[10]; /* 航班号 */
char plane_num[10]; /* 飞机号 */
char date[7]; /* 飞行日期(星期几) */
int tkt_amt; /* 乘员定额 */
int tkt_sur; /* 余票量 */
linklist *order; /* 乘员名单域,指向乘员名单链表的头指针 */
linkqueue wait; /* 等候替补的客户名单域,分别指向排队等候名单队头队尾的指针 */
} lineinfo;
struct airline *start;
struct airline air[MAXSIZE] = {
{"北京", "1", "001", "SUN", 30, 15},
{"上海", "2", "002", "MON", 40, 10},
{"武汉", "3", "003", "FRI", 50, 14},
{"天津", "4", "004", "TUE", 60, 20}};
void display(struct airline *info)
/* 打印每条航线的基本信息 */
{
printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n", info->ter_name, info->air_num, info->plane_num, info->date, info->tkt_amt, info->tkt_sur);
}
void list() /* 打印全部航线信息 */
{
struct airline *info;
int i = 0;
info = start;
printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
while (i < MAXSIZE)
{
display(info);
info++;
i++;
}
printf("\n\n");
}
void search()
/* 根据客户提出的终点站名输出航线信息 */
{
struct airline *info, *find();
char name[10];
int i = 0;
info = start;
printf("请输入终点站名:");
scanf("%s", name);
while (i < MAXSIZE)
{
if (!strcmp(name, info->ter_name))
break;
info++;
i++;
}
if (i >= MAXSIZE)
printf("对不起,该航线未找到!\n");
else
{
printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
display(info);
}
}
struct airline *find()
/* 根据系统提出的航班号查询并以指针形式返回 */
{
struct airline *info;
char number[10];
int i = 0;
info = start;
printf("请输入航班号:");
scanf("%s", number);
while (i < MAXSIZE)
{
if (!strcmp(number, info->air_num))
return info;
info++;
i++;
}
printf("对不起,该航线末找到!\n");
return NULL;
}
void prtlink()
/* 打印订票乘员名单域的客户名单信息 */
{
linklist *p;
struct airline *info;
info = find();
p = info->order;
if (p != NULL)
{
printf("客户姓名 订票数额 舱位等级\n");
while (p)
{
printf("%s\t\t%d\t%d\n", p->name, p->ord_amt, p->grade);
p = p->next;
}
}
else
printf("该航线没有客户信息!!\n");
}
linklist *insertlink(linklist *head, int amount, char name[], int grade)
/* 增加订票乘员名单域的客户信息 */
{
linklist *p1, *new1;
p1 = head;
new1 = (linklist *)malloc(sizeof(linklist));
if (!new1)
{
printf("\nOut of memory!!\n");
return NULL;
}
strcpy(new1->name, name);
new1->ord_amt = amount;
new1->grade = grade;
new1->next = NULL;
if (head == NULL) /* 若原无订票客户信息 */
{
head = new1;
new1->next = NULL;
}
else
head = new1;
new1->next = p1;
return head;
}
linkqueue appendqueue(linkqueue q, char name[], int amount)
/* 增加排队等候的客户名单域 */
{
qptr new1;
new1 = (qptr)malloc(sizeof(qnode));
strcpy(new1->name, name);
new1->req_amt = amount;
new1->next = NULL;
if (q.front == NULL) /* 若原排队等候客户名单域为空 */
q.front = new1;
else
q.rear->next = new1;
q.rear = new1;
return q;
}
void order()
/* 办理订票业务 */
{
struct airline *info;
int amount, grade;
char name[10];
info = start;
if (!(info = find()))
return; /* 根据客户提供的航班号进行查询,如为空,退出该模块 */
printf("请输入你订票所需要的数量:");
scanf("%d", &amount);
if (amount > info->tkt_amt) /* 若客户订票额超过乘员定票总额,退出 */
{
printf("\n对不起,您输入的票的数量已经超过乘员定额!");
return;
}
if (amount <= info->tkt_sur) /* 若客户订票额末超过余票量,订票成功并等记信息 */
{
int i;
printf("请输入您的姓名(订票客户):");
scanf("%s", name);
printf("请输入%s票的舱位等级:", name);
scanf("%d", &grade);
info->order = insertlink(info->order, amount, name, grade); /* 在订票乘员名单域中添加客户信息 */
for (i = 0; i < amount; i++) /* 依次输出该订票客户的座位号 */
printf("%s的座位号是:%d\n", name, info->tkt_amt - info->tkt_sur + i + 1);
info->tkt_sur -= amount; /* 该航线的余票量应减掉该客户的订票量 */
printf("\n祝您乘坐愉快!\n");
}
else /* 若满员或余票额少于订票额,询问客户是否需要进行排队等候 */
{
char r;
printf("\n已经没有更多的票,您需要排队等候吗?(Y/N)");
r = getch();
printf("%c", r);
if (r == 'Y' || r == 'y')
{
printf("\n请输入您的姓名(排队订票客户):");
scanf("%s", name);
info->wait = appendqueue(info->wait, name, amount); /* 在排队等候乘员名单域中添加客户信息 */
printf("\n注册成功!\n");
}
else
printf("\n欢迎您下次再次订购!\n");
}
}
void return_tkt()
/* 退票模块 */
{
struct airline *info;
qnode *t, *back, *f, *r;
int grade;
linklist *p1, *p2, *head;
char cusname[10];
if (!(info = find()))
return; /* 调用查询函数,根据客户提供的航线进行搜索 */
head = info->order;
p1 = head;
printf("请输入你的姓名(退票客户):");
scanf("%s", cusname);
while (p1 != NULL)
{ /* 根据客户提供的姓名到订票客户名单域进行查询 */
if (!strcmp(cusname, p1->name))
break;
p2 = p1;
p1 = p1->next;
}
if (p1 == NULL)
{ /* 若未找到,退出本模块 */
printf("对不起,你没有订过票!\n");
return;
}
else
{
/* 若信息查询成功,删除订票客户名单域中的信息 */
if (p1 == head)
head = p1->next;
else
p2->next = p1->next;
info->tkt_sur += p1->ord_amt;
grade = p1->grade;
printf("%s成功退票!\n", p1->name);
free(p1);
}
info->order = head; /* 重新将航线名单域指向订票单链表的头指针 */
f = (info->wait).front; /* f指向排队等候名单队列的头结点 */
r = (info->wait).rear; /* r指向排队等候名单队列的尾结点 */
t = f; /* t为当前满点条件的排队候补名单域 */
while (t)
{
if (info->tkt_sur >= info->wait.front->req_amt)
{ /* 若满足条件者为头结点 */
int i;
info->wait.front = t->next;
printf("%s订票成功!\n", t->name);
for (i = 0; i < t->req_amt; i++) /* 输出座位号 */
printf("%s的座位号是:%d\n", t->name, (info->tkt_sur) - i);
info->tkt_sur -= t->req_amt;
info->order = insertlink(info->order, t->req_amt, t->name, grade); /* 插入到订票客户名单链表中 */
free(t);
break;
}
back = t;
t = t->next;
if ((info->tkt_sur) >= (t->req_amt) && t != NULL) /* 若满足条件者不为头结点 */
{
int i;
back->next = t->next;
printf("%s订票成功!\n", t->name);
for (i = 0; i < t->req_amt; i++) /* 输出座位号 */
printf("%s的座位号是:%d\n", t->name, (info->tkt_sur) - i);
info->tkt_sur -= t->req_amt;
info->order = insertlink(info->order, t->req_amt, t->name, grade); /* 插入到订票客户名单链表中 */
free(t);
break;
}
}
}