基础编程能力实训报告
——货物管理系统
一、项目分析
随着计算机技术特别是网络技术的飞速发展,计算机的应用领域不断扩大,各行各业都离不开计算机,货物管理也不例外,使之能跟上时代的发展。本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了货物管理系统的软件开发过程,便于程序员与客户之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共性,以期能够获得更大范围的应用。理论上能够实现于超市、仓库等部门的货物管理系统,其目的在于实现超市、仓库等部门的货物更有效的管理,使超市、仓库货物能够更方便、更有效率完成日常工作,以期实现完善日常生活中货物管理的各种功能。
货物管理系统用户需要的功能有:
1.添加货物的基本信息。
2.删除一个货物的所有数据。
3.删除所有货物的所有数据。
4.查询某个给定编号或名称的货物的所有数据。
5.查询并修改某个给定编号或名称的货物的所有数据。
6.显示所有货物的信息。
7.保存所有货物的信息到文件中,程序开始的时候要读取相应文件中的货物信息到程序中。
二、项目总体设计
分析和总结货物管理系统用户所需要的功能,设计货物管理系统的功能模块,包含添加记录、删除记录、查询记录、记录排序、显示记录、保存记录功能模块。
本次实践训练的内容为选择结构和循环结构在成绩管理系统中的应用,即利用选择结构和循环结构搭建系统的框架,而暂不实现具体的功能模块。
学生成绩管理系统功能模块设计如图1。
图 1 货物管理系统功能模块图
三、项目详细设计与实现
(一)系统的整体处理模块
1.系统的整体处理模块的设计思路
系统执行的主流程为:进入主循环操作,显示主菜单,在判断键值时,输入1-7之间的任意数值,其他输入为错误按键。若输入7,则退出系统,输入1-6,则调用相关函数,执行相应操作。
系统的执行流程如图2所示。
图 2 货物管理系统系统流程图
系统的整体处理模块的编程实现
int main()
{
int j,n;
n=getg(g);
while(1)
{
system("cls");
menu();
scanf("%d",&j);
switch(j)
{
case 1:hwrk(g);break;
case 2:hwck(g);break;
case 3:findhw(g);break;
case 4:hwcg(g);break;
case 5:output();break;
case 6:qk();break;
case 7:exit(0);
default:printf("输入错误,请重新输入!\n");
}
}
return 0;
}
3.系统的整体处理模块的运行效果
整体处理模块的总体运行效果如图3所示。
(效果显示可以去看另一份博客文章,c实训设计——货物管理系统)
图 3货物管理系统菜单界面
(二)货物入库模块
1.货物入库模块的设计思路
系统执行的主流程为:输入入库的数量n,进入循环,输入n个货物的信息,保存货物信息,结束。
系统的执行流程如图4所示。
图 4 货物管理系统系统流程图
货物入库模块的编程实现
void hwrk(Goods *g)//货物入库
{
int n,i;
system("cls");
printf("请输入入库货物种类数量\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入货物编号\t货物名称\t货物数量\t货物进货价格\n");
scanf("%s %s %d %lf",&g[i].k,&g[i].name,&g[i].n,&g[i].pri);
}
input(g,n);//货物保存
printf("\n按任意键返回!");
getch();
}
3.货物入库模块的运行效果
货物入库模块的总体运行效果如图5所示。
图 5货物管理系统菜单界面
(三)货物出库模块
1.货物出库模块的设计思路
系统执行的主流程为:按照相应方式进行查找,若找到则执行删除操作,若找不到则输出找不到。
系统的执行流程如图6所示。
图 6 货物管理系统系统流程图
货物出库模块的编程实现
void hwck(Goods *g)//货物出库
{
int i,k,j,l,m,n;
char q[30];
n=getg(g);
system("cls");
printf("请选择查找的方式\n");
printf("1:按货物编号查找并出库\n");
printf("2:按货物名称查找并出库\n");
scanf("%d",&k);
m=n;
if(k==1)
{
printf("请输入要出库的货物编号\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].k)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号 货物名称 货物数量 货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
printf("是否选择出库\n");
printf("1:yes\t2:no\n");
scanf("%d",&l);
if(l==1)
{
for(j=i;j<n-1;j++)
{
g[j]=g[j+1];
}
n=n-1;
jl(g,n);
printf("已删除\n");
}
break;
}
}
if(i==m)
{
printf("不存在该货物\n");
}
}
if(k==2)
{
printf("请输入要出库的货物名称\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].name)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号 货物名称 货物数量 货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
printf("是否选择出库\n");
printf("1:yes\t2:no\n");
scanf("%d",&l);
if(l==1)
{
for(j=i;j<n-1;j++)
{
g[j]=g[j+1];
}
n=n-1;
jl(g,n);
printf("已删除\n");
}
break;
}
}
if(i==m)
{
printf("不存在该货物\n");
}
}
printf("\n按任意键返回!");
getch();
}
3.货物出库模块的运行效果
货物出库模块的总体运行效果如图1所示。
图 7货物管理系统菜单界面
(四)查找功能模块
1.查找功能模块的设计思路
图 8 查找功能的程序流程图
2.查找功能模块的编程实现
void findhw(Goods *g)//货物查询
{
int i,k,n;
char q[30];
n=getg(g);
system("cls");
printf("请选择查找的方式\n");
printf("1:按货物编号查找\n");
printf("2:按货物名称查找\n");
scanf("%d",&k);
if(k==1)
{
printf("请输入要查找的货物编号\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].k)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号\t货物名称\t货物数量\t货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
break;
}
}
if(i==n)
{
printf("不存在该货物\n");
}
}
if(k==2)
{
printf("请输入要查找的货物名称\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].name)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号\t货物名称\t货物数量\t货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
break;
}
}
if(i==n)
{
printf("不存在该货物\n");
}
}
printf("\n按任意键返回!");
getch();
}
3.查找功能模块的运行效果
查找功能模块的总体运行效果如图9所示。
图 9货物管理系统查找功能运行界面
(五)货物信息修改模块
1.货物信息系应该模块的设计思路
系统执行的主流程为:雷同货物信息查询
系统的执行流程如图10所示。
图 10 货物管理系统系统流程图
货物信息修改模块的编程实现
void hwcg(Goods *g)//货物信息修改
{
int i,k,j,l,m,n;
char q[30];
n=getg(g);
system("cls");
printf("请选择查找的方式\n");
printf("1:按货物编号查找并修改信息\n");
printf("2:按货物名称查找并修改信息\n");
scanf("%d",&k);
m=n;
if(k==1)
{
printf("请输入要修改信息的货物编号\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].k)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号 货物名称 货物数量 货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
printf("是否选择修改货物信息\n");
printf("1:yes\t2:no\n");
scanf("%d",&l);
if(l==1)
{
printf("请输入修改后的货物编号\t货物名称\t货物数量\t货物进货价格\n");
scanf("%s %s %d %lf",&g[i].k,&g[i].name,&g[i].n,&g[i].pri);
jl(g,n);
printf("已修改货物信息\n");
}
break;
}
}
if(i==m)
{
printf("不存在该货物\n");
}
}
if(k==2)
{
printf("请输入要修改信息的货物名称\n");
scanf("%s",q);
for(i=0;i<n;i++)
{
if(strcmp(q,g[i].name)==0)
{
printf("已找到,输出该货物信息:\n");
printf("货物编号 货物名称 货物数量 货物进货价格\n");
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
printf("是否选择修改货物信息\n");
printf("1:yes\t2:no\n");
scanf("%d",&l);
if(l==1)
{
printf("请输入修改后的货物编号\t货物名称\t货物数量\t货物进货价格\n");
scanf("%s %s %d %lf",&g[i].k,&g[i].name,&g[i].n,&g[i].pri);
jl(g,n);
printf("已修改货物信息\n");
}
break;
}
}
if(i==m)
{
printf("不存在该货物\n");
}
}
printf("\n按任意键返回!");
getch();
}
3.货物信息修改模块的运行效果
货物信息修改模块的总体运行效果如图11所示。
图 11货物管理系统菜单界面
(六)货物显示模块
1.货物显示模块的设计思路
系统执行的主流程为:输入入库的数量n,进入循环,输入n个货物的信息,保存货物信息,结束。
系统的执行流程如图12所示。
图 12 货物管理系统系统流程图
货物显示模块的编程实现
void output()//货物显示
{
FILE *fp;
int i;
system("cls");
if((fp=fopen("goods.txt","r"))==NULL)
{
printf("open file error\n");
return;
}
printf("货物编号\t货物名称\t货物数量\t货物进货价格\n");
fseek(fp,0,2);
int w=ftell(fp);
fseek(fp,0,0);
for(i=0;w!=ftell(fp);i++)
{
fread(&g[i],sizeof(struct Goods),1,fp);
printf("%s %s %d %.2lf\n",g[i].k,g[i].name,g[i].n,g[i].pri);
}
fclose(fp);
printf("\n按任意键返回!");
getch();
}
3.货物显示模块的运行效果
货物显示模块的总体运行效果如图13所示。
图 13货物管理系统菜单界面
(七)清空仓库模块
1.清空仓库模块的设计思路
系统执行的主流程为:输入入库的数量n,进入循环,输入n个货物的信息,保存货物信息,结束。
系统的执行流程如图14所示。
图 14 货物管理系统系统流程图
货物入库模块的编程实现
void qk()//清空仓库
{
FILE *fp;
system("cls");
if((fp=fopen("goods.txt","w"))==NULL)
{
printf("open file error\n");
return;
}
fclose(fp);
printf("\n按任意键返回!");
getch();
}
3.货物入库模块的运行效果
货物入库模块的总体运行效果如图15所示。
图 15货物管理系统菜单界面
……
四、项目调试
刚开始总是在查询文件的结尾出现问题,用feof()总会多读一行,会多输出一行0 0 0 0,找了挺久找不到解决办法,后来用了
fseek(fp,0,2);
int w=ftell(fp);
fseek(fp,0,0);
for(i=0;w!=ftell(fp);i++)
这几句语句来解决,先找到文件的结尾距开头的字节数,保存下来,如果循环到文件结尾,那么就会退出循环。
五、项目总结
在界面上还需要改进,没有在界面上花太多的心思,实现的功能也不是很全,还需要继续努力。