图书借阅管理系统

1、系统概述

图书借阅管理系统由管理员系统和用户系统两个子系统构成。用户运行程序后可按程序说明进入子系统,输入“1”进入管理员系统,输入“2”进入用户系统。图书信息和读者信息均用文件存储。  

管理员系统:

  1. 新增图书:管理员可输入图书的类别、书号、书名、借出状态等信息。
  2. 更改图书信息:管理员输入要更改图书的书号后,即可对图书的各类信息进行修改。
  3. 删除图书:管理员输入要删除图书的书号,删除图书的各类信息。
  4. 查找图书: 管理员可以选择书名查找、类别查找、书号查找3种方式查找目标图书。
  5. 显示所有图书信息:此功能可查看文件中的所有图书,包括新增、更改的图书。
  6. 全删当前数据:对当前执行新增、更改操作产生的数据进行删除。
  7. 退出:退出系统。

用户系统:

  1. 借阅图书:用户输入想要借阅图书的书号借阅。
  2. 归还图书:归还已借图书。
  3. 查找所有图书:查看文件中包含的图书信息。
  4. 查找图书:用户可以选择书名查找、类别查找、书号查找3种方式查找目标图书。
  5. 显示我的信息:显示用户已借阅图书的书号和剩余图书借阅数量。
  6. 退出:退出系统。

2、系统功能实现效果(部分)

e340949b1f6546e6b5c00fd566bd262b.png

