题目:超市商品管理院系:信息科技学院专业:通信工程姓名: XXX学号: XXX指导教师: 杨永清日期: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数据结构设计struct goods{ﻩintnum;ﻩ//编号char name[15]; ﻩ//名称ﻩdouble price;ﻩ//单价ﻩdoublecount;ﻩ//数量double total; ﻩ//总金额};struct goodsm[50];ﻩﻩ//定义结构体数组结构体struct goods将用于存储商品得基本信息1、主函数main()定义主函数为空类型(void);利用选择结构(switch)实现在在主函数中得调用各个子函数。
main()函数执行流程system("color f3");改变颜色system("title 超市商品信息管理系统");修改窗口名称输出菜单switch{int n;system("color f3");ﻩﻩﻩﻩﻩﻩ//改变颜色ﻩsystem("title 超市商品信息管理系统");ﻩﻩ//修改窗口名称ﻩmenu();ﻩﻩﻩ//显示主菜单scanf("%d",&n); ﻩﻩﻩ//输入选择功能得编号while(n){ﻩswitch(n)ﻩ{ﻩﻩcase 1 : in(); break; ﻩ//输入商品信息ﻩﻩﻩcase2 : find(); break;//查找商品信息ﻩcase 3 : del(); break;ﻩ//删除记录ﻩcase 4 : modify(); break; ﻩ//修改记录ﻩﻩcase 5 : order(); break; //按总金额排序case 6 : orderstock(); break;ﻩﻩﻩ//按库存排序ﻩcase 7 : findOOS(); break;ﻩﻩ //outof Stock,查找无库存商品ﻩﻩﻩcase 8 : show(); break;ﻩﻩ//显示商品信息ﻩdefault: break;ﻩ}ﻩﻩgetch();ﻩmenu(); ﻩﻩﻩ//执行完功能再次显示主菜单scanf("%d",&n);}ﻩreturn 0;}2、子函数(1)void in();录入商品信息用while语句循环,直到用户输入n结束录入;void in(){ﻩint i,a,m=0;ﻩﻩ//m记录得条数ﻩchar c,h;FILE *fp;ﻩ//定义文件指针if((fp=fopen("data、txt","a+"))==NULL)//打开文件ﻩ{ﻩﻩprintf("不能打开\n");return;ﻩ}ﻩwhile(!feof(fp)){ﻩif(fread(&m[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<m;i++)ﻩfwrite (&m[i],len,1,fp); ﻩ//向指定磁盘文件写入信息ﻩwhile(1){ﻩa=0;ﻩﻩprintf("请输入\n");ﻩprintf("编号:");ﻩscanf("%d",&m[m]、num);//商品编号for(i=0;i<m;i++){ﻩﻩif(m[i]、num==m[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",m[m]、name);ﻩﻩﻩﻩ//输入商品名称ﻩﻩprintf("单价:");scanf("%lf",&m[m]、price);ﻩﻩ//输入商品单价ﻩﻩprintf("数量:");ﻩscanf("%lf",&m[m]、count);ﻩﻩﻩ//输入商品数量ﻩm[m]、total=m[m]、price*m[m]、count;//计算出总金额if(fwrite(&m[m],len,1,fp)!=1)ﻩ//将新录入得信息写入指定得磁盘文件ﻩ{ﻩﻩprintf("不能保存!");ﻩﻩgetch();ﻩ}elseﻩ{ﻩprintf("%s 已经保存!\n",m[m]、name);ﻩﻩm++;}ﻩprintf("就是否继续?(y/n):"); ﻩﻩﻩﻩ//询问就是否继续ﻩscanf("%s",&h);if(h==121||h==89)ﻩcontinue;ﻩﻩelseﻩbreak;ﻩ}ﻩfclose(fp);ﻩprintf("OK!\n");}(2)void find()ﻩ用户输入商品编号进行查找,找到则显示,找不到则返回主菜单;{ﻩFILE *fp;int snum,i,m=0;ﻩchar c;ﻩif((fp=fopen("data、txt","rb"))==NULL)ﻩ{ﻩprintf("不能打开文件\n");ﻩreturn;}while(!feof(fp))ﻩif(fread(&m[m],len,1,fp)==1)ﻩm++;ﻩfclose(fp);ﻩif(m==0){ﻩﻩﻩprintf("没有记录,请使用“输入记录”功能添加记录\n");ﻩreturn;ﻩ}ﻩprintf("请输入编号:");ﻩﻩscanf("%d",&snum);for(i=0;i<m;i++)ﻩif(snum==m[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)void del()删除函数,输入商品编号删除相关商品;voiddel() ﻩﻩﻩﻩﻩﻩﻩ{ﻩFILE *fp;ﻩintsnum,i,j,m=0;ﻩchar a;if((fp=fopen("data、txt","r+") )==NULL)ﻩ//打开文件ﻩ{ﻩprintf("不能打开文件\n");ﻩreturn;}while(!feof(fp))if(fread(&m[m],len,1,fp)==1)fclose(fp);ﻩif(m==0){ﻩﻩﻩprintf("没有记录!\n");return;ﻩ}ﻩprintf("请输入编号:");ﻩﻩscanf("%d",&snum);ﻩﻩfor(i=0;i<m;i++)ﻩﻩif(snum==m[i]、num)ﻩﻩﻩbreak;ﻩﻩﻩif(i==m)ﻩﻩ{ﻩﻩprintf("没有找到!");ﻩﻩgetchar();ﻩﻩﻩreturn;ﻩ}ﻩprintf("已经找到该记录,就是否删除?(y/n)");ﻩscanf("%s",&a);ﻩﻩif(a==121||a==89)ﻩ//判断就是否要进行删除ﻩﻩ{ﻩﻩfor(j=i;j<m;j++)ﻩﻩﻩm[j]=m[j+1];ﻩﻩﻩ//将后一个记录移到前一个记录得位置ﻩﻩm--; ﻩﻩ//记录得总个数减1ﻩﻩﻩprintf("成功删除!");ﻩ}if( (fp=fopen("data、txt","wb") )==NULL){printf("不能打开!\n");ﻩreturn;}for(j=0;j<m;j++)ﻩﻩﻩﻩﻩ//将更改后得记录重新写入指定得磁盘文件中ﻩﻩif(fwrite(&m[j] ,len,1,fp)!=1)ﻩ{ﻩﻩprintf("不能保存!\n");ﻩﻩgetch();ﻩ}ﻩﻩfclose(fp);}(4) void modify()修改函数,输入商品编号用for循环与if语句找到该商品信息并进行修改;{int i,j,m=0,snum;if( (fp=fopen("data、txt","r+") )==NULL)ﻩ//打开文件ﻩ{ﻩprintf("不能打开文件!\n");ﻩreturn;}while(!feof(fp))ﻩif(fread(&m[m],len,1,fp)==1)ﻩm++;ﻩif(m==0)ﻩﻩ{ﻩﻩprintf("没有记录!\n");ﻩﻩfclose(fp);ﻩﻩreturn;ﻩ}printf("请输入要修改得记录信息得编号\n编号:");scanf("%d",&snum);ﻩﻩfor(i=0;i<m;i++) ﻩﻩ//检索记录中就是否有要修改得信息ﻩﻩ{ﻩﻩﻩif(snum==m[i]、num)ﻩﻩﻩﻩﻩﻩbreak;ﻩﻩ}ﻩif(snum!=m[i]、num) ﻩ//判断就是否有记录{ﻩprintf("没有找到记录,请重试\n");return;ﻩﻩ}ﻩﻩprintf("已经找到该记录,可以进行修改!\n");ﻩprintf("商品名:");ﻩscanf("%s",m[i]、name); ﻩ//输入名字printf("单价:");ﻩscanf("%lf",&m[i]、price); ﻩﻩ//输入商品单价ﻩﻩﻩprintf("数量:");ﻩscanf("%lf",&m[i]、count);ﻩﻩ//输入商品数量ﻩﻩprintf("修改成功!");m[i]、total=m[i]、price*m[i]、count;ﻩif((fp=fopen("data、txt","wb") )==NULL){ﻩﻩprintf("不能打开文件\n");return;ﻩﻩ}ﻩfor(j=0;j<m;j++) ﻩﻩﻩﻩ//将新修改得信息写入指定得磁盘文件中ﻩﻩﻩif(fwrite(&m[j] ,len,1,fp)!=1)ﻩﻩ{ﻩﻩprintf("不能保存!");ﻩﻩﻩgetch();}ﻩfclose(fp);}(5)void findOOS()查找无货商品,用for循环与if语句找到该商品信息,并显示;{ﻩFILE *fp;int i,m=0;if ( (fp=fopen("data、txt","rb"))==NULL) ﻩ//打开文件ﻩ{ﻩprintf("不能打开文件\n");ﻩreturn;ﻩ}ﻩwhile(!feof(fp))ﻩﻩif(fread(&m[m],len,1,fp) ==1)ﻩm++;ﻩfclose(fp);if(m==0)ﻩ{ﻩprintf("没有记录,请使用“输入记录”功能添加记录\n");ﻩﻩreturn;ﻩ}printf(" 以下商品缺货:\n\n编号商品名称单价数量总金额 \t\n");ﻩfor(i=0;i<m;i++)ﻩif (0、0==m[i]、count)ﻩﻩﻩ//查找就是否有误库存商品ﻩ{ﻩprintf(form,data);ﻩﻩ//将查找出得结果按指定格式输出ﻩﻩ}ﻩif (i==m)ﻩprintf("——————查找完毕————————————————\n");ﻩﻩ//完成查找}(6)void order()按金额对商品进行由多到少排序{ﻩFILE*fp;struct goods t;ﻩint i=0,j=0,m=0;if ( (fp=fopen("data、txt","r+") )==NULL)ﻩﻩ//打开文件{ﻩprintf("can not open!\n");return;}ﻩwhile(!feof(fp))if(fread (&m[m] ,len,1,fp) ==1)ﻩm++;ﻩfclose(fp);if(m==0){ﻩprintf("no record!\n");ﻩreturn;ﻩ}ﻩif( (fp=fopen("data、txt","wb") )== NULL){ﻩﻩprintf("can not open\n");return;ﻩ}ﻩfor(i=0;i<m-1;i++)for(j=i+1;j<m;j++)ﻩﻩ//双重循环实现比较并交换ﻩﻩif(m[i]、total<m[j]、total)ﻩﻩ{ﻩﻩt=m[i];ﻩm[i]=m[j];m[j]=t;ﻩﻩ}ﻩif( (fp=fopen("data、txt","wb") )== NULL)ﻩ{ﻩﻩprintf("cannot open\n");ﻩreturn;ﻩﻩ}ﻩﻩfor(i=0;i<m;i++)ﻩ//将重新排好序得内容重新写入指定得磁盘文件中ﻩﻩif(fwrite(&m[i] ,len,1,fp)!=1)ﻩ{ﻩﻩprintf("%s can not save!\n");ﻩgetch();ﻩ}ﻩfclose(fp);ﻩprintf("保存成功!\n");}(7) void orderstock()按商品数量对商品进行由多到少排序{FILE*fp;ﻩﻩ//定义文件指针struct goods t;ﻩint i=0,j=0,m=0;if( (fp=fopen("data、txt","r+") )== NULL)ﻩ//打开文件{ﻩﻩprintf("无法打开\n");return;ﻩ}while(!feof(fp))ﻩif(fread(&m[m] ,len,1,fp)==1)ﻩm++;ﻩfclose(fp);ﻩif(m==0)ﻩ{ﻩprintf("no record!\n");return;ﻩ}if( (fp=fopen("data、txt","wb") )==NULL){ﻩprintf("无法打开\n");ﻩreturn;}ﻩfor(i=0;i<m-1;i++)ﻩfor(j=i+1;j<m;j++) ﻩﻩﻩ//双重循环实现比较并交换ﻩﻩif(m[i]、count<m[j]、count)ﻩ{ﻩﻩt=m[i];ﻩﻩﻩﻩm[i]=m[j];ﻩm[j]=t;}ﻩif((fp=fopen ("data、txt","wb"))== NULL)ﻩ{ﻩprintf("无法打开\n");ﻩreturn;ﻩﻩ}ﻩfor(i=0;i<m;i++) //将重新排好序得内容重新写入指定得磁盘文件中ﻩif(fwrite (&m[i] ,len,1,fp) !=1)ﻩﻩ{ﻩﻩﻩprintf("%s 无法保存\n");ﻩﻩgetch();}ﻩfclose(fp);ﻩprintf("保存成功!\n");}(8) void show()显示商品信息{FILE *fp;ﻩint i,m=0;ﻩif( (fp=fopen("data、txt","rb") )== NULL)//打开文件ﻩ{printf("不能打开文件\n");ﻩreturn;}while(!feof(fp))ﻩﻩif (fread(&m[m],len,1,fp)==1)ﻩm++;ﻩfclose(fp);ﻩﻩif(m==0)ﻩ{ﻩprintf("没有记录,请使用“输入记录”功能添加记录\n");ﻩﻩreturn;ﻩ}printf(" 商品信息:\n\n编号商品名称单价数量总金额 \t\n");ﻩﻩfor ( i=0 ; i<m ; i++ )ﻩﻩ{ﻩﻩprintf(form,data);ﻩ//将商品信息按指定格式输出ﻩﻩ}ﻩprintf("\n");ﻩﻩprintf("———————显示完毕,按任意键返回主菜单————————\n");ﻩ//完成查找}3、程序测试在主菜单中选择1当用户输入1并按回车键后,即可进入数据输入界面。