c++课程实践图书管理系统实践报告(共42页).doc
精选优质文档-倾情为你奉上机电工程学院 中 南 大 学计算机程序设计基础C+ 课 程 设 计题 目 图书信息管理系统 成员姓名 学号 班级: 成员姓名 学号 班级:指导教师 学 院 日 期 年 月 日 目录1. 课程目的和要求.32. 图书管理系统的分析和功能描述.33. 流程图.54. 成员组成与分工与进度安排.65. 使用说明.76. 程序代码.137. 设计心得.40C+课程实践设计报告1. 课程目的和要求使我们能掌握系统的各种功能模块的基本工作原理;掌握C+的基本编程原理和基本的编程方法;学会如何去调试系统,并提高我们团队之间的软件文档写作能力和团队合作精神;提高我们的分析,解决问题的能力。通过本课程设计的实验,全面总结C+课程学习中的数据类型,程序结构,数组,函数,指针,容器等的基本概念,并掌握其使用方法。掌握面向对象程序设计中有关类,对象,重载,多态性,输入输出流体系,文件操作的基本概念。了解系统开发的需求分析,类层次设计,模块分解,编码测试,模块组装与整体调试的全过程。并养成良好的编程习惯。并使系统具有(1)所有记录保存在一个数据文件中;(2)具备记录添加功能;(3)具备记录删除功能;(4)具备记录修改功能;(5)具备记录查询功能;(6)计算统计功能;(7)良好操作界面菜单;等功能。2. 图书管理系统的分析和功能描述该程序总共有五个功能,分别是:添加图书,查找图书,删除图书,添加用户和用户管理。其中,用户管理里面又有四个功能,分别是 借书,查看已借书籍,还书和删除用户四个功能。五个功能由两个类封装实现。people类中有两个构造函数,用来初始化新建的用户对象;有一个析构函数;还有inborrow(借出函数),inback(归还函数),inWatch(查看函数),getName(返回用户名字函数);还有两个的友元函数newuser(新建用户函数),user(用户界面函数)。book类中,也有两个构造函数用来初始化用户对象;一个的析构函数用来在删除对象的同时,更改在文本中的写入信息;然后有clook(查看书籍函数),inwhere(书籍被借出时的更改数据的函数),onWhere(书籍被归还时的更改数据的函数),findbook(查找书籍的函数),clook(书籍信息写出函数)这个函数被重载了,因为书籍输出时需要输出到屏幕,也需要输出到txt文件中,Newbook(用来新建书籍信息的函数)。 两个类的对象储存与查找都是通过map容器来进行的。 3.流程图:main函数用户管理界面添加用户添加书籍查找书籍删除书籍输入书名输入名字手动还是文本输入已注册显示信息删除用户查看已借书还书借书确定删除输入书籍信息是Y否N继续操作或退出系统退出用户界面确定删除显示书籍继续借书输入书名继续输入?专心-专注-专业4.成员组成与分工:我们小组共有两个人,xx和xx,xx负责统筹这次的编写计划,时间安排和一半的编写任务,责收集资料xx负和查找各种有用的信息并编写另一般的代码信息。在后期的调试中,由xx负责编写main函数,然后两个人共同对代码进行调试和修改。两个人同时的修改,然后把修改的优点组合在一起,是程序更加的完善,更加的可行。在程序中共有两个新建的类,分别是people和book,两个类由小组两人分别编写。xx负责的是book的类,xx负责的是people的类,两个类分别封装人员和图书两个方面。进度安排:在18周的星期一到星期三,我们在计划着该如何去编写这个小系统,并通过参考同类型的编写代码,做好了编写的计划,并查找资料去了解了需要用到的一些语法和模板。在这两天中,我们不断尝试的编写书本当中的习题,以记住各种语法的使用方法。在18周的星期四到星期天,我们分别编写了两个类出来,然后组合在一起,并编写了main()函数来尝试调用两个类的各种功能。但因为不太懂,出现了很多的错误。在第19周的周一到周三,我们都在不断的调试和改正错误。很多的错误都不懂是怎么出错的,在不断的百度后,才慢慢的修正了很多。5.使用说明:开始的图书系统运行界面。手动输入时的界面。如果通过文本输入时, 在程序中,添加书籍时会通过生成一个result.txt 文件在D盘的根目录下用来储存书籍的信息;而且添加书籍时,可以通过D盘根目录下自己新建的一个 “图书信息.txt”文件来写入图书信息。查找书的信息,根据书名显示书籍的内容。输入书本的名字然后就能删除该书籍。输入名字后,就可以添加新的用用户。用户的信息被储存在map容器中,当输入用户的编号时,就可以进入到用户的使用界面。这就是用户的使用界面。重新返回用户界面书籍被归还。若图书被借出,就不能再被借。6.程序代码:#include<iostream>#include<string>#include<map>#include<fstream>#include<sstream>using namespace std;class peopleprotected:string _name;int _id;bool _creditline;int Btime;string Nbook5; /没个人限借5本书int Bnumber;public:people(string name, int id);people();void inBorrow(); /借书的动作void inBack(); /还书的动作void inWatch(); /查看已借书籍动作string getName(); /返回用户的名字friend void newuser(); friend void user();people();map<int, people*>peoples;class Bookprotected:string _name; /书名int _ID; /书编号string _writter; /作者string _press; /出版社string _briefintroduction; /简介bool _cwhere; /是否被借出public:Book(string name, int id, string writter, string press, string briefintroduction, bool cwhere);Book();Book();void newBook(); /新建书籍void deleteBook(); /删除书籍void cLook(); /书籍的信息列出bool inWhere(); /书本被借出bool onWhere(); /书本被归还void findbook(); / 查找书籍void cLook(ofstream& cout);bool jiechu();map<string, Book*>books; /建立一个书本的map容器,用来储存书本的信息。iostream& operator <<(iostream&cout, Book &_book); /重载<<来输出book对象信息。bool Book:jiechu()return _cwhere;string people:getName()return this->_name;people:people(string name, int id)_name = name;_id = id;_creditline = true;Btime = 60;Bnumber = 0;people:people()void people:inBorrow() /用户借书int bbq = 0;this->inWatch();docout << "请输入要借的书的名字:"string bname;cin >> bname;map<string, Book*>:iterator it;it = books.find(bname);if (it = books.end()cout << "没有此书。" << endl;if (it->second)->jiechu()cout << "这本书已经被借出。" << endl;elseif (this->Bnumber < 5)int t=0;t = this->Bnumber;(this->Bnumber)+;(this->Nbookt) = bname;booksbname->onWhere();cout << "你已借书成功。"elsecout << "你借的书数目已达到上限,不能再借书,请先归还书籍。"cout << "是否重新查找书籍? Y of N " << endl;char bq;cin >> bq;if (bq = 'Y')bbq = 1;elsebbq = 0; while (bbq);void people:inWatch() /查看用户已借书籍cout << "用户名为:" << this->_name << "t用户的编号是:" << this->_id << "n用户已借的书有:" << endl;int i = 0;if (this->Bnumber = 0)cout << "尊敬的用户,你还没有任何借书的记录。" << endl;elsefor (i; i < (this->Bnumber); +i)cout << i + 1 <<'t'<< this->Nbooki << endl;void people:inBack() /还书if (this->Bnumber)=0)cout << "你还没有借书。" << endl;elsethis->inWatch();cout << "请问你要还哪一本书呢?请输入是你借的书中的第几本:" << endl;int ss;cin >> ss;if (ss - 1 > (this->Bnumber)cout << "你输入的数值有错误。" << endl;elsestring bbq = Nbookss - 1;booksbbq->inWhere();this->Nbookss - 1 = '0'(this->Bnumber)-;cout << "书已归还,谢谢。" << endl;system("pause");void newuser() /建立新的用户people *_People;string name;cout << "请输入名字:"cin >> name;int id;id = peoples.size() + 1;_People = new people(name, id);peoplesid = _People;cout << "你登记的用户已成功注册,你的编号是:" << id << endl;void user() /进入用户管理界面people*_people;int t = 0;cout << "*欢迎来到用户管理见面*" << endl;cout << "请输入你的身份编号:" << endl;cin >> t;map<int, people*>:iterator it;it = peoples.find(t);if (it = peoples.end()cout << "对不起,你输入的号码错误,没有该用户存在。" << endl;else_people = it->second;int tt=1;doint choose=0;cout << "欢迎用户" << _people->getName() << "对本系统的使用。n"<< "你要进行的服务是? n 1.借书 2.查看已借的书籍 3.还书 4.删除用户n"cin >> choose;switch (choose)case 1:_people->inBorrow();break;case 2:_people->inWatch();break;case 3:_people->inBack();break;default:char t;cout << "你确定要删除用户信息?Y of N"cin >> t;if (t = 'Y')peoples.erase(it);break;elsebreak;system("cls");cout << "是否退出用户界面?Y or N " << endl;char t;cin >> t;if (t = 'Y')tt = 0; while (tt);Book:Book(string name, int id, string writter, string press, string briefintroduction, bool cwhere)_name = name;_ID = id;_writter = writter;_press = press;_briefintroduction = briefintroduction;_cwhere = cwhere;ofstream& operator <<(ofstream & cout, Book &_book)_book.cLook(cout);return cout;void Book:cLook()string Ifborrow;if (this->_cwhere = false)Ifborrow = "没有被借出"elseIfborrow = "以被借出"cout << "书名:" << this->_name << 't' << "编号:" << this->_ID << 'n'<< "作者:" << this->_writter << 't' << "出版社:" << this->_press << 't'<< "书的状态:" << Ifborrow << 'n' << "简介:" << this->_briefintroduction;cout << "n*n" << endl;void Book:cLook(ofstream& cout)string Ifborrow;if (this->_cwhere = false)Ifborrow = "没有被借出"elseIfborrow = "以被借出"cout << "书名:" << this->_name << 't' << "编号:" << this->_ID << 'n'<< "作者:" << this->_writter << 't' << "出版社:" << this->_press << 't'<< "书的状态:" << Ifborrow << 'n' << "简介:" << this->_briefintroduction;cout << "n*n" << endl;void Book:newBook()char a;cout << "你是想通过手动输入还是文本输入?" << 'n' << "手工输入为Y,文本输入为N" << endl;cin >> a;if (a = 'Y')int c;dochar b;string name;int id;string writter;string press;string briefintroduction;bool cwhere=false;cout << "请输入书名" << 't' << "编号" << 't' << "作者" << 't' << "出版社"<< endl;cin >> name >> id >> writter >> press ;cout << "是否输入简介?Y OR N n"cin >> b;if (b = 'Y')cout << "n请输入:"cin >> briefintroduction;Book *_book;_book = new Book(name, id, writter, press, briefintroduction, cwhere);cout << "继续输入?Y OR F" << endl;cin >> a;if (a = 'Y')c = 1;else c = 0;books_book->_name = _book; while (c);elseifstream file("d:图书信息.txt");if (!file)cout << "文本打开失败。n"elsestring aa; int bb; string cc; string dd; bool gg; string ff;while (!file.eof()char line256;file.getline(line, 256);string str;str = line;if (str.empty()continue;int i = str.find('=');if (i < 0)continue;string key = str.substr(0, i);string value = str.substr(i + 1);if (key = "name")aa = value;if (key = "id")int n;n = atoi(value.c_str();bb = n;if (key = "writter")cc = value;if (key = "press")dd = value;if (key = "cwhere")if (value = "false")gg = false;elsegg = true;if (key = "briefintroduction")ff = value;if (str0 = '#')Book* _book;_book = new Book(aa,bb,cc,dd,ff,gg );booksaa = _book;file.close();ofstream file2("d:the result.txt");map<string, Book*>:iterator it;for (it = books.begin(); it != books.end(); +it)file2 << *(*it).second);file2.close();Book:Book()ofstream file2("the result.txt");file2.clear();map<string, Book*>:iterator it;for (it = books.begin(); it != books.end(); +it)file2 << *(*it).second);file2.close();bool Book:inWhere()this->_cwhere = false;return 0;bool Book:onWhere()this->_cwhere = true;return 0;Book:Book()void Book:findbook()string name;cout << "请输入要查找的书籍名字:"cin >> name;map<string, Book*>:iterator it;it = books.find(name);if (it = books.end()cout << "图书管理系统中没有该书籍 n"elsecout << "你要找的书籍的信息:" << endl;(it->second)->cLook();void Book:deleteBook()string Bookname;cout << "请输入将要删除的书籍名字:"cin >> Bookname;map<string, Book*>:iterator it;it = books.find(Bookname);if (it = books.end()cout << "你要删除的书本不存在" << endl;elsebooks.erase(it);cout << "书本已成功删除" << endl;void main() /图书管理系统的主界面Book thebook;int choose;docout << "*欢迎进入图书管理界面*" << endl;cout << "你将要进行的操作是?" << 'n' << "1.向图书系统中添加书籍n" << "2.向图书系统中查找书籍n"<< "3.向图书系统中删除书籍n" << "4.添加用户n" << "5.进入用户管理界面" << endl;cin >> choose;switch (choose)case 1:thebook.newBook();break;case 2:thebook.findbook();break;case 3:thebook.deleteBook();break;case 4:newuser();break;default:user();break;cout << "继续操作请按1,退出系统请按0. "<<endl;cin >> choose;system("cls"); while (choose);7.设计心得:此次编程中,我们深刻感受到了,我们这学期进行的c+课程上机的重要性,尽管当时只是编写小的程序,但是他使我们的操作能力提高很多,并在此次实践中深刻体会到这个好处。通过完成本次面向对象程序设计的c+实践,使我熟练和掌握了这学期所学的有关visual c+中的一些主要知识点和应用点,以及一些通过查阅资料得到的知识,如<windows.h>。让学到的知识能够真正的得到实现,而不只是死板的知识。在刚开始听到我们的任务时,第一感觉是根本不可能做到,而且心中也没有一点规划。但通过那天下午和晚上对类和对象的复习,以及查阅相关资料,心中豁然开朗,知道任务没有想象中那么难,并且顺利的和麦啟华定下了任务完成步骤,并分配了任务。之后,我们通过讨论,以及请教学长,查阅资料,克服了一个又一个遇到的问题。并顺利得到了我们预期的结果。在之后我们又通过检查,简化和完善程序,使程序更加简便运行,方便阅读,在这个过程中我们收获颇多,不仅锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力,而且让我们体会到同学之间的团结的重要。所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。.中 南 大 学计算机程序设计基础C+课程设计成 绩 评 定 表 姓名班次学号成绩xxxxxxxxxxxx 指导教师签名:_ 2014年_月_日