IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 图书管理系统【C++】 -> 正文阅读

[C++知识库]图书管理系统【C++】

图书借阅管理系统【C++】

一.需求分析

本系统旨在实现一个小型的图书管理系统,对于一个小型的图书馆或藏书室
来说,实施本系统不仅可以减少工作人员数量,降低成本,而且可以大大提高工
作效率,降低工作强度,方便读者借书查书及办理各种手续,更方便工作人员对
图书进行更有效的管理。
程序主要实现读者管理、图书基本信息及库存管理、图书借还管理以及一些
辅助功能等。

二.程序主要功能

该程序的主要功能有:
读者功能
可进行读者注册、登录查看、修改密码、注销读者、清除全部及查看帮助等操作。
其中登录时要输入姓名密码。
图书信息管理
可以进行查找图书、添加新书、删除图书、清空全部、修改、显示全部在架书等操作。
其中添加内容包括:书名、ISBN 编号、作者、出版商、出版日期及内容简介、
是否在架,方便读者根据不同需要进行查找、查看;
图书借还功能
应该说这是整个系统最主要的功能,用户需先登录,借还时要输入 ISBN 号
(查看图书时要记住 ISBN 号,这是根据实际情况)。
帮助
暂时没有帮助,balabala…
退出系统
运行时将从文件中载入信息,运行后再将信息输入文件。
运行程序后每一步都会有详细的提示,操作简便,大多数地方都考虑到防止
用户出现误操作的情况,以提高程序的健壮性,可以放心使用!

三.程序运行平台

程序语言:C++
运行平台:Visual Studio Code

四、程序框架

在这里插入图片描述

五、文件说明(*度 网 盘 链接,永久有效)

链接:https://pan.baidu.com/s/170Dj_LS25gyUdd5b3U5ZnA
提取码:m1kv

  1. Library management system.cpp
    C++源代码
  2. book.csv
    存放图书 小规模数据
  3. small.csv
    存放图书 小规模数据
  4. reader.csv
    存放读者数据

六、程序代码

Library management system.cpp

