通讯录系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUM 2//为了方便,这里限制两个商品
struct item{
 char brand[20];//商品名称
 char id[10];//商品编号
 float in_price;//进货价格
 float out_price;//售货价格
 int Inamount;  //进货量
 int   Outamount;//剩余量
};
struct item_node{
 struct item wanted;
 int    amount;
 struct item_node *next;
};

int menu();
void establish();
void display_all();//列出所有商品
void shop_cart();
int  cart_menu();
void add();
void display();//列出购物车里的商品
void calculate();
void Market();

struct item goods[NUM];
struct item_node *cart;


int main()
{
 system("COLOR 8a");
 printf("***********************************\n");
 printf("     欢迎进入超市管理系统          \n");
 printf("***********************************\n");
 while(1)
 {
  switch(menu())
  {
  case 1:
   establish();
   break;
  case 2:
   display_all();
   break;
  case 3:
   shop_cart();
   break;
  case 4:
   calculate();
   break;
  case 5:
   fflush(stdin);
   Market();
   break;
  case 6:
   printf("感谢使用,再见!\n");
   exit(0);
  }
 }
}

int menu()
{
 char str[5];
 int  select;
 printf("\n\n请选择数字进行操作\n");
 printf("1.建立库存信息\n");
 printf("2.显示所有商品信息\n");
 printf("3.加入购物车\n");
 printf("4.结算\n");
 printf("5.计算利润\n");
 printf("6.退出\n");
 printf("请选择对应数字1--5");
 while(1)
 {
  gets(str);
  select=atoi(str);
  if(select<1||select>6)
   printf("输入错误,请重新输入:");
  else
   break;
 }
 return select;
}

void display_all()
{
  int i;
  FILE  *fp;
  fp=fopen("goods","r");
  for(i=0;(fread(goods+i,sizeof(struct item),1,fp))!=0;i++)
  {
   printf("---------------------------------\n");
   printf("货品 品名  单价       库存量   进货量\n");
   printf("%s%7s%7.2f%8d%8d\n",goods[i].id,goods[i].brand,goods[i].out_price,goods[i].Outamount,goods[i].Inamount);

  }
  fclose(fp);
}


void shop_cart()
{
 while(1)
 {
  switch(cart_menu())
  {
  case 1:
   display();
   break;
  case 2:
   add();break;
  case 3:
   return;
  }
 }
}
int  cart_menu()
{
 char  str[5];
 int   select;
 printf("\n请选择操作\n");
 printf("-----------------------\n");
 printf("1.显示当前购物列表\n");
 printf("2.添加商品\n");
 printf("3.退出\n");
 printf("-----------------------\n\n");
 while(1)
 {
  gets(str);
  select=atoi(str);
  if(select<1||select>3)
   printf("输入错误,请重新输入:");
  else
   break;
 }
 return select;
}

void display()
{
 struct item_node *p=cart;
 if(p==NULL){
  printf("购物车为空\n");
  return ;
 }
 while(p!=NULL){
  printf("----------------------------------\n");
  printf("货号                品名  单价   数量\n");
  printf("%10s%20s%7.2f%8d\n",p->wanted.id,p->wanted.brand,p->wanted.out_price,p->amount);
  p=p->next;
 }
}

void add()
{
 FILE *fp;
 int   i,n;
 char  str[20];
 char  choice1,choice2;
 struct item_node *p,*p1;
 do
 {
  printf("输入所需物品的名称或货号: ");
  fflush(stdin);
  gets(str);
  if((fp=fopen("goods","r"))==NULL){
   printf("打开文件失败\n");
   continue;
  }
  for(i=0;fread(goods+i,sizeof(struct item),1,fp)!=0;i++){
   if((strcmp(goods[i].brand,str)==0||strcmp(goods[i].id,str)==0)&&goods[i].Outamount!=0){
    printf("已经找到所需物品:  \n");
    printf("---------------------\n");
    printf("货号  品名  单价  库存量\n");
    printf("%s%6s%3.2f%4d\n",goods[i].id,goods[i].brand,goods[i].out_price,goods[i].Outamount);
    printf("请输入所需数量: ");
    scanf("%d",&n);
    if(n>goods[i].Outamount){
     printf("库存不足\n");
     break;
    }
    printf("\n是否购买?(Y/N)");
    fflush(stdin);
    choice1=getchar();
    if(choice1=='Y'||choice1=='y')
    {
     p1=(struct item_node*)malloc(sizeof(struct item_node));
     if(p1==NULL){
      printf("内存申请失败!\n");
      exit(1);
     }
     p1->amount=n;
     p1->wanted=goods[i];
     p1->next=NULL;
     p=cart;
     if(cart==NULL)
      cart=p1;
     else{
      while(p->next!=NULL)
       p=p->next;
      p1->next=p->next;
      p->next=p1;
     }
    }
    break;
   }
  }
  if(i==NUM)
   printf("未找到所需物品\n");
  fclose(fp);
  printf("是否继续购物?(Y/N)");
  choice2=getchar();
 }while(choice2=='Y'||choice2=='y');
}
int Load()
{
 int i,n;
 FILE *fp;
 if((fp=fopen("goods","ab"))==NULL)
 {
  printf("can not open file\n"); 
  exit(1); 
 }
 fscanf(fp,"%d",&n); /*读入记录数*/
 for(i=0;fread(goods+i,sizeof(struct item),1,fp)!=0;i++)
  fscanf(fp,"%s%7s%7.2f%7.2f%8d%8d",goods[i].brand,goods[i].id,goods[i].in_price,goods[i].out_price,goods[i].Inamount,goods[i].Outamount); /*按格式读入记录*/
 fclose(fp); 
 printf("You have success read data from file!!!\n"); /*显示保存成功*/
 system("pause");
 return n;
}

