资源描述
课程名称:
程序设计综合实训
设计题目:
图书管理系统
姓 名:
学 号:
专业班级:
指导老师:
完成日期:
1 设计任务
1.1 设计目标
利用所学知识,完成图书馆管理系统,经过实践加强对所学知识了解和巩固
1.2设计内容
建立图书馆管理系统,用户分为图书管理人员,读者。管理人员能够增加删除查看图书、读者。读者只能查看本身信息,和借还书
1.3设计指标或要求
管理人员能够访问任意图书和读者,而读者只能借还图书馆存在图书和查看自己信息。
2 设计过程
分析:因为管理系统用户有图书管理员和读者,但二者权限不一样,管理员有权访问全部图书信息和管理员信息,而读者只能访问全部图书信息和本身信息。所以她们相同点:全部能访问全部图书信息
不一样点:管理员能访问全部读者信息而管理员只能访问本身信息而不能访问其它读者信息;故此设计了三个类
程序包含三个类:图书类(books),管理员类(manager),读者类reader,books类为抽象类,manager,和reader类为books类派生类。为了能让管理员和读者访问全部图书信息,全部全部继承了books类;而为了分出二者权限不一样,所以把全部读者信息做为一个链表作为管理员一个私有组员,而读者却只能放一个本身节点作为读者私有组员,然后分别设计各个类组员函数。
2.1 程序功效
Class books ///虚基类
{
protected:
books_node *broot;
public:
books();//结构函数
savebooks();//保留修改内容
search_book();//查找某一本书
print_books();//输出全部书信息
virtual add_book()=0;//对于读者是还书,对于管理员添加书
virtual delet_book()=0;//对于读者是借书,对于管理员是去掉某一本书
};
Class manager:public books //管理员类
{
protected:
readers_node *rroot;
public:
manager(readers_node*);
savereaders();
add_book();//添加图书信息
delet_book();//删除图书
search_reader();//查找读者信息
add_reader();//添加读者
delet_reader();//删除读者
print_readers();//输出全部读者
};
class reader:public books{//读者类
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<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#define max 3
typedef struct Books{
char book_name[15];
int total_num;
int borrow_num;
char book_num[15];
Books *next;
}books_node;
typedef struct Readers{
char reader_name[15];
char reader_no[15];
int reader_borrow_num;
struct Reader_borrow_books{
char borrow_books_name[15];
char borrow_books_no[15];
}reader_borrow_book[max];
Readers *next;
}readers_node;
class books {
protected:
books_node *broot;
public:
books();
savebooks();
search_book();
print_books();
virtual add_book()=0;
virtual delet_book()=0;
};
class manager:public books
{
protected:
readers_node *rroot;
public:
manager(readers_node*);
savereaders();
add_book();
delet_book();
search_reader();
add_reader();
delet_reader();
print_readers();
};
class reader:public books{
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=new books_node;
r=new books_node;
r->next=NULL;
broot=r;
ifstream inFile;
inFile.open("c:\\books.dat",ios::binary);
if(inFile.is_open()==-1)cout<<"con't open books.dat"<<endl;
else
{
int i=0;
while(1)
{
i++;
books_node *node;
node=new books_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<<"临时没有图书数据"<<endl;
}
}
books::savebooks()
{
books_node *L;
L=new books_node;
L=broot->next;
ofstream outFile;
outFile.open("c:\\books.dat",ios::binary);
while(L)
{
outFile.write((char*)L,sizeof(books_node));
L=L->next;
}
outFile.close();
}
books::search_book()
{
char searchedbook[15];
cout<<"输入要查找书名子:";
cin>>searchedbook;
books_node *r;
r=new books_node;
r=broot->next;
while(r)
{
if((strcmp(searchedbook,r->book_name))==0)
{
cout<<"书名:"<<r->book_name<<" 书总量:"<<r->total_num<<" 借出:"<<r->borrow_num<<" 书编号:"<<r->book_num<<endl;break;
}
r=r->next;
}
if(r==NULL)cout<<"对不起,没有此书"<<endl;
}
books::print_books()
{
books_node *r;
r=new books_node;
r=broot->next;
while(r)
{
cout<<"书名:" <<r->book_name<<" 书总量:"<<r->total_num<<" 借出:"<< r->borrow_num <<" 书编号:"<<r->book_num<<endl;
r=r->next;
}
delete r;
}
manager::add_book()
{
books_node *L;
L=new books_node;
L=broot;
while(1)
{
books_node *r;
r=new books_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<<"add more?(n终止,其它键继续)";
char sign;
cin>>sign;
if(sign=='n'||sign=='N')
break;
}
broot=L;
savebooks();
}
manager::delet_book()
{
char deleted[15];
cout<<"输入要删除图书名字:";
cin>>deleted;
books_node *node,*L;
node=new books_node;
L=new books_node;
node=broot;
while(node->next)
{
if((strcmp(deleted,node->next->book_name))==0)break;
node=node->next;
}
if(node->next==NULL)
{
cout<<"sorry!There is no the book!"<<endl;
}
else
{
if(node->next->borrow_num==0)
{
node->next=node->next->next;
savebooks()
}
else
cout<<"对不起,临时不能删除,因为还有没有归还书"<<endl;
}
}
manager::manager(readers_node*node)
{
rroot=new readers_node;
rroot=node;
}
manager::savereaders()
{
readers_node *L;
L=new readers_node;
L=rroot->next;
ofstream outFile;
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=new readers_node;
L=rroot;
int sign=0;
while(1)
{
readers_node *r;
r=new readers_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<<"add more?(n终止,其它键继续)";
char sign;
cin>>sign;
if(sign=='n'||sign=='N')
break;
}
root=L;
savereaders();
}
manager::delet_reader()
{
char deleted[15];
cout<<"输入要删除读者名字:";
cin>>deleted;
readers_node node,*L;
node=new readers_node;
L=new readers_node;
node=rroot;
while(node->next)
{
if((strcmp(deleted,node->next->reader_name))==0)break;
node=node->next;
}
if(node->next==NULL)
{
cout<<"sorry!There is no the reader!"<<endl;
}
else
{
node->next=node->next->next;
savereaders();
}
}
manager::search_reader()
{
readers_node *r;
r=new readers_node;
r=rroot->next;
char reader[15];
cout<<"输入要查找读者姓名:";
cin>>reader;
while(r)
{
if((strcmp(reader,r->reader_name))=0)
{
cout<<"姓名:"<<r->reader_name<<" 编号:"<<r->reader_no<<" 借书总数:"<<r->reader_borrow_num<<endl;
for(int i=0;i<r->reader_borrow_num;i++)
{
cout<<"书名:"<<r->reader_borrow_book[i].borrow_books_name<<" "<<"书编号:"<<r->reader_borrow_book[i].borrow_books_no;
}
break;
}
else r=r->next;
}
if(!r)cout<<"没有此人"<<endl;
}
manager::print_readers()
{
readers_node printL;
printL=new readers_node;
printL=rroot->next;
while(printL)
{
cout<<"姓名 编号 借书总数"<<endl;
cout<<printL->reader_name<<" "<<printL->reader_no<<" "<<printL->reader_borrow_num<<endl;
for(int i=0;i<printL->reader_borrow_num;i++)
{
cout<<"书名:"<<printL->reader_borrow_book[i].borrow_books_name<<" "<<"书编号:"<<printL->reader_borrow_book[i].borrow_books_no;
}
printL=printL->next;
}
delete printL;
}
reader::reader(readers_node*node)
{
(personnel)==new readers_node;
personnel=node;
}
reader::add_book()
{
books_node*node;
node=new books_node;
node=broot->next;
char returned[15];
cout<<"输入要还书名子:";
cin>>returned;
for(int i=0;i=personnel->reader_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;
else node=node->next;
}
if(node)
{
personnel->reader_borrow_num--;
node->borrow_num--;
savebooks();
}
else cout<<"对不起,没有你要还书或所还书被删除"<<endl;
}
}
reader::delet_book()
{
if(personnel->readerborrow_num<max)
{
books_node*node;
node=new books_node;
node=broot->next;
char borrowed[15];
cout<<"输入要借书名子:";
cin>>borrowed;
while(node)
{
if((strcmp(node->book_name,borrowed)==0))break;
else node=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(personel->reader_borrow_book[personnel->reader_borrw_num++].borrow_books_no,node->book_num);
node->borrow_num++;
savebooks();
}
else cout<<"对不起,没有你要借书或所要借书已经借完!"<<endl;
}
else cout<<"对不起,你借书数量已经超出最大借数量"<<endl;
}
reader::print_me()
{
cout<<"姓名"<<personnel->reader_name<<" 编号:"<<personnel->reader_no<<" 借书总数:"<<personnel->reader_borrow_num<<endl;
for(int i=0;i<personnel->reader_borrow_num;i++)
{
printf("书名:%s,书编号:%s",personnel->reader_borrow_book[i].borrow_books_name,personnel->reader_borrow_book[i].borrow_books_no)
}
}
void Pause()
{
getch();
fflush(stdin);
}
reader::reader_borrow()
{
delet_book();
}
reader::reader_return()
{
add_book();
}
reader::save_readers(readers_node *L)
{
readers_node *root;
root=new readers_node;
root=L->next;
ofstream outFile;
outFile.open("c:\\Readers.dat",ios::binary);
while(root)
{
outFile.write((char)root,sizeof(readers_node));
root=root->next;
}
outFle.close();
}
readers_node* read_readers()
{
readers_node *r;
r=new readers_node;
r->next=NULL;
int flag=0;
ifstream inFile;
inFile.open("c:\\Readers.dat",ios::binary);
if(inFile.is_open()==-1)
{
cout<<"con't open readers.dat"<<endl;return r;
}
else
{
while(1)
{
flag++;
readers_node *node;
node=new readers_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<<"暂无读者 "<<endl; return r;
}
else
return r;
}
}
password()
{
system("cls");
char a[]="111111",b[10],c;int n=0,k;
cerr<<"\n\n\n\n\t\t\t请输入密码,你将拥有3次机会:\n";
while(1)
{
n++;
k=0;
cout<<"\t\t\t输入密码:";
while(1)
{
c=getch();
if(c==13)break;
b[k]=c;k++;
cerr<<"*";
}
b[k]='\0';
cout<<"\n";
if(n>2)
{
printf("你已经超出输入次数,系统将退出\n");
getch();
}
if(strcmp(a,b)==0)break;
else cout<<"密码错误,请重新输入\n";
cerr<<"\n";
}
}
void manager_menu_1(manager M)
{
int N;
while(1)
{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┃ 图书管图书管理系统 ┃\n";
cout<<"┃ 菜单 ┃\n";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"┃①增加图书 ┃\n";
cout<<"┃ ②.删除图书 ┃\n";
cout<<"┃ ③.查找图书 ┃\n";
cout<<"┃ ④.输出全部 ┃\n";
cout<<"┃ 退出请按0 ┃\n";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
cout<<"请输入您选择(0--4):( )\b\b";
cin>>N;
switch (N)
{
case 1: M.add_book();getch();break;
case 2: M.delet_book();getch();break;
case 3: M.search_book();getch();break;
case 4: M.print_books();getch();break;
case 0: return;
}
system("cls");
}
}
void manager_menu_2(manager M)
{
int N;
while(1)
{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┃ 图书管图书管理系统 ┃\n";
cout<<"┃ 菜单 ┃\n";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"┃①增加读者 ┃\n";
cout<<"┃ ②删除读者 ┃\n";
cout<<"┃③查找读者 ┃\n";
cout<<"┃④输出全部 ┃\n";
cout<<"┃ 退出请按0 ┃\n";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
cout<<"请输入您选择(0--4):( )\b\b";
cin>>N;
switch (N)
{
case 1: M.add_reader();getch();break;
case 2: M.delet_reader();getch();break;
case 3: M.search_reader();getch();break;
case 4: M.print_readers();getch();break;
case 0: return;
}
system("cls");
}
}
void manager_menu(readers_node*L)
{
system("cls");
password();
manager manager(L);
int N;
while(1)
{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┃ 图书管图书管理系统 ┃\n";
cout<<"┃ 菜单 ┃\n";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"┃①图书维护 ┃\n";
cout<<"┃②读者维护 ┃\n";
cout<<"┃退出请按0 ┃\n";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
cout<<"请输入您选择(0--2):( )\b\b";
cin>>N;
switch (N)
{
case 1: system("cls"); manager_menu_1(Manager); break;
case 2: system("cls"); manager_menu_2(Manager);break;
case 0: return;
}
system("cls");
}
}
reader_menu(readers_node*L)
{
char name[15];
cout<<"输入用户名:";
cin>>name;
readers_node* node;
node=new readers_node;
node=L->next;
while(node)
{
if((strcmp(nome,node->reader_name))==0)
break;
else
node=node->next;
}
if(node)
{
reader Reader(node);
int N;
while(1)
{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<"┃图书管图书管理系统 ┃\n";
cout<<"┃ 菜单 ┃\n";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
cout<<"┃①借书 ┃\n";
cout<<"┃ ②还书 ┃\n";
cout<<"┃③查找书
展开阅读全文