图书管理系统设计论文毕业论文.docx
《图书管理系统设计论文毕业论文.docx》由会员分享,可在线阅读,更多相关《图书管理系统设计论文毕业论文.docx(21页珍藏版)》请在冰豆网上搜索。
图书管理系统设计论文毕业论文
图书管理系统
1.问题描述与分析
在拥有上万学生的大学里,图书管理是管理的非常重要的一部分,普通的记录册式的管理方式无疑在各个方面给管理员带来了诸多不便,为了更加高效的管理图书,我搜寻相关信息设计了这个程序。
通过此管理系统可以对所记录的数据进行存储。
实现数据录入、数据查询、数据删除、数据显示、数据保存、数据追加以及数据调入功能。
2.数据结构设计和基本算法设计方法的选择
(1)所用的数据结构
为完成图书馆管理系统而选择了线性表数据结构。
(2)数据结构的逻辑结构描述
L=(D,R)
D:
图书集合;R={|ai,ai+1∈D,i=1,2,…,n-1}
其中,ai为ai+1的直接前驱,ai+1为ai的直接后继。
D中的元素为复合数据元素,包含借书、还书、图书维护以及读者维护4个数据项。
(3)数据结构的存储结构描述
图书管理系统选择了链表存储方式,类型描述如下:
constLIST_INIT_SIZE=100;
typedefstuct{
ElemTypeelem[LIST_INIT_SIZE];
intlength;
}SqList1;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
intincrementsize;
}SqList;
(4)算法描述
voidborrowbook(intbookid)//借书操作
intretbook(intbookid)//还书操作
voidRDatabase:
:
readerdata()//读者维护
voidBDatabase:
:
bookidata()//图书维护
(5)使用的原因以及合理性
从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。
若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。
因为结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
线性表是一个典型的线性结构。
3.软件结构设计
图书管理系统可以实现借书、还书、图书维护以及读者维护功能。
(见图3-1系统功能结构图)
图3-1系统功能结构图
4.算法设计
(1)借书的算法
1)算法的流程图(见图4-1借书算法流程图)
图4-1借书算法流程图
2)算法实现的源程序
voidborrowbook(intbookid)//借书操作
{
for(inti=0;i{
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
3)算法分析
时间复杂度:
T(n)=O
(1)
空间复杂度:
S(n)=0
(2)还书的算法
1)算法的流程图(见图4-2还书算法流程图)
图4-2还书算法流程图
2)算法实现的源程序
intretbook(intbookid)//还书操作
{
for(inti=0;i{
if(borbook[i]==bookid)
{
borbook[i]=0;
return1;
}
}
return0;
}
3)算法分析
时间复杂度:
T(n)=O
(1)
空间复杂度:
S(n)=0
(3)图书维护的算法
1)算法的流程图(见图4-3图书维护算法流程图)
图4-3图书维护算法流程图
2)算法实现的源程序
voidBDatabase:
:
bookidata()
{
intchoice=1;
charbname[40];
intbookid;
Book*b;
while(choice!
=0)
{
cout<<"图书维护1:
新增2:
更改3:
删除4:
查找5:
显示6:
全删0:
退出=>";
cin>>choice;
switch(choice)
{
case1:
cout<<"输入图书编号:
";
cin>>bookid;
cout<<"输入图书书名:
";
cin>>bname;
addbook(bookid,bname);
break;
case2:
cout<<"输入图书编号:
";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
cout<<"输入新图书名:
";
cin>>bname;
b->setname(bname);
break;
case3:
cout<<"输入图书编号:
";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
b->delbook();
break;
case4:
cout<<"输入图书编号:
";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<break;
}
b->disp();
break;
case5:
b->disp();
break;
case6:
clear();
break;
}
}
}
3)算法分析
时间复杂度:
T(n)=O(n)
空间复杂度:
S(n)=0
(1)
(4)读者维护的算法
1)算法的流程图(见图4-4读者维护算法流程图)
图4-4读者维护算法流程图
2)算法实现的源程序
voidRDatabase:
:
readerdata()
{
intchoice=1;
charrname[20];
intreaderid;
Reader*r;
while(choice!
=0)
{
cout<<"读者维护1:
新增2:
更改3:
删除4:
查找5:
显示6:
全删0:
退出=>";
cin>>choice;
switch(choice)
{
case1:
cout<<"输入读者编号:
";
cin>>readerid;
cout<<"输入读者姓名:
";
cin>>rname;
addreader(readerid,rname);
break;
case2:
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r=NULL)
{
cout<<"该读者不存在"<break;
}
cout<<"输入新的姓名:
";
cin>>rname;
r->setname(rname);
break;
case3:
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
r->delbook();
break;
case4:
cout<<"输入读者编号:
";
cin>>readerid;
r=query(readerid);
if(r==NULL)
{
cout<<"该读者不存在"<break;
}
r->disp();
break;
case5:
r->disp();
break;
case6:
clear();
break;
}
}
}
3)算法分析
时间复杂度:
T(n)=O(n)
空间复杂度:
S(n)=0
(1)
5.调试分析
(1)打开程序运行文件,出现此画面。
(如图5-1主界面)
图5-1主界面
(2)打开图书维护选项,选择3回车。
(如图5-2图书维护界面)
图5-2图书维护界面
(3)图书维护中有六项,依次进行操作。
增加图书,输入图书编号:
001和图书书名:
算法与数据结构
输入图书编号:
002和图书书名:
模拟电路
输入图书编号:
003和图书书名:
离散数学
回到原界面,操作成功。
(如图5-3图书维护增加图书界面)
(4)进行图书维护中的更改,输入图书编号001,输入新的图书书名英语,回到原界面,操作成功。
(如图5-4图书维护更改图书界面)
(5)进行图书维护中的删除,输入图书编号:
003,回到原界面,操作成功。
(如图5-5图书维护删除图书界面)
图5-3图书维护增加图书界面
图5-4图书维护更改图书界面
图5-5图书维护删除图书界面
(6)进行图书维护中的查找,输入图书编号:
001显示:
1英语在架
输入图书编号:
002显示:
2模拟电路在架
输入图书编号:
003显示:
该图书不存在
回到原界面,测试数据操作成功。
(如图5-6图书维护查找图书界面)
图5-6图书维护查找图书界面
(7)进行图书维护中的显示,显示:
1英语在架,回到原界面,测试数据操作成功。
(如图5-7图书维护显示图书界面)
图5-7图书维护显示图书界面
(8)进行图书维护中的全删,操作全删,回到原界面,操作成功。
(如图5-8图书维护全删图书界面)
(9)打开图书读者维护选项,选择4回车。
(如图5-9读者维护界面)
(10)读者维护中有六项,依次进行操作。
增加读者,输入读者编号:
2005021084和读者姓名:
单微微
输入读者编号:
2005021159和读者姓名:
徐曼
回到原界面,操作成功。
(如图5-10读者维护增加读者)
图5-8图书维护全删图书界面
图5-9读者维护界面
图5-10读者维护增加读者
(11)进行读者维护中的更改,输入读者编号2005021084,输入新的读者姓名:
操作成功。
(如图5-11读者维护更改读者)
图5-11读者维护更改读者
(12)进行读者维护中的删除,输入读者编号,回到原界面,操作成功。
(如图5-12读者维护删除读者)
图5-12读者维护删除读者
(13)进行读者维护中的查找,输入读者编号2005021084,显示数据,回到原
界面,操作成功。
(如图5-13读者维护查找读者)
(14)进行读者维护中的显示,显示数据,回到原界面,操作成功。
(如图5-14读者维护显示读者)
(15)进行读者维护中的全删,回到原界面,测试进行查找,读者不存在,全删操作成功。
(如图5-15读者维护全删读者)
图5-13读者维护查找读者
图5-14读者维护显示读者
图5-15读者维护全删读者
(16)读者维护与图书维护中的退出测试,操作成功。
(如图5-16退出系统)
图5-16退出系统
(17)图书管理系统里的借书操作:
输入以下信息:
读者编号:
2005021084
图书编号:
001
回到原界面,操作成功。
(如图5-17借书)
图5-17借书
(18)图书管理系统里的还书操作:
输入以下信息:
读者编号:
2005021084
图书编号:
001
回到原界面,操作成功。
(如图5-18还书)
图5-18还书
6.总结
(1)综合实践过程的收获
通过本次的综合实践,收获颇多。
对过去学习的数据结构与算法分析的相关知识进行了汇总。
并对所学知识进行了深化。
同时也自学了许多相关知识。
有关文件的知识有了深入的了解。
为了能够使输入的数据得以保存和调入,而且不用到数据库的相关知识,则必须使用文件的相关知识。
但是此部分的相关知识并不充实,因此必须自学这部分的知识。
通过这次综合实践,使自学能力得到了增强。
这是这次综合实践过程中的最大收获。
(2)遇到问题以及解决问题的思路和方法
通过本次得综合实践,在编写图书管理系统程序代码的过程中遇到了很多的问题。
在实现“显示”功能的时候,出现乱码。
经推断,认为是数据类型定义不正确。
则将数据元素的类型改为char类型。
将程序再次编译运行后,这个程序BUG得以解决。
(3)程序调试能力的思考
通过本次得综合实践,对程序BUG的调试能力有了很大的提高。
在调试过程中逐渐学会了编译器的但不调试功能。
学会了读懂程序中出错时所报出的错误提示信息。
并能够根据这些信息找到相应的错误,及时改正。
(4)在综合实践设计过程中对《数据结构与算法分析》课程的认识
通过这次综合设计,对《数据结构与算法分析》课程有了更深的认识。
对于从事计算机专业的的人士来说,无论从理论还是从实践的角度,学习数据结构和算法都是有必要的。
算法是对输入数据的处理,以产生解决问题的输出的过程。
从实践的角度来看,我们必须了解计算机领域中不同问题的一系列标准算法以及计算机程序加工的对象之间的关系;此外,我们还要具备设计新算法和分析其效率的能力。
要清楚地知道、算法和程序三者之间的关系及相应的技术。