图书管理系统_C++

一、主要功能

M . 主 界面
1.查找图书
2.添加新书
3.删除旧书
4.修改信息
5.输出信息
6.保存信息
0.退出系统

二、运行环境

Code::Blocks 17.12

三、全部代码

/*	2019.12.15 21:23:17 _7	*/
/*	Mi	*/
#include <iostream>
#include <string>
#include <fstream>
#include <time.h>
#include <conio.h>
#include <windows.h>
using namespace std;
fstream fp,gp;
void  color(short x=7,short y=0,short z=0,short u=0){
	if(z!=0)z=8;if(u!=0)u=128;
    if(x>=0 && x<=15){
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x|y*16|z|u);
		return;
	}
    else{
		color();
		return;
	}
}
class Data{
protected:
	int year;
	int month ;
	int day;
public:
	~Data(){}
	Data(){}
	int reyear();
	int remonth();
	int reday();
	void set1(int yearr,int monthh,int dayy);
	void sety(int yearr);
	void setm(int monthh);
	void setd(int dayy);
	void disp();
};
Data Gettime()
{
	int yeartime=0,monthtime=0,daytime=0;
	Data B;
	long t;
	struct tm *lt;
	time(&t);
	lt=localtime(&t);
	yeartime=lt->tm_year+1900;
	monthtime=lt->tm_mon+1;
	daytime=lt->tm_mday;
	B.set1(yeartime,monthtime,daytime);
	return B;
}
class Book:public Data{
protected:
	string IDname;
	string bookname;
	string authorname;
	string other;
public:
	Data showtime;
	Data savetime;
	Book(){}
	~Book(){}
	string reIDname();
	string reBook();
	Book(int);
	int set2(string,string,string,string,string);
	void setID(string IDnamee);
	void setbook(string booknamee);
	void setauthor(string authornamee);
	void setother(string otherr);
	void disp();
};
class Lib{
public:	
	Book book;
	Lib *next;
	Lib(){}
	~Lib(){}
	void initlist(Lib**l);
	int CreateFromTail(Lib*l);
	void Out(Lib*l);
	int ListLength(Lib*l);
	Lib *Locate(Lib*l,string key);
	int InsList(Lib*l,Book);
	int DelList(Lib*l,string key,Book *e);
	int change(Lib*l,string key,int z);
	int savenow(Lib*l);
	int changedata(Lib*l,string ,int );
};
int Data::reyear(){
		return year;
}
int Data::remonth(){
	return month;
}
int Data::reday(){
	return day;
}
void Data::set1(int yearr,int monthh,int dayy){
	year=yearr;
	month=monthh;
	day=dayy;
}
void Data::sety(int yearr){
	year=yearr;
}
void Data::setm(int monthh){
	month=monthh;
}
void Data::setd(int dayy){
	day=dayy;
}
void Data::disp(){
	cout<<"时间:";
	cout<<year<<"."<<month<<"."<<day<<endl;
}
string Book::reIDname(){
	return IDname;
}
string Book::reBook(){
	return IDname+"\n"+bookname+"\n"+
	authorname+"\n"+other+"\n";
}
Book::Book(int n){
	string IDnamee,booknamee,authornamee,otherr;	
	color(14);cout<<"输入编号:";color();
	cin>>IDnamee;	
	color(14);cout<<"输入书名:";color();
	cin>>booknamee;
	color(14);cout<<"输入作者:";color();
	cin>>authornamee;
	color(14);cout<<"输入出版年份:";color();
	cin>>otherr;
	IDname=IDnamee;
	bookname=booknamee;
	authorname=authornamee;
	other=otherr;
	savetime=Gettime();	
}
int Book::set2(string IDnamee,string booknamee,
string authornamee,string otherr,string ee){
	IDname=IDnamee;
	bookname=booknamee;
	authorname=authornamee;
	other=otherr;
	ee+="     ";
	int al=0,bl=0,cl=0;
	int i=12,x=1;
	while(ee[i]==' '){
		i--;
	}
	while(ee[i]!=' '){
		cl+=(ee[i]-'0')*x;
		x*=10;
		i--;
	}
	i--;x=1;
	while(ee[i]!=' '){
		bl+=(ee[i]-'0')*x;
		x*=10;
		i--;
	}
	i--;x=1;
	while(i>=0){
		al+=(ee[i]-'0')*x;
		x*=10;
		i--;
	}
	savetime.set1(al,bl,cl);
	return 1;
}
void Book::setID(string IDnamee){
	IDname=IDnamee;
}
void Book::setbook(string booknamee){
	bookname=booknamee;
}
void Book::setauthor(string authornamee){
	authorname=authornamee;
}
void Book::setother(string otherr){
	other=otherr;
}
void Book::disp(){
	cout<<"图书信息:"<<endl;
	cout<<"编号:"<<IDname<<endl;
	cout<<"书名:"<<bookname<<endl;
	cout<<"作者:"<<authorname<<endl;
	cout<<"其它:"<<other<<"出版"<<endl;
	cout<<"入库";savetime.disp();
}
int Lib::CreateFromTail(Lib *l){
	Lib *r,*s;
	Book ch;
	string a,b,c,d,e;
	r=l;
	fp.open("1.txt",ios::in);
	if(!fp)
		return 0;
    	while(!fp.eof()){
		getline(fp,a);
		getline(fp,b);
		getline(fp,c);
		getline(fp,d);
		getline(fp,e);
		if(ch.set2(a,b,c,d,e)==1){
			s=new Lib;
			s->book=ch;
			r->next=s;
			r=s;
		}
	}
	r->next=NULL;
	fp.close();
	return 1;
}
void Lib::Out(Lib *l){
	Lib *p;
	p=l->next;
	while(p!=NULL){
		color(9);
		p->book.disp();
		cout<<"******************"<<endl;
		color();
		p=p->next;
	}
}
int Lib::savenow(Lib*l){
	Lib *output;
	output=l->next;
	string move;
	int movedata;
	gp.open("1.txt",ios::out);
	if(!gp)
		return 0;
	while(1){
		move=output->book.reBook();
		gp<<move;
		movedata=output->book.savetime.reyear();
		gp<<movedata<<" ";
		movedata=output->book.savetime.remonth();
		gp<<movedata<<" ";
		movedata=output->book.savetime.reday();
		gp<<movedata;
		output=output->next;
		if(output==NULL){
			break;
		}
		else gp<<"\n";			
	}
	gp.close();
	return 1;
}
int Lib::changedata(Lib*l,string key,int z){
	Lib *ff;
	ff=l->Locate(l,key);
	if(ff==NULL){
		color(12);cout<<"没有这个编号"<<endl;color();
		return 0;
	}
	int b,n,m;
	switch(z){
	case 1:
		cin>>b>>n>>m;
		ff->book.savetime.set1(b,n,m);
		break;
	case 2:
		cin>>b;
		ff->book.savetime.sety(b);
		break;
	case 3:
		cin>>b;
		ff->book.savetime.setm(b);
		break;
	case 4:
		cin>>b;
		ff->book.savetime.setd(b);
		break;
	}
	return 1;
}
int Lib::change(Lib*l,string key,int z){
	Lib *f;
	f=l->Locate(l,key);
	if(f==NULL){
		color(12);cout<<"没有这个编号"<<endl;color();
		return 0;
	}
	string change_befor;
	switch(z){
	case 1:
		cin>>change_befor;
		f->book.setID(change_befor);
		break;
	case 2:
		cin>>change_befor;
		f->book.setbook(change_befor);
		break;
	case 3:
		cin>>change_befor;
		f->book.setauthor(change_befor);
		break;
	case 4:
		cin>>change_befor;
		f->book.setother(change_befor);
		break;
	}
	return 1;
}
Lib *Lib::Locate(Lib*l,string key)
{
	Lib *p;
	p=l->next;
	while(p!=NULL)
	if(p->book.reIDname()!=key){
		p=p->next;
	}
	else break;
	return p;
}
int Lib::InsList(Lib*l,Book e){
	Lib *pre,*s;
	int k=0;
	pre=l; 
	int lenth=ListLength(l);
	while(pre!=NULL&&k<lenth){
		pre=pre->next;
		k++;
	}
	s=new Lib;
	s->book=e;
	s->next=pre->next;
	pre->next=s;
	return 1;
}
int Lib::ListLength(Lib*l){
	int j=0;
	Lib *p;
	p=l->next;
	while(p!=NULL){
		p=p->next;
		j++;
	}
	return j;
}
void Lib::initlist(Lib **l){
	*l=new Lib;
	(*l)->next=NULL;
}
int Lib::DelList(Lib*l,string key,Book *e){
	int m=1;
	Lib *p;
	p=l->next;
	while(p!=NULL)
	if(p->book.reIDname()!=key){
		p=p->next;
	    m++;
	}
	else break;
	if(p==NULL){
		return 0;
	}
	int i=m;
	Lib *pre,*r;
	int k=0;
	pre=l;
	while(pre->next!=NULL&&k<i-1){
		pre=pre->next;
		k++;
	}
	r=pre->next;
	pre->next=r->next;
	*e=r->book;
	delete(r);
	return 1;
}
void meal(){
	color(14);cout<<"\t操作列表"<<endl;
	color(15);cout<<"1.查找图书"<<endl;
	color(14);cout<<"2.添加新书"<<endl;
	color(15);cout<<"3.删除旧书"<<endl;
	color(14);cout<<"4.修改信息"<<endl;
	color(15);cout<<"5.输出信息"<<endl;
	color(14);cout<<"6.保存信息"<<endl;
	color(15);cout<<"0.退出系统"<<endl;
	color(14);cout<<"请输入编号进行操作"<<endl;
	color();
}
void meal2(){
	color(14);
	cout<<"\t操作列表*"<<endl;
	cout<<"1.修改编号"<<endl;
	cout<<"2.修改书名"<<endl;
	cout<<"3.修改作者"<<endl;
	cout<<"4.修改出版时间"<<endl;
	cout<<"5.修改入库时间"<<endl;
	cout<<"0.退出修改"<<endl;
	cout<<"请输入编号进行操作"<<endl;
	color();
}
void meal3(){
	color(14);
	cout<<"\t操作列表******"<<endl;
	cout<<"1.修改时间"<<endl;
	cout<<"1.修改年份"<<endl;
	cout<<"2.修改月份"<<endl;
	cout<<"3.修改日份"<<endl;
	cout<<"0.退出操作"<<endl;
	cout<<"请输入编号进行操作"<<endl;
	color();
}
void show(){
	Lib *l;
	l->initlist(&l);
	l->CreateFromTail(l);
	l->Out(l);
	int x;
	meal();
	while (1){		
		if(_kbhit()){
			system("cls");
			x=_getch();		
			if(x=='1'){/
				string keyword;
				color(14);
				cout<<"进入查找操作"<<endl;
				cout<<"输入编号:";color();
				cin>>keyword;
				Lib *df;
				df=l->Locate(l,keyword);
				if(df==NULL){
					color(12);
					cout<<"没有这个编号"<<endl;color();
				}
				else {
					color(14);
					cout<<"当前图书信息:"<<endl;
					color(9);
					df->book.disp();
					color();	
				}
				meal();
			}
			else if(x=='2'){/
				color(14);
				cout<<"进入添加操作"<<endl;color();
				string keys;
loop:
				Book A(1);
				keys=A.reIDname();
				if(l->Locate(l,keys)!=NULL){
					color(12);
					cout<<"已有这个图书编号"<<endl;color();
					goto loop;
				}					
				else {
					if(l->InsList(l,A)==1){
						color(10);cout<<"添加成功"<<endl;
						color(14);
						cout<<"信息如下"<<endl;
						color(9);A.disp();color();						
					}
				}
				meal();
			}
			else if(x=='3'){//
				color(14);cout<<"进入删除操作"<<endl;
				cout<<"输入编号:";color();
				Book A;
				string keyword;
				cin>>keyword;
				int s3=l->DelList(l,keyword,&A);
				if(!s3){
					color(12);
					cout<<"删除失败,信息不存在"<<endl;color();
				}
				else{
					color(10);cout<<"删除成功"<<endl;
					color(14);cout<<"被删除图书信息"<<endl;
					color(9);A.disp();color();		
					string move;
					int movedata;
					gp.open("2.txt",ios::out|ios::app);
					if(!gp){					
						color(12);
				    	cout<<"文件打开失败"<<endl;color();
						return ;
					}
					move=A.reBook();
					gp<<move;
					movedata=A.savetime.reyear();
					gp<<movedata<<" ";
					movedata=A.savetime.remonth();
					gp<<movedata<<" ";
					movedata=A.savetime.reday();
					gp<<movedata<<"\n";
					Data BB;
					BB=Gettime();
					A.showtime=BB;
					movedata=A.showtime.reyear();
					gp<<movedata<<" ";
					movedata=A.showtime.remonth();
					gp<<movedata<<" ";
					movedata=A.showtime.reday();
					gp<<movedata<<"\n";
					gp.close();
					color(10);cout<<"保存成功"<<endl;color();
				}
				meal();
			}
			else if(x=='4'){//
				color(14);cout<<"进入修改操作"<<endl;
				string keyword;
lap:
				cout<<"输入编号:";color();
				cin>>keyword;
		    	if(l->Locate(l,keyword)==NULL){
            		color(12);
	            	cout<<"没有这个编号"<<endl;color();
	            	goto lap;
	            }
				color(14);meal2();color();
				int x1;
				while(1){		
					if(_kbhit()){
						system("cls");
						x1=_getch();
						if(x1=='1'){
							color(14);
							cout<<"进入修改编号操作"<<endl;
							cout<<"输入新编号:";color();	
							l->change(l,keyword,1);
							goto lap;
						}
						else if(x1=='2'){	
						    color(14);
				    		cout<<"进入修改书名操作"<<endl;
							cout<<"输入新书名:";color();				
							l->change(l,keyword,2);
							meal2();
						}
						else if(x1=='3'){	
					    	color(14);
			    			cout<<"进入修改作者操作"<<endl;
							cout<<"输入新作者:";color();				
							l->change(l,keyword,3);
							meal2();
						}
						else if(x1=='4'){
				    		color(14);
		    				cout<<"进入修改出版时间操作"<<endl;
							cout<<"输入新年份:";color();			
							l->change(l,keyword,4);
							meal2();
						}
						else if(x1=='5'){
							color(14);
							cout<<"进入修改入库时间操作"<<endl;
							meal3();
							int x2;
							while(1){		
								if(_kbhit()){
									system("cls");
									x2=_getch();							
									if(x2=='1'){
										color(14);
										cout<<"进入修改时间操作"<<endl;
										cout<<"输入新时间:";color();
										l->changedata(l,keyword,1);
										meal3();
									}
									else if(x2=='2'){
										color(14);
										cout<<"进入修改年份操作"<<endl;
										cout<<"输入新年份:";color();	
										l->changedata(l,keyword,2);
										meal3();
									}
									else if(x2=='3'){
										color(14);
										cout<<"进入修改月份操作"<<endl;
										cout<<"输入新月份:";color();	
										l->changedata(l,keyword,3);
										meal3();
									}
									else if(x2=='4'){
										color(14);
										cout<<"进入修改日期操作"<<endl;
										cout<<"输入新日期:";color();
										l->changedata(l,keyword,4);
										meal3();
									}
									else if(x2=='0'){
										color(14);
						       		 cout<<"退出修改时间操作"<<endl;
		       						 color();break;
									}
									else {
										color(12);
										cout<<"输入编号错误!"										          		  "请重新输入!"<<endl;
			                        	color();
		                        		meal3();
									}									
								}
							}
							meal2();
						}
						else if(x1=='0'){							
						    color(14);
			  	  		cout<<"退出修改操作"<<endl;
		  	  			color();break;
						}
						else {
							color(12);
						cout<<"输入编号错误!请重新输入!"<<endl;
					    	color();meal2();} 					
					}
				}
				meal();
			}
			else if(x=='5'){///			
			    color(14);
	    		cout<<"进入输出操作"<<endl;color();
				l->Out(l);
				meal();
			}
			else if(x=='6'){///
				color(14);cout<<"进入保存操作"<<endl;color();
				int s=l->savenow(l);
				if(s){
					color(10);cout<<"保存成功"<<endl;color();
				}
				meal();
			}
			else if(x=='0'){///
				color(14);				cout<<"是否保存之前所有操作?Y/N"<<endl;color();
				char chs;
				cin>>chs;
				if(chs=='Y'||chs=='y'){
					int s1=l->savenow(l);
					if(s1){
						color(10);cout<<"保存成功"<<endl;
					}
				}
				else{
					color(12);cout<<"您没有保存数据"<<endl;
				}
				color(12);cout<<"退出系统"<<endl;color();
				exit(0);
			}
			else if(x==' '){
				system("start 2.txt");
				meal();
			}
			else if(x=='9'){
				system("start 1.txt");
				meal();
			}
			else {
				color(12);
        		cout<<"输入编号错误!请重新输入!"<<endl;
        		color();meal();
        	}
		}
	}
}
int main(){
	show();
	return 0;
}

