c++图书管理系统实验报告和源代码

时间:2024.4.1

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<stdlib.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;

       }

       rroot=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->reader_borrow_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(personnel->reader_borrow_book[personnel->reader_borrow_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;

       }

       outFile.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;

              cerr<<"\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(name,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<<"┃③查找书                                                    ┃\n";

                     cout<<"┃ ④.输出所有                                                ┃\n";

            cout<<"┃ ⑤自身信息                                                 ┃\n";

                     cout<<"┃退出请按0                                                   ┃\n";

                     cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";

                     cout<<"请输入您的选择(0--5):( )\b\b";

                     cin>>N;

                     switch (N)

                     {

                     case 1: system("cls") ;Reader.reader_borrow();Reader.save_readers(L);break;

                     case 2:     system("cls"); Reader.reader_return();Reader.save_readers(L);break;

                     case 3: system("cls");Reader.search_book();system("pls");break;

                     case 4: system("cls");Reader.print_books();getch();break;

                     case 5: system("cls");Reader.print_me(); Pause();break;

                     case 0:  return;

                     }

                     system("cls");

                    

              }

       }

       else

       {

              printf("没有这个用户!按任意键继续");

              getch();

              return;

       }    

}

main()

{

readers_node* Reader_root;

Reader_root=new readers_node;

Reader_root=read_readers();

int N;

while(1)

       {            system("cls");

              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:  manager_menu(Reader_root);break;

              case 2:     reader_menu(Reader_root);break;

              case 0:exit(0);break;

              }

       }

}

更多相关推荐:
图书管理系统 实验报告

需求分析本图书管理系统就是将传统图书馆业务的手工操作转变成由计算机馆理即图书馆的图书期刊音像资料等各种载体文献的采编典藏流通检索及常规业务管理等工作利用计算机技术使得图书馆的管理更智能更有效的进行最终的目的以方...

(图书管理系统)学生实验报告

学生实验报告实验课名称软件工程理论方法与实践实验项目名称图书管理系统专业名称软件工程班学级240600804号2406080426学生姓名宋辉教师姓名杜瑾年月实验日期20xx年5月14日实验室名称WM2502一...

图书管理系统实验报告+源代码

图书信息管理系统课程设计图书信息管理系统设计人员林俊柱开发环境eclipse数据库sqlserver20xx说明数据库里面的用户名为sa密码为1111登录程序所用的用户名为ljz密码为0000当然也可以使用注册...

图书管理系统实训报告

淮南联合大学计算机系课程实训报告书实训科目:图书管理系统专业班级:11级计算机应用技术学号:**姓名:**实训时间:20**-12-18一、课程实训目的《JAVAWeb开发》课程实训是计算机应用技术专业集中实践…

图书管理系统课程设计报告

管理信息系统实习报告专业班级学生姓名指导教师时间成绩评语王桃群20xx32320xx313一课程设计题目图书管理系统二系统需求1系统的准备操作系统Windowsxp数据库系统SQLServer20xx或SQLS...

c语言图书管理系统课程设计报告

沈航北方科技学院课程设计说明书课程名称教学部专业数控班级B042111学号B04211123学生姓名指导教师赵小磊20xx年6月链表实现图书信息操作田文目录摘要31绪论32系统分析321功能需求322数据需求4...

图书管理系统数据库课程设计实验报告

西安邮电大学计算机学院数据库课程设计报告题目图书管理系统专业名称班级软件1205学生姓名学号8位04123139指导教师樊珊起止时间20xx年06月02日20xx年06月13日目录第一章需求分析1学生用户端2教...

图书管理系统java课程设计报告

滨江学院Java程序设计实习课程设计题目图书管理系统学生姓名张立檑学号20xx2346035院系滨江学院专业年级11网络工程1指导教师二一三年6月20日沈阳工程学院课程设计报告目录目录第1章引言1第2章系统功能...

c++图书管理系统实验报告和源代码

综合实践报告课程名称程序设计综合实训设计题目图书管理系统姓名学号专业班级指导老师完成日期1综合实践报告1设计任务11设计目的运用所学知识完成图书馆管理系统通过实践加强对所学知识的理解和巩固12设计内容建立图书馆...

C++大作业 图书管理系统 实验报告

题目:学生成绩管理系统目录一设计目的.1二大作业的内容........................................2三大作业的要求与数据...........................…

图书管理系统 程序实验报告

课程设计报告书图书管理系统程序实践报告1.概述1)程序实践题目:图书管理系统1、具有新进图书基本信息的录入、已有信息的修改、撤销图书信息的删除功能。2、图书信息的查询(按作者名、专业领域检索,找出某读者的借阅信…

图书管理系统分析实验报告

学生实验报告书实验课程名称开课学院指导教师姓名学生姓名管理信息系统XX学院XXX学生专业班级XXXXXX200X200X学年第X学期

图书管理系统实验报告(27篇)