图书馆管理系统(作业)

要求:

设计一个程序来管理图书信息,能实现图书相关信息的具备数据的输入、查找、删除等功能,能实现。具体功能细节可以根据自己理解情况进行增加。

【首先说明:部分程序是参考网上的,但总的来说思路还算蛮清晰的!】

主程序设计思路图:

  

  

(1)函数的设计:

class BDatabase{}  图书管理类的设置,实现对图书的添加,查找,删除等。

int top;           设置图书记录指针。

Book book[Maxb];   设置图书记录(Maxb定义为最多可存储的图书数,定义为整形)。

void clear()         清空图书记录。

int addbook(int n,char *na,char *kin)    增加图书记录。

Book *query(int bookid)       查找图书记录。

void bookdata();              定义图书库。

void disp()                   输出。

~BDatabase()        设置析构函数,将book[]写到book.txt文件中

void BDatabase::bookdata()     由此函数开始对图书管理系统的主菜单进行调用与功能的实现。

最后用main() 函数的实现,程序的主界面的引导

 

数据存放:

char name[StrNum]——用来存放书名

char number[StrNum]——存放图书的编号

char kind[Type]——存放图书类型

int tag——定义删除标记

int num——定义图书标号为整型

int add ——增加标记

Book(){}——无参构造函数,用于为书名和作者姓名设置默认值

char getkind()——用于获取图书类型

char getname()——用于获取书名

intget name()——用于获取图书编号

intgettag()——用于获取删除标志

void setnamechar  na[])——用于设置书名

void setkindchar kin[])——用于设置类型

void delkind()——用于删除图书

void addbookint nchar*nachar*kin)——用于增加图书

void disp()——用于输出图书         

具体程序如下:

/**********图书馆管理系统****************/
#define StrNum 20
#define Type 20
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>                  //输入/输出文件流类
using namespace std;
const int Maxb=100;                 //最多可存储的图书
class Book
{
private:
    int tag;                        //删除标记
	int num;                        //图书编号
	int add;                        //增加标记
	char number[StrNum];            //编号
	char name[StrNum];              //书名
	char kind[Type];                //图书类型

public:
	Book(){}
	char getkind()                  //获取图书类型
	{
		return kind[Type];
	}                                
	char getname()	                //获取书名
	{ 
		return name[StrNum]; 
	}
	int getnum()                     //获取图书编号
	{ 
		return num; 
	}                  
	int gettag()                    //获取删除标记
	{ 
		return tag;
	}
	void setname(char na[])         //设置书名
	{
		strcpy(name,na);
	}
	void setkind(char kin[])        //设置类型
	{
		strcpy(kind,kin);
	}
	void delbook()                  //删除图书
	{
		tag=1;
	}
	void addbook(int n,char *na,char *kin)    //增加图书
	{
		tag=0;
		num=n;
		strcpy(name,na);
		strcpy(kind,kin);
	}
	void disp()                     //输出图书		
	{
		cout.flags (ios::left);     //设置对齐的标志位为左
		cout<<setw(15)<<num<<setw(20)<<name<<setw(15)<<kind<<endl;		
	}		
};

class BDatabase
{
private:
    int top;                        //图书记录指针
	Book book[Maxb];                //图书记录
public:
	BDatabase()                     //构造函数,将book.txt读到book[]中
	{ 
			Book b;
			top=-1;
			fstream file("book.txt",ios::in);
			while (1)
			{
				file.read((char *)&b,sizeof(b));
				if (!file) break;
				top++;
				book[top]=b;
			}
			file.close();
	} 
	void clear()                    //全删
	{
		top=-1;
	}
    int addbook(int n,char *na,char *kin)     //增加图书
	{
		Book *p=query(n);
		if(NULL==p)
		{
			top++;
			book[top].addbook(n,na,kin);
			return 1;
		}
		return 0;
	}
	Book *query(int bookid)         //查找图书
	{
		for (int i=0;i<=top;i++)
			if (book[i].getnum()==bookid &&book[i].gettag()==0)
			{	
				return &book[i];
			}
			return NULL;
	}
	void bookdata();                //图书库
	void disp()
	{
	  for (int i=0;i<=top;i++)
		  if (book[i].gettag()==0)
			  book[i].disp();
	}
	~BDatabase()                    //参考网上的资料——析构函数,将book[]写到book.txt文件中
	{
		fstream file("book.txt",ios::out);
        for (int i=0;i<=top;i++)
			if (book[i].gettag()==0)
				file.write((char *)&book[i],sizeof(book[i]));
			file.close();
	}
};
void BDatabase::bookdata()
{
    char choice;
	char bname[40];
	char bkind[40];
	char newType[20];
	int bookid;
	Book *b;
	while (choice!='0')
	{   
	    cout<<"\t*************************私人定制*********************************\n";
		cout<<"                                           \n\n";
		cout<<"\t\t\t图  书  管  理  系  统\n\n";
		cout<<"\t\t\t1    新增图书记录\n";
        cout<<"\t\t\t2    更改图书记录\n";
        cout<<"\t\t\t3    删除图书记录\n";
		cout<<"\t\t\t4    查找图书记录\n";
		cout<<"\t\t\t5    显示图书记录\n";
		cout<<"\t\t\t6    清空全部记录(慎用)\n";
		cout<<"\t\t\t0    退出系统\n";
		cout<<"                                           \n\n";
		cout<<"\t******************************************************************\n";
        cout<<"请选择(1,2,3,4,5,6,0):";
		cin>>choice;
		switch (choice)
		{
            case '1':
				cout<<"输入图书编号:"<<endl;
				cin>>bookid;
				cout<<"输入图书类型:"<<endl;
				cin>>newType;
                cout<<"输入图书书名:"<<endl;
				cin>>bname;
				addbook(bookid,bname,newType);
				break;
            case '2':
				cout<<"输入图书编号:"<<endl;
				cin>>bookid;
				b=query(bookid);
				if(b==NULL)
				{
					cout<<"该图书不存在"<<endl;
				    break;
				}
				cout<<"输入新的书名:"<<endl;
				cin>>bname;
				b->setname(bname);
				cout<<"输入新的类型:"<<endl;
				cin>>bkind;
				b->setkind(bkind);
			 	break;
            case '3':
				   	cout<<"读入图书编号:"<<endl;
					cin>>bookid;
					b=query(bookid);
					if(b==NULL)
					{
					    cout<<"该图书不存在"<<endl;
					    break;
					}
					char tg1;
					cout<<"确定要删除此记录吗?(Y/N)"<<endl;
					cin>>tg1;
					if(tg1!='n'&&tg1!='N')
					{
					b->delbook();
					cout<<"已成功删除该书记录!"<<endl;
					break;
					}		
			case '4':
				cout<<"读入图书编号:"<<endl;
				cin>>bookid;
				b=query(bookid);
				if (b==NULL)
				{
					cout<<"该图书不存在"<<endl;
					break;
				}	
				cout<<"图书编号            图书名称              图书类型         \n";
				b->disp();                                 
				break;
			case '5':
				cout<<"图书编号            图书名称              图书类型         \n";
				disp();
				break;
			case '6':
				    char tg2;
					cout<<"确定要清空所有记录吗?(Y/N)"<<endl;
					cin>>tg2;
					if(tg2!='n'&&tg2!='N')
					{
					clear();
				    cout<<"已成功清空记录!"<<endl;
					break;
					}
			case '0':
				break;
			default:cout<<"输入错误,请从新输入(数字为0~6):";
		}
	}
}
//main() 函数的实现,程序的主界面的引导
void main()
{    
	char choice;
	BDatabase BookDB;
	while(choice!='0')
	{       cout<<"\t***********************私人定制*********************************\n";
	        cout<<"                                           \n\n";
		    cout<<"\n\n\t\t\t欢迎使用图书管理系统\n\n";
			cout<<endl<<endl<<"\t\t\t图  书  管  理  系  统\n\n\n\n";
			cout<<"                                               "<<endl;
			cout<<"                                           \n\n";
			cout<<"                                                 by: 周武武\n\n\n\n";
			cout<<"\t******************************************************************\n";

		    
			cout<<"\t\t\t1    进  入  系  统\n\n\t\t\t0    离       开"<<endl;
			cout<<"请选择:";
			cin>>choice;
			switch(choice)
			{
			case '1':
					BookDB.bookdata();
					break; 
            case '0':
				 cout<<"\n\n\t\t\t欢迎再次使用图书管理系统\n\n";
				 break;
			default:cout<<"输入错误,请从新输入:";
			}
	}
}

调试运行截图如下:

欢迎界面:


显示所有图书界面:


查找结果:



心得:弄了两三天,上网找资料,找同学讨论,翻看课本相关知识终于在今天调试成功!!但是这只能算作应付之作,我这几天看到有几个同学的作业,感觉自己真的只是学了点皮毛,虽然课程已接近结束,但这C++还得继续学习,勤能补拙!多谢明哥这一学期的辛苦授业!!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值