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条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?