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

下载本文档

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

文档简介

1、学 号201410137214武 汉 科 技 大 学 城 市 学 院课 程 设 计 报 告 课程名称 数据结构课程设计 题 目 商店存货管理系统 学 部 信息工程学部 专 业 计算机科学与技术 班 级 计科二班 姓 名 刘威 指导教师 林晓丽 2015年6月28日目 录1.1课程设计目的31.2 课程设计内容和要求31.2.2 要求:31.2.3 运行环境41.3课程设计分析41.4 算法描述41.5 源代码71.6运行结果分析17小 结24参考文献24课程设计评分表251.1课程设计目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练

2、掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。通过实习巩固并提高实习者的C语言知识,并初步了解Visual C+的知识,提高其编程能力与专业水平。1.2 课程设计内容和要求1.2.1 课程设计内容建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充(追加),修改和删除以及简单的排序;3.进一步要求:扩充商品数量,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。1.2.2 要求:1.

3、界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。1.2.3 运行环境该程序的运行环境为Windows xp系统,Microsoft Visual C+6.0版本。1.3课程设计分析1) 需要定义一个结构体数组,其中name表示商品的名称,time表示商品的进货时间,year表示商品的生产日期,no表示商品的保质期。2) 利用冒泡法,对商品进行排序。3) 选择需要的功能,其中功能包括商品的最原始添加,商品的插入,删除,查找,将数据写入文件中,从文件中读出数据等操作。

4、4) 选择输入09,10个数的其中一个数,进行相应的操作。5) 进行完所的操作之后,选择保存功能,将数据保存到文件中。6) 退出程序。1.4 算法描述1) 先定义一个商品的结构体数组:typedef struct /*定义结构体数组*/ char name20;/*商品名称*/ int time;/*进货时间*/ int year;/*生产日期*/ int no;/*保质期*/goods;2) 建立一个菜单函数,显示10个功能,供用户选择,进行人机对话。3) 设置一个排序的函数,int shuru(shangp gs,int n)。利用冒泡法先对商品按进货的时间排序,对进货时间一样的货物,再按

5、离保质期最近排序。 4) 设置一个输入的函数,int Input(goods gs,int n)。这个函数是最初商品输入函数,当选择了这个功能后,如果是第一次运行这个程序,保存输入,那将在D盘产生一个名为“商品.doc”的文件,如果已经运行过了,并保存输入,那输入的商品信息将代替原有的信息,数据输入使用交互输入,进行人机对话,确定是否进行下一个数据的添加。并且调用了上面的排序函数,对输入的数据进行排序。5) 设置一个显示的函数,void shuchu(goods gs,int n)。显示上面输入的所有数据,或者是从文件中读取的数据。6) 设置一个插入的函数,int charu(goods gs

6、,int n)。每次插入一组数据,如果要再插入,则再选择这个功能进行操作。并且在插入的同时,已经排好序,把数据插入适合的位置。7) 设置一个查找删除的函数,intchazhaoxianshi(goods gs,int n)。输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则用下一个信息代替原有信息的位置。8) 设置一个查找显示的函数void chazhaoxianshi(goods gs,int n)。输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则显示信息。9) 设置一个写入文件的函数,void xiewenjian(goods gs,int n)。设置文件指针,先

7、判断文件是否能打开并且能进行写操作,不能则输出失败信息,能则循环写入数据,写完关闭文件。10) 设置一个读文件的函数,int duwenjian(goods gs,int n)。设置文件指针,判断文件是否能打开而且能进行读操作,能则先读出总的数据量,接着循环读出数据,最后关闭文件。11) 进入最后一步,main函数。判断选择的操作,根据用户选择的操作,利用switch语句进行相应的函数调用。12) 选择保存功能,对数据进行保存,然后选择结束程序退出功能,退出程序。paixu (gs,n)初始条件:数据已经存在操作结果:数据进行排序shuru(gs, n)初始条件:没有任何数据存在,或者要替换原

