商店存货管理系统_第1页
商店存货管理系统_第2页
商店存货管理系统_第3页
商店存货管理系统_第4页
商店存货管理系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机学院数据结构课程设计题目:商店存货管理系统班级:网络工程姓名:学号:同组人姓名:起迄日期:课程设计地点:指导教师:评阅意见:成绩评定:评阅人:日期:完成日期:2023年12月目录一、需求分析2课程设计内容2要求:31.3运行环境3二、概要设计〔含流程图〕3〔一〕步骤设计3〔二〕流程图4三、详细设计〔含代码分析〕4四、调试分析和测试结果12五、总结16六、致谢17附录〔含程序源码〕17参考文献25需求分析建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充〔追加〕,修改和删除以及简单的排序;3.进一步要求:扩充商品数量,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。1.2要求:1.界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。1.3运行环境该程序的运行环境为Windowsxp系统,MicrosoftVisualC++6.0版本。二、概要设计〔含流程图〕〔一〕步骤设计1、需要定义一个结构体数组,其中name表示商品的名称,time表示商品的进货时间,year表示商品的生产日期,no表示商品的保质期。2、利用冒泡法,对商品进行排序。3、选择需要的功能,其中功能包括商品的最原始添加,商品的插入,删除,查找,将数据写入文件中,从文件中读出数据等操作。4、选择输入0~9,10个数的其中一个数,进行相应的操作。5、进行完所的操作之后,选择保存功能,将数据保存到文件中。6、退出程序。〔二〕流程图退出程序退出程序写入文件排序数据统计数据添加数据查找数据删除数据显示数据新数据重新选择功能读文件Main函数功能8功能1功能2功能3功能4功能5功能6功能9功能7功能0三、详细设计〔含代码分析〕〔1〕先定义一个商品的结构体数组:typedefstruct/*定义结构体数组*/{charname[20];/*商品名称*/inttime;/*进货时间*/intyear;/*生产日期*/intno;/*保质期*/}goods;〔2〕建立一个菜单函数,显示10个功能,供用户选择,进行人机对话。代码见同组人设计报告。〔3〕设置一个排序的函数,voidSort_by_time(goodsgs[],intn)。利用冒泡法先对商品按进货的时间排序,对进货时间一样的货物,再按离保质期最近排序。代码见同组人设计报告。〔4〕设置一个输入的函数,intInput(goodsgs[],intn)。这个函数是最初商品输入函数,中选择了这个功能后,如果是第一次运行这个程序,保存输入,那将在D盘产生一个名为“商品.doc〞的文件,如果已经运行过了,并保存输入,那输入的商品信息将代替原有的信息,数据输入使用交互输入,进行人机对话,确定是否进行下一个数据的添加。并且调用了上面的排序函数,对输入的数据进行排序。代码见同组人设计报告。〔5〕设置一个显示的函数,voidDisplay(goodsgs[],intn)。显示上面输入的所有数据,或者是从文件中读取的数据。代码见同组人设计报告。〔6〕设置一个插入的函数,intInsert_a_record(goodsgs[],intn)。每次插入一组数据,如果要再插入,那么再选择这个功能进行操作。并且在插入的同时,已经排好序,把数据插入适合的位置。代码见同组人设计报告。〔7〕设置一个查找删除的函数,intDelete_a_record(goodsgs[],intn)。输入要查找的商品名称,如果不存在,那么输出失败信息,如果存在,那么用下一个信息代替原有信息的位置。主要代码如下:intDelete_a_record(goodsgs[],intn)/*按商品名字查找,删除一条记录*/{chars[20];inti=0,j;printf("\t\t\t商品名称:");scanf("%s",s);while(strcmp(gs[i].name,s)!=0&&i<n)i++;/*查找判断*/if(i==n) { printf("\t\t\t没找到!\n");/*返回失败信息*/return(n); }for(j=i;j<n-1;j++)/*删除操作*/ {strcpy(gs[j].name,gs[j+1].name);gs[j].time=gs[j+1].time;gs[j].year=gs[j+1].year;gs[j].no=gs[j+1].no; }printf("\t\t\t删除成功!\n");/*返回成功信息*/return(n-1);}〔8〕设置一个查找显示的函数,voidQuery_a_record(goodsgs[],intn)。输入要查找的商品名称,如果不存在,那么输出失败信息,如果存在,那么显示信息。主要代码如下:voidQuery_a_record(goodsgs[],intn)/*查找并显示一个记录*/{chars[20];inti=0;printf("\t\t\t输入要查找的商品名称:");scanf("\t\t\t%s",s);while(strcmp(gs[i].name,s)!=0&&i<n)i++;/*查找判断*/if(i==n) { printf("\t\t\t没找到!\n");/*输入失败信息*/return; }printf("\t\t\t进贷时间:%d\n",gs[i].time);/*输出该商品信息*/printf("\t\t\t生产日期:%d\n",gs[i].year);printf("\t\t\t保质期:%d\n",gs[i].no);}〔9〕设置一个写入文件的函数,voidWritetoText(goodsgs[],intn)。设置文件指针,先判断文件是否能翻开并且能进行写操作,不能那么输出失败信息,能那么循环写入数据,写完关闭文件。主要代码如下:voidWritetoText(goodsgs[],intn)/*将所有记录写入文件*/{inti=0;FILE*fp;/*定义文件指针*/if((fp=fopen("d:\\商品.doc","wb"))==NULL)/*翻开文件*/ {printf("\t\t\tcann'topenthefile\n");system("pause");return; }fprintf(fp,"%d\n",n);/*循环写入数据*/while(i<n) {fprintf(fp,"%-5s%d%d%d\n",gs[i].name,gs[i].time,gs[i].year,gs[i].no);i++; }fclose(fp);/*关闭文件*/printf("\t\t\tSuccessed!\n");/*返回成功信息*/}〔10〕设置一个读文件的函数,intAddfromText(goodsgs[],intn)。设置文件指针,判断文件是否能翻开而且能进行读操作,能那么先读出总的数据量,接着循环读出数据,最后关闭文件。主要代码如下intAddfromText(goodsgs[],intn)/*从文件中读入数据*/{inti=0,num;FILE*fp;/*定义文件指针*/if((fp=fopen("d:\\商品.doc","rb"))==NULL)/*翻开文件*/ {printf("\t\t\tcann'topenthefile\n");/*翻开失败信息*/printf("\t\t\t");system("pause");return(n); }fscanf(fp,"%d",&num);/*读入总记录量*/while(i<num)/*循环读入数据*/ {fscanf(fp,"%s%d%d%d",gs[n+i].name,&gs[n+i].time,&gs[n+i].year,&gs[n+i].no);i++; }n+=num;fclose(fp);/*关闭文件*/printf("\t\t\tSuccessed!\n");printf("\t\t\t");system("pause");return(n);}〔11〕进入最后一步,main函数。判断选择的操作,根据用户选择的操作,利用switch语句进行相应的函数调用。主要代码如下:voidmain()/*主函数*/{intn=0;for(;;) {switch(menu_select())/*选择判断*/ {case1:printf("\t\t\t输入最初商品\n");/*输入假设干条记录*/n=Input(gs,n);break;case2:printf("\t\t\t显示所有商品\n");/*显示所有记录*/Display(gs,n);break;case3:printf("\t\t\t插入\n");n=Insert_a_record(gs,n);/*插入*/printf("\t\t\t");system("pause");break;case4:printf("\t\t\t删除\n");n=Delete_a_record(gs,n);/*按商品名称查找,删除*/printf("\t\t\t");system("pause");break;case5:printf("\t\t\t查找并显示\n");Query_a_record(gs,n);/*查找并显示*/printf("\t\t\t");system("pause");break;case6:printf("\t\t\t统计并显示进货时间最早且最接近保质期中止时间的货物\n");printf("\t\t\t共有%d件商品.\n",n);/*总共记录数*/printf("\t\t\t进货时间最早且最接近保质期中止时间的货物:\n");printf("\t\t\t商品名称r:%s\n",gs[0].name);printf("\t\t\t进货时间:%d\n",gs[0].time);printf("\t\t\t生产日期:%d\n",gs[0].year);printf("\t\t\t保质期:%d\n\n",gs[0].no);printf("\t\t\t");system("pause");break;case7:printf("\t\t\t写到文件中\n");WritetoText(gs,n);/*循环写入数据*/printf("\t\t\t");system("pause");break;case8:printf("\t\t\t文件中读数据\n");n=AddfromText(gs,n);printf("\t\t\t");/*文件中读数据*/break;case9:printf("\t\t\t\n");Sort_by_time(gs,n);printf("\t\t\t");/*对读入的文件进行排序*/break;case0:printf("\t\t\t结束退出!\n");/*结束程序*/printf("\t\t\t");system("pause");exit(0); } }}〔12〕选择保存功能,对数据进行保存,然后选择结束程序退出功能,退出程序。Sort_by_time(gs,n)初始条件:数据已经存在操作结果:数据进行排序Input(gs,n)初始条件:没有任何数据存在,或者要替换原文件中的所有数据操作结果:数据进行输入Display(gs,n)初始条件:数据已经存在操作结果:数据显示Insert_a_record(gs,n)初始条件:数据已经存在操作结果:数据插入Delete_a_record(gs,n)初始条件:数据已经存在操作结果:数据删除Query_a_record(gs,n)初始条件:数据已经存在操作结果:数据统计WritetoText(gs,n)初始条件:数据已经存在操作结果:写入文件中AddfromText(gs,n)初始条件:文件已经存在操作结果:从文件中读出四、调试分析和测试结果1.选择功能5,第一种情况为找不到要查找的数据:第二种为存在情况2.选择功能6:统计并显示进货时间最早且最接近保质期中止时间的货物。3.选择功能7:写入文件。4.选择功能8:读文件。5.选择功能0:退出功能。五、总结转眼,为期三天的《数据结构》课程设计实习即将结束了。在这次实习中,自己的C语言知识和数据结构知识得到了稳固,编程能力也有了一定的提高。同时也学会了解决问题的方法。总结起来,自己主要有以下几点体会:1.必须牢固掌握根底知识。由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的《数据结构》这门课,所以在实习之初感到棘手。不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所熟悉。这时才逐渐有了思路。所以,这次实习之后,我告诫自己:今后一定要牢固掌握好专业根底知识。2.必须培养严谨的科学态度。自己在编程时经常因为一些类似于“少了分号〞的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。编程是一件十分严谨的事情,容不得马虎。所以在今后自己一定要培养严谨的科学态度。我想这不仅是对于程序设计,做任何事都应如此。总之,在这次实习中,自己的C语言以及数据结构知识得到提高,编程能力也得到了提高,我和我的组长xx同学分工明确,她负责商店存货管理系统的1~4步的内容,代码以及分析,而我负责5~9步的代码以及分析我不懂的地方根据问她或者上网找资料,努力完成了这次的任务,收获颇多!感触颇深!六、致谢非常感谢xxxxxxxxx同学,在他们的帮助下,完成了我许多不能独立完成的任务,他们也教会了许多东西,在写代码时,有些比拟难懂的比方说循环等,在他们的细心指导下,我慢慢就弄懂了。附录〔含程序源码〕#include<stdio.h>/*引用库函数*/#include<stdlib.h>#include<ctype.h>#include<string.h>typedefstruct/*定义结构体数组*/{charname[20];/*商品名称*/inttime;/*进货时间*/intyear;/*生产日期*/intno;/*保质期*/}goods;goodsgs[80];/*结构体数组变量*/intmenu_select()/*菜单函数*/{charc;do{system("cls");/*运行前清屏*/printf("\t\t****商品系统****\n");/*菜单项选择择*/printf("\t\t|1.输入数据|\n");printf("\t\t|2.显示数据|\n");printf("\t\t|3.插入数据|\n");printf("\t\t|4.删除数据|\n");printf("\t\t|5.查找数据|\n");printf("\t\t|6.统计并显示进货时间最早且最接近保质期中止时间的货物|\n");printf("\t\t|7.写入文件|\n");printf("\t\t|8.读文件|\n");printf("\t\t|9.对读入的文件进行排序|\n");printf("\t\t|0.退出|\n");printf("\t\t*****************************************\n");printf("\t\t\t请选择(0-9):");c=getchar();/*读入选择*/ }while(c<'0'||c>'9');return(c-'0');/*返回选择*/}voidSort_by_time(goodsgs[],intn)/*按进货时间排序*/{inti,j,*a,*b,c,*p,*q,s,*m,*k,d,e,f;chart[10];for(i=0;i<n-1;i++)/*冒泡法排序*/for(j=0;j<n-1-i;j++)if(gs[j].time>gs[j+1].time) {a=&gs[j+1].time;b=&gs[j].time;c=*a;*a=*b;*b=c;strcpy(t,gs[j+1].name);strcpy(gs[j+1].name,gs[j].name);strcpy(gs[j].name,t);p=&gs[j+1].year;q=&gs[j].year;s=*p;*p=*q;*q=s;m=&gs[j+1].no;k=&gs[j].no;d=*m;*m=*k;*k=d; }elseif(gs[j].time==gs[j+1].time) {p=&gs[j].year; a=&gs[j+1].year;b=&gs[j].no;q=&gs[j+1].no;e=(*p)+(*b)*10000;f=(*a)+(*q)*10000; if(e>f) { a=&gs[j+1].time;b=&gs[j].time;c=*a;*a=*b;*b=c;strcpy(t,gs[j+1].name);strcpy(gs[j+1].name,gs[j].name);strcpy(gs[j].name,t);p=&gs[j+1].year;q=&gs[j].year;s=*p;*p=*q;*q=s;m=&gs[j+1].no;k=&gs[j].no;d=*m;*m=*k;*k=d; } }}intInput(goodsgs[],intn)/*输入假设干条记录*/{inti=0;charsign,x[10];while(sign!='n'&&sign!='N')/*判断*/ { printf("\t\t\t商品名称:");/*交互输入*/scanf("\t\t\t%s",gs[n+i].name);printf("\t\t\t进货时间(例20070201):");scanf("\t\t\t%d",&gs[n+i].time);printf("\t\t\t生产日期(例20070201):");scanf("\t\t\t%d",&gs[n+i].year);printf("\t\t\t保质期(年):");scanf("\t\t\t%d",&gs[n+i].no);gets(x);/*去除多余的输入*/printf("\t\t\t继续输入?(Y/N)");scanf("\t\t\t%c",&sign);/*输入判断*/i++; }Sort_by_time(gs,n+i);/*调用排序函数*/return(n+i);}voidDisplay(goodsgs[],intn)/*显示所有记录*/{inti;printf("\t\t\n");/*格式头*/printf("\t\t商品名称进货时间生产日期保质期(年)\n");printf("\t\t\n");for(i=1;i<n+1;i++)/*循环输入*/ {printf("\t\t%-5s%d%d%d\n",gs[i-1].name,gs[i-1].time,gs[i-1].year,gs[i-1].no);if(i>1&&i%10==0)/*每十个暂停*/ { printf("\t\t\t\n");/*格式*/printf("\t\t\t");system("pause");printf("\t\t\t\n"); } }printf("\t\t\t");system("pause");/*按任何键继续*/}intInsert_a_record(goodsgs[],intn)/*插入一条记录*/{charx[10];/*去除多余输入所用*/printf("\t\t\t商品名称:");/*交互输入*/scanf("\t\t\t%s",gs[n].name);printf("\t\t\t进货时间:");scanf("\t\t\t%d",&gs[n].time);printf("\t\t\t生产日期:");scanf("\t\t\t%d",&gs[n].year);printf("\t\t\t保质期:");scanf("\t\t\t%d",&gs[n].no);gets(x);n++;Sort_by_time(gs,n);/*调用排序函数*/printf("\t\t\t插入成功!\n");/*返回成功信息*/return(n);}intDelete_a_record(goodsgs[],intn)/*按商品名字查找,删除一条记录*/{chars[20];inti=0,j;printf("\t\t\t商品名称:");scanf("%s",s);while(strcmp(gs[i].name,s)!=0&&i<n)i++;/*查找判断*/if(i==n) { printf("\t\t\t没找到!\n");/*返回失败信息*/return(n); }for(j=i;j<n-1;j++)/*删除操作*/ {strcpy(gs[j].name,gs[j+1].name);gs[j].time=gs[j+1].time;gs[j].year=gs[j+1].year;gs[j].no=gs[j+1].no; }printf("\t\t\t删除成功!\n");/*返回成功信息*/return(n-1);}voidQuery_a_record(goodsgs[],intn)/*查找并显示一个记录*/{chars[20];inti=0;printf("\t\t\t输入要查找的商品名称:");scanf("\t\t\t%s",s);while(strcmp(gs[i].name,s)!=0&&i<n)i++;/*查找判断*/if(i==n) { printf("\t\t\t没找到!\n");/*输入失败信息*/return; }printf("\t\t\t进贷时间:%d\n",gs[i].time);/*输出该商品信息*/printf("\t\t\t生产日期:%d\n",gs[i].year);printf("\t\t\t保质期:%d\n",gs[i].no);}voidWritetoText(goodsgs[],intn)/*将所有记录写入文件*/{inti=0;FILE*fp;/*定义文件指针*/if((fp=fopen("d:\\商品.doc","wb"))==NULL)/*翻开文件*/ {printf("\t\t\tcann'topenthefile\n");system("pause");return; }fprintf(fp,"%d\n",n);/*循环写入数据*/while(i<n) {fprintf(fp,"%-5s%d%d%d\n",gs[i].name,gs[i].time,gs[i].year,gs[i].no);i++; }fclose(fp);/*关闭文件*/printf("\t\t\tSuccessed!\n");/*返回成功信息*/}intAddfromText(goodsgs[],intn)/*从文件中读入数据*/{inti=0,num;FILE*fp;/*定义文件指针*/if((fp=fopen("d:\\商品.doc","rb"))==NULL)/*翻开文件*/ {printf("\t\t\tcann'topenthefile\n");/*翻开失败信息*/printf("\t\t\t");system("pause");return(n); }fscanf(fp,"%d",&num);/*读入总记录量*/while(i<num)/*循环读入数据*/ {fscanf(fp,"%s%d%d%d",gs[n+i].name,&gs[n+i].time,&gs[n+i].year,&gs[n+i].no);i++; }n+=num;fclose(fp);/*关闭文件*/printf("\t\t\tSuccessed!\n");printf("\t\t\t");system("pause");return(n);}voidmain()/*主函数*/{intn=0;for(;;) {switch(menu_select())/*选择判断*/ {case1:printf("\t\t\t输入最初商品\n");/*输入假设干条记录*/n=Input(gs,n);break;case2:printf("\t\t\t显示所有商品\n");/*显示所有记录*/Display(gs,n);break;case3:printf("\t\t\t插入\n");n=Insert_a_record(gs,n);/*插入*/printf("\t\t\t");system("pause");break;case4:printf("\t\t\t删除\n");n=Delete_a_record

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论