程序的运行大致如上图一样。
接下来代码:
#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;
}