| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 424 人关注过本帖
标题:还是那个问题,输出时0
只看楼主 加入收藏
tianwen0921
Rank: 2
等 级:论坛游民
帖 子:18
专家分:44
注 册:2014-1-27
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
还是那个问题,输出时0
问题1:左上角观测窗里显示的por表示取款金额,我输入的是1000,显示的都是小数,不知道为什么?
问题2:count[num].interest表示利息,观测窗里面显示了数值,但是执行框输出都为0.000,为什么呢?
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

代码嘛,很长,基本上都是重复的问题,看一个部分就好,不过还是都贴上来吧,问题遇到过的应该不难
程序代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 100
struct count_user
{    char name[20];//姓名
    char card[20];//卡号
    char secu[7];//密码
    char type[9];//存款种类
    int data_limit;//存款期限
    double capital;//卡上余额
    double interest;//利息
    int in_year;//存入日期
    int in_month;
    int in_day;
    int out_year;//支取日期
    int out_month;
    int out_day;//共13个数据,整体输入,不可缺少
}count[N];
void input();
void beauty();
void build();
void inquire();
void deposit();
void draw();
void fix_cun();
void fix();
void use();
void date();
void current();
void time_demand();
void install_cun();
void install_qu();
int calculate(int,int,int);
void undo();
int m,n,s,num=0,t;
double Interest1,tax,rate,por_cun,por;
void main()
{    
    input();//输入函数
}
void beauty()//美化函数
{    for(int i=0;i<80;i++)
    {    if(i%80==0)
            putchar('\n');
        putchar('*');
    }
    putchar('\n');
}
    
