C語言超市管理系統(c語言)

超市管理系統
1.包括管理員和顧客
2.管理員有登入,錄入商品信息,顯示所有商品信息功能
3.顧客有購物車和結算功能
4.購物車具有顯示商品列表,顯示購物車商品,往購物車添加商品的功能

全部代碼下載鏈接:點擊前往下載鏈接

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

函數

int menu1();//打印主菜單函數 
int menu2();//打印管理員菜單函數 
int menu3();//打印顧客函數 
void CreateGoods();//錄入商品信息函數 
void ShowGoods();//顯示庫存信息函數
void ShopCart();//對購物車進行操作
int ShopCartMenu();//打印購物車菜單
void ShowCart();//顯示購物列表
void add();//在購物車裏添加商品 
void UpdateKu();//更新購物車信息函數 
void  calculate();//計算所購商品價格並修改保存 

建立庫存函數

void CreateGoods()
{//手動建立庫存信息
	FILE *fp;//定義文件指針 
	int i;
	printf("請輸入需要錄入的商品個數:\n");
	scanf("%d",&n);//輸入數量 
	printf("請依次輸入貨物信息:\n");
    printf("--------------------------------------------\n");
	for(i=0;i<n;i++) 
	{//向文件中寫入信息
		printf("第%d個商品:\n",i+1);
		printf("貨號:"); 
		fflush(stdin);//清空輸入流
		gets(goods[i].ID);//輸入貨號
		
		printf("品名:");
		fflush(stdin);//清空輸入流
		gets(goods[i].brand);//輸入品名 
		
		printf("進價: ");
		fflush(stdin);//清空輸入流
		scanf("%lf",&goods[i].inprice);//輸入進價 
		
		printf("售價:");
		fflush(stdin);//清空輸入流
		scanf("%lf",&goods[i].outprice);//輸入售價 
		
		printf("數量:");
		fflush(stdin);//清空輸入流
		scanf("%d",&goods[i].storage);//輸入數量 

		
		printf("保質期:"); 
		fflush(stdin);//清空輸入流
		gets(goods[i].date);//輸入貨號
		printf("\n");
	}
	if((fp=fopen("kucun.txt","w"))==NULL) 
	{//判斷文件是否創建失敗
		printf("創建文件失敗。\n");
		return ;
	}
	//fprintf(fp,"貨號       品名      單價    庫存量   保質期\n");
	for(i=0;i<n;i++)
	{//把貨物信息寫進文件
		fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-11d%-11s\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage,goods[i].date);
	}
	//fwrite(goods,sizeof(struct mar),N,cun);二進制文件輸出 
	fclose(fp);//關閉文件 
	printf("信息導入成功\n");
	return ;
}

在購物車裏添加商品

void add()
{//在購物車裏添加商品 
	FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件 
	struct node *p1,*p,*p2;//定義節點指針 
	int i,n;//n表示商品數量 
	char s[20];//表示貨號或者品名 
	char choice1[20],choice2[20];//選擇項(y繼續,n繼續) 
	
	
	do{
		printf("輸入所需物品的名稱或貨號:\n");
		fflush(stdin);//清空輸入流 
		gets(s);//輸入貨號或者品名 	
		if((fp=fopen("kucun.txt","r"))==NULL)
		{//打開文件 
			printf("打開文件失敗\n");
			continue;
		}
		for(i=0;i<N;i++)
		{//循環N次 
			fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);//從文件中讀取貨物信息 
			
			if((strcmp(goods[i].ID,s)==0||strcmp(goods[i].brand,s)==0)&&goods[i].storage>0)//找輸入對應的商品 
			{
				printf("已找到所需商品:\n");
				printf("--------------------------------------------\n");
				printf("貨號       品名           單價    數量\n");
				printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage,goods[i].date);//輸出所需物品信息 
				
				printf("請輸入所需商品數量: ");
				scanf("%d",&n);//商品數量 
				if(n>goods[i].storage)
				{//判斷是否還可以購買不 
					printf("該商品庫存不足\n");
					break;
				}
				printf("\n是否購買此商品?(Y/N)\n");
				fflush(stdin);//清空輸入流 
				scanf("%s",choice1);//輸入一個選項 
				if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0)
				{//輸入y/Y表示購買此商品 
					p=new node;//生成新節點 
					if(p==NULL)
					{//分配內存失敗 
						printf("內存申請失敗!\n");
						exit(1);//退出 
					}	
					p->number=n;//商品數量 
					p->buy=goods[i];//貨物信息 
					p->next=NULL;
					p1=cart;//把頭結點賦給p1 	
					if(cart==NULL)//頭結點爲空 
					cart=p;//把節點賦值給頭結點 
					else
					{
						while(p1->next!=NULL)
						p1=p1->next;//把鏈表循環到尾部 
						p->next=p1->next; 
						p1->next=p;//把新節點p掛在鏈表尾部 
					}
				}
				else
				printf("輸入錯誤\n");
				break;//找到商品結束循環 
			}
		}	
		if(i==N)//循環完畢還沒找到對應商品 
		printf("未找到所需物品\n");
		fclose(fp);//關閉文件 
	
		UpdateKu();//更新庫存信息函數 
		printf("是否繼續購物?(Y/N)\n");
		fflush(stdin);//清空輸入流 
		scanf("%s",choice2);//輸入選項
		if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0)
		printf("放棄購買,返回菜單!\n");
		
	}while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y繼續循環 
	return ;
} 

計算所購商品價格並修改保存

void calculate()
{//計算所購商品價格並修改保存
	struct node *p;
	p=cart;//把購物車(cart)鏈表賦給p 
	double sum=0;//購買商品應付錢數 
	double pay;//購買商品實付錢數 
	FILE *fp;//定義文件指針 
	int i;
	printf("以下是購物清單:\n");
	ShowCart();//調用函數顯示購物列表信息 
	
	
	if((fp=fopen("kucun.txt","r"))==NULL)
	{//打開文件  
		printf("打開文件失敗\n");
		return ;
	}
	
	for(i=0;i<N;i++)
	{//從文件中讀取信息 
		fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);
	}
	fclose(fp);//關閉文件 
	
	while(p!=NULL)
	{//當鏈表不爲空時 
		sum=sum+p->buy.outprice*p->number;//計算應付錢數 
		for(i=0;i<N;i++)
		{//找出對應商品庫存量 
			if(strcmp(goods[i].ID,p->buy.ID)==0)
			{//找到對應商品 
				goods[i].storage=goods[i].storage-p->number;//庫存量變化 
				break;
			}
		} 
		p=p->next;//指向下一個節點 
	}
	
	printf("總計:%-8.3f\n",sum);//輸出購買物品共需多少錢 
	printf("輸入實付金額:");
	scanf("%lf",&pay);
	printf("實付:  %-8.3f    找零:    %8.3f\n",pay,pay-sum);
	
	if((fp=fopen("kucun.txt","w"))==NULL)
	{//打開文件 
		printf("寫入文件失敗\n");
		return ;
	}
	for(i=0;i<N;i++)
	{//向文件中寫入信息 
		fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage);
	}
	fclose(fp);//關閉文件 
	
	return ;
}

全部代碼下載鏈接:點擊前往下載鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章