QikH~ 2021-06-24 16:10 采纳率: 66.7%
浏览 19
已采纳

JAVA或c的超市管理系统。

 

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-06-24 16:20
    关注
    
    
    //Market.h
    #ifndef	MARKET_H
    #define MARKET_H
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define NUM 2
    struct item {
    	char brand[20];
    	char id[10];
    	float in_price;
    	float out_price;
    	int storage;
    };
    
    
    struct item_node {
    	struct item wanted;
    	int amount;
    	struct item_node* next;
    };
    
    int menu();
    void establish();
    void dis_all();
    void shop_cart();
    int cart_menu();
    void add();
    void calculate();
    void display();
    struct item goods[NUM];
    struct item_node * cart;
    #endif
    
    
    //Market.c
    //#include"Market.h"
    int main()
    {
    	printf("******************************\n");
    	printf("    欢迎进入超市管理系统\n");
    	printf("******************************\n");
    	while (1) {
    		switch (menu()) {
    		case 1:
    			establish(); break;
    		case 2:
    			dis_all(); break;
    		case 3:
    			shop_cart(); break;
    		case 4:
    			calculate(); break;
    		case 5:
    			printf("感谢使用,再见!\n");
    			exit(0);
    		}
    	}
    }
    
    int menu() {
    	char str[5];
    	int select;
    	printf("\n\n请选择数字进行操作\n");
    	printf("----------------------\n");
    	printf("1.建立库存信息\n");
    	printf("2.显示所有商品\n");
    	printf("3.购物车\n");
    	printf("4.结算\n");
    	printf("5.退出\n");
    	printf("----------------------\n\n");
    	printf("请选择对应数字 1-5:");
    	while (1) {
    		fflush(stdin);
    		//gets(str);
    		gets_s(str);
    		select = atoi(str);
    		if (select < 1 || select>5)
    			printf("输入错误,请重新输入:");
    		else
    			break;
    	}
    	return select;
    }
    
    void  dis_all() {
    	int i;
    	FILE* fp;
    	fp = fopen("goods", "r");
    	for (i = 0; (fread(goods + i, sizeof(struct item), 1, fp)) != 0l; i++) {
    		printf("---------------------\n");
    		printf("货号          品名  单价  库存量\n");
    		printf("%7s%10s%7.2f%8d\n", goods[i].id, goods[i].brand, goods[i].out_price, goods[i].storage);
    	}
    	fclose(fp);
    }
    
    
    //establish.c
    //建立库存信息文件
    //#include"Market.h"
    void establish() {
    	FILE* fp;
    	int i;
    	printf("请依次输入货物信息\n");
    	printf("-------------------\n");
    	for (i = 0; i < NUM; i++) {
    		printf("品名:");
    		fflush(stdin);
    		//gets(goods[i].brand);
    		gets_s(goods[i].brand);
    		printf("货号:");
    		fflush(stdin);
    		//gets(goods[i].id);
    		gets_s(goods[i].id);
    		printf("进价:");
    		fflush(stdin);
    		scanf("%f", &goods[i].in_price);
    		printf("售价:");
    		fflush(stdin);
    		scanf("%f", &goods[i].out_price);
    		printf("数量:");
    		fflush(stdin);
    		scanf("%d", &goods[i].storage);
    		printf("\n");
    	}
    	if ((fp = fopen("goods", "w")) == NULL) {
    		printf("创建文件失败。\n");
    		return;
    	}
    	fwrite(goods, sizeof(struct item), NUM, fp);
    	fclose(fp);
    }
    //shoppingcart.c
    //购物车
    //#include"Market.h"
    void shop_cart() {
    	while (1) {
    		switch (cart_menu()) {
    		case 1:display(); break;
    		case 2:add(); break;
    		case 3:return;
    		}
    	}
    }
    
    
    int cart_menu() {
    	char str[5];
    	int select;
    	printf("\n请选择操作\n");
    	printf("-----------------\n");
    	printf("1.显示当前购物列表\n");
    	printf("2.添加商品\n");
    	printf("3.退出\n");
    	printf("-----------------\n\n");
    	printf("请选择对应数字1-4\n");
    	while (1) {
    		fflush(stdin);
    		//gets(str);
    		gets_s(str);
    		select = atoi(str);
    		if (select < 1 || select>3)
    			printf("输入错误,请重新输入:\n");
    		else
    			break;
    	}
    	return select;
    }
    
    void display() {
    	struct item_node * p ,  * cart;
    	if (p = NULL) {
    		printf("购物车为空\n");
    		return;
    	}
    	while (p != NULL) {
    		printf("--------------------------\n");
    		printf("货号           品名  单价  数量\n");
    		printf("%10s%20s%7.2f%8d\n", p->wanted.id, p->wanted.brand, p->wanted.out_price, p->amount);
    		p = p->next;
    	}
    }
    void add() {
    	FILE* fp;
    	int i, n;
    	char str[20];
    	char choice1, choice2;
    	struct item_node* p, * p1;
    	do {
    		printf("输入所需物品的名称或货号:\n");
    		fflush(stdin);
    		//gets(str);
    		gets_s(str);
    		if ((fp = fopen("goods", "r")) == NULL) {
    			printf("打开文件失败\n");
    			continue;
    		}
    		for (i = 0; fread(goods + i, sizeof(struct item), 1, fp) != 0; i++) {
    			if ((strcmp(goods[i].brand, str) == 0 || strcmp(goods[i].id, str) == 0) && goods[i].storage != 0) {
    				printf("已找到所需物品:\n");
    				printf("--------------------------------\n");
    				printf("货号           品名  单价  库存量\n");
    				printf("%10s%20s%7.2f%8d\n", goods[i].id, goods[i].brand, goods[i].out_price, goods[i].storage);
    				printf("请输入所需数量:");
    				scanf("%d", &n);
    				if (n > goods[i].storage) {
    					printf("库存不足\n");
    					break;
    				}
    				printf("\n 是否购买?(Y/N)");
    				fflush(stdin);
    				choice1 = getchar();
    				if (choice1 == 'Y' || choice1 == 'y') {
    					p1 = (struct item_node* )malloc(sizeof(struct item_node));
    					if (p1 == NULL) {
    						printf("内存申请失败!\n");
    						exit(1);
    					}
    					p1->amount = n;
    					p1->wanted = goods[i];
    					p1->next = NULL;
    					p = cart;
    					if (cart == NULL)
    						cart = p1;
    					else {
    						while (p->next != NULL)
    							p = p->next;
    						p1->next = p->next;
    						p->next = p1;
    					}
    				}
    				break;
    			}
    
    		}
    		if (i = NULL)
    			printf("未找到所需物品\n");
    		fclose(fp);
    		printf("是否继续购物?(Y/N)");
    		fflush(stdin);
    		choice2 = getchar();
    	} while (choice2 == 'Y' || choice2 == 'y');
    }
    //calculate.c
    //结算
    //#include "Market.h"
    void calculate() {
    	float total = 0, pay;
    	struct item_node* p;
    	int i;
    	FILE* fp;
    	printf("以下是购物清单:\n");
    	display();
    	if ((fp = fopen("goods", "r")) == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    	for (i = 0; (fread(goods + i, sizeof(struct item), 1, fp)) != 0; i++)//有个分号
    		;
    	fclose(fp);
    
    
    	p = cart;
    	while (p != NULL) {
    		total += p->wanted.out_price * p->amount;
    		for (i = 0; strcmp(goods[i].id, p->wanted.id) != 0; i++)
    			;
    		goods[i].storage -= p->amount;
    		p = p->next;
    	}
    	printf("总计%7.2f", total);
    	printf("\n输入实付金额:");
    	scanf("%f", &pay);
    	printf("实付:     %7.2f    找零:     %7.2f", pay, pay-total);
    	if ((fp = fopen("goods", "w")) == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    	fwrite(goods, sizeof(struct item), NUM, fp);
    	fclose(fp);
    }
    

    如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误