8、文件中的所有数据 操作结果:数据进行输入shuchugs,n)初始条件:数据已经存在 操作结果:数据显示charu(gs,n) 初始条件:数据已经存在操作结果:数据插入chanchu(gs,n)初始条件:数据已经存在 操作结果:数据删除chazhaoshanchu i(gs,n)初始条件:数据已经存在 操作结果:数据统计xiewenjian (gs,n)初始条件:数据已经存在 操作结果:写入文件中duwenjian (gs,n)初始条件:文件已经存在 操作结果:从文件中读出1.4流程图:退出程序写入文件排序数据统计数据添加数据查找数据删除数据显示数据新数据重新选择功能读文件Main函数功能8功

9、能1功能2功能3功能4功能5功能6功能9功能7 功能01.5 源代码#include /*引用库函数*/ #include #include #include typedef struct /*定义结构体数组*/ char name20;/*商品名称*/ int time;/*进货时间*/ int year;/*生产日期*/ int no;/*保质期*/goods;goods gs80; /*结构体数组变量*/ int menu_select() /*菜单函数*/ char c; do system(cls); /*运行前清屏*/ printf(tt* 商品系统*n); /*菜单选择*/ pr

10、intf(tt | 1. 输入数据 |n); printf(tt | 2. 显示数据 |n); printf(tt | 3. 插入数据 |n); printf(tt | 4. 删除数据 |n); printf(tt | 5. 查找数据 |n); printf(tt | 6. 统计并显示进货时间最早且最接近保质期中止时间的货物 |n); printf(tt | 7. 写入文件 |n); printf(tt | 8. 读文件 |n); printf(tt | 9. 对读入的文件进行排序 |n); printf(tt | 0. 退出 |n); printf(tt*n); printf(ttt请选择(

11、0-9):); c=getchar(); /*读入选择*/ while(c9); return(c-0); /*返回选择*/ void Sort_by_time(goods gs,int n) /*按进货时间排序*/ int i,j,*a,*b,c,*p,*q,s,*m,*k,d,e,f; char t10; for(i=0;in-1;i+) /*冒泡法排序*/ for(j=0;jgsj+1.time) a=&gsj+1.time; b=&gsj.time; c=*a; *a=*b; *b=c; strcpy(t,gsj+1.name); strcpy(gsj+1.name,)