//作者:子衿JDD
//时间:2022年1月
#include <string.h>
#include <fstream>
#include<iomanip>
#include <iostream>
#include<string.h>
using namespace std;
class Reader							//存储读者信息的类
{
public: 
	char ReaderName[50];				//读者姓名
	char Password[50];					//密码
	char book1[30], book2[30];			//每人最多借两本书,可以根据需要增减限额,book储存ISBN号
	int y_n;							//记录借的书的数目,0 为没有借书,1 为借了一本,2 为借了二本
	Reader *next;						//指向下一节点的指针
};
/****读者类链表****/
class ReaderList {						//表明链表中的第几个节点
public:
	static Reader * point, *head_point;		//定义两个 Rreader 指针,head_point 为头指针,point 为活动指针
 	static int o;
	ReaderList()						//构造函数,使指针初始化
	{
		head_point = new Reader[sizeof(Reader)];
		 point = new Reader[sizeof(Reader)];
		strcpy(head_point->ReaderName,"0");
		head_point->next = NULL;
		point->next = NULL;
		o = 0;//读者数量
	} 
	static void save_readerfile()					//存储文件,存在链表里 
	{
		string r1,r2,r3,r4;
		fstream file;
		Reader *p;
		p=  new Reader[sizeof(Reader)];
		file.open("library//reader.csv",ios::in | ios::out);
		if(!file)
		{
			cout<<"reader.csv not open file"<<endl;
		}
		getline(file,r1,',');
		strcpy(p->ReaderName,&r1[0]);
		strcpy(head_point->ReaderName,&r1[0]);
		getline(file,r2,',');
		strcpy(p->Password,&r2[0]);
		strcpy(head_point->Password,&r2[0]);
		getline(file,r3,',');
		strcpy(p->book1,&r3[0]);
		strcpy(head_point->book1,&r3[0]);
		getline(file,r4,'\n');
		strcpy(p->book2,&r4[0]);
		strcpy(head_point->book2,&r4[0]);
		point =head_point; 
		while(!file.eof())
		{
			p=  new Reader[sizeof(Reader)];
			getline(file,r1,',');
			if(r1=="")//增强鲁棒性,如果文件被换行,最后一行为空,不加的话会最后一个节点错误
			{
				break;
			}
			strcpy(p->ReaderName,&r1[0]);
			getline(file,r2,',');
			strcpy(p->Password,&r2[0]);
			getline(file,r3,',');
			strcpy(p->book1,&r3[0]);
			getline(file,r4,'\n');
			strcpy(p->book2,&r4[0]);
			p->next=NULL;
			point->next = p;
			point = p;
			o++;
		} 
		file.close();
		delete p;
	}
	static void load_readerfile()					//上传文件
	{
		Reader *q;
		q = head_point;
		fstream file;
		file.open("library//reader.csv",ios::in | ios::out|ios::trunc);
		if(!file)
		{
			cout<<"reader.csv not open file"<<endl;
		}
		while(q!=NULL)
		{
			file<<q->ReaderName<<","<<q->Password<<","<<q->book1<<","<<q->book2<<endl;
			q = q->next ;
		} 
		file.close();
	}
	static Reader* reader_register()					//读者注册
	{
		string n1,n2;	
		Reader *nw; 
		nw = new Reader[sizeof(Reader)];
		cout<<"姓名(不能超过50个字符):"<<endl;
		cin >>setw(50)>>n1;
		//设置名字长度不能超过50
		cout<<"密码:"<<endl;
		cout<<"密码(不能超过50个字符):"<<endl;
		//设置密码长度不能超过50
		cin >> n2;
		strcpy(nw->ReaderName,&n1[0]);
		strcpy(nw->Password,&n2[0]);
		strcpy(nw->book1," ");
		strcpy(nw->book2," ");
		nw->next = NULL;
		return nw;
	}
	static void Add_Point(Reader * p)				//增加新结点到链表
	{
		save_readerfile();
		if(head_point==NULL)
		{
			head_point=p;
		}
		else
		{
			point=head_point;
			while(point->next!=NULL)
			{
				point=point->next;
			}
			point->next=p;
		}
		Reader *q;
		string r1,p1,b1,b2;
		q = head_point;
		fstream file;
		file.open("library//reader.csv",ios::in | ios::out);
		if(!file)
		{
			cout<<"reader.csv not open file"<<endl;
		}
		while(q!=NULL)
		{
			file<<q->ReaderName<<","<<q->Password<<","<<q->book1<<","<<q->book2<<endl;
			// cout<<q->ReaderName<<","<<q->Password<<","<<q->book1<<","<<q->book2<<endl;
			q = q->next ;
		} 
		file.close();
	}
	static Reader* reader_land()						//读者登录
	{
		string readername,readerpass;
		cout<<"请输入您的姓名:"<<endl;
		cin >> readername;
		point=head_point->next;
		while(point!=NULL)
		{
			if(strcmp(point->ReaderName,&readername[0])==0)//查找用户
			{
				cout<<"请输入您的密码:";
				cin>> readerpass;
				if(strcmp(point->Password,&readerpass[0])==0)//核验密码
				{
					cout<<"登录成功!"<<endl; 
					return point;//返回用户指针
				}
				else
				{
					cout<<"密码错误!"<<endl; 
					return NULL;//返回空
				} 
			}
			point=point->next;//下一个
		}
		if(point==NULL)
		{
			cout<<"该用户不存在!  您可以先注册,再试试^_^"<<endl; 
		}
		return NULL;
	}
	static void show_OneReader(Reader *p)		//显示某读者信息
	{
		if(p==NULL)
		{
			return;
		}
		cout << "***********************************************" << endl;
		cout <<"姓名"<<"\t"<<p->ReaderName <<endl;
		cout <<"第一本书的ISBN号:"<<"\t"<<p->book1 <<endl;
		cout <<"第二本书的ISBN号:"<<"\t"<<p->book2 <<endl;
	}
	static void show_all()
	{
		Reader *q;
		q = head_point;
		while(q!=NULL)
		{
			cout<<q->ReaderName<<","<<q->Password<<","<<q->book1<<","<<q->book2<<endl;
			q = q->next ;
		} 
	}
	static void change_password(Reader *p)					//修改密码
	{
		if(p==NULL)
		{
			return;
		}
		Reader *point;
		point = head_point;	
		while(strcmp(point->ReaderName ,p->ReaderName)!=0)
		{
			point=point->next;//在链表中找到登录用户
		}
		string n2;
		cout<<"请输入新的密码:"<<endl;
		cin>>n2;
		strcpy(point->Password,&n2[0]);
		load_readerfile();
		cout<<"更改成功!"<<endl; 
	}
		 
	static void delete_reader(Reader *p)					//读者注销
	{
		if(p==NULL)
		{
			return;
		}
		Reader *q;//协助point指针,在p->next=point
		point = head_point;	
		q = point;
		point = point->next;
		while((strcmp(point->ReaderName ,p->ReaderName)!=0)&&point!=NULL)
		{
			q=point;
			point=point->next;
		}
		q->next=point->next;
		delete point;
		load_readerfile();
		cout<<"注销成功!"<<endl; 
		o=o-1;//读者人数减一
	}

