超市管理系统(入门)

#include "stdio.h"
#include "stdlib.h"
#include "string.h"    
#include "windows.h"


// 定义超市物品结构体
struct Item 
{
    int id;          // 物品编号
    char name[50];   // 物品名称
    int shelf;       // 物品所在货架号
    int quantity;    // 物品数量
    float price;     // 物品单价
    char date[20];   // 物品进货时间
};


// 定义二叉搜索树结点
struct TreeNode 
{
    struct Item* item;
    
    struct TreeNode* left;   //左子树
    struct TreeNode* right;  //右子树
};


struct TreeNode* insert_data(struct TreeNode* root, struct Item* item); //数据插入函数
struct TreeNode* buildTreeFromFile(char* filename);   //从文件中读取物品数据构建二叉搜索树
void insert(struct TreeNode* root);                   //插入调用函数
void idsearch(struct TreeNode* root);                 //编号查找调用
void searchById(struct TreeNode* root, int id);       //按编号查找物品
void NameSezrch(struct TreeNode* root);               //名称查找调用函数
void searchByName(struct TreeNode* root, char* name); //按名称查找物品
void DateSearch(struct TreeNode* root);               //日期查找调用函数
void searchByDate(struct TreeNode* root, char* date); //按进货时间查找物品
void print(struct TreeNode* root);                    // 打印所有物品信息
void goodsmenu(struct TreeNode * root);               //物品信息调用函数
void mainmenu();                                      //主菜单
void shelfManagement(struct TreeNode* root);          // 货架管理
void purchase(struct TreeNode* root);                 // 进货
void sell(struct TreeNode* root);                     //出货功能
void saveTreeToFile(struct TreeNode* root,FILE *fp);//将更新的数据保存到文件中
void saveData(struct TreeNode * root);//存入更新的数据


//用于判断是否存在该货物
int tag;

char ch[]={"goods.txt"};

int main() 
    {
        
    //设计背景以及字体颜色
        
    //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_INTENSITY);
            
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15 | 8 | 128 | 64);
            
    HANDLE JB = GetStdHandle(STD_OUTPUT_HANDLE);
                
    
    //将文件内容创建成树
    struct TreeNode* root = buildTreeFromFile(ch);  
        
    printf("\n按任意键继续进入管理系统");
    
    getchar();    
    
    while (1) 
    {
        mainmenu();
    
        int choice;
        
        scanf("%d", &choice);
        
        switch (choice) 
        {
            //按编号查找物品
            case 1: 
            {  
            
            idsearch(root);
            
            break;     
            }
                
            //按名称查找物品
            case 2:
            {   
            
            NameSezrch(root);
                
            break;
            }
            
            //按进货时间查找物品
            case 3:
            {   
            
            DateSearch(root);
       
                break;
            }
            
            //货物总览
            case 4: 
                {   
                    
            goodsmenu(root);
            
            printf("\n按任意键返回主菜单!");
                                
            getchar();
            
                break;
                }
            
            //货架管理
            case 5: 
                {   
                
            shelfManagement(root);
               
                break;
                
                }
                
            // 进货   
            case 6: 
                {   
                    
                purchase(root);
                    
                break;
                }
                
            //出货
            case 7: 
            {   
                
                sell(root);

                break;
            }
            
            //退出系统并保存数据进文件
                case 8: 
            {   
            
                saveData(root);
                
                printf("数据已更新!\n");
                
                printf("感谢使用系统,欢迎下次使用!\n");
                
                getchar();
                
                return 0;
                }
                default:
                    printf("无效选择!重新输入!\n");
            }
        }
        
        return 0;
}

