1、图书管理系统(C+)陈明明 作者: 日期:17 &nb
2、sp; 个人收集整理 勿做商业用途东华理工大学信息工程学院面向对象程序设计课程设计报告图书馆管理系统指导教师: 谢小林 姓名:陈明明学号:201140030117 班级:1140301 20 13 年 1 月 10 日一、 需求分析:建立一个图书馆管理系统,可以处理以下对象图书馆基本信息图书馆的书籍图书馆管理员 读者信息二、 程序的主要功能:1. 查询图书馆的总信息2. 查询图书馆管理员的信息3。 查询图书馆藏书信息4。 存入新书(有管理员加入,需进行身份验证)5. 旧书处理6. 存入新的管理员的
3、信息7。 修改管理员的信息(增加工龄,加薪)8。 两所图书馆的最大藏书量之和9. 根据书名检索书刊信息10. 查询读者的借阅信息11。 查询读者信息(包括借书情况,到期时间,罚款情况.)12.管理员可以修改用户的欠款和交款的金额13。读者氛围学生、研究生和教师。所有学生的租期为1月,所有教师的租期为2月。 三、程序运行平台:软件环境:w7编程软件 VC+6。0运行平台: Win32 硬 件: 普通个人pc机四、 系统总框架图五、 程序类的说明: 类的设计Book类的设计:(1)数据成员char nameStrNum; 用来存放书
4、名。char numberStrNum; 用来存放图书的编号。char kindType; 用来存放图书的类型。int tag; 定义删除标记。int num; 定义图书编号为整形。int add; 增加标记。(2)函数成员Book() 无参构造函数,用于为书名和作者姓名设置默认值。char getkind() 用于获取图书类型.
5、 char getname() 用于获取书名。int getnum() 用于获取图书编号。 int gettag() 用于获取删除标记。void setname(char na) 用于设置书名。void setkind(char kin) 用于设置类型。void delbook()
6、 用于删除图书。void addbook(int n,char *na,char kin) 用于增加图书。void disp() 用于输出图书。六、 模块分析 class BDatabase 图书管理类的设置,实现对图书的添加,查找,删除等。int top; 设置图书记录指针。Book bookMaxb; 设置图书记录(Maxb定义为最多可存储的图书数
7、,定义为整形)。void clear() 清空图书记录.int addbook(int n,char *na,char *kin) 增加图书记录。Book query(int bookid) 查找图书记录.void bookdata(); 定义图书库.void disp() &nb
8、sp; 输出。BDatabase() 设置析构函数,将book写到book.txt文件中void BDatabase:bookdata() 由此函数开始对图书管理系统的主菜单进行调用与功能的实现.(界面参看执行界面部分)最后用main() 函数的实现,程序的主界面的引导七、比较有特色的函数 class BDatabase 图书管理类的设置,实现对图书的添加,查找,删除等。int top; &
9、nbsp; 设置图书记录指针。Book bookMaxb; 设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。void BDatabase::bookdata() 由此函数开始对图书管理系统的主菜单进行调用与功能的实现。(界面参看执行界面部分)八、存在的不足与对策 使用多关键字进行查询时,我是使用以下语句:if(bname!=null) sqlStr+=”and Bname like ' %"+bname+” ”; ,实现判断是否为空,从而利用给进条件实现查询,粗看之下并没有什么错误,但是在运行
10、是却出现了异常,在找了很久被找出错误之后,我开始考虑是否是语法错误,而是使用MySQL的命令行模式来进行调试,在MySQL命令行中运行时却并没有出现错误,完全正确的查询出我想要的结果,在试了很久之后,终于发现了上面的语句有两个小的细节错误,第一个错误就是"and Bname这里没有空格,正确格式应该是" and Bname,第二个错误是 "+bname+” '”中含有多余的空格,正确答案是'%"+bname+”%'”;两个错误都是由于空格引起的,一个是少了空格,另一个是含有多余的空格。九、程序源代码 define StrNum 2
11、0#define Type 20include<iostreaminclude <iomanipinclude <string#include <fstream /输入/输出文件流类using namespace std;const int Maxb=100; /最多可存储的图书class Bookprivate: &nbs
12、p;int tag; /删除标记int num; /图书编号int add; /增加标记char nu
13、mberStrNum; /编号char nameStrNum; /书名char kindType; /图书类型public:Book()char getkind() /获取图书类型retu
14、rn kindType; char getname() /获取书名 return nameStrNum; int getnum()  
15、; /获取图书编号 return num; int gettag() /获取删除标记 return tag;void setname(char na) /设置书名strcpy(name,na);void setkind(char kin)
16、 /设置类型strcpy(kind,kin);void delbook() /删除图书tag=1;void addbook(int n,char *na,char *kin) /增加图书tag=0;num=n;strcpy(name,na);strcpy(kind,kin);void disp()
17、/输出图书cout。flags (ios::left); /设置对齐的标志位为左coutsetw(15)<<numsetw(20)<name<setw(15)<kindendl;/*/class BDatabaseprivate: int top; /图书记录指针Book bookMaxb;
18、 /图书记录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+;booktop=b;file.close(); void clear()
19、 /全删top=1; int addbook(int n,char *na,char *kin) /增加图书Book p=query(n);if(NULL=p)top+;booktop.addbook(n,na,kin);return 1;return 0;Book *query(int bookid) /查找图书for (int i=0;i<=top;i+
20、)if (booki。getnum()=bookid booki.gettag()=0)return booki;return NULL;void bookdata(); /图书库void disp() for (int i=0;i<=top;i+) if (booki.gettag()=0) booki。disp();BDatabase() &n
21、bsp; /析构函数,将book写到book。txt文件中fstream file(”book.txt",ios::out); for (int i=0;i<=top;i+)if (booki。gettag()=0)file.write(char )booki,sizeof(booki);file.close();;void BDatabase::bookdata() char choice;char bname40;char bkind40;char newType20;
22、int bookid;Book *b;while (choice!='0) cout”t*n";cout<” nn"cout<”ttt图 书 管 理 系 统nn&qu
23、ot;cout<”ttt1 新增图书记录n" cout<"ttt2 更改图书记录n”; cout<”ttt3 删除图书记录n”;cout<"ttt4 查找图书记录n"cout"ttt5 显示图书记录n"cout<”ttt6 清空全部记录(慎用)n
24、”;cout<”ttt0 退出系统n"cout< cin="">>choice;switch (choice) case '1:cout"输入图书编号:”endl;cin>bookid;cout"输入图书类型:”newType; cout”输入图书书名:"<endl;>b
25、name;addbook(bookid,bname,newType);break; case '2':cout”输入图书编号:”endl;cin>>bookid;b=query(bookid);if(b=NULL)cout<"该图书不存在"endl; break;cout<”输入新的书名:”<endl;>bname;b>setname(bname);cout<”输入新的类型:”endl;>bkind
26、;b-setkind(bkind); break; case 3': cout<<”读入图书编号:”<endl;cinbookid;b=query(bookid);if(b=NULL) cout<”该图书不存在”<<endl; break;char tg1;cout<”确定要删除此记录吗?(y>tg1;if(tg1!=n'&&tg1!='N)b>delbo
27、ok();cout<"已成功删除该书记录!”<endl;break;case '4:cout"读入图书编号:"<endl; cin="">bookid;b=query(bookid);if (b=NULL)cout<"该图书不存在”endl;break;cout<<"图书编号 b-="">disp();break;case '5':cout<”图书编号 图书名称
28、 图书类型 n”;disp();break;case '6': char tg2;cout<"确定要清空所有记录吗?(Y/N)”>tg2;if(tg2!='n&tg2!='N')clear(); cout<”已成功清空记录!"<endl;break;case 0':break;default:cout"输入错误,请从新输入(数
29、字为06):”;/main() 函数的实现,程序的主界面的引导void main() char choice;BDatabase BookDB;while(choice!=0') cout"t*n”; cout<”
30、 nn"; cout<"nnttt欢迎使用图书管理系统nn";coutendl<<endl<"ttt图 书 管 理 系 统nnnn”;cout<setw(83)<"by (姓名)nnnn"cout<” &
31、nbsp; nn”;cout<"t*n"; cout<”ttt1 进 入 系 统nnttt0 离 开"<<endl;cout<<”请选择:”; cin="">choice;switch(choice)case 1':BookDB.bookdata();break; case 0': cout<”nnttt欢迎再次使用图书管理系统nn"; break;default:cout"输入错误,请从新输入:";!-!-!-”输入新的书名:”