欢迎来到中博奥技术有限公司官网

c++图书馆管理系统

时间:2023-02-01 作者:老师 来源:网络 点击量:

c++图书馆管理系统

以前做的,可以参考一下

//***********************
//图书馆管理系统
//***********************
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define null 0
#define max 65536
static int n;
//*********************
// 图书结构体
//*********************
typedef struct
{
char num[10]; //书号
char name[9]; //书名
char addr[31]; //作者
int Nowcounter; //现存量
int Allcounter; //总库存量
}datatype;
datatype *x[max]; //定义两个指针数组
datatype *p;

//*****************************
//图书功能函数列表
//*****************************
void redo(); //主递归函数
void creatlist(datatype *x[]); //图书建立函数
int menu_select(); //功能菜单函数
void find(datatype *x[],int n); //查找函数
void delnode(datatype *x[]); //插入函数
void printlist(datatype *x[]); //显示函数
void jieyue(datatype *x[],int n); //借阅函数
void guihuan(datatype *x[],int n); //归还函数
//*****************************
//主递归函数程序
//*****************************
void redo()
{
int i=0,j,n1,k=0,flage;
for( ; ;)
{
switch( menu_select())
{
case 1: //选项1的实现
printf("***********************\n");
printf("* 图书的建立 *\n");
printf("***********************\n");
creatlist(x);
break;
case 2: //选项2的实现
printf("***********************\n");
printf("* 新图书信息的添加 *\n");
printf("***********************\n");
printf(" 插入的个数:");
scanf("%d",&n1); //输入插入新图书的个数
for(i=0;i<n1;i++)
{
flage=0;
p=(datatype *)malloc(sizeof(datatype)); //分配一个节点空间
printf(" 书名: ");
scanf("%s",p->name); //输入插入书的书名
if(flage==0)
{
for(j=0;j<n;j++)
{
if(strcmp(x[j]->name,p->name) == 0 )//调用比较函数查看书名是否已知
{
x[j]->Allcounter++;
x[j]->Nowcounter++;
flage=1;
}

}

if(flage==0)
{
n++;
printf(" 第 %d 个图书数据:\n",n); //插入新的图书
p=(datatype *)malloc(sizeof(datatype));
x[n-1]=p;
printf(" 书名:");
scanf("%s",x[n-1]->name); //输入书名
printf(" 编号:");
scanf(" %s",x[n-1]->num); //输入书号
printf(" 作者:");
scanf(" %s",x[n-1]->addr); // 输入作者名
printf(" 总库存量: ");
scanf("%d",&x[n-1]->Allcounter); //输入总库存量
x[n-1]->Nowcounter=x[n-1]->Allcounter;
}
}
}
break;
case 3:
printf("***********************\n");
printf("* 图书信息的查询 *\n");
printf("***********************\n");
find(x,n);
break;
case 4:
printf("************************\n");
printf("* 图书信息的删除 *\n");
printf("************************\n");
delnode(x);
break;
case 5:
printf("************************\n");
printf("* 图书信息的显示 *\n");
printf("************************\n");
printlist(x);
break;
case 6:
printf("************************\n");
printf(" 图书的借阅\n");
printf("************************\n");
jieyue(x,n);
break;
case 7:
printf("************************\n");
printf(" 图书的归还\n");
printf("************************\n");
guihuan(x,n);
break;
case 0:
printf("\t 谢谢使用,再见! \n");
return;
}
}
}
//*************************
//主函数程序
//*************************
void main ()
{
redo(); //调用主递归函数
}
//*************************
//功能菜单函数
//*************************
int menu_select()
{
int i;
printf(" 欢迎进入图书管理系统!\n");
printf("===========================\n");
printf(" 1. 图书信息的采集\n");
printf(" 2. 新图书的插入\n");
printf(" 3. 图书信息的查询\n");
printf(" 4. 图书的删除\n");
printf(" 5. 图书的显示\n");
printf(" 6. 图书的借阅\n");
printf(" 7. 图书的归还\n");
printf(" 0. 退出管理系统\n");
printf("===========================\n");
printf(" 请选择0-7: ");
scanf("%d",&i);
while(i<0||i>7)
{
printf("\n\t输入出错,重选0-7: ");
scanf("%d",&i);
}
return i;
}
//********************************
// 建立链表图书建造函数
//********************************
void creatlist(datatype *x[])
{
int i;
printf(" 请输入要建立图书的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf(" 第 %d 个图书数据:\n",i+1);
p=(datatype *)malloc(sizeof(datatype)); //分配一个节点空间
x[i]=p;
printf(" 书名:"); //输入图书各项内容
scanf("%s",x[i]->name);
printf(" 编号:");
scanf(" %s",x[i]->num);
printf(" 作者:");
scanf(" %s",x[i]->addr);
printf(" 总库存量: ");
scanf("%d",&x[i]->Allcounter);
x[i]->Nowcounter=x[i]->Allcounter;
}
}

