1、C+实践报告书淮阴工学院C+程序设计课程设计报告选题名称: 图书管理系统 系 别: 计算机工程系 专 业: 计算机与科学技术 班 级: 学生姓名: 学 号: 指导教师: 学年学期: 2015 2016 学年 第 1 学期 2015 年 12 月 30 日C+课程设计任务书课题名称图书管理设计目的1. 调研并熟悉图书管理的基本功能、数据流程与工作规程;2. 学习图书管理中的相关算法和VC+集成环境的编程技术;3. 通过实际编程加深对基础知识的理解,提高实践能力;4. 学习开发资料的收集与整理,学会撰写课程设计报告。实验环境1. 微型电子计算机(PC);2. 安装Windows XP以上操作系统,
2、Visual C+6.0开发工具。任务要求设计内容:设计一个实用的小型图书管理程序。对图书的在库和借出状态要有所表示。能提供读者信息查询及提供按图书的编号、书名、责任者、出版社等途径的检索。程序应提供的基本管理功能有:1)添加:即增加一本书的记录到系统中。2)删除:即从系统中删除一本书的记录。3)查询:可根据书名、编号查找书的相关信息,若找到显示该书全部信息。4)修改:可修改一本书的除书名外其它信息。5)状态:提供该书在库、不在库的状态。程序应输入不少于10本书的信息。结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。工作进度
3、计划序号起止日期工 作 内 容12015.12.282015.12.28在预设计的基础上,进一步查阅资料,完善设计方案,形成书面材料。22015.12. 292015.12.31设计总体方案,构建、绘制流程框图,编写代码,上机调试。32016.01.012016.01.02测试程序,优化代码,增强功能,撰写设计报告。42016.01.032016.01.03提交软件代码、设计报告,参加答辩,根据教师反馈意见,修改、完善设计报告。指导教师:步山岳 2015 年 12 月 21 日 摘要:这次的课程设计题目是图书管理系统。图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和
4、维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序共跟那个完备,易使用等特点。采用C+作为开发工具。通过对C+进行深入的学习和应用,主要完成利用图书馆管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作系统化,规范化和自动化,为图书管理提供便利。同时是学习玩面向对象程序设计课程后进行的一次全面的综合练习。有助于加深对面向程序设计中基础理论和基本知识的理解,培养实践能力,促进理论与实践的结合。关键词:图书管理系统;C+;信息管理系统。 目 录1 课题综述 11.1 预期目标 11.
5、2 面对的问题 11.3 需解决的关键技术 11.4 涉及的知识 12课题内容 22.1 设计思想 22.2设计类和对象 32.2.1设计book类 32.2.2设计manager类 32.2.3设计链表 42.2.4设计主函数 53程序调试 53.1常见错误分析 54代码编写 65程序调试与运行 176结论 19总 结 20致 谢 21参考文献 22C+课程设计成绩表 231 课题综述1.1 预期目标熟练掌握面向对象设计的含义,联系C+中的数组;判断语句;循环语句和函数中的声明等等,能成功写出实现图书管理操作的代码,并且调试成功。并在不断的操作过程中熟练掌握C+程序的设计步骤,并不断提高自己
6、阅读与编写程序的能力,进一步熟悉程序的编辑,编译,连接和运行的过程。1.2 面对的问题在设计过程中,代码设计的字符串的比较有些困难,必须查阅相关书籍找到相关知识的代码才能解决。并且对每个类的设计把握度还不够,用的代码结构虽然简单但有点冗长不够精简。1.3 需解决的关键技术本次课程设计中的关键技术就是充分利用面向对象设计中的函数调用,以及图书类方面的应用。1.4 涉及的知识 C+知识:循环语句,选择语句, 数组,函数调用。1. 循环语句for( )语句for( )循环语句的一般格式为:for(;)循环体语句;其中,三个表达式都可以是C+中的任一符合语法规则的表达式;循环体语句可以是C+的任一语句
7、。同样也可将语句称为for( )的内嵌语句,并称为循环体。for( )语句的执行过程如下;首先计算“表达式1”(循环初值),且只算一次。每一次循环之前计算“表达式2”(循环条件),如果其结果为真,则执行“语句”,并计算“表达式3”(循环增量)。否则,循环终止。2. 条件语句的一般格式为:if() 语句其中,可以是符合C+语法的任一表达式,也可以是算术表达式、关系表达式等等; 语句可以是个单一的语句,也可以是个复合的语句,还可以是个空语句。由于条件语句只是一个语句,故把语句称为条件语句的内嵌语句,并把内嵌语句的语句结束符“;”作为单选语句的结束符。同样地,当语句是个复合语句时,把复合语句的结束符
8、“”也作为条件语句的结束符。3.数组数组:是同类型的数据有序的集合。数组有一维数组与多维数组之分。二维数组的定义格式为:类型说明符 数组名常量表达式1 常量表达式2;“类型说明符“指定数组元素的类型,“数组名”的命名规则与变量一样,方括号中的“常量表达式1”代表了二维数组的行数,“常量表达式2”代表了二维数组的列数。行列下标都是从零开始,其最大下标均比常量表达式的值小1。2课题内容2.1 设计思想(1)设计class manager管理者类,以实现对整体图书的管理;Class book图书类,实现对图书的描述,图书的编号,书名,借出,还入等;设计主函数以调用所设计的类的成员函数。(2)建立单链
9、表以实现管理者的功能(即通过单链表遍历显示所有图书信息)。(3)设计菜单来实现功能设计: 1、创建新书目2、删除书目3、查询书目4、修改信息5、显示所有藏书6、退出系统并保存修改2.2设计类和对象2.2.1设计book类class book protected: string isbn;/定义字符串图书编号 string name; string writer; string publicer; string time;public: book()/构造book函数 book(string a,string b,string c,string d,string e) isbn=a; name=
10、 b; writer=c; publicer=d; time=e; 2.2.2设计manager类class manager:public bookprivate: book buffer10;/设置图书馆的容量 int sum;public: manager() sum=0; /默认图书的数量 void add(book a) if(sum=10)/最多添加9本 cout添加失败,内存已满!endl; else buffersum=a; sum+; cout添加新书目成功,以下是本书信息endl; 2.2.3设计链表void read() FILE *fp;/建立文件指针 if(fp=fop
11、en(C:图书馆.txt,rb+)=NULL)/注意路径,将fp指针指向图书馆。txt文件 cout文件打开失败n; system(PAUSE); exit(0);/关闭程序 fread(&sum,4,1,fp); /将文件中的数据个数,赋值给sum for(int i=0;isum;i+) fread(&bufferi,sizeof(bufferi),1,fp);/将fp文件输入到buffer数组中,每次读出长度为sizeof(bufferi)的数据项,读取一个数据项 fclose(fp);void write() FILE *fp2; if(fp2=fopen(C:UsersfeiDesk
12、top图书馆.txt,wb+)=NULL)/注意路径 cout文件打开失败n; system(PAUSE); exit(0); fwrite(&sum,4,1,fp2);/读出有多少条记录,即图书信息 for(int i=0;isum;i+) fwrite(&bufferi,sizeof(bufferi),1,fp2);/将数据写入文件 fputc(EOF,fp2);/将文件结束标志输入到fp2指针 fclose(fp2);/关闭文件指针2.2.4设计主函数/主函数void main() manager worker; char function=0;/worker.read ();/界面wh
13、ile (function!= 6)/当function6时结束循环,即退出系统 for(int i=0;i34;i+) cout*; coutendl; cout欢迎使用本图书管理系统,请选择操作nendl; cout1 创建新书目endl; cout2 删除书目endl; cout3 查询书目endl; cout4 修改信息endl; cout5 显示所有藏书endl; cout6 退出系统并保存修改function3程序调试3.1常见错误分析静态数据成员的初始化放在构造函数里,而不是在类成员函数实现的前面。显示定义构造函数后还试图调用默认构造函数。多层条件语句的if和else不配对; 经
14、常丢失“;”。 4代码编写#include#include#includeusing namespace std;#includeclass book protected: string isbn; string name; string writer; string publicer; string time;public: book() book(string a,string b,string c,string d,string e) isbn=a; name= b; writer=c; publicer=d; time=e; void change_name(string a)/修改名
15、称 name=a; void change_isbn(string a)/修改编号 isbn=a; void change_writer(string a)/修改作者 writer=a; void change_publicer(string a)/修改出版商 publicer=a; void change_time(string a)/修改时间 time=a; string get_name()/获取署名 return name; string get_isbn()/获取书编号 return isbn; string get_writer()/获取作业 return writer; void
16、 display()/输出图书信息 coutisbn name writer publicer time=10)/最多添加9本 cout添加失败,内存已满!endl; else buffersum=a; sum+; cout添加新书目成功,以下是本书信息endl; void delete_by_name(book a)/删除图书通过 int flag=0;/判断是否删除成功,0表示失败,1表示成功 if(sum=0) cout删除失败,已经没有存档了!endl; else for(int i=0;isum;i+)/遍历所有的图书 if(bufferi.get_name()=a.get_name
17、()/找出书名相同 cout删除书目成功,以下是删除的书信息endl; bufferi.display ();/执行删除 for(int j=i;jsum-1;j+)/将删除的图书覆盖,即后面的图书向前移位 bufferj=bufferj+1; flag=1;/删除成功标志 sum-; break; if(!flag) coutthe book doest exist!endl; void search_by_name(string names)/ 查询图书,通过图书名 int flag=0;/默认失败 for(int i=0;isum;i+)/遍历所有图书 if(bufferi.get_na
18、me()=names) bufferi.display (); flag=1; if(flag=0) coutthe book doest exist!endl; void search_by_isbn(string names)/通过图书编号查询 int flag=0; for(int i=0;isum;i+)/遍历所有图书 if(bufferi.get_isbn()=names)/找出相等的图书编号输出 bufferi.display (); flag=1;/表示操作成功 if(flag=0) coutthe book doest exist!endl; void search_by_wr
19、iter(string names)/同过作者名字查询 int flag=0; for(int i=0;isum;i+)/遍历所有的图书 if(bufferi.get_writer()=names)/判断作者名是否相同 bufferi.display ();/输出 flag=1;/设置成功 if(flag=0) coutthe book doest exist!endl; void change_isbns(string nam,string isn)/通过查询书名,修改它的编号 for(int i=0;isum;i+) if(bufferi.get_name()=nam)/查出书名相同的书
20、bufferi.change_isbn(isn);/修改图书编号 void change_names(string nam,string isn)/通过查询图书名称,修改图书名 for(int i=0;isum;i+) if(bufferi.get_name()=nam) bufferi.change_name(isn);/修改图书名 void change_writers(string nam,string isn)/通过查询作者名,修改作者 for(int i=0;isum;i+) if(bufferi.get_name()=nam) bufferi.change_writer(isn);
21、/修改作者名 void change_publicers(string nam,string isn)/修改出版商 for(int i=0;isum;i+) if(bufferi.get_name()=nam) bufferi.change_publicer(isn); void change_times(string nam,string isn)/修改出版时间 for(int i=0;isum;i+) if(bufferi.get_name()=nam) bufferi.change_time(isn); void display_all()/输出所有的图书信息 for(int i=0;i
22、sum;i+) bufferi.display (); void read() FILE *fp;/建立文件指针 if(fp=fopen(C:图书馆.txt,rb+)=NULL)/注意路径,将fp指针指向图书馆。txt文件 cout文件打开失败n; system(PAUSE); exit(0);/关闭程序 fread(&sum,4,1,fp); /将文件中的数据个数,赋值给sum for(int i=0;isum;i+) fread(&bufferi,sizeof(bufferi),1,fp);/将fp文件输入到buffer数组中,每次读出长度为sizeof(bufferi)的数据项,读取一个
23、数据项 fclose(fp);void write() FILE *fp2; if(fp2=fopen(C:UsersfeiDesktop图书馆.txt,wb+)=NULL)/注意路径 cout文件打开失败n; system(PAUSE); exit(0); fwrite(&sum,4,1,fp2);/读出有多少条记录,即图书信息 for(int i=0;isum;i+) fwrite(&bufferi,sizeof(bufferi),1,fp2);/将数据写入文件 fputc(EOF,fp2);/将文件结束标志输入到fp2指针 fclose(fp2);/关闭文件指针 ;/主函数void ma
24、in() manager worker; char function=0;/worker.read ();/界面while (function!= 6)/当function6时结束循环,即退出系统 for(int i=0;i34;i+) cout*; coutendl; cout欢迎使用本图书管理系统,请选择操作nendl; cout1 创建新书目endl; cout2 删除书目endl; cout3 查询书目endl; cout4 修改信息endl; cout5 显示所有藏书endl; cout6 退出系统并保存修改function; if(function=1)/创建新书 string a
25、,b,c,d,e; cout请输入书的isbn编号a; cout请输入书名b; cout请输入书作者名c; cout请输入书的出版社d; cout请输入书的出版时间e; book newbook(a,b,c,d,e);/通过book的构造函数,输入图书信息 worker.add(newbook);/将图书信息保存到buffer数组中,即放入图书馆 newbook.display();/输出添加的图书 system(PAUSE); system(CLS); else if(function=5)/显示所有图书 cout这是所有藏书:endl; worker.display_all ();/调用display_all函数 system(PAUSE); system(CLS); else if(function=2)/删除图书 string a; cout请输