资源描述
超市商品销售管理系统
所在学院:光电学院
小组成员:谢宗恒
罗 超
郑 佳
目录
1 简况 3
1.1项目背景 3
2 项目设计 4
2.1 软件功能 4
2.2 结构框图 5
2.3 系统开发运行平台 6
3 数据结构设计 7
3.1储存数据 7
3.2内部逻辑数据 7
3.3 系统特色: 8
4 系统功能演示 12
4.1 关于界面设计 12
4.2 系统功能演示 12
5 小组分工 23
6 总结 24
7 完整源代码 25
1 简况
1.1项目背景
超市中商品种类数目庞大,每天需要大量的人力对各类商品进行管理。上架商品需要分类排序,工作人员需要时常去查询是否有某种商品,每天还要检查某种商品是否需要补货,不仅工作量大,而且耗时耗力。因此我们组设计了一个软件,可以随时查询浏览商品信息,对商品信息进行删除修改,并且可以添加新的商品,录入商品销量后在货架余量低于特定值时进行商品上架提醒。在录入每日销量后还可以进行累计销售分析,帮助管理人员确定销售趋势和进货量。
2 项目设计
2.1 软件功能
此软件面向用户分为两部分,主管和工作人员,主管拥有所有权限,包括商品信息管理,货架管理和商品销售管理。工作人员只具有商品查询,商品浏览和补货的功能。在商品信息管理中包括商品添加,商品删除,商品信息修改和商品浏览功能。货架管理中包括补货功能和商品销量录入功能。商品销售管理中包括销售额以及销售分析。此软件还具有商品价格查询,对于录入商品进行分类排序等功能。
2.2 结构框图
超市商品销售管理系统结构框图
2.3 系统开发运行平台
Microsoft Word2010
Codeblocks10.05
Microsoft Visio2010
Windows8
3 数据结构设计
3.1储存数据
文件储存:这是一个商品销售管理系统。
对于goods.txt文件是可读可写,主管有全部修改和查询权限,工作人员仅有对货架剩余量的修改权限和全部查询权限。
文件
界面操作
作用
使用时间
goods.txt
可读可写
用于存放商品编码,类型,名称,价格,货架剩余量,警戒值,累计销量。
系统初始化时以及修改删除及添加商品时。
3.2内部逻辑数据
商品信息节点
struct goods
{
char code[6]; //商品编码
char type[5]; //商品种类
char name[10]; //商品名称
float price; //商品价格
int num; //货架余量
int limited_num; //限定量(低于此值自动提醒补货)
int sale_num; //累计销售量
struct goods *next;
}go;
————>存放商品信息节点的结构体
系统初始化后,所有对商品信息的操作都是先对链表进行操作,若有改动,则将改动后的链表重新写入文件。
【系统初始化后,菜单读到链表中】
3.3 系统特色
1.商品添加:添加商品时自动定位到该类商品末尾。通过添加类型的输入,由一个指针直接指向该类最后一个商品,直接在该类商品后进行添加。避免了添加商品后各种不同类型商品混杂的情况。
2.补货功能:在进行商品销量录入时,当商品数量低于限定值时,系统会自动提示货架剩余量过低,请及时补货。在补货功能界面输入商品编码,会显示现在商品余量,添加补货数量即可。
3.同类商品销售分析:根据每日录入的销量,可以自动对销量进行累加,可以查询同类商品的累计销售额及销售量,由此可以轻易得出同类商品哪些比较受欢迎,确定销售进货侧重商品种类。
4 系统功能演示
4.1 关于界面设计
追求简约清晰的界面。
4.2 系统功能演示
开始进入初始化界面
登陆界面
工作人员界面
(密码:222222)
主管登陆界面
(密码:111111)
菜单一:商品信息管理界面
商品添加界面
商品删除界面
按名称删除
按编码删除
商品信息修改界面
商品浏览界面
货架管理界面
商品销量录入(依次录入)
补货功能界面
商品销量清零
商品销售管理界面
单品日销售额查询
累计销售总额查询界面
同类商品销量分析
(需手动录入商品销售额)
5 小组分工
学号
姓名
职责
占百分比重
1412440112
谢宗恒
编写代码及程序调试
35%
1412120132
罗超
编写代码及程序调试
35%
1412480306
郑佳
文档文件编写及程序调试
30%
6 总结
通过这次C语言短学期的项目开发,我们充分认识到了团队的重要性,人无完人,每个人都有不足之处,一人不足之处其他人补,方能高效的完成任务。C语言是一门严谨的科学,一处不起眼的错误就可能导致全盘的崩溃,而且系统软件的架构安排,数据结构的选择,以及多种功能的实现使得我们必须小心编写,一遍一遍查漏补缺,从而使系统功能可以正常使用,编码无错误后,会小心改动,优化系统。
这次短学期项目锻炼了我们的团队协作能力,也使得我们的思维更加严谨,对于结构有更好的理解,但由于时间匆忙,所以只是列了超市一小部分用于测试功能是否实现,逻辑是否正确,要想做成完整的超市销售管理系统,我们还需多加努力。
7 完整源代码
/*******************************/
/* Name: 超市商品管理 */
/* Author: 罗超 */
/* 郑佳 */
/* 谢宗恒 */
/* Version: 3.0 */
/*******************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define line_1 "--------------------"
#define line_2 "————————————————————"
#define line_3 "*-/-*-/-*-/-*-/-*-/-*-/-*-/-*-/-*"
#define line_4 "(^o^)(^o^)(^o^)(^o^)(^o^)(^o^)"
#define NULL ((void *)0)
#define LEN sizeof(struct goods)
int quanxian;
int number[100];
struct goods
{
char code[6]; //商品编码
char type[5]; //商品种类
char name[10]; //商品名称
float price; //商品价格
int num; //货架余量
int limited_num; //限定量(低于此值自动提醒补货)
int sale_num; //累计销售量
struct goods *next;
}go;
struct goods *create() //创建链表
{
struct goods *p,*q,*head;
p=head=&go;q=p;
FILE *fp;
if((fp = fopen("goods.txt", "r")) == NULL)
{
fprintf(stderr,"无法打开文件");
exit(0);
}
fscanf(fp,"%s%s%s%f%d%d%d",(head->code),(head->type),(head->name),&(head->price),&(head->num),&(head->limited_num),&(head->sale_num));
head->next=p;
while (!feof(fp))
{ q=(struct goods *)malloc(LEN);
fscanf(fp,"%s%s%s%f%d%d%d",(q->code),(q->type),(q->name),&(q->price),&(q->num),&(q->limited_num),&(q->sale_num));
if (feof(fp))
break;
p->next=q;
p=p->next;
}
p->next=NULL;
fclose(fp);
return head;
}
int login();
void menu();
void menu_();
void menu_1(); //菜单一:商品信息管理
void menu_2(); //菜单二:货架管理
void menu_3(); //菜单三:商品销售管理
void goods_research();
void name_research(); //按名称查询
void code_research(); //按编码查询
void goods_add(); //商品添加
void delete(); //商品删除
void code_delete();
void name_delete();
void modification(); //商品信息修改
void scan(); //商品浏览
void sales_entry(); //商品销量录入
void add_number(); //货架商品数量添加(补货)
void sale_reset(); //销售量清零
void sale_good(); //单品日销售额
void sale_goods(); //日销售总额
void analyse(); //同类商品分析
void main()
{
system("color 3E");
puts("\n");
printf("%s\n\n",line_4);
puts("您好 ~\t正在初始化系统,请稍等~~");
puts("按任意键继续\n");
printf("%s\n",line_4);
getchar();
fflush(stdin);
system("cls");
int i;
i=login();
if(i==1){system("cls");menu();}
if(i==2){system("cls");menu_();}
}
int login()
{
int i=0;//权限判定
char password_2[20]="222222";//主管密码
char password_1[20]="111111";//工人密码
char password[20];
puts("请输入登陆密码:");
scanf("%s",&password);
if(strcmp(password,password_1)!=0&&strcmp(password,password_2)!=0)
{
printf("密码错误,请重新输入!!!!");
system("cls");
login();
}
else if(strcmp(password,password_1)==0)
{
i=1;
system("cls");
quanxian=1;
return i;
}
else if(strcmp(password,password_2)==0)
{
i=2;
system("cls");
quanxian=2;
return i;
}
}
void menu()
{
system("color 3E");
printf("%s \n\n",line_3);
printf(" 欢迎进入超市商品管理系统\n\n");
printf(" %s \n\n",line_3);
printf("请选择你要进入的管理界面:\n");
printf("%s \n\n",line_2);
printf("1.商品信息管理\n");
printf("2.货架管理\n");
printf("3.商品销售管理\n");
printf("0.退出\n\n");
printf("%s \n\n",line_2);
int n;
scanf("%d",&n);
system("cls");
switch(n)
{
case 1:menu_1();break;
case 2:menu_2();break;
case 3:menu_3();break;
case 0:exit(0);
}
}
void menu_()
{
int i=2;
system("color 3E");
printf("%s \n\n",line_3);
printf("\t欢迎进入工作人员界面\n\n");
printf("%s \n\n",line_2);
printf("请选择:\n");
printf("1.商品查询\n");
printf("2.商品信息浏览\n");
printf("3.补货\n");
printf("0.退出\n");
int n;
scanf("%d",&n);
int j=2;
switch(n)
{
case 1:system("cls");goods_research();break;
case 2:system("cls");scan();break;
case 3:system("cls");add_number();break;
case 0:exit(0);
}
}
void menu_1()
{
int i=1;
printf(" \n\n\t 商品信息管理\n");
printf(" %s \n",line_1);
printf("%s \n\n",line_2);
printf("1.商品添加\n");
printf("2.商品删除\n");
printf("3.商品信息修改\n");
printf("4.浏览\n");
printf("0.返回\n\n");
printf("%s \n",line_2);
int n;
scanf("%d",&n);
system("cls");
switch(n)
{
case 1:goods_add();break;
case 2:delete();break;
case 3:modification();break;
case 4:scan();break;
case 0:return menu();
}
}
void menu_2()
{
printf("\n \t 货架管理\n");
printf(" \t%s \n",line_1);
printf("%s \n\n",line_2);
printf("1.商品销量录入\n");
printf("2.补货\n");
printf("3.商品销量清零\n");
printf("0.返回\n\n");
printf("%s \n",line_2);
int n;
scanf("%d",&n);
system("cls");
switch(n)
{
case 1:sales_entry();break;
case 2:add_number();break;
case 3:sale_reset();break;
case 0:return menu();
}
}
void menu_3()
{
printf("\n\t 商品销售管理\n");
printf(" %s \n",line_1);
printf("%s \n\n",line_2);
printf("1.单品累计销售额查询\n");
printf("2.累计销售总额查询\n");
printf("3.同类商品销售分析\n");
printf("0.返回\n\n");
printf("%s \n",line_2);
int n;
scanf("%d",&n);
switch(n)
{
case 1:sale_good();break;
case 2:sale_goods();break;
case 3:analyse();break;
case 0:system("cls");return menu();
}
}
void goods_research() //商品查询
{
printf("\n%s",line_3);
printf("\n请选择查询方式:\n\n");
printf("1:商品名称\n2:商品编码\n");
printf("0:返回\n");
int ch;
scanf("%d",&ch);
switch(ch)
{
case 1:system("cls");
printf("\n%s\n",line_3);
name_research();break;
case 2:system("cls");
printf("\n%s\n",line_3);
code_research();break;
case 0: if(quanxian==1){system("cls");menu_1();break;}
if(quanxian==2){system("cls");menu_();break;}
}
}
void name_research() //按名称查询
{
fflush(stdin);
struct goods *p; char name[20] ;
printf("请输入商品名称:");
printf("(输入字符‘aaaa’进入商品信息浏览功能)\n");
fflush(stdin);
scanf("%s",name);
char yan[20]="aaaa";//用于验证跳转
if(strcmp(yan,name)==0)
{
system("cls");
scan();
}
p=create();
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("您所查的商品信息为:\n") ;
printf("编码 种类 名称 价格 货架余量\n");
printf("%s\t%s\t%s\t%f\t%d",p->code,p->type,p->name,p->price,p->num);
break;
}
else p=p->next;
}
if(p==NULL)
{
system("cls");
printf("您输入的商品有误,请重新输入:\n");
return name_research();
}
return goods_research();
}
void code_research() //按编码查询
{
fflush(stdin);
struct goods *p; char code[6] ;
printf("请输入商品编码:");
printf("(输入字符‘aaaa’进入商品信息浏览功能)\n");
fflush(stdin);
scanf("%s",code);
char yan[20]="aaaa";//用于验证跳转
if(strcmp(yan,code)==0)
{
system("cls");
scan();
}
p=create();
while(p!=NULL)
{ if(strcmp(p->code,code)==0)
{
printf("您所查的商品信息为:\n") ;
printf("编码 种类 名称 价格 货架余量\n");
printf("%s\t%s\t%s\t%f\t%d",p->code,p->type,p->name,p->price,p->num);
break;
}
else p=p->next;
}
if(p==NULL)
{
system("cls");
printf("您输入的商品有误,请重新输入:\n");
fflush(stdin);
return code_research();
}
return goods_research();
}
void goods_add() //商品添加
{
fflush(stdin);
struct goods *p,*q,*p0,*head,*m; char type[6] ;
printf("\n%s\n",line_3);
printf("请输入添加商品种类:\n");
scanf("%s",type);
head=q=p=create();
while(p!=NULL)
{
if(strcmp(p->type,type)==0)
{
if(p->next==NULL||(strcmp(p->next->type,type)!=0))
break;
}
p=p->next;q=p->next;
}
printf("%s\t%s\t%s\t%f\t%d\t%d\t%d\n",p->code,p->type,p->name,p->price,p->num,p->limited_num,p->sale_num);
p0=(struct goods *)malloc(LEN);
p->next=p0;p0->next=q;
printf("请在该组数据后添加:\n");
printf("编码 种类 名称 价格 货架余量 限定量 销售量\n");
scanf("%s%s%s%f%d%d%d",(p0->code),(p0->type),(p0->name),&(p0->price),&(p0->num),&(p0->limited_num),&(p0->sale_num));
FILE *fp;
fp=fopen("goods.txt","w");
while(head!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%f\t%d\t%d\t%d\n",head->code,head->type,head->name,head->price,head->num,head->limited_num,head->sale_num);
head=head->next;
}
fclose(fp);
printf("\n请选择:\n");
printf("1:继续添加\n");
printf("0:返回\n");
int n;
scanf("%d",&n);
while(n!=1&&n!=0)
{
printf("输入错误,请重新输入!!!!\n");
scanf("%d",&n);
}
switch(n)
{
case 1:system("cls");goods_add();break;
case 0: if(quanxian==1){system("cls");menu_1();break;}
if(quanxian==1){system("cls");menu_();break;}
}
}
void modification() //商品修改
{
fflush(stdin);
struct goods *p,*head; char name[20] ;char ch;
printf("\n%s\n",line_3);
printf("请输入您想修改商品的名称:");
printf("(输入字符‘aaaa’进入商品信息浏览功能)\n");
fflush(stdin);
scanf("%s",name);
char yan[20]="aaaa";//用于验证跳转
if(strcmp(yan,name)==0)
{
system("cls");
scan();
}
p=head=create();
while(p!=NULL)
{ if(strcmp(p->name,name)==0)
{
printf("您所将要修改的商品信息为:\n") ;
printf("编码 种类 名称 价格 货架余量 限定量 销售量\n");
printf("%s\t%s\t%s\t%f\t%d\t%d\t%d",p->code,p->type,p->name,p->price,p->num,p->limited_num,p->sale_num);
break;
}
else
p=p->next;
}
if(p==NULL)
{ system("cls");
printf("您输入的商品有误,请重新输入:\n");
return modification();
}
printf("\n请选择:\n");
printf("1:修改信息\n2:返回\n");
fflush(stdin);
ch=getchar();
switch(ch)
{
case'1':printf("请输入修改后的信息:\n");
printf("编码 种类 名称 价格 货架余量 限定量 销售量\n");
scanf("%s%s%s%f%d%d%d",(p->code),(p->type),(p->name),&(p->price),&(p->num),&(p->limited_num),&(p->sale_num));
FILE *fp;
fp=fopen("goods.txt","w");
while(head!=NULL)
{
fprintf(fp,"%s\t%s\t%s\t%f\t%d\t%d\t%d\n",head->code,head->type,head->name,head->price,head->num,head->limited_num,head->sale_num);
head=head->next;
}
fclose(fp);break;
case'2': system("cls"); menu_1();break;
}
printf("请选择:\n");
printf("1:继续修改\n");
printf("0:返回\n");
int n;
scanf("%d",&n);
while(n!=1&&n!=0)
{
printf("输入错误,请重新输入!!!!\n");
scanf("%d",&n);
}
switch(n)
{
case 1:system("cls");modification();break;
case 0:system("cls");menu_1();break;
}
}
void delete() //商品删除
{
fflush(stdin);
printf("\n%s\n",line_3);
printf("请选择:\n");
printf("1:按名称查找删除\n2:按编码查找删除\n");
printf("0:返回\n");
int n;
scanf("%d",&n);
switch(n)
{
case 1:system("cls");
name_delete();break;
case 2:system("cls");
code_delete();break;
case 0: system("cls");menu_1();break;
}
}
void name_delete()
{
fflush(stdin);
struct goods *p1,*p2,*head; char name[20] ;
printf("\n%s\n",line_3);
printf("请输入商品名称:");
head=create(),p1=head,p2=p1;
scanf("%s",name);
while(p1!=NULL)
{
展开阅读全文