水果超市系统C语言

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

char fruit[5][10]={"苹果","桔子","香蕉","柚子","芒果"};
float Price[5]={4.5,2.3,5.4,1.8,4};
float M[10000]={0};

typedef struct _CARD
{
	int no;//卡号
	float money[2];//购物前 购物后
}CARD;


typedef struct _RECORD
{
	int no;//序号
	int time[5];//时间
	int buy_count;//购买数量
	int fruit_style[5];//水果种类
	float price[5];//价格
	float num[5];//重量
	int pay_style;//付款方式
	float money[2];//付款  找零
	CARD card;//使用会员卡
}RECORD;

typedef struct _List
{
	RECORD rec;
	struct _List* next;
}List;

RECORD rec[100];
int NUM=0;
int COUNT=1000;

void Input_Record()
{
	int i,j=-1;
	char str[20];
	float sum=0;
	time_t tmpcal_ptr;  
    struct tm *tmp_ptr = NULL;  
	system("cls");
	rec[NUM].buy_count=0;
	do
	{
		rec[NUM].buy_count++;
		j++;
		printf("请选择购买水果种类:\n");
		for(i=0;i<5;i++)
		{
			printf("%d:%s 单价:%.2f元/斤\n",i+1,fruit[i],Price[i]);
		}
		fflush(stdin);
		scanf("%d",&rec[NUM].fruit_style[j]);
		while(rec[NUM].fruit_style[j]<1||rec[NUM].fruit_style[j]>5)
		{
			printf("没有该选项\n");
			fflush(stdin);
			scanf("%d",&rec[NUM].fruit_style[j]);
		}
		rec[NUM].price[j]=Price[rec[NUM].fruit_style[j]-1];//水果单价
		printf("请选择购买重量:\n");
		fflush(stdin);
		scanf("%f",&rec[NUM].num[j]);

		printf("是否继续购买(Y/N)?:\n");
		fflush(stdin);
		scanf("%s",str);
		while(strcmp(str,"Y")&&strcmp(str,"y")&&strcmp(str,"N")&&strcmp(str,"n"))
		{
			printf("输入错误,重新输入(Y/N)?:\n");
			fflush(stdin);
			scanf("%s",str);
		}
	}while(!strcmp(str,"Y")||!strcmp(str,"y"));

	for(i=0;i<rec[NUM].buy_count;i++)
	{
		sum+=rec[NUM].num[i]*rec[NUM].price[i];
	}

	printf("需要付款%.2f\n",sum);
	printf("请选择付款方式\n");
	printf("1:现金\n");
	printf("2:会员卡\n");
	fflush(stdin);
	scanf("%d",&rec[NUM].pay_style);
	while(rec[NUM].pay_style<1||rec[NUM].pay_style>2)
	{
		printf("没有该选项\n");
		fflush(stdin);
		scanf("%d",&rec[NUM].pay_style);
	}
	
	if(sum>1000&&rec[NUM].pay_style==2)
	{
		printf("单次会员卡不能消费超过1000元!请现金付款!\n");
		rec[NUM].pay_style=1;
	}

S0:
	switch(rec[NUM].pay_style)
	{
	case 1:
		printf("请输入付款总额:\n");
		fflush(stdin);
		scanf("%f",&rec[NUM].money[0]);
		while(rec[NUM].money[0]<sum)
		{
			printf("付款金额不足!请重新付款!\n");
			fflush(stdin);
			scanf("%f",&rec[NUM].money[0]);
		}
		rec[NUM].money[1]=rec[NUM].money[0]-sum;
		printf("找零:%.2f\n",rec[NUM].money[1]);
		break;
	case 2:
		printf("请输入会员卡号:\n");
		fflush(stdin);
		scanf("%d",&rec[NUM].card.no);
		if(M[rec[NUM].card.no]+10000-sum<0)
		{
			printf("会员卡余额不足!请现金付款!\n");
			rec[NUM].pay_style=1;
			goto S0;
		}
		rec[NUM].card.money[0]=M[rec[NUM].card.no]+10000;
		M[rec[NUM].card.no]-=sum;
		rec[NUM].card.money[1]=M[rec[NUM].card.no]+10000;
		break;
	}

	time(&tmpcal_ptr);
	tmp_ptr = gmtime(&tmpcal_ptr); 
	rec[NUM].time[0]=tmp_ptr->tm_hour+8;
	rec[NUM].time[1]=tmp_ptr->tm_min;
	rec[NUM].time[2]=tmp_ptr->tm_year+1900;
	rec[NUM].time[3]=tmp_ptr->tm_mon+1;
	rec[NUM].time[4]=tmp_ptr->tm_yday-333;
	rec[NUM].no=COUNT;
	COUNT++;
	NUM++;
	printf("记录成功!\n");
	system("pause");
}	


