航班管理c语言,航班管理系统C语言程序

发布时间:2023-01-04

本文目录一览:

  1. c语言编程:航班信息管理程序
  2. c语言程序设计关于航班信息管理
  3. c语言程序设计 航班信息管理

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;
        }
    }
}