	static void delete_readers()					//清空全部读者信息
	{
		cout<<"确定全部删除吗? 请谨慎删除,确定请按1,否则请按其他键."<<endl;
		char h;
		cin>>h;
		if(h=='1')
		{
			Reader *p,*q;
			p = head_point->next;
			while(p!=NULL)
			{
				q=p;
				p=p->next ; 
				free(q);
			}
			head_point->next=NULL;
			load_readerfile();
			cout<<"已经成功清空全部读者信息!"<<endl;
		} 
		else
		{
			return;
		}
	}
	static void help()
	{
		cout<<"暂时没有帮助,BALABALABALA"<<endl; 
	 } 
	static void GoInto_ReaderInfo()				//读者信息菜单
	{
		char i;
		save_readerfile();
		do
		{
			cout << "***********************************************" << endl;
	 		cout << "*               读  者  功  能                *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               1.登录查看                    *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               2.注册                        *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               3.注销                        *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               4.修改密码                    *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               5.查看全部读者信息#            *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               6.清空全部读者信息#            *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               7.帮助说明                    *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               0.返回上一层                  *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "***********************************************" << endl;
			cout<<"#号为管理员功能,需要登录管理员账号<(ˉ^ˉ)> "<<endl;
			cout <<"请输入相应功能代号:"<<endl; 
			
			cin >> i;
			Reader *p;
			
	  		switch (i)
	  		{
	  			case '1'://登录查看 
	  				p = reader_land();
				  	show_OneReader(p);
	   				break;
	  			case '2'://注册
	   				p = reader_register();
	   				Add_Point(p);
	   				cout<<"注册成功"<<endl; 
					break;
	   			case '3'://注销
				   	cout<<"先登录要注销的账号,以确定是本人"<<endl;
				    p = reader_land();
	   				delete_reader(p);
					break;
				case '4'://修改密码
					cout<<"先登录要修改密码的账号,以确定是本人"<<endl;
					p = reader_land();
					change_password(p);	
					break;
	  			case '5':
				  	cout<<"请先登录管理员的账号,再进行操作"<<endl;
					p = reader_land();
					if((p==NULL)||strcmp(p->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
	  				show_all();
	  				break;
	  			case '6': 
				  	cout<<"请先登录管理员的账号,再进行操作"<<endl;
					p = reader_land();
					if((p==NULL)||strcmp(p->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
	  				delete_readers();
					break; 
				case '7':
	  				help();
	  				break;
	  			case '0':
	  				break;
	  			default:cout << "输入错误,请重新输入。" << endl;
	  		}
	  	}while(i!='0');
	
	} 
};
Reader* ReaderList::head_point=new Reader[sizeof(Reader)];//读者头节点
Reader* ReaderList::point=new Reader[sizeof(Reader)];//临时读者节点
int ReaderList::o=1 ;

class Book						//存储图书信息的类
{
public:
	char *BookName;			    //书名,用于查找	
	char *Writer;			    //作者名,用于查找
	char PublishDate[20];		//出版日期,用于查找
	char ISBN[30];				//ISBN 号,用于查找
	char ebook[2];				//电子书 
	char paperbook[2];			//纸质书  
	char *Publisher;		    //出版商,用于查找
	char *BriefIntroduction;    //该书内容简介
	int i_o;					//判断书是否借出,0 为在架,1 为借出
	Book *next;					//指向下一个节点的指针
};
/****书库类链表****/
class BookList {
public:
	static Book * node;
	static Book *head_ptr ;//定义两个 Book 指针,head_ptr 为头指针,node\p 为活动指针
	static int n;	
	BookList() 
	{								 //构造函数,使指针初始化
		node = new Book[sizeof(Book)];    //存放书的信息
		head_ptr = new Book[sizeof(Book)];
		head_ptr->next = NULL;
		node->next = NULL;
	}
	static void save_file()					//存储文件
	{
		Book *p;           //临时节点
	    fstream file;
		string s1,s2,s3,s4,s5,s6,s7,s8,s9;
		char a1[1000];
		file.open("library//book.csv",ios::in | ios::out);
		if(!file)
		{
			cout<<"[save_file] book.csv not open file"<<endl;
			return;
		}
		getline(file,s1,',');
		head_ptr->BookName=new char[strlen(s1.c_str())+1];
		strcpy(head_ptr->BookName,s1.c_str());
		getline(file,s2,',');
		head_ptr->Writer=new char[strlen(s2.c_str())+1];
		strcpy(head_ptr->Writer,s2.c_str());
		getline(file,s3,',');
		strcpy(head_ptr->PublishDate,&s3[0]);
		getline(file,s4,',');
		strcpy(head_ptr->ISBN,&s4[0]);
		getline(file,s5,',');
		strcpy(head_ptr->ebook,&s5[0]);
		getline(file,s6,',');
		strcpy(head_ptr->paperbook,&s6[0]);
		getline(file,s7,',');
		head_ptr->Publisher=new char[strlen(s7.c_str())+1];
		strcpy(head_ptr->Publisher,s7.c_str());
		getline(file,s8);
		head_ptr->BriefIntroduction=new char[strlen(s8.c_str())+1];
		strcpy(head_ptr->BriefIntroduction,s8.c_str());
		node = head_ptr;
		while(!file.eof())
		{
			p = new Book[sizeof(Book)];
			getline(file,s1,',');
			if(s1=="")//增强鲁棒性,如果文件被换行,最后一行为空,不加的话会最后一个节点错误
			{
				break;
			}
			p->BookName=new char[strlen(s1.c_str())+1];
			strcpy(p->BookName,s1.c_str());
			getline(file,s2,',');
			p->Writer=new char[strlen(s2.c_str())+1];
			strcpy(p->Writer,&s2[0]);
			getline(file,s3,',');
			strcpy(p->PublishDate,&s3[0]);
			getline(file,s4,',');
			strcpy(p->ISBN,&s4[0]);
			getline(file,s5,',');
			strcpy(p->ebook,&s5[0]);
			getline(file,s6,',');
			strcpy(p->paperbook,&s6[0]);
			getline(file,s7,',');
			p->Publisher=new char[strlen(s7.c_str())+1];
			strcpy(p->Publisher,&s7[0]);
			getline(file,s8,'\n');
			p->BriefIntroduction=new char[strlen(s8.c_str())+1];
			strcpy(p->BriefIntroduction,&s8[0]);
			p->next=NULL;
			node -> next= p; 
			node = p;
			// j++;
			n++;//书的数量
			//  cout<<"书的数量: "<<n<<endl;
		}
		file.close();
		delete p;
	}
	static void load_file()					//上传文件
	{
		Book *q;
		q = head_ptr;
		fstream file;
		file.open("library//book.csv",ios::in | ios::out|ios::trunc);
		if(!file)
		{
			cout<<"[load_file] book.csv not open file"<<endl;
		}
		while(q!=NULL)
		{
			file<<q->BookName<<","<<q->Writer<<","<<q->PublishDate<<","<<q->ISBN<<","<<q->ebook<<","<<q->paperbook<<","<<q->Publisher<<","<<q->BriefIntroduction<<endl;
			q = q->next ;
		} 
		file.close();
	}
	static Book* AddNewBook()					//新书登记,对 node 指向的类对象赋值
	{
		string n1,n2,n3,n4,n5,n6,n7,n8;	
		Book *nw; 
		nw = new Book[sizeof(Book)];
		cout<<"请输入新书的以下信息:"<<endl;
		cout<<"书名:"<<endl;
		cin>>n1;
		cout<<"作者名:"<<endl;
		cin>>n2;
		cout<<"出版日期:"<<endl;
		cin>>n3;
		cout<<"ISBN 号:"<<endl;	
		cin>>n4;
		cout<<"电子书(0 为在架,1 为借出):"<<endl;
		cin>>n5;
		cout<<"纸质书(0 为在架,1 为借出):"<<endl;
		cin>>n6;
		cout<<"出版商:"<<endl;
		cin>>n7;
		cout<<"内容简介:"<<endl;
		cin>>n8;
		nw->BookName=new char[strlen(n1.c_str())+1];
		nw->Writer=new char[strlen(n2.c_str())+1];
		nw->Publisher=new char[strlen(n7.c_str())+1];
		nw->BriefIntroduction=new char[strlen(n8.c_str())+1];
		strcpy(nw->BookName,n1.c_str());
		strcpy(nw->Writer,&n2[0]);
		strcpy(nw->PublishDate,&n3[0]);
		strcpy(nw->ISBN,&n4[0]);
		strcpy(nw->ebook,&n5[0]);
		strcpy(nw->paperbook,&n6[0]);
		strcpy(nw->Publisher,&n7[0]);
		strcpy(nw->BriefIntroduction,&n8[0]);
		nw->next = NULL;
		n=n+1;
		return nw;
	}
	static  void Add_list(Book * p)			//增加结点到 Book 链表中,用于添加新书时
	{ 		
		node = head_ptr;
		while(node->next!=NULL)//找到尾节点
		{
			node=node->next;
		}
		node->next = p;//从尾部接上新节点
		node = p;
		p->next=NULL;//最后置空
		load_file();//更新文件
	}
	static void borrow_book(Reader *p)				//借书手续
	{
		Book *n;
		if (strcmp(p->book1," ")!=0 &&strcmp(p->book2 ," ")!=0)           //借书
	 	{
	 		cout<<"您已经借过2本了,不能借书了,可以先还书再借书。"<<endl;
	 	}
	 	else if(strcmp(p->book1," ")==0)
	 	{
			//找书
			n = search_ISBN(); 
			//电子书随便借,纸质书只能借两本
			cout<<"只记录纸质书借阅记录,电纸书不占用借书名额,请自行下载查看!"<<endl;
			if(strcmp(n->paperbook,"0")==0)
			{
				cout<<"《"<<n->BookName<<"》纸质书可借阅"<<endl;
				cout<<"确认借阅《"<<n->BookName<<"》纸质书吗?(确认请按1,否则按其他任意键)"<<endl;
				char temp;
				cin>>temp;
				if(temp=='1')
				{
					strcpy(p->book1,n->ISBN);//记录借的书的ISBN号
					strcpy(n->paperbook,"1");//书借出去,0->1,说明不在架了
					ReaderList::load_readerfile();//更新用户信息
					BookList::load_file();//更新书库信息
					cout<<"借书成功!!"<<endl;
				}
			}
			else
			{
				cout<<"无《"<<n->BookName<<"》的纸质书"<<endl;
			}//如果要借20本书,可以把book串成链表,有点麻烦
		}
		else if(strcmp(p->book2," ")==0)
	 	{
			//找书
			n = search_ISBN();
			//电子书随便借,纸质书只能借两本
			cout<<"只记录纸质书借阅记录,电纸书不占用借书名额,请自行下载查看!"<<endl;
			if(strcmp(n->paperbook,"0")==0)
			{
				cout<<"《"<<n->BookName<<"》纸质书可借阅"<<endl;
				cout<<"确认借阅《"<<n->BookName<<"》纸质书吗?(确认请按1,否则按其他任意键)"<<endl;
				char temp;
				cin>>temp;
				if(temp=='1')
				{
					strcpy(p->book2,n->ISBN);//记录借的书的ISBN号
					strcpy(n->paperbook,"1");//书借出去,0->1,说明不在架了
					ReaderList::load_readerfile();//更新用户信息
					BookList::load_file();//更新书库信息
					cout<<"借书成功!!"<<endl;
				}
			}
			else
			{
				cout<<"无《"<<n->BookName<<"》的纸质书"<<endl;
			}
		}
		else
		{
			cout<<"借书失败"<<endl;
		}
	}
	static void return_book(Reader *p)				//还书手续
	{
		cout << "***********************************************" << endl;
		cout <<"姓名"<<"\t"<<p->ReaderName <<endl;
		cout <<"book1"<<"\t"<<p->book1 <<endl;
		cout <<"book2"<<"\t"<<p->book2 <<endl;
  		cout<<"还书book1(按1),还书book2(按2),"<<endl;
  		char hua;
  		cin>>hua;
		Book *u; 
  		if(hua=='1'&&p->book1!=" ")
  		{	
			u=BookList::head_ptr;
			while(u!=NULL)
			{
				
				if(strcmp(u->ISBN,p->book1)==0)
				{
					strcpy(u->paperbook,"0");//在架为0
					strcpy(p->book1 ," ");//还书之后为空
					ReaderList::load_readerfile();//更新用户信息
					BookList::load_file();//更新书库信息
					cout<<"还书成功"<<endl; 
					break;
				}u=u->next ;
			}
			if(u==NULL)
			{
				cout<<"没有这本书!还书失败,请检查ISBN号"<<endl; 
			}
		}
		else if(hua=='2'&&p->book2!=" ")
		{
			u=BookList::head_ptr;
			while(u!=NULL)
			{
				
				if(strcmp(u->ISBN  ,p->book2)==0)
				{
					strcpy(u->paperbook,"0");//在架为0
					strcpy(p->book2 ," ");//还书之后为空
					ReaderList::load_readerfile();//更新用户信息
					BookList::load_file();//更新书库信息
					cout<<"还书成功"<<endl; 
					break;
				}u=u->next ;
			}
			if(u==NULL)
			{
				cout<<"没有这本书!还书失败,请检查ISBN号"<<endl; 
			}
		}
		else
		{
			cout<<"输入错误!"<<endl;
		}
	}
	static void show_book(Book *p)
	{
		cout << "***********************************************" << endl; 
		cout<<"书    名"<<"\t"<<p->BookName<<endl;
		cout<<"作    者"<<"\t"<<p->Writer<<endl;
		cout<<"出版日期"<<"\t"<<p ->PublishDate<<endl;
		cout<<"ISBN  号"<<"\t"<<p->ISBN<<endl;
		if(strcmp(p->ebook ,"0")==0)
		{
			cout<<"电子 书"<<"\t"<<"在架"<<endl;
		} 				
		if(strcmp(p->paperbook,"0")==0)
		{
			cout<<"纸质 书"<<"\t"<<"在架"<<endl;
		} 
		cout<<"出版  商"<<"\t"<<p->Publisher<<endl;
		cout<<"图书简介"<<"\t"<<p->BriefIntroduction<<endl;
		cout << "***********************************************" << endl;
	}
	static	Book* search_ISBN()			//按 ISBN 号查找图书
	{
		string cs;
		cout<<"请输入图书的ISBN 号:"<<endl;
		cin>>cs;
		Book *p;
		p=head_ptr;
		while(p!=NULL)
		{
			if(strcmp(p->ISBN  ,&cs[0])==0)
			{
				show_book(p);
				break;
			}
			p=p->next;
		}	
		if(p==NULL)
		{
			cout<<"没有找到这本书,试试查找其他书吧"<<endl;
		}
		return p;
	}
	static void search_BookName()		//按书名查找图书
	{
		string cs;
		cout<<"请输入图书的书名:"<<endl;
		cin>>cs;
		Book *p;
		int i=0;
		p=head_ptr;
		while(p!=NULL)
		{
			if(strcmp(p->BookName,&cs[0])==0)
			{
				show_book(p);
				i++;
			}
			p=p->next;
		}	
		cout<<"共找到"<<i<<"本名为《"<<cs<<"》的书"<<endl;
	}
	static	void search_Writer()			//按作者名查找图书
	{
		string cs;
		cout<<"请输入图书的作者名:"<<endl;
		cin>>cs;
		Book *p;
		int i=0;
		p=head_ptr;
		while(p!=NULL)
		{
			if(strcmp(p->Writer,&cs[0])==0)
			{
				show_book(p);
				i++;
			}
			p=p->next;
		}	
		cout<<"共找到"<<i<<"本"<<cs<<"的书"<<endl;
	}
	static	void search_Publisher()		//按出版商查找图书
	{
		string cs;
		cout<<"请输入图书的出版商:"<<endl;
		cin>>cs;
		Book *p;
		int i=0;
		p=head_ptr;
		while(p!=NULL)
		{
			if(strcmp(p->Publisher,&cs[0])==0)
			{
				show_book(p);
				i++;
			}
			p=p->next;
		}	
		cout<<"共找到"<<i<<"本"<<cs<<"的书"<<endl;
	}
	static	void search_PublishDate() 	//按出版日期查找图书
	{
		string cs;
		cout<<"请输入图书的出版日期:"<<endl;
		cin>>cs;
		int i=0;
		Book *p;
		p=head_ptr;
		while(p!=NULL)
		{
			if(strcmp(p->PublishDate,&cs[0])==0)
			{
				show_book(p);
				i++;
			}
			p=p->next;
		}	
		cout<<"共找到"<<i<<"本"<<cs<<"的书"<<endl;
	}
	static void search()						//进入查找菜单
	{	
		char r;
		do
		{
			cout << "***********************************************" << endl;
	 		cout << "*               图 书 查 找                   *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               1.按 ISBN 号查找图书          *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               2.按书名查找图书              *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               3.按作者名查找图书            *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               4.按出版商查找图书            *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               5.按出版日期查找图书          *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               0.返回上一层                  *" << endl;
			cout << "*                                             *" << endl;
			cout << "***********************************************" << endl;
	   		cout <<"请输入相应功能代号:"<<endl; 
	   		
	   		cin>>r;
	   		switch(r)
	   		{
	   			case '1':
	  	 			search_ISBN();
	   				break;
	  			case '2':
	   				search_BookName();
	 				break;
	   			case '3':
	   				search_Writer();
					break;
				case '4':
					search_Publisher();	
					break;
	  			case '5':
	  				search_PublishDate();
	  				break;
	  			case '0':	
					break;
	  			default:cout << "输入错误,请从新输入。" << endl;
	   					
			}
		}
		while(r!='0');
	}
	static	void show_all()					//显示所有库存的未被借出的图书
	{
		int i=0;
		Book *p;
		p=head_ptr->next;
		while(p!=NULL)
		{
			if(strcmp(p->ebook,"0")==0||strcmp(p->paperbook,"0")==0)
			{
				show_book(p);
				i++;
			}
			p=p->next;
		}	
		cout<<"共找到"<<i<<"本在架书"<<endl;
	}
	static	void delete_onebook()				//删除某本书
	{
		string ss;
		cout<<"请输入要删除的图书的ISBN号:"<<endl;
		cin>>ss;
		Book *p,*q;
		p = head_ptr;
		q=p;
		p = p->next ;
		while(strcmp(p->ISBN ,&ss[0])!=0)
		{
			q=p;
			p=p->next;
		}
		if(p==NULL)
		{
			cout<<"没有你要删除的图书的记录"<<endl;
		}
		else
		{
			q->next=p->next;
			p->next=NULL;
			delete p;
			load_file();
			cout<<"删除成功!"<<endl; 
			n=n-1;
		} 
	}
    static	void delete_allbook()				//删除所有图书
	{
		cout<<"确定全部删除吗?,请谨慎删除,确定请按1,否则请按其他键."<<endl;
		char h;
		cin>>h;
		if(h!='1')
		{
			return;
		} 
		else
		{
			Book *p,*q;
			p = head_ptr->next;
			while(p!=NULL)
			{
				q=p;
				p=p->next ; 
				free(q);
			}
			head_ptr->next=NULL;
			load_file();
			cout<<"全部图书删除成功!"<<endl;
		}
	} 
	static	void change_content()				//更改某本书的信息
	{
		Book *p; 
		p = search_ISBN();
		if(p==NULL)
		{
			return;
		}
		string n1,n2,n3,n4,n5,n6,n7;	
		char i=' ';
		do
		{
			cout << "***********************************************" << endl;
	 		cout << "*              修 改 图 书 信 息               *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               1.修改书名                     *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               2.修改作者名                   *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               3.修改出版日期                 *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               4.修改电子书(0 为在架,1 为借出) *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               5.修改纸质书(0 为在架,1 为借出) *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               6.修改出版商                   *" << endl;
	 		cout << "*                                             *" << endl;
			cout << "*               7.修改内容简介                 *" << endl;
	 		cout << "*                                             *" << endl;
			cout << "*               0.返回上一层                   *" << endl;
			cout << "*                                             *" << endl;
	 		cout << "***********************************************" << endl;
			cout<<endl<<endl;
			cout <<"请输入相应功能代号:"<<endl; 
			
			cin >> i;
	  		switch (i)
	  		{
	  			case '1':
	  				cout<<"新的书名:"<<endl;
					cin>>n1;
					strcpy(p->BookName,&n1[0]);//直接在链表中修改
	   				break;
	  			case '2':
	   				cout<<"新的作者名:"<<endl;
					cin>>n2;
					strcpy(p->Writer,&n2[0]);
					break;
	   			case '3':
	   				cout<<"新的出版日期:"<<endl;
					cin>>n3;
					strcpy(p->PublishDate,&n4[0]);
					break;
				case '4':
					cout<<"电子书(0 为在架,1 为借出):"<<endl;
					cin>>n4;
					strcpy(p->ebook,&n4[0]);
					break;
	  			case '5':
	  				cout<<"修改纸质书(0 为在架,1 为借出):"<<endl;
					cin>>n5;
					strcpy(p->paperbook,&n5[0]);
	  				break;
	  			case '6':
	  				cout<<"新的出版商:"<<endl;
					cin>>n6;
					strcpy(p->Publisher,&n6[0]);
					break;
	  			case '7': 
	  				cout<<"新的内容简介:"<<endl;
					cin>>n7;
					strcpy(p->BriefIntroduction,&n7[0]);
					break; 
				case '0': 
					break; 
	  			default:cout << "输入错误,请从新输入。" << endl;
	  		}
	  	}while(i!='0');
		cout<<"修改后的书"<<endl;
		show_book(p);
		load_file();
	}
	static	void GoInto_BookInfo(ReaderList rel)				//进入书库信息菜单
	{
		Book *p;
		Reader *r;
		save_file();
		rel.save_readerfile();//下载读者信息
		char i=' ';
		do
		{
			cout << "***********************************************" << endl;
	 		cout << "*               图 书 信 息 管 理             *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               1.新书入库#                    *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "*               2.查找                        *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               3.删除#                        *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               4.修改#                        *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               5.显示全部在架书              *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               6.清空全部图书内容#            *" << endl;
			cout << "*                                             *" << endl;
			cout << "*               0.返回上一层                  *" << endl;
	 		cout << "*                                             *" << endl;
	 		cout << "***********************************************" << endl;
			cout<<"#号为管理员功能,需要登录管理员账号<(ˉ^ˉ)> "<<endl;
			cout <<"请输入相应功能代号:"<<endl; 
			
			cin >> i;
	  		switch (i)
	  		{
	  			case '1':
				  	cout<<"请先登录管理员的账号,再进行操作"<<endl;
					r = rel.reader_land();//管理员登录
					if((r==NULL)||strcmp(r->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
	  				p =  AddNewBook();
	  	 			Add_list(p);
					cout<<"新书插入成功"<<endl;
	   				break;
	  			case '2':
	   				search();
					break;
	   			case '3':
				   	cout<<"请先登录管理员的账号,再进行操作"<<endl;
					r = rel.reader_land();//管理员登录
					if((r==NULL)||strcmp(r->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
	   				delete_onebook();
					break;
				case '4':
					cout<<"请先登录管理员的账号,再进行操作"<<endl;
					r = rel.reader_land();//管理员登录
					if((r==NULL)||strcmp(r->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
					change_content();	
					break;
	  			case '5':
	  				show_all();
	  				break;
	  			case '6': 
				    cout<<"请先登录管理员的账号,再进行操作"<<endl;
					r = rel.reader_land();//管理员登录
					if((r==NULL)||strcmp(r->ReaderName,"guanliyuan")!=0)//设置管理员为guanliyuan
					{
						cout<<"您不是管理员,无法进行此操作"<<endl;
						break;
					}
	  				delete_allbook();
					break; 
	  			case '0':
	  				break;
	  			default:cout << "输入错误,请从新输入。" << endl;
	  		}
	  	}while(i!='0');
	
	}
};
int BookList::n ;
Book* BookList::head_ptr=new Book[sizeof(Book)];
Book* BookList::node=new Book[sizeof(Book)];

void borrowtoreturn(BookList b,ReaderList r)
//借书还书函数.判断是"借书"还是"还书".1为"借书",2为"还书"
{
	int k= 0;
 	int rsuffix, bsuffix;
 	string readername,readerpass;//暂存读者名字、密码
	cout<<"请输入您的姓名:"<<endl;;
	cin >> readername;
	Reader *p;
	p=r.head_point;
	while(p!=NULL)
	{
		if(strcmp(p->ReaderName,&readername[0])==0)
		{
			cout<<"请输入您的密码:";
			cin>> readerpass;
			if(strcmp(p->Password,&readerpass[0])==0)
			{
				cout<<"登录成功!"<<endl; 
				k=1;break;
			}
			else
			{
				cout<<"密码错误!"<<endl; 
				k=0;return;
			} 
		}
		p=p->next;
	}
	if(k=0)
	{
		cout<<"输入错误"<<endl; return;
	}	
	char br=' ';
	do
	{
		cout << "***********************************************" << endl;
		cout << "*               借 书 / 还 书                 *" << endl;
		cout << "*                                             *" << endl;
		cout << "*               1. 借 书                      *" << endl;
		cout << "*                                             *" << endl;
		cout << "*               2. 还 书                      *" << endl;
		cout << "*                                             *" << endl;
		cout << "*               0. 退 出                      *" << endl;
		cout << "*                                             *" << endl;
		cout << "***********************************************" << endl;
		cout<<endl<<endl;
		cout <<"请输入相应功能代号:"<<endl; 

		cin>>br;
		switch (br)
		{
		case '1':
			b.borrow_book(p);
			break;
		case '2':
			b.return_book(p);
			break;
		case '0':
			break;
		default:
			cout<<"输入错误!"<<endl;
			break;
		}
	} while (br!='0');
	
}


void mainjiemian()    //主界面                                                           //主界面
{
 	cout << "***********************************************" << endl;
 	cout << "*               图 书 借 阅 系 统              *" << endl;
 	cout << "*                                             *" << endl;
 	cout << "*               1.读 者 信 息                 *" << endl;
 	cout << "*                                             *" << endl;
 	cout << "*               2.书 库 信 息                  *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               3.借书/还书                   *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               4.帮 助                       *" << endl;
	cout << "*                                             *" << endl;
	cout << "*               5.有关该系统的一些说明         *" << endl;
	cout << "*                                             *" << endl;
 	cout << "*               0.退出系统                     *" << endl;
 	cout << "*                                             *" << endl;
	cout << "***********************************************" << endl;
	cout <<"请输入相应功能代号"<<endl; 
}

void help()
{
	cout<<"可以注册、登录、借书、还书"<<endl; 
}
void notes()
{
	cout<<"=================关于系统的一些说明=================="<<endl; 
	cout<<"THIS FILE IS PART OF Library lending system PROJECT"<<endl;
	cout<<"THIS FILE CAN ONLY BE USED FOR LEARNING , NOT FOR COMMERCIAL PROFIT."<<endl;
	cout<<"Copyright (c) 2020-2022 子衿JDD "<<endl;
}

int main()
{
	BookList b;
	ReaderList r;
	char in=' ';
 	do
	{
  		mainjiemian();
  		cin >> in;
  		switch (in)
  		{
  			case '1':
  	 			r.GoInto_ReaderInfo();
   				break;
  			case '2':
   				b.GoInto_BookInfo(r);
   				break;
   			case '3':
			    b.save_file();//下载书库信息到链表
   				r.save_readerfile();//下载读者信息到链表
   				borrowtoreturn(b,r);
				break;
			case '4':
				help();	
				break;
  			case '5':
  				notes();
  				break;
  			case '0':
  				return 0;
  			default:cout << "输入错误,请重新输入。" << endl;
  		}
 	} 
	while (in != '0');
	system("pause");
 	return 0;
}

七、使用展示

1.开始运行

在这里插入图片描述

2.读者系统

1.如果reader.csv中没有某读者信息,就提示要注册
在这里插入图片描述
2.注册
在这里插入图片描述

注册之后,reader.csv中会看到读者节点增加成功
在这里插入图片描述
3.注销张三,要先登录
在这里插入图片描述

reader.csv中张三没了。。
在这里插入图片描述
4.修改李四的密码

在这里插入图片描述
reader.csv中lisi的密码改了
在这里插入图片描述
5.通过管理员账号,查看
在这里插入图片描述

3.图书系统

1.添加新书
在这里插入图片描述
查看book.csv ,插入成功
在这里插入图片描述
2.查找某书
在这里插入图片描述
假如按出版日期查找

在这里插入图片描述
按ISBN号查找

3.删除某图书
在这里插入图片描述
如何征服英俊少男 已被删除
在这里插入图片描述
4.修改图书信息
在这里插入图片描述

修改简介
在这里插入图片描述

在这里插入图片描述
5.显示在架书,有点多。。。几千本
在这里插入图片描述

4.借书还书

1.借书
在这里插入图片描述
reader.csv中借阅成功
在这里插入图片描述
如果借了两本了↓↓↓↓↓↓↓↓

在这里插入图片描述

2.还书
在这里插入图片描述

在这里插入图片描述

八、后记

这是我大一的C++课程设计,当时老师给的成绩是90,因为只做了三四天,1500行左右的渣渣代码,还没有实现借书还书的功能。这个寒假完善了一下功能,把重复代码封装成了函数。共1188行。

项目还可优化的方向:

  1. 还书提醒,续借功能
  2. 借阅数量增加时(使用链表把借的书串起来)
  3. 图形化界面显示
  4. … …
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:54:07  更:2022-01-29 22:54:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:23:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码