c++图书管理系统实验报告和源代码.docx
《c++图书管理系统实验报告和源代码.docx》由会员分享,可在线阅读,更多相关《c++图书管理系统实验报告和源代码.docx(29页珍藏版)》请在冰豆网上搜索。
c++图书管理系统实验报告和源代码
课程名称:
程序设计综合实训
设计题目:
图书管理系统
姓名:
学号:
专业班级:
指导老师:
完成日期:
1设计任务
1.1设计目的
运用所学知识,完成图书馆管理系统,通过实践加强对所学知识的理解和巩固
1.2设计内容
建立图书馆管理系统,用户分为图书管理人员,读者。
管理人员可以增加删除查看图书、读者。
读者只能查看自身信息,和借还书
1.3设计指标或者要求
管理人员可以访问任意图书和读者,而读者只能借还图书馆存在的图书和查看自己的信息。
2设计过程
分析:
由于管理系统用户有图书管理员和读者,但两者的权限不同,管理员有权访问所有图书信息和管理员信息,而读者只能访问所有图书信息和自身的信息。
所以他们的相同点:
都能访问所有图书信息
不同点:
管理员能访问所有读者信息而管理员只能访问自身信息而不能访问其它读者信息;故此设计了三个类
程序包含三个类:
图书类(books),管理员类(manager),读者类reader,books类为抽象类,manager,和reader类为books类的派生类。
为了能让管理员和读者访问所有图书信息,所有都继承了books类;而为了分出两者的权限的不同,所以把所有读者的信息做为一个链表作为管理员的一个私有成员,而读者却只能放一个自身节点作为读者的私有成员,然后分别设计各个类的成员函数。
2.1程序功能
Classbooks///虚基类
{
protected:
books_node*broot;
public:
books();//构造函数
savebooks();//保存修改的内容
search_book();//查找某一本书
print_books();//输出所有书的信息
virtualadd_book()=0;//对于读者是还书,对于管理员添加书
virtualdelet_book()=0;//对于读者是借书,对于管理员是去掉某一本书
};
Classmanager:
publicbooks//管理员类
{
protected:
readers_node*rroot;
public:
manager(readers_node*);
savereaders();
add_book();//添加图书信息
delet_book();//删除图书
search_reader();//查找读者信息
add_reader();//添加读者
delet_reader();//删除读者
print_readers();//输出所有读者
};
classreader:
publicbooks{//读者类
private:
readers_node*personnel;//存放读者自身信息
public:
reader(readers_node*);
add_book();//还书
reader_borrow();
delet_book();
reader_return();//借书
print_me();//查看自己借书情况
save_readers(readers_node*);
};
2.2程序流程图
3软件运行或者测试结果
(1)管理员身份登录:
(2)读者身份登录:
4软件设计过程中遇到的问题以及解决办法
由于编写前期做了大量的设计工作,在编写过程中基本没有遇到难解决的问题提,倒是在设计类时有些茫然,经过反复斟酌还是做了一些取舍,比如把读取读者文件放在了类的外面等。
。
5总结
通过本次课程设计学到了很多东西,对于c++对象的含义有了进一步的认识,从而对类的封装和设计有了一种新的认识,不只是停留在表面,为以后的学习积累了经验,设计不比编写容易,类设计好是整个程序写好的前提,只有一个好的规划才能写出好的程序。
不过也通过本次发现了自己的不足之处。
总是:
本次课程设计受益匪浅,动手能力大大增强;
附录(程序源代码)
#include
#include
#include
#include
#include
#include
#definemax3
typedefstructBooks{
charbook_name[15];
inttotal_num;
intborrow_num;
charbook_num[15];
Books*next;
}books_node;
typedefstructReaders{
charreader_name[15];
charreader_no[15];
intreader_borrow_num;
structReader_borrow_books{
charborrow_books_name[15];
charborrow_books_no[15];
}reader_borrow_book[max];
Readers*next;
}readers_node;
classbooks{
protected:
books_node*broot;
public:
books();
savebooks();
search_book();
print_books();
virtualadd_book()=0;
virtualdelet_book()=0;
};
classmanager:
publicbooks
{
protected:
readers_node*rroot;
public:
manager(readers_node*);
savereaders();
add_book();
delet_book();
search_reader();
add_reader();
delet_reader();
print_readers();
};
classreader:
publicbooks{
private:
readers_node*personnel;
public:
reader(readers_node*);
add_book();
reader_borrow();
delet_book();
reader_return();
print_me();
save_readers(readers_node*);
};
books:
:
books()
{
books_node*r;
broot=newbooks_node;
r=newbooks_node;
r->next=NULL;
broot=r;
ifstreaminFile;
inFile.open("c:
\\books.dat",ios:
:
binary);
if(inFile.is_open()==-1)cout<<"con'topenbooks.dat"<else
{
inti=0;
while
(1)
{
i++;
books_node*node;
node=newbooks_node;
inFile.read((char*)node,sizeof(books_node));
if(inFile.eof())break;
node->next=r->next;
r->next=node;
}
inFile.close();
if(i<2)cout<<"暂时没有图书数据"<}
}
books:
:
savebooks()
{
books_node*L;
L=newbooks_node;
L=broot->next;
ofstreamoutFile;
outFile.open("c:
\\books.dat",ios:
:
binary);
while(L)
{
outFile.write((char*)L,sizeof(books_node));
L=L->next;
}
outFile.close();
}
books:
:
search_book()
{
charsearchedbook[15];
cout<<"输入要查找的书的名子:
";
cin>>searchedbook;
books_node*r;
r=newbooks_node;
r=broot->next;
while(r)
{
if((strcmp(searchedbook,r->book_name))==0)
{
cout<<"书名:
"<book_name<<"书的总量:
"<total_num<<"借出:
"<borrow_num<<"书的编号:
"<book_num<}
r=r->next;
}
if(r==NULL)cout<<"对不起,没有此书"<}
books:
:
print_books()
{
books_node*r;
r=newbooks_node;
r=broot->next;
while(r)
{
cout<<"书名:
"<book_name<<"书的总量:
"<total_num<<"借出:
"<borrow_num<<"书的编号:
"<book_num<r=r->next;
}
deleter;
}
manager:
:
add_book()
{
books_node*L;
L=newbooks_node;
L=broot;
while
(1)
{
books_node*r;
r=newbooks_node;
r->next=NULL;
cout<<"输入书名:
";
cin>>r->book_name;
cout<<"输入书的编号:
";
cin>>r->book_num;
r->borrow_num=0;
cout<<"输入总数:
";
cin>>r->total_num;
r->next=L->next;
L->next=r;
cout<<"addmore?
(n终止,其它键继续)";
charsign;
cin>>sign;
if(sign=='n'||sign=='N')
break;
}
broot=L;
savebooks();
}
manager:
:
delet_book()
{
chardeleted[15];
cout<<"输入要删除的图书名字:
";
cin>>deleted;
books_node*node,*L;
node=newbooks_node;
L=newbooks_node;
node=broot;
while(node->next)
{
if((strcmp(deleted,node->next->book_name))==0)break;
node=node->next;
}
if(node->next==NULL)
{
cout<<"sorry!
Thereisnothebook!
"<}
else
{
if(node->next->borrow_num==0)
{
node->next=node->next->next;
savebooks();
}
else
cout<<"对不起,暂时不能删除,因为还有没有归还的书"<}
}
manager:
:
manager(readers_node*node)
{
rroot=newreaders_node;
rroot=node;
}
manager:
:
savereaders()
{
readers_node*L;
L=newreaders_node;
L=rroot->next;
ofstreamoutFile;
outFile.open("c:
\\Readers.dat",ios:
:
binary);
while(L)
{
outFile.write((char*)L,sizeof(readers_node));
L=L->next;
}
outFile.close();
}
manager:
:
add_reader()
{
readers_node*L;
L=newreaders_node;
L=rroot;
intsign=0;
while
(1)
{
readers_node*r;
r=newreaders_node;
r->next=NULL;
cout<<"输入姓名:
";
cin>>r->reader_name;
cout<<"输入读者的编号:
";
cin>>r->reader_no;
r->reader_borrow_num=0;
r->next=L->next;
L->next=r;
cout<<"addmore?
(n终止,其它键继续)";
charsign;
cin>>sign;
if(sign=='n'||sign=='N')
break;
}
rroot=L;
savereaders();
}
manager:
:
delet_reader()
{
chardeleted[15];
cout<<"输入要删除读者的名字:
";
cin>>deleted;
readers_node*node,*L;
node=newreaders_node;
L=newreaders_node;
node=rroot;
while(node->next)
{
if((strcmp(deleted,node->next->reader_name))==0)break;
node=node->next;
}
if(node->next==NULL)
{
cout<<"sorry!
Thereisnothereader!
"<}
else
{
node->next=node->next->next;
savereaders();
}
}
manager:
:
search_reader()
{
readers_node*r;
r=newreaders_node;
r=rroot->next;
charreader[15];
cout<<"输入要查找读者的姓名:
";
cin>>reader;
while(r)
{
if((strcmp(reader,r->reader_name))==0)
{
cout<<"姓名:
"<reader_name<<"编号:
"<reader_no<<"借书总数:
"<reader_borrow_num<for(inti=0;ireader_borrow_num;i++)
{
cout<<"书名:
"<reader_borrow_book[i].borrow_books_name<<""<<"书的编号:
"<reader_borrow_book[i].borrow_books_no;
}
break;
}
elser=r->next;
}
if(!
r)cout<<"没有此人"<}
manager:
:
print_readers()
{
readers_node*printL;
printL=newreaders_node;
printL=rroot->next;
while(printL)
{
cout<<"姓名编号借书总数"<cout<reader_name<<""<reader_no<<""<reader_borrow_num<for(inti=0;ireader_borrow_num;i++)
{
cout<<"书名:
"<reader_borrow_book[i].borrow_books_name<<""<<"书的编号:
"<reader_borrow_book[i].borrow_books_no;
}
printL=printL->next;
}
deleteprintL;
}
reader:
:
reader(readers_node*node)
{
(personnel)=newreaders_node;
personnel=node;
}
reader:
:
add_book()
{
books_node*node;
node=newbooks_node;
node=broot->next;
charreturned[15];
cout<<"输入要还书的名子:
";
cin>>returned;
for(inti=0;ireader_borrow_num;i++)
{
if((strcmp(returned,personnel->reader_borrow_book[i].borrow_books_name))==0)break;
}
if(i==personnel->reader_borrow_num+1)
{
printf("不好意思,你没有此书");system("pause");
}
else{
while(node)
{
if((strcmp(node->book_name,returned)==0))break;
elsenode=node->next;
}
if(node)
{
personnel->reader_borrow_num--;
node->borrow_num--;
savebooks();
}
elsecout<<"对不起,没有你要还的书或者所还书被删除"<}
}
reader:
:
delet_book()
{
if(personnel->reader_borrow_num{
books_node*node;
node=newbooks_node;
node=broot->next;
charborrowed[15];
cout<<"输入要借书的名子:
";
cin>>borrowed;
while(node)
{
if((strcmp(node->book_name,borrowed)==0))break;
elsenode=node->next;
}
if(node&&(node->total_num-node->borrow_num)>0)
{
strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num].borrow_books_name,node->book_name);
strcpy(personnel->reader_borrow_book[personnel->reader_borrow_num++].borrow_books_no,node->book_num);
node->borrow_num++;
savebooks();
}
elsecout<<"对不起,没有你要借的书或者所要借的书已经借完!
"<}
elsecout<<"对不起,你借书的数量已经超过最大借数量"<}
reader:
:
print_me()
{
cout<<"姓名"<reader_name<<"编号:
"<reader_no<<"借书总数:
"<reader_borrow_num<for(inti=0;ireader_borrow_num;i++)
{
printf("书名:
%s,书的编号:
%s",personnel->reader_borrow_book[i].borrow_books_name,personnel->reader_borrow_book[i].borrow_books_no);
}
}
voidPause()
{
getch();
fflush(stdin);
}
reader:
:
reader_borrow()
{
delet_book();
}
reader:
:
reader_return()
{
add_book();
}
reader:
:
save_readers(readers_node*L)
{
readers_node*root;
root=newreaders_node;
root=L->next;
ofstreamoutFile;
outFile.open("c:
\\Readers.dat",ios:
:
binary);
while(root)
{
outFile.write((char*)root,sizeof(readers_node));
root=root->next;
}
outFile.close();
}
readers_node*read_readers()
{
readers_node*r;
r=newreaders_node;
r->next=NULL;
intflag=0;
ifstreaminFile;
inFile.open("c:
\\Readers.dat",ios:
:
binary);
if(inFile.is_open()==-1)
{
cout<<"con'topenreaders.dat"<}
else
{
while
(1)
{
flag++;
readers_node*node;
node=newreaders_node;
inFile.read((char*)node,sizeof(readers_node));
if(inFile.eof())break;
node->next=r->next;
r->next=node;
}
inFile.close();
if(flag<2)
{
cout<<"暂无读者