//**********************************
// 查找函数程序
//*********************************
void find(datatype *x[],int n)
{

char num[10];
char name[9];
int t,i;
printf("=================\n"); //输出查找方式
printf(" 1.按编号查询 \n");
printf(" 2.按书名查询 \n");
printf("=================\n");
printf(" 请选择 : ");
scanf("%d",&t); //输入选择信息
if(t==1)
{
printf(" 请输入要查找者的编号: ");
scanf("%s",num); //输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num)==0) //调用strcmp函数
{
printf(" 编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
else
{
printf(" 请输入要查询的书名: ");
scanf("%s",name); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name)==0)
{
printf("编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
}
//******************************
//删除函数程序
//******************************
void delnode(datatype *x[])
{
char num1[10],name1[10]; //定义两个字符数组
int i,j,m=1,p;
printf(" 1.按编号删除\n"); //输出选择方式
printf(" 2.按书名删除\n");
printf(" 3.返回\n");
printf(" 请选择:\n");
scanf("%d",&p); //输入选择信息
if(p>3||p<1)
{
printf(" 您的输入有误,请重新输入!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现删除程序
{
case 1:
printf(" 输入要删除书的编号:\n");
scanf(" %s",num1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;j<n;j++)
x[j]=x[j+1]; //将该书信息删除
printf(" 该书已删除!\n");
}
}
if(m==1)
printf(" 没有这样的的图书\n");
break;
case 2:
printf(" 输入要删除书的名字:\n");
scanf("%s",&name1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;j<n;j++) //将该书信息删除
x[j]=x[j+1];
printf(" 该书已删除!\n");
}
}
if(m==1)
printf(" 没有这样的的图书\n");
break;
case 3:
break;

}
}
//////////////////////////
////借阅函数程序
/////////////////////////
void jieyue(datatype *x[],int n)
{
int i,m=1,p;
char name1[10],num1[10]; //定义两个字符数组
printf(" 1.按名字借阅\n"); //输出选择方式
printf(" 2.按编号借阅\n");
printf(" 3.返回\n");
printf(" 请选择\n");
scanf("%d",&p); //输入选择信息
if(p>3||p<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现查询程序
{
case 1:
printf(" 请输入你要的书的名字!\n");
scanf("%s",&name1); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--;
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 2:
printf(" 请输入你要的书的编号!\n");
scanf("%s",&num1); // 输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--; //现存书数量减1
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 3:
break;
}
}
///////////////////////
/////归还程序
//////////////////////
void guihuan(datatype *x[],int n)
{
int i,q,m=1;
char name1[10],num1[10]; //定义两个字符数组
printf(" 1.按书名归还\n"); //输出可选择方式
printf(" 2.按书号归还\n");
printf(" 3.返回\n");
printf(" 请选择\n");
scanf("%d",&q); //输入选择信息
if(q>3||q<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&q); //重新输入选择信息
}
switch(q) //实现归还程序
{
case 1:
printf(" 输入归还书的书名: ");
scanf("%s",&name1); // 输入书名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0)
{
m=0;
x[i]->Nowcounter++;
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("===============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("===============================================\n");
}
if(strcmp(x[i]->name,name1)==0)
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 2:
printf("输入归还书的书号\n");
scanf("%s",&num1); // 输入书号
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0)
{
m=0;
x[i]->Nowcounter++; //显存书增加1
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("==============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("==============================================\n");
}
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 3:
break;
}
}
//**************************************
// 输出程序
//**************************************
void printlist(datatype *x[])
{
int i;
printf("编号 书名 作者 现存量 总存量\n"); //输出图书各项信息
for(i=0;i<n;i++)
{
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
printf("===============================================\n");
}
求采纳为满意回答。

C++编写个图书管理系统程序

enumState{Borrowed,Available};//Borrowed表示被借出,Available表示书籍可用。

classBook{

public:

//定义类型别名以实现抽象

typedefmultisetdata_t;

//不允许书籍默认构造。只允许通过传入书名构造。将书籍状态设为“可用”

Book()=delete;

Book(constname_t&name):name(name),state(Available){}

~Book()=default;

//使用书名比较书籍间的相互关系

booloperator<(constBook&other)const{returnname

booloperator==(constBook&other)const{returnname==other.name;}

//一些访问和修改的函数

//关于书籍名字和书籍状态(“可用”,“已借”)

StateGetState()const{returnstate;}

name_tGetName()const{returnname;

voidSetName(constname_t&_name){name=_name;}

voidSetState(StatenewState){state=newState;}

private:

c++图书馆管理系统

name_tname;

Statestate;

};

classLibrary{

public:

//定义一系列类型类型别名实现抽象

typedefmultisetdata_t;

typedeftypenameBook::name_tname_t;

typedeftypenamedata_t::iteratorIterator;

typedefvectorInfo_t;

typedefstringfile_name_t;

//只允许该类默认构造,不允许复制

Library()=default;

Library(constLibrary&)=delete;

Library&operator=(constLibrary&)=delete;

//分别为增加,删除,借阅,归还书籍。

voidInsert(constBook&book){libraryData.insert(book);}

boolRemove(constname_t&name);

boolBorrow(constname_t&name);

boolGiveBack(constname_t&name);

//返回该类中书籍的相关信息

c++图书馆管理系统

vectorGetBookInfo(constname_t&name)const;

vectorGetAllBookInfo()const;

//返回该类中书籍的数目

size_tCount(constname_t&name)const{returnlibraryData.count(Book(name));}

size_tNumOfBook()const{returnlibraryData.size();}

//保存信息到文件,从文件读取信息

//接受文件名为参数

voidSaveToFile(conststring&fileName)const;

boolLoadFromFile(conststring&fileName);

private:

//储存书籍的容器

data_tlibraryData;

//内部辅助函数。输入书籍的名字,返回一对迭代器(std::pair)指向一个区间范围。该范围内的书籍都有相同名字name

inlineauto_find(constname_t&name)const->constpair

{

returnlibraryData.equal_range(Book(name));

}

};

//打印“>>>”用以实现交互界面

inlinevoidPrintPromt(ostream&os);

//打印指导信息。每次运行该系统都会输出该内容

voidPrintInstroduction(ostream&os);

//打印帮助信息。在系统中输入help会调用该函数输出帮助

voidPrintHelp(ostream&os);

//打印错误信息。该函数会将参数s直接打印出来(加上换行符)

inlinevoidPrintError(ostream&os,conststring&s);

//将系统中的全部书籍以表格形式输出。接受library类。通过调用PrintTitle(打印表格)和PrintAllBook(打印所有书籍)执行打印

inlinevoidPrintTable(ostream&os,constLibrary&lib);

//打印表格的题头。执行实际的打印行为

inlinevoidPrintTitle(ostream&os);

//打印系统中的全部书籍。通过调用PrintBookInOneLine打印书籍

voidPrintAllBook(ostream&os,constLibrary&lib);

//实际执行打印行为的函数。每次只打印一行。接受Book的对象为参数

inlinevoidPrintBookInOneLine(ostream&os,constBook&book);

扩展资料

C++编写程序注意事项

1、算:计算利润,计算一元二次方程的根,计算一个数列的和等。

2、找:找最大的值,找最短的一条路径,找一个字符串的位置等。

3、实现功能:实现撤销,重做的功能实现某种操作的功能等。

4、字符串查找,在记事本里有一个查找的功能,输入要查找的关键字,能够快速找到它所在位置,如果没找到并给出提示,现在要求在一个字符串里找到一个子串,和记事本的查找功能一样。

求图书馆管理系统C++源代码

#include<iostream>
#include<fstream>
#include<windows.h>
#include<stdlib.h>
using namespace std;
void mainmenu();
void Manage_Book();
void input_Book();
void input_Reader();
void New_Book();
void Seek_Book();
void Borrow_Manage();
void Borrow_Book();
void Return_Book();
void Output_Message();
void Exit_System();
int u,v=3,k=0;
struct Book
{
char name[20];
int booknumber;
int num_present;
int num_all;
}book[1000];
struct Reader
{
char name[20];
int readernumber;
int card;
}reader[3];
void mainmenu()
{
int Num_Choice1,flag=1;
system("color E");
for(;k<=0;k++)
{
input_Book();
input_Reader();
}
while(flag==1)
{
system("cls");
cout<<"\t\t\t◆◆◆◆◆主菜单◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.图书管理 ☆"<<endl
<<"\t\t\t☆ 2.借阅管理 ☆"<<endl
<<"\t\t\t☆ 3.输出信息 ☆"<<endl
<<"\t\t\t☆ 4.退出系统 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"请输入所需要的服务编码"<<endl;
cin>>Num_Choice1;
switch(Num_Choice1)
{
case 1:
Manage_Book();
break;
case 2:
Borrow_Manage();
break;
case 3:
Output_Message();
break;
case 4:
Exit_System();
flag=0;
break;
default:
flag=0;
cout<<"输入有误!!"<<endl;
}
}
}
void Manage_Book()
{
int flag1=1,Num_Choice2;
system("cls"); while(flag1==1)
{
cout<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.新书入库 ☆"<<endl
<<"\t\t\t☆ 2.图书查询 ☆"<<endl
<<"\t\t\t☆ 3.返回主菜单 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cin>>Num_Choice2;
switch(Num_Choice2)
{
case 1:
flag1=2;
New_Book();
break;
case 2:
flag1=2;
Seek_Book();
break;
case 3:
mainmenu();
default:
flag1=1;
cout<<"输入有误!"<<endl;
system("pause");
system("cls");
}
}}
void input_Book()
{
cout<<"请依照提示输入现有的三本图书的信息:"<<endl;
for(int i=0;i<3;i++)
{
cout<<"书名:"<<endl;
cin>>book[i].name;
cout<<"书号:"<<endl;
cin>>book[i].booknumber;
cout<<"库存量:"<<endl;
cin>>book[i].num_all;
cout<<"现存量:"<<endl;
cin>>book[i].num_present;
}
}
void New_Book()
{
system("cls");
int j;
char newbook_name[20];
cout<<"请输入新书书名:"<<endl;
cin>>newbook_name;
for(j=0;j<1000;j++)
{
if(strcmp(newbook_name,book[j].name)==0)
{
book[j].num_all++;
book[j].num_present++;
break;
}
}
if(j==1000)
{
cout<<"请为此新书编号:"<<endl;
v++;
cin>>book[v].booknumber;
strcpy(book[v].name,newbook_name);
book[v].num_all=1;
book[v].num_present=1;
}
else cout<<"已有此书,库存量加一"<<endl;
system("pause");
}
void Seek_Book()
{
system("cls");
int k,booknumber;
cout<<"请输入所要查询的书号:"<<endl;
cin>>booknumber;
for(k=0;k<1000;k++)
{
if(book[k].booknumber==booknumber)
{
cout<<"书号:"<<booknumber<<endl;
cout<<"书名:"<<book[k].name<<endl;
cout<<"库存量:"<<book[k].num_all<<endl;
cout<<"现存量:"<<book[k].num_present<<endl;
system("pause");
break;
}
}
if(k==1000)
{
cout<<"未找到此书!!"<<endl;
system("pause");
}
}
void Borrow_Manage()
{
int flag=1;
system("cls");
int Num_Choice3;
while(flag==1)
{
cout<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.借书登记 ☆"<<endl
<<"\t\t\t☆ 2.还书管理 ☆"<<endl
<<"\t\t\t☆ 3.返回主菜单 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cin>>Num_Choice3;
switch(Num_Choice3)
{
case 1:
flag=2;
Borrow_Book();
break;
case 2:
flag=2;
Return_Book();
break;
case 3:
mainmenu();
default:
flag=1;
cout<<"输入有误!!"<<endl;
system("pause");
}
system("cls");
}
}
void input_Reader()
{
system("cls");
cout<<"请依照提示输入现有的三位读者的信息:"<<endl;
for(int m=0;m<3;m++)
{
cout<<"姓名:"<<endl;
cin>>reader[m].name;
cout<<"编号:"<<endl;
cin>>reader[m].readernumber;
reader[m].card=0;
}
}
void Borrow_Book()
{
system("cls");
char reader_name[20];
int n,book_number;
cout<<"请输入读者姓名:"<<endl;
cin>>reader_name;
for(n=0;n<3;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
{
if(reader[n].card!=0)
{
cout<<"已借书,不能再借,请按任意键返回"<<endl;
system("pause");
mainmenu();
}
else
break;
}
}
if(n==3)
{
cout<<"无此读者!输入有误!!按任意键返回主菜单"<<endl;
system("pause");
mainmenu();
}
cout<<"请输入所借图书书号:"<<endl;
cin>>book_number;
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=book_number;
}
for(n=0;n<v;n++)
{
if(book[n].booknumber==book_number)
{
if(book[n].num_present==0)
{
cout<<"该书已经被借完,请按任意键返回"<<endl;
system("pause");
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=0;
}
mainmenu();
}
else
{
book[n].num_present--;
cout<<"借书成功,请按任意键返回"<<endl;
system("pause");
break;
}
}
}
if(n==v)
{
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=0;
}
cout<<"所输入的书号不存在,请按任意键返回主菜单"<<endl;
system("pause");
mainmenu();
}
}void Return_Book()
{
system("cls");
int j;
char reader_name[20];
int book_number;
cout<<"请输入读者姓名:"<<endl;
cin>>reader_name;
for(j=0;j<3;j++)
{
if(strcmp(reader_name,reader[j].name)==0)
break;
}
if(j==3)
{
cout<<"无此读者!输入有误!!按任意键返回主菜单"<<endl;
system("pause");
mainmenu();
}
cout<<"请输入所还图书书号:"<<endl;
cin>>book_number;

for(j=0;j<3;j++)
{
if(strcmp(reader_name,reader[j].name)==0)
{
if(book_number==reader[j].card)
{
reader[j].card=0;
for(j=0;j<v;j++)
{
if(book[j].booknumber==book_number)
{
book[j].num_present++;
cout<<"还书成功,请按任意键返回"<<endl;
system("pause");
break;
}
}
}
else
{
cout<<"该读者未借此书"<<endl;
system("pause");
}
}
if(j==v)
cout<<"所输入的书号不存在:"<<endl;
}
}
void Output_Message()
{
system("cls");
int q;
cout<<"以下是图书信息"<<endl<<endl;
for(q=0;q<v;q++)
{
cout<<"书号:"<<book[q].booknumber<<'\t';
cout<<"书名:"<<book[q].name<<'\t';
cout<<"库存量:"<<book[q].num_all<<'\t';
cout<<"现存量:"<<book[q].num_present<<endl;
}
cout<<"以下是读者信息"<<endl<<endl;
for(q=0;q<3;q++)
{
cout<<"姓名:"<<reader[q].name<<'\t'
<<"编号:"<<reader[q].readernumber<<'\t'
<<"所借书号:"<<reader[q].card<<endl;
}
system("pause");
}
void Exit_System()
{
system("cls");
cout<<"欢迎下次使用,谢谢"<<endl;
system("pause");
}
void main()
{
mainmenu();
}

C++图书馆系统检索问题



这个链接可能对你有帮助

急用C++图书管理系统

#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>//输入/输出文件流类
using namespace std;
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述

class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name[10]; //读者姓名
int borbook[Maxbor];//所借图书
public:
Reader() {}
char *getname() {return name;} //获取姓名
int gettag() {return tag;} //获取删除标记
int getno() {return no;} //获取读者编号
void setname(char na[]) //设置姓名
{
strcpy(name,na);

}
void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;

}
}

}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;

}
}
return 0;
}
void disp()//读出读者信息
{
cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;

}
};

