北京联合大学c语言实训商店商品管理信息系统.docx
- 文档编号:5762188
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:63
- 大小:861.33KB
北京联合大学c语言实训商店商品管理信息系统.docx
《北京联合大学c语言实训商店商品管理信息系统.docx》由会员分享,可在线阅读,更多相关《北京联合大学c语言实训商店商品管理信息系统.docx(63页珍藏版)》请在冰豆网上搜索。
北京联合大学c语言实训商店商品管理信息系统
北京联合大学
课程设计报告
课程名称:
C语言程序设计实训
项目名称:
商店商品管理信息
学院:
自动化学院专业:
信息处理与智能技术
姓名:
赵大帅李志磊冯麒麟
学号:
*********
2011年6月21日
第一部分课程设计题目与要求……………………………………………
1.问题提出…………………………………………………………………
2.功能要求……………………………………………………………………
3任务分工……………………………………………………………………
第二部分设计实训题目功能………………………………………………
1.总体设计……………………………………………………………………
2.算法设计……………………………………………………………………
3.数据结构……………………………………………………………………
4.程序代码设计………………………………………………………………
5.测试与调试…………………………………………………………………
第三部分课程设计总结……………………………………………………
1.个人总结……………………………………………………………………
2.结束语……………………………………………………………………
附录A程序清单………………………………………………………………
附录B用户使用说明书………………………………………………………
参考文献…………………………………………………………………………
第1部分实训题目与要求
1.问题提出:
某商店每天有进货、售货、统计销售额、计算毛利率、查看商品剩余量等业务,所以人工管理是一件非常繁琐的事情,为了快速有效的管理,该商店提出要编制一个计算机管理软件。
2.功能要求:
在主菜单中选择:
1.创建商品档案。
每一个商品的信息包括编号、品名、进价、售价、进货量、销售量、销售额、剩余数、毛利。
2.进入子菜单,并编辑商品信息。
例如,向商品档案添加新商品,删除原有商品,处理员有商品的新进货量、新销售量、报废量。
在子菜单中选择4,返回主菜单;选择0,退出整个系统。
3.统计销售额情况。
在此项中统计每种商品的销售额、剩余数、毛利(毛利=销售额-进价×销售量)。
4.进入子菜单,并查询商品信息。
如根据品名、剩余数(小于5大于20)进行查询。
在子菜单中选择3,返回主菜单;选择0,退出整个系统。
5.进入子菜单,并显示商品信息。
显示方式有3种,即按原来商品顺序显示、按销售额从高到低的顺序显示、按毛利从高到低的顺序显示,由于商品较多,所以要求分屏显示。
在子菜单选择4,返回主菜单;选择0,退出整个系统。
6.创新功能——给商品分类。
7.主菜单中选择0:
显示结束信息(如“感谢使用本软件!
已正常退出,按任意键结束。
”),按任意键后,退出本系统。
3.任务分工:
(1):
编辑商品信息;
创新功能:
给商品分类的主函数、给商品分类中的按生活用品分。
(2)郭欣桐:
创建商品档案、查询商品信息;
创新功能:
给商品分类中的按食品分。
(3)胡岩松:
统计销售情况、显示商品信息;
创新功能:
给商品分类中的按学习用品分。
注:
流程图与实训报告由三个人共同分担完成。
第2部分设计实训题目功能
1.总体设计:
(1)模块设计:
如下图菜单:
-------------------------------
|请输入选项编号(0-6)|
-------------------------------
|1——创建商品档案|
|2——编辑商品信息|
|3——统计销售情况|
|4——查询商品信息|
|5——显示商品信息|
|6——创新功能|
|0——退出系统|
--------------------------------
****************************************
|请输入选项编号(0-4)|
****************************************
|1——添加新商品|
|2——删除原有商品|
|3——修改原有商品信息|
|4——返回|
|0——退出系统|
****************************************
*****************************************
|请输入选项编号(0-3)|
*****************************************
|1——按品名查询|
|2——按剩余数查询|
|3——返回|
|0——退出系统|
*****************************************
*****************************************
|请输入选项编号(0-4)|
*****************************************
|1——按原来顺序显示|
|2——按销售额高低显示|
|3——按毛利高低显示|
|4——返回|
|0——退出系统|
*****************************************
(2)定义各函数的主要功能:
①主函数:
将需要的函数都放在主函数中,当需要不同的函数的时候便可用主函数调用不同的函数,运用主函数可以方便调用其它函数。
②创建商品档案函数:
向原有商品档案中添加新的商品以及有关信息。
③编辑商品信息函数:
可以添加新商品、删除原有商品、修改原有商品信息。
④统计销售情况函数:
可以统计每种商品的销售额、剩余数、毛利。
⑤查询商品信息函数:
可以查询商品信息,分为按品名查询、按剩余数查询。
⑥显示商品信息函数:
可以显示出商品信息,按原来顺序显示、按销售额高低显示、按毛利高低显示。
⑦创新功能函数:
给商品分类——可以将商品分为3类,按生活用品分类、按食品分类、按学习用品分类。
(3)程序模块图:
2.算法设计:
(1)显示子菜单。
用printf函数将菜单项一项项地打印到屏幕上,界面中的边框可以通过多个printf语句输出的“|”和“-”拼接起来。
(2)菜单项的选择。
菜单应根据用户的选择做出不同的反应,因此需要使用分支结构实现选择选项的功能。
鉴于目前仅仅是做主菜单,还不能实现各菜单项的具体功能,因此该程序中暂时根据用户的选择,输出对应菜单的编号。
根据题意,主菜单含有7个菜单项,属于多分支条件判断,使用带break的switch语句最为合适。
需要注意的是,还要处理当用户输入错误时的情况。
(3)重复显示主菜单。
因为本实例具有重复选择主菜单的功能,因此需要使用循环结构。
在本实例中主菜单至少显示一次,然后才判断是否继续选择主菜单,所以使用do-while循环比较好,因为do-while循环是先执行循环体,然后在判断表达式。
作为菜单,应该给用户一个正常的出口,即满足一定条件时退出程序。
为了给用户提供方便,我们采用人机对话形式,当用户选择某一菜单项后,系统立即完成相应的功能,然后询问用户是否需要继续选择,只要用户选择继续(输入y或Y),主菜单就在屏幕上反复出现,只有单用户选择不再继续(输入n或N)时,才可以退出主菜单。
除此之外,为了使用方便,在主菜单中还特设0选项,选择它也能正常退出程序。
为了实现上述功能,有关语句都应放在do-while循环体中。
设计算法时应考虑如何时程序具有容错能力。
例如,当用户在应答是否继续时,如果输入的是合法数据(即y、Y、n或N),则程序继续下一步操作;如果输入的是非法数据(即y、Y、n或N以外的字符),则应让用户重新输入,这时需要在是否继续的问题上加一个循环判断,这种功能常用do-while实现。
(4)流程图(如下图所示):
主模块流程图
创建商品档案模块的流程图
编辑商品信息模块的流程图
添加新商品模块的流程图
删除原有商品模块的流程图
修改原有商品信息流程图
统计销售情况的流程图
查询商品信息的流程图
按品名查询流程图
按剩余数查询流程图
显示商品信息流程图
按原来顺序显示模块的流程图
按销售额高低显示的流程图
按毛利高低显示的模块
创新功能流程图
按生活用品分类流程图
注:
按食品和学习用品分类似
3.数据结构:
structgoods
{charbh[10];
charpm[30];
floatjj;
floatsj;
intjhl;
intxsl;
floatxse;
intsys;
floatml;
};
此结构体为存放商品信息,编号bh[10],商品名pm[30],进价jj,售价sj,进货量jhl,销售量xsl,销售额xse,剩余数sys,毛利ml.
4.程序代码设计:
voidmycreate()
{inti=1;
floatx,y,z,t;
structgoodstemp={0};
FILE*fp=NULL;
fp=fopen("d:
\\cwz\\goods.txt","w");
if(fp==NULL)
{printf("\n打开文件夹失败!
\n");return;}
system("cls");
printf("\n请输入第1个记录:
\n");
printf("编号(用#结束输入):
");
do
{gets(temp.bh);
}while(strcmp(temp.bh,"")==0);
printf("品名(用#结束输入):
");
gets(temp.pm);
printf("进价(用#结束输入):
");
scanf("%f",&x);
temp.jj=x;
printf("售价(用#结束输入):
");
scanf("%f",&y);
temp.sj=y;
printf("进货量(用#结束输入):
");
scanf("%d",&temp.jhl);
printf("销售量(用#结束输入):
");
scanf("%d",&temp.xsl);
printf("销售额(用#结束输入):
");
scanf("%f",&z);
temp.xse=z;
printf("剩余数(用#结束输入):
");
scanf("%d",&temp.sys);
printf("毛利(用#结束输入):
");
scanf("%f",&t);
temp.ml=t;
while(temp.bh[0]!
='#'&&temp.pm[0]!
='#')
{fprintf(fp,"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",temp.bh,temp.pm,
temp.jj,temp.sj,temp.jhl,temp.xsl,temp.xse,temp.sys,temp.ml);
i++;
printf("\n请输入第%d个记录:
\n",i);
printf("编号(用#结束输入):
");
do
{gets(temp.bh);
}while(strcmp(temp.bh,"")==0);
printf("品名(用#结束输入):
");
gets(temp.pm);
printf("进价(用#结束输入):
");
scanf("%f",&x);
temp.jj=x;
printf("售价(用#结束输入):
");
scanf("%f",&y);
temp.sj=y;
printf("进货量(用#结束输入):
");
scanf("%d",&temp.jhl);
printf("销售量(用#结束输入):
");
scanf("%d",&temp.xsl);
printf("销售额(用#结束输入):
");
scanf("%f",&z);
temp.xse=z;
printf("剩余数(用#结束输入):
");
scanf("%d",&temp.sys);
printf("毛利(用#结束输入):
");
scanf("%f",&t);
temp.ml=t;
}
fclose(fp);
}
voidmyedit()
{charchoose='\0',yes_no='\0';
do
{
myprint1();
choose=getch();
switch(choose)
{case'1':
myadd();break;
case'2':
mydelete();break;
case'3':
mymodify();break;
case'4':
return;
case'0':
exit(0);
default:
printf("\n%c为非法选项!
\n",choose);
}
if(choose=='0')break;
printf("\n要继续选择吗(Y/N)?
\n");
do
{
yes_no=getche();
}while(yes_no!
='Y'&&yes_no!
='y'&&yes_no!
='N'&&yes_no!
='n');
}while(yes_no=='Y'||yes_no=='y');
}
voidmyadd()
{
charc='\0';
intn=0;
floatx,y,z,t;
structgoodstemp={0},record[N]={0},*p=NULL;
FILE*fp=NULL;
fp=fopen("d:
\\cwz\\goods.txt","r");
if(fp==NULL)
{printf("\n打开文件失败!
\n");return;}
p=record;
printf("原有商品信息为:
\n");
while(feof(fp)==0)
{fscanf(fp,"%s%s%f%f%d%d%f%d%f",p->bh,p->pm,&x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t);
printf("%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm,x,y,p->jhl,p->xsl,z,p->sys,t);
p->jj=x;p->sj=y;p->xse=z;p->ml=t;
p++;
n++;
getchar();
}
fclose(fp);
do
{printf("\n请输入新记录的编号:
");
do
{gets(temp.bh);
}while(strcmp(temp.bh,"")==0);
printf("请输入新记录的品名:
");
gets(temp.pm);
printf("请输入新记录的进价:
");
scanf("%f",&temp.jj);
printf("请输入新记录的售价:
");
scanf("%f",&temp.sj);
printf("请输入新记录的进货量:
");
scanf("%d",&temp.jhl);
printf("请输入新记录的销售量:
");
scanf("%d",&temp.xsl);
printf("请输入新记录的销售额:
");
scanf("%f",&temp.xse);
printf("请输入新记录的剩余数:
");
scanf("%d",&temp.sys);
printf("请输入新记录的毛利:
");
scanf("%f",&temp.ml);
for(p=record;p if(strcmp(temp.bh,p->bh)==0) {printf("编号重复,要重新输入吗(Y/N)? "); do {c=getche(); }while(c! ='Y'&&c! ='y'&&c! ='N'&&c! ='n'); putchar('/n'); break; } if(p==record+n){*p=temp;break;} }while(c=='y'||c=='Y'); fp=fopen("d: \\cwz\\goods.txt","w"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} for(p=record;p fprintf(fp,"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp); } voidmydelete() { charc='\0'; printf("\n按商品编号删除(b),还是按品名删除(p)? "); c=getche(); if(c=='b'||c=='B')del_bh(); elseif(c=='p'||c=='P')del_pm(); elseprintf("\n非法字符! \n"); } voiddel_bh() { chartempbh[10]=""; intn=0; floatx,y,z,t; structgoodsrecord[N]={0},*p=NULL,*k=NULL; FILE*fp=NULL; fp=fopen("d: \\cwz\\goods.txt","r"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} p=record; printf("\n"); while(feof(fp)==0) {fscanf(fp,"%s%s%f%f%d%d%f%d%f",p->bh,p->pm, &x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t; printf("%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm, x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; } fclose(fp); printf("\n请输入要删除的商品编号: "); gets(tempbh); for(k=record;k if(strcmp(tempbh,k->bh)==0)break; if(k {for(p=k;p *p=*(p+1); fp=fopen("d: \\cwz\\goods.txt","w"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} for(p=record;p fprintf(fp,"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp);} else {printf("\n无此商品! \n"); fp=fopen("d: \\cwz\\goods.txt","w"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} for(p=record;p fprintf(fp,"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp); } } voiddel_pm() { chartemppm[10]=""; intn=0; floatx,y,z,t; structgoodsrecord[N]={0},*p=NULL,*k=NULL; FILE*fp=NULL; fp=fopen("d: \\cwz\\goods.txt","r"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} p=record; printf("\n"); while(feof(fp)==0) {fscanf(fp,"%s%s%f%f%d%d%f%d%f",p->bh,p->pm, &x,&y,&p->jhl,&p->xsl,&z,&p->sys,&t); p->jj=x,p->sj=y,p->xse=z;p->ml=t; printf("%4s%12s%8.1f%8.1f%8d%10d%10.1f%8d%10.1f\n",p->bh,p->pm, x,y,p->jhl,p->xsl,z,p->sys,t); p++; n++; } fclose(fp); printf("\n请输入要删除的商品名: "); gets(temppm); for(k=record;k if(strcmp(temppm,k->pm)==0) break; if(k {for(p=k;p *p=*(p+1); fp=fopen("d: \\cwz\\goods.txt","w"); if(fp==NULL) {printf("\n打开文件失败! \n");return;} for(p=record;p fprintf(fp,"%4s%12s%8.1f%8.1f%8d%8d%8.1f%8d%8.1f\n",p->bh,p->pm,p->jj,p->sj,p->jhl,p->xsl,p->xse,p->sys,p->ml); fclose(fp);} else {printf("\n无此商品! \n"); fp=fopen("d: \\cwz\\goods.txt","w"); if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京联合大学c语言实训 商店商品管理信息系统 北京 联合 大学 语言 商店 商品 管理信息系统