求用C++编写一个图书借阅程序

求用C++编写一个图书借阅程序,第1张

解决过一个类似的~

如下:

#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语言,模拟借书还书、温州图书馆办理借书证需要什么...等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9359468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存