void Modify_Record()
{
	int n,i,j=-1,k;
	char str[20];
	float sum=0;
	time_t tmpcal_ptr;  
    struct tm *tmp_ptr = NULL;  
	system("cls");
	printf("请输入要修改的记录序号\n");
	scanf("%d",&n);
	for(i=0;i<NUM;i++)
	{
		if(rec[i].no==n)
		{
			break;
		}
	}
	if(i==NUM)
	{
		printf("无该序号信息!\n");
		system("pause");
		return ;
	}
	rec[i].buy_count=0;
	do
	{
		rec[i].buy_count++;
		j++;
		printf("请选择购买水果种类:\n");
		for(k=0;k<5;k++)
		{
			printf("%d:%s 单价:%.2f元/斤\n",k+1,fruit[k],Price[k]);
		}
		fflush(stdin);
		scanf("%d",&rec[i].fruit_style[j]);
		while(rec[i].fruit_style[j]<1||rec[i].fruit_style[j]>5)
		{
			printf("没有该选项\n");
			fflush(stdin);
			scanf("%d",&rec[i].fruit_style[j]);
		}

		rec[i].price[j]=Price[rec[i].fruit_style[j]-1];//水果单价
		
		printf("请选择购买重量:\n");
		fflush(stdin);
		scanf("%f",&rec[i].num[j]);
		printf("是否继续购买(Y/N)?:\n");
		fflush(stdin);
		scanf("%s",str);
		while(strcmp(str,"Y")&&strcmp(str,"y")&&strcmp(str,"N")&&strcmp(str,"n"))
		{
			printf("输入错误,重新输入(Y/N)?:\n");
			fflush(stdin);
			scanf("%s",str);
		}
	}while(!strcmp(str,"Y")||!strcmp(str,"y"));

	for(j=0;j<rec[i].buy_count;j++)
	{
		sum+=rec[i].num[j]*rec[i].price[j];
	}



	printf("需要付款%.2f\n",sum);
	printf("请选择付款方式\n");
	printf("1:现金\n");
	printf("2:会员卡\n");
	fflush(stdin);
	scanf("%d",&rec[i].pay_style);
	while(rec[i].pay_style<1||rec[i].pay_style>2)
	{
		printf("没有该选项\n");
		fflush(stdin);
		scanf("%d",&rec[i].pay_style);
	}
	
	if(sum>1000&&rec[i].pay_style==2)
	{
		printf("单次会员卡不能消费超过1000元!请现金付款!\n");
		rec[i].pay_style=1;
	}
S1:
	switch(rec[i].pay_style)
	{
	case 1:
		printf("请输入付款总额:\n");
		fflush(stdin);
		scanf("%f",&rec[i].money[0]);
		while(rec[i].money[0]<sum)
		{
			printf("付款金额不足!请重新付款!\n");
			fflush(stdin);
			scanf("%f",&rec[i].money[0]);
		}
		rec[i].money[1]=rec[i].money[0]-sum;
		printf("找零:%.2f\n",rec[i].money[1]);
		break;
	case 2:
		printf("请输入会员卡号:\n");
		fflush(stdin);
		scanf("%d",&rec[i].card.no);
		if(M[rec[i].card.no]+10000-sum<0)
		{
			printf("会员卡余额不足!请现金付款!\n");
			rec[i].pay_style=1;
			goto S1;
		}
		rec[i].card.money[0]=M[rec[i].card.no]+10000;
		M[rec[i].card.no]-=sum;
		rec[i].card.money[1]=M[rec[i].card.no]+10000;
		break;
	}

	time(&tmpcal_ptr);
	tmp_ptr = gmtime(&tmpcal_ptr); 
	rec[i].time[0]=tmp_ptr->tm_hour+8;
	rec[i].time[1]=tmp_ptr->tm_min;
	rec[NUM].time[2]=tmp_ptr->tm_year+1900;
	rec[NUM].time[3]=tmp_ptr->tm_mon+1;
	rec[NUM].time[4]=tmp_ptr->tm_yday-333;
	system("pause");
}