c35f3b9acf374242a593f317ab1f35eb.png

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>//控制输入输出 
struct book
{char sort[20],num[20],bookname[20];int lend;int nolend;struct book *next;
};
struct reader{
char xuehao[20],name[20];
int lended;
int maxlended;
char item[5][20];
struct reader *next;
};
void bookcharge();//图书管理系统函数 
void readcharge();//用户管理系统函数
void readbook(struct book *head);//从图书信息文件中获取信息
void readreader(struct reader *head);//从用户信息文件中获取信息 
//------------------------管理员系统 ----------------------- //int menu1();//图书管理系统菜单
int menu1();//管理员菜单 
void add(struct book *head);//新增图书 
void change(struct book *head);//更改图书信息
void shanchu(struct book *head); //删除图书
void find(struct book *head); //查找图书
void show(struct book *head); //显示所有图书信息
void deleteall(struct book *head);//全删当前数据
void free(struct book *head);//退出
//------------------------用户系统---------------------------// 
struct reader *insert(struct reader *head);//返回登录读者信息指针 
int menu2();//用户菜单 
void lendbook(struct book *head,struct reader *q);//借阅图书
void returnbook(struct book *head,struct reader *q);//归还图书
void output(struct reader *head);//显示我的信息 
void freeall(struct book *head,struct reader *q);//退出
//-------------------------主函数----------------------------//main(){int x;printf("欢迎进入图书馆系统,按1进入管理员系统,按2进入用户系统");scanf("%d",&x);if(x==1)bookcharge();if(x==2)readcharge();}//---------------------管理员系统--------------------------//
void bookcharge()
{int x;struct book *headbook;headbook=(struct book *)malloc(sizeof(struct book));headbook->next=NULL;readbook(headbook);while(1){getch;system("cls");//清屏switch(x=menu1()){case 1:add(headbook);break;case 2:change(headbook);break;case 3:shanchu(headbook);break;case 4:find(headbook);break;case 5:show(headbook);break;case 6:deleteall(headbook);break;case 0:free(headbook);break;}} 
}//--------------------用户系统---------------------------//
void readcharge()
{int x;struct book *headbook;headbook=(struct book *)malloc(sizeof(struct book));headbook->next=NULL;struct reader *headreader,*p;headreader=(struct reader *)malloc(sizeof (struct reader));headreader->next=NULL; readbook(headbook);readreader(headreader);p=insert(headreader);while(1){getch();system("cls");switch(x=menu2()){case 1:lendbook(headbook,p); break;case 2:returnbook(headbook,p);break;case 3:show(headbook);break;case 4:find(headbook);break;case 5:output(p);break;case 0:free(headbook);break;}}
}void readbook(struct book *head)
{FILE *fp;if((fp=fopen("book.txt","r+"))==NULL){printf("文件读取失败\n");exit(0);}struct book *p,*tail=head;while(!feof(fp)){p=(struct book *)malloc(sizeof(struct book));fscanf(fp,"%s %s %s %d %d",p->sort,p->num,p->bookname,&p->lend,&p->nolend);p->next=NULL;tail->next=p;tail=p;}fclose(fp);
}void readreader(struct reader *head)
{FILE *fp;if((fp=fopen("reader.txt","r+"))==NULL){printf("文件读取失败\n");exit(0);}	struct reader *p,*tail=head;int i;while(!feof(fp)){p=(struct reader*)malloc(sizeof(struct reader));fscanf(fp,"%s %s %d",p->xuehao,p->name,&p->lended);for(i=0;i<p->lended;i++)fscanf(fp,"%s",p->item[i]);fscanf(fp,"%d",&p->maxlended);p->next=NULL;tail->next=p;tail=p;}fclose(fp);
}int menu1()
{int a;printf("===============图书维护系统===========\n");printf("1.新增图书\n");printf("2.更改图书信息\n");printf("3.删除图书\n");printf("4.查找图书\n");printf("5.显示所有图书信息\n");printf("6.全删当前数据\n");printf("0.退出\n");printf("===============请选择=================\n");scanf("%d",&a);return a;
}
//----------------------新增函数---------------------------------------// 
void add(struct book *head)
{FILE *fp;char ch;fp=fopen("boos.txt","ra+");struct book *p=head->next,*s;s=(struct book *)malloc(sizeof(struct book));while(p->next!=NULL)p=p->next;s->next=p->next;p->next=s;printf("新增图书信息,请输入:\n");printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量 ","未借出数量");scanf("%s %s %s %d %d",s->sort,s->num,s->bookname,&s->lend,&s->nolend);fprintf(fp,"%s %s %s %d %d",s->sort,s->num,s->bookname,s->lend,s->nolend);fputc(ch,fp);fclose(fp);printf("===============添加成功===============\n"); getch();   
}
//----------------------更改函数---------------------------------------// 
void change(struct book *head)
{char str[20];struct book *p=head->next,*p1;printf("输入你要修改的书号:\n");scanf("%s",str);printf("%10s%10s%10s\t%10s\t%10s\n","图书类别","书号","书名","已借出数量","未借出数量");while(p){if(strcmp(str,p->num)==0){printf("%10s %10s %10s %10d %10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);p1=p;}p=p->next; } printf("输入更改后的信息\n");printf("%10s%10s%10s\t%10s\t%10s\n","图书类别","书号","书名","已借出数量","未借出数量");scanf("%s %s %s %d %d",p1->sort,p1->num,p1->bookname,&p1->lend,&p1->nolend);printf("===============修改完毕================\n");getch();
}
// ----------------------删除函数-------------------------------------//
void shanchu(struct book *head)
{char a[20];struct book *p=head->next,*p1=head;printf("输入你要删除的书号:\n");scanf("%s",a);printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量 ","未借出数量");while(p){    if(strcmp(p->num,a)==0){printf("%-10s%-10s%-10s%-10d%-10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);p1->next=p->next; free(p);}p1=p;p=p->next;	 }printf("============删除完毕===========\n"); getch();
} 
//----------------------查找函数-----------------------------------------//
void find(struct book *head)
{int a,flag=0;char b[20];struct book *p=head->next;printf("选择查找方式:书名查找按1,类别查找按2,书号查找按3:\n");scanf("%d",&a);if(a==1){printf("请输入你要查找的书名:\n");scanf("%s",b);while(p){if(strcmp(p->bookname,b)==0){printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量 ","未借出数量");printf("%-10s%-10s%-10s%-10d%-10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);getch();flag=1;}p=p->next;}if(flag==0)printf("查无此书\n");printf("请按任意键继续…"); getch();}else if(a==2){printf("请输入你要查找的类别:\n");scanf("%s",b);while(p){if(strcmp(p->sort,b)==0){printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量","未借出数量");printf("%-10s%-10s%-10s%-10d%-10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);printf("请按任意键继续…"); getch();flag=1;}p=p->next; }if(flag==0)printf("查无此类\n");printf("请按任意键继续…"); getch();}else if(a==3){printf("请输入你要查找的书号:\n");scanf("%s",b);while(p){if(strcmp(p->num,b)==0){printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量 ","未借出数量");printf("%-10s%-10s%-10s%-10d%-10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);printf("请按任意键继续…"); getch();flag=1;}p=p->next; }if(flag==0)printf("查无此书\n");}elseprintf("输入错误\n");
}
//-----------------------显示所有图书信息-------------------------------//
void show(struct book *head)
{struct book *p=head->next;printf("%-10s%-10s%-10s%-10s%-10s\n","图书类别","书号","书名","已借出数量 ","未借出数量");while(p){printf("%-10s%-10s%-10s%10d%10d\n",p->sort,p->num,p->bookname,p->lend,p->nolend);p=p->next;   }getch();
} 
//-----------------------全删当前函数----------------------------------// 
void deleteall(struct book *head)
{struct book *p=head;while(p){head=head->next;free(p);p=head;}printf("=========已经全删==========\n");  getch();
}
//-----------------------退出-----------------------------------------//void free(struct book *head){struct book *p=head;while(p){head=head->next;free(p);p=head;}printf("正在退出,按任意键继续\n"); getch();}struct reader *insert(struct reader *head)
{char str[20];int flag=0;//判断学号是否存在的标记 struct reader *p=head->next;printf("用户请输入学号登录(104173101):");scanf("%s",str);while(p){if(strcmp(p->xuehao,str)==0){flag=1;break;}p=p->next;}	if(flag==1)return p;elseprintf("学号输入错误");
}
int menu2()
{int b;printf("============图书维护系统==============\n");printf("1.借阅图书\n");printf("2.归还图书\n");printf("3.查看所有图书\n");printf("4.查找图书\n");printf("5.显示我的信息\n");printf("0.退出\n");printf("============请选择====================\n");scanf("%d",&b);return b;
}
//-----------------------借阅图书----------------------------------// 
void lendbook(struct book *head,struct reader *q)
{char s[20];int flag=0;struct book *p=head->next;printf("============书籍借阅系统============\n"); printf("请输入你想要借阅的书号:");scanf("%s",s);while(p){if(strcmp(p->num,s)==0){flag=1;break;} p=p->next; } if(q->lended>q->maxlended){printf("已达最大借书数量!\n");printf("====================================\n");return ;}if(flag==1){strcpy(q->item[q->lended],s);q->lended++;p->lend++;p->nolend--;printf("借阅成功!\n");}elseprintf("查无此书!\n");printf("====================================\n");getch();
}
//--------------------------------归还图书----------------------------// 
void returnbook(struct book *head,struct reader *q)
{char s[20];int flag=0,i,t;struct book *p=head->next;printf("============书籍归还系统============\n"); printf("请输入你想要归还的书号:");scanf("%s",s);for(i=0;i<q->lended;i++)if(strcmp(q->item[i],s)==0){flag=1;t=i;break;} 			if(flag==1){memset(q->item[t],0,30);q->lended--;while(p){if(strcmp(p->num,s)==0){p->lend--;p->nolend++;}p=p->next;}printf("归还成功!\n");}elseprintf("书号输入错误!\n");printf("====================================\n");
}
//-------------------------显示我的信息----------------------// 
void output(struct reader *head)
{   int i;printf("%-10s%-10s%-10s%-10s\n","学号","姓名","已借出数量 ","最大借出数量");printf("%-10s%-10s%-10d%-10d\n",head->xuehao,head->name,head->lended,head->maxlended);printf("借书项目\n");for(i=0;i<head->lended;i++)printf("%10s",head->item[i]);
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图书馆管理系统UML各种图

1用例图 主要用来描述“用户、需求、系统功能单元”之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。 【用途】&#xff1a;帮助开发团队以一种可视化的方式理解系统的功能需求。 用例图所包含的元素如下&#xff1a;actor、usecase、子系统、四中关系&#xff…

智慧图书馆解决方案-最新全套文件

智慧图书馆解决方案-最新全套文件 一、建设背景二、思路架构三、建设方案四、获取 - 智慧图书馆全套最新解决方案合集 一、建设背景 现下&#xff0c;传统图书馆已经难以适应时代的发展&#xff0c;图书盘点繁琐、管理模式落后、阅读时间和场地受限等问题&#xff0c;迫使传统…

学校图书馆管理系统

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;学校图书馆管理系统当然也不能排除在外。学校图书馆管理系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&…

2021中国大学生程序设计竞赛(CCPC),烤仔与你不见不散!

今天也是见到超多学霸的一天呢&#xff01; 因为&#xff0c;CCPC 的参赛选手们来看烤仔啦&#xff01;北京航空航天大学、北京交通大学等高校共 95 名总决赛参赛选手在 5 月 28 日来到 Conflux 参观、交流。 由中国大学生程序设计竞赛组委会主办&#xff0c;Conflux 、旷视等…

HTML+CSS鲜花静态网页设计

&#x1f4c2;文章目录 一、&#x1f468;‍&#x1f393;网站题目二、✍️网站描述三、&#x1f4da;网站介绍四、&#x1f4a0;网站演示五、⚙️ 网站代码&#x1f9f1;HTML结构代码&#x1f492;CSS样式代码 六、&#x1f947; 如何让学习不再盲目七、&#x1f381;更多干货…

客厅窗帘要安装纱帘吗?怎么选择纱帘?-好佳居窗帘十大品牌

窗帘是我们常见的&#xff0c;但是客厅窗帘有必要装纱帘&#xff1f;很多人在选择窗帘的时候纠结要不要加一层纱帘。这种纠结可能不仅仅是选择的困难&#xff0c;纱帘的具体功能性也不是那么好理解。别急&#xff0c;我们来看看。 客厅窗帘要不要安装纱帘&#xff1f; 众所周知…

web前端 基于html实现花店购物网站源码(HTML+CSS+JavaScript) 企业网站制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

基于STM32设计的智慧浇花系统(华为云IOT)

1. 前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分而…

c#温室监控系统

上位机采用串口与下位机信&#xff0c;使用modbus通信协议控制和采集数据 可以参考一下&#xff08;直接翻到modbus的章节&#xff09;&#xff1a; MODBUS技术协议&#xff08;第三章&#xff09;.pdf chuan/临时的 - 码云 - 开源中国 (gitee.com) 首先实现通信用的modbus…

es6 filter方法_极其有用的JavaScript数组方法,可提高您的编码技能

随着ES6的开始&#xff0c;在javascript语言中添加了许多改进以改进javascript编码标准。 今天&#xff0c;我们将看到一系列非常有用的数组方法&#xff0c;这些方法将提高您的编码技能。因此&#xff0c;让我们深入了解它。 数组 该Array.of语法如下 Array.of(element0[, ele…

互联网快讯:荣耀打响重回海外第一枪;极米投影产品成双十一爆款;工业富联发起灯塔领航计划

国内要闻 《2021胡润百富榜》发布&#xff1a;农夫山泉创始人钟睒睒以3900亿元首次成为中国首富&#xff0c;抖音创始人张一鸣跃居第二&#xff1b;荣耀打响重回海外第一枪&#xff1a;多国市场发布荣耀50系列&#xff0c;已恢复与主流运营商及渠道商合作&#xff1b; 3、财富…

推荐两本 Spark 好书

点击蓝色“有关SQL”关注我哟 加个“星标”&#xff0c;天天与10000人一起快乐成长 这两本书&#xff0c;分别是&#xff1a; 《Spark 快速大数据分析》 &#xff08;英文书名《Learning Spark: Lightning-fast Data Analysis》&#xff09;《Spark高级数据分析》影印版&#x…

宋城演艺业绩同比下滑两倍:受花房科技拖累,计提超10亿元减值

因2020年度业绩大幅预亏以及拟股权投资减值准备等&#xff0c;深交所于2月2日对向宋城演艺&#xff08;SZ:300144&#xff09;下发关注函&#xff0c;要求该公司进行补充说明。 据了解&#xff0c;今年1月30日&#xff0c;宋城演艺披露的《2020年度业绩预告》、《关于拟计提长…

花椒六间房“花房之夜”落幕 全新升级不止心动

中新网1月18日电 17日&#xff0c;直播界备受关注的年度盛典“2019花房之夜”在北京凯迪拉克中心开启&#xff0c;百位明星嘉宾与来自花椒直播和六间房的近300位人气主播共同出席&#xff0c;见证了这一盛大的年度颁奖典礼。 在“花房之夜”现场&#xff0c;揭晓了“年度最受观…

EDG刷屏、花椒沉寂,“初老”花房如何闯关IPO?

LPL全球总决赛&#xff0c;EDG刷屏社交网络。 在B站、腾讯等直播平台&#xff0c;不仅各大游戏直播间人满为患&#xff0c;其它类直播间EDG相关话题也炙手可热&#xff1b;抖音、微博、朋友圈更纷纷刷出Z世代节日氛围。 与之鲜明对比的是&#xff0c;曾经的“直播界奥斯卡”花…

花椒母公司花房更新招股书:年利润4亿 周鸿祎是大股东

雷递网 雷建平 5月1日报道 花椒母公司花房集团日前向港股递交招股书&#xff0c;准备在香港上市。 一旦花房集团上市&#xff0c;将成为继斗鱼、虎牙、映客、天鸽互动之后又一家上市的直播企业&#xff0c;也是360集团孵化的又一家上市企业。 这之前&#xff0c;360集团孵化的3…

《领航优配》这只A股一字涨停!千亿巨头也火了,突然强势暴拉!

今日早盘&#xff0c;A股继续强势上攻&#xff0c;上证指数6连阳&#xff0c;科创50指数7连阳&#xff0c;中证500指数则一举突破此前的收拾平台&#xff0c;创出年内新高。 盘面上&#xff0c;光热发电、房地产、家居用品、仓储物流等板块涨幅居前&#xff0c;石油、鸡肉、光刻…

迈向应用现代化,企业开发离不开VMware Spring

“比你优秀的人&#xff0c;比你还努力”&#xff0c;这不是在说VMware Spring高效开发框架吗&#xff1f; 在蓬勃发展的Java市场&#xff0c;Spring是最受欢迎的程序语言。2021年&#xff0c;Snyk公布的JVM生态系统报告显示&#xff1a;在Java市场&#xff0c;一半以上在使用S…

马斯克陷OpenAI诈捐门!口口声声1亿美元,结果只有1500万可追溯

西风 发自 凹非寺量子位 | 公众号 QbitAI 号称给OpenAI捐了1亿美元的马斯克&#xff0c;实际上可能连一半都没给到&#xff1f;&#xff01; 众所周知&#xff0c;马斯克此前一直宣称给OpenAI捐了1亿美元&#xff0c;而且还在推特上大放厥词&#xff1a; “我仍然对于我捐赠了大…

OpenAI创始人拿微软100亿,是在下一步大棋

丰色 编译自 凹非寺量子位 | 公众号 QbitAI OpenAI获得微软100亿美元投资的消息出来后&#xff0c;一些人的想法有些沮丧&#xff1a; 一方面&#xff0c;摆脱了经济压力的OpenAI可能将不再那么“open”、顺而放弃“开发造福每个人的AI技术”的精神&#xff1b; 另一方面&#…