课设报告.docx
《课设报告.docx》由会员分享,可在线阅读,更多相关《课设报告.docx(32页珍藏版)》请在冰豆网上搜索。
![课设报告.docx](https://file1.bdocx.com/fileroot1/2023-1/7/2dc9f7e7-d0bf-4467-b1ea-630d2fd07c68/2dc9f7e7-d0bf-4467-b1ea-630d2fd07c681.gif)
课设报告
C++语言程序设计
题目:
图书库存记录管理
班级:
0618003
学号:
061800313
姓名:
舒小华
日期:
2019年6月
一.程序功能~~~~~~~~~~~~~~~~~~~~~~~~~~~~4
1,原有功能
(0)主函数功能介绍~~~~~~~~~~~~~~~~~~~~~~~~~~~~4
(1)追加图书记录~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4
(2)删除图书记录~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(3)显示所有图书记录~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(4)查询图书~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(5)图书入库~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(6)图书销售~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(7)批量导入图书~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5
(8)导处图书记录~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
(9)按书号排序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
(10)删除全部图书记录~~~~~~~~~~~~~~~~~~~~~~~~~~6
(11)菜单函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
2.新功能~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
(1)图书借用~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
(2)归还图书~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~6
(3)按书名索引图书~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7
(4)统计馆藏信息~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7
二.题目分析和解决方案~~~~~~~~~~~~~~~~~~~~~~7
三.源程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~9
四.主要函数的测试和数据~~~~~~~~~~~~~~~~~~~38
五.课设感想和体会~~~~~~~~~~~~~~~~~~~~~~~~44
一.系统功能介绍
该系统的功能是实现现实生活中学校图书馆书店等单位的图书库存管理管理,主要包括采购后新图书的入库、图书借阅归还、销售图书的信息实时更新、部分图书下架的删除工作、图书的查找、图书信息的导出、显示所有图书信息和统计馆藏量等功能,同时方便管理者管理,使用者使用。
二、各函数的功能介绍
1.原有功能
(0)主函数功能介绍
主函数是该系的主心骨,它负责在合适的时机显示界面,提示用户选择需要的操作,在用户选择了需要的操作即用户再输入1~14之间的数字时,调用各功能函数,完成用户需要的操作,同时还要兼顾何时退出系统,并完成相应的数据导出与保存工作,相当于一名大将军负责调兵遣将,策划谋略。
(1)追加图书函数的功能
提示用户输入书号、书名,作者,所在位置库存量和价格等信息,在原库存记录尾部增加一条关于输入图书的记录,该函数可以连续追加图书,在书号出输入00000结束该次追加图书的操作。
(2)删除部分图书函数的功能
当一部分图书不再有人使用时,该函数提示用户输入书号,在该函数的作用下该指定书号图书就被删除掉了,释放相应的空间。
(3)显示所有图书函数功能
调用该函数可以显示所有图书信息,方便用户统计与查找。
(4).书号查找函数的功能
该函数会提示用户输入书号,在用户输入书号后,它会把所有的图书检索一遍,直到找都该本图书输出该本图书并输出该本图书的所有信息;否则会输出该书不存在,请用户确认书号,该函数可以实现连续查找图书,在图书号出输入00000可以结束查找图书。
(5)图书入库功能
当图书馆买进新的图书时,用户只需要先输入该书的书号数目,该函数在库中查找看是否由此图书,若有它会改变该图书的部分信息,入库成功,如果不存在,它会提示用户继续输入该本图书的其它信息例如书名、出版社、作者、所要安放的位置等信息后,通过该函数在该数据库的尾部追加该图书的信息,实现入库,可以连续多次入库多本图书,在书还号处输入00000结束追加。
(6)图书销售函数功能
用户需要销售图书时,输入书号,和销售的量,该函数会自动查找该图书并自动判断库存是否充足,在图书库存充足的情况下实现图书销售并自动改变该图书的部分信息,若图书库存不足时提示用户库存不足,销售失败,若图书不存在时会提示该图书不存在,销售失败,该函数可以实现连续销售,在书号处输入00000时结束本次销售,。
(7)批量导入函数功能
在初始化该系统时,通过该函数就可一次导入多很多图书,不会像追加图书那样麻烦。
(8)导出图书记录函数功能
调用该函数,可以一次性导出全部数据到一个文件中,方便在文件中核查图书的信息,统计图书信息,退出系统时保留所有图书的信息,有相当于备份的作用,防止图书信息丢失。
(9)按书号排序函数的功能
该函数可以实现将所有的图书按照书号的升序一次排好顺序,以便于查找和统计。
(10)删除所有图书信息的功能
该函数相当格式化,一次性删除所有图书信息,释放系统所占的空间。
(11)菜单函数的功能
在屏幕上直接输出提示,提示用户选择相应的功能
2,新功能
(1)图书借用函数的功能
通过用户输入书名,该函数会自动在书类的线性表中查找有无此书,若有并且库存量大于一,此时借书成功,若该书库存不足,会提示用户此书库存不足借书失败。
若不存在该书提示用户该图书不存在,请确认书名,可以连续借书,当输入00000时结束本次借书。
(2)图书归还函数的功能
通过用户输入书号实现还书功能,并改变图书的库存量,该函数可以实现连续还书,在书号处输入00000结束本次还书。
(3)书名查找图书所在位置函数的功能
提示用户输入所要查找图书的书名,在用户输入书名后,该函数在系统中检索该书,若该书存在,输出该图书所在的位置,若不存在,提示用户该书不存在,请确认书名,该功能可实现持续查找书的位置,当输入00000时结束本次查找。
(4)统计馆藏量函数的功能
自动统计图书馆拥有图书的种类,所拥有的总册数,现在图书馆的图书总数信息。
二、题目分析和解决方案
图书库存管理系统的目的是方便图书库管理者的管理,便利使用者的使用。
本人结合我校图书馆的实际情况,使我的系统尽量能够完成图书馆库存管理系统的大部分实际功能,过细致的思考之后经过我的思考,由于时间有限,能力有限,我就在我的能力和时间允许范围内计划添加了五个数据成员分别是图书的作者、图书出版社、图书所在图书馆的位置、图书的价格、图书馆拥有该图书的数目(库存+借出的),同时添加了四个功能函数,分别是借书、还书、按照书名查找图书所在位置、统计馆藏量,方便用户使用。
主要解决方案是利用图书类和图书线性表类结合个功能函数的相互调用。
在部分功能函数的实现上,为了实现与图书馆对每一个功能的连续操作,我对部分函数做了一些改变,利用学过的循环语句实现连续操作,为了方便用户的使用,我打算用我有限的能力做一个简易的窗口。
我采用了在课堂学过的循环结构来实现一个功能的连续操作,同时利用条件语句判断何时结束此次操作。
为了实现图书的删除图书,我利用了之前学过覆盖的方法,把需要删除的图书信息覆盖掉,利用文件输入的方法初始线性表,利用文件输出的方法保存图书记录,实现数据的备份。
同时采用break语句及时控制程序结束,为了实现图书按书号书名的查找,我利用了字符串的操作。
对于图书按书号排序的问题上我采用了选择排序法和strcmp,还有其它课堂学过的知识来解决我的系统问题。
具体方案细节如下:
Book书类
charBookNo[10]//书号
charBookName[30]//书名
charWriter[18];//作者
charWhere[10];//表示图书所图书所在书架架的数据成员
charCBS[30];//图书的出版社的数据成员
intNum;//图书的总数的数据成员
intRemNum;//图书的库存量
doublePrice;//图书的价格
Book()书类的构造函数
show()输出图书信息
setInfor()设置图书信息
setNum()返回图书的数量
Booklist书类线性表类
*Books;书类线性表的指针
intcurlen;线性表中的元素
intMaxlen;线性表的长度
Booklist()书类线性表类的构造函数
~Booklist()书类线性表类的析构函数成员
appendBook()追加图书的函数成员
isIn()判断该书是否存在,并返回所在线性表的下标函数成员
deleteBooks()删除指定书号的图书函数成员
sortBooks()按升序排序的函数
sellbook()图书销售的函数成员
Borrow(char*)借书的成员函数
Return(char*)还书的成员函数
Findwhere(char*BkName)按书名查找图书位置的成员函数
showAll()显示所有图书的成员函数
setcurbooklen(intlen)重新设置线性表的函数
initBooklist()把指定文件夹的图书信息导入系统
writeTofile(char*filename)把系统图书写到指定的文件夹中
功能函数
appendrecord(Booklist&booksObj)追加图书的功能函数
delRecord(Booklist&booksObj)删除指定书号图书的功能函数
showAll(Booklist&booksObj)显示所有图书的功能函数
quary(Booklist&booksObj)查找图书的功能函数
addbooks(Booklist&booksObj)图书入库的功能函数
sellbooks(Booklist&booksObj)图书销售的功能函数
appendFromTextfile(Booklist&booksObj)批量导入的功能函数
writeToTextFile(Booklist&booksObj)批量导出的功能函数
borrowBook(Booklist&booksObj)借书的功能函数
Returnbooks(Booklist&booksObj)还书的功能函数
reachbooks(Booklist&booksObj)按图书书名查找图书位置的功能函数
caishulian(Booklist&booksObj)统计馆藏量的功能函数
dalAll(Booklist&booksObj)删除所有图书的功能函数
menu_select();提示使用者选择功能的菜单函数
main()主函数
BooklistbooksObj;定义图书线性表类对象
intsel;选择指定功能的整形变量
booksObj.initBooklist();初始化图书线性表
switch()switch语句,调用用户指定功能函数,完成用户的需求
解决问题的实现过程:
注:
该图是从上往下一次调用的
三、源程序
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classBooklist;
classBook
{
charBookNo[10];
charBookName[30];
charWriter[18];
charWhere[10];//表示图书所在书架
charCBS[30];//表示图书的出版社
intNum;//Num表示图书馆共有该书的数量
intRemNum;//剩余数量
doublePrice;//Price表示图书的价格
public:
Book(char*no=NULL,char*name=NULL,char*cbs=NULL,char*writer=NULL,char*wwhere=NULL,intnum=0,intremnum=0,doubleprice=0)
{
if(name)strcpy(BookName,name);
elsestrcpy(BookName,"");
if(no)strcpy(BookNo,no);
elsestrcpy(BookNo,"");
if(cbs)strcpy(CBS,cbs);
elsestrcpy(CBS,"");
if(writer)strcpy(Writer,writer);
elsestrcpy(Writer,"");
if(wwhere)strcpy(Where,wwhere);
elsestrcpy(Where,"");
Price=price;
Num=num;
RemNum=remnum;
}
voidshow()
{
cout<}
voidPrint(ofstream&out)
{
out<}
voidsetInfor(char*no,char*name,char*cbs,char*writer,char*wwhere,intnum,intremnum,doubleprice)
{
strcpy(BookName,name);
strcpy(BookNo,no);
strcpy(CBS,cbs);
strcpy(Writer,writer);
strcpy(Where,wwhere);
RemNum=remnum;
Price=price;
Num=num;
}
voidsetNum(intn)
{
Num=n;
}
intgetNum()
{
returnNum;
}
voidgotBookName(char*n)
{
strcpy(n,BookName);
}
friendBooklist;
};
classBooklist
{
Book*Books;
intcurlen;//元素个数;
intMaxlen;//线性表的长度;
public:
Booklist(intn=10)
{
curlen=0;
Maxlen=0;
if(n)Books=newBook[n];
elseBooks=NULL;
}
~Booklist()
{
if(Books)delete[]Books;
}
voidappendBook(char*no,char*name,char*cbs,char*writer,char*wwhere,intnum,intremnum,doubleprice)
{Bookb1(no,name,cbs,writer,wwhere,num,remnum,price);
if(curlen==Maxlen)
{
Book*newBooks;
newBooks=newBook[Maxlen+10];
for(inti=0;inewBooks[i++]=Books[i];
delete[Maxlen]Books;
Maxlen=Maxlen+10;
Books=newBooks;
}
Books[curlen]=b1;
curlen++;
}
intisIn(char*Bkno)
{
inti;
for(i=0;iif(strcmp(Books[i].BookNo,Bkno)==0)returni;
return-1;
}
Book&getbooks(inti)
{
returnBooks[i];
}
booldeleteBooks(char*BkNo)
{
for(inti=0;iif(strcmp(Books[i].BookNo,BkNo)==0)//提供的书号和每本书的书号相比较
{
for(intj=i;jBooks[j]=Books[j+1];
curlen--;//线性表的长度减1、
return1;
}
return0;
}
voidzjyytsshumu(inti,intn)
{
Books[i].RemNum=Books[i].RemNum+n;
Books[i].Num=Books[i].Num+n;
}
voidsortBooks()
{
Bookb2;
for(intm=0;mfor(intn=m;n{
if(strcmp(Books[n].BookNo,Books[m].BookNo)<1){b2=Books[n];Books[n]=Books[m];Books[m]=b2;}
}
}
boolsellbook(char*no,intn)
{
for(inti=0;i{
if(strcmp(Books[i].BookNo,no)==0)
{if(Books[i].RemNum>n){Books[i].RemNum=Books[i].RemNum-n;cout<<"销售成功"<elsecout<<"该图书数量不足,售出失败!
"<break;
}
}
return0;
}
boolBorrow(char*BkName)
{
for(inti=0;i{
if(strcmp(Books[i].BookName,BkName)==0)
{
if(Books[i].RemNum>=1)
{
Books[i].RemNum--;
cout<<"借书成功!
"<return1;
}
elsecout<<"sorry,该书库存不足,请下次借阅!
"<break;
}
}
return0;
}
voidReturn(char*BkNo)
{
for(inti=0;iif(strcmp(Books[i].BookNo,BkNo)==0)
{
Books[i].RemNum++;
cout<<"还书成功!
"<}
}
boolFindwhere(char*BkName)
{
for(inti=0;i{
if(strcmp(Books[i].BookName,BkName)==0)
{cout<"<return1;}
}
return0;
}
voidshowAll()
{
cout<for(intp=0;p<110;p++)
cout<<"-";
cout<for(intr=0;rcout<}
voidcurBookLen(int&a,int&b,int&c)
{intr;
intsum=0,sum1=0;
for(r=0;r{sum+=Books[r].RemNum;
sum1+=Books[r].Num;
}
a=r;
b=sum;
c=sum1;
}
voidsetcurbooklen(intlen)
{
curlen=len;
}
voidreadFromFile(char*filename)
{
inttotalnum;
doublenum,remnum,price;
charno[10],name[30],writer[18],cbs[30],wwhere[10];
ifstreaminfile(filename,ios:
:
in);
if(!
infile)
{
cout<<"thefile"<return;
}
infile>>totalnum;
for(inti=0;i{
infile>>no>>name>>writer>>cbs