程序运行上有问题,比如无法录入一种火车票,以及后续运行。

main.c


#include<stdio.h>
#include<string.h>
#include<stdlib.h> 
#include"func.h"
#include"menu.h"

int main()
{
    int ch, sch;
    int n, i;
    TICKET ticket[ticketNum];
    while (1)
    {
        ch = MainMenu();
        system("cls");
        switch (ch)
        {
        case 1:
            sch = Submenu1();
            if (sch == 1)
            {
                printf("请输入要录入的火车票种类数:");
                scanf("%d", &n);
                ReadScore(ticket, n);
            }
            else if (sch == 2)
                n = ReadformFile();
            break;
        case 2:
            sch = Submenu2();
            if (sch == 1)
            {
               n = appendTicket(ticket, n);
            }
            if (sch == 2)
            {
                n = deleteTicket(ticket, n);
            }
            if (sch == 3)
            {
                modify(ticket, n);
            }
            break;
        case 3:
            sch = Submenu3();
            if (sch == 1)
            {
                SortbyAmount1(ticket, n);
                puts("剩余数量从高到低排:");
                Print(ticket, n);
            }
            if (sch == 2)
            {
                SortbyAmount2(ticket, n);
                puts("剩余数量从低到高排:");
                Print(ticket, n);
            }
            if (sch == 3)
            {
                SortbyNum(ticket, n);
                puts("按编号排列:");
                Print(ticket, n);
            }
            break;

        case  4:
            sch = Submenu4();
            if (sch == 1)
                SearchbyNum(ticket, n);
            if (sch == 2)
                SearchbyName(ticket, n);
            break;

        case 5:
            sch = Submenu5();
            if (sch == 1)
                Print(ticket, n);
            if (sch == 2)
                Write(ticket, n);
            break;
        case 0:
            printf("程序运行结束!\n");
            exit(0);
        default:
            puts("请输入正确序号:\n");
            system("pause");
            system("cls");
            break;
        }
    }
    return 0;
}

menu.c

#include<stdio.h>

int MainMenu()
{
    int sel;
    puts("*******************************************");
    puts("*                  主菜单                 *");
    puts("*               1.输    入                *");
    puts("*               2.修    改                *");
    puts("*               3.排    序                *");
    puts("*               4.查    询                *");
    puts("*               5.输    出                *");
    puts("*               0.退    出                *");
    puts("*******************************************");
    printf("请输入功能选项:");
    scanf("%d", &sel);
    return sel;
}

int Submenu1()
{
    int sel;
    puts("******************************************");
    puts("*                输入子菜单              *");
    puts("*               1.从键盘导入             *");
    puts("*               2.从文件导入             *");
    puts("******************************************");
    printf("请输入功能选项:");
    scanf("%d", &sel);
    return sel;
}

int Submenu2()
{
    int sel;
    puts("******************************************");
    puts("*              修改子菜单                *");
    puts("*               1.添 加                  *");
    puts("*               2.删 除                  *");
    puts("*               3.修 改                  *");
    puts("******************************************");
    printf("请输入功能选项:");
    scanf("%d", &sel);
    return sel;
}

int Submenu3()
{
     int sel;
    puts("******************************************");
    puts("*              排序子菜单                *");
    puts("*          1.按剩余数量从高到底排        *");
    puts("*          2.按剩余数量从低到高排        *");
    puts("*          3.按照火车编号排              *");
    puts("******************************************");
    printf("请输入功能选项:");
    scanf("%d",& sel);
    return sel;
    system("cls");
}

int Submenu4()
{
     int sel;
    puts("******************************************");
    puts("*              查询子菜单                *");
    puts("*             1.按编号查找               *");
    puts("*             2.按地名查找               *");
    puts("******************************************");
    printf("请输入功能选项:");
    scanf("%d", &sel);
    return sel;
}

int Submenu5()
{ 
    int sel;
    puts("******************************************");
    puts("*              输出子菜单                *");
    puts("*             1.输出到屏幕               *");
    puts("*             2.输出到文件               *");
    puts("******************************************");
    printf("请输入功能选项:");
    scanf("%d", &sel);
    return sel;
}

menu.h

int MainMenu();
int Submenu1();
int Submenu2();
int Submenu3();
int Submenu4();
int Submenu5();

func.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "func.h"
 
 
 
/*从键盘输入火车票的信息*/
void ReadScore(TICKET ticket[],int n)
{
    int i;
    printf("请输入火车的编号、起点和终点、出发时间、价格和剩余数量:\n");
    for (i = 0; i < n;i++)
    {
        scanf("%ld%s%d%d%d%f%d", &ticket[i].num,ticket[i].name, &ticket[i].time,&ticket[i].price,&ticket[i].amount);
    }
    system("pause");
    system("cls");
}

/*从文件中读取火车票信息*/
int ReadformFile()
{
    TICKET ticket[50];
    FILE *fp;
    int i;
    
    if((fp=fopen("D://ticket.txt","r"))==NULL)
    {
        printf("Can't open this file.\n");
        exit(0);
    }

    for (i = 0; !feof(fp);i++)
    {
        fscanf(fp, "%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d", &ticket[i].num, ticket[i].name, &ticket[i].time ,&ticket[i].price,&ticket[i].amount);
    }
    return i;
}

/*添加火车票信息*/
int appendTicket(TICKET ticket[],int n)
{
    puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
    scanf("%ld%s%d%d%d%f%d", &ticket[n].num, ticket[n].name, &ticket[n].time,&ticket[n].price,&ticket[n].amount);
    printf("添加成功!\n");
    n = n + 1;
    system("pause");
    system("cls");
    return n;
}