void input()//输入函数
{    
    beauty();
    printf("您想要办理什么业务?\n开户请按1\n存款请按2\n取款请按3\n销户请按4\n");
    beauty();
    fflush(stdin);
    switch(getchar())
    {    case'1':build();break;//调用开户函数
        case'2':deposit();break;//调用存款函数
        case'3':draw();break;//调用取款函数
        case'4':undo();break;//调用销户函数
        default:printf("Input error!\n");
    }
}
//开户
void build()//开户函数
{    FILE *fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    strcpy(count[num].type,"00000000");
    count[num].data_limit=0;
    count[num].capital=0.0;
    count[num].interest=0.0;
    count[num].in_year=count[num].in_month=count[num].in_day=0;
    count[num].out_year=count[num].out_month=count[num].out_day=0;//共10个数据
    beauty();
    fscanf(stdin,"%s%s%s",count[num].name,count[num].card,count[num].secu);//将信息从键盘写入
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);
    beauty();
    fclose(fp);
    printf("\n开户已成功,请核对您的信息:\n");
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);
    fprintf(stdout,"姓名:%s\n卡号:%s\n密码:%s\n",count[num].name,count[num].card,count[num].secu);//输出到屏幕上
    fclose(fp);
    beauty();
    printf("确认请按\t1\n错误请按\t2\n");
    beauty();
    while((getchar())!='\n')
        continue;//getchar调用缓存区的'\n'会导致直接跳过!!!这个问题坑了我好几个晚上%>_<%
    switch(getchar())
    {    case'1':beauty();
                inquire();break;
        case'2':build();break;
        default:beauty();
                printf("Input error!\n");
    }
}
void inquire()//询问函数
{    
    printf("您是否需要办理其他业务?\n继续办理请按\t1\n退出请按\t2\n");
    beauty();
    while((getchar())!='\n')
        continue;
    switch(getchar())
    {    case'1':input();break;
        case'2':beauty();
                printf("感谢您的使用!O(∩_∩)O~~\n");break;
        default:printf("Input error!\n");
    }


}
//存款
void deposit()//存款函数
{    FILE*fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    beauty();
    scanf("%s%s%s",count[num].name,count[num].card,count[num].secu);//共3个数据
    beauty();
    printf("请输入您的存款日期:\n");
    beauty();
    scanf("%d%d%d",&count[num].in_year,&count[num].in_month,&count[num].in_day);//共3个数据
    beauty();
    printf("请选择您的存款类别:\n定期存款请按\t1\n活期存款请按\t2\n定活两便请按\t3\n零存整取请按\t4\n\n");
    beauty();
    fflush(stdin);
    switch(getchar())
    {    case'1':strcpy(count[num].type,"定期存款");
                beauty();
                fix_cun();
                break;
        case'2':strcpy(count[num].type,"活期存款");
                beauty();
                printf("请输入您的存款金额:\n");
                beauty();
                scanf("%d",&por_cun);//1个数据
                beauty();
                count[num].data_limit=0;
                break;
        case'3':strcpy(count[num].type,"定活两便");
                beauty();
                printf("请输入您的存款金额:\n");
                beauty();
                scanf("%d",&por_cun);//1个数据
                count[num].data_limit=0;
                break;
        case'4':strcpy(count[num].type,"零存整取");
                install_cun();
                break;
        default:printf("Input error!");
    }//1个数据
    count[num].interest=0.0;
    count[num].out_year=count[num].out_month=count[num].out_day=0;//共5个数据
    count[num].capital+=(double)por_cun;
    beauty();
    printf("\n存款已成功,请核对您的信息:\n");
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);
    fclose(fp);//将信息输出到文件
    beauty();
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n卡上余额:\t%d\n",count[num].name,count[num].card,count[num].secu,count[num].type,count[num].capital);//输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);//日期必须单独输出,否则年月日会向后推移,不能正确对应
    fclose(fp);
    beauty();
    inquire();
}
void fix_cun()
{    printf("请输入您的存款金额:\n");
    beauty();
    scanf("%d",&por_cun);//1个数据
    beauty();
    puts("请输入您预计存款的期限(请仔细阅读下面的提示):");
    puts("【提示:");
    puts("\t系统以月读取,请输入整数,期限应大于3个月");
    puts("  利率:");
    puts("\t三个月:1.71%");
    puts("\t六个月:2.07%");
    puts("\t一年:  2.25%");
    puts("\t二年:  2.70%");
    puts("\t三年:  3.24%");
    puts("\t五年:  3.60%");
    puts("  定期存款提前支取按活期利率计息】");
    beauty();
    scanf("%d",&count[num].data_limit);
    if(count[num].data_limit==3||count[num].data_limit==6)
    {    beauty();
        printf("您预计存款\t%d个月O(∩_∩)O~~\n",count[num].data_limit);//将信息输出到屏幕
        beauty();
        fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
        beauty();
    }
    if(count[num].data_limit%12==0)
    {    n=count[num].data_limit/12;
        if(n>=1&&n<5)
        {    beauty();
            fprintf(stdout,"您预计存款\t%d年O(∩_∩)O~~\n",n);//将信息输出到屏幕
            beauty();
            fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
            beauty();
        }
        else
        {    beauty();
            fprintf(stdout,"您预计存款\t5年及以上O(∩_∩)O~~\n",count[num].data_limit);//将信息输出到屏幕
            beauty();
            fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
            beauty();
        }
    }//1个数据
        while((getchar())!='\n')
            continue;
        switch(getchar())
        {    case'1':break;
            case'2':beauty();
                    fix_cun();break;
            case'3':beauty();
                    printf("感谢您的使用!O(∩_∩)O~~\n");break;
            default:beauty();
                    printf("Input error!");break;
        }
}
void draw()//取款函数
{    FILE*fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    beauty();
    scanf("%s%s%s",count[num].name,count[num].card,count[num].secu);//3个数据
    beauty();
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    /*for(int i=0;i<num&&count[num].card!=count[i].card;i++);
        if(i==num)
        {    printf("很抱歉,没有查找到您的数据,请您核对后重新输入O(∩_∩)O~~\n");
            draw();
        }
    count[num]=count[i];
    */
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n卡上余额:\t%d\n",count[num].name,count[num].card,count[num].secu,count[num].type,count[num].capital);//输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);//日期必须单独输出,否则年月日会向后推移,不能正确对应
    fclose(fp);//8个数据
    beauty();
    puts("请输入今天的日期(年 月 日):");
    beauty();
    scanf("%d%d%d",&count[num].out_year,&count[num].out_month,&count[num].out_day);//3个数据
    t=calculate(count[num].out_year,count[num].out_month,count[num].out_day);//计算天数
    beauty();
    puts("请输入您取款的金额:");
    beauty();
    scanf("%d",&por);
    if(strcmp(count[num].type,"定期存款")==0)
        fix();
    if(strcmp(count[num].type,"活期存款")==0)
        current();
    if(strcmp(count[num].type,"定活两便")==0)
        time_demand();
    if(strcmp(count[num].type,"零存整取")==0)
        install_qu();
}
int calculate(int y_out,int m_out,int d_out)
{    int t1=0,t2=0,t3=0,y,d1,d2,d3,d=0;
    for(y=count[num].in_year;y<y_out;y++)//存取年份不同
    {    if(y%4==0&&y%100!=0||y%400==0)
            d1=366;
        else
            d1=365;
        d+=d1;
    }
    for(int m1=1;m1<m_out;m1++)//计算取款日期是当年的第几天
    {    if(m1==2)
        {    if(y_out%4==0&&y_out%100!=0||y_out%400==0)
                d2=29;
            else 
                d2=28;
        }
        else 
        {    if(m_out==4||m_out==6||m_out==9||m_out==11)
                d2=30;
            else 
                d2=31;
        }
        t1+=d2;
    }
    for(int m2=1;m2<count[num].in_month;m2++)//计算存款日期是当年的第几天
    {    if(m2==2)
        {    if(count[num].in_year%4==0&&count[num].in_year%100!=0||count[num].in_day%400==0)
                d3=29;
            else 
                d3=28;
        }
        else 
        {    if(m2==4||m2==6||m2==9||m2==11)
                d3=30;
            else 
                d3=31;
        }
        t2+=d3;
    }
    return(d-t2+1+t1+d_out);
}
void fix()//定期函数(每月按30天计算,满一年按365天计算)
{    if(t>=count[num].data_limit*30)
    {    if(count[num].data_limit==3)
        {    puts("您的存款期限为3个月,利率为1.71%");//用printf无法输出%
            Interest1=count[num].capital*0.0171;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(count[num].data_limit==6)
        {    puts("您的存款期限为6个月,利率为2.07%");
            Interest1=count[num].capital*0.0207;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n==1)
        {    puts("您的存款期限为1年,利率为2.25%");
            Interest1=count[num].capital*0.0225;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n==2)
        {    puts("您的存款期限为2年,利率为2.70%");
            Interest1=count[num].capital*0.0207;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }    
        if(n==3)
        {    puts("您的存款期限为3年,利率为3.24%");
            Interest1=count[num].capital*0.0324;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n>=5)
        {    puts("您的存款期限为5年及以上,利率为3.60%");
            Interest1=count[num].capital*0.0360;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
    }
    else
    {    puts("您的存款期限未满,利率按活期计算为0.72%");
        Interest1=count[num].capital*0.0072*t/365;//应得利息
        tax=Interest1*0.2;//所得税
        count[num].interest=Interest1-tax;//实得利息
    }
    count[num].capital=count[num].capital+count[num].interest-por;
    use();
}
void use()
{    FILE*fp;
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);//将信息输出到文件
    fclose(fp);
    beauty();
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n",count[num].name,count[num].card,count[num].secu,count[num].type);//输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);//日期必须单独输出,否则年月日会向后推移,不能正确对应
    fprintf(stdout,"取款日期:\t%d年%d月%d日\n",count[num].out_year,count[num].out_month,count[num].out_day);
    printf("您应得利息为:\t%lf\n取款金额为:\t%d\n卡上余额为:\t%lf\n",count[num].interest,por,count[num].capital);
    fclose(fp);
    beauty();
    inquire();
}
void current()//活期函数
{    count[num].data_limit=t/30;
    Interest1=count[num].capital*0.0072*t/365;//应得利息
    tax=Interest1*0.2;//所得税
    count[num].interest=Interest1-tax;//实得利息
    count[num].capital-=por+count[num].interest;
    use();
}
void time_demand()//定活两便函数
{    double rate;
    if(t<90)
        rate=0.0072;
    else 
        if(t>=90&&t<180)
            rate=0.0171*0.6;
        else 
            if(t>=180&&t<365)
                rate=0.0207*0.6;
            else 
                if(t>=365)
                    rate=0.0225*0.6;
    Interest1=count[num].capital*t*rate/365;
    tax=Interest1*0.2;
    count[num].interest=Interest1-tax;
    count[num].capital+=count[num].interest-por;
    use();
}
void install_cun()//零存整取存款函数
{    int m,x,year,month,day;
    beauty();
    puts("请输入您的每月存款金额:");
    beauty();
    scanf("%d",&m);
    beauty();
    puts("请输入您预计存款的期限:");
    puts("【提示:");
    puts("\t系统以年读取,请输入整数,期限应不小于1年");
    puts("  利率:");
    puts("\t一年:    1.71%");
    puts("\t三年:    2.07%");
    puts("\t五年:    2.25%");
    puts("  存款开户金额由储户自定,每月存入一次,中途如有漏存,可于次月补存,但次月未补存者则视同违约,到期支取时对违约之前的本金部分按实存金额和实际存期计算利息;违约之后存入的本金部分,按实际存期和活期利率计算利息。】");
    puts("    利息和=(0.5+6)×12×存期年数×年利率×月存金额");
    beauty();
    scanf("%d",&x);
    count[num].data_limit=12*x;
    puts("请输入本次存款日期:");
    scanf("%d年%d月%d日",&year,&month,&day);
    t=calculate(year,month,day);
    if(t<=30)
        count[num].capital+=m;
    if(t>30&&t<=60)
        count[num].capital+=2*m;
    if(t>60)
        puts("您已超过存款期限,本次储蓄违规,不予受理!");
}
void install_qu()//零存整取取款函数
{    int n=count[num].data_limit/12,k,h;
    double interest2;
    if(t<count[num].data_limit*30)//限期内取款按活期计息
    {    k=t/30;//存期满月数
        for(int i=0;i<=k;i++)
        {    Interest1=count[num].capital*0.0072/12;
            tax=Interest1*0.2;
            count[num].interest=Interest1-tax;
        }
    }
    else //超限期取款期限内按约定计息,超限后按活期计息
    {    switch(n)
        {    case 1:rate=0.0171;break;
            case 3:rate=0.0207;break;
            case 5:rate=0.0225;break;
        }
        h=t/30-count[num].data_limit;//超限月数
        Interest1=(0.5+6)*12*n*rate*m;//零存整取利率计算公式:利息和=(0.5+6)×12×存期年数×年利率×月存金额
        interest2=count[num].capital*0.0072/12*h;
        tax=(Interest1+interest2)*0.2;
        count[num].interest=Interest1+interest2-tax;
    }
    count[num].capital+=count[num].interest-por;
    use();
}
void undo()
{    FILE*fp;
    num++;
    beauty();
    printf("请输入您的姓名,卡号,密码:");
    beauty();
    fscanf(stdin,"%s%s%s",count[num].name,count[num].card,count[num].secu);//将信息从键盘写入
    beauty();
    if((fp=fopen("f:\\程序\\课程设计\\my_acount.txt","r"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    for(int i=0;i<num;i++)
        if(strcmp(count[num].name,count[i].name)==0)
        {    if(count[num].card==count[i].card)
                num=i;
        }
        else
        {    printf("很抱歉,没有查找到您的数据,请您核对后重新输入O(∩_∩)O~~\n");
            undo();
        }
    fclose(fp);
    if((fp=fopen("g:\\程序\\课程设计\\my_acount.txt","w"))==NULL)
        {    printf("cann't open file\n");
            return;
        }
    for(;!feof(fp);num++)
    {    fprintf(fp,"%s    %s    %s    %s    %d    %d    %lf    %d年%d月%d日~%d年%d月%d日",count[num].name,count[num].card,count[num].secu,count[num].type,count[num].data_limit,count[num].capital,count[num].interest,count[num].in_year,count[num].in_month,count[num].in_day,count[num].out_year,count[num].out_month,count[num].out_day);//将信息输出到文件
        fclose(fp);
    }
    printf("您申请的账户已注销!\n");
    inquire();
}
2014-02-03 22:22
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:0 
数据类型不对应
2014-02-04 14:13
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:10 
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 100
struct count_user
{    char name[20];//姓名
    char card[20];//卡号
    char secu[7];//密码
    char type[9];//存款种类
    int data_limit;//存款期限
    double capital;//卡上余额
    double interest;//利息
    int in_year;//存入日期
    int in_month;
    int in_day;
    int out_year;//支取日期
    int out_month;
    int out_day;//共13个数据,整体输入,不可缺少
}count[N];
void input();
void beauty();
void build();
void inquire();
void deposit();
void draw();
void fix_cun();
void fix();
void use();
void date();
void current();
void time_demand();
void install_cun();
void install_qu();
int calculate(int,int,int);
void undo();
int m,n,s,num=0,t;
double Interest1,tax,rate,por_cun,por;
void main()
{   
    input();//输入函数
}
void beauty()//美化函数
{    for(int i=0;i<80;i++)
    {    if(i%80==0)
            putchar('\n');
        putchar('*');
    }
    putchar('\n');
}
   
void input()//输入函数
{   
    beauty();
    printf("您想要办理什么业务?\n开户请按1\n存款请按2\n取款请按3\n销户请按4\n");
    beauty();
    fflush(stdin);
    switch(getchar())
    {    case'1':build();break;//调用开户函数
        case'2':deposit();break;//调用存款函数
        case'3':draw();break;//调用取款函数
        case'4':undo();break;//调用销户函数
        default:printf("Input error!\n");
    }
}
//开户
void build()//开户函数
{    FILE *fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    strcpy(count[num].type,"00000000");
    count[num].data_limit=0;
    count[num].capital=0.0;
    count[num].interest=0.0;
    count[num].in_year=count[num].in_month=count[num].in_day=0;
    count[num].out_year=count[num].out_month=count[num].out_day=0;//共10个数据
    beauty();
    fscanf(stdin,"%s%s%s",count[num].name,count[num].card,count[num].secu);//将信息从键盘写入
    if((fp=fopen("f:\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);
    beauty();
    fclose(fp);
    printf("\n开户已成功,请核对您的信息:\n");
    if((fp=fopen("f:\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);
    fprintf(stdout,"姓名:%s\n卡号:%s\n密码:%s\n",count[num].name,count[num].card,count[num].secu);//输出到屏幕上
    fclose(fp);
    beauty();
    printf("确认请按\t1\n错误请按\t2\n");
    beauty();
    while((getchar())!='\n')
        continue;//getchar调用缓存区的'\n'会导致直接跳过!!!这个问题坑了我好几个晚上%>_<%
    switch(getchar())
    {    case'1':beauty();
                inquire();break;
        case'2':build();break;
        default:beauty();
                printf("Input error!\n");
    }
}

void inquire()//询问函数
{   
    printf("您是否需要办理其他业务?\n继续办理请按\t1\n退出请按\t2\n");
    beauty();
    while((getchar())!='\n')
        continue;
    switch(getchar())
    {    case'1':input();break;
        case'2':beauty();
                printf("感谢您的使用!O(∩_∩)O~~\n");break;
        default:printf("Input error!\n");
    }


}

//存款
void deposit()//存款函数
{    FILE*fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    beauty();
    scanf("%s%s%s",count[num].name,count[num].card,count[num].secu);//共3个数据
    beauty();
    printf("请输入您的存款日期:\n");
    beauty();
    scanf("%d%d%d",&count[num].in_year,&count[num].in_month,&count[num].in_day);//共3个数据
    beauty();
    printf("请选择您的存款类别:\n定期存款请按\t1\n活期存款请按\t2\n定活两便请按\t3\n零存整取请按\t4\n\n");
    beauty();
    fflush(stdin);
    switch(getchar())
    {    case'1':strcpy(count[num].type,"定期存款");
                beauty();
                fix_cun();
                break;
        case'2':strcpy(count[num].type,"活期存款");
                beauty();
                printf("请输入您的存款金额:\n");
                beauty();
                scanf("%lf",&por_cun);//1个数据
                beauty();
                count[num].data_limit=0;
                break;
        case'3':strcpy(count[num].type,"定活两便");
                beauty();
                printf("请输入您的存款金额:\n");
                beauty();
                scanf("%lf",&por_cun);//1个数据
                count[num].data_limit=0;
                break;
        case'4':strcpy(count[num].type,"零存整取");
                install_cun();
                break;
        default:printf("Input error!");
    }//1个数据
    count[num].interest=0.0;
    count[num].out_year=count[num].out_month=count[num].out_day=0;//共5个数据
    count[num].capital+=(double)por_cun;
    beauty();
    printf("\n存款已成功,请核对您的信息:\n");
    if((fp=fopen("f:\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);
    fclose(fp);//将信息输出到文件
    beauty();
    if((fp=fopen("f:\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n卡上余额:\t%lf\n",
        count[num].name,count[num].card,count[num].secu,count[num].type,count[num].capital);//输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);//日期必须单独输出,否则年月日会向后推移,不能正确对应
    fclose(fp);
    beauty();
    inquire();
}
void fix_cun()
{    printf("请输入您的存款金额:\n");
    beauty();
    scanf("%d",&por_cun);//1个数据
    beauty();
    puts("请输入您预计存款的期限(请仔细阅读下面的提示):");
    puts("【提示:");
    puts("\t系统以月读取,请输入整数,期限应大于3个月");
    puts("  利率:");
    puts("\t三个月:1.71%");
    puts("\t六个月:2.07%");
    puts("\t一年:  2.25%");
    puts("\t二年:  2.70%");
    puts("\t三年:  3.24%");
    puts("\t五年:  3.60%");
    puts("  定期存款提前支取按活期利率计息】");
    beauty();
    scanf("%d",&count[num].data_limit);
    if(count[num].data_limit==3||count[num].data_limit==6)
    {    beauty();
        printf("您预计存款\t%d个月O(∩_∩)O~~\n",count[num].data_limit);//将信息输出到屏幕
        beauty();
        fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
        beauty();
    }
    if(count[num].data_limit%12==0)
    {    n=count[num].data_limit/12;
        if(n>=1&&n<5)
        {    beauty();
            fprintf(stdout,"您预计存款\t%d年O(∩_∩)O~~\n",n);//将信息输出到屏幕
            beauty();
            fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
            beauty();
        }
        else
        {    beauty();
            fprintf(stdout,"您预计存款\t5年及以上O(∩_∩)O~~\n",count[num].data_limit);//将信息输出到屏幕
            beauty();
            fprintf(stdout,"确认请按\t1\n重新输入请按\t2\n退出请按\t3\n");//将信息输出到屏幕
            beauty();
        }
    }//1个数据
        while((getchar())!='\n')
            continue;
        switch(getchar())
        {    case'1':break;
            case'2':beauty();
                    fix_cun();break;
            case'3':beauty();
                    printf("感谢您的使用!O(∩_∩)O~~\n");break;
            default:beauty();
                    printf("Input error!");break;
        }
}
void draw()//取款函数
{    FILE*fp;
    beauty();
    printf("请输入您的姓名,卡号,密码:\n");
    beauty();
    scanf("%s%s%s",count[num].name,count[num].card,count[num].secu);//3个数据
    beauty();
    if((fp=fopen("f:\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    /*for(int i=0;i<num&&count[num].card!=count[i].card;i++);
        if(i==num)
        {    printf("很抱歉,没有查找到您的数据,请您核对后重新输入O(∩_∩)O~~\n");
            draw();
        }
    count[num]=count[i];
    */
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n卡上余额:\t%lf\n",
        count[num].name,count[num].card,count[num].secu,count[num].type,count[num].capital);
    //输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);
    //日期必须单独输出,否则年月日会向后推移,不能正确对应
    fclose(fp);//8个数据
    beauty();
    puts("请输入今天的日期(年 月 日):");
    beauty();
    scanf("%d%d%d",&count[num].out_year,&count[num].out_month,&count[num].out_day);//3个数据
    t=calculate(count[num].out_year,count[num].out_month,count[num].out_day);//计算天数
    beauty();
    puts("请输入您取款的金额:");
//    printf("调试信息:%lf  %lf\n",Interest1,count[num].capital);
    beauty();
    scanf("%lf",&por);
    if(strcmp(count[num].type,"定期存款")==0)
        fix();
    if(strcmp(count[num].type,"活期存款")==0)
        current();
    if(strcmp(count[num].type,"定活两便")==0)
        time_demand();
    if(strcmp(count[num].type,"零存整取")==0)
        install_qu();
}
int calculate(int y_out,int m_out,int d_out)
{    int t1=0,t2=0,t3=0,y,d1,d2,d3,d=0;
    for(y=count[num].in_year;y<y_out;y++)//存取年份不同
    {    if(y%4==0&&y%100!=0||y%400==0)
            d1=366;
        else
            d1=365;
        d+=d1;
    }
    for(int m1=1;m1<m_out;m1++)//计算取款日期是当年的第几天
    {    if(m1==2)
        {    if(y_out%4==0&&y_out%100!=0||y_out%400==0)
                d2=29;
            else
                d2=28;
        }
        else
        {    if(m_out==4||m_out==6||m_out==9||m_out==11)
                d2=30;
            else
                d2=31;
        }
        t1+=d2;
    }
    for(int m2=1;m2<count[num].in_month;m2++)//计算存款日期是当年的第几天
    {    if(m2==2)
        {    if(count[num].in_year%4==0&&count[num].in_year%100!=0||count[num].in_day%400==0)
                d3=29;
            else
                d3=28;
        }
        else
        {    if(m2==4||m2==6||m2==9||m2==11)
                d3=30;
            else
                d3=31;
        }
        t2+=d3;
    }
    return(d-t2+1+t1+d_out);
}
void fix()//定期函数(每月按30天计算,满一年按365天计算)
{    if(t>=count[num].data_limit*30)
    {    if(count[num].data_limit==3)
        {    puts("您的存款期限为3个月,利率为1.71%");//用printf无法输出%
            Interest1=count[num].capital*0.0171;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(count[num].data_limit==6)
        {    puts("您的存款期限为6个月,利率为2.07%");
            Interest1=count[num].capital*0.0207;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n==1)
        {    puts("您的存款期限为1年,利率为2.25%");
            Interest1=count[num].capital*0.0225;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n==2)
        {    puts("您的存款期限为2年,利率为2.70%");
            Interest1=count[num].capital*0.0207;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }   
        if(n==3)
        {    puts("您的存款期限为3年,利率为3.24%");
            Interest1=count[num].capital*0.0324;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
        if(n>=5)
        {    puts("您的存款期限为5年及以上,利率为3.60%");
            Interest1=count[num].capital*0.0360;//应得利息
            tax=Interest1*0.2;//所得税
            count[num].interest=Interest1-tax;//实得利息
        }
    }
    else
    {    puts("您的存款期限未满,利率按活期计算为0.72%");
        Interest1=count[num].capital*0.0072*t/365;//应得利息
        tax=Interest1*0.2;//所得税
        count[num].interest=Interest1-tax;//实得利息
    }
    count[num].capital=count[num].capital+count[num].interest-por;
    use();
}
void use()
{    FILE*fp;
    if((fp=fopen("f:\\my_acount.txt","wb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fwrite(&count[num],sizeof(struct count_user),1,fp);//将信息输出到文件
    fclose(fp);
    beauty();
    if((fp=fopen("f:\\my_acount.txt","rb"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    fread(&count[num],sizeof(struct count_user),1,fp);//将信息从文件输出
    fprintf(stdout,"姓名:\t\t%s\n卡号:\t\t%s\n密码:\t\t%s\n存款类别:\t%s\n",count[num].name,count[num].card,count[num].secu,count[num].type);//输出到屏幕上
    fprintf(stdout,"存款日期:\t%d年%d月%d日\n",count[num].in_year,count[num].in_month,count[num].in_day);//日期必须单独输出,否则年月日会向后推移,不能正确对应
    fprintf(stdout,"取款日期:\t%d年%d月%d日\n",count[num].out_year,count[num].out_month,count[num].out_day);
    printf("您应得利息为:\t%lf\n取款金额为:\t%lf\n卡上余额为:\t%lf\n",count[num].interest,por,count[num].capital);
    fclose(fp);
    beauty();
    inquire();
}
void current()//活期函数
{    count[num].data_limit=t/30;
    Interest1=count[num].capital*0.0072*t/365;//应得利息
//    printf("%lf  %lf",Interest1,count[num].capital);
    tax=Interest1*0.2;//所得税
    count[num].interest=Interest1-tax;//实得利息
    count[num].capital=count[num].capital-por+count[num].interest;
//    printf(" 利息 %lf   余额 %lf",count[num].interest,count[num].capital);
    use();
}
void time_demand()//定活两便函数
{    double rate;
    if(t<90)
        rate=0.0072;
    else
        if(t>=90&&t<180)
            rate=0.0171*0.6;
        else
            if(t>=180&&t<365)
                rate=0.0207*0.6;
            else
                if(t>=365)
                    rate=0.0225*0.6;
    Interest1=count[num].capital*t*rate/365;
    tax=Interest1*0.2;
    count[num].interest=Interest1-tax;
    count[num].capital+=count[num].interest-por;
    use();
}
void install_cun()//零存整取存款函数
{    int m,x,year,month,day;
    beauty();
    puts("请输入您的每月存款金额:");
    beauty();
    scanf("%d",&m);
    beauty();
    puts("请输入您预计存款的期限:");
    puts("【提示:");
    puts("\t系统以年读取,请输入整数,期限应不小于1年");
    puts("  利率:");
    puts("\t一年:    1.71%");
    puts("\t三年:    2.07%");
    puts("\t五年:    2.25%");
    puts("  存款开户金额由储户自定,每月存入一次,中途如有漏存,可于次月补存,但次月未补存者则视同违约,到期支取时对违约之前的本金部分按实存金额和实际存期计算利息;违约之后存入的本金部分,按实际存期和活期利率计算利息。】");
    puts("    利息和=(0.5+6)×12×存期年数×年利率×月存金额");
    beauty();
    scanf("%d",&x);
    count[num].data_limit=12*x;
    puts("请输入本次存款日期:");
    scanf("%d年%d月%d日",&year,&month,&day);
    t=calculate(year,month,day);
    if(t<=30)
        count[num].capital+=m;
    if(t>30&&t<=60)
        count[num].capital+=2*m;
    if(t>60)
        puts("您已超过存款期限,本次储蓄违规,不予受理!");
}
void install_qu()//零存整取取款函数
{    int n=count[num].data_limit/12,k,h;
    double interest2;
    if(t<count[num].data_limit*30)//限期内取款按活期计息
    {    k=t/30;//存期满月数
        for(int i=0;i<=k;i++)
        {    Interest1=count[num].capital*0.0072/12;
            tax=Interest1*0.2;
            count[num].interest=Interest1-tax;
        }
    }
    else //超限期取款期限内按约定计息,超限后按活期计息
    {    switch(n)
        {    case 1:rate=0.0171;break;
            case 3:rate=0.0207;break;
            case 5:rate=0.0225;break;
        }
        h=t/30-count[num].data_limit;//超限月数
        Interest1=(0.5+6)*12*n*rate*m;//零存整取利率计算公式:利息和=(0.5+6)×12×存期年数×年利率×月存金额
        interest2=count[num].capital*0.0072/12*h;
        tax=(Interest1+interest2)*0.2;
        count[num].interest=Interest1+interest2-tax;
    }
    count[num].capital+=count[num].interest-por;
    use();
}
void undo()
{    FILE*fp;
    num++;
    beauty();
    printf("请输入您的姓名,卡号,密码:");
    beauty();
    fscanf(stdin,"%s%s%s",count[num].name,count[num].card,count[num].secu);//将信息从键盘写入
    beauty();
    if((fp=fopen("f:\\程序\\课程设计\\my_acount.txt","r"))==NULL)
    {    printf("cann't open file\n");
        return;
    }
    for(int i=0;i<num;i++)
        if(strcmp(count[num].name,count[i].name)==0)
        {    if(count[num].card==count[i].card)
                num=i;
        }
        else
        {    printf("很抱歉,没有查找到您的数据,请您核对后重新输入O(∩_∩)O~~\n");
            undo();
        }
    fclose(fp);
    if((fp=fopen("f:\\my_acount.txt","w"))==NULL)
        {    printf("cann't open file\n");
            return;
        }
    for(;!feof(fp);num++)
    {    fprintf(fp,"%s    %s    %s    %s    %d    %d    %lf    %d年%d月%d日~%d年%d月%d日",
    count[num].name,count[num].card,count[num].secu,count[num].type,
    count[num].data_limit,count[num].capital,count[num].interest,count[num].in_year,count[num].in_month,count[num].in_day,
    count[num].out_year,count[num].out_month,count[num].out_day);//将信息输出到文件
        fclose(fp);
    }
    printf("您申请的账户已注销!\n");
    inquire();
}
2014-02-04 14:24
逆风而前
Rank: 7Rank: 7Rank: 7
来 自:福建
等 级:黑侠
威 望:7
帖 子:193
专家分:567
注 册:2013-2-14
收藏
得分:0 
//    printf("调试信息:%lf  %lf\n",Interest1,count[num].capital);
    beauty();
    scanf("%lf",&por);

 fprintf(stdout,"取款日期:\t%d年%d月%d日\n",count[num].out_year,count[num].out_month,count[num].out_day);
    printf("您应得利息为:\t%lf\n取款金额为:\t%lf\n卡上余额为:\t%lf\n",count[num].interest,por,count[num].capital);
只是将几处的输出的数据类型更改了一下。其他地方还有修改。
你还要将各处的文件的读取路径修改回来,才不会出错。
费了好长的时间才找出来。

[ 本帖最后由 逆风而前 于 2014-2-4 14:33 编辑 ]
2014-02-04 14:28
tianwen0921
Rank: 2
等 级:论坛游民
帖 子:18
专家分:44
注 册:2014-1-27
收藏
得分:0 
回复 3楼 逆风而前
谢了,这么长的代码辛苦了,先把分给你哈,我马上去调调看,有问题再给你留言
2014-02-05 10:52
快速回复:还是那个问题,输出时0
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032652 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved