图书系统面向对象技术大作业.docx
- 文档编号:2905056
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:24
- 大小:280.56KB
图书系统面向对象技术大作业.docx
《图书系统面向对象技术大作业.docx》由会员分享,可在线阅读,更多相关《图书系统面向对象技术大作业.docx(24页珍藏版)》请在冰豆网上搜索。
图书系统面向对象技术大作业
《面向对象技术大作业》
报告书
题目:
图书管理系统
指导教师:
姓名:
学号:
日期:
一.需求分析
图书管理在生活中运用非常广泛,因此需要用许多的程序来对它们进行管理。
此程序包含了图书信息的录入、图书信息的浏览、图书的查询和排序、图书信息的删除与修改,借书,还书,统计等。
通过编译一个C语言函数,其中包含一个主函数,多个子函数,主函数调用其余的子函数实现人们能够简易、快捷的了解并找到自己所学要的信息的功能。
二.系统主要功能
1、查询所有图书信息:
将所有图书信息包括编号、书名、出版社、作者、价格等显示在屏幕上。
2、查找一本图书的信息:
通过输入图书编号完成图书信息的查找,并在屏幕上显示。
3、修改图书信息:
通过输入编号,判断此图书是否存在,若不存在则提示用户重新输入图书编号。
4、删除图书信息:
通过输入编号,判断此图书是否存在,若存在,则提示用户是否显示删除后的信息,若不存在则提示用户重新输入图书编号。
5、借书:
通过输入图书编号,判断此图书是否存在,若不存在则提示用户重新输入图书编号,若图书已借出则提示用户是否继续借书,若没借出则将此图书的编号和学生的学号存入图书借阅文件中。
6、退出系统:
返回主页面。
三.流程图
四.数据结构设计
4.1main(>函数模块
根据图书馆信息管理系统的要求,可设计一个主函数,及定义多个用户自定义函数。
在主函数中定义全局变量,即是在函数外部定义的变量,其不属于某一个函数,而属于一个源程序文件,在整个程序内可以多次被引用。
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
运用fscanf语句在主函数中将文件中的内容赋给结构体变量,便于在自定义函数中对结构体的调用。
具体如下:
在主函数中定义一个存放图书信息的结构体
structlist{
charnum[20]。
/*图书编号*/
charname[40]。
/*书名*/
charauthor[40]。
/*作者*/
charpublish[40]。
/*出版社*/
doubleprice。
/*价格*/
}。
以及各函数的申明
voidsearch_allinformation(structlistb[]>。
/*查看全部书信息*/
voidcheck_bookinformation(structlistb[]>。
/*查找图书信息*/
voidadd_bookinformation(structlistb[]>。
/*添加图书信息*/
voiddelete_bookinformation(structlistb[]>。
/*删除图书信息*/
voidborrow_book(structlistb[]>。
/*借阅图书*/
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
switch(choice1>
{case1:
search_allinformation(b>。
break。
case2:
check_bookinformation(b>。
break。
case3:
add_bookinformation(b>。
break。
case4:
delete_bookinformation(b>。
break。
case5:
borrow_book(b>。
break。
case0:
break。
}
4.2查询所有图书信息函数模块
voidsearch_allinformation(structlistb[]>
通过printf(>语句将所有的图书信息包括包括编号、书名、出版社、作者、价格等信息显示在屏幕上。
运用for语句加printf(>实现图书信息的循环输出显示。
4.3查询一本图书信息函数模块
voidcheck_bookinformation(structlistb[]>
用户先输入图书编号后,先用strcmp(s1,s2>函数进行比较两个字符串数组的大小,从而查找出该图书是否存在,若不存在则提示用户是否要继续查找,运用switch语句,若继续则再次调用函数本身进行第二次查找,直到找到为止,若否则结束循环,不再进行查找。
通过将switch语句与break语句联合使用来实现多分支选择结构程序的设计。
运用fscanf语句在主函数中将文件中的内容赋给结构体。
其主要流程图如下:
关键代码:
strcmp(比较字符串>case….break(判断>printf<输出信息)
switch(实现选择功能分支>
4.4添加图书信息函数模块
voidadd_bookinformation(structlistb[]>
输入图书的基本信息包括编号、书名、出版社、作者、价格,因为原有的图书信息是按照编号的大小顺序排列的,所以只需运用for循环和strcmp函数找出输入的图书
应该插入的位置,再将所添加的图书信息插入即可。
其主要流程图如下:
关键代码:
printf(输出信息>
scanf(输入信息>
switch<实现多分支结构程序设计)
case-break<实现功能的选择)
4.5删除图书信息函数模块
voiddelete_bookinformation(structlistb[]>
用户输入所要删除的图书编号,先查找该图书编号是否存在,若存在,这提示用户是否要显示删除后的信息,若不存在则提示重新输入。
关键代码:
strcmp<比较两个字符串的大小)
switch<实现多分支结构程序设计)
if<条件选择)
4.6借阅图书模块
voidborrow_book(structlistb[]>
用户先输入所借图书的编号,调用函数查找该图书有没有借出,若已借出,则提示用户该图书已借出,并提示用户是否继续借阅其他书籍。
若继续,则继续进行新的查找。
关键代码:
if-else<实现分支选择)
getchar<从键盘上输入一个字符)
goto<使程序的执行流程直接转接到标号对应的那条语句)
strcmp<比较两个字符串的大小)
五.主要代码
#include
#include
#include
#include
#defineMaxbor100
#defineMaxr100
#defineMaxb100
usingnamespacestd。
classReader
{
private:
inttag。
//删除标记1:
已删0:
未删
intno。
//读者编号
charname[10]。
//读者姓名
intborbook[Maxbor]。
//所借图书
public:
Reader(>{}
char*getname(>{returnname。
}//获取姓名
intgettag(>{returntag。
}//获取删除标记
intgetno(>{returnno。
}//获取读者编号
voidsetname(charna[]>//设置姓名
{
strcpy(name,na>。
}
voiddelbook(>{tag=1。
}//设置删除标记1:
已删0:
未删
voidaddreader(intn,char*na>//增加读者
{
tag=0。
no=n。
strcpy(name,na>。
for(inti=0。
i i++> borbook[i]=0。 } voidborrowbook(intbookid>//借书操作 { for(inti=0。 i i++> { if(borbook[i]==0> { borbook[i]=bookid。 return。 } } } intretbook(intbookid>//还书操作 { for(inti=0。 i i++> { if(borbook[i]==bookid> { borbook[i]=0。 return1。 } } return0。 } voiddisp(>//读出读者信息 { cout< ["。 for(inti=0。 i i++> if(borbook[i]! =0> cout< cout<<"]"< } }。 //读者类库,实现建立读者的个人资料 classRDatabase { private: inttop。 //读者记录指针 Readerread[Maxr]。 //读者记录 public: RDatabase(>//构造函数,将reader.txt读到read[]中 { Readers。 top=-1。 fstreamfile("E: \reader.txt",ios: : in>。 //打开一个输入文件 while(1> { file.read((char*>&s,sizeof(s>>。 if(! file>{cout<<"打开失败"< break。 } top++。 read[top]=s。 } file.close(>。 //关闭reader.txt } voidclear(>//删除所有读者信息 { top=-1。 } intaddreader(intn,char*na>//添加读者时先查找是否存在 { Reader*p=query(n>。 if(p==NULL> { top++。 read[top].addreader(n,na>。 return1。 } return0。 } Reader*query(intreaderid>//按编号查找 { for(inti=0。 i<=top。 i++> if(read[i].getno(>==readerid&& read[i].gettag(>==0> { return&read[i]。 } returnNULL。 } voiddisp(>//输出所有读者信息 { for(inti=0。 i<=top。 i++> read[i].disp(>。 } voidreaderdata(>。 //读者库维护 ~RDatabase(>//析构函数,将read[]写到reader.txt文件中 { fstreamfile("E: \reader.txt",ios: : out>。 for(inti=0。 i<=top。 i++> if(read[i].gettag(>==0> file.write((char*>&read[i],sizeof(read[i]>>。 file.close(>。 } }。 voidRDatabase: : readerdata(> { charchoice。 charrname[20]。 intreaderid。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 系统 面向 对象 技术 作业