用c语言写一个小程序(只限于c语言)

11、小型商品信息及销售管理系统
设计一个商品信息及销售管理系统,模拟超市商品管理及销售流程。对商品信息进行分类:日用品,食品,电器
各类商品包括的信息有:编号,商品名称,商品类别,产地,供货商,单价,库存数量,采购日期。
系统实现下述功能:
(1)能录入商品信息
(2)能对商品信息进行查询
可以按编号,按商品名称,按商品类别,按供货商,按产地进行查询
(3)可以对商品信息进行修改,删除
(4)可以对新商品进行入库登记
销售单包含的信息如下:流水号,商品编号,销售数量,销售单价,销售日期,销售人员
(5) 商品销售:
要求:输入销售单,根据商品编号,读取并显示磁盘文件中的商品信息,根据销售数量,修改库存,
(6) 商品销售信息查询:
a)根据商品编号查询b)根据销售日期查询c)根据销售人员查询 (7)统计
a)日销售额b)月销售额c)季销售额d)月度销售排名e库存信息提醒
要求:界面友好,易于操作,采用二进制文件存储数据。

商品销售系统,结构体数组的常用操作

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1

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

//商品类型,也可以用枚举,为了便于读写文件,直接用宏定义
#define e_type_ryp (int)1 //日用品
#define e_type_sp (int)2  //食品
#define e_type_dq (int)3  //电器
//日期
typedef struct
{
    int y, m, d;
}Date; 

typedef struct
{
    int id; //编号
    char name[20];//商品名称
    int type; //商品类型
    char proAdd[20]; //产地
    char producer[20]; //供货商
    float price; //单价
    int kc; //库存
    Date tm; //采购日期
}Stuff;

typedef struct
{
    char id[10]; //流水号
    int proid; //商品编号
    int nmb; //销售数量
    float price; //销售单价
    Date tm; //销售日期
    char saler[20]; //销售人员
}SaleInfo;


const char* flieName = "stuff.dat"; //数据文件

//读文件
void ReadFile(Stuff a[], int* n)
{
    FILE* fp = 0;
    int i = 0;
    fp = fopen(flieName, "rb");
    if (fp == 0)
    {
        printf("文件打开失败\n");
        return ;
    }
    while (!feof(fp))
    {
        if (fread(&a[i], sizeof(Stuff), 1, fp) == 1)
            i++;
    }
    fclose(fp);
    *n = i;
}

//写文件
void WriteFile(Stuff a[], int n)
{
    int i;
    FILE* fp = fopen(flieName, "wb");
    for (i = 0; i < n; i++)
    {
        fwrite(&a[i], sizeof(Stuff), 1, fp);
    }
    fclose(fp);
}

//输入
void input(Stuff a[], int *n)
{
    int flag = 0;
    while (1)
    {
        printf("请输入商品编号:");
        scanf("%d", &a[*n].id);
        printf("请输入商品名称:");
        scanf("%s", a[*n].name);
        printf("请选择商品类别:1.日用品 2.食品 3.电器 \n");
        scanf("%d", &a[*n].type);
        printf("请输入产地:");
        scanf("%s", a[*n].proAdd);
        printf("请输入供应商:");
        scanf("%s", a[*n].producer);
        printf("请输入价格:");
        scanf("%f", &a[*n].price);
        printf("请输入库存:");
        scanf("%d", &a[*n].kc);
        printf("请输入采购日期 YYYY MM DD:");
        scanf("%d %d %d", &a[*n].tm.y, &a[*n].tm.m, &a[*n].tm.d);
        *n = (*n) + 1;
        printf("是否继续添加:(1.是  2.否):");
        scanf("%d", &flag);
        if (flag != 1)
            break;
    }
}

//显示商品信息标题
void showProTitle()
{
    printf("%-10s %-10s %-10s %-6s %-10s %-12s %-6s %-10s\n", "编号", "商品名称", "商品类型", "单价", "供应商", "供应商地址", "库存", "采购日期");
    printf("--------------------------------------------------------------\n");
}

