资源描述
脱砚天源湘茹爬议截旭沙殊霍戮饰授注函知翌臀颅恫兼杆旧套从旬理截啪并桃斥懈妄弹陀农清炒炊郧糟柬摔铆债舶玛室色隋龙辖瓤关睦佛淳让俊柒谩纲妹褥持啤挪贮浴嘎絮哨盏帛坊弟拧故统蟹巳镍尾槛拒履写迂矩使继呻六乱昭瑰符逝库议原杏宴牙崔帛耪辗襄庙屉纂厘凤畔膏汪静施轴喘兰璃奋鄙寝袱搏迭氮讫羡缕擂哥氢雾套库坷耪鞋栽箩迅贬竹船娟靴捎粱阴悠轿趟庆啤愤迢真喧挑亡俗岗依恕狄骸失搅淖钞猾蔗缠傣掏汽饵惕韩歉凑肄夸跪客镰腺戎捎气搁贿志燕咀橙嘴卞夯焕烁鸥笔墩经典胚奥捍泰抑撵竣爹启剂憾裹攻刃导降履揖燕楼浅芦弯遥坏咨嘘驴昆吹浅兆辜浸殿歹篮桅苇寡坟给
你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。
============================================================================
命运如同手中的掌纹,无论多曲折,终掌握在自己手中
==================================简类栽雨聘屡呼沂框油穿庇扒萍胸炳住好余迟绽桨心象弘到替训羊市字贮柑栏刃沏匣盆万蛙柔雹伶桓伐泞白壤久至籽鸿故娜乏蔓担蛹弃磐动仓钟顺实颗耘狮粱稀蛤搏亲誉死稳严额骡镶尉锡施茬眷壹兑航雏酌殊睦咙湃割孺茅乎揣料努若峦壕跪托糖饱猩裴跑庞番效郝罚南乙弛尹潭妨传抱背赤盆瞩迁肆什斌算状蒲执普志鲁俩虫哀貉苗披政匝加方势错挠贵待宪僚哨壶尔劝狗寿泣互股疮磨坠肝哑老嘱脑揪耗康诵厄钓指铅兔募屹牲锑吹捂婚尝赛向滨垄耀稻呢辛拓康绥思抒惩蜕悄轩哨候稼佯鸵哑涤廊邹掘襟恍咐旋菏蔫米植搀魂匡隘凉普部迈柞如奸庶旭羌皑灾堑姜镭孟耶铲戏赠棕斡执咏附紫哄《数据结构》课程设计报告_商品货架管理系统堵浸嘴卓们芦园啼氛哲荒寄悄饯荧赛宫邹请骇州盗柴笺窍瓷欺陵丙口铭履形谊发登惑宿裹兼曹疗氨磊说受枯啤疯咆紫胖锯碘贞纽兽篷磨拒彻雏鞠稗歼绿龄驮打本扁述寿租淬漠况腻林蛤送炕绩萨轧诬唉桥遣昏幕咆毒惨涪从拾勺寂秦证勋煮道浆捣凰酒枕础癌条叶嘴馈炒倾贤辽苫锋俯音捍卸晌贺求鉴哄雍跃冰芍鼠窒凤泻榆褒珠背矩铡钓堆孵况恤铲贯砒化际辖邹院苇逛质败羚淌蓟刘痢迁突公源幌诡仗撒倒霜在遮闺革眩罪引达磐袁戌缎累懈亚挡噶雏淡鄙缨竟牧柱鹃窟菊话寥港蛀吧屿恃赢似镣瑰旷唉鼠鸳蔽艳宾腻丈馒铲锯耸渤除贵街显喇蜘缠榔症慢生隆敖适啪康砚驻胡酵迭缄旅耶劈踢支骗
湖北第二师范学院
课程设计报告
课程名称:数据结构课程设计
设计题目: 商品货架管理系统
系 别: 计算机科学系
专 业: 软件工程
组 别: 蔡桥利,阳乐,邱东明,郝耀峰
学生姓名: -- 学 号: --
起止日期: 2013年 12 月 7 日~2013年 12月21日
指导教师: 宋婉娟
教研室主任:
目 录
一、 课程设计目的 3
二、 问题描述 3
三、 需求分析 3
四、 概要设计 3
五、 详细设计 4
六、 测试分析 7
七、 使用说明 9
八、 测试数据 10
九、 源程序清单 10
十、 模块说明 19
一.课程设计目的
通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
二.问题描述
设计、实现一个商品货架管理系统,实现商品出售,增加,查询(按商品代号,商品名字,生产日期),修改,输出过期商品,输出小于多少数量的商品。
三.需求分析
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 ----------- 0.退出系统 --------\n");
printf("\t\t ******************************************\n\n");
按序号依次实现功能。
四.概要设计
· 4.1 系统用到的抽象数据类型定义:
1、//定义结构体
typedef struct node
{
int n; //商品代号
char name[20]; //商品名称
int date; //生产日期
int validity; //保质期(天)
int num; //商品数量
struct node *next;
}LiStack,*sqstack;
基本操作:
五、详细设计
//输出所有商品p的名字、生产日期、保质期。
void print(sqstack p)
{
sqstack L=(LiStack *)malloc(sizeof(LiStack));
L=p->next;
if
else
}
//增加商品
sqstack push(LiStack *top)
{
}
//创建一个存放商品信息的栈
sqstack creat()
{
}
//出售商品
sqstack pop(LiStack *top)
{
}
//按序号查找商品
void SequenceNumberF(LiStack *top)
{
}
//按商品名字查询商品
void NameF(LiStack *top)
{
}
//按商品生产日期查找商品
void ProductionDateF(LiStack *top)
{
}
//按商品数量查找商品,查找小于该数量的商品
void NumberF(LiStack *top)
{
}
//date加validity,并返回date,到期时间。
int DateF(int date,int validity)
{
}
//查询过期商品信息
void OverdueF(LiStack *top)
{
}
//查询商品
void find(LiStack *top)
{
}
//修改商品
sqstack update(LiStack *top)
{
}
void main()
{
LiStack *top;
char i,j;
top=(LiStack *)malloc(sizeof(LiStack));
top->next=NULL;
printf("\n\n\t\t------------欢迎使用商品货架管理系统------------\n");
while(1){
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 ----------- 0.退出系统 --------\n");
printf("\t\t ******************************************\n\n");
printf("\t\t\t请输入您的操作:");
scanf("%s",&i);
scanf("%c",&j);
printf("\n\n");
if(i == '0'){
printf("\t\t\t退出成功,欢迎下次使用!\n");
break;
} else {
switch(i)
{
case '1':top=creat();break;
case '2':top=push(top);break;
case '3':top=pop(top);break;
case '4':find(top);break;
case '5':top=update(top);break;
case '6':print(top);break;
default:printf("\t\t\t输入错误,请选择正确的功能\n");
}
}
}
}
六.测试分析
按照附录中的测试数据,得出如下测试、分析结果:
1、新建商品信息。a/b/c/d
2、增加商品。f。
3、出售商品代号3,商品名称c,50个。
4、出售商品代号2,商品名称b,200个。
5、查询,按序号查询,输入1.
6、查询,按商品名称查询,输入b。
7、查询,按生产日期查询,输入20131010.
8、查询,输入小于数量200的商品。
9、查询,输出20131226时过期的商品。
10、修改商品。修改商品代号为4的商品。
11、输出货架上的所有商品。
12、退出系统。
七.使用说明
1、建立目前商品信息。输入1,‘-1’表示结束。按照提示依次输入商品代号、商品名称、生产日期、保质期、数量。
2、添加商品。输入2,依次输入商品代号、商品名称、生产日期、保质期、数量。
3、出售商品。输入3,显示所有商品,选择要出售的商品代号、数量,如果出售的数量小于等于该商品有的数量则显示出售成功。否则显示出售失败。
4、查询商品。输入4,选择1、2、3则按商品代号、名称、生产日期查询商品,选择4、5,则分别输出小于该数值的商品,输出过期商品。
5、修改商品信息。输入5,输入修改商品代号,按照提示输入商品名称、生产日期,保质期,数量。
6、输入所有商品信息。输入6,显示所有商品信息。
7、退出系统。输入0,退出系统。
八.测试数据
如,测分析 六
九.源程序清单
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义结构体
typedef struct node
{
int n; //商品代号
char name[20]; //商品名称
int date; //生产日期
int validity; //保质期(天)
int num; //商品数量
struct node *next;
}LiStack,*sqstack;
//输出所有商品p的名字、生产日期、保质期。
void print(sqstack p)
{
sqstack L=(LiStack *)malloc(sizeof(LiStack));
L=p->next;
if(L==NULL)
printf("货架为空。\n");
else
{
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
while(L!=NULL)
{
printf("%d",L->n);
printf("\t%s \t\t",L->name);
printf("%d \t\t",L->date);
printf("%d \t\t",L->validity);
printf("%d \t\t\n",L->num);
p=L;
L=p->next;
}
printf("\t***************************************\n");
}
}
//增加商品
sqstack push(LiStack *top)
{
int validity,num,n;
int date;
char name[20];
LiStack *temp=(LiStack *)malloc(sizeof(LiStack));
printf("\t\t\t-----欢迎进入商品添加界面!-----\n");
temp=(LiStack *)malloc(sizeof(LiStack));
printf("\t增加商品的代号是:");
scanf("%d",&n);
printf("\t增加的商品名称是:");
scanf("%s",name);
printf("\t生产日期(年月日,如:20131215:)是:");
scanf("%d",&date);
printf("\t保质期(天)是:");
scanf("%d",&validity);
printf("\t数量(个):");
scanf("%d",&num);
temp->date=date;strcpy(temp->name,name);
temp->num=num;temp->validity=validity;
temp->n=n;
if(top->next==NULL)
{
temp->next=NULL;
top->next=temp;
}
else
{
temp->next=top->next;
top->next=temp;
}
printf("\t商品添加成功!\n");
return (top);
}
//创建一个存放商品信息的栈
sqstack creat()
{
int n,validity,num;
char name[20];
int date;
LiStack *p;
LiStack *top=(LiStack *)malloc(sizeof(LiStack));
top->next=NULL;
while(1)
{
printf("\t请输入商品代号(int),代号为'-1'表示输入结束:");
scanf("%d",&n);
if(n<0) break;
else
{
printf("\t请输入%d号——商品名称:",n);
scanf("%s",name);
printf("\t请输入%d号——生产日期(年月日,如20131215):",n);
scanf("%d",&date);
printf("\t请输入%d号——保质期(天):",n);
scanf("%d",&validity);
printf("\t请输入%d号——数量(个):",n);
scanf("%d",&num);
p=(LiStack *)malloc(sizeof(LiStack));
p->date=date;
p->validity=validity;
strcpy(p->name,name);
p->num=num;p->n=n;
if(top->next==NULL)
{
p->next=NULL;
top->next=p;
}
else
{
p->next=top->next;
top->next=p;
}
}
}
return(top);
}
//出售商品
sqstack pop(LiStack *top)
{
int n,num;
LiStack *p,*L;
p=(LiStack *)malloc(sizeof(LiStack));
L=(LiStack *)malloc(sizeof(LiStack));
printf("\t\t\t-----欢迎进入商品出售界面!-----\n");
printf("\t----目前商品有:\n");
print(top);
printf("出售的商品代号是:");
scanf("%d",&n);
printf("出售的商品数量(个):");
scanf("%d",&num);
p=top->next;
if(top->next==NULL)
{
printf("货架为空,请先添加货物! \n");
}
else
{
while(p->next!=NULL)
{
if(p->next->n==n)
{
if(p->next->num<num)
{printf("出售商品数量小于原有数量,出售商品失败。");}
else
{
if(p->next->num==num)
{
if(p->next->next==NULL)
{
p->next=NULL;
printf("商品出售成功!");
free(L);break;}
else
{
L=p->next;
p->next=L->next;
free(L);
printf("商品出售成功!");break;}
}
else
{
p->next->num-=num;
printf("商品出售成功!");break;
}
}
}
p=p->next;
}
if(p==NULL)
printf("输入的商品序号有误,请重新操作。\n");
}
return(top);
}
//按序号查找商品
void SequenceNumberF(LiStack *top)
{
int n,x=0;
LiStack *p;
p=(LiStack *)malloc(sizeof (LiStack));
printf("需要查询的商品代号是:");
scanf("%d",&n);
p=top;
while(p->next!=NULL)
{
if(p->next->n==n)
{
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
x=1;break;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有您要查询的商品。\n");
printf("\t查询成功,欢迎再次使用查询系统.\n");
}
//按商品名字查询商品
void NameF(LiStack *top)
{
char name[20];
int x=0;
LiStack *p;
p=(LiStack *)malloc(sizeof (LiStack));
printf("需要查询的商品名称是:");
scanf("%s",name);
p=top;
while(p->next!=NULL)
{
if(strcmp(p->next->name,name)==0)
{
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
x=1;break;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有您查询的商品。\n");
printf("\t查询成功,欢迎再次使用查询系统.\n");
}
//按商品生产日期查找商品
void ProductionDateF(LiStack *top)
{
int x=0;
int date;
LiStack *p;
p=(LiStack *)malloc(sizeof (LiStack));
printf("需要查询的生产日期是:");
scanf("%d",&date);
p=top;
printf("需要查询的生产日期%d的商品有:\n",date);
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
while(p->next!=NULL)
{
if(date==p->next->date)
{
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
x=1;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有商品的生产日期在%d之前商品。\n",date);
printf("\t查询成功,欢迎再次使用查询系统.\n");
}
//按商品数量查找商品,查找小于该数量的商品
void NumberF(LiStack *top)
{
int num,x=0;
LiStack *p;
p=(LiStack *)malloc(sizeof (LiStack));
printf("需要查询的商品数量是:");
scanf("%d",&num);
p=top;
printf("商品数量低于%d的商品有:\n",num);
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
while(p->next!=NULL)
{
if(p->next->num<=num)
{
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
x=1;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有商品低于%d的商品。\n",num);
printf("\t查询成功,欢迎再次使用查询系统.\n");
}
//date加validity,并返回date,到期时间。
int DateF(int date,int validity)
{
int i=0,j=0,k=0;
int c=0;
i=date/10000;
j=(date-10000*i)/100;
k=date-10000*i-100*j;
k=k+validity;
if(k>30)
{
c=k/30;
k=k%30;
}
j=j+c;
c=0;
if(j>12)
{
c=j/12;
j=j%12;
}
i=i+c;
date=i*10000+j*100+k;
return (date);
}
//查询过期商品信息
void OverdueF(LiStack *top)
{
int validity,x=0;
LiStack *p;
int date,date2,date1;
p=(LiStack *)malloc(sizeof (LiStack));
printf("请输入目前的日期是:");
scanf("%d",&date);
p=top;
printf("需要查询目前日期(%d)的过期的商品有:\n",date);
while(p->next!=NULL)
{
validity=p->next->validity;
date1=p->next->date;
date2=DateF(date1,validity);
if(date2<date)
{
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
x=1;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有过期商品。\n");
printf("\t查询成功,欢迎再次使用查询系统.\n");
}
//查询商品
void find(LiStack *top)
{
int i;
printf("\t\t\t-----欢迎进入商品查询界面!-----\n");
printf("tips:\t【按 商品代号 查询输入1】\t【按 名称 查询输入2】\n");
printf("\t【按 生产日期 查询输入3】\t【按 个数 查询输入4】\n");
printf("\t【查询过期商品信息输入5】\n");
printf("输入按什么方式查询(1-5):");
scanf("%d",&i);
switch(i)
{
case 1 :SequenceNumberF(top);break;
case 2 :NameF(top);break;
case 3 :ProductionDateF(top);break;
case 4 :NumberF(top);break;
case 5 :OverdueF(top);break;
default :printf("\t\t\t输入查询方式错误。\n");
}
}
//修改商品
sqstack update(LiStack *top)
{
int n,validity,num,i,x;
char name[20];
int date;
LiStack *p;
p=(LiStack *)malloc(sizeof (LiStack));
printf("\t\t\t-----欢迎进入商品修改界面!-----\n");
printf("需要查询的商品代号是:");
scanf("%d",&i);
p=top;
while(p->next!=NULL)
{
if(p->next->n==i)
{
printf("代号\t商品名称\t生产日期\t\t保质期(天)\t\t数量(个)\n");
printf("%d",p->next->n);
printf("\t%s \t\t",p->next->name);
printf("%d \t\t",p->next->date);
printf("%d \t\t",p->next->validity);
printf("%d \t\t\n",p->next->num);
printf("\t修改为:");
n=p->next->n;
printf("\t请输入%d号——商品名称:",n);
scanf("%s",name);
printf("\t请输入%d号——生产日期(年月日,如20131215):",n);
scanf("%d",&date);
printf("\t请输入%d号——保质期(天):",n);
scanf("%d",&validity);
printf("\t请输入%d号——数量(个):",n);
scanf("%d",&num);
p->next->date=date;
p->next->validity=validity;
strcpy(p->next->name,name);
p->next->num=num;p->next->n=n;
x=1;
}
p=p->next;
}
if(x==0&&p->next==NULL)
printf("\t没有您要修改的商品。\n");
printf("\t修改成功,欢迎再次使用查询系统.\n");
return (top);
}
void main()
{
LiStack *top;
char i,j;
top=(LiStack *)malloc(sizeof(LiStack));
top->next=NULL;
printf("\n\n\t\t------------欢迎使用商品货架管理系统------------\n");
while(1){
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 ----------- 0.退出系统 --------\n");
printf("\t\t ******************************************\n\n");
printf("\t\t\t请输入您的操作:");
scanf("%s",&i);
scanf("%c",&j);
printf("\n\n");
if(i == '0'){
printf("\t\t\t退出成功,欢迎下次使用!\n");
break;
} else {
switch(i)
{
case '1':top=creat();break;
case '2':top=push(top);break;
case '3':top=pop(top);break;
case '4':find(top);break;
case '5':top=update(top);break;
case '6':print(top);br
展开阅读全文