用书名书号作者查询的图书管理系统Word文档下载推荐.docx
《用书名书号作者查询的图书管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用书名书号作者查询的图书管理系统Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
选题意义:
借助计算机C++中的知识,编写相应的图书管理程序就可以实现这一功能。
利用图书管理程序记录图书信息,不仅能节省我们大量的工作时间,减轻巨大的工作量,提高工作效率,还能够减少工作失误。
1.3团队分工和个人贡献
第一章概述
第四章系统实现
源代码中:
(1)图书浏览功能
(2)图书删除功能
第2章系统分析(需求分析)
2.1系统的整体需求
该系统需要完成的内容:
用类和对象实现新书上架、图书浏览、图书查询、图书下架。
该系统需要完成的整体目标:
系统能够正常运行,基本上实现添加、删除图书信息,显示所有信息,能够由相应条件查阅图书信息这四种功能。
2.2系统的功能需求
必须完成的模块:
(1)界面模块:
当进入该管理系统时候,提示相应的说明,引导如何操作
(2)新书上架模块:
能够添加书号、书名、作者名、出版社、出版时间、价格这些图书信息。
(3)图书浏览模块:
能够输出所有图书信息。
(4)图书查询模块:
可按条件查询图书信息,当输入书号或书名或作者名时候,相对应的图书信息便可自动搜索出来。
(5)图书下架模块:
可按书号删除指定图书信息。
创新模块:
2.3系统主要模块流程图
注:
数字代表相应操作下的子操作
第3章系统设计
3.1系统的整体设计
3.2系统的主要模块设计
(1)登陆界面模块。
该模块显示管理程序的名称,提示相应的操作。
(2)信息录入模块。
(2)图书浏览模块
(3)图书查询模块
(4)图书下架模块
第4章系统实现
1登入界面
实现方式:
调用主函数,利用Book.read()读入数据,同时定义功能选项按钮charfunction='
0'
;
,对function的真假进行判断,若function为真,即与初值相同,实现while循环内语句。
界面主要程序语句:
cout<
<
endl;
"
\t******************************************************************\n"
\t\t\t\t欢迎使用图书管理系统"
\t\t\t\t\t请选择操作\n"
\t\t\t\t1创建新书信息"
\t\t\t\t2显示所有图书"
\t\t\t\t3按指定条件查询书目"
\t\t\t\t4按书号删除书目"
\t\t\t\t5退出系统并保存修改"
\t\t\t(查询可按书号/作者/书名查询)"
调试运行代码后结果如下:
2、创建图书信息
当选择按钮1,执行main函数中function=='
1'
的条件语句,首先定义字符串stringa,b,c,d,e,f;
然后调用#include<
iostream>
,根据提示输入相应的书本信心,建立对象booknewbook(a,b,c,d,e,f);
,利用添加函数Book.add(newbook)把数据添加到新建对象里,然后调用display()函数显示此次输入的信息。
输入数字1后按提示输入相应信息,结果如下:
3、显示所有图书信息
当选择按钮2,执行function=='
2'
的条件语句。
Main函数调用#include<
,利用如下语句:
这是所有藏书:
*********************************"
输出相应的提示信息和图案,然后调用函数display_all(),显示出所有信息。
4、按条件查询
当选择按钮3,执行function=='
3'
main函数调用#include<
,输出相应选择的提示,执行如下代码:
请选择查询方式"
1按ISBN查询"
2按书名查询"
3按作者查询"
然后定义字符j和字符串search,此时j是作为按钮使用,search是为了输入你要查询的内容。
子按钮功能的实现再次调用#include<
文件,当输入好相应的信息,执行如下语句:
以下是查询结果"
cout<
给出提示后执行搜索函数search_by_isbn(),同理利用search_by_name()、search_by_writer()实现书名查找,按作者查找的功能。
(1)按书号查询
查询书号为001的图书
步骤一:
在主界面选择3
步骤二:
回车后点击“1”,然后输入001,回车。
(2)按书名查询
查询书名为“考研英语”这本书
回车后点击“2”,然后输入“考研英语”,回车
(3)按作者名查询
回车后点击“3”,然后输入“宫东风”,回车
5、按书号删除图书信息
当选择按钮4,执行function=='
4'
首先定义字符串a,然后main函数调用#include<
,输入相应的书号,接下来建立对象del(a,"
"
"
),调用删除函数delete_by_isbn(),实现删除功能。
例如删除001号图书
在登陆界面输入“4”,回车;
按提示输入要删除的书号“001”,回车。
6、退出图书管理系统
当选择按钮5,执行function=='
5'
此时执行空操作,跳出while循环,执行main函数后续语句,利用system("
CLS"
);
清屏后由写函数Book.write();
把操作后的数据读入到文件中,最后调用头文件#include<
输出相应的提示信息后退出系统。
在登录界面输入“5”,回车。
第5章结束语
这次课程设计历时数个星期,通过课程设计,我发现了自己的很多不足,知识上还存在很多漏洞,我看到了自己的实践经验还比较缺乏,理论联系实际的能力还急需提高。
为完成这次课程设计我确实付出很多,有苦有乐,这十几天的工作日子,怎么形容呢,每次在实验室回来就会心情不好,感觉自己什么都没有做成,慢慢的摸索着,开始入门,而且有了一点成就感,就这样每一次都比前一次收获多,心情也慢慢好了,而且我的系统也一天比一天的完善。
毕竟没有白费心血,以艰辛的付出最终还是获得不少回报!
总之,计算机是一门实践性很强的学科,要想学好,就必须多练习,多总结,只有这样,才能够更加深入地了解,才能够学会如何去运用它。
参考文献
[1]郑莉,董渊,何江舟.C++程序设计[M].清华大学出版社,2010.
[2]谭浩强.C程序设计[M].清华大学出版社.2007
[3]李强,贾云霞.VisualC++项目开发实践.北京:
中国铁道出版社,2004.
[4]李书贤.《C++Primer中文版》[M].人民邮电出版社
附录
源代码:
#include<
cstdio>
stdlib.h>
//cstdio是将stdio.h的内容用C++头文件的形式表示出来。
usingnamespacestd;
string>
classbook
{private:
stringisbn;
//书号
stringname;
//书名
stringwriter;
//作者
stringpublisher;
//出版社
stringtime;
//出版时间
stringprice;
//图书价格
public:
book(){}
book(stringa,stringb,stringc,stringd,stringe,stringf)
{isbn=a;
name=b;
writer=c;
publisher=d;
time=e;
price=f;
}
stringget_name()
{returnname;
}
stringget_isbn()
{returnisbn;
stringget_writer()
{returnwriter;
voiddisplay()//图书内容的显示
{
书号:
isbn<
endl<
书名:
name<
作者:
writer<
出版社:
publisher<
出版时间:
time<
价格:
price<
元"
};
classdatabase:
publicbook//公有继承(public)的定义classB:
publicA{<
派生类新定义成员>
};
{private:
bookshumu[100];
intsum;
database(){sum=0;
voidadd(booka)
if(sum>
=100)
{cout<
添加失败,内存已满!
}
else
{shumu[sum]=a;
sum++;
cout<
添加新书目成功,以下是本书信息"
voiddelete_by_isbn(booka)
{intflag=0;
if(sum==0)
{cout<
删除失败,已经没有存档了!
else
{
for(inti=0;
i<
sum;
i++)
{if(shumu[i].get_isbn()==a.get_isbn())
删除书目成功,以下是删除的书信息"
shumu[i].display();
for(intj=i;
j<
sum-1;
j++)
{shumu[j]=shumu[j+1];
flag=1;
sum--;
break;
if(!
flag)
{cout<
thebookdoes'
texist!
}
}
voidsearch_by_name(stringnames)//按书名查找
for(inti=0;
{if(shumu[i].get_name()==names)
{shumu[i].display();
flag=1;
if(flag==0)
voidsearch_by_isbn(stringnames)//按书号查找
{if(shumu[i].get_isbn()==names)
voidsearch_by_writer(stringnames)//按作者查找
{intflag=0;
{if(shumu[i].get_writer()==names)
voiddisplay_all()//显示全部信息
for(inti=0;
{shumu[i].display();
voidread()
{FILE*fp;
if((fp=fopen("
C:
\\Users\\fei\\Desktop\\图书馆.txt"
rb+"
))==NULL)//注意路径;
rb+读写打开一个二进制文件,只允许读写数据。
{cout<
文件打开失败\n"
system("
PAUSE"
exit(0);
fread(&
sum,2,1,fp);
//从一个文件中读数据&
sum:
用于接收数据的地址(指针);
4:
单个元素的大小,单位是字节;
1:
.元素个数,每次读取个元素;
fp:
提供数据的文件指针
fread(&
shumu[i],sizeof(shumu[i]),1,fp);
fclose(fp);
voidwrite()
FILE*fp2;
if((fp2=fopen("
wb+"
wb+只写打开或新建一个二进制文件;
只允许写数据。
system("
//exit(0)表示正常退出
fwrite(&
sum,2,1,fp2);
shumu[i],sizeof(shumu[i]),1,fp2);
}//sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
fputc('
EOF'
fp2);
//将字符ch写到文件指针fp所指向的文件的当前写指针的位置;
EOF是EndOfFile的缩写,表示“文件结束”。
fclose(fp2);
//主函数
intmain()
{databaseBook;
charfunction='
Book.read();
//界面
while(function!
='
)
cin>
>
function;
//图书书号、书名、作者、出版社、出版时间、价格信息的录入
换码符'
\t'
表示水平制表位(horizeontaltab),它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。
换句话说,让所有的数据都紧跟在制表符后面输出。
//换码符'
表示水平制表位,它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。
if(function=='
{stringa,b,c,d,e,f;
//定义字符串
请输入书的isbn编号"
cin>
a;
请输入书名"
b;
请输入书作者名"
c;
请输入书的出版社"
d;
请输入书的出版时间"
e;
请输入书的价格"
f;
booknewbook(a,b,c,d,e,f);
Book.add(newbook);
newbook.display();
//显示所有图书信息
elseif(function=='
Book.display_all();
//按条件查询图书,输入按书号查询,输入按书名查询,输入按作者查询
charj;
stringsearch;
j;
if(j=='
{cout<
请输入ISBN号"
//按书号查询
search;
Book.search_by_isbn(search);
//按书号查询图书信息函数的调用
system("
elseif(j=='
//按书名查询
Book.search_by_name(search);
//按书名查询图书信息函数的调用
)//按作者查询
请输入作者名"
Book.search_by_writer(search);
//按作者名查询图书信息函数的调用
输入错误,请重新操作!
//错误提示
//按书名删除图书
{stringa;
请输入要删除的书号"
bookdel(a,"
Book.delete_by_isbn(del);
//按书名删除函数的调用
system("
//退出系统并保存修改
{}
//未按照主界面提示信息操作,提示错误
输入错误,请重新选择!
//退出系统
Book.write();
8;
55;
*"