weixin_45818039 2020-06-03 22:22 采纳率: 0%
浏览 296

从文件中读取创立链表没问题,但是将链表重新导入文件时出现多余数据?

char order_num[20], movie_name[40];
    SYSTEMTIME sys;
    int r = 0 , count=0, hall, row, column;
    FILE *fp;
    order info[200],  *head, *p ,*p1 , *p2;
    head = NULL;
    GetLocalTime( &sys ); 
    if(!(fp=fopen("C:\\Users\\18092\\Desktop\\c_project\\documents\\orders.txt","r")))
    {
        printf("Open error!\n");
        exit(1);
    }
    fscanf(fp,"%s %s %s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
    info[0].u_account , info[0].order_num , info[0].movie_name,&info[0].hall_num, &info[0].date.year, &info[0].date.month ,&info[0].date.day,
    &info[0].start_time.hour, &info[0].start_time.min, &info[0].end_time.hour, &info[0].end_time.min, &info[0].row, &info[0].column,
    &info[0].pay, &info[0].pay_date.year, &info[0].pay_date.month, &info[0].pay_date.day, &info[0].pay_time.hour, &info[0].pay_time.min, &info[0].sign);                                            
    while(!feof(fp))
    {
        p=(order*)malloc(sizeof(order));
        strcpy(p->u_account,info[r].u_account);
        strcpy(p->order_num,info[r].order_num);
        strcpy(p->movie_name,info[r].movie_name);
        p->hall_num = info[r].hall_num;
        p->date.year = info[r].date.year;
        p->date.month = info[r].date.month;
        p->date.day = info[r].date.day;
        p->start_time.hour  = info[r].start_time.hour ;     
        p->start_time.min  = info[r].start_time.min ;
        p->end_time.hour  = info[r].end_time.hour ;
        p->end_time.min  = info[r].end_time.min ;
        p->row = info[r].row;
        p->column = info[r].column;
        p->pay = info[r].pay;
        p->pay_date.year = info[r].pay_date.year;
        p->pay_date.month =info[r].pay_date.month;
        p->pay_date.day =info[r].pay_date.day;
        p->pay_time.hour =info[r].pay_time.hour;
        p->pay_time.min =info[r].pay_time.min;
        p->sign =info[r].sign;
        head = order_InsertList(head,p);
        r++;
        fscanf(fp,"%s %s %s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
        info[r].u_account , info[r].order_num , info[r].movie_name,&info[r].hall_num, &info[r].date.year, &info[r].date.month ,&info[r].date.day,
        &info[r].start_time.hour, &info[r].start_time.min, &info[r].end_time.hour, &info[r].end_time.min, &info[r].row , &info[r].column,
        &info[r].pay, &info[r].pay_date.year, &info[r].pay_date.month , &info[r].pay_date.day, &info[r].pay_time.hour, &info[r].pay_time.min, &info[r].sign);
    }
    fclose(fp);

    printf("****************************************************************************************************\n");
    printf("|  用户账号  |  订单号  |  电影名  |放映厅号|   日期   |    时间    | 座位 |价格|    购买日期   |   购买时间   |\n");
    printf("****************************************************************************************************\n");
    for(p1 = p2 = head ;p1  != NULL;p1 = p2)
    {
        if( ((strcmp( account , p1->u_account ) == 0)  &&  (p1->sign == 1))  &&     (((p1->date.month > sys.wMonth) || ((p1->date.month == sys.wMonth)  &&  (p1->date.day > sys.wDay)))  || (((p1->date.month == sys.wMonth)  &&  (p1->date.day == sys.wDay) && (p1->start_time.hour > sys.wHour)) || ((p1->date.month == sys.wMonth)  &&  (p1->date.day == sys.wDay) && (p1->start_time .hour == sys.wHour)  &&  (p1->start_time .min > sys.wMinute)))) )
        {
            printf("%-12s|%-12s|%-12s|%-2d|%4d年%2d月%2d日|%02d:%02d--%02d:%02d|%d行 %d列|%4d|%4d年%2d月%2d日|%02d:%02d|\n",        
            p1->u_account ,p1->order_num , p1->movie_name,p1->hall_num , p1->date.year, p1->date.month ,p1->date.day,
            p1->start_time.hour, p1->start_time.min, p1->end_time.hour, p1->end_time.min, p1->row , p1->column,
            p1->pay,p1->pay_date.year, p1->pay_date.month , p1->pay_date.day, p1->pay_time.hour, p1->pay_time.min);
            printf("****************************************************************************************************\n");
            count++;
        }
        p2 = p1->next ;
    }
    if(!count)
    {
        printf("未找到可退的订单!\n");
        system("pause");
    }
    else
    {
        printf("请输入您退订订单的单号:\n");
        scanf("%s",order_num);
        for(p1 = p2 = head ;p1  != NULL;p1 = p2)
        {
            if( strcmp( order_num , p1->order_num ) == 0)
            {
                 p1->sign  = 0;
                hall = p1->hall_num ;
                row =  p1->row ;
                column =  p1->column ;
                strcpy(movie_name,  p1->movie_name);
            }
            p2 = p1->next ;
        }
        if(!(fp=fopen("C:\\Users\\18092\\Desktop\\c_project\\documents\\orders.txt","w")))
        {
            printf("Open error!\n");
            exit(1);
        }
        for(p1 = p2 = head ;p1  != NULL;p1 = p2)
        {
            p2 = p1->next ;
            fprintf(fp,"%s %s %s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
             p1->u_account ,  p1->order_num ,  p1->movie_name, p1->hall_num,  p1->date.year,  p1->date.month , p1->date.day,
             p1->start_time.hour,  p1->start_time.min,  p1->end_time.hour,  p1->end_time.min,  p1->row ,  p1->column,
             p1->pay,  p1->pay_date.year,  p1->pay_date.month ,  p1->pay_date.day,  p1->pay_time.hour  ,p1->pay_time.min  ,p1->sign);       
        }
        fclose(fp);
        printf("退票成功!\n");
        seat_cover(hall, row, column, movie_name);
        system("pause");
        system("cls");
    }
}

typedef struct movie{ //电影信息结构
char movie_num[40]; //电影编号
char movie_name[60]; //电影名
int price; //电影单价
struct{
int year;
int month;
int day;
}date; //日期
struct{
int hour;
int min;
}start_time; //开始时间
struct{
int hour;
int min;
}end_time; //结束时间
int hall_num; //放映厅号
char seat[ROW*COLUMN]; //座位表
struct movie *next; //指针
}movie;

if(!(fp=fopen("C:\Users\18092\Desktop\c_project\documents\orders.txt","w")))
{
printf("Open error!\n");
exit(1);
}
for(p1 = p2 = head ;p1 != NULL;p1 = p2)
{
p2 = p1->next ;
fprintf(fp,"%s %s %s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
p1->u_account , p1->order_num , p1->movie_name, p1->hall_num, p1->date.year, p1->date.month , p1->date.day,
p1->start_time.hour, p1->start_time.min, p1->end_time.hour, p1->end_time.min, p1->row , p1->column,
p1->pay, p1->pay_date.year, p1->pay_date.month , p1->pay_date.day, p1->pay_time.hour ,p1->pay_time.min ,p1->sign);

}
fclose(fp);

图片说明

图片说明图片说明

求大佬帮小弟解决一下!读取前的文件是没有圈起来的部分!创建的链表输出也没问题!

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题