基于C语言的超市系统(一)

第1章 概述

一、设计开发超市系统的背景和意义

在我国超市形成在20世纪90年代初期,现在已经成为我国零售业的一种重要形态,为国民经济的发展发挥了重要的作用。随着超市高速的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售也的发展,这样就迫切地需要引入新的管理技术。超市形态具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足。随着超市形态的高速发展,其营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。

二、超市系统的主要任务和功能

我们通过设计与应用超市管理系统,进行商品信息的录入商品信息删除、商品信息修改、商品信息查询、商品信息浏览等功能依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改善员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效。

三、数据结构和算法以及创新点和特色

该系统主要使用C语言,基于结构体,完成通常信息管理系统中常见功能。运用结构体来储存不同类型数据,并通过构造和调用函数来运行程序,还有构造文件来储存超市信息。使用者可以通过在程序运行时构建了数据文件,可以随时进行商品数据的修改以及删除。系统的界面还可以根据用户的喜好更换成任意颜色。

系统分析

一、应用场景进行需求分析

在现在的日常生活中,超市是我们购买商品的主要场所,而我们如果要保证超市的正常运行以及获取一定的利润,我们就要对超市的商品信息进行管理,要保持商品一定库存量保证卖场不会出现缺货少货,又要防止库存量过大加大仓库压力或是导致商品积压,增加商品因发现不及时出现临期过期等事情发生,这会提高公司损耗率,增加公司运营成本和损失。

二、功能模块

本模块的主要功能是商品信息的查询和更新,库存信息的查询和更新。

(1)查询商品信息:我们可以根据商品的编号或者名称查询它的所有信息。主要功能查询商品的明细信息如商品名称编号、价格产地、数量和它的库存信息等等

2添加商品信息:主要功能添加新进的商品统计商品的各种信息,我们通过输入商品编号来添加信息,如果编号重复则需要重新输入,如果没有重复可以继续添加也可以返回菜单

3修改商品信息:主要功能是修改商品的信息包括他的库存数量价格等等

4删除商品信息:主要功能是删除不再销售的商品信息。

6系统颜色设置:用户根据自己的喜好设置界面颜色,如果设置成功将返回主菜单,若不满可以继续设置。

5商品信息浏览:我们可以浏览超市所有商品的信息。

第3章 设计与实现

根据上述系统分析的结果,确定主程序的流程、各模块之间的层次(调用)关系,说明程序中关键部分所采用的数据组织方式、程序控制结构、数据库表结构以及尽可能高效的算法设计方案(尤其在数据量很大或需要考虑的步骤过多时)。画出主程序流程图、模块层次关系或调用图、数据流图、数据库表结构等,并实现概要设计中提出的关键的数据类型、数据结构、数据库表结构和算法,只需列出关键步骤的伪代码。

