
题 目: 图书信息管理系统
专业班级: 通信3班
学生组长:
小组成员:
指导教师:
分 数:
2014 年 4 月 15 日
课 程 设 计 任 务 书
| 设计题目 | 图书馆信息管理系统 | ||||
| 学生姓名 | 所在院系 | 电子信息工程系 | 专业、年级、班 | 11级通信3班 | |
| 设计要求:图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等,设计图书管理系统,使之能提供以下功能: 1、系统以菜单方式工作; 2、图书信息浏览功能——输出; 3、查询和排序功能:(至少一种方式) (1)按书名查询; (2)按作者名查询; (3)图书信息的删除与修改(管理员) 4、图书信息录入功能(图书信息用文件保存)——输入;(管理员) | |||||
| 参考文献阅读: [1] 谭浩强. 《C++面向对象程序设计》.清华大学出版社,2006.1 [2] 张春林,马成勇,刘钧.《数据库系统设计与开发》.清华大学出版社,2005 [3] 梁普选. 《Visual C++程序设计与实践》.清华大学出版社.2006 [4] 张瑞丰. 《C++语言程序设计》.清华大学出版社,2006 | |||||
| 工作计划: 由组长将程序细致的分为3个软件模块,分别由3位组员各自完成自己的软件模块设计。最后再将3部分合并。之后再对总的程序进行运行调试及改进。 | |||||
| 任务下达日期: 2014 年 3 月 22 日 任务完成日期: 2013 年 4 月 20 日 指导教师(签名): 学生(签名): | |||||
第一章、总体设计 4
1.1设计目的 4
1.2设计要求 4
1.3设计方案选取与论证 4
1.4模块划分与任务安排 5
第二章、软件设计 5
2.1 Book类模块的软件设计 5
2.2 BDatabase类模块的软件设计 7
2.3主界面程序模块设计 10
第三章、系统实现及调试过程 14
第四章、结论 15
致谢 16
参考文献 16
一、总体设计
1.1设计目的
图书馆提供的物质资源越来越丰富,如何高效准确地对馆藏资料进行整理、借还、盘点成为困扰图书馆管理人员的问题。以前,都是用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。
基于这些问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
利用图书管理系统对图录进行统一管理,包括新增图录,更改图录,删除图录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。同时,图书馆是目前生活中除了网络外的另一个获取知识的重要场所,利用图书管理系统可以更加高效查询、寻找到自己所需求的书籍。设计一个图书信息管理系统是学习完《面向对象程序设计》课程后进行的一次全面综合联系。有助于加深对面向对象程序设计中基础理论和基础知识的理解,培养了实践能力,促进理论与实践的结合。
1.2设计要求
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等,设计图书管理系统,使之能提供以下功能:
1、系统以菜单方式工作;
2、图书信息浏览功能——输出;
3、查询和排序功能:(至少一种方式)
(1)按书名查询;
(2)按作者名查询;
(3)图书信息的删除与修改(管理员);
4、图书信息录入功能(图书信息用文件保存)——输入;(管理员)
1.3设计方案选取与论证
本次课程设计我们组的题目为:图书信息管理系统的开发,总的设计目标是实现图书管理的系统化、规范化和自动化,实现对图书资料的集中统一的管理。
是利用数据库软件编制一个管理软件,用以实现图书、读者以及日常工作等多项管理。同时对整个系统的分析、设计过程给出一个完整论证。图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书信息的管理,其实是对图书信息的管理。
本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。本系统的设计主要从以下几方面做起:系统业务流程分析、系统的功能设计、系统的数据库结构设计等。作这些工作需对数据库知识有足够认识,并深入的了解C++的运用知识。
新系统的使用能否可以很好的解决这些问题要看系统的可行性,可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。系统的可行性分析有以下几个方面:
(1)技术可行性:处理速度快、准确通过权限的设置,数据的安全性好、方便查询、借阅管理等。
(2)经济可行性:系统建设不需要很大的投入、可缩减人力投入。
(3)运行上可行性:本系统作为一个小型的图书馆信息管理系统,所耗费的
资源非常的小。
(4)从各种社会因素可行性分析:可降低工作人员工作强度,提高效率,会
得到学校工作人员的一致同意的。
综上所述通过可行性分析认为新系统的开发方案切实可行,可进行开发。
本系统主要实现对图书馆信息的管理,主要功能为管理有关书籍的信息。本系统结构主要为书籍信息管理模块。书籍信息管理可以浏览书籍的信息,可以对书籍信息进行维护。可见,本系统并不复杂,主要解决的问题是利用关键字对数据库进行查询。
1.4模块划分与任务安排
由于本系统具有很强的模块性,为了使每一个组员都能过在本次课设上学习到东西,同时也是为了能过合理的分配各个成员的课程设计任务,所以我们组对本系统进行了模块拆分,并由本组的每一个组员负责拆分中凡人一个模块的设计及软件的编写。在每一个模块程序编写完成后,在进行总体的合成、调试。我们设计的系统分为:Book类的设计、BDatabase类的设计。以下是我们组的分配任务:
由组员 设计模块:Book类的设计。
由组员 设计模块:BDatabase类的设计。
由组员 进行主界面程序模块设计。
二、软件设计
2.1 Book类模块的软件设计(负责同学: )
本模块主要的作用是录入图书的信息,在程序中先定义一个book类,类中主要分为获取图书类型、获取书名、获取图书编码、获取删除标志、设置书名、设置图书类型、删除图书、增加图书和输出图书9个小的模块其流程图如下:
根据设计的流程模块设计程序代码,程序设计了六个私有成员,即删除标记:lab;图书编号:num;增加标记:add;编号:number[StrNum];书名:bookname[StrNum];图书类型:bookkind[Type];同时还设计了同样多的共有成员,使程序能够在运行的时候提取书名、删除书名、添加编号等等。这样的book库实现了图书信息的录入及提取。以下是本系统book类的基本设计程序:
class Book
{
private:
int lab; //删除标记
int num; //图书编号
int add; //增加标记
char number[StrNum]; //编号
char bookname[StrNum]; //书名
char bookkind[Type]; //图书类型
public:
Book(){}
char getkind() //获取图书类型
{
return bookkind[Type];
}
char getname() //获取书名
{
return bookname[StrNum];
}
int getnum() //获取图书编号
{
return num;
}
int getlab() //获取删除标记
{
return lab;
}
void setname(char na[]) //设置书名
{
strcpy(bookname,na);
}
void setkind(char kin[]) //设置类型
{
strcpy(bookkind,kin);
}
void delbook() //删除图书
{
lab=1;
}
void addbook(int n,char *na,char *kin) //增加图书
{
lab=0;
num=n;
strcpy(bookname,na);
strcpy(bookkind,kin);
}
void disp() //输出图书
{
cout.flags (ios::left); //设置对齐的标志位为左
cout< }; 2.2 BDatabase类模块的软件设计(负责同学: ) 本模块的设计主要是满足图书信息的保存及文本的写入,与book类相互依存。本模块是实现本系统的重要一部分。设计的框图如下: 由于存入的图书信息并不是保存在程序中,而是使它存在book.txt中,所以在本模块设计中,使用了构造函数BDatabase将book.txt读到book[]中和析构函数~BDatabase()将book[]写到book.txt文件中,实现文本的写入。所以,本部分的作用至关重要。其主要的的程序如下: class BDatabase { private: int top; Book book[Maxb]; //图录 public: BDatabase() //构造函数,将book.txt读到book[]中 { Book b; top=-1; fstream file("book.txtios::in); while (1) { file.read((char *)&b,sizeof(b)); if (!file) break; top++; book[top]=b; } file.close(); } void clear() //全删 { top=-1; } int addbook(int n,char *na,char *kin) //增加图书 { Book*p=query(n); if(NULL==p) { top++; book[top].addbook(n,na,kin); return 1; } return 0; } Book *query(int bookid) //查找图书 { for (int i=0;i<=top;i++) if (book[i].getnum()==bookid &&book[i].getlab()==0) { return &book[i]; } return NULL; } void disp() //图书库 { for (int i=0;i<=top;i++) if (book[i].getlab()==0) book[i].disp(); } ~BDatabase() //析构函数,将book[]写到book.txt文件中,实现文本的写入 { fstream file("book.txtios::out); for (int i=0;i<=top;i++) if (book[i].getlab()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; 2.3主界面程序模块设计(负责同学: ) 一个完整的图书信息管理系统需要一个界面来让我们明白无误的功能及使用的流程。主界面模块的设计是更具设计的程序集我们在实际使用中和课设的要求,输出一个界面,是我们能过通过界面的引导,实现对本系统的使用。主界面板设计上,设置了:添加图书、删除图书、查找图书等等7个提示目录。其设计框图如下: 一个合理的主菜单界面,才能够完成我们所需求的各个功能。主要的程序如下: void main() { BDatabase BookDB; char choice; char bname[40]; char bkind[40]; char newType[20]; int bookid; Book*b; while(choice!='0') { cout<<"\t*********************************************************\n"; cout<<" \n\n"; cout<<"\t\t\t图 书 管 理 系 统\n\n"; cout<<"\t\t\t1 新增图录\n"; cout<<"\t\t\t2 更改图录\n"; cout<<"\t\t\t3 删除图录\n"; cout<<"\t\t\t4 查找图录\n"; cout<<"\t\t\t5 显示图录\n"; cout<<"\t\t\t6 清空全部记录(慎用)\n"; cout<<"\t\t\t0 退出系统\n"; cout<<" \n\n"; cout<<"\t********************************************************\n"; cout<<"请选择(1,2,3,4,5,6,0):"; cin>>choice; switch (choice) { case '1': cout<<"输入图书编号:"< cout<<"输入图书类型:"< cout<<"输入图书书名:"< BookDB.addbook(bookid,bname,newType); break; case '2': cout<<"输入图书编号:"< b=BookDB.query(bookid); if(b==NULL) { cout<<"该图书不存在"< } cout<<"输入新的书名:"< b->setname(bname); cout<<"输入新的类型:"< b->setkind(bkind); break; case '3': cout<<"读入图书编号:"< b=BookDB.query(bookid); if(b==NULL) { cout<<"该图书不存在"< } char tg1; cout<<"确定要删除此记录吗?(Y/N)"< if(tg1!='n'&&tg1!='N') { b->delbook(); cout<<"已成功删除该录!"< } case '4': cout<<"读入图书编号:"< b=BookDB.query(bookid); if (b==NULL) { cout<<"该图书不存在"< } cout<<"图书编号 图书名称 图书类型 \n"; b->disp(); break; case '5': cout<<"图书编号 图书名称 图书类型 \n"; b->disp(); break; case '6': char tg2; cout<<"确定要清空所有记录吗?(Y/N)"< if(tg2!='n'&&tg2!='N') { BookDB.clear(); cout<<"已成功清空记录!"< } case '0': break; default:cout<<"输入错误,请从新输入(数字为0~6):"; 三、系统实现及调试过程 运行程序,系统输出主界面,界面如下: 按照输出界面的提示项目,调试各个功能: 测试新增图录功能 : 测试更改图录功能: 测试删除图录功能: 测试查找图录功能: 测试显示图录功能: 测试清空全部图录功能: 调试中,我们可以看到本系统以菜单方式工作,具备了图书信息浏览功能,同时还具有查询和排序功能,并能过按按照书名和编号查询录入的图书信息,在图书信息的删除与修改方面也能够实现设计的要求。以下是对本系统完成功能测试的解说。 测试单元: 图书信息单元 测试类型:功能测试 测试单元: 查询读者信息单元 测试类型:功能测试 根据上面的测试,该系统各功能模块均能正常使用。同时,这些功能也是本次课程设计的任务要求,所以本次课程设计完成。 四、结论 总结: 本系统实现了图书管理系统的典型功能,包括查询所有记录的信息,添加查找等功能,基本符合设计要求,利用类的封装实现了一定的安全性,函数的实现与调用主要在主函数中实现。但是,由于团队能力有限,在图录查询上存在一定的缺陷,有待于完善。希望今后能过完善缺陷,实现系统的完美运作。 心得: 经过一个多月的设计和开发,图书信息管理系统基本开发完毕。其功能基本符合要求。对于数据的一致性的问题也通过程序进行了有效的解决。但是该系统还有许多不尽如人意的地方,在今后有待进一步改善。通过这次课程设计真切地体会到课设的目的并不止于自己单纯任务的完成,而在于学习新的知识并掌握具体的方法,如何具体使用和具体应用你所学所用的语言。从而获得一种本领:就是融会贯通各种语言。回首整个开发设计过程,我学到了很多书本上学不到的东西。比如以前开发软件的时候,一般做的就是编码工作,实现比较简单的功能。但是这次课设,我们要负责图书管理系统的整个开发过程,包括系统可行性分析、系统需求分析、系统概要设计、系统详细设计等方面的工作。在每个设计阶段我都能学到一些新知识,对我的动手能力提高很大。在整个课设过程中,基本上完成了图书管理系统各个模块的功能,达到了课设的要求。页面设计还有进一步改善的地方,我们会在今后的学习工作中着重加强这方面的锻炼。 同时,通过此次自主设计加深了对C++的了解,在程序设计上提高了自己的动手能力,在实践中增强了自己的编程水平。而且通过这次可能设计,我们培养了自己对C++变成的兴趣,编程能力也有所提高,但仍存在很多不足,不能独自写出功能很齐全的代码,写代码要参考很多资料,所以今后应培养自己写代码的能力。 致谢 在论文完成之际,首先向我的导师表示深深的谢意,感谢导师在学习上对我们的关怀和帮助。老师在课题阶段给予的指导以及启发性的意见,使我们能够顺利地完成课设任务。老师深厚的学术造诣、严谨的治学态度和忘我的工作作风永远是我学习的榜样和追求的目标。 同时,还要感谢和我同在一个课题组的同学,没有他们,我们不可能顺利完成设计和论文,感谢所有帮助过我的人。 参考文献 [1] 谭浩强. 《C++面向对象程序设计》.清华大学出版社,2006.1 [2] 张春林,马成勇,刘钧.《数据库系统设计与开发》.清华大学出版社,2005 [3] 梁普选. 《Visual C++程序设计与实践》.清华大学出版社.2006 [4] 张瑞丰. 《C++语言程序设计》.清华大学出版社,2006 面向对象程序设计 课程设计成绩评定表 指导教师 年 月 日
表3.1 图书信息管理测试用例表编号 测试说明 期望结果 实际结果 成功/失败 1 测试新书信息添加是否成功 新书信息成功写入数据库 数据库中可以找到新添加记录。 成功 2 测试图书删除 将输入新书信息删除 数据库中新书纪录删除 成功 3 测试图书信息修改 将重新输入数据录入到数据库中 修改图书信息信息成功 成功
表3.2查询管理测试用例表编号 测试说明 期望结果 实际结果 成功/失败 1 测试按读者的各项信息是否可以进行查询 根据不同的查询信息对读者进行查询 显示查询项 成功 2 测试多项的查询条件是否能进行查询 根据不同的查询条件对读者信息进行查询 显示查询结果 成功 序号 评价指标 满分值 得分 1 任务书及设计要求全面、准确 10 2 方案的选择及其论证充分、合理 10 3 基本原理框图的设计思路正确、有新意 10 4 各功能模块的程序设计 15 5 系统的安装调试,基本功能的实现 25 6 作品的扩展功能与创新 10 7 报告结构合理、规范,条理清晰 10 8 课程设计过程中的学习态度认真、出勤率高 10 总 评 教师评语:
