本人用C语言编写的第一个完整小程序实现图书的借阅管理,不完美之处欢迎交流! PS:我很菜。QQ:997459445

#include

#include

#include

#include

#include

#include

using namespace std;

const int Maxr=1000;//最多的读者

const int Maxb=1000;//最多的图书

const int Maxbor=7;//每位读者最多借七本书

//读者类,实现对读者的信息的描述

class Reader

{

private:

inttag; //删除标记 1:已删 0:未删

intno; //读者编号

charname[10]; //读者姓名

intborbook[Maxbor];//所借图书

public:

Reader(){}

char*getname() {return name;} //获取姓名

intgettag() {return tag;} //获取删除标记

intgetno() {return no;} //获取读者编号

voidsetname(char na[]) //设置姓名

{

strcpy(name,na);

}

voiddelbook(){ tag=1; }//设置删除标记 1:已删 0:未删

voidaddreader(int n,char *na)//增加读者

{

tag=0;

no=n;

strcpy(name,na);

for(inti=0;i

borbook[i]=0;

}

voidborrowbook(int bookid)//借书操作

{

for(inti=0;i

{

if(borbook[i]==0)

{

borbook[i]=bookid;

return;

}

}

}

intretbook(int bookid)//还书操作

{

for(inti=0;i

{

if(borbook[i]==bookid)

{

borbook[i]=0;

return1;

}

}

return0;

}

voiddisp()//读出读者信息

{

cout<< setw(5) << no <

for(inti=0;i

if(borbook[i]!=0)

cout<< borbook[i] << "and";

cout<< "]"<

}

};

//读者类库,实现建立读者的个人资料

class RDatabase

{

private:

inttop; //读者记录指针

Readerread[Maxr];//读者记录

public:

RDatabase()//构造函数,将reader.txt读到read[]中

{

Readers;

top=0;//-1;

fstreamfile("reader.txt",ios::in);//打开一个输入文件

while(1)

{

file.read((char*)&s,sizeof(s));

if(!file)break;

top++;

read[top]=s;

}

file.close();//关闭 reader.txt

}

voidclear()//删除所有读者信息

{

top=0;//-1;

}

intaddreader(int n,char *na)//添加读者时先查找是否存在

{

Reader *p=query(n);

if(p==NULL)

{

top++;

read[top].addreader(n,na);

return1;

}

return0;

}

Reader*query(int readerid)//按编号查找

{

for(int i=0;i<=top;i++)

if(read[i].getno()==readerid &&

read[i].gettag()==0)

{

return&read[i];

}

returnNULL;

}

voiddisp() //输出所有读者信息

{

for(int i=0;i<=top;i++)

read[i].disp();

}

voidreaderdata();//读者库维护

~RDatabase()//析构函数,将read[]写到reader.txt文件中

{

fstreamfile("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()

{

charchoice;

charrname[20];

intreaderid;

Reader*r;

while(choice!='0')

{

cout<

cout<

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<< " 该读者不存在"<

break;

}

cout<< "输入新的姓名:";

cin>> rname;

r->setname(rname);

break;

case'3':

cout<< " 输入读者编号:";

cin>> readerid;

r=query(readerid);

if(r==NULL)

{

cout<

break;

}

r->delbook();

break;

case'4':

cout<< "读入读者编号:";

cin>> readerid;

r=query(readerid);

if(r==NULL)

{

cout<

break;

}

r->disp();

break;

case'5':

disp();

break;

case'6':

clear();

break;

case'0':

cout<

default:cout<

}

}

}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等

class Book

{

private:

inttag;//删除标记 1:已删 0:未删

intno;//图书编号

charname[20];//书名

intonshelf;//是否再架 1:再架 2:已借

public:

Book()

{}

char*getname() { return name; }//获取姓名

intgetno(){ return no; }//获取图书编号

intgettag(){ return tag; }//获取删除标记

voidsetname(char na[])//设置书名

{

strcpy(name,na);

}

voiddelbook(){ tag=1;}//删除图书

voidaddbook(int n,char *na)//增加图书

{

tag=0;

no=n;

strcpy(name,na);

onshelf=1;

}

intborrowbook()//借书操作

{

if(onshelf==1)

{

onshelf=0;

return1;

}

return0;

}

voidretbook()//还书操作

{

onshelf=1;

}

voiddisp()//输出图书

{

cout<< setw(6) << no << setw(18) << name << setw(10)

<

}

};

//图书库类,实现对图书的维护,查找,删除等

class BDatabase

{

private:

inttop; //图书记录指针

Bookbook[Maxb]; //图书记录

public:

BDatabase()//构造函数,将book.txt读到book[]中

{

Bookb;

top=-1;

fstreamfile("books.txt",ios::in);

while(1)

{

file.read((char*)&b,sizeof(b));

if(!file) break;

top++;

book[top]=b;

}

file.close();

}

voidclear()//全删

{

top=-1;

}

intaddbook(int n,char *na)//增加图书

{

Book*p=query(n);

if(NULL==p)

{

top++;

book[top].addbook(n,na);

return1;

}

cout<

return0;

}

Book*query(int bookid)//查找图书

{

for(int i=0;i<=top;i++)

if(book[i].getno()==bookid &&book[i].gettag()==0)

{

return&book[i];

}

returnNULL;

}

voidbookdata();//图书库维护

voiddisp()

{

for(int i=0;i<=top;i++)

if(book[i].gettag()==0)

book[i].disp();

}

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

{

fstreamfile("books.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()

{

charchoice;

charbname[40];

intbookid;

Book*b;

while(choice!='0')

{

cout<

cout<

cout<

cin>> choice;

switch(choice)

{

case'1':

cout<< "输入图书编号:"<

cin>> bookid;

cout<< "输入图书书名:"<

cin>> bname;

addbook(bookid,bname);

cout<

break;

case'2':

cout<< "输入图书编号:"<

cin>> bookid;

b=query(bookid);

if(b==NULL)

{

cout << " 该图书不存在 "<

break;

}

cout<< "输入新的书名:"<

cin>> bname;

b->setname(bname);

cout<

break;

case'3':

cout<

cin>> bookid;

b=query(bookid);

if(b==NULL)

{

cout<

break;

}

b->delbook();

cout<

break;

case'4':

cout<< " 读入图书编号:"<

cin>> bookid;

b=query(bookid);

if(b==NULL)

{

cout<

break;

}

b->disp();

cout<

break;

case'5':

disp();

//readtxt();

break;

case'6':

clear();

cout<

break;

case'0':

cout<

default:cout<

}

}

}

/*struct info

{

int num;

chara[10];

charb[20];

intc;

}txt[100];*/

void readtxt()

{

//    ofstream fout;

//     fout.open("books.txt");

//     if(!fout)

//            fout<

ifstream fin("books.txt");

string s;

if(!fin)

cout<

while(getline(fin,s))

{

cout<

}

fin.close();

}

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

{

/*    unsignedFREQUENCY[] = {392,392,440,392,523,494,

392,392,440,392,587,523,

392,392,784,659,523,494,440,

689,689,523,587,523};

unsigned DELAY[] = {375,125,500,500,500,1000,

375,125,500,500,500,1000,

375,125,500,500,500,500,1000,

375,125,500,500,500,1000};

int i;

for (i = 0; i < 25; i++)

{

Beep(FREQUENCY[i],DELAY[i]);

}

*/

system("colore3");

char command[] = "D:\1.exe D:\blue hills.jpg -compress noneD:\blue hills.tiff";

WinExec(command, 1);//好像只能用16位的。。。

//     cout<

//readtxt();

//     system("cls");

charchoice;

intbookid,readerid;

RDatabaseReaderDB;

Reader*r;

BDatabaseBookDB;

Book*b;

while(choice!='0')

{

cout<

cout<

cout<

cout<

//system("cls");

cin>> choice;

system("cls");

system("color b2");

switch(choice)

{

case'1':

cout<

cin>>readerid;

cout<

cin>>bookid;

r=ReaderDB.query(readerid);//按编号查找

if(NULL==r)

{

cout<

break;

}

b=BookDB.query(bookid);

if(b==NULL)

{

cout<

break;

}

if(b->borrowbook()==0)

{

cout<< " 该图书已借出,不能借书"<< endl;

break;

}

r->borrowbook(b->getno());

break;

case'2':

cout<

cin>>readerid;

cout<< " 图书编号: ";

cin>>bookid;

r=ReaderDB.query(readerid);

if(r==NULL)

{

cout<

break;

}

cout<

b=BookDB.query(bookid);

if(b==NULL)

{

cout<

break;

}

b->retbook();

r->retbook(b->getno());

cout<

break;

case'3':

BookDB.bookdata();

break;

case'4':

ReaderDB.readerdata();

cout<

break;

case'5':

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);

cout<

system("cls");

cout<

readtxt();

case '0':

cout<

default:

cout<

}

//system("cls");

//voidreadtxt();

}

}

程序经运行后,基本功能都能简单实现,无误。

数据结构c语言编程程序,图书管理程序(数据结构c语言实现增删改查)相关推荐

  1. 程序员,别说你只会增删改查.....

    对于程序员来说,去任何一家公司面试,数据库是避不开的.开发人员对MySQL的掌握,越深入,你能做的事情就越多. 完成业务功能,懂基本的Sql语句. 做性能优化,懂索引,懂引擎. 做分库分表,懂主从,懂 ...

  2. 微信小程序云开发如何--实现简单的增删改查

    首先新建一个项目,后端服务选择 小程序·云开发 进入之后提示未:没有权限,请先开通云服务. 这时候点击云开发即可开通.首次开通云环境后,需等待大约 10 分钟方可正常使用:还请南信等待. 这时候需要进 ...

  3. java增删改查_Java程序员你真的甘心只做增删改查吗

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 最 ...

  4. C语言链接mysql数据库实现简易的学生信息增删改查

    添加学生信息: 查看学生信息: 学生信息删除: 学生信息更新: #define _CRT_SECURE_NO_DEPRECATE  /*   if (!mysql_real_connect(& ...

  5. [Golang数据库专题3]Golang语言操作SQLite3进行增删改查

    目录 一.SQLite3安装(linux) 1.2 在线安装 开始安装 目录下创建db 执行表创建语句 二.方案选型 三.编写代码 3.1 代码运行环境准备 Go语言环境 SQLite3生成db 3. ...

  6. C 语言编程 — 程序的装载与运行

    目录 文章目录 目录 文章目录 C 程序在操作系统中的装载与运行 ELF 文件 反汇编 ELF 文件 文章目录 <C 语言编程 - GCC 工具链> <C 语言编程 - 程序的编译流 ...

  7. C 语言编程 — 程序的编译流程

    目录 文章目录 目录 文章目录 C 程序的编译流程 预处理 编译 汇编 链接 编译多个源文件 文章目录 <C 语言编程 - GCC 工具链> <C 语言编程 - 程序的编译流程> ...

  8. linux+下c语言编程项目,精通UNIX下C语言编程与项目实践

    cc -I  //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...

  9. c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...

    丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池   发布时间:2018-04-09 16:40 在之后 ...

最新文章

  1. 使用IntelliJ IDEA 15和Maven创建Java Web项目
  2. HTTP隧道工具HTTPTunnel
  3. cmd52命令发送 mmc_Linux SD/MMC/SDIO驱动分析(新)
  4. You don't have permission to access /index.php on this server.
  5. Guice使用入门以及整合Redis
  6. 计算机视觉和图形学中的摄像机内参数矩阵详解
  7. uva 10254——The Priest Mathematician
  8. 动态规划——双11既可以薅羊毛还能花钱最少
  9. codesys raspberry pi_pi进不去的几种解决方法!
  10. 最小路径问题_BFS
  11. Java判断某年是不是闰年
  12. 矩形窗、汉明窗、汉宁窗的频率响应图
  13. 蓝牙定位原理-灵思科
  14. 电脑罗盘时钟html怎么设置成桌面,抖音网红款Word Clock罗盘时钟电脑桌面屏保设置教程-完整版...
  15. IDEA如何快速切换项目(快捷键切换)
  16. ASP.NET制作调查问卷
  17. 一岁半宝宝不肯吃饭怎么办
  18. 炉石传说外 挂记(序)
  19. 计算机课拔线头检讨书,实验室检讨书.doc
  20. openpyxl详解

热门文章

  1. 通过autoCAD-vba画管道单线图 [1.12]
  2. 关于自己编写简单游戏编辑器的介绍
  3. 设计模式之略见一斑(单例模式singleton)
  4. 在c语言中while与do-while,c语言中while与do while循环的主要区别是什么
  5. STM32学习:存储器组织
  6. 计算机网络学习笔记四、http和https
  7. bootstrap 模态框弹出就消失了_bootstrap模态框消失问题的解决方法
  8. 微信小程序开发分销制度济南_微信小程序分销规则你清楚吗?
  9. glid加载图片到background
  10. 反映二战的好看得电影