#include "goods_seqlist.h"
//创建顺序表
seqlist_ptr list_create()
{
//向堆栈申请空间
seqlist_ptr P=(seqlist_ptr)malloc(sizeof(seqlist));
//判断逻辑
if(P==NULL)
{
printf("申请失败\n");
}
//初始化数组
memset(P->data,0,sizeof(P->data));
P->len=0; //当前顺序表的长度为0,没有数据
printf("创建成功\n");
return P;
}
//判空
/*int list_empty(seqlist_ptr P)
{
if(P==NULL)
{
printf("商品表不合法\n");
return -1;
}
//如果合法,则返回是否已经空了
return P->len==0;
}
//判满
int list_full(seqlist_ptr P)
{
if(P==NULL)
{
printf("商品表不合法");
return -1;
}
//如果合法返回是否已满
return P->len==MAX;
}*/
//向商品表中添加商品
int list_add(seqlist_ptr P)
{
if(P==NULL)
{
printf("商品列表不合法\n");
return -1;
}
//开始添加
printf("输入商品的信息:");
int n;
for(int i=0;i<MAX;i++)
{
printf("\n");
printf("商品的名称:");
scanf("%s",P->data[i].name);
getchar();
printf("商品的产地:");
scanf("%s",P->data[i].producer);
getchar();
printf("商品的编号:");
scanf("%d",&P->data[i].id);
getchar();
printf("商品的价格:");
scanf("%d",&P->data[i].price);
getchar();
P->len++;
printf("是否要继续输入? 要1,不要2\n");
scanf("%d",&n);
if(n==2)
{
printf("输入结束\n");
return 0;
}
printf("------------------------------------");
}
return 0;
}
//打印商品列表
void list_show(seqlist_ptr P)
{
//判断逻辑
if(P==NULL)
{
printf("商品列表不合法\n");
}
//
printf("商品列表:\n");
for(int i=0;i<P->len;i++)
{
printf("商品名称:%s\n",P->data[i].name);
printf("商品产地:%s\n",P->data[i].producer);
printf("商品编号:%d\n",P->data[i].id);
printf("商品价格:%d\n",P->data[i].price);
printf("-------------------------\n");
}
printf("商品打印完成\n");
}
//以商品的价格排序
void list_sort(seqlist_ptr P)
{
if(P==NULL)
{
printf("商品表不合法\n");
}
//开始排序
//flag=1升序,flag=0降序
int flag;
goods temp;
printf("请输入flag\n");
scanf("%d",&flag);
getchar();
for(int i=1;i<P->len;i++)
{
for(int j=0;j<P->len-i;j++)
{
if(flag==1)//升序
{
if(P->data[j].price>P->data[j+1].price)
{
temp=P->data[j];
P->data[j]=P->data[j+1];
P->data[j+1]=temp;
}
else if(flag==0)//降序
{
if(P->data[j].price<P->data[j+1].price)
{
temp=P->data[j];
P->data[j]=P->data[j+1];
P->data[j+1]=temp;
}
}
}
}
}
if(flag==1)
printf("商品按价格升序排序完成\n");
else if(flag==0)
printf("商品按价格降序排序完成\n");
}
//根据商品编号删除商品
void list_delete(seqlist_ptr P)
{
if(P==NULL)
{
printf("商品为空\n");
}
int id1;
printf("请输入要删除商品的编号\n");
scanf("%d",&id1);
getchar();
for(int i=0;i<P->len;i++)
{
if(P->data[i].id==id1)
{
P->data[i-1]=P->data[i];
}
}
P->len--;
printf("删除成功\n");
}
//更新商品信息
void list_update(seqlist_ptr P)
{
if(P==NULL)
{
printf("更新失败\n");
}
//开始更新
char name[20];
char pro[20];
int id;
int price;
int flag=0;
printf("请输入需要更新商品的信息\n");
printf("商品的名称:\n");
scanf("%s",name);
printf("商品的产地:\n");
scanf("%s",pro);
printf("商品的编号:\n");
scanf("%d",&id);
printf("商品的价格:\n");
scanf("%d",&price);
for(int i=0;i<P->len;i++)
{
if(strcmp(P->data[i].name,name)==0)
{
strcmp(P->data[i].name,name);
flag=1;
}
if(strcmp(P->data[i].producer,pro)==0)
{
strcmp(P->data[i].producer,pro);
flag=1;
}
if(P->data[i].id==id)
{
P->data[i].id=id;
flag=1;
}
if(P->data[i].price==price)
{
P->data[i].price=price;
flag=1;
}
}
if(flag)
{
printf("修改成功\n");
}
else
{
printf("未找到需要更新的商品");
}
}
#include "goods_seqlist.h"
int main(int argc, const char *argv[])
{
//向堆栈申请空间
seqlist_ptr P=list_create();
//判断逻辑
if(P==NULL)
{
return -1;
}
//菜单
int n;
while(1)
{
printf("**************商品管理系统***************\n");
printf("1.添加商品\n");
printf("2.打印商品\n");
printf("3.按单价排序商品\n");
printf("4.根据商品编号删除商品\n");
printf("5.更新商品信息\n");
printf("6.退出\n");
printf("*****************************************\n");
printf("请选择操作\n");
scanf("%d",&n);
switch(n)
{
case 1:
list_add(P);
break;
case 2:
list_show(P);
break;
case 3:
list_sort(P);
break;
case 4:
list_delete(P);
break;
case 5:
list_update(P);
break;
case 6:
printf("程序已退出\n");
return 0;
default:
printf("请重新选择,无效\n");
break;
}
}
return 0;
}
#ifndef _GOODS_SEQLIST_H_
#define _GOODS_SEQLIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
//定义一个商品构造类型
typedef struct
{
char name[32]; //商品名称
char producer[32]; //商品产地
int id; //商品编号
int price; //商品价格
}goods;
//定义一个顺序表类型
typedef struct
{
goods data[MAX]; //存储数据元素的数组
int len; //存储当前顺序表的长度
}seqlist,*seqlist_ptr; //重命名为一个结构体变量和一个指针类型
//创建顺序表
seqlist_ptr list_create();
//判空
int list_empty(seqlist_ptr P);
//判满
int list_full(seqlist_ptr P);
//向顺序表中添加数据商品
int list_add(seqlist_ptr P);
//打印商品列表
void list_show(seqlist_ptr P);
//以商品的价格排序
void list_sort(seqlist_ptr P);
//删除商品
void list_delete(seqlist_ptr P);
//更新商品信息
void list_update(seqlist_ptr P);
#endif
