这个列车时刻表管理系统的保存和添加功能有问题,文件无法写入内容,求大神们指点修改一下,C写的。谢谢了

//#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"/*定义头文件,处理文件及字符数组时要用到相应功能*/
#define N 10
void fmenu()
{
    system("cls");
    printf("************************欢迎使用苏州列车时刻表信息管理系统**********************\n");
    printf("\t   %c1. 查询列车",3);
    printf("\t   %c2. 修改列车",3);
    printf("\t   %c3. 增加列车",3);
    printf("\n\n");
    printf("\t   %c4. 取消列车",3);
    printf("\t   %c5. 保存信息",3);
    printf("\t   %c6. 帮助界面\n",3);
    printf("********************************************************************************\n");
    printf("请选择要执行的操作:\n");/*菜单程序,用于各种功能的选择*/
}
struct train/*定义结构体*/
{
    char name[8];
    char checi[6];
    int year;
    int month;
    int day;
    int hour;
    int minute;
}lieche[N];/*定义一个结构体数组*/

void chaxun(struct train *p)/*子程序,其功能是查询列车*/
{
    //sort(lieche);/*先排序一下,方便查看*/
    char a[8];/*定义一个字符数组,输入要查询的列车*/
    int k=0,i,c;
    printf("请输入要查询的列车:\n");
    scanf("%s",a);
    for(i=0;i<N;i++)
    {
        if(strcmp(p[i].name,a)==0)
        {
            printf("苏州-%s\t%s(车次)\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);/*将所查列车的信息全部打出*/
            k++;
        }
    }
    if(k==0)
        printf("抱歉,没有这趟列车\n");/*没有查到时,打出通知*/
    printf("按 1 继续,按 0 退出\n");/*选择继续或者退出*/
    scanf("%d",&c);
    if(c!=0)
        chaxun(lieche);
}
void xiugai(struct train *p)/*子程序,用于修改列车时间*/
{
    char a[8],b[6];
    int i,x,c,k=0,h,mi,y,m,d,q;
    printf("请输入要修改的列车:\n");
    scanf("%s",a);
    for(i=0;i<N;i++)
    {
        if(strcmp(p[i].name,a)==0)
        {
            printf("苏州-%s\t%s()车次\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);
            printf("要修改这趟列车吗?\n1.是 0.否\n");
            scanf("%d",&q);
            if(q==1)
            {
                printf("请输入修改后的车次:\n");
                scanf("%s",b);
                printf("请输入修改后的年月日:\n");
                scanf("%d%d%d",&y,&m,&d);
                printf("请输入修改后的小时和分钟:\n");
                scanf("%d%d",&h,&mi);
                printf("确定修改吗?\n1.是 2.否\n");/*选择是否确定修改列车时间,防止错误操作*/
                scanf("%d",&x);
                if(x==1)
                {
                    strcpy(p[i].checi,b);
                    p[i].year=y;
                    p[i].month=m;
                    p[i].day=d;
                    p[i].hour=h;
                    p[i].minute=mi;
                printf("已经修改此列车");
                }
            }
            k++;
        }
    }
    if(k==0)
        printf("抱歉,没有这趟列车\n");/*没有查到时,打出通知*/
    printf("按 1 继续,按 0 退出\n");
    scanf("%d",&c);
    if(c!=0)
        xiugai(lieche);
}


void zengjia(struct train *p)/*子程序,用于列车增加*/
{
    struct train a;
    char b[]={"0000000"};/*空白位置,在此处插入所填列车*/
    int x,c,i;
            
    printf("请输入要增加的列车目的地:\n");
    scanf("%s",a.name);
    printf("请输入修改后的车次:\n");
    scanf("%s",a.checi);
    printf("请输入所增加列车的年月日:\n");
    scanf("%d%d%d",&a.year,&a.month,&a.day);
    printf("请输入所增加列车的小时和分钟:\n");
    scanf("%d%d",&a.hour,&a.minute);
    printf("确定要增加这一趟列车吗?\n1.是 0.否\n");
    scanf("%d",&x);
    if(x==1)
    for(i=0;i<N-1;i++)
    {
        if(strcmp(p[i].name,b)==0)
        {
            strcpy(p[i].name,a.name);
            strcpy(p[i].checi,a.checi);
            p[i].year=a.year;
            p[i].month=a.month;
            p[i].day=a.day;
            p[i].hour=a.hour;
            p[i].minute=a.minute;
            strcpy(p[i+1].name,b);/*找到位置,插入列车,并把0000000给后面一个结构体*/
            
            printf("已经增加这趟列车");
            break;
        }
    
    }
    //sort(lieche);
    printf("按 1 继续,按 0 退出\n");
    scanf("%d",&c);
    if(c!=0)
        zengjia(lieche);
}

void quxiao(struct train *p)/*子程序,用于取消列车*/
{
    char a[8];
    char b[]={"0000000"};
    int i,x,c,k=0,s;
    printf("请输入要取消的列车\n");
    scanf("%s",a);
    for(i=0;i<N;i++)
    {
        if(strcmp(p[i].name,a)==0)
        {
            printf("苏州-%s\t%s(车次)\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);
            printf("确定要删除这一次列车吗?\n1.是 0.否\n");/*询问是否取消*/
            scanf("%d",&x);
            if(x==1)
            {
                for(s=i;s<N-1;s++)
                {
                    strcpy(p[s].name,p[s+1].name);
                    strcpy(p[s].checi,p[s+1].checi);
                    p[s].year=p[s+1].year;
                    p[s].month=p[s+1].month;
                    p[s].day=p[s+1].day;
                    p[s].hour=p[s+1].hour;
                    p[s].minute=p[s+1].minute;/*将列车取消,把后一个结构体往前移一位*/
                }
            printf("此列车已取消");
            }
        k++;
        }
    }
    if(k==0)
        printf("抱歉,没有这趟列车\n");/*先查一下有没有要取消的列车*/
    printf("按 1 继续,按 0 退出\n");
    scanf("%d",&c);
    if(c!=0)
        quxiao(lieche);
}
void baocun(struct train *p)/*子程序,用于数据保存*/
{
    int c,i=0,x;
    char b[]={"0000000"};
    printf("确定要保存修改吗?\n1.是 0.否\n");
    scanf("%d",&x);
    if(x==1)
    {
        char a[20];
        FILE *pps;
        if((pps=fopen("zuoye.txt","w"))==NULL)/*打开一个新的文本文件*/
        {
        printf("不能打开此文件\n");
        exit(0);
        }
        //for(i;i<N;i++)
        while(strcmp(lieche[i].name,b)==0)
        {
            fprintf(pps,"%s %s %d %d %d %d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);/*将结构体数组的数据写进里面*/
            i++;
        }
        fprintf(pps,"%s",b);
        fclose(pps);
        printf("文件已保存\n");
    }
    printf("按 1 继续,按 0 退出\n");
    scanf("%d",&c);
    if(c!=0)
        baocun(lieche);
}
void help(struct train *p)//帮助系统
{
  printf("\n0.欢迎使用系统帮助!\n");
  printf("\n1.进入系统后,先刷新时刻表信息,再查询;\n");
  printf("\n2.按照菜单提示键入数字代号;\n");
  printf("\n3.增加或修改信息后,切记保存按5;\n");
  printf("\n4.谢谢您的使用!\n");
}
void main()/*主程序,负责整个程序架构及函数调用等*/
{
    //system("color 3b");/*更改前景和背景颜色*/
    char b[]={"0000000"};
    FILE *fp;/**/
    int x,i;
    if((fp=fopen("zuoye.txt","w+"))==NULL)/*打开文件,输入数据*/
    {
        printf("不能打开数据库文件\n");
        exit(0);
    }
    for(i=0;i<N;i++)
    fscanf(fp,"%s%s%d%d%d%d:%02d",lieche[i].name,lieche[i].checi,&lieche[i].year,&lieche[i].month,&lieche[i].day,&lieche[i].hour,&lieche[i].minute);
    fmenu();
    scanf("%d",&x);
    while (x!=0)/*选择所要操作的功能*/
    {
        switch(x)
        {
        case 1:
            chaxun(lieche);break;//选择查询功能
        case 2:
            xiugai(lieche);break;//选择修改功能
        case 3:
            zengjia(lieche);break;//选择增加功能
        case 4:
            quxiao(lieche);break;//选择取消功能
        case 5:
            baocun(lieche);break;//选择保存功能
        case 6:
            help(lieche);break;//选择帮助功能
        }
        fmenu();/*循环调用菜单*/
        scanf("%d",&x);
    }
}

Muzeebob
浏览 1262回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP