#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++