C-火车订票系统

C-火车订票系统

VS2017

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#pragma warning(disable:4996)

//定位坐标
void gotoxy(int x, int y) //goto语句
{
    COORD pos;
    pos.X = x - 1;
    pos.Y = y - 1;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}


//车票信息
typedef struct Ticket
{
    char T_num[10]; //车次
    char T_origin[10]; //起点
    char T_destination[10]; //终点
    double T_fares; //票价
    int T_tnum; //票数
    struct Ticket *next;
}ticket;

//乘客信息
typedef struct Passager
{
    int P_id; //ID
    char P_name[10]; //姓名
    char T_num[10]; //车次
    char T_origin[10]; //起点
    char T_destination[10]; //终点
    int P_num; //订票数量
    struct Passager *next;

}passager;

void T_destroy(ticket **T_p); //销毁链表
void T_destroyP(passager **T_p); //销毁链表passager
void T_show(void); //主界面
void T_insert(void); //添加车票信息
void T_tshow(void); //显示车票信息
void T_bookt(void); //订车票
void T_showbookt(void); //查询订票信息
void T_mod(void); //修改车票信息

int main(void)
{
    T_show();
    system("pause");
    return 0;
}

//销毁链表
void T_destroy(ticket **T_p)
{
    ticket *p = NULL;
    ticket *T_temp = NULL;
    p = *T_p;
    while (NULL != p->next)
    {
        T_temp = p->next;
        p->next = T_temp->next;
        free(T_temp);
        T_temp = NULL;
    }
    free(p);
    p = NULL;
}

//销毁链表
void T_destroyP(passager **T_p)
{
    passager *p = NULL;
    passager *T_temp = NULL;
    p = *T_p;
    while (NULL != p->next)
    {
        T_temp = p->next;
        p->next = T_temp->next;
        free(T_temp);
        T_temp = NULL;
    }
    free(p);
    p = NULL;
}

//主界面
void T_show(void)
{
    int i;
    int num;
    for (i = 0; i < 72; i++)
    {
        printf("+");
    }
    printf("\n");
    for (i = 0; i < 30; i++)
    {
        printf(" ");
    }
    printf("火车订票系统\n");

    for (i = 0; i < 72; i++)
    {
        printf("+");
    }
    printf("\n");
    printf("\n");
    printf("\t\t\t  1 > 输入车票信息\n");
    printf("\t\t\t  2 > 查询订票信息\n");
    printf("\t\t\t  3 > 订票\n");
    printf("\t\t\t  4 > 修改车票信息\n");
    printf("\t\t\t  5 > 显示车票信息\n");
    printf("\t\t\t  0 > 退出\n");
    printf("\n");
    for (i = 0; i < 72; i++)
    {
        printf("+");
    }
    printf("\n");
    printf("请输入选项:");
    scanf("%d", &num);
    getchar(); //获取回车
    switch (num)
    {
    case 1:
        T_insert();
        break;
    case 2:
        T_showbookt();
        break;
    case 3:
        T_bookt();
        break;
    case 4:
        T_mod();
        break;
    case 5:
        T_tshow();
        break;
    case 0:
        exit(1);
        break;
    default:
        printf("请输入正确标签!\n");
        break;
    }
}

