图书馆管理系统课程设计报告
- 格式:doc
- 大小:334.50 KB
- 文档页数:34
计算机学院信息管理与信息系统专业《程序设计综合课程设计》报告(2010/2011学年第一学期)学生姓名:学生班级:学生学号:指导教师:2011年1月7日目录第一章.课程设计目的和要求 (1)1.1 程序设计的目的 (1)1.2 程序设计的要求 (1)第二章.课程设计任务内容 (2)2.1背景 (2)2.2 功能需求 (2)第三章.详细设计说明 (3)3.1函数的模块 (3)3.2主函数流程图 (4)3.3 子函数流程图 (5)3.3.1 借书 (5)3.3.2 还书 (6)3.3.3 图书的维护 (7)3.3.4 读者的维护 (8)第四章. 软件使用说明及调试 (9)4.1 使用说明 (9)4.2 调试 (9)第五章.课程设计心得与体会 (15)附录一.参考文献 (16)附录二.程序清单 (17)图书管理系统第一章课程设计目的和要求本课程设计是计算机科学与技术专业重要的实践性环节之一,是学生在学完《面向对象程序设计——C++语言描述》后进行的一次全面的综合性设计实验。
此次课程设计是编写图书管理系统,其具体目的与要求如下所示:1.1 程序设计的目的(1).巩固和加深对C++语言课程基本知识的理解和掌握。
(2).掌握C++语言编程和程序调试的基本技能。
(3).提高C++语言编程技巧,培养分析问题和解决问题的能力。
(4).利用C++语言进行基本的软件设计。
1.2 程序设计的要求(1).分析课程设计题目的要求。
(2).对系统功能模块进行分析。
(3).编写程序代码,并在程序源代码后写明详细的注释,以便他人看懂。
最后上机调试程序使其能够正确的运行。
(4).完成整个程序后,根据要求写出相应的课程设计报告。
(5).设计完成后的程序要便于操作和使用。
第二章课程设计任务内容2.1 背景随着网络技术的高速发展,计算机技术的普及,引进计算机技术对图书进行方便的管理势在必行,这样管理员就可以对图书众多的信息进行动态的管理,提高效率,节约人力资源,降低成本力求使其功能简洁明了,而且齐全、易于操作。
虽然目前很多大型的图书馆已经有了一套比较完善的管理系统,但是在一些中小型的图书馆中大部分工作仍需要手工完成,工作起来效率比较低,管理员不能及时了解图书馆里图书的借约情况,读者需要的图书难以在短时间内找到,不便于动态及时的调整图书结构。
为了更好的适应当前读者的借阅需求,解决手工管理中存在的许多弊端,越来越多的中小型图书馆正在逐步向计算机信息化管理转变。
2.2 功能需求此程序实现了图书管理员对借书人是否存在及借阅情况和图书是否在架等进行动态管理。
具体功能如下:(1)借书(2)还书(3)图书维护包括:新增、修改、查找、删除、显示(4)读者维护包括:新增、修改、查找、删除、显示(5)离开第三章详细设计说明3.1 函数的模块1、整个系统均用C++语言实现;2、利用类来实现图书管理的数据结构设计;3、系统具有借书、还书、图书维护、读者维护、离开等基本功能;4、系统的各个功能模块都用函数的形式来实现;5、模块图如下:图3-1程序总模块图图3-2 函数总流程图3.3.1 借书图3-3 借书流程图3.3.2 还书图3-4 还书流程图图3-5 图书维护流程图图3-6 读者维护流程图第四章软件使用说明及调试4.1 使用说明该程序可以实现对借书、还书、图书维护、读者维护等功能。
安装VisualC++6.0中文版后,在工具栏“文件”中单击“新建”选项,单击“文件”菜单,选择“C++ Source file”输入文件名“图书管理系统”。
开始输入程序,程序输入完成,单击“组建”工具栏,选择“编译”,待程序无误后,开始执行程序。
界面显示后,按要求首先按任意键开始,进入界面后用1,2,3,4,0选择相应的功能。
最后结束。
4.2 调试1.显示主界面4.新增读者5.借书6.图书的查找7.还书8.退出程序第五章课程设计心得与体会通过这次课程设计,使我对C++语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,通过学习也有所改进,还有对C++语言中经常出现的错误也不了解,所以在以后在学习过程中,我会更加注视实践操作。
在课程设计过程中,收获知识,提高能力的同时,我也懂得怎么样去制定、实现计划,课程设计是培养学生综合运用所学知识发现提出分析和解决实际问题锻炼实践能力的重要环节是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,在设计中我们遇到了很多编程问题,最后在各位老师的辛勤指导下,我慢慢的进入状态,我做的是一个图书管理系统的设计,内容包括很多。
当然也有大问题,关于文件的操作,是我们最大的问题。
要有模块化思维能力,化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。
附录1 参考文献[1]郑莉,董渊,张瑞丰.C++语言程序设计(第3版)[M]. 清华大学出版社,2004.[2]郑莉,董渊.C++语言程序设计案例教程[M]. 清华大学出版社,2000.[3]、邹金安主编《面向对象程序设计与Visual C++6.0教程》出版社:厦门大学出版社[4]、高克宁,于端云编著,《程序设计基础(C++语言)实验指导与测试(高等学校计算机基础教育教材精选)》,出版社:清华大学出版社[5]、严蔚敏,吴伟民编著,《数据结构(C++语言版)》出版社:清华大学出版社附录2 程序清单#include <iostream>#include <iomanip>#include <string>#include <fstream>//输入/输出文件流类using namespace std;const int Maxr=100;//最多的读者const int Maxb=100;//最多的图书const int Maxbor=5;//每位读者最多借五本书//读者类,实现对读者的信息的描述class Reader{private:int tag; //删除标记 1:已删 0:未删int no; //读者编号char name[10]; //读者姓名int borbook[Maxbor];//所借图书public:Reader() {}char *getname() {return name;} //获取姓名int gettag() {return tag;} //获取删除标记int getno() {return no;} //获取读者编号void setname(char na[]) //设置姓名{strcpy(name,na);}void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删void addreader(int n,char *na)//增加读者{tag=0;no=n;strcpy(name,na);for(int i=0;i<Maxbor;i++)borbook[i]=0;}void borrowbook(int bookid)//借书操作{for(int i=0;i<Maxbor;i++){if (borbook[i]==0){borbook[i]=bookid;return;}}}int retbook(int bookid)//还书操作{for(int i=0;i<Maxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return 1;}}return 0;}void disp()//读出读者信息{cout << setw(5) << no <<setw(10) << name<<"借书编号:["; for(int i=0;i<Maxbor;i++)if(borbook[i]!=0)cout << borbook[i] << "|";cout << "]"<<endl;}};//读者类库,实现建立读者的个人资料class RDatabase{private:int top; //读者记录指针Reader read[Maxr];//读者记录public:RDatabase() //构造函数,将reader.txt读到read[]中{Reader s;top=-1;fstream file("reader.txt",ios::in);//打开一个输入文件while (1){file.read((char *)&s,sizeof(s));if (!file)break;top++;read[top]=s;}file.close(); //关闭 reader.txt}void clear()//删除所有读者信息{top=-1;}int addreader(int n,char *na)//添加读者时先查找是否存在{Reader *p=query(n);if (p==NULL){top++;read[top].addreader(n,na);return 1;}return 0;}Reader *query(int readerid)//按编号查找{for (int i=0;i<=top;i++)if (read[i].getno()==readerid &&read[i].gettag()==0){return &read[i];}return NULL;}void disp() //输出所有读者信息{for (int i=0;i<=top;i++)read[i].disp();}void readerdata();//读者库维护~RDatabase() //析构函数,将read[]写到reader.txt文件中{fstream file("reader.txt",ios::out);for (int i=0;i<=top;i++)if (read[i].gettag()==0)file.write((char *)&read[i],sizeof(read[i]));file.close();}};void RDatabase::readerdata(){char choice;char rname[20];int readerid;Reader *r;while (choice!='0'){cout <<"\n\n\t\t\t读者维护\n\n\n\t\t 1 新增\n\n\t\t 2 更改\n\n\t\t 3 删除\n\n\t\t 4 查找\n\n\t\t 5 显示\n\n\t\t 6 全删\n\n\t\t 0 退出"<<endl;cin >> choice;switch (choice){case '1':cout << "输入读者编号:";cin >> readerid;cout << "输入读者姓名:";cin >> rname;addreader (readerid,rname);break;case '2':cout << "输入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout << " 该读者不存在 "<<endl;break;}cout << "输入新的姓名:";cin >> rname;r->setname(rname);break;case '3':cout << " 输入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout <<" 该读者不存在" << endl;break;}r->delbook();break;case '4':cout << "读入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout <<"该读者不存在"<< endl;break;}r->disp();break;case '5':disp();break;case '6':clear();break;default:cout<<"输入错误,请从新输入:";break; }}}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等class Book{private:int tag;//删除标记 1:已删 0:未删int no;//图书编号char name[20];//书名int onshelf;//是否再架 1:再架 2:已借public:Book(){}char *getname() { return name; }//获取姓名int getno(){ return no; }//获取图书编号int gettag(){ return tag; }//获取删除标记void setname(char na[])//设置书名{strcpy(name,na);}void delbook(){ tag=1;}//删除图书void addbook(int n,char *na)//增加图书{tag=0;no=n;strcpy(name,na);onshelf=1;}int borrowbook()//借书操作{if (onshelf==1){onshelf=0;return 1;}return 0;}void retbook()//还书操作{onshelf=1;}void disp()//输出图书{cout << setw(6) << no << setw(18) << name << setw(10) <<(onshelf==1? "在架":"已借") <<endl;}};//图书库类,实现对图书的维护,查找,删除等class BDatabase{private:int top; //图书记录指针Book book[Maxb]; //图书记录public:BDatabase()//构造函数,将book.txt读到book[]中{Book b;top=-1;fstream file("book.txt",ios::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)//增加图书{Book *p=query(n);if (NULL==p){top++;book[top].addbook(n,na);return 1;}return 0;}Book *query(int bookid)//查找图书{for (int i=0;i<=top;i++)if (book[i].getno()==bookid &&book[i].gettag()==0) {return &book[i];}return NULL;}void bookdata();//图书库维护void disp(){for (int i=0;i<=top;i++)if (book[i].gettag()==0)book[i].disp();}~BDatabase()//析构函数,将book[]写到book.txt文件中{fstream file("book.txt",ios::out);for (int i=0;i<=top;i++)if (book[i].gettag()==0)file.write((char *)&book[i],sizeof(book[i])); file.close();}};void BDatabase::bookdata(){char choice;char bname[40];int bookid;Book *b;while (choice!='0'){cout <<"\n\n\n\t\t\t图书维护 "<<endl<<endl;cout<<"\t\t1 新增\n \t\t2 更改\n\t\t3 删除\n\t\t4 查找\n\t\t5 显示\n\t\t6 全删\n\t\t0 退出"<<endl;cin >> choice;switch (choice){case '1':cout << "输入图书编号:"<<endl;cin >> bookid;cout << "输入图书书名:"<<endl;cin >> bname;addbook(bookid,bname);break;case '2':cout << "输入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout << " 该图书不存在 "<<endl;break;}cout << "输入新的书名:"<<endl;cin >> bname;b->setname(bname);break;case '3':cout <<" 读入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该图书不存在" << endl; break;}b->delbook();break;case '4':cout << " 读入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该图书不存在"<< endl;break;}b->disp();break;case '5':disp();break;case '6':clear();break;default:cout<<"输入错误,请从新输入:"; }}}//main() 函数的实现,程序的主界面的引导void main(){char choice;int bookid,readerid;RDatabase ReaderDB;Reader *r;BDatabase BookDB;Book *b;while(choice!='0'){cout <<endl<<endl<<"\t\t\t 图书管理系统\n\n\n";cout <<"\t\t\t1 借书\n\n\t\t\t2 还书 \n\n\t\t\t3 图书维护\n\n\t\t\t4 读者维护\n\n\t\t\t0 离开"<<endl;cin >> choice;switch (choice){case '1':cout <<" 借书读者编号:";cin >>readerid;cout <<" 图书编号: ";cin >>bookid;r=ReaderDB.query(readerid);//按编号查找if (NULL==r){cout <<" 不存在该读者,不能借书"<< endl; break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在该图书,不能借书"<< endl; break;}if (b->borrowbook()==0){cout << " 该图书已借出,不能借书"<< endl; break;}r->borrowbook(b->getno());break;case '2':cout<<"还书\n 读者编号:";cin >>readerid;cout << " 图书编号:";cin >>bookid;r=ReaderDB.query(readerid);if (r==NULL){cout <<" 不存在该读者,不能还书" << endl; break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在该图书,不能还书" <<endl;break;}b->retbook();r->retbook(b->getno());break;case '3':BookDB.bookdata();break;case '4':ReaderDB.readerdata();break;default:cout<<"输入错误,请从新输入:";}}}。