12、; strcpy(,t); p=&gsj+1.year; q=&gsj.year; s=*p; *p=*q; *q=s; m=&gsj+1.no; k=&gsj.no; d=*m; *m=*k; *k=d; else if(gsj.time=gsj+1.time) p=&gsj.year; a=&gsj+1.year; b=&gsj.no; q=&gsj+1.no; e=(*p)+(*b)*10000; f=(*a)+(*q)*10000; if(ef) a=&gsj+1.time; b=&gsj.time; c=*a; *a=*b; *b=c; strcpy(t,gsj+1.

13、name); strcpy(gsj+1.name,); strcpy(,t); p=&gsj+1.year; q=&gsj.year; s=*p; *p=*q; *q=s; m=&gsj+1.no; k=&gsj.no; d=*m; *m=*k; *k=d; int Input(goods gs,int n) /*输入若干条记录*/ int i=0; char sign,x10; while(sign!=n&sign!=N) /*判断*/ printf(ttt商品名称:); /*交互输入*/ scanf(ttt%s,gsn+); printf(ttt

14、进货时间(例20070201):); scanf(ttt%d,&gsn+i.time); printf(ttt生产日期(例20070201):); scanf(ttt%d,&gsn+i.year); printf(ttt保质期(年):); scanf(ttt%d,&gsn+i.no); gets(x); /*清除多余的输入*/ printf(ttt继续输入?(Y/N); scanf(ttt%c,&sign); /*输入判断*/ i+; Sort_by_time(gs,n+i); /*调用排序函数*/ return(n+i); void Display(goods gs,int n) /*显示所

15、有记录*/ int i; printf(tt-n); /*格式头*/ printf(tt商品名称 进货时间 生产日期 保质期(年)n); printf(tt-n); for(i=1;i1&i%10=0) /*每十个暂停*/ printf(ttt-n); /*格式*/ printf(ttt); system(pause); printf(ttt-n); printf(ttt); system(pause); /*按任何键继续*/ int Insert_a_record(goods gs,int n) /*插入一条记录*/ char x10; /*清除多余输入所用*/ printf(ttt商品名称

16、:); /*交互输入*/ scanf(ttt%s,); printf(ttt进货时间:); scanf(ttt%d,&gsn.time); printf(ttt生产日期:); scanf(ttt%d,&gsn.year); printf(ttt保质期:); scanf(ttt%d,&gsn.no); gets(x); n+; Sort_by_time(gs,n); /*调用排序函数*/ printf(ttt插入成功!n); /*返回成功信息*/ return(n); int Delete_a_record(goods gs,int n) /*按商品名字查找,删除一条记录*/ c

17、har s20; int i=0,j; printf(ttt商品名称:); scanf(%s,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(ttt没找到!n); /*返回失败信息*/ return(n); for(j=i;jn-1;j+) /*删除操作*/ strcpy(,gsj+1.name); gsj.time=gsj+1.time; gsj.year=gsj+1.year; gsj.no=gsj+1.no; printf(ttt删除成功!n); /*返回成功信息*/ return(n-1);

18、 void Query_a_record(goods gs,int n) /*查找并显示一个记录*/ char s20; int i=0; printf(ttt输入要查找的商品名称:); scanf(ttt%s,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(ttt没找到!n); /*输入失败信息*/ return; printf(ttt进贷时间:%dn,gsi.time); /*输出该商品信息*/ printf(ttt生产日期:%dn,gsi.year); printf(ttt保质期:%dn,gsi.no); v

19、oid WritetoText(goods gs,int n) /*将所有记录写入文件*/ int i=0; FILE *fp; /*定义文件指针*/ if(fp=fopen(d:商品.doc,wb)=NULL) /*打开文件*/ printf(tttcannt open the filen); system(pause); return; fprintf(fp,%dn,n); /*循环写入数据*/ while(in) fprintf(fp,%-5s%d %d %dn,,gsi.time,gsi.year,gsi.no); i+; fclose(fp); /*关闭文件*/ pr

20、intf(tttSuccessed!n); /*返回成功信息*/ int AddfromText(goods gs,int n) /*从文件中读入数据*/ int i=0,num; FILE *fp; /*定义文件指针*/ if(fp=fopen(d:商品.doc,rb)=NULL) /*打开文件*/ printf(tttcannt open the filen); /*打开失败信息*/ printf(ttt); system(pause); return(n); fscanf(fp,%d,&num); /*读入总记录量*/ while(inum) /*循环读入数据*/ fscanf(fp,%

21、s%d%d%d,gsn+,&gsn+i.time,&gsn+i.year,&gsn+i.no); i+; n+=num; fclose(fp); /*关闭文件*/ printf(tttSuccessed!n); printf(ttt); system(pause); return(n); void main() /*主函数*/ int n=0; for(;) switch(menu_select() /*选择判断*/ case 1: printf(ttt输入最初商品n); /*输入若干条记录*/ n=Input(gs,n); break; case 2: printf(ttt显示所

22、有商品n); /*显示所有记录*/ Display(gs,n); break; case 3: printf(ttt插入n); n=Insert_a_record(gs,n); /*插入*/ printf(ttt); system(pause); break; case 4: printf(ttt删除n); n=Delete_a_record(gs,n); /*按商品名称查找,删除*/ printf(ttt); system(pause); break; case 5: printf(ttt查找并显示n); Query_a_record(gs,n); /*查找并显示*/ printf(ttt)

23、; system(pause); break; case 6: printf(ttt统计并显示进货时间最早且最接近保质期中止时间的货物n); printf(ttt共有 %d 件商品.n,n); /*总共记录数*/ printf(ttt进货时间最早且最接近保质期中止时间的货物:n); printf(ttt商品名称r:%sn,); printf(ttt进货时间:%dn,gs0.time); printf(ttt生产日期:%dn,gs0.year); printf(ttt保质期:%dnn,gs0.no); printf(ttt); system(pause); break; case

24、 7: printf(ttt写到文件中n); WritetoText(gs,n); /*循环写入数据*/ printf(ttt); system(pause); break; case 8: printf(ttt文件中读数据n); n=AddfromText(gs,n); printf(ttt);/*文件中读数据*/ break; case 9: printf(tttn); Sort_by_time(gs,n); printf(ttt);/*对读入的文件进行排序*/ break; case 0: printf(ttt结束退出!n); /*结束程序*/ printf(ttt); system(p

25、ause); exit(0); 1.6运行结果分析1.初始界面:(从D盘读入已准备好的文件数据)2.选择功能8并选择功能2,显示最初的数据:3.对读出的文件进行排序,选功能9,再选功能2,进行显示:4.选择功能3,进行插入操作,选择功能2,进行显示:5.选择功能4,进行删除操作,第一种情况为找不到要删除的商品数据:接下去这个是另一种情况,即找到要删除的商品数据并按功能2,显示:6.选择功能5,第一种情况为找不到要查找的数据:第二种为存在情况7.选择功能6:8.选择功能7:9.选择功能0,退出程序。 目 录题目一 一种排序(一)(难度:3)11题目要求12算法设计思路及步骤13算法描述24结果分

26、析3小 结3参考文献4题目一 一种排序(难度:3)1题目要求1.1 问题描述 描述现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);1.按照编号从小到大排序2.对于编号相等的长方形,按照长方形的长排序;3.如果编号和长都相同,按照长方形的宽排序;4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;输入第一行有一个整数 0n10000,表示接下来有n组测试数据;每一组第一行有一个整数 0m1000,表示有m个长方形;接下来

27、的m行,每一行有三个数 ,第一个数表示长方形的编号,第二个和第三个数值大的表示长,数值小的表示宽,相等说明这是一个正方形(数据约定长宽与编号都小于10000);输出顺序输出每组数据的所有符合条件的长方形的 编号 长 宽样例输入181 1 11 1 11 1 21 2 11 2 22 1 12 1 22 2 1样例输出1 1 11 2 11 2 22 1 12 2 12算法设计思路及步骤2.1 设计思路先做一个输入函数,输入m组数据进行排序,优先按照编号来排序,当编号相等时再优先按照长度排序,当编号,长度相等时再排序宽度,当三个数值都相等时 只输出一个出来2.2 步骤输入数据m要进行的组数,采用

28、while循环判断组数执行的条件,然后在使用for循环接受长方体的编号,长度,宽度,然后调用快速排序函数CMP进行排序,用一个for循环来删除相同数据的输出,最后把排序将结果输出数来后用break 跳出循环程序结束3算法描述 4结果分析通过这程序感觉大大的简化了曾经的函数用法,这快速排序做的也不错,整体来说程序的可读性,稳定性都很好,感觉做的不错!源代码#include#include#define MAX 1000#define jh(a,b) t=a;a=b;b=t;int t;typedef struct int no,length,width;ac;ac allMAX;int cmp(

29、const void *a,const void *b) /快速排?序法? ac ac_a=*(ac*)a; ac ac_b=*(ac*)b; if(ac_a.no=ac_b.no) if(ac_a.length=ac_b.length) return ac_a.width-ac_b.width; else return ac_a.length-ac_b.length; else return ac_a.no-ac_b.no;int main() while(1) int m,i;printf (请?问你?要癮输?入?几?个?长方?体?的?数簓据Y:阰); scanf(%d,&m); for(i=0;im;i+) printf(请?以?此?输?入?长方?体?的? 编括?号? 长度 长度(用?空?格?分?开a,?回?车表括?示?一?组哩?数簓据Y输?入?结束?)n); scanf(%d%d%d,&alli.no,&alli.length,&alli.width); if(alli.lengthalli.width) j

温馨提示

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

评论

0/150

提交评论