void Del_Record()
{
	int n,i,j;
	system("cls");
	printf("请输入要删除的记录序号\n");
	scanf("%d",&n);
	for(i=0;i<NUM;i++)
	{
		if(rec[i].no==n)
		{
			break;
		}
	}
	if(i==NUM)
	{
		printf("无该序号信息!\n");
		system("pause");
		return ;
	}

	for(j=i;j<NUM;j++)
	{
		rec[j]=rec[j+1];
	}
	printf("删除成功!\n");
	system("pause");
}

void Sreach_Record()
{
	int i,style,j;
	system("cls");
	printf("请选择购买水果种类:\n");
	for(i=0;i<5;i++)
	{
		printf("%d:%s\n",i+1,fruit[i]);
	}
	fflush(stdin);
	scanf("%d",&style);
	while(style<1||style>5)
	{
		printf("没有该选项\n");
		fflush(stdin);
		scanf("%d",&style);
	}

	
	printf("%-6s%-20s%-6s%-6s%-6s%-12s%-12s%-12s\n","序号","时间","种类","单价","重量","支付方式","支付/刷前","找零/刷后");
	for(i=0;i<NUM;i++)
	{
		for(j=0;j<rec[i].buy_count;j++)
		{
			if(style==rec[i].fruit_style[j])
			{
				printf("%-04d  %4d/%2d/%2d  %02d:%-02d   %-6s",rec[i].no,rec[i].time[2],rec[i].time[3],rec[i].time[4],rec[i].time[0],rec[i].time[1],fruit[rec[i].fruit_style[j]-1]);
				printf("%-4.2f %-4.2f",rec[i].price[j],rec[i].num[j]);
				if(rec[i].pay_style==1)
				{
					printf("%-12s","   现金");
					printf("%10.2f%10.2f\n",rec[i].money[0],rec[i].money[1]);
				}
				else
				{
					printf("%-12s","   刷卡");
					printf("%10.2f%10.2f\n",rec[i].card.money[0],rec[i].card.money[1]);
				}
				break;
			}
		}
	}


	system("pause");
}

int menu()
{
	char chioce[20];
	int flag=1;
	system("cls");
	printf("1:增加购物记录\n");
	printf("2:修改购物记录\n");
	printf("3:删除购物记录\n");
	printf("4:查询购物记录\n");
	printf("5:统计购物记录\n");
	printf("6:会员卡信息\n");
	printf("7:大额购物信息\n");
	printf("8:时间范围内的购物信息\n");
	printf("0:退出\n");
	scanf("%s",chioce);
	while(flag)
	{
		if(strlen(chioce)!=1)
		{
			printf("输入错误,请重新输入!\n");
			scanf("%s",chioce);
			continue;
		}
		switch(chioce[0])
		{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			flag=0;
			break;
		default:
			printf("输入错误,请重新输入!\n");
			scanf("%s",chioce);
			break;
		}
	}
	return chioce[0]-'0';
}

void sort()
{
	int i,j;
	RECORD temp;
	for(i=0;i<NUM;i++)
	{
		for(j=i+1;j<NUM;j++)
		{
			if(rec[i].no>rec[j].no)
			{
				temp=rec[i];
				rec[i]=rec[j];
				rec[j]=temp;
			}
		}
	}
}

