数据结构课程设计.docx
- 文档编号:12718914
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:24
- 大小:106.98KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
姓名:
学号:
学院:
计算机与电子信息学院
专业班级:
计算机与网络工程类072班
任课教师:
【题目】:
库存管理
【基本要求】:
为了实现库存管理的几种操作功能,包括出库、入库、修改、查询、读写文件、缺货登记等功能。
【需求分析】:
该程序运用了VisualC++的程序开发工具,为的是实现仓库中货物的管理,具体为对新货物的添加(即入库)、对货物的出库、对缺货商品的登记、对库内商品的修改、查询及对输入的商品信息储存到文件。
【主要流程为】
主菜单
退出
货物信息显示
缺货登记
修改货物表
查找货物表
货物出库和入库
物出库和入库
缺货信息
库内货物信息
按名称查找
按编号查找
出库
入库
该程序主要使用的是链表的数据结构。
对链表实行插入删除修改等以进行货物信息的入库、出库、修改、查询等功能。
【源程序】:
#include
#include
#include
#include
#definemax32
intifempty=0;//标志,判断链表是无否为空
typedefstructdnode//定义双向链表结构体
{
intnumber;//货物编号
charname[max];//货物名称
intcounter;//货物数量
intprice;//货物的价格
intt_price;//总价
structdnode*prior,*next;
//定义两指针,分别指向其前驱和后继
}dlnode;
//函数源头说明
dlnode*create(dlnode*L);
dlnode*input(dlnode*L);
dlnode*output(dlnode*L);
dlnode*outnum(dlnode*L);
dlnode*outname(dlnode*L);
dlnode*current(dlnode*L);
dlnode*modify(dlnode*S);
voidquit(dlnode*S);
voidsearch(dlnode*L);
voidprint(dlnode*L);
voidsearchnum(dlnode*L);
voidsearchname(dlnode*L);
voiddisplay(dlnode*L);
voidxianshi(dlnode*L,dlnode*S);
voidmain()
{
intx;
dlnode*L,*S,*Q;
if(!
(L=(dlnode*)malloc(sizeof(dlnode))))//分配空间
{
printf("\n");
exit
(1);
}
create(L);///调用函数,创建头节点
if(!
(S=(dlnode*)malloc(sizeof(dlnode))))//分配空间
{
printf("\n");
exit
(1);
}
create(S);///调用函数,创建头节点
while
(1)
{////////////////////////主菜单///////////////////////////
printf("*****************************\n");
printf("1.货物出库和入库\n");
printf("2.查找货物表\n");
printf("3.修改货物表\n");
printf("4.缺货登记\n");
printf("5.货物信息显示\n");
printf("0.退出\n");
printf("*****************************\n");
printf("选择0--5:
");
scanf("%d",&x);
switch(x)
{
case2:
search(L);break;//调用查找函数
case1:
current(L);break;//调用入库出库函数
case3:
quit(L);break;//调用修改函数
case4:
Q=modify(S);break;//调用修改函数
case5:
xianshi(L,Q);break;//调用函数
case7:
print(L);break;//调用打印函数
case0:
printf("\n谢谢使用!
\n");
exit(0);//退出程序
default:
printf("\n请输入0—4选择!
");
getchar();getchar();
}
}
}
voidxianshi(dlnode*L,dlnode*Q)
{
inta;
printf("=====================\n");
printf("1.显示库内货物信息\n");
printf("2.显示缺货信息\n");
printf("====================\n");
scanf("%d",&a);
if(a==1)
display(L);
else
display(Q);
}
dlnode*create(dlnode*L)//创建链表头节点
{
printf("欢迎使用我的仓库管理系统\n");
ifempty=0;
///////初始化头节点的值////////
L->next=NULL;L->prior=NULL;
L->number=L->counter=0;
strcpy(L->name,"");
returnL;
}
voidquit(dlnode*L)///查找的主要菜单
{
intnum,flag=0;//flag为是否找到的标志
dlnode*head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要修改的货物编号:
\n");
printf("");
scanf("%d",&num);
while((L=L->next)!
=head)
{
if(L->number==num)
{flag=1;//flag为1时表示找到
printf("找到指定编号货物\n");
printf("\n编号:
%d\n",L->number);
printf("名称:
%s\n",L->name);
printf("数量:
%d\n",L->counter);
printf("价格:
%d\n",L->price);
printf("总价:
%d\n\n",L->t_price);
printf("输入新货物信息:
\n\n");
printf("编号:
");scanf("%d",&L->number);
printf("名称:
");scanf("%s",&L->name);
printf("数量:
");scanf("%d",&L->counter);
printf("价格:
");scanf("%d",&L->price);
printf("总价:
");scanf("%d",&L->t_price);
}
}
print(head);
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。
\n");
getchar();getchar();
}
voidsearch(dlnode*L)///查找的主要菜单
{
inty;
if(ifempty==0)
{
printf("没有输入货物!
\n");
getchar();getchar();
return;
}
else
{
while
(1)
{
printf("=====================\n");
printf("1.按编号查询\n");
printf("2.按货物名称查询\n");
printf("0.返回上一层\n");
printf("====================\n");
printf("选择0--2:
");
scanf("%d",&y);
switch(y)
{
case1:
searchnum(L);break;//调用按编号查找的函数
case2:
searchname(L);break;//调用按名称查找的函数
case0:
return;//返回
default:
printf("输入有错!
请从0--2中选择!
\n\n");
printf("\n\n");
}
}
}
}
voidsearchnum(dlnode*L)//按编号查找的函数
{
intnum,flag=0;//flag为是否找到的标志
dlnode*head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物编号:
\n");
printf("");
scanf("%d",&num);
while((L=L->next)!
=head)
{
if(L->number==num)
{flag=1;//flag为1时表示找到
printf("找到指定编号货物\n");
printf("\n编号:
%d\n",L->number);
printf("名称:
%s\n",L->name);
printf("数量:
%d\n",L->counter);
printf("价格:
%d\n",L->price);
printf("总价:
%d\n\n",L->t_price);
}
}
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。
\n");
getchar();getchar();
}
voidsearchname(dlnode*L)//按名称查找的函数
{
intflag=0;//flag为是否找到的标志
charna[32];
dlnode*head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物名称\n");
printf("");
scanf("%s",&na);
while((L=L->next)!
=head)
{
if(strcmp(L->name,na)==0)
{flag=1;//flag为1时表示找到
printf("找到指定名称货物\n");
printf("\n编号:
%d\n",L->number);
printf("名称:
%s\n",L->name);
printf("数量:
%d\n",L->counter);
printf("价格:
%d\n",L->price);
printf("总价:
%d\n\n",L->t_price);
}
}
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。
\n\n");
getchar();getchar();
}
dlnode*modify(dlnode*S)
{inty;
while
(1)
{
printf("========================\n");
printf("1.添加缺货信息\n");
printf("0.返回上一层\n");
printf("========================\n");
printf("选择0--1:
");
scanf("%d",&y);
switch(y)
{
case1:
input(S);break;//调用入库函数
case0:
return(S);//返回上一层
default:
printf("输入错误!
请从0--1中选择!
");
getchar();getchar();
printf("\n\n");
}
}
}
dlnode*current(dlnode*L)//货物出库入库函数
{
inty;
while
(1)
{
printf("========================\n");
printf("1.货物入库\n");
printf("2.货物出库\n");
printf("0.返回上一层\n");
printf("========================\n");
printf("选择0--2:
");
scanf("%d",&y);
switch(y)
{
case1:
input(L);break;//调用入库函数
case2:
output(L);break;//调用出库函数
case0:
return(L);//返回上一层
default:
printf("输入错误!
请从0--2中选择!
");
getchar();getchar();
printf("\n\n");
}
}
}
dlnode*input(dlnode*L)//定义入库函数
{
dlnode*in,*head;
head=in=(dlnode*)malloc(sizeof(dlnode));//分配空间
head=L;
printf("\n请输入货物数据:
\n");
printf("编号:
");scanf("%d",&in->number);
printf("名称:
");scanf("%s",&in->name);
printf("数量:
");scanf("%d",&in->counter);
printf("价格:
");scanf("%d",&in->price);
printf("总价:
");scanf("%d",&in->t_price);
if(L->next==NULL)//如果只有头节点,
{//把刚输入的in节点
L->next=in;//跟在头节点后面
L->prior=in;
in->next=L;
in->prior=L;
ifempty++;//ifempty加1
}
else
{//如果当前L的下一个节点不是头节点
while((L=L->next)!
=head)
{//如果输入的数大于L->number,则插到L的前面
if(L->number
{
in->next=L;
in->prior=L->prior;
L->prior->next=in;
L->prior=in;
ifempty++;//ifempty加1
return(head);
}
}
//输入的编号比其它编号都小,则插到最后个节点,并首尾相连
head->prior->next=in;
in->prior=head->prior;
head->prior=in;
in->next=head;
ifempty++;//ifempty加1
}
print(head);
returnhead;
}
dlnode*output(dlnode*L)//出库的函数
{
inty;
dlnode*head=L;
if(ifempty==0)//检测是否有货物输入
{
printf("没有货物输入系统\n");
getchar();getchar();
return(head);
}
while
(1)
{
printf("=============\n");
printf("1.按编号出库\n");
printf("2.按名称出库\n");
printf("0.返回上一层\n");
printf("==============\n");
printf("选择0--2:
");scanf("%d",&y);
switch(y)
{
case1:
outnum(L);break;//调用按编号出库函数
case2:
outname(L);break;//调用按名称出库函数
case0:
return(L);
default:
printf("entererror!
Pleaseinput0--2!
");
getchar();getchar();
printf("\n\n");
}
}
}
dlnode*outnum(dlnode*L)//按编号出库函数
{
intnum;
dlnode*head=L;
printf("请输入出库货物的编号:
");
scanf("%d",&num);
while((L=L->next)!
=head)
{//如果找到就删除节点
if(L->number==num)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--;//ifempty减1
printf("编号为%d的货物成功出库",num);
getchar();getchar();
print(head);
returnhead;
}
}
printf("没有此编号的货物,请查看是否还有货物。
\n\n");
getchar();getchar();
return(head);
}
dlnode*outname(dlnode*L)//按名称出库函数
{
charna[32];
dlnode*head=L;
printf("请输入出库货物的名称:
");
scanf("%s",&na);
while((L=L->next)!
=head)
{//如果找到就删除节点
if(strcmp(L->name,na)==0)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--;//ifempty减1
printf("名称为%s的货物成功出库",na);
getchar();getchar();
print(head);
return(head);
}
}
printf("没有此名称的货物,请查看是否还有货物。
\n\n");
getchar();getchar();
return(head);
}
voiddisplay(dlnode*L)//显示货物清单
{
dlnode*head=L;
if(ifempty==0)
{
printf("没有货物可显示\n");
getchar();getchar();
return;
}
L=L->next;
do
{
printf("\n编号:
%d\n",L->number);
printf("名称:
%s\n",L->name);
printf("数量:
%d\n",L->counter);
printf("价格:
%d\n",L->price);
printf("总价:
%d\n\n",L->t_price);
}while((L=L->next)!
=head);
getchar();getchar();
}
voidprint(dlnode*L)//把信息输入文件
{
dlnode*head=L;
L=L->next;
charfilename[max]="d:
\\information.txt";
FILE*out;
if(ifempty==0)
{
printf("没有货物可输出\n");
getchar();getchar();
return;
}
if((out=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!
\n");
getchar();getchar();
return;
}
do{
fprintf(out,"编号:
%d\n名称:
%s\n数量:
%d\n价格:
%d\n总价:
%d\n\n",L->number,L->name,L->counter,L->price,L->t_price);
}while((L=L->next)!
=head);
printf("信息以输入到文件中!
\n");getchar();getchar();
fclose(out);
}
【调试分析】:
主菜单页面
1、选择1的货物出库和入库选项页面:
(1)选择1:
货物入库选项(操作时添加了多个,选取部分插入)
(2)选择2:
货物出库选项
按编号出库
a.输入库内没有的商品编号:
b.输入库内有的商品编号:
选择2的按名称出库选项:
(3)选择0:
退出选项
2.选择2的查询选项
(1)选择1:
按编号查询
(2)选择2:
按商品名查询选项
3.选择3的修改商品信息选项
4.选择添4的缺货登记选项
选择添加缺货信息:
5.选择5:
显示库内信息
选择1的显示库内信息:
选择2的现实缺货信息:
5.选择0:
退出选项
【实验总结】
经过这次对数据结构的课程设计,收获最大的就是我能熟悉掌握了对链表这一数据结构的使用,能准确的对其进行插入、删除和修改等功能;其次是重新复习了文件的使用方法,将输入的信息成功的保存在文档文件中。
在刚开始这个课程设计的时候,由于对文件的使用还不太熟悉,所以导致信息不能正确的保存,再有就是对链表的操作,起初是比较笨拙的,就是不能自如的使用。
在调式的过程中要反复的进行修改,因为有些地方并不能如愿的显示自己想要的结果,再有就是页面不是很整齐也要反复的对程序进行修改,是页面更整齐好看。
总之经过的课程设计,我更了解到了数据结构的功能非常的强大,不仅仅是自己做出来的东西让我这么认为,因为在做的过程中少不了和同学交流,在交流的过程中看到其他同学用数据结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计