要求:
设计一个程序来管理图书信息,能实现图书相关信息的具备数据的输入、查找、删除等功能,能实现。具体功能细节可以根据自己理解情况进行增加。
【首先说明:部分程序是参考网上的,但总的来说思路还算蛮清晰的!】
主程序设计思路图:
(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 setname(char na[])——用于设置书名
void setkind(char kin[])——用于设置类型
void delkind()——用于删除图书
void addbook(int n,char*na,char*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++还得继续学习,勤能补拙!多谢明哥这一学期的辛苦授业!!