void Total_Record()
{
	int i,style,j;
	float sum[5]={0};
	system("cls");
	printf("%-6s%-20s%-6s%-6s%-6s%-12s%-12s%-12s\n","序号","时间","种类","单价","重量","支付方式","支付/刷前","找零/刷后");
	for(i=0;i<NUM;i++)
	{
		printf("%-04d  %4d/%2d/%2d  %02d:%-02d   ",rec[i].no,rec[i].time[2],rec[i].time[3],rec[i].time[4],rec[i].time[0],rec[i].time[1]);
		printf("%-6s%-4.2f %-4.2f",fruit[rec[i].fruit_style[0]-1],rec[i].price[0],rec[i].num[0]);
		if(rec[i].pay_style==1)
		{
			printf("%-12s","   现金");
			printf("%10.2f%10.2f\n",rec[i].money[0],rec[i].money[1]);
			sum[rec[i].fruit_style[0]-1]+=rec[i].price[0]*rec[i].num[0];
		}
		else
		{
			printf("%-12s","   刷卡");
			printf("%10.2f%10.2f\n",rec[i].card.money[0],rec[i].card.money[1]);
			sum[rec[i].fruit_style[0]-1]+=rec[i].price[0]*rec[i].num[0];
		}
		for(j=1;j<rec[i].buy_count;j++)
		{
			printf("%-26s","  ");
			printf("%-6s%-4.2f %-4.2f\n",fruit[rec[i].fruit_style[j]-1],rec[i].price[j],rec[i].num[j]);
			sum[rec[i].fruit_style[j]-1]+=rec[i].price[j]*rec[i].num[j];
		}
		printf("\n");
	}
	
	printf("\n\n");
	for(i=0;i<5;i++)
	{
		printf("%s总销额:%.2f元\n",fruit[i],sum[i]);
	}

	system("pause");
}

void Sreach_Card()
{
	int i,num,j;
	system("cls");
	printf("请输入查找的会员卡号:\n");
	fflush(stdin);
	scanf("%d",&num);
	
	printf("%-6s%-20s%-6s%-6s%-6s%-12s%-12s%-12s\n","序号","时间","种类","单价","重量","支付方式","支付/刷前","找零/刷后");
	for(i=0;i<5;i++)
	{
		if(num==rec[i].card.no&&rec[i].pay_style==2)
		{
			printf("%-04d  %4d/%2d/%2d  %02d:%-02d   ",rec[i].no,rec[i].time[2],rec[i].time[3],rec[i].time[4],rec[i].time[0],rec[i].time[1]);
			printf("%-6s%-4.2f %-4.2f%",fruit[rec[i].fruit_style[0]-1],rec[i].price[0],rec[i].num[0]);
			printf("%-12s","   刷卡");
			printf("%10.2f%10.2f\n",rec[i].card.money[0],rec[i].card.money[1]);

			for(j=1;j<rec[i].buy_count;j++)
			{
				printf("%-26s","  ");
				printf("%-6s%-4.2f %-4.2f\n",fruit[rec[i].fruit_style[j]-1],rec[i].price[j],rec[i].num[j]);
			}
			printf("\n");
		}
	}
	printf("会员卡当前余额:%.2f\n",M[num]+10000);
	system("pause");
}


void Print_List(List* node)
{
	int i;
	List *p=node;
	if(node==NULL)
	{
		printf("无符合信息\n");
		system("pause");
		return ;
	}
	printf("%-6s%-20s%-6s%-6s%-6s%-12s%-12s%-12s\n","序号","时间","种类","单价","重量","支付方式","支付/刷前","找零/刷后");

	while(p)
	{
		printf("%-04d  %4d/%2d/%2d  %02d:%-02d   ",p->rec.no,p->rec.time[2],p->rec.time[3],p->rec.time[4],p->rec.time[0],p->rec.time[1]);
		printf("%-6s%-4.2f %-4.2f%",fruit[p->rec.fruit_style[0]-1],p->rec.price[0],p->rec.num[0]);
		if(p->rec.pay_style==1)
		{
			printf("%-12s","   现金");
			printf("%10.2f%10.2f\n",p->rec.money[0],p->rec.money[1]);
		}
		else
		{
			printf("%-12s","   刷卡");
			printf("%10.2f%10.2f\n",p->rec.card.money[0],p->rec.card.money[1]);
		}
		for(i=1;i<p->rec.buy_count;i++)
		{
			printf("%-26s","  ");
			printf("%-6s%-4.2f %-4.2f\n",fruit[p->rec.fruit_style[i]-1],p->rec.price[i],p->rec.num[i]);
		}
		printf("\n");
		p=p->next;
	}
	system("pause");
}


List* Add_List(List* node,RECORD temp)
{
	List* p=node;
	if(node==NULL)
	{
		node=(List*)malloc(sizeof(List));
		node->next=NULL;
		node->rec=temp;
		return node;
	}
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->next=(List*)malloc(sizeof(List));
	p=p->next;
	p->next=NULL;
	p->rec=temp;
	return node;
}

