版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE PAGE 25计算机学院数据结构课程设计题 目: 商店存货管理系统 班 级: 网络工程 姓 名: 学 号: 同组人姓名: 起 迄 日 期: 课程设计地点: 指导教师: 评阅意见:成绩评定:评阅人: 日期:完成日期:2014年12月目录 TOC o 1-3 h z u HYPERLINK l _Toc408120672 一、需求分析 PAGEREF _Toc408120672 h 2 HYPERLINK l _Toc408120673 1.1课程设计内容 PAGEREF _Toc408120673 h 2 HYPERLINK l _Toc408120674 1.2要求: PAGEREF
2、 _Toc408120674 h 3 HYPERLINK l _Toc408120675 1.3 运行环境 PAGEREF _Toc408120675 h 3 HYPERLINK l _Toc408120676 二、概要设计(含流程图) PAGEREF _Toc408120676 h 3 HYPERLINK l _Toc408120677 (一)步骤设计 PAGEREF _Toc408120677 h 3 HYPERLINK l _Toc408120678 (二)流程图 PAGEREF _Toc408120678 h 4 HYPERLINK l _Toc408120679 三、详细设计(含代码
3、分析) PAGEREF _Toc408120679 h 4 HYPERLINK l _Toc408120680 四、调试分析和测试结果 PAGEREF _Toc408120680 h 12 HYPERLINK l _Toc408120681 五、总结 PAGEREF _Toc408120681 h 16 HYPERLINK l _Toc408120682 六、致谢 PAGEREF _Toc408120682 h 17 HYPERLINK l _Toc408120683 附录(含程序源码) PAGEREF _Toc408120683 h 17 HYPERLINK l _Toc408120684
4、参考文献 PAGEREF _Toc408120684 h 25需求分析1.1课程设计内容建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充(追加),修改和删除以及简单的排序;3.进一步要求:扩充商品数量,以及完成系统查询功能。有兴趣的同学可以自己扩充系统功能。1.2要求:1.界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要
5、能运行起来,不能运行的程序是没有价值的。1.3 运行环境该程序的运行环境为Windows xp系统,Microsoft Visual C+6.0版本。二、概要设计(含流程图)(一)步骤设计1、需要定义一个结构体数组,其中name表示商品的名称,time表示商品的进货时间,year表示商品的生产日期,no表示商品的保质期。2、利用冒泡法,对商品进行排序。3、选择需要的功能,其中功能包括商品的最原始添加,商品的插入,删除,查找,将数据写入文件中,从文件中读出数据等操作。4、选择输入09,10个数的其中一个数,进行相应的操作。5、进行完所的操作之后,选择保存功能,将数据保存到文件中。6、退出程序。(
6、二)流程图退出程序写入文件排序数据统计数据添加数据查找数据删除数据显示数据新数据重新选择功能读文件Main函数功能8功能1功能2功能3功能4功能5功能6功能9功能7 功能0三、详细设计(含代码分析)(1)先定义一个商品的结构体数组: typedef struct /*定义结构体数组*/ char name20;/*商品名称*/ int time;/*进货时间*/ int year;/*生产日期*/ int no;/*保质期*/ goods;(2)建立一个菜单函数,显示10个功能,供用户选择,进行人机对话。代码见同组人设计报告。(3)设置一个排序的函数,void Sort_by_time(goo
7、ds gs,int n)。利用冒泡法先对商品按进货的时间排序,对进货时间一样的货物,再按离保质期最近排序。代码见同组人设计报告。 (4)设置一个输入的函数,int Input(goods gs,int n)。这个函数是最初商品输入函数,当选择了这个功能后,如果是第一次运行这个程序,保存输入,那将在D盘产生一个名为“商品.doc”的文件,如果已经运行过了,并保存输入,那输入的商品信息将代替原有的信息,数据输入使用交互输入,进行人机对话,确定是否进行下一个数据的添加。并且调用了上面的排序函数,对输入的数据进行排序。代码见同组人设计报告。(5)设置一个显示的函数,void Display(goods
8、 gs,int n)。显示上面输入的所有数据,或者是从文件中读取的数据。代码见同组人设计报告。(6)设置一个插入的函数,int Insert_a_record(goods gs,int n)。每次插入一组数据,如果要再插入,则再选择这个功能进行操作。并且在插入的同时,已经排好序,把数据插入适合的位置。代码见同组人设计报告。(7)设置一个查找删除的函数,int Delete_a_record(goods gs,int n)。输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则用下一个信息代替原有信息的位置。主要代码如下:int Delete_a_record(goods gs,int
9、n) /*按商品名字查找,删除一条记录*/ char 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);
10、/*返回成功信息*/ return(n-1); (8)设置一个查找显示的函数,void Query_a_record(goods gs,int n)。输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则显示信息。主要代码如下: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); /*
11、输入失败信息*/ return; printf(ttt进贷时间:%dn,gsi.time); /*输出该商品信息*/ printf(ttt生产日期:%dn,gsi.year); printf(ttt保质期:%dn,gsi.no); (9)设置一个写入文件的函数,void WritetoText(goods gs,int n)。设置文件指针,先判断文件是否能打开并且能进行写操作,不能则输出失败信息,能则循环写入数据,写完关闭文件。主要代码如下:void WritetoText(goods gs,int n) /*将所有记录写入文件*/ int i=0; FILE *fp; /*定义文件指针*/
12、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); /*关闭文件*/ printf(tttSuccessed!n); /*返回成功信息*/ (10)设置一个读文件的函数,int AddfromText(goods gs,int
13、 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
14、(inum) /*循环读入数据*/ fscanf(fp,%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); (11)进入最后一步,main函数。判断选择的操作,根据用户选择的操作,利用switch语句进行相应的函数调用。主要代码如下:void main() /*主函数*/ int n=0; for(;) switch(menu_select()
15、/*选择判断*/ case 1: printf(ttt输入最初商品n); /*输入若干条记录*/ n=Input(gs,n); break; case 2: printf(ttt显示所有商品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);
16、system(pause); break; case 5: printf(ttt查找并显示n); Query_a_record(gs,n); /*查找并显示*/ printf(ttt); 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); print
17、f(ttt生产日期:%dn,gs0.year); printf(ttt保质期:%dnn,gs0.no); printf(ttt); system(pause); break; case 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);
18、 printf(ttt);/*对读入的文件进行排序*/ break; case 0: printf(ttt结束退出!n); /*结束程序*/ printf(ttt); system(pause); exit(0); (12)选择保存功能,对数据进行保存,然后选择结束程序退出功能,退出程序。Sort_by_time(gs,n)初始条件:数据已经存在操作结果:数据进行排序Input(gs, n)初始条件:没有任何数据存在,或者要替换原文件中的所有数据 操作结果:数据进行输入Display(gs,n)初始条件:数据已经存在 操作结果:数据显示Insert_a_record(gs,n) 初始条件:数据
19、已经存在操作结果:数据插入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:退出功能。五、总结转眼,为期三
20、天的数据结构课程设计实习即将结束了。在这次实习中,自己的C语言知识和数据结构知识得到了巩固,编程能力也有了一定的提高。同时也学会了解决问题的方法。总结起来,自己主要有以下几点体会:1.必须牢固掌握基础知识。由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的数据结构这门课,所以在实习之初感到棘手。不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所熟悉。这时才逐渐有了思路。所以,这次实习之后,我告诫自己:今后一定要牢固掌握好专业基础知识。2.必须培养严谨的科学态度。自己在编程时经常因为一些类似于“少了分号”的小错误而导致错误,不够认真
21、细致,这给自己带来了许多麻烦。编程是一件十分严谨的事情,容不得马虎。所以在今后自己一定要培养严谨的科学态度。我想这不仅是对于程序设计,做任何事都应如此。总之,在这次实习中,自己的C语言以及数据结构知识得到提高,编程能力也得到了提高,我和我的组长xx同学分工明确,她负责商店存货管理系统的14步的内容,代码以及分析,而我负责59步的代码以及分析我不懂的地方根据问她或者上网找资料,努力完成了这次的任务,收获颇多!感触颇深!六、致谢非常感谢xxxxxxxxx同学,在他们的帮助下,完成了我许多不能独立完成的任务,他们也教会了许多东西,在写代码时,有些比较难懂的比如说循环等,在他们的细心指导下,我慢慢就弄
22、懂了。附录(含程序源码)#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); /*菜单选择*/ printf(tt | 1. 输入数据 |n);
23、 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请选择(0-9):); c=getchar(); /
24、*读入选择*/ 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,); strcpy(,t);
25、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.name); strcpy(gsj+1.na
26、me,); 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进货时间(例20070201):); sca
27、nf(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) /*显示所有记录*/ int i; printf(tt
28、n); /*格式头*/ printf(tt商品名称 进货时间 生产日期 保质期(年)n); printf(ttn); for(i=1;i1&i%10=0) /*每十个暂停*/ printf(tttn); /*格式*/ printf(ttt); system(pause); printf(tttn); printf(ttt); system(pause); /*按任何键继续*/ int Insert_a_record(goods gs,int n) /*插入一条记录*/ char x10; /*清除多余输入所用*/ printf(ttt商品名称:); /*交互输入*/ scanf(ttt%s,g
29、); 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) /*按商品名字查找,删除一条记录*/ char s20; int i=0,j; printf
30、(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); void Query_a_record(goods
31、 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); void WritetoText(goods gs,i
32、nt 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); /*关闭文件*/ printf(tttSuccessed!n); /*返回
33、成功信息*/ 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,%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(t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论