void mainmenu()
{
    
system("cls");
        
        printf("  *^*^*超市物品信息管理系统*^*^*  \n");
        printf("*****========================*****\n");
        printf("*****========================*****\n");
        printf("***      1. 按编号查询         ***\n");
        printf("***      2. 按名称查询         ***\n");
        printf("***      3. 按进货时间查询     ***\n");
        printf("***      4. 货物总览           ***\n");
        printf("***      5. 货架管理           ***\n");
        printf("***      6. 进货               ***\n");
        printf("***      7. 出货               ***\n");
        printf("***      8. 退出系统           ***\n");
        printf("*****========================*****\n");
        printf("*****========================*****\n");
        printf("请选择功能:                      \n");    
    
}

void insert(struct TreeNode* root)
{
        system("cls");
                       
        struct Item* item = (struct Item*)malloc(sizeof(struct Item));
                        
        printf("输入物品编号: ");
        scanf("%d", &item->id);
        
        printf("\n输入物品名称: ");
        scanf("%s", item->name);
                        
        printf("\n输入物品货架编号: ");
        scanf("%d", &item->shelf);
                        
        printf("\n输入物品数量: ");
        scanf("%d", &item->quantity);
                        
        printf("\n输入物品价格: ");
        scanf("%f", &item->price);
                        
        printf("\n输入进货日期: ");
        scanf("%s", item->date);
    
        insert_data(root,item);
    
}


// 插入结点
struct TreeNode* insert_data(struct TreeNode* root, struct Item* item)
{
    if (!root) 
    {
        struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
        
        node->item = item;
        node->left = NULL;
        node->right = NULL;
        
        return node;
    }

    if (item->id < root->item->id) 
    {
        root->left = insert_data(root->left, item);
    } 
    else 
    {
        root->right = insert_data(root->right, item);
    }

    return root;
    
}


// 从文件中读取物品数据构建二叉搜索树
struct TreeNode* buildTreeFromFile(char* filename) 
{
    FILE* fp = fopen(filename, "r");
    
    if (!fp) 
    {
        printf("not found 404!\n", filename);
        
        return NULL;
    }

    struct TreeNode* root = NULL;

    // 逐行读取数据并插入二叉搜索树
    char buffer[1024];
    
    while (fgets(buffer, sizeof(buffer), fp)) 
    {
        
        // 去除换行符
        char* pos = strchr(buffer, '\n');
        
        if (pos) 
        {
            *pos = '\0';
        }

        // 解析数据
        char* token = strtok(buffer, ",");
        
        struct Item* item = (struct Item*)malloc(sizeof(struct Item));
        
        item->id = atoi(token);
        
        token = strtok(NULL, ",");
        strcpy(item->name, token);
        
        token = strtok(NULL, ",");
        item->shelf = atoi(token);
        
        token = strtok(NULL, ",");
        item->quantity = atoi(token);
        
        token = strtok(NULL, ",");
        item->price = atof(token);
        
        token = strtok(NULL, ",");
        strcpy(item->date, token);

        // 插入二叉搜索树
        root = insert_data(root, item);
        
    }


    fclose(fp);
    
    printf("载入系统成功!\n");
    
    return root;
}

// 删除结点
struct TreeNode* deleteNode(struct TreeNode* root, int id) 
{
    if (!root) 
    {
        printf("Item not found.\n");
        return NULL;
    }

    if (id < root->item->id) 
    {
        root->left = deleteNode(root->left, id);
    } 
    else 
    if (id > root->item->id) 
    {
        root->right = deleteNode(root->right, id);
    } 
    else 
    {
        // 找到要删除的结点

        // 情况1:该结点没有子结点
        if (!root->left && !root->right) 
        {
            free(root);
            
            return NULL;
        }
        // 情况2:该结点只有左子结点或右子结点
        if (!root->left) 
        {
            struct TreeNode* temp = root->right;
            free(root);
            return temp;
        } 
        else 
        if (!root->right) 
        {
            struct TreeNode* temp = root->left;
            
            free(root);
            
            return temp;
        }
        
        // 情况3:该结点既有左子结点又有右子结点
        struct TreeNode* temp = root->right;
        
        //理解为找到右节点的最左子节点
        while (temp->left) 
        {
            temp = temp->left;
        }
        root->item = temp->item;
        root->right = deleteNode(root->right, temp->item->id);
    }

