超市商品管理系统c语言.docx
- 文档编号:30299590
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:28
- 大小:636.61KB
超市商品管理系统c语言.docx
《超市商品管理系统c语言.docx》由会员分享,可在线阅读,更多相关《超市商品管理系统c语言.docx(28页珍藏版)》请在冰豆网上搜索。
超市商品管理系统c语言
实训报告
题目:
超市商品管理
院系:
信息科技学院
专业:
通信工程
姓名:
XXX
学号:
1251100XXX
指导教师:
杨永清
日期:
2013年9月15日
桂林电子科技大学信息科技学院
超市商品管理
本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、单链表、文件等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、程序简介
本程序用VC++6.0编译,运行于windows系统下。
1.1、本程序应具有以下功能:
1、文件操作功能
文件操作:
可建立、打开、保存、关闭数据文件。
如果是新建的文件,可输入商品信息数据:
数据包括商品编号、商品名、商品类别、商品数量、商品价格等。
2、数据输入功能
输入信息:
输入商品编号、数量完成进货操作。
3、数据添加、修改、删除功能
添加:
添加一种或多种新商品,并能输入其商品信息。
修改:
修改商品信息,可包括商品编号、名称、种类、数量和单价。
删除:
删除一类或多类商品的所有信息。
4、计算功能
可通过查询商品信息功能,自动计算并输出需要进货的商品信息。
通过商品数量及单价,自动计算出商品总价。
5、查询功能
可分别按商品编号和需要进货的商品进行查询。
6、排序功能
可分别按商品编号、金额等进行排序。
7、数据显示功能
可分别浏览输入、查询和排序后的商品信息。
2、总体设计图
采用模块化程序设计方法,将较大任务按一定规则分成一些较小任务,各个模块之间既独立又相关。
2.1界面设计
主菜单
输入界面:
信息显示界面:
2.2详细设计:
(以下为部分代码)
2.2.1数据结构设计
structgoods
{
intnum;//编号
charname[15];//名称
doubleprice;//单价
doublecount;//数量
doubletotal;//总金额
};
structgoodscomm[50];//定义结构体数组
结构体structgoods将用于存储商品的基本信息
1、主函数main()
定义主函数为空类型(void);利用选择结构(switch)实现在在主函数中的调用各个子函数。
main()函数执行流程
system("colorf3");改变颜色
system("title超市商品信息管理系统");修改窗口名称
输出菜单
switch
1
输入商品信息
2
查找商品信息
3
删除商品信息
4
修改商品信息
5
按总金额排序商品信息
6
按库存商品信息
7
查询缺货商品
8
浏览商品信息
0
退出
清屏幕
intmain(void)
{
intn;
system("colorf3");//改变颜色
system("title超市商品信息管理系统");//修改窗口名称
menu();//显示主菜单
scanf("%d",&n);//输入选择功能的编号
while(n)
{
switch(n)
{
case1:
in();break;//输入商品信息
case2:
find();break;//查找商品信息
case3:
del();break;//删除记录
case4:
modify();break;//修改记录
case5:
order();break;//按总金额排序
case6:
orderstock();break;//按库存排序
case7:
findOOS();break;//outofStock,查找无库存商品
case8:
show();break;//显示商品信息
default:
break;
}
getch();
menu();//执行完功能再次显示主菜单
scanf("%d",&n);
}
return0;
}
2、子函数
(1)voidin();
录入商品信息用while语句循环,直到用户输入n结束录入;
voidin()
{
inti,a,m=0;//m记录的条数
charc,h;
FILE*fp;//定义文件指针
if((fp=fopen("data.txt","a+"))==NULL)//打开文件
{
printf("不能打开\n");
return;
}
while(!
feof(fp))
{
if(fread(&comm[m],len,1,fp)==1)
m++;
}
fclose(fp);
if(m==0)
printf("没有找到\n");
else
{
system("cls");
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开");
return;
}
for(i=0;i fwrite(&comm[i],len,1,fp);//向指定磁盘文件写入信息 while (1) { a=0; printf("请输入\n"); printf("编号: "); scanf("%d",&comm[m].num);//商品编号 for(i=0;i { if(comm[i].num==comm[m].num) {a=1; printf("该记录已存在,按q返回主菜单,按任意键重新输入"); scanf("%s",&c); break; } } if(a==1&&(c==113||c==81))//判断q是否被按下 break; else if(a==1&&(c! =113||c! =81)) { system("cls"); continue; } printf("商品名: "); scanf("%s",comm[m].name);//输入商品名称 printf("单价: "); scanf("%lf",&comm[m].price);//输入商品单价 printf("数量: "); scanf("%lf",&comm[m].count);//输入商品数量 comm[m].total=comm[m].price*comm[m].count;//计算出总金额 if(fwrite(&comm[m],len,1,fp)! =1)//将新录入的信息写入指定的磁盘文件 { printf("不能保存! "); getch(); } else { printf("%s已经保存! \n",comm[m].name); m++; } printf("是否继续? (y/n): ");//询问是否继续 scanf("%s",&h); if(h==121||h==89) continue; else break; } fclose(fp); printf("OK! \n"); } (2)voidfind() 用户输入商品编号进行查找,找到则显示,找不到则返回主菜单; { FILE*fp; intsnum,i,m=0; charc; if((fp=fopen("data.txt","rb"))==NULL) { printf("不能打开文件\n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有记录,请使用“输入记录”功能添加记录\n"); return; } printf("请输入编号: "); scanf("%d",&snum); for(i=0;i if(snum==comm[i].num)//查找输入的编号是否在记录中 { printf("已经找到该记录,是否显示? (y/n)"); scanf("%s",&c); if(c==121||c==89)//判断y是否被按下 { printf("编号商品名称单价数量总金额\t\n"); printf(form,data);//将查找出的结果按指定格式输出 break; } else return; } if(i==m) printf("没有找到相应的记录! \n");//未找到要查找的信息 } (3)voiddel() 删除函数,输入商品编号删除相关商品; voiddel() { FILE*fp; intsnum,i,j,m=0; chara; if((fp=fopen("data.txt","r+"))==NULL)//打开文件 { printf("不能打开文件\n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有记录! \n"); return; } printf("请输入编号: "); scanf("%d",&snum); for(i=0;i if(snum==comm[i].num) break; if(i==m) { printf("没有找到! "); getchar(); return; } printf("已经找到该记录,是否删除? (y/n)"); scanf("%s",&a); if(a==121||a==89)//判断是否要进行删除 { for(j=i;j comm[j]=comm[j+1];//将后一个记录移到前一个记录的位置 m--;//记录的总个数减1 printf("成功删除! "); } if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开! \n"); return; } for(j=0;j if(fwrite(&comm[j],len,1,fp)! =1) { printf("不能保存! \n"); getch(); } fclose(fp); } (4)voidmodify() 修改函数,输入商品编号用for循环与if语句找到该商品信息并进行修改; { FILE*fp; inti,j,m=0,snum; if((fp=fopen("data.txt","r+"))==NULL)//打开文件 { printf("不能打开文件! \n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; if(m==0) { printf("没有记录! \n"); fclose(fp); return; } printf("请输入要修改的记录信息的编号\n编号: "); scanf("%d",&snum); for(i=0;i { if(snum==comm[i].num) break; } if(snum! =comm[i].num)//判断是否有记录 { printf("没有找到记录,请重试\n"); return; } printf("已经找到该记录,可以进行修改! \n"); printf("商品名: "); scanf("%s",comm[i].name);//输入名字 printf("单价: "); scanf("%lf",&comm[i].price);//输入商品单价 printf("数量: "); scanf("%lf",&comm[i].count);//输入商品数量 printf("修改成功! "); comm[i].total=comm[i].price*comm[i].count; if((fp=fopen("data.txt","wb"))==NULL) { printf("不能打开文件\n"); return; } for(j=0;j if(fwrite(&comm[j],len,1,fp)! =1) { printf("不能保存! "); getch(); } fclose(fp); } (5)voidfindOOS() 查找无货商品,用for循环与if语句找到该商品信息,并显示; { FILE*fp; inti,m=0; if((fp=fopen("data.txt","rb"))==NULL)//打开文件 { printf("不能打开文件\n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有记录,请使用“输入记录”功能添加记录\n"); return; } printf("以下商品缺货: \n\n编号商品名称单价数量总金额\t\n"); for(i=0;i if(0.0==comm[i].count)//查找是否有误库存商品 { printf(form,data);//将查找出的结果按指定格式输出 } if(i==m) printf("——————查找完毕————————————————\n");//完成查找 } (6)voidorder() 按金额对商品进行由多到少排序 { FILE*fp; structgoodst; inti=0,j=0,m=0; if((fp=fopen("data.txt","r+"))==NULL)//打开文件 { printf("cannotopen! \n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("norecord! \n"); return; } if((fp=fopen("data.txt","wb"))==NULL) { printf("cannotopen\n"); return; } for(i=0;i for(j=i+1;j if(comm[i].total { t=comm[i]; comm[i]=comm[j]; comm[j]=t; } if((fp=fopen("data.txt","wb"))==NULL) { printf("cannotopen\n"); return; } for(i=0;i if(fwrite(&comm[i],len,1,fp)! =1) { printf("%scannotsave! \n"); getch(); } fclose(fp); printf("保存成功! \n"); } (7)voidorderstock() 按商品数量对商品进行由多到少排序 { FILE*fp;//定义文件指针 structgoodst; inti=0,j=0,m=0; if((fp=fopen("data.txt","r+"))==NULL)//打开文件 { printf("无法打开\n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("norecord! \n"); return; } if((fp=fopen("data.txt","wb"))==NULL) { printf("无法打开\n"); return;} for(i=0;i for(j=i+1;j if(comm[i].count { t=comm[i]; comm[i]=comm[j]; comm[j]=t; } if((fp=fopen("data.txt","wb"))==NULL) { printf("无法打开\n"); return; } for(i=0;i if(fwrite(&comm[i],len,1,fp)! =1) { printf("%s无法保存\n"); getch(); } fclose(fp); printf("保存成功! \n"); } (8)voidshow() 显示商品信息 { FILE*fp; inti,m=0; if((fp=fopen("data.txt","rb"))==NULL)//打开文件 { printf("不能打开文件\n"); return; } while(! feof(fp)) if(fread(&comm[m],len,1,fp)==1) m++; fclose(fp); if(m==0) { printf("没有记录,请使用“输入记录”功能添加记录\n"); return; } printf("商品信息: \n\n编号商品名称单价数量总金额\t\n"); for(i=0;i { printf(form,data);//将商品信息按指定格式输出 } printf("\n"); printf("———————显示完毕,按任意键返回主菜单————————\n");//完成查找 } 3、程序测试 ●在主菜单中选择1 当用户输入1并按回车键后,即可进入数据输入界面。 若是第一次运行该程序,应能实现从键盘输入学生信息到文件中,当输入的编号重复时,应能不予接收,当输入完时提示是否继续,按y继续,按n结束输入,返回主菜单界面。 若非第一次运行该程序,应能实现从文件中读入商品信息,并进入增加商品记录画面。 其输入记录过程如下图所示 ●在主菜单中选择2 当用户输入2并按回车键后,即可进入记录查找界面。 其查找记录过程如下图所示,可按编号进行查找。 ●在主菜单中选择3 当用户输入3并按回车键后,即可进入记录删除界面。 其删除记录过程如下图所示,这里按编号删除了一条编号为2的记录。 ●在主菜单中选择4 当用户输入4并按回车键后,即可进入记录修改界面。 其修改记录过程如下图所示,将编号为1的记录修改。 ●在主菜单中选择5或6 当用户输入7并按回车键后,即可进入记录排序界面。 其排序结果如下图所示,有排序前和排序后的记录输出结果。 排序前 排序后 ●在主菜单中选择7 当用户输入7并按回车键后,即可显示无货商品。 其结果如图3.7所示。 ●在主菜单中选择8 当用户输入8并按回车键后,即可显示全部商品信息。 其排序结果如图所示。 4、总结 3.1开发经验 通过对本题目的开发,体会到要掌握以下几点内容。 ●大程序的设计风格。 按“自顶向下,逐步细化,模块化”的方法进行程序设计。 ●编写主函数,并进行测试与调试。 当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。 C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。 ●定义函数时,应选好参数的个数和数据类型。 ●文件使用方法。 文件使用完毕后应及时关闭。 3.2设计中尚存的不足之处 关于这次的程序,也有许多不足的地方. 由于个人水平有限有部分重要功能没有实现,如商品录入日期管理,商品厂家名以及商品批次等。 这些在现实的超市商品管理中是经常用到的。 完美的程序是不存在的,而且由于时间仓促,这套程序也难免有瑕疵,希望老师批评指正。 3.3感想和心得体会 通过这次
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超市 商品 管理 系统 语言