版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
{店铺管理}超市商品信息系统设计报告及程序语言1.题目《超市商品信息管理系统》的设计与实现2.功能(1)每一条记录包括一个商品的ID、名称、价格、保质日期。(2)信息录入功能:可以完成信息记录的追加与插入。(3)信息排序功能:按商品ID、商品价格进行排序。(4)信息查询功能:完成按商品ID、商品名称查找商品记录,并显示。(5)读取功能:将保存在文件中的商品记录读取出来。(6)修改信息功能:按商品的ID进行读取未修改前的数据,输入新信息,保存。(7)删除功能:按商品ID删除商品信息记录,并保存。(8)退出:退出主菜单,退出程序。3.系统流程图4.设计内容整个系统除了主函数外,另外还有一三个函数,实现八大功能:录入功能(追加、插入)、显示功能、查询功能、排序功能、删除功能、保存功能、读取功能。各个函数的详细设计说明分别如下:4.1主函数main()利用无限次循环while(select!='0')和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。4.2菜单选择函数voidDisMainMenu();“功能选择”根据每个功能前面的序号进行选择等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4.3信息录入函数intInformationInput(GOODSgoo[],intcn)插入其中GOODSgoo[]是结构体数组,cn是本次录入商品记录的总数。信息录入函数的流程图如下:信息录入函数的程序如下:intInformationInput(GOODSgoo[],intcn){intnumber,i,m,n,a1,j,a2=0;chara3;printf("\n请输入本次录入的商品品种的总数:");scanf("%d",&number);if(number>MAX_NUM-cn){printf("您输入的人数太多,大于%d人!\n",MAX_NUM-cn);system("pause");return(0);}printf("\n****1.信息的追加****\t****2.信息的插入****\n");scanf("%d",&m);if(m==1){for(i=cn;i<number+cn;i++){printf("\t商品ID:\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);for(j=0;j<i;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y')break;elsereturn(0);}elsecontinue;}printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].,&goo[i].,&goo[i].);printf("\n");}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,cn,cn+number);printf("\n");return(number+cn);}elseif(m==2){printf("该数据插入在商品ID?之前:");scanf("%d",&n);for(i=0;i<cn;i++){if(goo[i].ID==n){a1=i;break;}elsecontinue;}if(i<=cn-1){for(i=cn-1;i>=a1;i--){goo[i+number].ID=goo[i].ID;strcpy(goo[i+number].name,goo[i].name);goo[i+number].price=goo[i].price;goo[i+number].=goo[i].;goo[i+number].=goo[i].;goo[i+number].=goo[i].;}for(i=a1;i<a1+number;i++){printf("\t商品ID:\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].,&goo[i].,&goo[i].);printf("\n");}for(i=a1;i<a1+number;i++){for(j=0;j<a1;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}for(j=a1+number;j<cn+number;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,a1,a1+number);printf("\n");return(number+cn);}else{printf("\n输入插入位置有误,请查询数据文件后重新插入!");system("pause");return(0);}}else{printf("输入错误!");return(0);}}4.4信息排序函数voidSort(GOODSgoo[],intmax);maxID价格运用“冒泡法”进行升序排序。voidSort(GOODSgoo[],intmax){inti,j,select;GOODSp;printf("\n***********************请选择排序方式**********************\n");printf("\n\t1--按商品ID排序方式\t2--按商品价格排序方式\n");printf("\n***********************************************************\n");printf("请选择(1--2):");select=getche();getch();switch(select){case'1':printf("您选择的是按商品ID排序方式!\n");for(i=0;i<max-1;i++)for(j=0;j<max-1-i;j++)if(goo[j].ID>goo[j+1].ID){p=goo[j];goo[j]=goo[j+1];goo[j+1]=p;}break;case'2':printf("您选择的是按商品价格排序方式!\n");for(i=0;i<max-1;i++)for(j=0;j<max-1-i;j++)if(goo[j].price>goo[j+1].price){p=goo[j];goo[j]=goo[j+1];goo[j+1]=p;}break;default:printf("选择错误!\n");}}4.5显示记录函数4.5.1显示记录函数voidDisplayInformation(GOODSgoo[],intmax);这是一个不返回值的有参函数,形参为max,负责对全部商品信息记录的显示。4.5.2显示记录函数voidDisplayInformation2(GOODSgoo[],intmin,intmax);这是一个不返回值的有参函数,形参为min,max,负责对刚输入的商品信息记录的显示。4.6查找记录函数4.6.1按商品ID查找intFindID(GOODSgoo[],intfindID,intmax);按照商品的ID在已有所有记录中进行查询。4.6.2按商品名称查intFindName(GOODSgoo[],charfindname[],intmax);按照商品的名称在已有所有记录中进行查询。4.7保存数据函数voidSave(GOODSgoo[],intmax)这是一个不返回值的有参函数,形参为goo[],max,负责对输入的商品信息记录进行保存,并在工程文件夹下生成的数据文件。voidSave(GOODSgoo[],intmax){inti;FILE*fp;if((fp=fopen("","w"))!=NULL){for(i=0;i<max;i++)fwrite(&goo[i],sizeof(GOODS),1,fp);fclose(fp);}elseprintf("cannotopenfile!\n");}4.8读取数据文件函数intRead(GOODSgoo[])这是一个不返回值的有参函数,形参为goo[],max,负责从文件中读取商品信息到结构体数组goo中,函数返回读取的记录数。4.9信息修改函数intEditInformation(GOODSgoo[],intmax)这是一个有参函数,形参GOODSgoo[]为结构体数组,intmax是所有商品结构体总数。先输入要修改的商品的ID可按“Y”进行删除,保存,最后返回修改商品的序号。4.10删除记录函数voidDelete(GOODSgoo[],intn,intmax);这是一个有参函数,形参GOODSgoo[]为结构体数组,intn是本次要删除的商品ID,intmax是所有的结构体总数。除前的数据和删除后的数据,等确认后按“Y”进行删除,保存。完成商品信息的删除。流程图如下:5.调试分析(1)由于程序里面有大量中文,中文分号“;”出了不少报错问题。(2select=getche();getch();次进入主程序,所以再一些可执行语句后加上system(“pause”);一遍看清指令执行过程,当然在程序一开始的时候加入了头文件#include<windows.h>.(3goo[]时,用scanf("%d",&goo[i].price);输入价格,Build之后并未报错,但是商品价格显示一直是0,最后修改成scanf("%f",&goo[i].price);并顺利显示价格。(4)在一开始的信息录入函数中,但出现输入的商品ID、名称出现重复时,函数本身并不能给出提示,最后采用if语句加以修改成功,因为if语句过多,出现了errorC2一八1:illegalelsewithoutmatchingif,最后在每个if后面加上了elsecontinue;来匹配if语句。for(j=0;j<i;j++)i就是加上当前输入数据结构体的ID在比对名称时使用了if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0),所以加入了头文件#include<string.h>。在信息插入子菜单下,采用两次for循环for(i=a1;i<a1+number;i++){for(j=0;j<a1;j++){}for(j=a1+number;j<cn+number;j++){}}的结构体项。(5)采用fflush(stdin)函数来清除输入缓冲,以免对后续的输入产生影响。(6)使用了if(a3=='Y'||a3=='y'),避免了在用户在对信息确认时出现大小写切换问题,影响程序正常运行。(7)一开始数据输出时总是右对齐,最后采用"%-10d%-10d%-14s%-14.1f%",形式对输出进行简单美化。(8)再插入数据信息时,一开始在插入点之后的数据全部变成插入点的那个结构体的数据,如图在商品ID为501之前插入801:原插入调整程序如下:for(i=a1;i<cn;i++){goo[i+number].ID=goo[i].ID;strcpy(goo[i+number].name,goo[i].name);goo[i+number].price=goo[i].price;goo[i+number].=goo[i].;goo[i+number].=goo[i].;goo[i+number].=goo[i].;}修改后的程序是:for(i=cn-1;i>=a1;i--){goo[i+number].ID=goo[i].ID;strcpy(goo[i+number].name,goo[i].name);goo[i+number].price=goo[i].price;goo[i+number].=goo[i].;goo[i+number].=goo[i].;goo[i+number].=goo[i].;}插入后显示为:这个错误修改的关键是for(i=cn-1;i>=a1;i--),即先让所要向后移动的最后面的结构体先取其满足要求的number长度的结构体值goo[cn-1+number]=goo[cn-1]取值。(9)错误等。(10+number,结果导致数据文件里的数据项没有全部显示出来。6.总结经过这次C语言课程设计,感觉自己收获不少!进行保存和读写操作C些参考课外书,使C语言的知识强化了不少。和不返回值函数两者在主函数中的调用是不同的等等。C语言的重要性可能不是很好看,但绝对实用!入手,不能做出一个中看不中用的程序或者软件。计算机编程思维的形成不是一蹴而就的,在语言学习中,无论平时的例题作业题或上机题都是计算机思维的实现,看的做的多了,自然而然地就会形成一种思维模式,也就是形成对程序质量很重要由于这是第一次做大的程序设计,难免会有些地方写的不妥当,希望老师多多指点。6.程序#include<stdio.h>#include<conio.h>//清屏头文件getch()#include<string.h>#include<windows.h>#defineMAX_NUM2000/****************************************************定义数据结构***********************************************/structdata{intyear;intmonth;intday;};typedefstructgoods{intID;charname[8];floatprice;structdataguarant;}GOODS;/****************************************************函数原型***********************************************/voidDisMainMenu();intInformationInput(GOODSgoo[],intcn);voidSort(GOODSgoo[],intmax);voidDisplayInformation(GOODSgoo[],intmax);voidDisplayInformation2(GOODSgoo[],intmin,intmax);voidQueryInformation(GOODSgoo[],intmax);intFindID(GOODSgoo[],intfindID,intmax);intFindName(GOODSgoo[],charfindname[],intmax);voidSave(GOODSgoo[],intmax);intRead(GOODSgoo[]);intEditInformation(GOODSgoo[],intmax);voidDelete(GOODSgoo[],intn,intmax);/*******************************************************显示主菜单**************************************************/voidDisMainMenu(){system("cls");printf("********************超市信息管理系统***********************\n");printf("\n\t1--信息录入\t2--信息排序\n");printf("\n\t3--信息查询\t4--读取数据文件\n");printf("\n\t5--修改信息\t6--删除信息\n");printf("\n\t0--退出\n");printf("\n***********************************************************\n");printf("请选择(0--6):\n");}/************************************************信息录入*********************************************/intInformationInput(GOODSgoo[],intcn){intnumber,i,m,n,a1,j,a2=0;chara3;printf("\n请输入本次录入的商品品种的总数:");scanf("%d",&number);if(number>MAX_NUM-cn){printf("您输入的人数太多,大于%d人!\n",MAX_NUM-cn);system("pause");return(0);}printf("\n****1.信息的追加****\t****2.信息的插入****\n");scanf("%d",&m);if(m==1){for(i=cn;i<number+cn;i++){printf("\t商品ID:\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);for(j=0;j<i;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y')break;elsereturn(0);}elsecontinue;}printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].,&goo[i].,&goo[i].);printf("\n");}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,cn,cn+number);printf("\n");return(number+cn);}elseif(m==2){printf("该数据插入在商品ID?之前:");scanf("%d",&n);for(i=0;i<cn;i++){if(goo[i].ID==n){a1=i;break;}elsecontinue;}if(i<=cn-1){for(i=cn-1;i>=a1;i--){goo[i+number].ID=goo[i].ID;strcpy(goo[i+number].name,goo[i].name);goo[i+number].price=goo[i].price;goo[i+number].=goo[i].;goo[i+number].=goo[i].;goo[i+number].=goo[i].;}for(i=a1;i<a1+number;i++){printf("\t商品ID:\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].,&goo[i].,&goo[i].);printf("\n");}for(i=a1;i<a1+number;i++){for(j=0;j<a1;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}for(j=a1+number;j<cn+number;j++){if(goo[j].ID==goo[i].ID||strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y/N?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,a1,a1+number);printf("\n");return(number+cn);}else{printf("\n输入插入位置有误,请查询数据文件后重新插入!");system("pause");return(0);}}else{printf("输入错误!");return(0);}}/*********************************************************排序************************************************/voidSort(GOODSgoo[],intmax){inti,j,select;GOODSp;printf("\n***********************请选择排序方式**********************\n");printf("\n\t1--按商品ID排序方式\t2--按商品价格排序方式\n");printf("\n***********************************************************\n");printf("请选择(1--2):");select=getche();getch();switch(select){case'1':printf("您选择的是按商品ID排序方式!\n");for(i=0;i<max-1;i++)for(j=0;j<max-1-i;j++)if(goo[j].ID>goo[j+1].ID){p=goo[j];goo[j]=goo[j+1];goo[j+1]=p;}break;case'2':printf("您选择的是按商品价格排序方式!\n");for(i=0;i<max-1;i++)for(j=0;j<max-1-i;j++)if(goo[j].price>goo[j+1].price){p=goo[j];goo[j]=goo[j+1];goo[j+1]=p;}break;default:printf("选择错误!\n");}}/******************************************************显示所有商品信息***************************************/voidDisplayInformation(GOODSgoo[],intmax){inti;printf("\n\t序号商品ID商品名称商品单价商品保质日期\n");for(i=0;i<max;i++){printf("\t%-10d%-10d%-14s%-14.1f%",i+1,goo[i].ID,goo[i].name,goo[i].price);printf("%d%d%d\n",goo[i].,goo[i].,goo[i].);}}/******************************************************显示输入商品信息***************************************/voidDisplayInformation2(GOODSgoo[],intmin,intmax){inti;printf("\n\t序号商品ID商品名称商品单价商品保质日期\n");for(i=min;i<max;i++){printf("\t%-10d%-10d%-14s%-14.1f%",i+1,goo[i].ID,goo[i].name,goo[i].price);printf("%d%d%d\n",goo[i].,goo[i].,goo[i].);}}/***************************************************商品信息查询******************************************************/voidQueryInformation(GOODSgoo[],intmax){intfindID,i,select;charfindname[8];printf("\n*****************请选择查询方式***************\n\n");printf("\t1--按商品ID查询\t2--按商品名称查询\n");printf("\n**********************************************\n");printf("请选择(1--2):");scanf("%d",&select);switch(select){case1:printf("\t您选择的是按商品ID查询方式!\n\t请输入商品ID:");scanf("%d",&findID);if((i=FindID(goo,findID,max))!=-1){printf("\n查找结果如下:\n");printf("\n\t序号商品ID商品名称商品单价商品保质日期\n");printf("\t%-10d%-10d%-14s%-14.1f%",i+1,goo[i].ID,goo[i].name,goo[i].price);printf("%d%d%d\n\n",goo[i].,goo[i].,goo[i].);}elseprintf("\n您输入的商品ID不存在!\n");break;case2:printf("\t您选择的是按商品名称查询方式!\n\t请输入商品的名称:");scanf("%s",findname);if((i=FindName(goo,findname,max))!=-1){printf("\t查找结果如下:\n");printf("\n序号商品ID商品名称商品单价商品保质日期\n");printf("%-10d%-10d%-14s%-14.1f%",i+1,goo[i].ID,goo[i].name,goo[i].price);printf("%d%d%d\n",goo[i].,goo[i].,goo[i].);}elseprintf("您输入的商品名称不存在,请核实后再次查询!\n");}}/************************************************************查找指定ID的商品信息******************************************************/intFindID(GOODSgoo[],intfindID,intmax){inti;for(i=0;i<max;i++){if(goo[i].ID==findID)break;}if(i<max)returni;elsereturn-1;}/***********************************************************查找指定名称的商品信息******************************************************/intFindName(GOODSgoo[],charfindname[8],intmax){inti;for(i=0;i<max;i++){if(strcmp(goo[i].name,findname)==0)break;}if(i<max)returni;elsereturn-1;}/****************************************************保存数据*************************************************/voidSave(GOODSgoo[],intmax){inti;FILE*fp;if((fp=fopen("","w"))!=NULL){for(i=0;i<max;i++)fwrite(&goo[i],sizeof(GOODS),1,fp);fclose(fp);}elseprintf("cannotopenfile!\n");}/******************************************************读取数据*******************************************/intRead(GOODSgoo[]){inti,result=-1;FILE*fp;if((fp=fopen("","r"))!=NULL){i=0;while(fread(&goo[i],sizeof(GOODS),1,fp)!=0)i++;result=i;fclose(fp);}elseprintf("\ncannotopenfile!\n");returnresult;}/*****************************************************信息修改******************************************/intEditInformation(GOODSgoo[],intmax){inti;intfindID;printf("\n请输入商品ID:");scanf("%d",&findID);if((i=FindID(goo,findID,max))!=-1){printf("商品名称:%s\n",goo[i].name);printf("\n*************原信息**********:\n\n\t商品ID商品名称商品单价商品保质日期\n");printf("\t%-10d%-12s%-12.1f%",goo[i].ID,goo[i].name,goo[i].price);printf("\t%d%d%d\n",goo[i].,goo[i].,goo[i].);printf("\n\n**********请输入新信息*******:\n\n");printf("\t商品ID:\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].,&goo[i].,&goo[i].);returni;}else{printf("您输入的商品ID不存在!\n");return-1;}}/******************************************************删除信息*************************************************/voidDelete(GOODSgoo[],intn,intmax){intj;printf("\n未删除前的数据\n");DisplayInformation(goo,max);for(j=n;j<max-1;j++){goo[j].ID=goo[j+1].ID;strcpy(goo[j].name,goo[j+1].name);goo[j].price=goo[j+1].price;goo[j].=goo[j+1].;goo[j].=goo[j+1].;goo[j].=goo[j+1].;}max=max-1;printf("\n删除后的数据\n");DisplayInformation(goo,max);}/*********************************************************************主程序*************************************************************/voidmain(){intbb,i,aa,ee;charselect,dd;charcc[8];GOODSgoo[MAX_NUM];intcn=0;select=0;while(select!='0'){system("cls");DisMainMenu();select=getche();getch();switch(select){case'1':printf("您选择的是信息录入!\n");bb=InformationInput(goo,cn);if(bb!=0){printf("\t是否保存?(1.**保存并退出**\t2.**不保存并退出**)\n");scanf("%d",&aa);if(aa==1){cn=bb;Save(goo,cn);printf("保存成功!");system("pause");break;}elsebreak;}elsebreak;case'2':printf("您选择的是信息排序!\n");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江宁波市江北区劳动和社会保障事务代理服务有限公司招聘1人备考题库含答案详解(新)
- 2026湖北恩施州宣恩县万德昌智能机器人有限公司招聘1人备考题库附答案详解(黄金题型)
- 2026湖北武汉市汉口重点初级中学招聘教师2人备考题库及完整答案详解
- 2026贵州黔南州长顺县“雁归兴顺”人才回流13人备考题库及答案详解(名校卷)
- 2026河南中原再担保集团科技融资担保有限公司招聘4人备考题库完整答案详解
- 2026湖北武汉创新投资集团有限公司招聘备考题库含答案详解(培优)
- 2026湖北事业单位联考麻城市招聘166人备考题库含答案详解(轻巧夺冠)
- 2026浙江丽水学院招聘3人备考题库含答案详解(培优a卷)
- 2026福建南平市建阳区属国有集团招聘50人备考题库附参考答案详解(夺分金卷)
- 四川大学2026年第一批校聘非事业编制岗位招聘备考题库附参考答案详解(满分必刷)
- GB/T 20513.1-2025光伏系统性能第1部分:监测
- 2025年ESG广告的危机公关价值
- 2026年普通高中学业水平合格性考试政治必背知识点考点提纲
- 2025年及未来5年中国税收信息化未来发展趋势分析及投资规划建议研究报告
- 光伏支架销售基本知识培训课件
- 火炬设计计算书
- 2025-2026学年人教版(2024)七年级地理第一学期第一章 地球 单元测试(含答案)
- 宇树科技在智能家居控制系统的研发
- 传染性疾病影像学课件
- 监狱服装加工合同范本
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
评论
0/150
提交评论