    return root;
}

void idsearch(struct TreeNode* root)
{
    system("cls");
                
    int id;
                        
    printf("请输入物品的编号: \n");
                        
    scanf("%d", &id);
                        
    searchById(root,id);
                    
    if(tag==0)
    {
        printf("不存在该货物!");
                                                    
        printf("\n按任意键返回主菜单!");
                                                                    
        getchar();
        
        getchar();
                                
    }
}


//按编号查找物品
void searchById(struct TreeNode* root, int id) 
{
    tag=0;
    
    if (!root) 
    {
        printf("not found.404!\n");
        
        return;
    }
    
    if (id == root->item->id) 
    {
        tag=1;
        
        printf("||物品编号||物品名称||货架编号||物品数量||物品单价||  物品日期  ||\n");
        
        printf("  %4d  %10s    %4d      %4d     %6.2f     %s\n", 
        root->item->id, root->item->name, root->item->shelf, root->item->quantity, root->item->price, root->item->date);
        
        printf("\n搜索完成!");
        
        printf("\n按任意键返回主菜单!");
        
        getchar();
        
        getchar();
        
    } 
    else 
    if (id < root->item->id) 
    {
        searchById(root->left, id);
    } 
    else 
    {
        searchById(root->right, id);
    }
    
}

void NameSezrch(struct TreeNode* root)
{
    tag=0;
     
    system("cls");
            
        char name[50]={'\0'};
                    
        printf("请输入物品名称: \n");
                    
        scanf("%s", name);
                    
        searchByName(root, name);
                
        if(tag==0)
        {
        printf("不存在该货物!");
                                    
        printf("\n按任意键返回主菜单!");
                                                    
        getchar();
        
        getchar();
                
        }    
    
}


// 按名称查找物品
void searchByName(struct TreeNode* root, char* name) 
{
    
    if (!root) 
    {
        return;
    }
    
    if (strcmp(root->item->name,name) == 0) 
    {
        tag=1;
        
        printf("||物品编号||物品名称||货架编号||物品数量||物品单价||  物品日期  ||\n");
                
        printf("  %4d  %10s    %4d      %4d     %6.2f     %s\n", 
        root->item->id, root->item->name, root->item->shelf, root->item->quantity, root->item->price, root->item->date);
                
        printf("\n搜索完成!");
                
        printf("\n按任意键返回主菜单!");
                
        getchar();
                
        getchar();
        
    }
    
    searchByName(root->left, name);
    
    searchByName(root->right, name);
    
}

void DateSearch(struct TreeNode* root)
{
        system("cls");
        
        tag=0;
        
        printf("请输入物品的进货日期: \n");
                    
        char date[20];
                    
        printf("Enter purchase date: ");
                    
        scanf("%s", date);
                    
        searchByDate(root, date);
                    
        if(tag==0)
        {
        printf("不存在该货物!");
                                                    
        printf("\n按任意键返回主菜单!");
                                                                    
        getchar();
                    
        getchar();
                                
        }
                    
}


// 按进货时间查找物品
void searchByDate(struct TreeNode* root, char* date) 
{
    
    if (!root) 
    {
        return;
    }
    
    searchByDate(root->left, date);
    
    if (strcmp(root->item->date, date) == 0) 
    {
        tag=1;
            
        printf("||物品编号||物品名称||货架编号||物品数量||物品单价||  物品日期  ||\n");
                    
        printf("  %4d  %10s    %4d      %4d     %6.2f     %s\n", 
        root->item->id, root->item->name, root->item->shelf, root->item->quantity, root->item->price, root->item->date);
                    
        printf("\n搜索完成!");
                    
        printf("\n按任意键返回主菜单!");
                    
        getchar();
                    
        getchar();
    }
    
    searchByDate(root->right, date);
}

//物品的栏框
void goodsmenu(struct TreeNode * root)
{
    system("cls");
    
    printf("||物品编号||物品名称||货架编号||物品数量||物品单价||  物品日期  ||\n");
    
    print(root);
    
    getchar();
                        
    return ;
}

