商店存货管理系统.docx
《商店存货管理系统.docx》由会员分享,可在线阅读,更多相关《商店存货管理系统.docx(34页珍藏版)》请在冰豆网上搜索。
商店存货管理系统
201410137214
武汉科技大学城市学院
课程设计报告
课程名称数据结构课程设计
题目商店存货管理系统
学部信息工程学部
专业计算机科学与技术
班级计科二班
姓名刘威
指导教师林晓丽
2015年_J月28日
1.1课程设计目的3
1.2课程设计内容和要求3
1.2.2要求:
3
1.2.3运行环境4
1.3课程设计分析4
1.4算法描述4
1.5源代码7
1.6运行结果分析17
小结24
参考文献24
课程设计评分表25
1.1课程设计目的
通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
通过实习巩固并提高实习者的C语言知识,并初步了解VisualC++的知识,
提高其编程能力与专业水平。
1.2课程设计内容和要求
1.2.1课程设计内容建立一商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括5个种类的货物情况,能对商品信息进行扩充(追加),修改和删除以及简单的排序;
3.进一步要求:
扩充商品数量,以及完成系统查询功能。
有兴趣的同学可以
自己扩充系统功能。
1.2.2要求:
1.界面友好,函数功能要划分好
2.总体设计应画一流程图
3.程序要加必要的注释
4.要提供程序测试方案
5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
1.2.3运行环境
该程序的运行环境为Windowsxp系统,MicrosoftVisualC++6.0版本。
1.3课程设计分析
1)需要定义一个结构体数组,其中name表示商品的名称,time表示商品的进货时间,year表示商品的生产日期,no表示商品的保质期。
2)利用冒泡法,对商品进行排序。
3)选择需要的功能,其中功能包括商品的最原始添加,商品的插入,删除,查找,将数据写入文件中,从文件中读出数据等操作。
4)选择输入0~9,10个数的其中一个数,进行相应的操作。
5)进行完所的操作之后,选择保存功能,将数据保存到文件中。
6)退出程序。
1.4算法描述
1)先定义一个商品的结构体数组:
typedefstruct/*定义结构体数组*/
{
charname[20];/商品名称*/
inttime;/*进货时间*/
intyear;/*生产日期*/
intno;/*保质期*/
}goods;
2)建立一个菜单函数,显示10个功能,供用户选择,进行人机对话。
3)设置一个排序的函数,intshuru(shangpgs[],intn。
)利用冒泡法先对商品按进货的时间排序,对进货时间一样的货物,再按离保质期最近排序。
4)设置一个输入的函数,intlnput(goodsgs[],intn)。
这个函数是最初商品输入函数,当选择了这个功能后,如果是第一次运行这个程序,保存输入,那将在D盘产生一个名为“商品.doC'的文件,如果已经运行过了,并保存输入,那输入的商品信息将代替原有的信息,数据输入使用交互输入,进行人机对话,确定是否进行下一个数据的添加。
并且调用了上面的排序函数,对输入的数据进行排序。
5)设置一个显示的函数,voidshuchu(goodsgs[],intn。
显示上面输入的所有数据,或者是从文件中读取的数据。
6)设置一个插入的函数,intcharu(goodsgs[],intn。
)每次插入一组数据,如果要再插入,则再选择这个功能进行操作。
并且在插入的同时,已经排好序,把数据插入适合的位置。
7)设置一个查找删除的函数,intchazhaoxianshi((goodsgs[],intn)。
输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则用下一个信息代替原有信息的位置。
8)设置一个查找显示的函数voidchazhaoxianshi(goodsgs[],intn)。
输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则显示信息。
9)设置一个写入文件的函数,voidxiewenjian(goodsgs[],intn)设置文件指针,先判断文件是否能打开并且能进行写操作,不能则输出失败信息,能则循环写入数据,写完关闭文件。
10)设置一个读文件的函数,intduwenjian(goodsgs[],intn。
设置文件指针,判断文件是否能打开而且能进行读操作,能则先读出总的数据量,接着循环读出数据,最后关闭文件。
11)进入最后一步,main函数。
判断选择的操作,根据用户选择的操作,利用switch语句进行相应的函数调用。
12)选择保存功能,对数据进行保存,然后选择结束程序退出功能,退出程序。
paixu(gs,n)
初始条件:
数据已经存在
操作结果:
数据进行排序
shuru(gs,n)
初始条件:
没有任何数据存在,或者要替换原文件中的所有数据
操作结果:
数据进行输入
shuchugs,n)
初始条件:
数据已经存在
操作结果:
数据显示
charu(gs,n)
初始条件:
数据已经存在
操作结果:
数据插入
chanchu(gs,n)
初始条件:
数据已经存在
操作结果:
数据删除
chazhaoshanchui(gs,n)
初始条件:
数据已经存在
操作结果:
数据统计
xiewenjian(gs,n)
初始条件:
数据已经存在
操作结果:
写入文件中
duwenjian(gs,n)
初始条件:
文件已经存在
操作结果:
从文件中读出
1.4流程图:
显示数据
添加数据
删除数据
查找数据V
统计数据
排序数据
台匕
冃匕
功能
5
重新选择功能
写入文件*
功能7
退出程序
功能0
1.5源代码
#include/*引用库函数*/
#include
#include
#include
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;iif(gs[j].time>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)
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;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{
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");/*格式*/
system("pause");
\n");
printf("\t\t\t
}
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);/*调用排序函数*/
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&&iif(i==n)
{
printf("\t\t\t没找到!
\n");/*返回失败信息*/return(n);
}
for(j=i;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;
}
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&&iif(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;/*定义文件指针*/
商品.doc","wb"))==NULL)/*打开文件*/
{
printf("\t\t\tcann'topenthefile\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);/*循环写入数据*/
while(i{
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;/*定义文件指针*/
商品.doc","rb"))==NULL)/*打开文件*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);/*读入总记录量*/
while(i{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(gs,n);/*按商品名称查找,删除*/
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:
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(O);
1.6运行结果分析
1.初始界面:
(从D盘读入已准备好的文件数据)
2选择功能8并选择功能2,显示最初的数据:
3对读出的文件进行排序,选功能9,再选功能2,进行显示:
4选择功能3,进行插入操作,选择功能2,进行显示:
5选择功能4,进行删除操作,第一种情况为找不到要删除的商品数据:
接下去这个是另一种情况,即找到要删除的商品数据并按功能2,显示:
-|n|Al
II4.
(J△数沼■
统莽并莹示迸赁时间最早且最複近保庾期中止时间的贯物:
I?
■昱人丈件!
!
>»®A»文件咗行楼序:
I0.退出!
JIKJIJCJtKmCJtJCJIJCJtXJlJtlltXKieKlifBtieKXKUMJIXSIMZKJtMJtW
请选择<0-9>:
4
商昌-石扌粒hb
请按任盍犍继续--,
廿并显示逬贯苛间最早且最建近保厦期中止时间的赁物
对谏入的文件进行样序
生产日期
保质期€年、
2SS7Q2ie
2SQ701Q12687B1B226BG122026870102
30070S2S
2B070223
20070309
20070412
20070504
请按任意犍继義
请选择<0-9>:
2息卞所怕商品
6选择功能5,第一种情况为找不到要查找的数据:
妊意犍继渎
Jn]
****商品系I1>钿△数丰
i—显不数d
|3-磁埶i
I4.珊障数」
IS-查我数无
!
「堰计并並示迸守茸可最早且最複近保庾期中止时间的贯物:
I?
-专人文件:
I8-護文件I
I9-对谯入的文件进行楼序:
IQ.退出!
输燧琵的筍品名称比
第二种为存在情况
7选择功能6:
-|n|Al
I2,
I
I4.
曇并弄显示營时间最早且最接近保庫期中止时间的货物最接近保质期中止时间的货物:
IWI
保质期=2
了△数弭I
-r—jltn-'I
_±L小凌X.:
丐I
土云/逢fr=s.I
■JU/1弐(.:
qi
iR^fc-^fr早i
.iJJIJI弋衰X:
石i
^F"t~'T~jfr|h'~吊I
亂t并显示迸守对旬最早且最複近保庾期中止时间的贯物:
I?
_昱入丈件!
I1專欷甫文件咗行楼序i
IQ.退出!
<0-9>:
6
ee
2O07022B
20S7021B
请按任意犍继逹---
8选择功能7:
9选择功能0,退出程序
题目一一种排序
(一)(难度:
3)1
1题目要求1
2算法设计思路及步骤1
3算法描述2
4结果分析3
小结3
参考文献4
题目一一种排序(难度:
3)
1题目要求
1.1问题描述
描述
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还
知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方
式排序(默认排序规则都是从小到大);
1.按照编号从小到大排序
2.对于编号相等的长方形,按照长方形的长排序;