北京理工大学 数据结构实验报告 实验四图书管理系统Word格式文档下载.docx
《北京理工大学 数据结构实验报告 实验四图书管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北京理工大学 数据结构实验报告 实验四图书管理系统Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。
![北京理工大学 数据结构实验报告 实验四图书管理系统Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/12/cde5c78f-10de-4c75-9659-d633a40b1518/cde5c78f-10de-4c75-9659-d633a40b15181.gif)
}BK;
注意结点的指针域有left和right两个。
2.本程序包含两个模块
(1)主程序模块
主函数只包含了Menu_select()函数。
目的是进入主菜单界面,进行功能选择;
直到输入操作码0,退出系统;
(2)双向链表单元模块——实现书籍信息的链式存储的抽象数据类型。
各函数之间的调用关系:
三.详细设计
1.结点类型
2.子函数
(1)功能菜单调用函数Menu_select()
使用户进入主菜单界面,进行功能选择;
先进入无限循环,输入操作码进行系统管理工作,直到输入操作码0,退出系统;
(2)各种功能函数
Initialize()//初始化图书系统信息;
Insert()//添加新的图书信息;
Sort()//对图书进行排序,本程序可以实现按“图书编号”、“出版日期”、“图书价格”多种关键字进行排序;
Search()//实现对图书的查找功能,本程序可以实现按“图书编号”、“出版日期”、“图书价格”多种关键字进行查找;
deletebook()//删除无效的图书信息;
Print_book()//打印全部图书信息。
3.主函数
Main函数十分的简单,目的只有一个,就是进入功能选择菜单。
intmain()
{/*主函数*/
Menu_select();
/*调用主菜单*/
}
四.调试分析
1.为了提高程序的健壮性,在menu函数中,考虑如果操作码超出0-7的范围,进行错误提示。
2.刚开始使用的其实是单链表,然后很快就发现了问题,当编写排序部分的时候,很难再进行下去;
考虑过使用顺序表,但是由于有删除、添加的操作,所以也放弃了顺序表,最终决定用双向链表,这还是第一次。
过程中发现双向链表用起来很方便!
3.排序函数sort()中为了保证程序的正确性,使用了自己较为熟练的冒泡排序法,没有考虑时间复杂度。
4.在编写的过程中也更加熟悉了switch函数,free函数,goto函数(当然尽量少用),还有学会了清屏,system(“cls”);
五.测试结果
1.建立图书信息及添加功能
2.查找功能
A.按编号查找:
B.按日期查找
3.修改功能
4.删除功能
5.排序功能
为了说明问题,这里又添加了两本书《简爱》、《余罪》
测试只提供按编号和日期排序
A.按编号排序:
B.按出版日期排序
六、附录
#include<
stdio.h>
#include<
string.h>
stdlib.h>
conio.h>
BK*h_book;
/*函数申明*/
voidStart()
{system("
cls"
);
printf("
\n\n\n\t\t***************************************\n"
\n\n\n\t\t\t欢迎使用图书管理系统\n"
\n\n\n\t\t按任意键进入系统..."
getch();
system("
}
voidInsert()/*新书入库*/
{BK*p,*p0,*p1;
p=p1=h_book;
printf("
\n新书入库模块...\n"
\n请输入新书信息..\n包括书号、书名、数量...\n"
p0=(BK*)malloc(sizeof(BK));
图书编号:
"
scanf("
%s"
p0->
number);
while(strcmp(p0->
number,p1->
number)!
=0&
&
p1->
right!
=NULL)
p1=p1->
right;
if(strcmp(p0->
number)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/
{printf("
\n此编号图书已存在!
!
直接入库!
\n"
}
else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/
{printf("
图书名称:
scanf("
title);
printf("
图书作者:
author);
printf("
图书出版日期:
date);
图书价格:
price);
while(p->
right)
{p=p->
if(h_book==NULL)h_book=p0;
/*此处分两种情况,链表中没有
数据,head直接指向p0处*/
else{p->
right=p0;
p0->
left=p;
}/*此处分两种情况,链表中有数据,
链表中最后元素的right指向p0处*/
right=NULL;
\n新书入库完毕!
按任意键继续下一步操作..\n"
getch();
voidPrint_book()/*打印所有图书信息*/
BK*p;
p=h_book;
\n图书信息如下:
\n\n"
图书编号\t图书名称\t图书作者\t出版日期\t价格\n"
while(p!
=NULL){
%s\t\t%s\t\t%s\t\t%s\t%s\n"
p->
number,p->
title,p->
author,p->
date,p->
p=p->
\n图书信息打印完毕!
按任意键继续下一步操作.."
voidInitialize()/*初始化*/
{BK*p0;
\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n"
p0=(BK*)malloc(sizeof(BK));
h_book=p0;
\n请输入图书信息:
/*输入图书编号(唯一)*/
/*输入图书名称*/
/*输入图书作者*/
/*输入图书出版日期*/
/*输入图书价格*/
p0->
left=NULL;
\n图书信息初始化完毕!
voidSort()
{/*按多种关键词排序*/
BK*p,*front,*rear,*temp;
intx;
\n图书排序开始..\n"
\n请选择关键字进行排序:
1.书籍编号\n2.出版日期\n3.书籍价格\n"
%d"
&
x);
temp=(BK*)malloc(sizeof(BK));
front=h_book;
p=front;
while(p->
right)p=p->
rear=p;
while
(1)
{if(front==rear)break;
else
{p=front;
{if(p==rear)break;
switch(x)
{
case1:
if(strcmp(p->
right->
number)>
0)//按编号冒泡排序
{strcpy(temp->
strcpy(p->
number,temp->
strcpy(temp->
author,temp->
title,p->
strcpy(p->
title,temp->
date,p->
date,temp->
price,p->
price,temp->
}break;
case2:
date)>
0)//按出版日期冒泡排序
case3:
if(strcmp(p->
price,p->
price)>
0)//按价格冒泡排序
{strcpy(temp->
default:
break;
}
p=p->
rear=rear->
left;
}
\n排序完毕!
voidSearch()
{/*多种关键词查找*/
chart[20]={0};
\n图书查找开始..\n"
k:
\n请选择关键字进行查找:
\n请输入关键字:
t);
while(p)
number,t)==0)
{printf("
%s\t%s\t%s\t%s\t%s\n"
}break;
case2:
date,t)==0)
case3:
price,t)==0)
default:
请输入正确的操作码!
gotok;
p=p->
\n查找完毕!
voiddeletebook()/*删除图书信息*/
{BK*p;
\n请输入需要删除书籍编号:
p=h_book->
{if(strcmp(p->
{p->
left->
right=p->
p->
left=p->
free(p);
\n删除完毕!
voidModify()/*修改图书信息*/
\n请输入需要修改书籍编号:
number,t)==0)break;
}/*指针p指向需要修改的结点*/
\n请重新输入图书信息:
p->
\n修改完毕!
intMenu()/*主菜单*/
{intdm;
\n\t\t欢迎使用图书管理系统\n"
=================================================\n"
\t\t0----退出系统\n"
\t\t1----数据初始化\n"
\t\t2----新书入库\n"
\t\t3----图书排序\n"
\t\t4----搜索图书\n"
\t\t5----删除信息\n"
\t\t6----修改信息\n"
\t\t7----全部图书信息\n"
请输入相应的操作码:
for(;
;
)
{scanf("
dm);
//dm输入的数字
if(dm<
0||dm>
7)
\n错误!
请重新输入:
elsebreak;
returndm;
voidMenu_select()/*主菜单选择函数*/
{for(;
switch(Menu())/*功能选择*/
case0:
printf("
\n\n\t欢迎下次使用本系统!
(按任意键退出...)\n"
getch();
exit(0);
Initialize();
case2:
Insert();
Sort();
case4:
Search();
case5:
deletebook();
case6:
Modify();
case7:
Print_book();
default: