本篇文章给大家谈谈图书管理系统源代码,以及图书管理系统c++源代码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
随着科技的不断发展,信息化管理已经成为各行各业提高效率、降低成本的重要手段。在图书馆领域,图书管理系统作为信息化建设的重要组成部分,其作用不言而喻。本文将带您走进图书管理系统的源代码,揭秘其背后的技术奥秘。
一、图书管理系统概述
图书管理系统是指利用计算机技术、网络技术和数据库技术,对图书的采购、入库、借阅、归还等环节进行管理的信息系统。它可以帮助图书馆实现自动化、智能化管理,提高工作效率,降低人力成本。
二、图书管理系统源代码结构
图书管理系统源代码通常包括以下几个部分:
1. 前端界面:负责展示图书信息、操作界面和用户交互。
2. 后端逻辑:负责处理业务逻辑,如数据查询、添加、修改、删除等。
3. 数据库:存储图书信息、用户信息、借阅信息等数据。
以下是一个简单的图书管理系统源代码结构表格:
| 部分名称 | 说明 |
|---|---|
| 前端界面 | 负责展示图书信息、操作界面和用户交互 |
| 后端逻辑 | 负责处理业务逻辑,如数据查询、添加、修改、删除等 |
| 数据库 | 存储图书信息、用户信息、借阅信息等数据 |
三、前端界面技术
1. HTML/CSS/JavaScript:用于构建用户界面,实现页面布局和交互效果。
2. 框架:如Vue.js、React等,可以提高开发效率和代码质量。
四、后端逻辑技术
1. 编程语言:如Java、Python、PHP等,用于编写业务逻辑代码。
2. 框架:如Spring Boot、Django、Laravel等,可以提高开发效率和代码质量。
3. 数据库:如MySQL、Oracle、MongoDB等,用于存储和管理数据。
五、数据库设计
1. 图书信息表:存储图书的基本信息,如书名、作者、出版社、ISBN等。
2. 用户信息表:存储用户的基本信息,如姓名、性别、年龄、联系方式等。
3. 借阅信息表:存储借阅记录,如借阅人、借阅时间、归还时间等。
以下是一个简单的数据库设计表格:
| 表名 | 字段 | 说明 |
|---|---|---|
| 图书信息 | ISBN、书名、作者、出版社等 | 存储图书的基本信息 |
| 用户信息 | 用户ID、姓名、性别、年龄、联系方式等 | 存储用户的基本信息 |
| 借阅信息 | 借阅ID、用户ID、图书ISBN、借阅时间、归还时间等 | 存储借阅记录 |
六、源代码实现示例
以下是一个简单的图书管理系统源代码实现示例:
“`java
// Java后端代码
public class BookManager {
// 查询图书信息
public List
// 模拟查询数据库
List
books.add(new Book(“
求C语言图书管理系统源代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//
#define MAXSIZE 100//最大值定义为100
#define LIST_INIT_SIZE 100//图书证使用者最大值定义为100
//借书人的结构体
typedef struct Boro//借书行为
{
char BNum[20];//借书的书号
char RetDate[8];//归还日期
struct Boro*next;
}Bor;
typedef struct LinkBook
{
Bor*next;//该图书证的借书行为
char CNum[20];//证号
int Total;//借书的数量
}lend[LIST_INIT_SIZE];//借书人数组
//图书的结构体信息
typedef struct LNode
{
char CardNum[20];//图书证号
struct LNode*next;
}LinkList;//借书人
typedef struct book
{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。
char num[20];//书号
char name[20];//书名
char auth[20];//作者
char pub[20];//出版社
int TotNum;//总库存
int NowNum;//现库存
LinkList*next;//借了该书的人
}ook[MAXSIZE];
//
int Retotal;//读者数量
int total;//定义外部变量.书的种类数
//
//结构体初始化
void InitBo(ook&boo)//初始化图书信息
{
for(int i=0;i<MAXSIZE;i++)
{
boo[i].NowNum=0;
boo[i].TotNum=0;
boo[i].next=NULL;
}
}
void InitRe(lend&Lin)//初始化借阅者信息
{
for(int i=0;i<LIST_INIT_SIZE;i++)
Lin[i].next=NULL;
}
//
int mid=0;//外部函数mid,用来返回查找到的位置
bool BinarySearch(ook boo,char SearchNum[])//二分法查找比较书号
{//用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置
int low=0,high=total-1;
int found=0;
while(low<=high)
{
mid=(low+high)/2;//中间点
if(strcmp(boo[mid].num,SearchNum)==0)//书号相同
{
found=1;
return true;
}//查找成功
if(strcmp(boo[mid].num,SearchNum)!=0)//书号不同
high=mid-1;
elselow=mid+1;
}
if(found==0)
return false;//查找失败
}
void Buy(ook&boo, char BuyNum[])
{//1、采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包
//括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。
if(BinarySearch(boo,BuyNum))//如果书库中有此书
{
boo[mid].TotNum++;//总库存加1
boo[mid].NowNum++;//现库存加1
printf(“入库成功.\n”);
printf(“已更改书库中该书的信息。编号%s的书%s作者是%s,出版社是%s,目前的总库存是%d,现库存是%d。\n”,boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum);
}
if(!BinarySearch(boo,BuyNum))
{
int i;
for(i=total;i>mid&&total;i–)//插在适合位置保持有序
boo[i]=boo[i-1];//空出插入位置
printf(“该书在书库中不存在。设立新书目,请补全书的详细信息。\n”);
strcpy(boo[i].num,BuyNum);
printf(“该书购入的数量是:”);
scanf(“%d”,&boo[i].NowNum);
boo[i].TotNum=boo[i].NowNum;
printf(“该书的名字是:”);
scanf(“%s”,&boo[i].name);
printf(“该书的作者是:”);
scanf(“%s”,&boo[i].auth);
printf(“该书的出版社是:”);
scanf(“%s”,&boo[i].pub);//补全信息
boo[i].next=NULL;
total++;//总量+1
printf(“已增加该书的信息。编号%s的书%s作者是%s,出版社是%s,目前的总库存是%d,现库存是%d。\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
printf(“入库成功.\n”);
}
}
void Delete(ook&boo,char DeleteNum[])
{//2、清空库存:某一种书已无保留价值,将它从图书账目中注销。
if(BinarySearch(boo,DeleteNum)==false||total==0)//如果无此书
printf(“书库中没有该书.\n”);
if(BinarySearch(boo,DeleteNum))//若有
{
if(!boo[mid].next)
{
int j;
for( j=mid;j<total;j++)
boo[j]=boo[j+1];
strcpy(boo[j].num,boo[j+1].num);
strcpy(boo[j].name,boo[j+1].name);
strcpy(boo[j].auth,boo[j+1].auth);
strcpy(boo[j].pub,boo[j+1].pub);
boo[j].TotNum=boo[j+1].TotNum;
boo[j].NowNum=boo[j+1].NowNum;
printf(“已成功删除该书.\n”);
}
else printf(“该书有借阅者,无法删除。\n”);
}
}
void Borrow(ook&boo,lend&Lin,char BorrowNum[],char CaNum[])
{//3、借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,
//并登记借阅者的图书证号和归还期限。
Bor*p,*q;
LinkList*m,*n;
if(!BinarySearch(boo,BorrowNum)||total==0)//如果没有找到此书
printf(“书库里没这书。\n”);//如果有这书
if(BinarySearch(boo,BorrowNum))//书库里有
{
if(boo[mid].NowNum>0)//看现库存是否大于0
{
boo[mid].NowNum–;//借出一本,少1
if(boo[mid].next==NULL)//若该书信息下显示该种书还没被人借过
{
m=(LinkList*)malloc(sizeof(LNode));//分配
boo[mid].next=m;//该图书信息中的链表的第一个结点
strcpy(m->CardNum,CaNum);
m->next=NULL;//后一个结点为空
}
else//如果已经有人在借这书了
{
m=boo[mid].next;
while(m->next)//遍历到最后一个结点
m=m->next;
n=(LinkList*)malloc(sizeof(LNode));//分配空间,增加1个结点
m->next=n;
strcpy(n->CardNum,CaNum);//记录证号
n->next=NULL;
}
int i=0;
for(i=0;i<Retotal;i++)//
{
if(!strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息
{
p=Lin[i].next;
while(p->next)p=p->next;//遍历到最后一个结点
q=(Bor*)malloc(sizeof(Boro));//分配空间
p->next=q;
strcpy(q->BNum,BorrowNum);//记录书号
printf(“输入归还日期:”);
scanf(“%s”,&q->RetDate);
q->next=NULL;
printf(“借阅成功.\n”);
break;//找到证了就跳出循环
}
}
if(i==Retotal)//如果没有这张证的信息
{
strcpy(Lin[i].CNum,CaNum);//记录证号
p=(Bor*)malloc(sizeof(Boro));//分配空间
Lin[i].next=p;
strcpy(p->BNum,BorrowNum);
printf(“输入归还日期:”);
scanf(“%s”,&p->RetDate);
p->next=NULL;
Retotal++;//借阅证号信息总数加1
printf(“借阅成功.\n”);
}
}
else printf(“借阅失败.该书现在库存为0.\n”);
}
}
void Return(ook&boo,lend&Lin,char ReturnNum[],char BorrowerNum[])
{//4、归还:注销对借阅者的登记,改变该书的现存量。
Bor*p,*q;
LinkList*m,*n;
int flag=0;//设置一个参数
if(!BinarySearch(boo,ReturnNum)||!total)//没书
printf(“书库中无此书.\n”);
if(BinarySearch(boo,ReturnNum))//有书
{
m=boo[mid].next;
if(!strcmp(m->CardNum,BorrowerNum))//如果是第一个借的人还的
{
boo[mid].NowNum++;//现库存加1
boo[mid].next=m->next;//删除结点
free(m);//释放该结点的空间空间
}
else
{
while(m->next)//查找归还者的借阅者结点
{
if(!strcmp(m->next->CardNum,BorrowerNum))//如果找到
{
n=m->next;//n为归还者的借阅结点
m->next=n->next;//m指向归还者的借阅结点的下一结点
free(n);//释放空间
boo[mid].NowNum++;//现库存加1
break;
}
m=m->next;
}
}
}
//在借阅者表里查找借阅者信息
for(int i=0;i<Retotal;i++)
{
if(!strcmp(Lin[i].CNum,BorrowerNum))//如果找到借阅者
{
p=Lin[i].next;
if(!strcmp(p->BNum,ReturnNum))//如果是归还的是借的第一本书
{
Lin[i].next=p->next;//指向下一借书结点
free(p);//释放结点空间
printf(“成功归还该书.\n”);
flag=1;
break;
}
else//找不到
{
while(p->next)//找到归还书的借书结点
{
if(!strcmp(p->next->BNum,ReturnNum))//如果找到
{
q=p->next;//q为归还书的借书结点
p->next=q->next;//p指向下一借书结点
free(q);//释放空间
printf(“成功归还该书.\n”);
flag=1;
break;
}
p=p->next;
}
}
}
}
for(int k=0;k<Retotal;k++)
if(!Lin[k].next)
{
int j;
for(j=k;j<Retotal;j++)
Lin[j]=Lin[j+1];//其后都往前移一位,覆盖掉当前信息
strcpy(Lin[j].CNum,””);//删除图书证号
Retotal–;//图书证数减1
}//删除当前状态下没借书的图书证的信息,节省空间
if(flag==0)printf(“无该证信息.\n”);
}
//5、查找:实现按三种查询条件之一查找:按书号查找、
//按书名查找、按作者查找。注:可不实现组合查找,即几个条件组合查找。
void SearchByNum(ook&boo,char SeaNum[])
{//BY NUM根据书号查找
LinkList*p;
p=boo[mid].next;
if(BinarySearch(boo,SeaNum)==false)printf(“对不起,未找到您想查找的书。\n”);//二分查找没找到
else//找到了的话
{
{
printf(“┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n”);
printf(“┃书号┃书名┃作者┃出版社┃现库存┃总库存┃\n”);
printf(“┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n”);
printf(“┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n”,boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum);
printf(“┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n”);
if(boo[mid].next!=NULL)
{
printf(“┏━━━━━━━┓\n”);
printf(“┃已借该书的┃\n”);
printf(“┃图书证号┃\n”);
while(p)
{
printf(“┣━━━━━━━┫\n”);
printf(“┃%14s┃\n”,p->CardNum);
p=p->next;
}
printf(“┗━━━━━━━┛\n”);
}
}
while(p)
{
printf(“%s”,p->CardNum);//在按书号查找的函数里也显示借了这本书的借阅者的证号
p=p->next;
}
printf(“\n”);
}//显示查找的书籍的信息
}
void SearchByName(ook&boo)
{//BY NAME根据书名查找
char SeaName[20];
printf(“输入想查找的书的书名:\n”);
scanf(“%s”,&SeaName);
printf(“找到符合该书名的书的详细信息如下:\n”);
for(int i=0;i<total;i++)
{
if(strcmp(SeaName,boo[i].name)==0)//如果书名一样
{
printf(“书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}
void SearchByAuth(ook&boo)
{// BY AUTH根据作者查找
char SeaAuth[20];
printf(“输入想查找的书的作者:\n”);
scanf(“%s”,&SeaAuth);
printf(“找到符合该作者的书的详细信息如下:\n”);
for(int i=0;i<total;i++)
{
if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一样
{
printf(“书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}
//6、查看:可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。
void ViewCard(ook&boo,lend&Lin)
{//查看某图书证号的借阅者借阅的全部图书
char Num[20];
printf(“请输入您所想要查看的图书证号:\n”);
scanf(“%s”,&Num);
Bor*p;
int qqq=0;
for(int i=0;i<Retotal;i++)
{
if(strcmp(Lin[i].CNum,Num)==0)//找到该证
{
printf(“这个证借的书有:\n”);
p=Lin[i].next;
while(p)
{
printf(“%s”,p->BNum);//书号
p=p->next;
}
printf(“\n”);
qqq=1;
break;
}
}
if(qqq==0)
printf(“该证不存在.\n”);
}
void ViewBook(ook&boo,lend&Lin)
{//查看全部超期未还的图书
char date[8];
Bor*p;
printf(“请输入日期(请按格式20060605输入):\n”);
scanf(“%s”,&date);
printf(“所有超期未还的书有:\n”);
for(int i=0;i<Retotal;i++)
{
p=Lin[i].next;
while(p)//当p不空时
{
if(strcmp(p->RetDate,date)<0)//超过日期
{
printf(“书号为%s证号为%s应归还日期为%s\n”,p->BNum,Lin[i].CNum,p->RetDate);
}//显示所有超期未还的书的信息
p=p->next;
}
}
}
void Menu()//菜单
{
printf(“┏—————————————————MENU————————————————┓\n”);
printf(“││\n”);
printf(“│1.采编入库:新购入一种书,如果该书在图书账目中已经存在,│\n”);
printf(“│则将其库存量增加(包括总库存量和现库存量)。│\n”);
printf(“│如果该书不存在,则在图书账目中增加一种书,│\n”);
printf(“│总库存量和现库存量均为输入的数字。│\n”);
printf(“│2.清空库存:某一种书已无保留价值,将它从图书账目中注销。│\n”);
printf(“│3.借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,│\n”);
printf(“│并登记借阅者的图书证号和归还期限。│\n”);
printf(“│4.归还:注销对借阅者的登记,改变该书的现存量。│\n”);
printf(“│5.按书号查找。│\n”);
printf(“│6.按书名查找。│\n”);
printf(“│7.按作者查找。│\n”);
printf(“│8.查看某图书证号的借阅者借阅的全部图书。│\n”);
printf(“│9.查看全部超期未还的图书。│\n”);
printf(“│0.退出图书管理系统。│\n”);
printf(“││\n”);
printf(“┗—————————————请选择你需要的操作————————————┛\n”);
}
int main()
{
ook Bo;
lend Lin;
char BNum[20];
char CNum[20];
printf(“———————–欢迎进入图书管理系统!—————————\n\n”);
int choice=10;
int SearchCho=10,ViewCho=10;
while(choice!=0)
{
Menu();//显示菜单
scanf(“%d”,&choice);
switch(choice)
{
case 1://采编入库
printf(“请输入入库的书的书号:”);
scanf(“%s”,BNum);
Buy(Bo,BNum);
case 2://清空库存
printf(“请输入想要清除的书的书号:”);
scanf(“%s”,BNum);
Delete(Bo,BNum);
break;
case 3://借阅
printf(“请输入想要借阅的书的书号:\n”);
scanf(“%s”,&BNum);
printf(“请输入图书证号:”);
scanf(“%s”,&CNum);
Borrow(Bo,Lin,BNum,CNum);
break;
case 4://归还
printf(“请输入想要归还的书的书号:\n”);
scanf(“%s”,&BNum);
printf(“请输入图书证号:”);
scanf(“%s”,&CNum);
Return(Bo,Lin,BNum,CNum);
break;
case 5://查找//根据书号查找
printf(“请输入书号:”);//输入书号查找
scanf(“%s”,&BNum);
SearchByNum(Bo,BNum);
break;
case 6://根据书名查找
SearchByName(Bo);
break;
case 7://根据作者查找
SearchByAuth(Bo);
break;
case 8://查看某图书证所借的所有书
ViewCard(Bo,Lin);
break;
case 9://查看全部超期未还的书
ViewBook(Bo,Lin);
break;
case 0://退出系统
exit(0);break;
default:printf(“输入错误!\n”);exit(0);break;
}
}
急求C语言编写的图书管理系统源代码,具体要求如下
/*这有个以前用过的程序,你可以自己改改使用,但是有些功
能好像有问题,会中断运行。至于程序的缩进式格式就你自己
敲回车和退格解决吧,不然代码看起来会很乱不好看。*/
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
struct student/*定义学生类型,用于存放借出的书籍*/
{
int carnum;
char lendbook[10];
}student[1000];
struct employ/*定义职工类型*/
{
int employnum;
char employname[15];
int employage;
char employsex[2];
char employleve[10];
long int employtage;
}employ[50];
struct book/*定义书的类型*/
{
int booknum;
char bookname[10];
char bookcreat[10];
int turefalse;/*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];
struct car/*借书卡的数据类型*/
{
int carnum;
char studentname[10];
int studentclass;
}car[100];
huanbook()/*还书函数*/
{
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,n;
int carnum;
char lendbook[10];
printf(“请你输入你的卡号\n”);
scanf(“%d”,&carnum);
fp=fopen(“car.txt”,”r”);/*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)/*for循环判断卡号是否存在*/
{
if(car[i].carnum==carnum)/*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf(“请输入你要还的书的名字\n”);
scanf(“%s”,lendbook);
fp=fopen(“record.txt”,”r”);
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)/*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0)/*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen(“record.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue;/*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(struct student),1,fp2);/*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen(“record.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp);/*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”);/*清临时文件的记录*/
fclose(fp2);
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)/*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2);/*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);/*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”);/*清临时文件*/
fclose(fp2);
printf(“还书完毕,按任意键返回\n”);
getch();
return 1;
}
}
printf(“你没有借这样的书,任意键返回\n”);/*出错提示*/
fclose(fp);
getch();
return 0;
}
}
printf(“系统没这样的卡,和管理员联系,按任意键返回\n”);/*出错提示*/
fclose(fp);
getch();
}
findbook()
{
FILE*fp;
char bookname[10];
int ture,i;
fp=fopen(“book.txt”,”r”);
printf(“请输入你要查找的书名\n”);
scanf(“%s”,bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf(“这本书的详细资料是:%d%s%s此书现在无人借阅\n按任意键返回\n”,book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else{printf(“这本书已经有人借出\n”);fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf(“没有你要查询的书籍\n”);
fclose(fp);
return FALSE;
}
findbook1()
{
FILE*fp;
char bookcreat[10];
int ture,i;
fp=fopen(“book.txt”,”r”);
printf(“请输入你要查找的作者名\n”);
scanf(“%s”,bookcreat);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf(“这本书的详细资料是:%d%s%s此书现在无人借阅\n按任意键返回\n”,book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else{printf(“这本书已经有人借出\n”);fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf(“没有你要查询的书籍\n”);
fclose(fp);
return FALSE;
}
lendcount()
{
FILE*fp;
int i,n=0;
fp=fopen(“record.txt”,”r”);
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
printf(“卡号:%d借出的书籍:%s\n”,student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf(“目前共有%d本书借出\n”,n);
printf(“按任意键\n”);
getch();
return n;
}
chabook()
{
char ch5;
do
{
printf(“—————欢迎进入图书查询系统!————–\n”);
printf(” 1:<按书名查找>\n”);
printf(” 2:<按作者查找>\n”);
printf(” 0:<返回>\n”);
printf(“请输入0–2,其他输入非法!\n”);
scanf(“%s”,&ch5);
switch(ch5)
{
case'1':findbook();getch();break;
case'2':findbook1();getch();break;
case'0':break;
default:printf(“无此操作\n”);getch();break;
}
}while(ch5!='0');
return FALSE;
}
lendbook()
{
FILE*fp,*fp2;
int i,n;
int carnum;
printf(“请你输入你的卡号\n”);
scanf(“%d”,&carnum);
fp=fopen(“car.txt”,”r”);
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf(“请输入你要借阅的书的名字\n”);
scanf(“%s”,student[n].lendbook);
fp=fopen(“book.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0){printf(“对不起,此书有人借出,请借其他书\n”);fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen(“record.txt”,”a+”);
student[n].carnum=carnum;
fwrite(&student[n],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
fwrite(&book[i],sizeof(struct book),1,fp2);
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“借书完毕,按任意键返回\n”);
getch();
return;
}
}
printf(“不存在这样的书,任意键返回\n”);
fclose(fp);
getch();
return;
}
}
printf(“你的卡号不存在,请申请新卡,按任意键返回\n”);
fclose(fp);
getch();
}
carcount()
{
FILE*fp;
int i,n=0;
fp=fopen(“car.txt”,”r”);
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
printf(“第%d张卡<卡号:%d姓名:%s班级:%d>\n”,i+1,car[i].carnum,car[i].studentname,car[i].studentclass);
n=n+1;
}
fclose(fp);
printf(“目前共有%d本书\n”,n);
printf(“按任意键\n”);
getch();
}
delcar()
{
FILE*fp,*fp2;
int i;
int carnum;
char choice;
fp=fopen(“car.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“请输入你要删除的卡号\n”);
printf(“如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动\n”);
scanf(“%d”,&carnum);
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum!=carnum)
{
fwrite(&car[i],sizeof(struct car),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf(“是否真的要删除该卡?删除后该书籍的所有信息将无法恢复《Y/N》\n”);
scanf(“%s”,&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen(“car.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++)
{
fwrite(&car[i],sizeof(struct car),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意键返回\n”);
getch();
return;
}
else
{
printf(“按任意键返回\n”);
getch();
return;
}
}
addcar()
{
FILE*fp;
int i=0;
fp=fopen(“car.txt”,”a+”);
printf(“请你输入卡号\n”);
scanf(“%d”,&car[i].carnum);
printf(“请你输入学生姓名\n”);
scanf(“%s”,car[i].studentname);
printf(“请你输入班级\n”);
scanf(“%d”,&car[i].studentclass);
fwrite(&car[i],sizeof(struct car),1,fp);
fclose(fp);
printf(“输入完毕,任意键返回\n”);
getch();
}
changemploy()
{
FILE*fp,*fp2;
char employname[10],choice;
int i;
fp=fopen(“employ.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“请你输入要修改的职工的名字\n”);
scanf(“%s”,employname);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++)
{
if(strcmp(employ[i].employname,employname)==0)
{
printf(“你所要修改的职工的资料如下,请选择你要修改的内容\n”);
printf(“<职工号:%d职工名:%s年龄:%d性别:%s学历:%s工资:%d>\n”,employ[i].employnum,employ[i].employname,employ[i].employage,employ[i].employsex,employ[i].employleve,employ[i].employtage);
printf(“2:修改职工名\n”);
printf(“3:修改职工年龄\n”);
printf(“4:修改职工工资\n”);
printf(“5:修改职工学历\n”);
printf(“请输入1-5:”);
scanf(“%s”,&choice);
switch(choice)
{
case'1':
{
printf(“请输入新的职工号\n”);
scanf(“%d”,&employ[i].employnum);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}break;
case'2':
{
printf(“请输入新的职工姓名\n”);
scanf(“%s”,employ[i].employname);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}break;
case'3':
{
printf(“请输入新的年龄\n”);
scanf(“%d”,&employ[i].employage);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}break;
case'4':
{
printf(“请输入新的职工工资\n”);
scanf(“%d”,&employ[i].employtage);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}break;
case'5':
{
printf(“请输入新的职工学历\n”);
scanf(“%s”,employ[i].employleve);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
default:printf(“没有这样的操作”);break;
}
continue;
}
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“employ.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++)
{
fwrite(&employ[i],sizeof(struct employ),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意键返回\n”);
getchar();
return;
}
delemploy()
{
FILE*fp,*fp2;
int i;
char employname[10],choice;
fp=fopen(“employ.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“请输入你要删除的职工名\n”);
printf(“如果你输入的职工存在,系统自动删除该信息!如果不存在,系统不做任何改动\n”);
scanf(“%s”,employname);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++)
{
if(strcmp(employname,employ[i].employname)!=0)
{
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf(“是否真的要删除该职工信息?删除后的所有信息将无法恢复《Y/N》\n”);
scanf(“%s”,&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen(“employ.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++)
{
fwrite(&employ[i],sizeof(struct employ),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意键返回\n”);
getch();
return TRUE;
}
else
{
printf(“按任意键返回\n”);
getch();
return FALSE;
}
}
employcount()
{
FILE*fp;
int i,n=0;
fp=fopen(“employ.txt”,”r”);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++)
{
printf(“第%d职工的信息如下:\n<职工号:%d职工名:%s年龄:%d性别:%s学历:%s工资:%d>\n”,n+1,employ[i].employnum,employ[i].employname,employ[i].employage,employ[i].employsex,employ[i].employleve,employ[i].employtage);
n++;
}
fclose(fp);
printf(“目前共有%d个职工\n”,n);
printf(“按任意键返回\n”);
}
addemploy()
{
FILE*fp;
char choice='y';
int i=1;
fp=fopen(“employ.txt”,”a+”);
while(choice=='y'||choice=='Y')
{
printf(“请你输入职工号码\n”);
scanf(“%d”,&employ[i].employnum);
printf(“请你输入职工名\n”);
scanf(“%s”,employ[i].employname);
printf(“请输入职工年龄\n”);
scanf(“%d”,&employ[i].employage);
printf(“请你输入性别\n”);
scanf(“%s”,employ[i].employsex);
printf(“请你输入职工的学历水平\n”);
scanf(“%s”,employ[i].employleve);
printf(“请输入职工的工资\n”);
scanf(“%d”,&employ[i].employtage);
fwrite(&employ[i],sizeof(struct employ),1,fp);
printf(“是否要输入下个职工信息?\n”);
scanf(“%s”,&choice);
}
printf(“按任意键返回\n”);
fclose(fp);
}
addbook()
{
FILE*fp;
int i=0;
char choice='y';
fp=fopen(“book.txt”,”a+”);
while(choice=='y'||choice=='Y')
{
printf(“请你输入第%d本书的序号\n”,i+1);
scanf(“%d”,&book[i].booknum);
printf(“请你输入书名\n”);
scanf(“%s”,book[i].bookname);
printf(“请你输入书的作者\n”);
scanf(“%s”,book[i].bookcreat);
printf(“请设为1或0,1代表书还没人借,0表示书已经借出,设其他值,程序运行时无法得出正常结果\n”);
printf(“请你设定书的状态\n”);
scanf(“%d”,&book[i].turefalse);
fwrite(&book[i],sizeof(struct book),1,fp);
printf(“是否要输入下本书\n”);
scanf(“%s”,&choice);
}
fclose(fp);
}
bookcount()
{
FILE*fp;
int i,n=0;
fp=fopen(“book.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].bookcreat)!=0)
{
printf(“第%d本书<序号:%d书名:%s作者:%s状态:%d>\n”,i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse);
n=n+1;
}
}
fclose(fp);
printf(“目前共有%d本书\n”,n);
printf(“按任意键\n”);
}
delbook()
{
FILE*fp,*fp2;
int i;
char bookname[10],choice;
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“请输入你要删除的书名\n”);
printf(“如果你输入的书名存在,系统自动删除该信息!如果不存在,系统不做任何改动\n”);
scanf(“%s”,bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)!=0)
{
fwrite(&book[i],sizeof(struct book),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf(“是否真的要删除该书籍?删除后该书籍的所有信息将无法恢复《Y/N》\n”);
scanf(“%s”,&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意键返回\n”);
getch();
return;
}
else
{
printf(“按任意键返回\n”);
getch();
return;
}
}
changebook()
{
FILE*fp,*fp2;
char bookname[10],choice;
int i;
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“请你输入要修改的书籍的书字\n”);
scanf(“%s”,bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,bookname)==0)
{
printf(“你所要修改的书的资料如下,请选择你要修改的内容\n”);
printf(“序号:〈%d〉书名:〈%s〉作者:〈%s〉\n”,book[i].booknum,book[i].bookname,book[i].bookcreat);
printf(“1:修改书的序号\n”);
printf(“2:修改书名\n”);
printf(“3:修改作者\n”);
printf(“请输入1-3:”);
scanf(“%s”,&choice);
switch(choice)
{
case'1':
{
printf(“请输入新的序号\n”);
scanf(“%d”,&book[i].booknum);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case'2':
{
printf(“请输入新的书名\n”);
scanf(“%s”,book[i].bookname);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case'3':
{
printf(“请输入新的作者\n”);
scanf(“%s”,book[i].bookcreat);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
defaut:printf(“没有这样的操作”);break;
}
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意键返回\n”);
getchar();
return;
}
main()
{
char ch1,ch2,ch3,ch4,ch5;
do
{
printf(“\t\t请你选择操作类型:\n”);
printf(” 1:<查阅图书>\n”);
printf(” 2:<借阅图书>\n”);
printf(” 3:<管理系统>\n”);
printf(” 4:<还书>\n”);
printf(” 0:<退出>\n”);
printf(“请输入0–4\n”);
scanf(“%s”,&ch1);
switch(ch1)
{
case'1':chabook();break;
case'2':lendbook();;break;
case'3':{
do
{
printf(“—————欢迎进入管理系统!————–\n”);
printf(” 1:<增加图书>\n”);
printf(” 2:<删除图书>\n”);
printf(” 3:<修改图书资料>\n”);
printf(” 4:<书籍统计>\n”);
printf(” 5:<职工管理系统>\n”);
printf(” 6:<学生管理系统>\n”);
printf(” 0:<返回>\n”);
printf(“请输入0–6,其他输入非法!\n”);
scanf(“%s”,&ch2);
switch(ch2)
{
case'1':addbook();
break;
case'2':delbook();break;
case'3':changebook();break;
case'4':bookcount();getch();break;
case'5':{do
{
printf(“—————欢迎进入职工管理系统!————–\n”);
printf(” 1:<增加员工>\n”);
printf(” 2:<删除员工>\n”);
printf(” 3:<修改员工资料>\n”);
printf(” 4:<员工统计>\n”);
printf(” 0:<返回>\n”);
printf(“请输入0–4,其他输入非法!\n”);
scanf(“%s”,&ch3);
switch(ch3)
{
case'1':addemploy();getch();break;
case'2':delemploy();break;
case'3':changemploy();break;
case'4':employcount();getch();break;
case'0':break;
default:printf(“无此操作\n”);getch();break;
}
}while(ch3!='0');}break;
case'6':{
do
{
printf(“—————欢迎进入学生管理系统!————–\n”);
printf(” 1:<申请新卡>\n”);
printf(” 2:<删除卡号>\n”);
printf(” 3:<借书统计>\n”);
printf(” 4:<卡号统计>\n”);
printf(” 0:<返回>\n”);
printf(“请输入0–4,其他输入非法!\n”);
scanf(“%s”,&ch4);
switch(ch4)
{
case'1':addcar();break;
case'2':delcar();break;
case'3':lendcount();break;
case'4':carcount();break;
case'0':break;
default:printf(“无此操作\n”);getch();break;
}
}while(ch4!='0');}break;
case'0':break;
default:printf(“无此操作\n”);getch();break;
}
}while(ch2!='0');}break;
case'4':huanbook();break;
case'0':break;
default:printf(“无此操作\n”);getch();break;
}
}while(ch1!='0');
}
用C语言编写的"图书馆管理系统"的源代码,删减版
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/
void page_title(char*menu_item)
{
clrscr();
printf(“>>>图书管理系统<<<\n\n-%s-\n\n”,menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/
void return_confirm(void)
{
printf(“\n按任意键返回……\n”);
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/
int search_book(void)
{
int n,i;
printf(“请输入图书序号:”);
scanf(“%d”,&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf(“书名:%s\n”,books[n].name);
printf(“作者:%s\n”,books[n].author);
printf(“存数:%d of”,books[n].store);
printf(“%d\n”,books[n].total);
return n;
}
}
printf(“\n输入错误或无效图书序号.\n”);
return-1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/
void book_out(void)
{
int n,s,l,d;
page_title(“借阅图书”);
if((n=search_book())!=-1&&books[n].store>0)
{
printf(“请输入借书证序号:”);
scanf(“%d”,&s);
printf(“请输入可借天数:”);
scanf(“%d”,&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store–;
}
if(n!=-1&&books[n].store==0) printf(“此书已经全部借出.\n”);
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/
void book_in(void)
{
int n,s,l;
page_title(“归还图书”);
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf(“借阅者图书证列表:\n”);
for(l=0;l<10;l++)
if(books[n].usr[l]!=0)
printf(“[%d]-%d天\n”,books[n].usr[l],books[n].days[l]);
printf(“请输入借书证序号:”);
scanf(“%d”,&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf(“全部入藏.\n”);
return_confirm();
}
void book_add(void)
{
int n;
page_title(“注册新书”);
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf(“序号:”);
scanf(“%d”,&books[n].id);
printf(“书名:”);
scanf(“%s”,&books[n].name);
printf(“作者:”);
scanf(“%s”,&books[n].author);
printf(“数量:”);
scanf(“%d”,&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title(“注销旧书”);
if((n=search_book())!=-1) books[n].id=0;
printf(“该书已注销.\n”);
return_confirm();
}
void main(void)
{
menu: page_title(“操作选单”);
printf(“请用数字键选择操作\n\n”);
printf(“1借阅图书\n2归还图书\n\n”);
printf(“3注册新书\n4注销旧书\n\n”);
printf(“\n0退出\n”);
switch(getch())
{
case'1': book_out();break;
case'2': book_in();break;
case'3': book_add();break;
case'4': book_del();break;
case'0': exit(0);
}
goto menu;
}
{
int n;
page_title(“标题”);
if((n=search_book())!=-1) books[n].id=0;
printf(“列出未还的书?.\n”);
return_confirm();
}
void main(void)
{
menu: page_title(“书名”);
printf(“\n序号\n”);
printf(“1\n作者\n”);
printf(“3\n数量\n”);
printf(“\n0书号\n”);
switch(getch())
{
case'1': book_out();break;
case'2': book_in();break;
case'3': book_add();break;
case'4': book_del();break;
case'0': exit(0);
}
goto menu;
}
OK,关于图书管理系统源代码和图书管理系统c++源代码的内容到此结束了,希望对大家有所帮助。




