数据结构课程设计文具店的货品管理doc.docx
《数据结构课程设计文具店的货品管理doc.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文具店的货品管理doc.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计文具店的货品管理doc
数据结构
课程设计报告
设计题目:
文具店的货品管理
专业软件工程
班级二班
学生黄淼
学号E20814028
2009-20109年第2学期
一、设计目的
1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2、提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。
4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。
二、设计内容
文具店的货品管理
在文具店的日常管理经营过程中,存在对各种文具管理问题。
当库存文具不足或缺货时,需要进货。
日常销售时,需要出库。
当盘点货物时,需要查询货物的信息。
请根据这些要求编写软件完成库存文具的管理功能。
文具信息可以用表1和表2来表示。
表1
文具名称
文具类别
文具数量
钢笔
1
400
日记本
2
2000
计算器
3
50
表2
文具类别号
文具类别名
1
文具
2
纸张
3
工具
三、源程序
#include
#include
#include
#include
#include
#defineERROR0
#defineOK1
#defineOVERFLOW0
typedefstruct{
charname[10];
charlb[10];
intcount;
}datatype;
typedefstructnode{
datatypename;
structnode*next;
}listnode,*linklist;
intmenu_select();
intlinklist_init(linklist&head);
intlinklist_create(linklist&head);
intlinklist_insert(linklist&head);
intlinklist_find(linklisthead);
intlinklist_delete(linklist&head);
intlinklist_print(linklisthead);
intmenu_select()
{
intsn;
printf("\n文具店商品管理\n");
printf("=================================================\n");
printf("1.商店商品的初始状态\n");
printf("2.商品的存入\n");
printf("3.商品的查询\n");
printf("4.商品的卖出\n");
printf("5.商品的输出检索\n");
printf("6.退出管理系统\n");
printf("\n===============================================\n");
printf("选择1--6:
");
for(;;)
{
scanf("%d",&sn);
if(sn<1||sn>6)
printf("输入错误,从新选择(1--6):
");
else
break;
}
returnsn;
}
intlinklist_init(linklist&head)//初始化
{
head=(linklist)malloc(sizeof(listnode));
if(!
head)
exit(OVERFLOW);
head->next=NULL;
returnOK;
}
intlinklist_create(linklist&head)//商品的创建
{
linklistp,rear;
intflag=0;
rear=head;
while(flag==0)
{
p=(linklist)malloc(sizeof(listnode));
printf("\n商店初始商品文具名称:
");
cin>>p->name.name;
printf("\n初始文具数量:
");
cin>>p->name.count;
printf("\n初始文具类别:
");
cin>>p->name.lb;
p->next=NULL;
rear->next=p;
rear=p;
printf("结束初始化吗?
(1/0):
");
scanf("%d",&flag);
}
rear->next=NULL;
returnOK;
}
intlinklist_insert(linklist&head)//向商店存货(存入文具)
{
linklistp,p1,p2;
p2=head;
p2=p2->next;
p=(linklist)malloc(sizeof(listnode));
printf("输入要存货的文具名称:
");
cin>>p->name.name;
printf("\n存货的文具数量:
");
cin>>p->name.count;
printf("\n存货的文具类别:
");
cin>>p->name.lb;
while(p2!
=NULL)
{
if(strcmp(p2->name.name,p->name.name)==0)
{
p2->name.count+=p->name.count;
printf("\n存货成功!
");
returnOK;
}
else
{
p1=p2;
p2=p2->next;
}
}
if(p2==NULL)
{
p1->next=p;
p->next=NULL;
printf("\n存货成功!
");
}
returnERROR;
}
intlinklist_delete(linklist&head)//商店卖出文具
{
linklistp,t;
t=head;
t=t->next;
p=(linklist)malloc(sizeof(listnode));
printf("卖出商品的文具名称:
");
cin>>p->name.name;
printf("\n想卖出多少件:
");
cin>>p->name.count;
while(t!
=NULL)
{
if(strcmp(t->name.name,p->name.name)==0)
{
if(t->name.count==0)
{
printf("\n此类商品已经销售完。
");
returnERROR;
}
else
{
if(t->name.countname.count)
{
printf("\n现存商品容量不足,无法卖出。
");
returnERROR;
}
else
{
t->name.count-=p->name.count;
printf("\n此类文具卖出成功!
");
returnOK;
}
}
}
else
{
t=t->next;
}
}
if(t==NULL)
{
printf("\n商店没有此类文具。
");
}
returnERROR;
}
intlinklist_print(linklisthead)//输出
{
linklistp1;
p1=head;
p1=p1->next;
printf("文具名称文具类别文具数量\n");
while(p1!
=NULL)
{
printf("%4s\t%14s\t%20d",p1->name.name,p1->name.lb,p1->name.count);
p1=p1->next;
printf("\n");
}
returnOK;
}
intlinklist_find(linklisthead)//查找
{
linklistp,p1,p2;
p1=p2=head;
p2=p2->next;
p=(linklist)malloc(sizeof(listnode));
printf("\n输入要查找的文具名称:
");
cin>>p->name.name;
while(p2!
=NULL)
{
if(strcmp(p2->name.name,p->name.name)==0)
{
printf("\n查找成功,输出如下:
\n");
printf("文具名称文具类别文具数量\n");
printf("%4s\t%14s\t%20d",p2->name.name,p2->name.lb,p2->name.count);
returnOK;
}
else
p2=p2->next;
}
printf("\n查找不成功!
");
returnERROR;
}
voidmain()
{
linklisthead;
linklist_init(head);
for(;;)
{
switch(menu_select())
{
case1:
//创建
linklist_create(head);
break;
case2:
//存货
linklist_insert(head);
break;
case3:
//查询文具
linklist_find(head);
break;
case4:
//卖出文具
linklist_delete(head);
break;
case5:
//检索文具
linklist_print(head);
break;
case6:
printf("\n谢谢光临,欢迎回顾!
\n");
break;
}
}
}
四、调试分析
调试的过程中,对程序做了几点改进,增加了程序的容错能力,不论用户输入什么内容,程序都能安全检查。
五、测试结果
进入演示程序后,即显示主界面为:
根据提示,用户输入选项:
1、进入商店商品的初始化状态
输入表1和表2信息
其中:
结束初始化吗?
(1/0)选择0代表不结束,即继续输入商品信息,选择1代表,商品信息输入结束.
2、商品的存入
(例:
文具店需进钢笔300,橡皮200)
3、商品的查询(查询一种商品的信息,这里以钢笔为例)
初始化时,钢笔400;
后进货,钢笔300;
文具店现有存货为:
钢笔700;
4、商品的卖出
以钢笔为例:
钢笔现存700;要卖出200
剩余钢笔500
5、商品的输出检索
可以查看现库存商品的信息
6、退出管理系统
六、课程设计小结:
通过这次课程设计,对程序设计和调试的能力有很大的提升。
这次课程设计使我深刻认识到自己专业知识的匮乏,缺乏独立程序设计的能力。
通过这次的课程设计也是我认识到了我在程序设计方面的严重不足,以及专业知识的严重匮乏。
我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。
这样一种更贴切实际的课程设计,大大的提高了我的学习效率,希望能够在平时教学的时候也能加入一些类似课程设计的程序设计习题