void Del_List(List* node)
{
	List *p=node;
	List *q=node;
	if(node==NULL)
		return ;

	while(p->next)
	{
		q=p->next;
		free(p);
		p=q;
	}
	free(p);
}



void Sreach_Between()
{
	int i;
	float min,max;
	List* node=NULL;
	system("cls");
	printf("请输入最低钱数:\n");
	fflush(stdin);
	scanf("%f",&min);
	printf("请输入最大钱数:\n");
	fflush(stdin);
	scanf("%f",&max);

	
	
	for(i=0;i<NUM;i++)
	{
		if(rec[i].pay_style==1)
		{
			if(min<rec[i].money[0]-rec[i].money[1]&&max>rec[i].money[0]-rec[i].money[1])
			{
				node=Add_List(node,rec[i]);
			}
		}
		else
		{
			if(min<rec[i].card.money[0]-rec[i].card.money[1]&&max>rec[i].card.money[0]-rec[i].card.money[1])
			{
				node=Add_List(node,rec[i]);
			}
		}

	}
	Print_List(node);
	Del_List(node);

}

void Sreach_Time()
{
	int i,flag;
	int time[4];
	List* node=NULL;
	system("cls");
	printf("请输入开始时间(xx:xx):\n");
	fflush(stdin);
	scanf("%d:%d",&time[0],&time[1]);
	printf("请输入结束时间(xx:xx):\n");
	fflush(stdin);
	scanf("%d:%d",&time[2],&time[3]);

	printf("请输入付款方式1:现金 2:刷卡 3:全部\n");
	fflush(stdin);
	scanf("%d",&flag);
	for(i=0;i<NUM;i++)
	{
		if(flag==3)
		{
			if(time[0]<=rec[i].time[0]&&time[2]>=rec[i].time[0])
			{
				node=Add_List(node,rec[i]);
			}
		}
		else
		{
			if(time[0]<=rec[i].time[0]&&time[2]>=rec[i].time[0]&&flag==rec[i].pay_style)
			{
				node=Add_List(node,rec[i]);
			}
		}
	}
	Print_List(node);
	Del_List(node);
}


void Save_Info()
{
	FILE* fp;
	fp=fopen("rec_info.dat","w");
	if(fp==NULL)
	{
		return ;
	}
	for(int i=0;i<NUM;i++)
	{
		fwrite(&rec[i],sizeof(RECORD),1,fp);
	}
	fclose(fp);
}

void Load_Info()
{
	FILE* fp;
	fp=fopen("rec_info.dat","r");
	if(fp==NULL)
	{
		return ;
	}
	while(fread(&rec[NUM],sizeof(RECORD),1,fp))
	{
		NUM++;
	}
	fclose(fp);
}

void Save_M()
{
	FILE* fp;
	fp=fopen("M_info.dat","w");
	if(fp==NULL)
	{
		return ;
	}
	for(int i=0;i<10000;i++)
	{
		fwrite(&M[i],sizeof(float),1,fp);
	}
	fclose(fp);
}

void Load_M()
{
	FILE* fp;
	int i=0;
	fp=fopen("M_info.dat","r");
	if(fp==NULL)
	{
		return ;
	}
	while(i<10000)
	{
		fread(&M[i++],sizeof(float),1,fp);
	}
	fclose(fp);
}

int main()
{
	int chioce;
	Load_Info();
	Load_M();
	COUNT=NUM+1000;
	do
	{
		chioce=menu();
		switch(chioce)
		{
		case 1:
			Input_Record();
			Save_Info();
			Save_M();
			break;
		case 2:
			Modify_Record();
			Save_Info();
			Save_M();
			break;
		case 3:
			Del_Record();
			Save_Info();
			Save_M();
			break;
		case 4:
			sort();
			Sreach_Record();
			break;
		case 5:
			sort();
			Total_Record();
			break;
		case 6:
			Sreach_Card();
			break;
		case 7:
			Sreach_Between();
			break;
		case 8:
			Sreach_Time();
			break;
		}
	}while(chioce!=0);
	Save_Info();
	Save_M();
	return 0;
}

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值