解决过一个类似的~
如下:
#include "iostream"
#include "string"
using namespace std;
class obj
{
public:
string name;
string num;
public:
obj(){name="0";num="0";}
obj(string x,string y)
{
name=x;
num=y;
}
};
class book :public obj
{
public:
string writer;
public:
book():obj(){writer="0";}
};
class reader:public obj
{
private:
book b[5];
const int MAX;
static int num;
public:
reader(string x,string y):obj(x,y),MAX(5){}
int rentbook();
void print();
};
int reader:: num =0 ;
int reader:: rentbook()
{
int i;
cout<<"输入选项:0、退出,1、借书,2、还书 "<<endl;
while(cin>>i)
{
switch(i)
{
case 0:
cout<<"!!!"<<endl;
return 0;
case 1:
if(num == 4) cout<<"已经借满5本"<<endl;
else
{
string na ,nu,author;
cout<<"输入所借书的书名:";
cin>>na;
cout<<"输入所借图书的编号:";
cin>>nu;
cout<<"输入图书的作者:";
cin>>author;
b[num]name = na;
b[num]num = nu;
b[num]writer = author;
num++;
}
break;
case 2:
if(num == 0) cout<<"没有书籍可还!"<<endl;
else
{
string na ;
cout<<"输入所还书的书名";
cin>>na;
int i;
for(i=0;i<MAX;i++)
if(b[i]name == na)
{ b[i]name ="0";b[i]num ="0";b[i]writer="0";cout<<"还书成功"<<endl; goto B ;}
cout<<"没有此书"<<endl;
}
B:break;
default :
cout<<"please input the right number!!"<<endl;
break;
}
cout<<"输入选项:0、退出,1、借书,2、还书 "<<endl;
}
}
void reader:: print()
{
int i;
cout<<"姓名:"<<obj::name<<"学号"<<obj::num<<endl;
cout<<"所借图书如下:"<<endl;
cout<<"书名"<<"\t"<<"编号"<<"\t"<<"作者"<<endl;
for(i=0;i<MAX;i++)
if(b[i]name !="0")
cout<<b[i]name<<"\t"<<b[i]num<<"\t"<<b[i]writer<<endl;
}
int main()
{reader a("wang","1234");
arentbook();
aprint();
}
这个有很多实现方法,参考程序:
#include<iostream>
#include<string>
using namespace std;
class object
{
protected:
char name[20]; //继承到图书中是代表书名,继承到读者 代表 读者姓名
int no; //继承到图书中代表图书编号,继承到读者代表借书证编号,“按道理说这里是字符型较好”
public:
object(){}
object(char na[],int n)
{
strcpy(name,na);
no=n;
}
void show()
{
cout<<name<<"\t("<<no<<")"<<endl;
}
};
class reader;//类的前向声明
class book:protected object
{
private:
char author[10];//作者
public:
book(){};
friend class reader;//reader为book的友元类,这样便于reader类访问book类的数据成员,减轻代码负担
};
class reader:protected object
{
private:
int const MAX;//借阅图书的最大数量
static int num;//记录读者借阅的图书数量
book b[15];
public:
reader(char na[],int n) :object(na,n),MAX(5){}
void rentbook()//借书
{ char name[20];
int n;
char au[10];
int i=0;
cout<<"输入数字 1 借书 ,输入 0 停止借书:"<<endl;
int select;
while(cin>>select)
{
if(select==0||i==MAX) break;
cout<<"请输入图书书名:"<<endl;
cin>>name;
cout<<"请输入图书编号:"<<endl;
cin>>n;
cout<<"请输入图书作者:"<<endl;
cin>>au;
strcpy(b[i]name,name);
no=n;
strcpy(b[i]author,au);
num++;
i++;
cout<<"输入数字 1 借书 ,输入 0 停止借书:"<<endl;
}
}
void showread()//信息输出
{
int i;
cout<<"读者信息为:\n\n"<<"姓名\t"<<"证件号码\t\n";
show();
cout<<"\n借阅信息为:\n\n";
cout<<"书名\t"<<"编号\t\t"<<"作者\n";
for(i=0;i<num;i++)
cout<<b[i]name<<"\t"<<b[i]no<<"\t\t"<<b[i]author<<"\t"<<endl;
}
};
int reader::num=0;
int main()
{
reader r("王建",800201);
rrentbook();
rshowread();
}
/主函数 或者改为:
int main()
{
char name[10]; int number;
cout<<"请输入读者姓名:\n";
cin>>name;
cout<<"请输入借书证号:\n";
cin>>number;
reader r(name,number);
rrentbook();
rshowread();
}
/
//就说个大概吧,也没有太细节,简单的做法下面的代码就可以,当然可以做得更好更复杂,那就相当于是图书馆管理系统了。下面主要是借书、还书、查询是否到期等
#include<stdioh>
#include<timeh>
#include<stringh>
#define N 5
#define M 5
typedef struct{
int year;
int month;
int day;
}Date;
typedef struct{
char name[100];
char author[50];
int available; //是否可借(1可借,0不可外借)
Date date; // 入库/借出/还入日期
}Book;
typedef struct{
int number;
char name[20];
int count; //该生所持有的书数量
Book book[3]; //每个学生最多只能同时保有3本书
}Student;
void add_book(Book ); //录入新书
int borrow_book(Book ,Student ); //借书
int return_book(Book ,Student );
int query(Book ,char); //查询
Date get_time(); //获取当前时间
int cal_day(Date); //计算是否超期
void main()
{
Book book[N];
Student stu[M];
char name[100];
int i;
//从文件中读入图书信息和学生信息
FILE fp;
fp=fopen("d:\\booktxt","r");
for(i = 0;i<N&&!feof(fp);i++)
fscanf(fp,"%s%s%d%d%d%d",book[i]name,book[i]author,&book[i]available,&book[i]dateyear,&book[i]datemonth,&book[i]dateday);
fclose(fp);
fp=fopen("d:\\studenttxt","r");
for(i= 0;i<M&&!feof(fp);i++)
{
fscanf(fp,"%d%s%d",&stu[i]number,stu[i]name,&stu[i]count);
for(int j =0;j<3;j++)
fscanf(fp,"%s%s%d%d%d%d",stu[i]book[j]name,stu[i]book[j]author,&stu[i]book[j]available,&stu[i]book[j]dateyear,&stu[i]book[j]datemonth,&stu[i]book[j]dateday);
}
fclose(fp);
int mode;
loop:
printf("1录入图书\n2借书\n3还书\n4查询\n退出\n");
scanf("%d",&mode);
switch(mode)
{
case 1:
add_book(book);
break;
case 2:
if(borrow_book(book,stu))printf("借书成功\n");
else printf("借书失败\n");
break;
case 3:
if(return_book(book,stu))printf("还书成功\n");
else printf("还书失败\n");
break;
case 4:
printf("输入书名:");
scanf("%s",name);
if(!query(book,name))printf("没有查询到该图书信息\n");
break;
default:
return;
}
goto loop;
}
//根据学号,查看是否还能借入,如能借入更新借书的学生信息和图书信息
int borrow_book(Book b,Student s)
{
printf("输入书名:");
char name[100];
scanf("%s",name);
printf("输入学号:");
int num;
scanf("%d",&num);
for(int i = 0;i<M;i++)
if(s[i]number == num && s[i]count<3)//持有数量3本以上无法借书
{
int c = s[i]count;
for(int j =0;j<N;j++)
if(strcmp(b[j]name,name)==0) //借书成功,更新信息
{
b[j]available = 0;
b[j]date = get_time();
s[i]book[c] = b[j];
s[i]count = c+1;
return 1;
}
}
return 0;
}
//根据学号和书名查找到借书信息,并更新还书信息和计算是否超期
int return_book(Book b,Student s)
{
printf("输入书名:");
char name[100];
scanf("%s",name);
printf("输入学号:");
int num;
scanf("%d",&num);
for(int j= 0;j<M;j++)
if(s[j]number == num&&s[j]count>0)
{
for(int k=0;k<s[j]count;k++)
if(strcmp(s[j]book[k]name,name)==0)
{
s[j]count--; //更新学生持有书籍数量
for(int i =0;i<N;i++)
if(strcmp(b[i]name,name)==0)
{
if(query(b,name)>0)
printf("借书超期%d天,请交纳罚金\n");
b[i]available = 1;
b[i]date = get_time();
return 1;
}
}
}
return 0;
}
void add_book(Book book)
{
//录入新书并保存至文件
}
//根据书名查找图书信息,(还可以根据学生来查找,这里没实现)
int query(Book b,char name)
{
for(int i =0;i<N;i++)
if(strcmp(b[i]name,name)==0)
{
if(b[i]available ==1){printf("本书可以借出\n");return -1;}
else
{
int days = cal_day(b[i]date);
printf("本书已被借出%d天\n",days);
if(days>10)
printf("本书已超期%d天\n",days-10);
return days-10;
}
}
return 0;
}
Date get_time()
{
Date date;
time_t curtime;
struct tm timeinfo;
time ( &curtime ); //获取时间
timeinfo = localtime ( &curtime ); //转为当地时间
dateyear = timeinfo->tm_year+1900;
datemonth = timeinfo->tm_mon+1;
dateday = timeinfo->tm_mday;
return date;
}
//计算借出的总天数
int cal_day(Date d)
{
Date od = get_time();
if(odyear == dyear)
{
if(odmonth == dmonth) return dday - odday;
else return dday - odday +(odmonth - dmonth)30; //每月按30天计
}
else
{return ((dmonth-1)30+dday) - ((odmonth-1)30 +odday) + (dyear - odyear)365;} //每年按365天计
}
以下是部分运行结果和书籍学生信息文本。
大概意思就是:多本书使用数组来保存,时间的计算用库函数。
需要民户口簿、身份z、军官证、护照等有效身份z件。
根据温州图书馆办证规定:
年满3周岁的中国公民和外籍人士可以凭居民户口簿、身份z、军官证、护照等有效身份z件办理。
办证程序:
1、凭本人身份z或有效证件,填写办证申请单。
2、请妥善保管押金凭证,以备日后退证所用。
3、一人限办一证。
扩展资料:
办证时间:
1、市府路总馆
周一至周日 8:30—17:30。
2、黎明西路老年分馆
周一至周日 8:30—17:30。
3、自助办证机
周一至周日8:30—20:20。
退证:
凭读者本人身份z或当时办读者证的有效证件、读者证及押金凭证办理退证手续,如代其他读者退证,须另附代退者身份z。退证后再办理读者证,须支付工本费10元。
参考资料来源:温州市图书馆——办证须知
以上就是关于求用C++编写一个图书借阅程序全部的内容,包括:求用C++编写一个图书借阅程序、c语言,模拟借书还书、温州图书馆办理借书证需要什么...等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)