void  establish()
{
 FILE *fp;
 int   i;
 printf("请依次输入货物信息:\n");
 printf("----------------------------\n");
 for(i=0;i<NUM;i++)
 {
  printf("品名: ");
  fflush(stdin);
  gets(goods[i].brand);
  printf("货号: ");
  gets(goods[i].id);
  printf("进价: ");
  scanf("%f",&goods[i].in_price);
  printf("售价: ");
  scanf("%f",&goods[i].out_price);
  printf("剩余量: ");
  scanf("%d",&goods[i].Outamount);
  printf("进货量: ");
  scanf("%d",&goods[i].Inamount);
  printf("\n");
 }
 if((fp=fopen("goods","w"))==NULL){
  printf("创建文件失败.\n");
  return;
 }
 fwrite(goods,sizeof(struct item),NUM,fp);
 fclose(fp);
}

void calculate()
{
 float total=0,pay;
 struct item_node *p;
 int   i;
 FILE   *fp;
 printf("以下是购物清单:  \n");
 display();
 if((fp=fopen("goods","r"))==NULL){
  printf("打开文件失败:  \n");
  return;
 }
 for(i=0;(fread(goods+i,sizeof(struct item),1,fp))!=0;i++);
 fclose(fp);
 p=cart;
 while(p!=NULL){
  total+=p->wanted.out_price*p->amount;
  for(i=0;strcmp(goods[i].id,p->wanted.id)!=0;i++);
  goods[i].Outamount-=p->amount;
  p=p->next;

 }
 printf("总计 %7.2f",total);
 printf("\n输入实付金额: ");
 scanf("%f",&pay);
 printf("实付:         %7.2f    找零:          %7.2f",pay,pay-total);
 if((fp=fopen("goods","w"))==NULL){
  printf("打开文件失败.\n");
  return;
 }
 fwrite(goods,sizeof(struct item),NUM,fp);
 fclose(fp);
}

void Market()
{
 int i;
 FILE *fp;
 float sumprofit = 0.00;
 int sales;
 float mprofit;
 float profit;
 if((fp=fopen("goods","r"))==NULL){
   printf("打开文件失败\n");
  }
 for(i=0;fread(goods+i,sizeof(struct item),1,fp)!=0;i++)
  fscanf(fp,"%s%7s%7.2f%7.2f%8d%8d",goods[i].brand,goods[i].id,goods[i].in_price,goods[i].out_price,goods[i].Inamount,goods[i].Outamount); /*按格式读入记录*/

 for(int j=0;j<=i;j++)
 {
  sales = goods[i].Inamount - goods[i].Outamount;
  profit = sales * ( goods[i].out_price - goods[i].in_price);
  printf( "商品名称:%s\n",goods[i].brand);
  printf( "商品编号:%s\n",goods[i].id);
  printf( "商品进价:%.2f元\n",goods[i].in_price);
  printf( "商品售价:%.2f元\n",goods[i].out_price);
  printf( "商品剩余:%d\n",goods[i].Outamount);
  printf( "商品销量:%d\n",sales);
  printf( "商品利润:%.2f元\n\n",profit);
  sumprofit  += profit;
 }
 printf( "总利润:%.2f元\n" ,sumprofit);
 system( "pause" );
 system( "cls" );
}

转载于:https://www.cnblogs.com/hqcao/archive/2012/11/22/2782003.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值