C图书管理系统Word下载.docx
- 文档编号:1457284
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:36
- 大小:451.88KB
C图书管理系统Word下载.docx
《C图书管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《C图书管理系统Word下载.docx(36页珍藏版)》请在冰点文库上搜索。
输出:
是否允许借阅
处理:
系统进行分析比较借阅数量及是否预约
输入:
借阅者的编号及图书的编号
图书的编号
(三)图书还书模块功能分析
图书归还功能需要完成图书的归还工作。
(四)图书维护模块功能的需求
实现对图书的描述,图书的编号,书名,借出,还入等,需要实现的功能为:
图书编目,图书注册,更新书目,图书删除。
1、图书的新增:
首先给图书编号,在给图书编号之前先判断是否有图书为该编号,如果有则编号不成功重新输入编号,如果没有则编号成功,继续添加图书的其他信息,包括书名、作者、出版社、出版时间、价格等信息。
2、图书的删除:
输入图书的编号,删除该编号图书的所有信息,并提示删除成功信息,若输入无效的编号则提示删除不成功。
3、图书的查找:
输入要查找图书的编号,输出该编号图书的所有信息,若输入无效的编号则提示查找失败。
4、图书的显示:
按照出版时间的先后顺序输出图书馆所有书籍的信息。
5、图书的全删:
删除图书馆所有书籍的所有信息。
(五)读者维护模块功能的需求
对读者信息描述,建立读者个人资料,借阅者管理需要实现的功能包括:
借阅者注册,借阅者信息更新,借阅者注销,借阅者信息的查询。
1、读者的新增:
先给读者编号,如果该编号已经有人,则提示错误,否则继续输入读者的其他信息,包括读者的名字和初始密码输出添加成功提示。
2、读者的更改:
输入读者的编号,更改读者的名字,若输入的编号无效则更该失败。
3、读者的删除:
输入要删除读者的编号,判断该编号是否有人,有则删除该读者的所有信息,没有则提示删除失败。
4、读者的查找:
输入要查找的读者编号,编号正确则输出读者的信息,否则查找失败。
5、读者的显示:
显示图书馆里所有读者的信息。
6、读者的删除:
删除图书馆里所有读者的信息。
(六)统计分析功能
随时可以进行统计分析,以便及时了解当前的借阅情况和相关的资料状态。
(七)提示功能
当出现库存查无此书或读者时,给予相应提示。
(八)离开功能
实现管理后的系统退出。
二、总体设计
1.基本思路:
采用面向对象分析方法,把一个系统分成多个类进行处理。
主要是运用到类和对象,还有带参数的构造函数以及析构函数以及数组来实现本程序,并在主函数对各个功能模块就行调用。
即:
1)读者类,实现对读者信息的描述2)读者库类,实现建立读者的个人资料3)图书类,实现对图书的描述,图书的编号,书名,借出,还入等4)图书库类,实现对图书的维护,查找,删除等最后用main函数做界面的引导。
4.读者维护
3.图书维护
0.离开
2.还书
1.借书
2.遇到的问题及解决方法
1)用户密码验证的问题:
怎么让用户在输入密码时用号覆盖密码
解决办法:
通过翻阅之前的C语言教材,发现书中有类似的例子,即getch()输入密码时屏幕上不显示,然后用putch('
*'
)就可以输出*覆盖密码。
2)用getch()函数编译时出现问题。
通过仔细检查代码,发现忘记添加头文件conio.h。
添加后,即可编译。
3)问题三:
指针的操作问题:
如果定义chara[4]={'
1'
'
2'
3'
4'
};
char*p=a;
然后输出p指向的字符串,cout<
<
p;
系统输出乱码。
通过查找相关的书籍,发现当指针p指向没有串结束符的字符串时,就会
输出乱码,所以要在字符串的后面加一个串结束符'
\0'
。
4)初次编译时,错误较多。
解决方法:
一个一个错误耐心改正,遇到不会的,通过翻书或者上网查资料解决。
其中很多是很简单的语法错误,如:
忘加分号,左右括号不对称……下次写程序时需细心。
3.完成本次大作业的完整过程
1)选题:
通过查看老师提供的参考题目,由于大一时已经用C语言做过“班级通讯录”和“学生成绩管理系统”的选题,这次决定做点不一样的,将“图书管理系统”作为本次大作业的选题。
2)类的确定:
“类”是对具有相同数据结构和相同操作的一类对象的描述。
经过思考,本次大作业需要完成借阅管理、读者管理、图书管理、统计分析的功能,所以将其分为读者类、读者库类、图书类、图书库类。
3)每个类代码的编写
4)main函数的编写。
5)编译,修改,完善。
6)撰写实验报告。
三、详细设计
1.读者类,实现对读者信息的描述
函数清单:
char*getname()获取姓名,intgettag()获取删除标记,intgetno()获取读者编号,voidsetname(charna[])设置姓名,voiddelbook()设置删除标记1:
已删0:
未删,char*getmima()获取读者的密码,voidaddreader(intn,char*na,char*mi)增加读者[形参分别为编号,姓名,密码],voidborrowbook(intbookid)借书操作[形参为图书编号],intretbook(intbookid)还书操作[形参为图书编号],voiddisp()显示函数。
2.读者库类,实现建立读者的个人资料
RDatabase()构造函数,将reader.txt读到read[]中,voidclear()//删除所有读者信息,intaddreader(intn,char*na,char*mi)//添加读者时先查找是否存在[形参分别为编号,姓名,密码],Reader*query(intreaderid)//按编号查找,voiddisp()//输出所有读者信息,voidreaderdata();
//读者库维护
读者库维护函数流程图:
N
Y
输出“该读者不存在”
r==Null?
输入读者编号
Case2/3/4
0.退出
6.全删
5.显示
4.查找
3.删除
2.更改
1.新增
Case2:
输入新的姓名
Case3:
r->
delbook();
Case4:
输出读者信息
break
3.图书类,实现对图书的描述,图书的编号,书名,借出,还入等
函数清单:
char*getname()//获取姓名,intgetno()//获取图书编号,intgettag()//获取删除标记,voidsetname(charna[])//设置书名,char*Book:
:
getwriter()//获取书籍作者,char*Book:
getconcem(){returnconcem;
}//获取书籍出版社,char*Book:
gettime(){returnTime;
},floatBook:
getprice(){returnprice;
}//获取书籍价格,voiddelbook()//删除图书,voidBook:
addbook(intn,char*na,char*wri,char*con,char*tm,floatpr)//增加图书[形参为书名,编号,作者,出版社,出版时间,价格],intborrowbook()//借书操作,voidretbook()//还书操作,voiddisp()//输出图书。
4.图书库类,实现对图书的维护,查找,删除等
BDatabase()//构造函数,将book.txt读到book[]中,voidclear()//全删,ntBDatabase:
addbook(intn,char*na,char*wri,char*con,char*tm,floatpr)//增加图书[形参为书名,编号,作者,出版社,出版时间,价格],Book*BDatabase:
query(intbookid)//查找图书[形参为图书编号],intBDatabase:
qname(char*nm),voidbookdata();
//图书库维护,voiddisp()显示函数。
四、程序运行结果测试与分析
运行结果:
分析:
由于时间有限,程序在显示上仍有小问题,待改进。
五、程序源代码
#include<
iostream>
iomanip>
list>
string>
algorithm>
fstream>
#include<
conio.h>
usingnamespacestd;
constintMaxr=100;
//最多的读者
constintMaxb=100;
//最多的图书
constintMaxbor=5;
//每位读者最多借五本书
/****************读者类,实现对读者信息的描述****************/
classReader
{
private:
inttag;
intno;
charname[10];
//读者姓名
intborbook[Maxbor];
//所借图书
charmima[6];
public:
Reader(){}
char*getname()
{
returnname;
}//获取姓名
intgettag()
returntag;
}//获取删除标记
intgetno()
returnno;
}//获取读者编号
voidsetname(charna[])
strcpy(name,na);
}//设置姓名
voiddelbook()
{
tag=1;
}//设置删除标记1:
未删
char*getmima()//获取读者的密码
returnmima;
}
voidaddreader(intn,char*na,char*mi)
tag=0;
no=n;
strcpy(name,na);
strcpy(mima,mi);
for(inti=0;
i<
Maxbor;
i++)
borbook[i]=0;
}//增加读者
voidborrowbook(intbookid)
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}//借书操作
intretbook(intbookid)
if(borbook[i]=bookid)
{
borbook[i]=0;
return1;
return0;
}//还书操作
voiddisp()
cout<
setw(5)<
no<
setw(10)<
name<
"
借书编号:
["
;
if(borbook[i]!
=0)
cout<
borbook[i]<
|"
cout<
]"
endl;
/******************读者库类,实现建立读者的个人资料****************/
classRDatabase
inttop;
//读者记录指针
Readerread[Maxr];
//读者记录
RDatabase()//构造函数,将reader.txt读到read[]中
Readers;
top=-1;
fstreamfile("
reader.txt"
ios:
in);
//打开一个输入文件
while
(1)
file.read((char*)&
s,sizeof(s));
if(!
file)break;
top++;
read[top]=s;
file.close();
//关闭reader.txt
voidclear()//删除所有读者信息
top=-1;
intaddreader(intn,char*na,char*mi)//添加读者时先查找是否存在
Reader*p=query(n);
if(p==NULL)
top++;
read[top].addreader(n,na,mi);
return1;
return0;
Reader*query(intreaderid)//按编号查找
{
for(inti=0;
=top;
i++)
if(read[i].getno()==readerid&
&
read[i].gettag()==0)
return&
read[i];
returnNULL;
}
voiddisp()//输出所有读者信息
{
if(read[i].gettag()==0)
read[i].disp();
voidreaderdata();
~RDatabase()//析构函数,将read[]写到reader.txt文件中
{
out);
for(inti=0;
if(read[i].gettag()==0)
file.write((char*)&
read[i],sizeof(read[i]));
file.close();
voidRDatabase:
readerdata()
charchoice=1;
charrname[20];
intreaderid;
charrmima[6];
Reader*r;
while(choice!
='
0'
)
cout<
\t\t\t*********读者维护*********"
\t\t\t……1.新增……"
\t\t\t……2.更改……"
\t\t\t……3.删除……"
\t\t\t……4.查找……"
\t\t\t……5.显示……"
\t\t\t……6.全删……"
\t\t\t……0.退出……"
cin>
>
choice;
inti=0;
switch(choice)
case'
cout<
"
输入读者编号:
cin>
readerid;
while(query(readerid)!
=NULL);
输入读者密码:
for(i;
6;
{
rmima[i]=getch();
putch('
);
}
输入读者姓名:
rname;
addreader(readerid,rname,rmima);
break;
r=query(readerid);
if(r==NULL)
cout<
该读者不存在"
break;
输入新的姓名:
r->
setname(rname);
if(r==NULL)
该读者不存在"
<
endl;
读入读者编号:
cout<
您所查找的读者信息如下"
disp();
5'
disp();
6'
clear();
default:
cout<
输入错误,请从新输入"
break;
}
}
/*******************图书类,实现对图书的描述,图书的编号,书名,借出,还入等****************/
classBook
{
private:
inttag;
//删除标记1:
已删0:
intno;
//图书编号
charname[20];
//书名
charwriter[10];
//作者
charconcem[30];
//出版社
charTime[10];
floatprice;
intonshelf;
//是否在架1:
在架2:
已借
public:
Book(){}
char*getname(){returnname;
}//获取姓名
intgetno(){returnno;
}//获取图书编号
intgettag(){returntag;
}//获取删除标记
voidsetname(charna[])//设置书名
char*Book:
getwriter(){returnwriter;
}//获取书籍作者
}//获取书籍出版社
char*Book:
}
floatBook:
}//获取书籍价格
voiddelbook(){tag=1;
}//删除图书
voidBook:
addbook(intn,char*na,char*wri,char*con,char*tm,floatpr)//增加图书
strcpy(writer,wri);
strcpy(concem,con);
strcpy(Time,tm);
price=pr;
onshelf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统