简易商品管理系统

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100//数组最大数量 
struct date{
    int year;//年 
    int month;//月 
    int day;//日 
};
struct item/*结构体定义*/ 
{
    char id[N];//商品编号 
    char name[100];//商品名称
    char kind[50];//商品种类
    double price;//商品单价 
    date birthday;//商品生产日期 
    int number;//商品数量 
};

//函数声明 
void menu();//菜单函数 
void preview(struct item *p,int n);//商品信息预览 
void input(struct item *p,int n); //输入商品信息
void sort1(struct item *p,int n); //商品排序(按编号)
void sor(struct item *p,int n);// 商品排序(按单价)
int insert(struct item *p,int &n);//商品插入函数 
void delet(struct item *p,int &n);//商品删除函数
void output(item *p,int n);//按编号查找商品信息 
void out(item *p,int n);//按名称查找商品信息 
void toprice(item *p,int n);//计算商品总价和找零 
int main()//主函数 

int f;
struct item a[N]; int n;//要买商品数量n 
printf("******************************\n"); 
printf("*****欢迎进入超市管理系统*****\n"); 
printf("******************************\n"); 
while(1)
{
    int choic;
    menu();//显示主菜单
    scanf("%d",&choic);//输入选择 
    printf("输入商品件数\n");
     scanf("%d",&n);
    switch(choic)
{
    case 0:
        preview(a,n);//商品信息预览 
        break;
    case 1 :
        input(a,n);//输入商品信息
    break;
    case 2:
        sort1(a,n);//商品排序(按编号)
    break;
    case 3:
        sor(a,n);// 商品排序(按单价) 
    break;
    case 4:
        insert(a,n);//商品插入函数 
    break;
    case 5:
     delet(a,n);//商品删除函数
     break;
    case 6:
        printf("请选择商品查询方式:1 按编号查询  其他  按名称查询\n");
        scanf("%d",&f);
        if(f==1)//如果f为1,按编号查找商品,否则按名称查找商品 
        {
            printf("请输入需要查找的商品编号:\n");
        output(a,n);//显示商品信息 
        }
        else
        {
            printf("请输入需要查找商品的名称:\n");
            out(a,n);//显示商品信息
        }
    break; 
    case 7:
        toprice(a,n);//计算所购商品总价与找零 
    break;
    case 8:
        system("CLS");//作用:清空屏幕 
        printf("谢谢您的使用,再会!\n");
    return 0;//直接结束整个程序运行 
    default:
    printf("错误操作,请重新选择!\n"); 
    
}
}
    return 0;
 }
 //输入商品总价 
 void toprice(item *p,int n)
 {
     int pay;//顾客支付的钱 
     double sum=0;
     for(int i=0;i<n;i++)
     {
         sum=sum+p[i].price*p[i].number ;//所有商品单价与数目的乘积的和 
     }
     printf("应收:%.2lf\n",sum);
     printf("实收:");
     scanf("%d",&pay);
     double q=pay-sum;
     printf("找零:%.2lf",q);
 }
//显示目标商品信息(按编号) 
 /*void output(item *p,int n)
 {
     char g[10];int c=0;
     scanf("%s",&g);
     for(int i=0;i<n;i++)
     {
     if(strcmp(p[i].id,g)==0)
     {
         printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[i].id ,p[i].name ,p[i].kind ,p[i].price ,p[i].number ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day );
     c++;//判断要寻找的商品是否存在,一旦存在c自动加1 
     }
     }
     if(c==0)
     printf("目标商品不存在\n");
 }*/
void output(item *p,int n)
{
    char g[10];int c=0;
     scanf("%s",&g);
    int low=0,hight=n-1,mid;
    while(low<=hight)
    {
        mid=(low+hight)/2;
        if(strcmp(p[mid].id,g)==0)
        {
        printf("查找成功!\n");
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[mid].id ,p[mid].name ,p[mid].kind ,p[mid].price ,p[mid].number ,p[mid].birthday.year ,p[mid].birthday.month ,p[mid].birthday.day );
        break;
        }
        else
        {
            if(strcmp(p[mid].id,g)>0)
            hight=mid-1;
            else
            low=mid+1;
        }
        if(low>hight)
        printf("目标商品不存在!\n");
    }
 } 
