数据结构课程设计 - 超市商品管理系统

一.源程序代码

   1. 头文件 goods.h

#ifndef GOODS_H_INCLUDED
#define GOODS_H_INCLUDED

#include<stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>


#define MAXSIZE 100

typedef struct                         //数据域定义为一个结构体
{
    char name[30];                     //商品名称
    char no[30];                       //商品编号
    int  num;                          //商品数量
}goods;                                //商品结构体

typedef struct node                    //定义单链表节点类型
{
    goods data;                        //数据域
    struct node *next;                 //指针域,指向后继结点
}LNode;

LNode *Init_G();                       //初始化链表
void input(LNode *L);                  //创建链表(尾插法)
void run_over(LNode *L);               //浏览商品信息
LNode* search(LNode *L,goods x);       //查找商品
void goodspai(LNode *L);               //商品信息排序
void insert(LNode *L,goods x);         //插入商品
void storage(LNode *L,goods x);        //商品入库
void goodsChange(LNode *L,goods x);    //以商品编号进行修改
int del(LNode *L,goods x);             //删除
void out(LNode *L,goods x);            //商品出库
void save(LNode *L);                   //保存操作
void menu();                           //功能选择窗口  //



#endif // GOODS_H_INCLUDED


   2.实现函数功能的cpp文件 goods.cpp

#include "goods.h"
#include <windows.h>
#include <time.h>


/************************************
* 功能描述:录入商品信息
* 输入参数:输入录入个数及需要录入的信息
* 输出参数:无
* 备注信息:尾插法创建链表
*************************************/

void input(LNode *L)                                //尾插法创建链表
{
    int i,n;
    LNode *r=L,*s;
    goods x;
    printf("\n请输入商品的种数:");
    scanf("%d",&n);
    printf("\n ****   请输入商品的名称、编号、数量   ****\n");
    printf("\n");
    for(i=1;i<=n;i++)
    {
        printf("              o商品名称: ");
        scanf("%s",x.name);
        printf("              o商品编号: ");
        scanf("%s",x.no);
        printf("              o商品数量: ");
        scanf("%d",&x.num);
        s=(LNode*)malloc(sizeof(LNode));
        s->data=x;
        s->next=NULL;
        r->next=s;
        r=s;
        printf("\n");
    }

    printf("\n ****       录入结束,返回上一级      ****\n");

}


/************************************
* 功能描述:浏览商品信息清单
* 输入参数:无
* 输出参数:所有商品信息
* 备注信息:链表的遍历及输出
*************************************/

void run_over(LNode *L)
{
    LNode *p=L->next;

    if(p==NULL)
    {
        printf("--------------该系统还未录入商品信息,请录入后在进行操作--------------\n");
        menu();
    }
    printf("\n-----------下面是商品信息一览表-----------\n");
    printf("\n");
    printf("商品名称   商品编号    商品数量\n");
    printf("\n");

    while(p!=NULL)
    {
        printf("%5s%10s%12d\n",p->data.name,p->data.no,p->data.num);
        p=p->next;
    }

    printf("\n");
    printf("\n");


}


/************************************
* 功能描述:查找商品信息
* 输入参数:要查找的商品编号
* 输出参数:商品信息
* 备注信息:按元素值在链表中查询
*************************************/

LNode* search(LNode *L,goods x)
{
    LNode *p=L->next;
    while(p!=NULL&&(strcmp(p->data.no,x.no)!=0))
    {
        p=p->next;
    }
    if(p!=NULL&&(strcmp(p->data.no,x.no)==0))            //查找到相应商品,返回指针
    {
        return p;
    }
    else
    {
        return NULL;
    }
}


/************************************
* 功能描述:插入新增商品
* 输入参数:新增商品的编号,名称及数量
* 输出参数:无
* 备注信息:链表的插入
*************************************/

void insert(LNode *L,goods x)
{
    LNode *p=L,*s;
    while(p->next!=NULL&&(strcmp(p->next->data.no,x.no)!=0))               //商品不存在时可插入到已有链表上
    {
        p=p->next;
    }
    s=(LNode*)malloc(sizeof(LNode));
    s->data=x;
    s->next=p->next;
    p->next=s;
}


/************************************
* 功能描述:排序商品信息
* 输入参数:无
* 输出参数:无
* 备注信息:直接插入排序和冒泡排序
*************************************/

void goodspai(LNode *L)
{
    LNode *p,*q,*r;
    int choose;
    goods x;
    printf("请选择排序方式:");
    printf("1.按商品编号排序   2.按库存数量排序 \n");
    scanf("%d",&choose);
    switch(choose)
    {
        case 1:                            //按商品编号排序为直接插入排序
            p=L->next->next;                                                     //p指向第一个节点的后继
            L->next->next=NULL;                                                  //直接插入排序,第一个元素在有序区,从第二元素起依次插入
            while(p!=NULL)
            {
                r=p->next;                                                       //r指针暂存p的后继
                q=L;
                while(q->next!=NULL&&(strcmp(q->next->data.no,p->data.no)>0))    //查找插入位置
                    q=q->next;                                                   //将p节点链入链表
                p->next=q->next;
                q->next=p;
                p=r;
            }
            break;

        case 2:                          //按商品数量排序为冒泡排序
             p=L->next;
             while(p)
             {
                q=p->next;
           
  • 30
    点赞
  • 238
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值