// 打印所有物品信息
void print(struct TreeNode* root) 
{
    
    if (!root) 
    {
    return;
    }

    print(root->left);
    
    printf("  %4d  %10s    %4d      %4d     %6.2f     %s\n", 
    root->item->id, root->item->name, root->item->shelf, root->item->quantity, root->item->price, root->item->date);
    
    print(root->right);

}

// 货架管理
void shelfManagement(struct TreeNode* root) 
{
    
    int id,shelf;
    
    goodsmenu(root);
    
    printf("\n输入需要更新货架的物品编号: ");
    
    scanf("%d",&id);
    
    struct TreeNode* node = NULL;
    
    struct Item* item = NULL;

    // 查找物品是否存在
    node = root;
    while (node) 
    {
        if (id == node->item->id) 
        {
            item = node->item;
            break;
        } 
        else 
        if (id < node->item->id) 
        {
            node = node->left;
        } 
        else 
        {
            node = node->right;
        }
    }

    if (!item) 
    {
        printf("请仔细看看,货物上有这个吗\n");
        
        getchar();
        
        getchar();
        
        return;
    }

    printf("请输入更换的货架: ");
    
    scanf("%d", &shelf);
    
    item->shelf = shelf;
    
    printf("更换货架成功哩!\n");
    
    getchar();
    
    getchar();
    
}

// 进货
void purchase(struct TreeNode* root) 
{
    int id,quantity;
    
    goodsmenu(root);
    
    printf("输入你要购入物品的编号: ");
    
    scanf("%d", &id);

    struct TreeNode* node = NULL;

    struct Item* item = NULL;

    // 查找物品是否存在
    node = root;
    
    while (node) 
    {
        if (id == node->item->id) 
        {
            item = node->item;
            break;
        } 
        else 
        if (id < node->item->id) 
        {
            node = node->left;
        } 
        else 
        {
            node = node->right;
        }
    }

    if (item == NULL) 
    {
        getchar();
        
        printf("当前超市没有这个货物呢,是否需要购入(Y,N):\n");
        
        char ch;
        
        ch=getchar();
        
        if(ch == 'Y')
        {
            insert(root);
            
            printf("购入成功!\n可以去货架看看哦");
            
            getchar();
            
        }
        else
        {
            printf("期待店长的购入哦!");
            
            getchar();
        }
        
        return;
    }

    printf("店长需要购入多少: ");
    
    scanf("%d", &quantity);
    
    item->quantity += quantity;
    
    printf("购入成功!!\n");
    
    getchar();
    
}

//出货功能
void sell(struct TreeNode* root) 
{
    goodsmenu(root);
    
    int id, quantity;
    
    printf("请输入你要出货的物品编号: ");
    
    scanf("%d", &id);

    struct TreeNode* node = NULL;
    struct Item* item = NULL;

    // 查找物品是否存在
    node = root;
    while (node) 
    {
        if (id == node->item->id) 
        {
            item = node->item;
            break;
        } 
        else 
        if (id < node->item->id) 
        {
            node = node->left;
        } 
        else 
        {
            node = node->right;
        }
    }

    if (!item) 
    {
        
        printf("没找到货物呢,请好好看看\n");
        
        getchar();
        
        return;
    }

    printf("请输入要出货的数量: ");
    
    scanf("%d", &quantity);
    
    if (item->quantity < quantity) 
    {
        
        printf("库存不足,请补货在出货\n");
        
        getchar();
        
        getchar();
        
        return;
    }
    
    item->quantity -= quantity;
    
    printf("出货成功!\n");
    
    getchar();
    }
    
    
//存入更新的数据
void saveData(struct TreeNode * root)
{
    //用写的方式打开
    FILE* fp = fopen(ch, "w");
    
    saveTreeToFile(root,fp);
    
    fclose(fp);
}    
    