//显示单条商品信息
void showSingleProduct(Stuff a)
{
    if(a.type == 1)
        printf("%-10d %-10s %-10s %-6.1f %-10s %-12s %-6d %-4d/%02d/%02d\n", a.id, a.name, "日用品", a.price, a.producer, a.proAdd, a.kc, a.tm.y, a.tm.m, a.tm.d);
    else if(a.type == 2)
        printf("%-10d %-10s %-10s %-6.1f %-10s %-12s %-6d %-4d/%02d/%02d\n", a.id, a.name, "食品", a.price, a.producer, a.proAdd, a.kc, a.tm.y, a.tm.m, a.tm.d);
    else if(a.type == 3)
        printf("%-10d %-10s %-10s %-6.1f %-10s %-12s %-6d %-4d/%02d/%02d\n", a.id, a.name, "电器", a.price, a.producer, a.proAdd, a.kc, a.tm.y, a.tm.m, a.tm.d);
}
//显示销售流水
void showSaleTitle()
{
    printf("%-10s %-10s %-10s %-10s %-10s %-10s\n", "销售单号", "商品编号", "销售单价", "销售数量", "销售日期", "销售员");
}

//显示单条销售流水
void showSingleSaleinfo(SaleInfo s)
{
    char buf[10] = { 0 };
    sprintf(buf, "%d/%02d/%02d", s.tm.y, s.tm.m, s.tm.d);
    printf("%-10s %-10d %-10.1f %-10d %-10s %-10s\n", s.id, s.proid, s.price, s.nmb, buf, s.saler);
}


