图书管理系统源代码(图书管理系统c++源代码)

本篇文章给大家谈谈图书管理系统源代码,以及图书管理系统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 searchBooks(String keyword) {

// 模拟查询数据库

List books = new ArrayList<>();

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++源代码的内容到此结束了,希望对大家有所帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享