// 显示目标商品信息(按名称)
/*void out(item *p,int n)
{
    char m[30]; int q=0;
    scanf("%s",&m);
        for(int i=0;i<n;i++)
     {
         if(strcmp(p[i].name,m)==0)
         {
             printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[i].id ,p[i].name ,p[i].kind ,p[i].price ,p[i].number ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day );
             q++;//作用同上 
         }
     }
     if(q==0)
     printf("目标商品不存在\n");
}*/
void out(item *p,int n)
{
    char m[30]; int q=0;
    scanf("%s",&m);
    int low=0,hight=n-1,mid;
    while(low<=hight)
    {
        mid=(low+hight)/2;
        if(strcmp(p[mid].name ,m)==0)
        {
        printf("查找成功!\n");
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[mid].id ,p[mid].name ,p[mid].kind ,p[mid].price ,p[mid].number ,p[mid].birthday.year ,p[mid].birthday.month ,p[mid].birthday.day );
        break;}
        else
        {
            if(strcmp(p[mid].name ,m)>0)
            hight=mid-1;
            else
            low=mid+1;
        }
        if(low>hight)
        printf("目标商品不存在!\n");
    }
}
//删除商品 
void delet(struct item *p,int &n)
{
    char x[100];
    printf("请输入要删商品的编号:\n");//利用编号删除商品信息 
    scanf("%s",&x);
    int c=0,i,f;
    for(i=0;i<n;i++)
    {
    if(strcmp(p[i].id ,x)==0)
    {
        c++;
        f=i;break;
    }
    }
    if(c==0)
     {
     printf("无法找到对应商品!\n");
     }
     else
     {
         for(int i=f+1;i<n;i++)
    {
        p[i-1]=p[i];
    }
    n--;
    printf("删除成功\n");
     }
    for(int j=0;j<n;j++)
    {
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[j].id ,p[j].name ,p[j].kind ,p[j].price ,p[j].number ,p[j].birthday.year ,p[j].birthday.month ,p[j].birthday.day );
    }
}
//插入新商品 
int insert(struct item *p,int &n)
{
    if(n==N)
    {
        printf("空间已满,无法添加新货物!");
        return 0; 
     } 
     printf("请输入新商品信息:\n");
        printf("编号:");
         scanf("%s",&p[n].id); 
         printf("名称:");
         scanf("%s",&p[n].name );
         printf("种类:");
         scanf("%s",&p[n].kind );
         printf("单价:");
         scanf("%lf",&p[n].price);
         printf("数量:");
         scanf("%d",&p[n].number);
         printf("生产日期:");
         scanf("%d年%d月%d日",&p[n].birthday.year ,&p[n].birthday.month ,&p[n].birthday.day  ); 
     n++;//增加一件商品数组多1 
     return 1;
}
//按单价进行商品排序 (升序)
 void sor(struct item *p,int n)
{
    printf("排序结果为:\n");
    struct item t;
    for(int i=0;i<n-1;i++)//冒泡法排序 
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(p[j].price >p[j+1].price )
            {
                t=p[j]; p[j]=p[j+1];p[j+1]=t;
            }
        }
    }
    printf("编号     名称     种类     单价     数量       生产日期\n");
    for(int i=0;i<n;i++)
    {
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[i].id ,p[i].name ,p[i].kind ,p[i].price ,p[i].number ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day );
    }
}
//按编号进行商品排序 (升序)
void sort1(struct item *p,int n)
{
    printf("排序结果为:\n");
    struct item e;
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)//仍为冒泡法排序 
        {
            if(strcmp(p[j].id, p[j+1].id) >0)
            {
                e=p[j]; p[j]=p[j+1];p[j+1]=e;//e与p同为item类型可以直接相互赋值 
            }
        }
    }
    printf("编号     名称     种类     单价  数量          生产日期\n");
    for(int i=0;i<n;i++)
    {
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[i].id ,p[i].name ,p[i].kind ,p[i].price ,p[i].number ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day );
    }
}
//商品信息输入 
 void input(struct item *p,int n)  
 {
     printf("请输入商品信息\n");
     for(int i=0;i<n;i++)
     {
         printf("第%d件商品\n",i+1);
         printf("编号:");
         scanf("%s",&p[i].id); 
         printf("名称:");
         scanf("%s",&p[i].name );
         printf("种类:");
         scanf("%s",&p[i].kind );
         printf("单价:");
         scanf("%lf",&p[i].price);
         printf("数量:");
         scanf("%d",&p[i].number);
         printf("生产日期:");
         scanf("%d年%d月%d日",&p[i].birthday.year ,&p[i].birthday.month ,&p[i].birthday.day  ); 
    }
    if(n>N)
    printf("超过购买限制,请重新操作\n");
 }
 //商品信息预览 (显示所输入的所有商品信息) 
void preview(struct item *p,int n)
{
    int c=0;
    for(int i=0;i<n;i++)
    {
        printf("%s       %s     %s     %.2lf  %d         %d 年 %d 月 %d 日\n",p[i].id ,p[i].name ,p[i].kind ,p[i].price ,p[i].number ,p[i].birthday.year ,p[i].birthday.month ,p[i].birthday.day );
    }
    for(int j=0;j<n;j++)
    {
        if(p[j].number==0)
        {
            printf("编号:%s库存不足\n",p[j].id );
            printf("请注意补货\n");
         }
    }
}
void menu()
{
    printf("请选择下列数字获得服务\n");
    printf("------------------------------------------------------------------------------------\n");
    printf("0.商品信息预览\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");
}

编译器:DEV-C++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值