//添加车票信息
void T_insert(void)
{
    ticket *T_p = NULL; //临时变量
    FILE *pfile = NULL;
    T_p = (ticket *)malloc(sizeof(ticket));
    pfile = fopen("Ticket.txt", "a");
    if (!pfile)
    {
        printf("打开文件失败!");
        getchar();
        exit(1);
    }
    printf("请输入车次:\n");
    scanf("%s", T_p->T_num);
    getchar();
    printf("请输入起点:\n");
    scanf("%s", T_p->T_origin);
    getchar();
    printf("请输入终点:\n");
    scanf("%s", T_p->T_destination);
    getchar();
    printf("请输入票价:\n");
    scanf("%12lf", &T_p->T_fares);
    getchar();
    printf("请输入票数:\n");
    scanf("%12d", &T_p->T_tnum);
    getchar();
    fprintf_s(pfile, "%s%12s%12s%12.2lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
    printf("添加车票成功!\n");
    fclose(pfile);
    pfile = NULL;
    free(T_p);
    T_p = NULL;
}

//显示车票信息
void T_tshow(void)
{
    int i;
    ticket *T_head = NULL;
    ticket *T_end = NULL;
    ticket *T_p = NULL;
    FILE *pfile = NULL;
    int T_empty;
    T_end = (ticket *)malloc(sizeof(ticket));
    T_end->next = NULL;
    T_head = (ticket *)malloc(sizeof(ticket));
    T_head->next = T_end;
    pfile = fopen("Ticket.txt", "r");
    if (!pfile)
    {
        printf("读取文件失败!");
        getchar();
        exit(1);
    }
    T_p = (ticket *)malloc(sizeof(ticket));
    //判断文件是否为空
    T_empty = fscanf(pfile, "%s%12s%12s%12lf%12d", &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->T_fares, &T_p->T_tnum);
    if (EOF == T_empty)
    {
        printf("没有可查询的车票信息\n");
        getchar();
        exit(1);
    }
    while (EOF != T_empty)
    {
        T_p->next = T_end;
        T_end = T_p;
        T_head->next = T_end;
        T_p = (ticket *)malloc(sizeof(ticket));
        T_empty = fscanf(pfile, "%s%12s%12s%12lf%12d", &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->T_fares, &T_p->T_tnum);
    }
    free(T_p);
    T_p = NULL;
    T_p = T_head;
    printf("%s%12s%12s%12s%12s\n","车次","起点","终点","票价","票数");
    while (T_p->next->next != NULL)
    {
        printf("%s%12s%12s%12.2lf%12d\n", T_p->next->T_num, T_p->next->T_origin, T_p->next->T_destination, T_p->next->T_fares, T_p->next->T_tnum);
        T_p = T_p->next;
    }
    T_destroy(&T_head);
    fclose(pfile);
    pfile = NULL;
    for (i = 0; i < 72; i++)
    {
        printf("+");
    }
    printf("\n");
    printf("按任意键返回!\n");
    getchar();
    system("cls");
    main();
}

//订车票
void T_bookt(void)
{
    int P_empty; //查空
    int P_id = 0; //ID记录
    ticket *T_p = NULL;
    passager *P_p = NULL;
    FILE *pfile = NULL;
    FILE *T_pfile = NULL; //临时文件用
    if (NULL == (pfile=fopen("Passenger.txt", "r")))
    {
        printf("读取文件失败!\n");
        getchar();
        exit(1);
    }
    P_p = (passager *)malloc(sizeof(passager));
    P_empty = fscanf(pfile, "%d%12s%12s%12s%12s%12d", &P_p->P_id, &P_p->T_num, &P_p->T_origin, &P_p->T_destination, &P_p->P_name, &P_p->P_num);
    //查空
    if (EOF == P_empty)
    {
        P_p->P_id = ++P_id;
    }
    else
    {
        while (EOF != P_empty)
        {
            P_empty = fscanf(pfile, "%d%12s%12s%12s%12s%12d", &P_p->P_id, &P_p->T_num, &P_p->T_origin, &P_p->T_destination, &P_p->P_name, &P_p->P_num);
        }
        P_p->P_id++;
    }
    fclose(pfile);
    pfile = NULL;
    //写入文件订票信息
    if (NULL == (pfile = fopen("Passenger.txt", "a")))
    {
        printf("订票失败!\n");
        getchar();
        exit(1);
    }
    printf("请输入订票信息:\n");
    printf("请输入车次:\n");
    scanf("%s", &P_p->T_num);
    getchar();
    printf("请输入起点:\n");
    scanf("%s", &P_p->T_origin);
    getchar();
    printf("请输入终点:\n");
    scanf("%s", &P_p->T_destination);
    getchar();
    printf("请输入姓名:\n");
    scanf("%s", &P_p->P_name);
    getchar();
    printf("请输入票数:\n");
    scanf("%12d", &P_p->P_num);
    getchar();
    fprintf(pfile, "%d%12s%12s%12s%12s%12d\n", P_p->P_id, P_p->T_num, P_p->T_origin, P_p->T_destination, P_p->P_name, P_p->P_num);
    fclose(pfile);
    pfile = NULL;
    T_p = (ticket *)malloc(sizeof(ticket));
    //读取车票信息,以做比对客户买的是什么票
    if (NULL == (pfile = fopen("Ticket.txt", "r")))
    {
        printf("读取文件失败!\n");
        getchar();
        exit(1);
    }
    //打开临时文件
    if (NULL == (T_pfile = fopen("T-ticket.txt", "w")))
    {
        printf("写入文件失败!\n");
        getchar();
        exit(1);
    }
    while (EOF != fscanf(pfile, "%s%12s%12s%12lf%12d", &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->T_fares, &T_p->T_tnum))
    {
        //判断找出乘客输入的车票
        if ((strcmp(T_p->T_num, P_p->T_num) == 0 && strcmp(T_p->T_origin, P_p->T_origin) == 0 && strcmp(T_p->T_destination, P_p->T_destination) == 0))
        {
            //将读取的车票信息写入临时文件,并且减掉乘客买的车票数
            fprintf_s(T_pfile, "%s%12s%12s%12.2lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, (T_p->T_tnum) - (P_p->P_num));
            printf("%s%12s%12s%12s%12s%12s\n", "ID","车次", "起点", "终点", "姓名", "票数");
            printf("%d%12s%12s%12s%12s%12d\n", P_p->P_id, P_p->T_num, P_p->T_origin, P_p->T_destination, P_p->P_name, P_p->P_num);
            printf("订票成功!\n");
            printf("总金额为:%.2lf元\n",T_p->T_fares*P_p->P_num);
            continue;
            getchar();
        }
        fprintf_s(T_pfile, "%s%12s%12s%12.2lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
    }
    free(P_p);
    P_p = NULL;
    free(T_p);
    T_p = NULL;
    fclose(pfile);
    pfile = NULL;
    fclose(T_pfile);
    T_pfile = NULL;
    remove("Ticket.txt");
    rename("C:\\CODE\\火车订票系统\\火车订票系统\\火车订票系统\\T-ticket.txt", "C:\\CODE\\火车订票系统\\火车订票系统\\火车订票系统\\ticket.txt");
    getchar();
    getchar();
    system("cls");
    main();
}

//修改车票信息
void T_mod(void)
{
    FILE *T_pfile = NULL;
    FILE *pfile = NULL;
    ticket *T_p = NULL;
    char T_modnum[10];
    T_p = (ticket *)malloc(sizeof(ticket));
    if (NULL == (pfile = fopen("Ticket.txt", "r")))
    {
        printf("读取文件失败!\n");
        getchar();
        exit(1);
    }
    if (NULL == (T_pfile = fopen("T-ticket.txt", "w")))
    {
        printf("写入文件失败!\n");
        getchar();
        exit(1);
    }
    printf("请输入需要修改的车次:");
    scanf("%s", &T_modnum);
    while (EOF != fscanf(pfile, "%s%12s%12s%12lf%12d", &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->T_fares, &T_p->T_tnum))
    {
        if (strcmp(T_modnum, T_p->T_num) == 0)
        {
            printf("%s%12s%12s%12s%12s\n", "车次", "起点", "终点", "票价", "票数");
            printf("%s%12s%12s%12.2lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
            printf("以下需要修改为:\n");
            printf("请输入车次:\n");
            scanf("%s", T_p->T_num);
            getchar();
            printf("请输入起点:\n");
            scanf("%s", T_p->T_origin);
            getchar();
            printf("请输入终点:\n");
            scanf("%s", T_p->T_destination);
            getchar();
            printf("请输入票价:\n");
            scanf("%12lf", &T_p->T_fares);
            getchar();
            printf("请输入票数:\n");
            scanf("%12d", &T_p->T_tnum);
            getchar();
            printf("%s%12s%12s%12s%12s\n", "车次", "起点", "终点", "票价", "票数"); 
            fprintf(T_pfile, "%s%12s%12s%12lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
            printf("%s%12s%12s%12.2lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
            printf("修改成功!\n");
            printf("按任意键返回菜单!\n");
            getch();
            continue;
        }
        fprintf(T_pfile, "%s%12s%12s%12lf%12d\n", T_p->T_num, T_p->T_origin, T_p->T_destination, T_p->T_fares, T_p->T_tnum);
    }
    free(T_p);
    T_p = NULL;
    fclose(pfile);
    pfile = NULL;
    fclose(T_pfile);
    T_pfile = NULL;
    remove("Ticket.txt");
    rename("C:\\CODE\\火车订票系统\\火车订票系统\\火车订票系统\\T-ticket.txt", "C:\\CODE\\火车订票系统\\火车订票系统\\火车订票系统\\Ticket.txt");
    system("cls");
    main();
}

//显示订票信息
void T_showbookt(void)
{
    int i;
    passager *T_head = NULL;
    passager *T_end = NULL;
    passager *T_p = NULL;
    passager *H_p = NULL;
    FILE *pfile = NULL;
    int T_empty;
    T_end = (passager *)malloc(sizeof(passager));
    T_end->next = NULL;
    T_head = (passager *)malloc(sizeof(passager));
    T_head->next = T_end;
    H_p = T_head;
    pfile = fopen("Passenger.txt", "r");
    if (!pfile)
    {
        printf("读取文件失败!");
        getchar();
        exit(1);
    }
    T_p = (passager *)malloc(sizeof(passager));
    //判断文件是否为空
    T_empty = fscanf(pfile, "%d%12s%12s%12s%12s%12d", &T_p->P_id, &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->P_name, &T_p->P_num);
    if (EOF == T_empty)
    {
        printf("没有可查询的车票信息\n");
        getchar();
        exit(1);
    }
    while (EOF != T_empty)
    {
        H_p->next = T_p;
        T_p->next = T_end;
        H_p = H_p->next;
        T_p = (passager *)malloc(sizeof(passager));
        T_empty = fscanf(pfile, "%d%12s%12s%12s%12s%12d", &T_p->P_id, &T_p->T_num, &T_p->T_origin, &T_p->T_destination, &T_p->P_name, &T_p->P_num);
    }
    free(T_p);
    T_p = NULL;
    T_p = T_head;
    printf("%s%12s%12s%12s%12s%12s\n", "ID", "车 次", "起 点", "终 点", "票 价", "票 数");
    while (T_p->next->next != NULL)
    {
        printf("%2d%12s%12s%12s%12s%12d\n", T_p->next->P_id, T_p->next->T_num, T_p->next->T_origin, T_p->next->T_destination, T_p->next->P_name, T_p->next->P_num);
        T_p = T_p->next;
    }
    T_destroyP(&T_head);
    fclose(pfile);
    pfile = NULL;
    for (i = 0; i < 72; i++)
    {
        printf("+");
    }
    printf("\n");
    printf("按任意键返回!\n");
    getchar();
    system("cls");
    main();
}

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

完美教父

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值