一、主程序的流程

  1. 实现欢迎页面;
  2. 进入系统菜单;
  3. 选择服务类型(新增商品信息、删除商品信息、修改商品信息、查询商品信息、浏览商品信息、修改系统颜色、退出系统
  4. 清空屏幕;
  5. 执行相应指令;
  6. 结束系统。

二、主程序流程图

 

三、关键步骤的伪代码

1新增商品信息

void addGoods()
{
system("cls");
char zf;
struct Goods good;
FILE*f;
f=fopen("good.data","ab");
printf("\t------------------------------------------\n\n");
printf("\t--------☆欢迎使用超市库存管理系统☆--------\n\n");
printf("\t--------------[新增商品信息]--------------\n\n");
printf("\t            ☆请输入商品编号:");
scanf("%d",&good.code);
int check=checkCode(good.code);
if(check==1)
{
    printf("\n\n您输入的编号重复了,请按任意键重新录入...");
    getchar();
    addGoods();
}
printf("\t            ☆请输入商品名称:");
scanf("%s",good.name);
printf("\t            ☆请输入商品产地:");
scanf("%s",good.producer);
printf("\t            ☆请输入商品数量:");
scanf("%d",&good.count);
printf("\t            ☆请输入商品单价:");
scanf("%f",&good.price);
printf("\t------------------------------------------\n\n");
printf("\t 您输入的信息是:\n");
printf("\t 编号:%d  名称:%s  产地:%s  数量:%d  单价:%f\n\n",good.code,good.name,good.producer,good.count,good.price);
fwrite(&good,sizeof(struct Goods),1,f);//
fclose(f);/*将数据流关闭*/
printf("\t            ☆数据保存成功☆\n\n");
printf("\t 您保存的数据是:\n\t 编号:%d  名称:%s  产地:%s  数量:%d  单价:%f\n\n",good.code,good.name,good.producer,good.count,good.price);
printf("\t 是否继续新增加数据? (y/n) o(* ̄▽ ̄*)o  \n");
getchar();
scanf("%c",&zf);
if(zf=='y'||zf=='Y')
{
    addGoods();
}
  else
 {
    menu();
 }
}

2删除商品信息

void deleteGoods()
{
   /*输入要删除的编号;读取所有的数据放入到数组中;排除输入的编号;将非排除项写道文件中*/
   system("cls");
   int input_code,i;
   char ff;
   struct Goods good;
   struct Goods goodArr[300];
   int index=0;
   printf("\t--------☆欢迎使用超市库存管理系统☆--------\n\n");
   printf("\t--------------[删除商品信息]---------------\n\n");
   printf("\t 请输入您要删除的商品编号:");
   scanf("%d",&input_code);
   FILE* f;
   f=fopen("good.data","r");
   if(f==NULL)
   {
       f=fopen("good.data","a");
       fclose(f);
       f=fopen("good.data","r");
   }
   while(!feof(f))
   {
       int size=fread(&good,sizeof(struct Goods),1,f);
       if(size==0)break;
       goodArr[index]=good;
       index++;
   }
   fclose(f);
   f=fopen("good.data","wb");
   /*排除掉输入的编号*/
   for(i=0;i<index;i++)
   {/*如果匹配桑就要排除掉,如果没有匹配掉就写入新的文件中*/
       if(input_code!=goodArr[i].code)
       {
         fwrite(&goodArr[i],sizeof(struct Goods),1,f);
       }
       else
       {
    printf("\n\n\t-----------------删除商品(%d)------------------\n\n",i+1);
    printf("\t                ☆商品编号:%10d                \n",goodArr[i].code);
    printf("\t                ☆商品名称:%10s                \n",goodArr[i].name);
    printf("\t                ☆商品产地:%10s                \n",goodArr[i].producer);
    printf("\t                ☆商品数量:%10d                \n",goodArr[i].count);
    printf("\t                ☆商品单价:%10.2f                \n",goodArr[i].price);
    printf("\t-----------------------------------------------\n\n");
       }
   }
   fclose(f);
     printf("\t 是否继续删除?(y/n)\n");
     getchar();
     scanf("%c",&ff);
     if(ff=='y'||ff=='Y')
     {
        deleteGoods();
     }
     else
     {
         menu();
     }
}

 3编辑商品信息

void cditGoods()
{
    system("cls");
    char ff;
    int input_code,check_index=0,index=0,i;
    struct Goods good;
    struct Goods goodArr[100];
    /*提示用户输入编号*/
    printf("\t--------------修改商品信息------------------\n\n\n\n");
    printf("\t\t请输入商品编号:");
     scanf("%d",&input_code);
     FILE* f;//确保文件存在
    f=fopen("good.data","r");//打开并读取文件
    if(f==NULL)//文件不存在的话就会返回null
    {
       f=fopen("good.data","a");//w是删除原文件在重新创建
    /*而用a是追加可以在往后创建一个创建*/
       fclose(f);//创建后关闭文件
       f=fopen("good.data","r");//从新读取文件
    }
    /*从文件中取出内容*/
     while(!feof(f))//打开的为新创建的文件
   {
       int size=fread(&good,sizeof(struct Goods),1,f);
       if(size==0)break;
       goodArr[index]=good;
       index++;
   }
   fclose(f);
       for(i=0;i<index;i++)
   {/*如果匹配桑就要排除掉,如果没有匹配掉就写入新的文件中*/
       if(input_code==goodArr[i].code)
       {
         check_index++;
    printf("\n\n\t--------------修改商品信息------------------\n\n");
    printf("\t                ☆商品编号:%10d                \n",goodArr[i].code);
    printf("\t                ☆商品名称:%10s                \n",goodArr[i].name);
    printf("\t                ☆商品产地:%10s                \n",goodArr[i].producer);
    printf("\t                ☆商品数量:%10d                \n",goodArr[i].count);
    printf("\t                ☆商品单价:%10.2f                \n",goodArr[i].price);
    printf("\t----------------请输入指定商品信息------------------------\n\n");
    printf("\t            ☆请输入商品名称:");
    scanf("%s",goodArr[i].name);
    printf("\t            ☆请输入商品产地:");
    scanf("%s",goodArr[i].producer);
    printf("\t            ☆请输入商品数量:");
    scanf("%d",&goodArr[i].count);
    printf("\t            ☆请输入商品单价:");
    scanf("%f",&goodArr[i].price);
       break;
       }
   }
   /*遍历数组--找到要求改的内容,修改数据*/
   /*保存数组*/
   /*输入的编号没有匹配数据*/
   if(check_index==0)
   {
       printf("\t----没有找到您要修改的数据,是否重新输入?(y\n");
       getchar();
       scanf("%c",&ff);
       if(ff=='y'||ff=='Y')
       {
           cditGoods();
       }
       else
       {
           menu();
       }
   }
   else
    {//保存数据
printf("\t---确定要修改该数据吗?(y保存返回菜单||n取消返回菜单||r取消重新输入||c保存并继续||)\n");
getchar();
scanf("%c",&ff);
if(ff=='y'||ff=='Y'||ff=='c'||ff=='C')
   {
       f=fopen("good.data","w");
    for(i=0;i<index;i++)
   {/*如果匹配桑就要排除掉,如果没有匹配掉就写入新的文件中*/
    fwrite(&goodArr[i],sizeof(struct Goods),1,f);
   }
       fclose(f);
       if(ff=='y'||ff=='Y')
       {
           menu();
       }
       else
       {
          cditGoods();
       }
   }
   else if(ff=='r'&&ff=='R')
   {
      cditGoods();
   }
   else
    {
    menu();
   }
}
}

4查询商品信息

void checkGoods()
{   int size,index=0;
   system("cls");
   char input[20],ff;
   char temp_code[20];
   struct Goods good;
   FILE *f;
   f=fopen("good.data","r");//r读取模式,w写入模式(创建新的文件),a追加模式(不会创建新的文件)*/
   if(f==NULL)
   {
    f=fopen("good.data","a");
    fclose(f);
   }
   printf("\t 请输入你要查询的商品数据:");      /*输入擦寻内容*/
   scanf("%s",input);
   while(!feof(f))
   {
    size=fread(&good,sizeof(struct Goods),1,f);//读取文件,读取一个就会给good;
    if(size==0)
    {
        break;//读取不出来
    }
    /*good.code为int--要转换为字符串类型*/
    itoa(good.code,temp_code,10);
     /*读取文件--校对编号,名称,产地是否和输入内容一样,若一样就打印出来*/
      if((strcmp(input,temp_code)==0)||(strcmp(input,good.name)==0)||(strcmp(input,good.producer)==0))
        {
        printf("\t 商品数据查询成功");
        printf("\t 商品编号:%d  商品名称:%s  商品产地:%s  商品数量:%d  商品单价:%f\n\n",good.code,good.name,good.producer,good.count,good.price);
        index++;
        }
   }
   if(index==0)
   {
       printf("未查询到相关商品。。");
   }
   fclose(f);//关闭文件流
printf("\t---------是否继续查询?(y/n)\n");
getchar();
scanf("%c",&ff);
if(ff=='y'||ff=='Y')
{checkGoods();}
else
{
    menu();
}
}

5浏览商品信息

void listGoods()
{
system("cls");
FILE*f;
f=fopen("good.data","r");
/*用于保存good.data中所有的Goods数据*/
if(f==NULL)
    /*文件不存在的两方案
    1退出系统,从新运行
    2创建文件*/
{
    f=fopen("good.data","a");
    fclose(f);
    f=fopen("good.data","r");
}
//struct Goods goodArr[100];
/*中间变量,用于保存每次读取的数据*/
struct Goods good;
int index=0;
    /*读取文件中所有的数据*/
    printf("\t-----------------商品列表--------------------\n");
    while(!feof(f))
   {

    int size=fread(&good,sizeof(struct Goods),1,f);//读取出来一个数据,取地址符,goods为指针变量
    if(size==0){break;}
    printf("\t-----------------------------------------------\n\n");
    printf("\t                ☆商品编号:%10d                \n",good.code);
    printf("\t                ☆商品名称:%10s                \n",good.name);
    printf("\t                ☆商品产地:%10s                \n",good.producer);
    printf("\t                ☆商品数量:%10d                \n",good.count);
    printf("\t                ☆商品单价:%10.2f                \n",good.price);
/*将数据保存到一个数组中*/
//goodArr[index]=good;
index++;
}
//printf("编号:%d,名称:%s,产地:%s,数量:%d,单价:%f,",good.code,good.name,good.producer,good.count,good.price);
if(index==0)
{
    printf("\t-----------------库存中没有数据---------------\n");
}
/*打印数组中所有的数据*/
fclose(f);
printf("您可以按任意键返回菜单...");
getch();
menu();
}

6设置系统颜色

void setcoler()
{
    system("cls");//清屏
    int c;
    char zf;
printf("\n\n");
printf("\t------------------------------------\n\n");
printf("\t-----☆欢迎使用超市库存管理系统☆-----\n");
printf("\t-------------设置系统颜色-----------\n\n");
printf("\t------------请选择以下方案----------\n\n");
printf("\t<1>------------黑底白字-------------\n\n");
printf("\t<2>------------白底黑字-------------\n\n");
printf("\t<3>------------蓝底黑字-------------\n\n");
printf("\t<4>------------蓝底白字-------------\n\n");
printf("\t<5>------------红底白字-------------\n\n");
printf("\t<6>------------红底黑字-------------\n\n");
printf("\t<7>------------灰底蓝字-------------\n\n");
scanf("%d",&c);
switch(c)
    {
case 1:
    system("color 0F");break;
case 2:
    system("color F0");break;
case 3:
    system("color 10");break;
case 4:
    system("color 1F");break;
case 5:
    system("color 4F");break;
case 6:
    system("color 40");break;
case 7:
    system("color 89");break;
default://输入了1-7以外的数字
    printf("--------识别不了你输入的信息--(+_+)?--\n\n");
    printf("--------您可以按任意键返回到菜单页面--o(* ̄▽ ̄*)o--\n\n");
    getchar();
    setcoler();
     }
     printf("  o(* ̄▽ ̄*)o  您是否需要重新设置颜色呢?(y/n)\n");
     getchar();//防止吃掉回车
     scanf("%c",&zf);
     if(zf=='y'||zf=='Y')
    {
     setcoler();//重新设置颜色
    }
    else
    {
        menu();//返回菜单界面
    }
}

7退出系统

void sysOut()
{
    system("cls");
    char c_chang;
    printf("\n\n\n-----确定要推出系统吗?(y退出)\n");
    getchar();
    scanf("%c",&c_chang);
    if(c_chang=='y'||c_chang=='Y')
    {
        printf("感谢您的支持,欢迎下次继续光临。\n");
        exit(0);
    }
    else
    {
        menu();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值