//将更新的数据保存到文件中
void saveTreeToFile(struct TreeNode* root,FILE *fp) 
{
    // 中序遍历存放BST数据
    if (root) 
    {
        //保存结点数据
        fprintf(fp,"%d,%s,%d,%d,%.2f,%s\n", 
        root->item->id, root->item->name, root->item->shelf, root->item->quantity, root->item->price, root->item->date);
                
        saveTreeToFile(root->left,fp);
            
        // 右子树
        saveTreeToFile(root->right,fp);
        }

    }

今天将管理系统的功能都实现了,在一直找毛病并修改毛病,现在已经基本完善

初始界面:

1.编号查找界面:

2.名称查找界面:

3.按进货时间查找界面:

4.货物总览界面:

5.货架管理界面:

6.进货界面:

当购入不存在的货物时会进行创建和新插入数据:

在咨询货物总览就会出现:

7.出货界面

8.退出系统会更新文件内容,下次打开就是修改后的内容。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
超市积分管理系统》该项目采用技术jsp、strust2、tomcat服务器、mysql数据库 开发工具eclipse,项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程    超市会员积分管理系统主要用于实现了企业管理数据统计等。本系统结构如下:(1)网络会员管理中心界面:       会员修改密码信息模块:实现会员密码功能;       会员登陆模块:实现会员登陆功能;       会员注册模块:实现会员注册功能;       留言板模块:实现留言板留言功能(2)后台管理界面:       系统用户管理模块:实现管理员的增加、查看功能;       会员信息管理模块:实现会员信息的增加、修改、查看功能;       注册用户管理模块:实现注册用户的增加、修改、查看功能;       会员卡管理模块:实现会员卡信息的增加、查看功能;       商品销售管理模块:实现商品信息的增加、查看功能;       会员积分管理模块:实现合作公司信息的增加、查看功能;       信息统计模块:实现数据统计报表功能;       留言板模块:实现留言板信息的增加、修改、查看功能; 课程目标:    1、学会各类开发软件安装、项目导入以及项目发布,含项目源码,需求文档,配套软件等    2、该项目主要功能完善,主要用于简历项目经验丰富,以及毕业设计或者二次开发    3、提供项目源码,设计文档、数据库sql文件以及所有配套软件,按照教程即可轻松实现项目安装部署 本课程为素材版,需要实战版代码讲解教程的同学可以点击如下链接:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572JavaWeb项目实战之宿舍管理系统https://edu.csdn.net/course/detail/26721JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习
无人超市管理系统是一个涉及到多个方面的系统,需要考虑到硬件设备、软件系统、数据库等方面。Python 作为一种流行的编程语言,可以用来开发无人超市管理系统的后端部分,用来处理数据、逻辑和算法。 下面简单介绍一下开发无人超市管理系统的几个方面: 1. 硬件设备 无人超市需要使用多种硬件设备,如智能门禁、摄像头、货架等。这些硬件设备需要与系统进行连接和交互,因此需要使用相应的硬件驱动和协议。Python 可以通过第三方库连接硬件设备,如使用 OpenCV 库连接摄像头。 2. 软件系统 无人超市管理系统的软件系统包括前端和后端两个部分。前端部分通常使用 HTML、CSS、JavaScript 等技术实现,后端部分则可以使用 Python 来进行开发。后端需要处理用户的请求,处理数据和逻辑,并与数据库进行交互。Python 可以使用 Flask、Django 等 Web 框架来开发后端。 3. 数据库 无人超市管理系统需要存储大量的数据,如商品信息、用户信息、交易记录等。因此需要使用数据库来管理数据。Python 可以使用 MySQL、PostgreSQL 等关系型数据库,也可以使用 MongoDB、Redis 等非关系型数据库。 总之,Python 作为一种强大的编程语言,可以用来开发无人超市管理系统的后端部分。但需要注意的是,开发无人超市管理系统需要考虑到多个方面,需要多方面的专业知识和技术,因此需要团队合作和多方面的协作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值