JJJJJJOE 2020-05-14 15:40 采纳率: 0%
浏览 212

求C语言大佬帮忙解决C语言问题

#include<stdio.h>
#define Day 10 
#define Event 20
typedef struct{ 
    int id=0;
    char day[Day];
    char event[Event];
    float zf;//支出或收入 
    float  balance;
}Zhanghu;

void br(){
    printf("\n\n");
}

void save(Zhanghu a){
    FILE *fp;
    fp=fopen("XX.txt","ab");
    fwrite(&a,sizeof(Zhanghu),1,fp);
    fclose(fp);
    }

void duqu(){//显示全部账单 
    FILE *fp;
    Zhanghu s;
    fp=fopen("XX.txt","rb");
    if(fp==NULL){
        printf("open file error!");
        return;
    }
    while(!feof(fp)){
        fread(&s, sizeof(Zhanghu), 1, fp);  
        printf("\n流水号码:%d",s.id);
        printf("\n日期:%s",s.day);
        printf("\n事件:%s",s.event);
        printf("\n支出或收入:%f",s.zf);
        printf("\n余额:%f",s.balance);
    }
    fclose(fp);
}

void add(Zhanghu &a){//添加账单 
    printf("请输入发生日期(例如:2020-05-08)\n:");
    scanf("%s",&a.day);
    printf("请输发生事件\n:");
    scanf("%s",&a.event);
    printf("请输入发生金额(正+的表示收入,负-表示支出)\n:");
    scanf("%f",&a.zf);
    a.balance=a.balance+a.zf;
    a.id++; 
    save(a);//保存到文本中 
}

void showlate(){//查看最后的账单 
    FILE *fp;
    Zhanghu s;
    fp=fopen("XX.txt","rb");
    if(fp==NULL){
        printf("open file error!");
        return;
    }
    while(feof(fp)==0){
        fread(&s, sizeof(Zhanghu), 1, fp);  
        if(feof(fp)!=0){
            printf("\n流水号码:%d",s.id);
            printf("\n日期:%s",s.day);
            printf("\n事件:%s",s.event);
            printf("\n支出或收入:%f",s.zf);
            printf("\n余额:%f",s.balance);
        }
    }
    fclose(fp);
}
void showyue(){//查看余额 
    FILE *fp;
    Zhanghu s;
    fp=fopen("XX.txt","rb");
    if(fp==NULL){
        printf("open file error!");
        return;
    }
    while(feof(fp)==0){
        fread(&s, sizeof(Zhanghu), 1, fp);  
        if(feof(fp)!=0){
            printf("\n余额:%f",s.balance);
        }
    }
    fclose(fp);
}
int mianban(){//面板 
    int i=0;  
    while(1){
        printf("\t0,退出\n");
        printf("\t1,添加新收入或支出信息\n"); 
        printf("\t2,显示所有记录列表\n");
        printf("\t3,查询最后一条记录\n");
        printf("\t4,查看实时余额\n");
        scanf("%d",&i);
        if(i>-1&&i<5)
    return i;
        else printf("输入错误!请重新输入!\n");
    }
}

int main(){
    Zhanghu l;
    int yiz;//判断是否结束程序 
    do{
        yiz=mianban();
        switch(yiz){
            case 1: add(l);
                break;
            case 2: duqu();
                break;
            case 3: showlate();
                break;
            case 4: showyue();
                break;
        }
        br();
    }while(yiz!=0);//yiz等于0就退出程序 
return 0;   
}

图片说明
为什么最后一个账单会输出两次
而且每一个账单的日期后面总会跟着事件
求求了!!!!

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题