//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //关闭 reader.txt
}
void clear()//删除所有读者信息
{
top=-1;
}
int addreader(int n,char *na)//添加读者时先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;

}
Reader *query(int readerid)//按编号查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //输出所有读者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//读者库维护
~RDatabase() //析构函数,将read[]写到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();

}
};
void RDatabase::readerdata()
{

char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入读者编号:";
cin >> readerid;
cout << "输入读者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "输入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 该读者不存在 "<<endl;
break;
}
cout << "输入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 输入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 该读者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "读入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"该读者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"输入错误,请从新输入:";break;
}
}
}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//获取姓名
int getno(){ return no; }//获取图书编号
int gettag(){ return tag; }//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//删除图书
void addbook(int n,char *na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void disp()//输出图书
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<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)//增加图书
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找图书
{
for (int i=0;i<=top;i++)
if (book[i].getno()==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];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入图书编号:"<<endl;
cin >> bookid;
cout << "输入图书书名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "输入图书编号:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 该图书不存在 "<<endl;
break;
}
cout << "输入新的书名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 读入图书编号:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该图书不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 读入图书编号:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该图书不存在"<< endl;
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"输入错误,请从新输入:";
}
}
}

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

void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";

cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借书 读者编号:";
cin >>readerid;
cout <<" 图书编号: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按编号查找
if (NULL==r)
{
cout <<" 不存在该读者,不能借书"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在该图书,不能借书"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 该图书已借出,不能借书"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"还书\n 读者编号:";
cin >>readerid;
cout << " 图书编号:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在该读者,不能还书" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在该图书,不能还书" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"输入错误,请从新输入:";

}
}
}
我也还是学生,我也用VB和数据库编写了 管理系统。

标签

相关资讯

我是中博奥客服:小奥
中博奥技术有限公司& 版权所有工信部备案号:豫ICP备11015869号-8 Copyright © 2023-2024

档案整理档案数字化

档案扫描档案管理软件系统

TEL:18937133779

To Top