2023/8/6 day4 数据结构

文章描述了一组C语言函数,用于创建、操作顺序表(seqlist),包括添加商品、检查表状态、排序、删除和更新商品信息,以及一个简单的商品管理系统菜单。
#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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值