收藏 分销(赏)

图书管理系统(C+).doc

上传人:精*** 文档编号:2492794 上传时间:2024-05-30 格式:DOC 页数:17 大小:163.04KB 下载积分:8 金币
下载 相关 举报
图书管理系统(C+).doc_第1页
第1页 / 共17页
图书管理系统(C+).doc_第2页
第2页 / 共17页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服