C语言自制找零钱程序



程序的运行大致如上图一样。

接下来代码:

#include<stdio.h>
#define SIZE 1000//事先定义结构体数组的大小
int numberOne,numberTwo,i,j,k=0,numberThree;
char num,num1,num2,num3;
struct note
{
    double sum;
    double money[100];
    double customerMoney;
    double balance;
    int numberK;
} s[SIZE],s1[SIZE];

calcultor()//用来算应该找多少的零钱;
{
    FILE *fp;
    scanf("%*c",&num3);
    for(i=0;; i++)
    {
        k++;
        s[i].sum=0;
        printf("请输入你消费的金钱:\n");
        for(j=0;; j++)
        {
            //因为不知道顾客买几次所以用字符输入,以换行为程序截止
            scanf("%c",&num);
            if(num=='\n') break;
            if(num==' ')
            {
                continue;
            }
            else
            {
                s[i].money[j]=num-'0';//将顾客每次输入的金额存入数组中
                s[i].sum=s[i].sum+s[i].money[j];//最后在计算数组的总和
            }

        }
        printf("请输入顾客给的金钱:\n");
        //将顾客给的钱及消费的总额存入到结构体中,以及最后找的钱
        scanf("%lf",&s[i].customerMoney);
        printf("你消费的总金额为:%0.2lf\n",s[i].sum);
        s[i].balance=s[i].customerMoney-s[i].sum;
        printf("找您:%0.2lf\n",s[i].balance);
        scanf("%*c",&num1);
        printf("请输入数字:\n");

        printf("1:继续    2:结束\n");
        scanf("%d",&numberOne);
        if(numberOne==2)
        {
            s[i].numberK=k;
            break;
        }

        else
        {
            scanf("%*c",&num2);

        }
    }
    if((fp=fopen("cost1.txt","a"))==NULL)//将文件指针关联到文件
    {
        printf("cannot open file\n");
        return;
    }
    for(i=0; i<k; i++) //将2个学生的信息输出到文件
        fprintf(fp,"%0.2lf       %0.2lf     %0.2lf\n",
                s[i].customerMoney,s[i].sum,s[i].balance);
    fclose(fp);//关闭文件
}
read()
{
    int n;
    FILE *fp;
    if((fp=fopen("cost1.txt","r"))==NULL)
    {
        printf("cannot open file\n");
        return;
    }

    for(i=0; i<1000; i++) //此时引用个新的结构体将从文件中读取的存入另一个
        fscanf(fp,"%lf%lf%lf",
               &s1[i].customerMoney,&s1[i].sum,&s1[i].balance);

    fclose(fp);//关闭文件
}
inquiry()///查询1级菜单
{
    read();
    int a;
    printf("        请选择数字\n");
    printf("++++++++++++++++++++++++++++\n");
    printf("+    @1:按照消费金额       +\n");
    printf("+                          +\n");
    printf("+    @2:按找顾客给的钱     +\n");
    printf("+                          +\n");
    printf("+    @3:完整消费记录       +\n");
    printf("+                          +\n");
    printf("+    @4:返回主菜单         +\n");
    printf("++++++++++++++++++++++++++++\n");
    scanf("%d",&a);
    if(a==1)
    {
       inquirySum();
    }
     else if(a==2)
    {
        inquiryCustomerMoney();
    }
    else if(a==3)
    {
        Array();
    } else if(a==4)
    {
        main();
    }
}
inquirySum()///按照顾客消费的金额
{
    int a;
    printf("        请选择数字\n");
    printf("============================\n");
    printf("   &1:按照金额的大小        \n");
    printf("                            \n");
    printf("   &2:按照时间的顺序        \n");
    printf("                            \n");
    printf("   &3:返回上一层菜单        \n");
    printf("                            \n");
    printf("   &4:返回主菜单            \n");
    printf("============================\n");
    scanf("%d",&a);
    //printf2();
    if(a==1)
    {
        ArraySum();
        printf1();
        inquirySum();
    }
    else if(a==2)
    {
       ArraySumTime();
       printf1();
       inquirySum();
    }
    else if(a==3)
    {
        printf1();
        inquiry();
    }
    else if(a==4)
    {
        printf1();
        main();
    }

}
inquiryCustomerMoney()///按照顾客给的钱
{
    int a;
    printf("        请选择数字\n");
    printf("============================\n");
    printf("   &1:按照金额的大小        \n");
    printf("                            \n");
    printf("   &2:按照时间的顺序        \n");
    printf("                            \n");
    printf("   &3:返回上一层菜单        \n");
    printf("                            \n");
    printf("   &4:返回主菜单            \n");
    printf("============================\n");
    scanf("%d",&a);
    //printf2();
    if(a==1)
    {
        ArrayCustomerMoney();
        printf1();
        inquiryCustomerMoney();
    }
    else if(a==2)
    {
       ArrayCustomerMoneyTime();
       printf1();
       inquiryCustomerMoney();
    }
    else if(a==3)
    {
        printf1();
        inquiry();
    }
    else if(a==4)
    {
        printf1();
        main();
    }

}
int langding()
{
    int a,b;
    printf("     欢迎来到本程序\n");
    printf("****************************\n");
    printf("*         1:进入           *\n");
    printf("*                          *\n");
    printf("*                          *\n");
    printf("*  2:查询         3:退出   *\n");
    printf("*                          *\n");
    printf("*                          *\n");
    printf("****************************\n");
    printf("请选择数字:\n");
    scanf("%d",&a);
    return a;
}
print()
{
    printf("--------------------------------\n");
}
printf1()
{
    printf("******************************\n");
}
printf2()
{
    printf("_______________________________\n");
}
first1()///初次调用时的东西
{
    int a,b;
    int i=0;
    FILE *fp;
    char str[7],str1[7],str2[7];
    printf("      请设置您的密码\n");
    printf("****************************\n");
    printf("*                          *\n");
    printf("*                          *\n");
    printf("*                          *\n");
    printf("*  1:进入         2:退出   *\n");
    printf("*                          *\n");
    printf("*                          *\n");
    printf("****************************\n");
    printf("请选择数字:\n");
    scanf("%d%*c",&a);
    if(a==1)
    {
        printf("请第一次输入你的密码:");
        gets(str);
        printf("请第二次输入你的密码:");
        gets(str1);
        ///进行两次的密码比较
        if(strcmp(str,str1)==0)
        {

            ///通过这个将密码存入
            if((fp=fopen("code.txt","w"))==NULL)
            {
                printf("can't open file\n");
                exit(0);
            }
            fputs(str,fp);
            fclose(fp);
            main();
        }
        else
        {
            ///密码错误时用for循环来继续输入
            printf("您的密码错误,请重新输入:");
            gets(str1);
            for(i=0;; i++)
            {
                if(strcmp(str,str1)==0)
                {
                    if((fp=fopen("code.txt","w"))==NULL)
                    {
                        printf("can't open file\n");
                        exit(0);
                    }
                    fputs(str,fp);
                    fclose(fp);
                    break;
                }
                else
                {
                    printf("您的密码错误,请重新输入:");
                    gets(str1);
                }
            }
            main();
        }
    }
}
LandingQuery()///查询登录
{
    int a,b,c;
    int i=0;
    FILE *fp;
    char str[7],str1[7],str3[5]= {'q','u','i','t'},t;
    if((fp=fopen("code.txt","r"))==NULL)
    {
        printf("can't open file\n");
        exit(0);
    }
    while(!feof(fp))  //读取文件
    {
        fgets(str1,128,fp);
    }

    printf("      请输入您的密码\n");
    printf("----------------------------\n");
    scanf("%c",&t);
    gets(str);
    if(strcmp(str,str1)==0)
    {
        ///调用所查询的函数,
        read();
        inquiry();
        print();
        main();
    }
    else
    {
        printf("    您的密码错误\n");
        printf("++++++++++++++++++++++++++++\n");
        printf("+                          +\n");
        printf("+   @1:重新输入            +\n");
        printf("+--------------------------+\n");
        printf("+   @2:返回主菜单          +\n");
        printf("+                          +\n");
        printf("++++++++++++++++++++++++++++\n");
        scanf("%d%*c",&a);
        if(a==1)
        {
            printf("请输入密码:");
            gets(str);
            for(i=0;; i++)
            {
                c=0;
                if(strcmp(str,str1)==0)
                {
                    break;
                }
                else
                {
                    printf("您的密码错误,请重新输入:\n");
                    printf("^^^^^^^^^^^^^^^^^^^^^^^^^\n");
                    printf("温馨提示:如果你输入quit,将会回到主菜单\n");
                    gets(str);
                    printf("___________________________\n");
                    ///引用c来判断这个循环啥时结束
                    if(strcmp(str,str3)==0)
                    {
                        c=1;
                        break;
                    }
                }
            }///当密码数对后,停止后直接调用相应的函数
            if(c==1)
            {
                main();
            }
            else
            {
                read();
                inquiry();
                print();
                main();
            }
        }
        else
        {
            ///调用主菜单的函数
            main();
        }
    }

}
int Index()
{
    ///对结构体中的记录进行查询
    int i,j,index;
    index=0;
    read();
    for(i=0;; i++)
    {
        index++;
        if(s1[i].customerMoney==0)
            break;
    }
    return index-1;
}
ArrayCustomerMoney()///顾客给的钱
{
    ///主要用来实现排序
    int i,j,h;
    double t;
    h=Index();
    for(i=0; i<h-1; i++)
    {
        for(j=0; j<h-i-1; j++)
        {
            if(s1[j].customerMoney>s1[j+1].customerMoney)
            {
                t=s1[j].customerMoney;
                s1[j].customerMoney=s1[j+1].customerMoney;
                s1[j+1].customerMoney=t;
            }
        }
    }
    printf("============================\n");
    for(i=0; i<h; i++)
    {
        printf("%d %0.2lf\n",i+1,s1[i].customerMoney);
    }
}
ArraySum()///消费总额
{
    ///主要用来实现排序
    int i,j,h;
    double t;
    h=Index();
    for(i=0; i<h-1; i++)
    {
        for(j=0; j<h-i-1; j++)
        {
            if(s1[j].sum>s1[j+1].sum)
            {
                t=s1[j].sum;
                s1[j].sum=s1[j+1].sum;
                s1[j+1].sum=t;
            }
        }
    }
    printf("============================\n");
    for(i=0; i<h; i++)
    {
        printf("%d %0.2lf\n",i+1,s1[i].sum);
    }
}
Array()///完整的排序
{
    int n;
    printf("       你想要查询的所有记录:\n");
    printf("序号 顾客给的钱 消费总额    找钱 \n");
    for(i=0; i<1000; i++)
    {
        if(s1[i].customerMoney==0.00&&s1[i].sum==0.00) break;
        if(i<=9)
        {
            printf(" %d:  %0.2lf       %0.2lf     %0.2lf\n",i,
                   s1[i].customerMoney,s1[i].sum,s1[i].balance);
        }
        else
        {
            printf("%d:   %0.2lf       %0.2lf     %0.2lf\n",i,
                   s1[i].customerMoney,s1[i].sum,s1[i].balance);
        }
    }
}
ArrayCustomerMoneyTime()///顾客给的钱按时间排序
{
    print();
    int h;
    h=Index();
    for(i=0; i<h; i++)
    {
        printf(" %d:  %0.2lf\n",i+1,s1[i].customerMoney);
    }
}
ArraySumTime()///消费总额按时间排序
{
    print();
    int h;
    h=Index();
    for(i=0; i<h; i++)
    {
        printf(" %d:  %0.2lf\n",i+1,s1[i].sum);
    }
}
int main()
{
    FILE *fp;///定义指针
    ///读取文件将他与原先的密码进行比较;
    char str1[8],str3[8]= {'0','0','0','0','0','0'};
    char ch;
    if((fp=fopen("code.txt","r"))==NULL)
    {
        printf("can't open file\n");
        exit(0);
    }
    while(!feof(fp))  //读取文件
    {
        fgets(str1,128,fp);
    }
    ///进行文件比较;
    if(strcmp(str1,str3)==0)
    {
        first1();
    }
    else
    {
        read();
        numberThree=langding();
        if(numberThree==1)
        {
            calcultor();//调用计算的函数
            print();
            main();//调用自身的函数
        }
        else if(numberThree==2)
        {
            LandingQuery();
        }
    }
    return 0;
}




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值