/*删除火车票信息*/
int deleteTicket(TICKET ticket[], int n)
{
    int i, k;
    long num;
    printf("请输入火车票的编号:");
    scanf("%ld", &num);
    for (i = 0; i < n; i++)
    {
        if (num == ticket[i].num)
            break;
    }

    if (i < n)
    {
        for (k = i + 1; k < n; k++)
        {
            ticket[k - 1] =ticket[k];
            return 0;
        }
        printf("删除成功!\n");
        n = n - 1;
        system("pause");
        system("cls");
    }
    else
    {
        puts("未找到该火车票");
        system("pause");
        system("cls");
        return n;
    }
}


/*修改火车票信息*/
void modify(TICKET ticket[],int n)
{
    int i;
    long num;
    printf("请输入待修改火车票的编号:");
    scanf("%ld", &num);
    for (i = 0; i < n; i++)
        if(num == ticket[i].num)
            break;
    
    if(i<n)
    {
        puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
        printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n", ticket[i].num, ticket[i].name,ticket[i].time,ticket[i].price,ticket[i].amount);
        printf("请输入待修改火车票的编号、起点和终点、出发时间、价格和剩余数量:\n");
        scanf("%ld%s%d%d%d%f%d", &ticket[i].num,ticket[i].name, &ticket[i].time ,&ticket[i].price,&ticket[i].amount);
        printf("修改成功!\n");
        system("pause");
        system("cls");
    }
    else
    {
        puts("未找到该火车票");
        system("pause");
        system("cls");
    }
}

/*按剩余数量从高到低排序*/
void SortbyAmount1(TICKET ticket[],int n)
{
    int i, j;
    TICKET temp1;
    for (i = 0; i < n - 1;i++)
    {
        for (j = i + 1; j < n;j++)
        {
            if(ticket[i].amount<ticket[j].amount)
            {
                temp1 = ticket[i];
                ticket[i] = ticket[j];
                ticket[j] = temp1;
            }
        }
    }
}

/*按剩余数量从低到高排序*/
void SortbyAmount2(TICKET ticket[], int n)
{
    int i, j;
    TICKET temp1;
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (ticket[i].amount > ticket[j].amount)
            {
                temp1 = ticket[i];
                ticket[i] = ticket[j];
                ticket[j] = temp1;
            }
        }
    }
}

/*按编号排序*/
void SortbyNum(TICKET ticket[],int n)
{
    int i, j;
    TICKET temp1;
    for (i = 0; i < n - 1;i++)
    {
        for (j = i + 1; j < n;j++)
        {
            if(ticket[i].num>ticket[j].num)
            {
                temp1 = ticket[i];
                ticket[i] = ticket[j];
                ticket[j] = temp1;
            }
        }
    }
}

/*按火车编号查找*/
void SearchbyNum(TICKET ticket[],int n)
{
    long number;
    int i;
    printf("请输入编号:");
    scanf("%ld", &number); 
    puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
    for (i = 0; i < n;i++)
    {
        if(ticket[i].num == number)
        {
            printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n", ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
            return;
        }
    }
    printf("未找到结果\n");
    system("pause");
    system("cls");
}

/*按起点和终点查找*/
void SearchbyName(TICKET ticket[],int n)
{
    char name[20];
    int i;
    printf("请输入名称:");
    scanf("%s", name);
    puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
    for (i = 0; i < n;i++)
    {    
        if(strcmp(name,ticket[i].name) == 0)
        { 
            printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n",ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
            break;
        }
        
    }
    if (i < n)
    {
        system("pause");
        system("cls");
    }
    if (i == n)
    {
        printf("未找到结果\n");
        system("pause");
        system("cls");
    }
}

/*在屏幕上显示所有火车票信息*/
void Print(TICKET ticket[],int n)
{
    int i;
    puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
    for (i = 0; i < n;i++)
    { 
        printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n",ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
        if (i == (n - 1))
            putchar('\n');
    } 
    system("pause");
    system("cls");
}


/*将火车票信息输出到文件*/
void Write(TICKET ticket[],int n)
{
    FILE *fp;
    int i;
    if((fp=fopen("D://ticket.txt","w"))==NULL)
    {
        printf("Can't open this file.\n");
        exit(0);
    }
    for (i = 0; i < n;i++)
    {
        fprintf(fp, "%ld    %s    %d    %d    %d    %f    %d\n", ticket[i].num,ticket[i].name,ticket[i].time,ticket[i].price,ticket[i].amount);
    }
    fclose(fp);
    printf("输出完成!\n");
    system("pause");
    system("cls");
}

date.h

#define ticketNum 100
typedef struct ticket
{
    long num;
    char name[20];
    char time[20];
    int price;
    int amount;
}TICKET;


func.h

#include "date.h"
void ReadScore(TICKET ticket[], int n);
int ReadformFile();
int appendTicket(TICKET ticket[], int n);
int deleteTicket(TICKET ticket[], int n);
void modify(TICKET ticket[], int n);
void SortbyAmount1(TICKET ticket[], int n);
void SortbyAmount2(TICKET ticket[], int n);
void SortbyNum(TICKET ticket[], int n);
void SearchbyNum(TICKET ticket[], int n);
void SearchbyName(TICKET ticket[], int n);
void Print(TICKET ticket[], int n);
void Write(TICKET ticket[], int n);