c语言 商品管理系统 顺序表的应用

商品管理系统

需求描述

使用线性表编写程序,实现一在线商城对商品进行管理,商城客户可以查询商品信息,商城的商家可以添加、删除、查询、修改自己发布的商品信息。
要求:

  1. 商品用户分为客户和商家。
  2. 客户可以在程序中查询商家发布的商品信息。
  3. 商家可以在程序中对自己发布的商品进行添加、删除、查询、修改操作。
  4. 使用线性表实现
  5. 代码符合规范,正确、易读、易操作。

运行结果

结果

代码

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define COMMODITY_NAME_MAXSIZE 20   //商品名称容量
#define COMMODITY_DESCRIBE_MAXSIZE 100    //商品描述容量
#define LIST_INIT_MAXSIZE 100		//列表初始容量
#define LIST_ADD_SIZE 20		//列表增加容量
#define SLEEP_TIME  500		//睡眠时间 
//client
//merchant
//定义顺序表结构体
typedef struct {
	char name[COMMODITY_NAME_MAXSIZE];//商品名称
	float price;//价格
	char describe[COMMODITY_DESCRIBE_MAXSIZE];//描述
}ElemType;
typedef struct {
	ElemType* data;
	int length;//当前长度
	int maxsize;//最大长度
}DataList;


//初始化商品列表
void initCommodityList(DataList* list);
//添加元素
void addData(DataList* list);
//删除元素
void deleteData(DataList* list);
//查询商品
void queryData(DataList* list);
//列表扩容
void listSizeAdd(DataList* list);
//更改元素
void changeData(DataList* list); 
//打印列表 
void printList(DataList* list); 
//商家操作系统
void managerSystem(DataList* list);
//用户操作系统 
void clientSystem(DataList* list);
//清屏 
void clear();

//初始化商品列表
void initCommodityList(DataList* list) {
	list->data = (ElemType*)malloc(sizeof(ElemType)*LIST_INIT_MAXSIZE);
	list->length = 0;
	list->maxsize = LIST_INIT_MAXSIZE;
}

void addData(DataList* list) {
	clear();
	if (list->length == list->maxsize) {
		listSizeAdd(list);
	}
	printf("请输入增加商品名称,价格,以及相关描述");
	fflush(stdin);
	scanf("%s %f %s", list->data[list->length].name, &list->data[list->length].price, list->data[list->length].describe);
	list->length++;
	printf("%s已添加\n", list->data[list->length-1].name);
}

void deleteData(DataList* list) {
	clear();
	char name[COMMODITY_NAME_MAXSIZE];
	printf("请输入要删除的商品名称:");
	fflush(stdin);
	scanf("%s", name);
	int i = 0;
	for (; i < list->length; i++) {
		if (strcmp(name, list->data[i].name) == 0) {
			break;
		}
	}
	if(i == list->length){
		printf("未查询到对应商品\n");
		return;
	}
	for (; i < list->length - 1; i++) {
		list->data[i] = list->data[i + 1];
	}
	list->length--;
	printf("%s已删除\n", name);
}

void queryData(DataList* list) {
	clear();
	char name[COMMODITY_NAME_MAXSIZE];
	printf("请输入您要查询的商品名称:");
	scanf("%s", name);
	for (int i = 0; i < list->length; i++) {
		if (strcmp(name, list->data[i].name) == 0) {
			printf("商品名称:%s\n价格:%.2f\n介绍:%s\n", i, list->data[i].name, list->data[i].price, list->data[i].describe);
			system("pause");
			return;
		}
	}
	printf("未查询到相关商品\n");
}

void changeData(DataList* list){
	clear();
	ElemType temp;
	printf("请输入您要修改的商品名称以及修改后的价格和相关描述:\n");
	fflush(stdin);
	scanf("%s %f %s", temp.name, &temp.price, temp.describe);
	for (int i = 0; i < list->length; i++) {
		if (strcmp(temp.name, list->data[i].name) == 0) {
			list->data[i] = temp;
			printf("修改成功\n");
			return;
		}
	}
	printf("未查询到相关商品\n");
}

void printList(DataList* list){
	clear();
	for(int i = 0; i < list->length; i++){
		printf("%d.\n商品名称:%s\n价格:%.2f\n介绍:%s\n", i + 1, list->data[i].name, list->data[i].price, list->data[i].describe);
	}
	system("pause");
}

void listSizeAdd(DataList* list) {
	list->data = (ElemType*)realloc(list, sizeof(ElemType) * (list->maxsize + LIST_ADD_SIZE));
}

void clear(){
	Sleep(SLEEP_TIME);
	system("cls");
}
void managerSystem(DataList* list) {
	int n = 1;
	while (n != 0) {
		clear();
		printf("请输入您的操作指令:\n1.增加商品\n2.删除商品\n3.查询商品\n4.修改商品数据\n5.打印列表\n0.退出\n");
		fflush(stdin);
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			addData(list);
			break;
		case 2:
			deleteData(list);
			break;
		case 3:
			queryData(list);
			break;
		case 4:
			changeData(list);
		case 5:
			printList(list);
			break;
		case 0:
			return;
		default:
			printf("指令错误\n");
			return;
		}
	}
}

void clientSystem(DataList* list){
	int n = 1;
	while (n != 0) {
		clear();
		printf("请输入您的操作指令:\n1.查询商品\n2.打印列表\n0.退出\n");
		fflush(stdin);
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			queryData(list);
			break;
		case 2:
			printList(list);
			break;
		case 0:
			return;
		default:
			printf("指令错误\n");
			return;
		}
	}
}
	 

int main() {
	DataList list;
	initCommodityList(&list);
	int n = 1;
	while(n != 0){
		clear();
		printf("请登录:\n1.客户登录\n2.管理员登录\n0.退出\n");
		scanf("%d", &n);
		if (n == 1) {
			printf("登录成功!\n");
			clientSystem(&list);
		}
		else if (n == 2) {
			printf("登录成功!\n"); 
			managerSystem(&list);
		}
		else if(n == 0){
			return 0;
		}
		else {
			printf("指令错误\n");
		}
	}
	return 0;
}
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个商品销售管理程序。该程序应该具有以下功能: (1)录入、修改、删除某商品信息; (2)显示所有商品信息; (3)按商品编号由小到大的顺序显示商品信息; (4)按商品销售数量从大到小的顺序显示商品信息; (5)按商品名称、商品编号、供货商等信息进行查询,若查询信息不存在,输出没找到的信息; (6)商品的销售; (7)统计缺货商品(可设定一个边界范围,如数量小于5,以便及时订货),并产生订货信息; (8)商品销售统计。 题目要求: (1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序,即在程序中加入异常处理,检查用户输入数据的有效性,以保证程序的健壮性; (2)商品信息应该包括商品编号、名称、规格、进货数量、销售数量、价格、供货商名称等; (3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单选项选则所需进行的操作项目,菜单要界面友好、清晰; (4)将所有商品信息存储在一个文件中,并实现文件的读写操作,即将输入的数据以文件的形式存盘,将原来已经存盘的文件读入内存,进行管理; (5)应保证测试用例测试程序的各种边缘情况。 输入要求: 应用程序运行后,在屏幕上显示一个菜单。用户可以根据需要,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。 输出要求: (1)应用程序运行后,在屏幕上显示一个菜单。 (2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值