//查询
void search_pro(Stuff a[], int n)
{
    int i, id, type;
    int op;
    char tmp[20] = { 0 };
    int flag = 0;

    while (1)
    {
        printf("1.按照编号查询\n");
        printf("2.按照商品名称查询\n");
        printf("3.按照商品类别查询\n");
        printf("4.按照供应商查询\n");
        printf("5.按照产地查询\n");
        printf("0.结束查询\n");
        scanf("%d", &op);
        flag = 0;
        showProTitle();
        switch (op)
        {
        case 0:
            return;
        case 1:
            printf("请输入商品编号:");
            scanf("%d", &id);
            for (i = 0; i < n;i++)
            {
                if (a[i].id == id)
                {
                    flag = 1;
                    showSingleProduct(a[i]);
                }
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 2:
            printf("请输入商品名称:");
            scanf("%s", tmp);
            for (i = 0; i < n; i++)
            {
                if (strcmp(a[i].name,tmp)==0)
                {
                    flag = 1;
                    showSingleProduct(a[i]);
                }
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 3:
            printf("请输入商品类型(1.日用品 2.食品 3.电器):");
            scanf("%d", &type);
            for (i = 0; i < n; i++)
            {
                if (a[i].type == type)
                {
                    flag = 1;
                    showSingleProduct(a[i]);
                }
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 4:
            printf("请输入供应商名称:");
            scanf("%s", tmp);
            for (i = 0; i < n; i++)
            {
                if (strcmp(a[i].producer, tmp) == 0)
                {
                    flag = 1;
                    showSingleProduct(a[i]);
                }
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 5:
            printf("请输入产地:");
            scanf("%s", tmp);
            for (i = 0; i < n; i++)
            {
                if (strcmp(a[i].proAdd, tmp) == 0)
                {
                    flag = 1;
                    showSingleProduct(a[i]);
                }
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;

        }
    }
    
}

//修改
void Mod(Stuff a[], int n)
{
    int i;
    int id; //根据编号对商品信息进行修改
    printf("请输入需要修改商品的编号:");
    scanf("%d", &id);
    for (i = 0; i < n; i++)
    {
        if (a[i].id == id)
        {
            showProTitle();
            showSingleProduct(a[i]);
            break;
        }
    }
    printf("--------------------------------------------------------------\n");
    if (i < n)
    {
        printf("请输入商品名称:");
        scanf("%s", a[i].name);
        printf("请选择商品类别:1.日用品 2.食品 3.电器 \n");
        scanf("%d", &a[i].type);
        printf("请输入产地:");
        scanf("%s", a[i].proAdd);
        printf("请输入供应商:");
        scanf("%s", a[i].producer);
        printf("请输入价格:");
        scanf("%f", &a[i].price);
        printf("请输入库存:");
        scanf("%d", &a[i].kc);
        printf("请输入采购日期 YYYY MM DD:");
        scanf("%d %d %d", &a[i].tm.y, &a[i].tm.m, &a[i].tm.d);

        printf("修改完成!\n");
    }
    else
        printf("未找到该商品\n");

}



//删除
void Del(Stuff a[], int *n)
{
    int i, flag, j;
    int id; //根据编号对商品信息进行修改
    printf("请输入需要删除商品的编号:");
    scanf("%d", &id);
    for (i = 0; i < *n; i++)
    {
        if (a[i].id == id)
        {
            showProTitle();
            showSingleProduct(a[i]);
            break;
        }
    }
    printf("--------------------------------------------------------------\n");
    if (i < *n)
    {
        printf("确认要删除该商品吗(1.是 2.否) ");
        scanf("%d", &flag);
        if (flag == 1)
        {
            for (j = i; j < *n - 1; j++)
                a[j] = a[j + 1];
            *n = (*n) - 1;
            printf("修改完成!\n");
        }
        
    }
    else
        printf("未找到该商品\n");

}
//登记入库(跟录入功能一样)
void regist(Stuff a[], int* n)
{
    input(a, n);
}

//商品销售
void Sale(Stuff a[], int n, SaleInfo sa[], int* ns)
{
    int nmb, i, kc = 0;
    int flag = 0;
    while (1)
    {
        printf("请输入销售单号:");
        scanf("%s", sa[*ns].id);
        printf("请输入商品编号:");
        scanf("%d", &sa[*ns].proid);
        //自动获取商品的价格
        for (i = 0; i < n; i++)
        {
            if (a[i].id == sa[*ns].proid)
            {
                sa[*ns].price = a[i].price;
                kc = a[i].kc;
                break;
            }
        }
        if (i == n)
        {
            printf("没有该商品\n");
            return;
        }
        while (1)
        {
            printf("请输入销售数量:");
            scanf("%d", &nmb);
            if (nmb > kc)
                printf("库存不足,");
            else
                break;
        }
        sa[*ns].nmb = nmb;

        a[i].kc -= nmb; //库存减少

        printf("请输入销售日期 YYYY MM DD :");
        scanf("%d %d %d", &sa[*ns].tm.y, &sa[*ns].tm.m, &sa[*ns].tm.d);
        printf("请输入销售人员:");
        scanf("%s", sa[*ns].saler);
        *ns = (*ns) + 1;

        printf("是否继续销售  1.是 2.否  :");
        scanf("%d", &flag);
        if (flag != 1)
            break;
    }
}

//销售查询
void sale_search(SaleInfo sa[], int n)
{
    int i, op, id, flag = 0;
    char name[20];
    Date dt;
    while (1)
    {
        printf("1.根据商品编号查询\n");
        printf("2.根据销售日期查询\n");
        printf("3.根据销售员查询\n");
        printf("0.结束查询\n");
        scanf("%d", &op);
        flag = 0;
        switch (op)
        {
        case 0: return;
        case 1:
            printf("请输入商品编号:");
            scanf("%d", &id);
            showSaleTitle();
            for (i = 0; i < n; i++)
            {
                if (sa[i].proid == id)
                {
                    flag = 1;
                    showSingleSaleinfo(sa[i]);
                }
                    
            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 2:
            printf("请输入销售日期 YYYY MM DD:");
            scanf("%d %d %d", &dt.y, &dt.m, &dt.d);
            showSaleTitle();
            for (i = 0; i < n; i++)
            {
                if (sa[i].tm.y == dt.y && sa[i].tm.m == dt.m && sa[i].tm.d == dt.d)
                {
                    flag = 1;
                    showSingleSaleinfo(sa[i]);
                }

            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        case 3:
            printf("请输入销售员姓名:");
            scanf("%s", name);
            showSaleTitle();
            for (i = 0; i < n; i++)
            {
                if (strcmp(sa[i].saler,name)==0)
                {
                    flag = 1;
                    showSingleSaleinfo(sa[i]);
                }

            }
            if (flag == 0)
                printf("未找到该商品\n");
            break;
        }
    }
}


//统计
void caculate(Stuff a[], int n,SaleInfo sa[], int ns)
{
    int i, op;
    float sum = 0;
    int y, m, d;
    while (1)
    {
        printf("1.按日统计\n");
        printf("2.按月统计\n");
        printf("3.按季度统计\n");
        printf("4.库存提醒\n");
        printf("0.退出\n");
        scanf("%d", &op);
        sum = 0;
        switch (op)
        {
        case 0:return;
        case 1:
            printf("请输入日期:");
            scanf("%d %d %d", &y, &m, &d);
            for (i = 0; i < ns; i++)
            {
                if (sa[i].tm.y == y && sa[i].tm.m == m && sa[i].tm.d == d)
                    sum += sa[i].price * sa[i].nmb;
            }
            printf("日销售额:%.2f\n", sum);
            break;
        case 2:
            printf("请输入年份和月份:");
            scanf("%d %d", &y, &m);
            for (i = 0; i < ns; i++)
            {
                if (sa[i].tm.y == y && sa[i].tm.m == m )
                    sum += sa[i].price * sa[i].nmb;
            }
            printf("月销售额:%.2f\n", sum);
            break;
        case 3:
            printf("请输入年份和季度(1-4):");
            scanf("%d %d", &y, &m);
            if (m == 1)
            {
                for (i = 0; i < ns; i++)
                {
                    if (sa[i].tm.y == y && sa[i].tm.m <= 3 )
                        sum += sa[i].price * sa[i].nmb;
                }
            }
            else if (m == 2)
            {
                for (i = 0; i < ns; i++)
                {
                    if (sa[i].tm.y == y && sa[i].tm.m >= 4 && sa[i].tm.m <= 6)
                        sum += sa[i].price * sa[i].nmb;
                }
            }
            else if (m == 3)
            {
                for (i = 0; i < ns; i++)
                {
                    if (sa[i].tm.y == y && sa[i].tm.m >= 7 && sa[i].tm.m <= 9)
                        sum += sa[i].price * sa[i].nmb;
                }
            }
            else if (m == 4)
            {
                for (i = 0; i < ns; i++)
                {
                    if (sa[i].tm.y == y && sa[i].tm.m >= 10 && sa[i].tm.m <= 12)
                        sum += sa[i].price * sa[i].nmb;
                }
            }
            
            printf("第%d季度销售额:%.2f\n",m, sum);
            break;
        case 4:
            for (i = 0; i < n; i++)
            {
                if (a[i].kc <= 10) //库存小于等于10,就进行tix
                {
                    printf("编号为 %d 的商品库存不足\n", a[i].id);
                }
            }
            break;
        }
        
    }
}


int main()
{
    int op;
    Stuff stu[100];
    int stunmb = 0; //货物数量
    SaleInfo sl[1000];
    int slnmb = 0; //销售信息条数

    //读取文件
    ReadFile(stu, &stunmb);

    while (1)
    {
        system("cls"); //清屏
        printf("1.录入商品\n");
        printf("2.商品查询\n");
        printf("3.商品修改\n");
        printf("4.商品删除\n");
        printf("5.商品入库\n");
        printf("6.商品销售\n");
        printf("7.销售统计\n");
        printf("0.退出系统\n");
        scanf("%d", &op);
        switch (op)
        {
        case 0:
            return 0;
        case 1:
            input(stu, &stunmb);
            WriteFile(stu, stunmb); //录入后写入文件
            break;
        case 2:
            search_pro(stu, stunmb);
            break;
        case 3:
            Mod(stu, stunmb);
            break;
        case 4:
            Del(stu, &stunmb);
            break;
        case 5:
            regist(stu, &stunmb);
            break;
        case 6:
            Sale(stu, stunmb, sl, &slnmb);
            break;
        case 7:
            caculate(stu, stunmb, sl, slnmb);
            break;
        }
    }
    return 0;
}

你这个是大学作业??

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632