第1章 概述
一、设计开发超市系统的背景和意义
在我国超市形成在20世纪90年代初期,现在已经成为我国零售业的一种重要形态,为国民经济的发展发挥了重要的作用。随着超市高速的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售也的发展,这样就迫切地需要引入新的管理技术。超市形态具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足。随着超市形态的高速发展,其营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。
二、超市系统的主要任务和功能
我们通过设计与应用超市管理系统,进行商品信息的录入商品信息删除、商品信息修改、商品信息查询、商品信息浏览等功能依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改善员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效。
三、数据结构和算法以及创新点和特色
该系统主要使用C语言,基于结构体,完成通常信息管理系统中常见功能。运用结构体来储存不同类型数据,并通过构造和调用函数来运行程序,还有构造文件来储存超市信息。使用者可以通过在程序运行时构建了数据文件,可以随时进行商品数据的修改以及删除。系统的界面还可以根据用户的喜好更换成任意颜色。
系统分析
一、应用场景进行需求分析
在现在的日常生活中,超市是我们购买商品的主要场所,而我们如果要保证超市的正常运行以及获取一定的利润,我们就要对超市的商品信息进行管理,要保持商品一定库存量保证卖场不会出现缺货少货,又要防止库存量过大加大仓库压力或是导致商品积压,增加商品因发现不及时出现临期过期等事情发生,这会提高公司损耗率,增加公司运营成本和损失。
二、功能模块
本模块的主要功能是商品信息的查询和更新,库存信息的查询和更新。
(1)查询商品信息:我们可以根据商品的编号或者名称查询它的所有信息。主要功能查询商品的明细信息,如商品名称编号、价格产地、数量和它的库存信息等等。
(2)添加商品信息:主要功能添加新进的商品。统计商品的各种信息,我们通过输入商品编号来添加信息,如果编号重复则需要重新输入,如果没有重复可以继续添加也可以返回菜单。
(3)修改商品信息:主要功能是修改商品的信息。包括他的库存数量价格等等。
(4)删除商品信息:主要功能是删除不再销售的商品信息。
(6)系统颜色设置:用户根据自己的喜好设置界面颜色,如果设置成功将返回主菜单,若不满可以继续设置。
(5)商品信息浏览:我们可以浏览超市所有商品的信息。
第3章 设计与实现
根据上述系统分析的结果,确定主程序的流程、各模块之间的层次(调用)关系,说明程序中关键部分所采用的数据组织方式、程序控制结构、数据库表结构以及尽可能高效的算法设计方案(尤其在数据量很大或需要考虑的步骤过多时)。画出主程序流程图、模块层次关系或调用图、数据流图、数据库表结构等,并实现概要设计中提出的关键的数据类型、数据结构、数据库表结构和算法,只需列出关键步骤的伪代码。
一、主程序的流程
- 实现欢迎页面;
- 进入系统菜单;
- 选择服务类型(新增商品信息、删除商品信息、修改商品信息、查询商品信息、浏览商品信息、修改系统颜色、退出系统);
- 清空屏幕;
- 执行相应指令;
- 结束系统。
二、主程序流程图
三、关键步骤的伪代码
(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();
}
}