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