- 需求描述
- 运行结果
- 代码
使用线性表编写程序,实现一在线商城对商品进行管理,商城客户可以查询商品信息,商城的商家可以添加、删除、查询、修改自己发布的商品信息。
要求:
- 商品用户分为客户和商家。
- 客户可以在程序中查询商家发布的商品信息。
- 商家可以在程序中对自己发布的商品进行添加、删除、查询、修改操作。
- 使用线性表实现
- 代码符合规范,正确、易读、易操作。
#include#include #include #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("商品名称:%sn价格:%.2fn介绍:%sn", 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商品名称:%sn价格:%.2fn介绍:%sn", 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; }



