商店存货管理系统.docx

上传人:b****7 文档编号:9467846 上传时间:2023-02-04 格式:DOCX 页数:29 大小:262.03KB
下载 相关 举报
商店存货管理系统.docx_第1页
第1页 / 共29页
商店存货管理系统.docx_第2页
第2页 / 共29页
商店存货管理系统.docx_第3页
第3页 / 共29页
商店存货管理系统.docx_第4页
第4页 / 共29页
商店存货管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

商店存货管理系统.docx

《商店存货管理系统.docx》由会员分享,可在线阅读,更多相关《商店存货管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

商店存货管理系统.docx

商店存货管理系统

学号

4

 

武汉科技大学城市学院

 

课程设计报告

 

课程名称数据构造课程设计

题目

商店存货管理系统

学部

信息工程学部

专业

计算机科学与技术

班级

计科二班

姓名

指导教师

林晓丽

2015

6

28

 

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)设置一个输入的函数,intInput(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流程图:

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;i

for(j=0;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

{

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

if(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;

}

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

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

{

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

{

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);/*按商品名称查找,删除*/

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);

}

}

}

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〕

1题目要求

1.1问题描述 

描述

现在有很多长形,每一个长形都有一个编号,这个编号可以重复;还知道这个长形的宽和长,编号、长、宽都是整数;现在要求按照一下式排序〔默认排序规那么都是从小到大〕;

1.按照编号从小到大排序

2.对于编号相等的长形,按照长形的长排序;

3.如果编号和长都一样,按照长形的宽排序;

4.如果编号、长、宽都一样,就只保存一个长形用于排序,删除多余的长形;最后排好序按照指定格式显示所有的长形;

 

输入

第一行有一个整数0

每一组第一行有一个整数0

接下来的m行,每一行有三个数,第一个数表示长形的编号,

第二个和第三个数值大的表示长,数值小的表示宽,相等

说明这是一个正形〔数据约定长宽与编号都小于10000〕;

输出

顺序输出每组数据的所有符合条件的长形的编号长宽

样例输入

1

8

111

111

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1