四、结果截图

M . 主界面 ---- 返回页面顶部
蓝色部分为原始数据,来自文件1.txt,入库时间从添加操作时系统获取。
下面是操作列表,输入对应编号直接进入操作。

1.查找图书 ---- 返回页面顶部
输入图书对应编号,查找对应图书,信息描述为蓝色部分。
在这里插入图片描述

2.添加新书 ---- 返回页面顶部
输入唯一编号添加图书,失败则显示红色字体提示,重新输入,成功显示绿色添加成功,继续列表。
在这里插入图片描述
3.删除旧书 ---- 返回页面顶部
输入需要删除编号,未找到,显示红色字体提示,然后重新输入,找到则删除成功,然后保存已经删除的信息到数据文件2.txt。
在这里插入图片描述
4.修改信息 ---- 返回页面顶部
输入要修改信息的图书编号进行修改,修改内容为已知信息列表。
在这里插入图片描述
5.输出信息 ---- 返回页面顶部
输出所有图书当前信息。
在这里插入图片描述
6.保存信息 ---- 返回页面顶部
进行一次文件写操作。保存当前图书内容。
在这里插入图片描述
0.退出系统 ---- 返回页面顶部
退出前询问是否保存之前所有操作,若之前保存过则无影响,未保存则可以选择放弃之前所有操作,或者保存到1.txt(文件写操作)。
在这里插入图片描述

结束语

看到这里也就结束了,希望对大家有所帮助,本文代码中有些许错误,读者请自行更正!感谢阅读!
相关资源连接:图书管理系统CPP

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值