⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shopon.c

📁 一个链表操作的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
// shop.cpp : 定义控制台应用程序的入口点。
//
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*文件名:shop.c

*文件描述:售货管理系统

*版本号:1.0

参数记录:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include "stdafx.h"

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


#define MAX_NUM_NAME  30


#define true 1

#define false 0

struct commodity                                                        //commodity farme
{
	char name[MAX_NUM_NAME];

	unsigned int id;

	float price;

	int quantity;

	int outquan;

	int nowquan;

	struct commodity * later;

	struct commodity * front;
};

typedef struct commodity * pcomd;

typedef struct commodity comd;

int cmna=true;

int cmid=true;

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: keycle

*参   数:  无

*type name[IN]:

*功能描述: 清键盘缓存

*返回值: 无返回

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/

void keycle()
{
  int c;
  while((c=getchar())!='\n' && c!=EOF)
    ;
}

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: serachname

*参   数: 链表头指针,要搜索的字符串(pcomd head,char *comname)

*type name[IN]:

*功能描述: 搜索相同名称的结构(商品名相同)

*返回值: 结构指针( pcomd )

*抛出异常:没搜索到,返回NULL

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/

pcomd serachname(pcomd head,char *comname)    //serach commodity by name
{
	pcomd p;
	int a;

	p=head;

	if(NULL==p)
		{
			printf("*error*没有商品*error*\n");
		
			return NULL;
		}
	
	while(1)
		{
		  a=strcmp(comname, p->name);

			if(!a)
				{
					cmna=true;

					return p;
				}
			
			if((p->later)==NULL)
				{
					cmna=false;
					return NULL;
				}
			
			p=p->later;
		}
	
	cmna=false;
	
	return NULL;

}

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: serachid

*参   数: 链表头指针,要搜索的ID号(pcomd head,unsigned int idnum)

*type name[IN]:

*功能描述: 搜索相同ID号的结构(商品ID相同)

*返回值: 结构指针( pcomd )

*抛出异常:没搜索到,返回NULL

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/

pcomd serachid(pcomd head,unsigned int idnum)  //serach commodity by id
{
	pcomd p;

	p=head;

	if(NULL==p)
		{
			printf("*error*没有商品*error*\n");
		
			return NULL;
		}
	while(1)
		{
			if(idnum==p->id)
				{
					cmid=true;
					
					return p;
				}
			
			if((p->later)==NULL)
				{
					cmid=false;
					return NULL;
				}
			
			p=p->later;
		}
	
	cmid=false;
	
	return NULL;
	
}

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: edit

*参   数: 链表头指针,要编辑的结构指针(pcomd head,pcomd com)

*type name[IN]:

*功能描述: 编辑结构体里的参数(修改商品信息)

*返回值: 结构指针( pcomd )

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/

pcomd edit(pcomd head,pcomd com)
{
	pcomd p;

	char c;

	int i=1;    //确定是否继续循环修改


	p=com;

	    while(i)
	      {
		printf("是否要更改商品信息?  (Y/N)\n");
		
		c=getchar();

		keycle();
					
		if(c=='n' || c=='N' )
		  {
		    i=0;
		  }
		else if(c=='y' || c=='Y' )
		  {
		    printf("请输入商品名称:\n");

		    scanf("%s",p->name);

		    keycle();

		    serachname(head, p->name);

		    while(cmna)
		      {
			printf("商品名称重复!\n请重新输入:\n");
	
			scanf("%s",p->name);

			keycle();

			serachname(head, p->name);
		      }

		    printf("请输入商品ID:\n");

		    scanf("%d",&p->id);

		    keycle();
		
		    serachid(head, p->id);

		    while(cmid)
		      {
			printf("商品ID重复!\n请重新输入:\n");
			
			scanf("%d",&p->id);

			keycle();

			serachid(head,p->id);
		      }

		    printf("请输入商品价格:\n");

		    scanf("%f",&p->price);

		    keycle();

		    printf("请输入商品采购数量:\n");

		    scanf("%d",&p->quantity);

		    keycle();

		    p->nowquan=p->quantity;

		    i=0;             //确定是否继续循环修改
		  }                               
		else
		  i=1;
	      }
     
	return p;	
}


/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: showall

*参   数: 链表头指针(pcomd head)

*type name[IN]:

*功能描述: 显示链表的所有数据(显示所有商品)

*返回值: 无

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/
void showall(pcomd head)
{
	pcomd p;

	p=head->later;
	
	printf("所有商品清单:\n");

          	while(p->later)
		{
			printf("名称:%s\nID号:%d\n价格:¥%-8.2f\n进货总量:%d\n销售数量:%d\n现有数量:%d\n",p->name,p->id,p->price,p->quantity,p->outquan,p->nowquan);

			p=p->later;

			printf("\n\n");
		
		}
	printf("名称:%s\nID号:%d\n价格:¥%-8.2f\n进货总量:%d\n销售数量:%d\n现有数量:%d\n",p->name,p->id,p->price,p->quantity,p->outquan,p->nowquan);

	printf("\n\n");
	
}

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: printcom

*参   数: 结构指针(pcomd commod)

*type name[IN]:

*功能描述: 显示指定的结构(显示指定的商品)

*返回值: 无

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/
void printcom(pcomd commod)
{

printf("名称:%s\nID号:%d\n价格:¥%-8.2f\n进货总量:%d\n销售数量:%d\n现有数量:%d\n",commod->name,commod->id,commod->price,commod->quantity,commod->outquan,commod->nowquan);

}
/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: dellcom

*参   数: 结构指针(pcomd pdell)

*type name[IN]:

*功能描述: 删除指定结构(删除指定商品)

*返回值: 删除后返回NULL,没删除返回这个结构

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/
pcomd dellcom(pcomd pdell)
{
	pcomd  p;

	char c;

	p=pdell;
	
	if(cmid)
		{
                    	for(;;)
                    		{
			printf("是否要删除此商品?  (Y/N)\n");
					
			c=getchar();

					if(c=='n' || c=='N' )
						{
							return pdell;
						}
					else if(c=='y' || c=='Y' )
						{
						
							p->later->front=p->front;

							p->front->later=p->later;

							free(p);
						
							printf("已经删除此商品\n");
						
							return NULL;
						}
					
					else
						printf("请输入 (Y/N)\n");
                    		}
		}
	return pdell;
}

/*= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =
*函数名: addcom

*参   数: 链表头指针(pcomd head)

*type name[IN]:

*功能描述: 添加结构体(添加一件商品)

*返回值: 返回链表头指针

*抛出异常:

*作   者: 张学刚
= = = = = = = = = = = = = = = = = == = = = = = = = = = = = = = = = = == = = = = = = = = = =*/
pcomd addcom(pcomd head)
{
	pcomd p,r;
	
	r=head;

		
		while(r->later)
		  
		    r=r->later;
		
		p=(pcomd)malloc(sizeof(struct commodity));

		printf("请输入商品名称:\n");

		scanf("%s",p->name);

                keycle();

		serachname(head, p->name);

		while(cmna)
		      {
			printf("商品名称重复!\n请重新输入:\n");

			scanf("%s",p->name);

			keycle();

			serachname(head, p->name);
		      }

		printf("请输入商品ID:\n");

		scanf("%d",&p->id);

		keycle();
		
		serachid(head, p->id);

		while(cmid)
		      {
			printf("商品ID重复!\n请重新输入:\n");
				
			scanf("%d",&p->id);

			keycle();
			
			serachid(head,p->id);
		      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -