b2c信息网

您现在的位置是:首页 > 明日新闻 > 正文

明日新闻

图书购销管理系统源码(图书管理系统开源)

hacker2022-06-09 11:23:20明日新闻79
本文目录一览:1、数据库图书管理系统代码2、

本文目录一览:

数据库图书管理系统代码

create database db

use db

create table 借阅等级信息(

借阅等级 int primary key,

最长借阅时间 int,

最大借阅数量 int,

)

insert into 借阅等级信息 values

(0, 30, 10),

(1, 60, 20),

(2, 90, 30),

(3, 120, 40)

create table 读者信息(

姓名 char(15) not null,

证件号 char(12) primary key,

借阅等级 int default 0,

累计借书 int default 0,

foreign key(借阅等级) references 借阅等级信息(借阅等级)

)

insert into 读者信息(姓名, 证件号, 借阅等级) values

('张三', '541607120165', 1),

('李四', '541707010185', 3),

('王五', '541707120165', 1),

('赵六', '541505980268', 2),

('孙七', '541407010169', 0),

('周八', '541307010489', 1)

create table 出版社信息(

出版社 varchar(20) primary key,

地址 varchar(25),

联系电话 char(7)

)

insert into 出版社信息 values

('清华大学出版社', '北京', '4979421'),

('晟威出版社', '天津', '5564130'),

('南海出版公司', '海南', '4984910'),

('上海文艺出版社', '上海', '6640239')

create table 图书信息(

索书号 char(15) primary key,

作者 char(15),

书名 char(15),

出版社 varchar(20),

出版时间 date,

foreign key(出版社)references 出版社信息(出版社)

)

insert into 图书信息 values

('b12987', '严蔚敏', '数据结构', '清华大学出版社', '2012-02-06'),

('b97894', '东野圭吾', '幻夜', '南海出版公司', '2004-08-02'),

('b16546', '吴玉华', '物理实验教程', '清华大学出版社', '2013-05-15'),

('b89490', '张雪峰', '考研指点', '晟威出版社', '2016-12-12'),

('b56400', '郏宗培', '纸上寻仙记', '上海文艺出版社', '2011-02-05')

create table 单本图书信息(

条码号 char(7) primary key check(len(条码号) = 7),

索书号 char(15),

馆藏地 varchar(40),

书刊状态 varchar(6) check(书刊状态 in ('可借', '借出', '非可借')),

历史借阅量 int default 0,

foreign key(索书号)references 图书信息(索书号)

)

insert into 单本图书信息(条码号, 索书号, 馆藏地, 书刊状态) values

('t987628', 'b97894', '三楼A8', '借出'),

('t594805', 'b97894', '二楼C7', '可借'),

('t984910', 'b89490', '五楼A2', '借出'),

('t940566', 'b12987', '负一楼D3', '借出')

create table 借阅信息(

借阅号 char(6) primary key,

借阅时间 date,

归还时间 date,

图书条码号 char(7),

借阅人证件号 char(12),

foreign key(图书条码号) references 单本图书信息(条码号),

foreign key(借阅人证件号) references 读者信息(证件号)

)

create table 评论信息(

评论号 char(8) primary key,

评分 numeric(2, 1),

内容 varchar(200),

评论时间 date,

评论者id char(12),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号),

foreign key(评论者id)references 读者信息(证件号)

)

insert into 评论信息 values

('p12391', 8.9, '很有趣', '2015-06-24', '541707010185', 'b97894'),

('p98523', 7.8, '受益颇多', '2016-05-22', '541307010489', 'b89490'),

('p94606', 6.8, '完全看不懂orz', '2017-05-02', '541607120165', 'b12987')

create table 主题词信息(

ID char(8) primary key,

类别 char(15),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号)

)

insert into 主题词信息 values

('z64400', '计算机', 'b12987'),

('z95410', '物理', 'b16546'),

('z98500', '考研', 'b89490'),

('z64165', '推理\悬疑', 'b97894'),

('z69850', '仙侠', 'b56400')

use db

go

create trigger trigger1

on 借阅信息

after insert

as

begin 

update 读者信息                                                 --更改读者累计借书量

set 累计借书 = 累计借书 + 1                                   

from 读者信息, inserted

where 读者信息.证件号 = inserted.借阅人证件号

update 单本图书信息                                             --更改图书状态

set 单本图书信息.书刊状态 = '借出'

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

update 单本图书信息

set 历史借阅量 = 历史借阅量 + 1                                 --更改图书历史借阅量

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

end

insert into 借阅信息 values

('j13488', '2018-05-01', '2018-08-01', 't987628', '541407010169')

insert into 借阅信息 values

('j14910', '2016-12-11', '2017-01-25', 't984910', '541607120165')

insert into 借阅信息 values

('j97890', '2018-05-14', '2018-06-14', 't940566', '541607120165')

go

create view view_1(图书条码, 借阅者姓名, 编号, 借阅时间, 应还时间)

as

select 图书条码号, 姓名, 证件号, 借阅时间, 归还时间

from 借阅信息, 读者信息

where 借阅信息.借阅人证件号 = 读者信息.证件号 and 归还时间 getdate()

go

create view view_2(图书条码, 历史总借阅量)

as

select 条码号, 历史借阅量

from 单本图书信息, 图书信息

where 单本图书信息.索书号 = 图书信息.索书号 and 书名 = '幻夜'

go

create view view_3(类别, 图书条码, 历史总借阅量)

as

select 类别, 条码号, 历史借阅量

from 单本图书信息, 图书信息, 主题词信息

where 主题词信息.索书号 = 图书信息.索书号 and 图书信息.索书号 = 单本图书信息.索书号 and 类别 = '考研'

go

create view view_4(读者编号, 条码, 图书名称, 应还日期)

as

select 借阅人证件号, 图书条码号, 书名, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 归还时间 getdate() and 借阅人证件号 = '541607120165'

go

create view view_5(读者编号, 图书条码, 图书名称, 借阅日期, 归还日期)

as

select 借阅人证件号, 图书条码号, 书名, 借阅时间, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 借阅人证件号 = '541607120165'

go

create view view_6(读者编号, 图书名称, 评论时间, 评论内容)

as

select 评论者id, 书名, 评论时间, 内容

from 借阅信息, 单本图书信息, 评论信息, 图书信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 评论信息.索书号

and 评论信息.索书号 = 图书信息.索书号 and 评论者id = '541607120165'

go

create view view_7(出版社名称, 图书名称, 出版时间)

as

select top 100 percent 出版社信息.出版社, 书名, 出版时间

from 出版社信息, 图书信息

where 出版社信息.出版社 = 图书信息.出版社

order by 出版时间 asc

--执行

select * from view_1

select * from view_2

select * from view_3

select * from view_4

select * from view_5

select * from view_6

select * from view_7 order by 出版时间 asc

扩展资料:

数据库模型:

对象模型

层次模型(轻量级数据访问协议)

网状模型(大型数据储存)

关系模型

面向对象模型

半结构化模型

平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

架构

数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。

内层:最接近实际存储体,亦即有关数据的实际存储方式。

外层:最接近用户,即有关个别用户观看数据的方式。

概念层:介于两者之间的间接层。

数据库索引

主条目:数据库索引

数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

另外,索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为"空值(null)"。

例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。

数据库操作:事务

主条目:数据库事务

事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。

参考资料来源:百度百科——数据库

急求c语言程序设计 图书管理系统 源代码

#includestdio.h

#includemath.h

#includestdlib.h

#includestring.h

#define N 100 //书籍的最多本数

struct book

{ char title[30];

int number;

char author[30];

float price;

int store;

char borrower_name[20];

char borrower_gender[5];

int borrower_number;

}s[N];

int m=0;

void input(structbook *p); //输入图书信息

void save(structbook *p); //保存图书信息

void read(structbook *p); //读取图书信息

void search(structbook *p); //查找图书信息

void del(structbook *p); //删除图书信息

void borrow(structbook *p); //借阅图书

void retur(structbook *p); //归还图书

void main()

{

int x;

do

{

printf("**************************************菜单**************************************\n"

" *********** 1.输入图书信息 ********** \n"

" *********** 2.查找图书信息 ********** \n"

" *********** 3.删除图书信息 ********** \n"

" *********** 4.借阅图书 ********** \n"

" *********** 5.归还图书 ********** \n"

" *********** 0.退出 ********** \n");

printf("********************************************************************************\n");

printf("请在0-5中选择,以回车键结束\n");

scanf("%d",x);

switch(x)

{ case 1: input(s[0]);break;

case 2: search(s[0]);break;

case 3: del(s[0]);break;

case 4: borrow(s[0]);break;

case 5: retur(s[0]);break;

case 0: break;

}

}while(x!=0);

}

void input(structbook *p)

{ int y;

for(;p(s[0]+N);p++)

{ printf("请输入书名:");scanf("%s",p-title);

printf("请输入编号:"); scanf("%d",p-number);

printf("请输入作者:"); scanf("%s",p-author);

printf("请输入图书价格:"); scanf("%f",p-price);

printf("请输入图书数量:"); scanf("%d",p-store);

m++;

printf("第%d个信息已经输入完毕,是否继续?\n按任意键继续,按0键结束.",m);

scanf("%d",y);//读取是否继续

if(y==0)

{ save(s[0]);

read(s[0]);//调用读取文件函数

break;

}

}

}

void search(structbook *p)//查询模块

{ int n;

char name1[20];

char name2[20];

char c[3];

do

{ p=s[0];

printf("\t请选择查找方式:\n");//打印查询方式菜单

printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n");

printf("请在0-2中选择:\n\n");

scanf("%d",n);//读取查找方式

if(n==0) break;

switch(n)

{ case 1: printf("请输入书名:\n");scanf("%s",name1);break;

case 2: printf("请输入作者:\n");scanf("%s",name2);break;

}

for(;ps[m];p++)

{ read(s[0]);//调用读取函数

if(strcmp(p-title,name1)==0||strcmp(p-author,name2)==0)

{ printf("\n查找图书信息成功!\n");

printf("书名 编号 作者 价格 数量\n");

printf("%-10s%-10d%-10s%-10.2f%-10d\n",p-title,p-number,p-author,p-price,p-store);//打印信息

break;

}

}

printf("是否继续查找?\n“是”请键入“yes”, “否”请按任意键,返回菜单\n");

scanf("%s",c);

}while(strcmp(c,"yes")==0);//判断是否结束

}

void del(structbook *p)//删除模块

{ int i;

struct book *p1,*p2;

char name1[20];

char name2[20];

char c[3];

int n;

do

{ p=s[0];

printf("请选择删除以方式回车键结束:\n");//打印删除方式菜单

printf( " 1.按书名删除\n 2.按作者删除\n 0.返回\n");

printf("请在0-2中选择:\n\n");

scanf("%d",n);//读取查找方//

if(n==0) break;

switch(n)

{case 1:printf("请输入书名:\n");

scanf("%s",name1);break;

case 2: printf("请输入作者:\n");

scanf("%s",name2);break;

}

read(s[0]); //调用读取函数

for(i=0;im;i++,p++)

{

if(strcmp(p-title,name1)==0||strcmp(p-author,name2)==0)

{ p1=p;

for(p2=p1+1;p2=s[m];p1++,p2++)

{

strcpy(p1-title,p2-title);

strcpy(p1-author,p2-author);

p1-number=p2-number;

p1-store=p2-store;

p1-price=p2-price;

m--;

printf("删除成功!!\n");

}

}

else {printf("没有该书记录!!");

break;}

}

printf("是否继续删除?“是”请键入“yes”, “否”请按任意键,返回菜单\n");

scanf("%s",c); //读取是否继续

save(s[0]); //调用保存函数

}while(strcmp(c,"yes")==0); //判断是否继续删除

}

void borrow(structbook *p)//借书模块

{ int z;

char name3[20],name4[20];

char w[3];

do

{ p=s[0];

printf("请先查找您要借阅的图书!");

printf("请选择查找方式:\n");//打印查询方式菜单

printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n");

printf("请在0-2中选择:\n");

scanf("%d",z);//读取查找方式

if(z==0) break;

switch(z)

{ case 1: printf("请输入书名:\n");scanf("%s",name3);break;

case 2: printf("请输入作者:\n");scanf("%s",name4);break;

}

read(s[0]);//调用读取函数

for(;ps[m];p++)

{ if(strcmp(p-title,name3)==0||strcmp(p-author,name4)==0)

{

printf("\n查找图书信息成功!\n");

printf("书名 编号 作者 价格 数量\n");

printf("%-10s%-10d%-10s%-10.2fs%-10d\n",p-title,p-number,

p-author,p-price,p-store);//打印信息

printf("请输入您的姓名:");scanf("%s",p-borrower_name);

printf("请输入您的性别:");scanf("%s",p-borrower_gender);

printf("请输入您的学号:");scanf("%d",p-borrower_number);

p-store--;

printf("借书成功!\n");

printf("书名 编号 作者 价格 数量 借书人 性别 学号\n");

printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p-title,p-number,p-author,

p-price,p-store,p-borrower_name,p-borrower_gender,p-borrower_number);

break;

}

}

printf("是否继续借书??");

printf("“是”请键入“yes”, “否”请按任意键,返回菜单\n");

scanf("%s",w); //读取是否继续

save(s[0]); //调用保存函数

}while(strcmp(w,"yes")==0); //判断是否继续借书

}

void retur(structbook *p)//还书模块

{ int e,f;

char name5[20];

char name6[20];

char t[3];

do

{ p=s[0];

printf("请先查找您要还的图目!");

printf("请选择查找方式:\n"); //打印查询方式菜单

printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n");

printf("请在0-2中选择:\n\n");

scanf("%d",e); //读取查找方式

if(e==0) break;

switch(e)

{ case 1: printf("请输入书名:\n");scanf("%s",name5);break;

case 2: printf("请输入作者:\n");scanf("%s",name6);break;

}

read(s[0]);//调用读取函数

for(;ps[m];p++)

{ if(strcmp(p-title,name5)==0||strcmp(p-author,name6)==0)

{ printf("\n查找图书信息成功!\n");

printf("确认还书请按“1”!");//确认是否还书

scanf("%d",f);

if(f==1)

{ strcpy(p-borrower_name,"0");

strcpy(p-borrower_gender,"0");

p-borrower_number=0;

p-store++;

printf("书名 编号 作者 价格 数量 借书人 性别 学号\n");

printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p-title,p-number,p-author,

p-price,p-store,p-borrower_name,p-borrower_gender,p-borrower_number);

//打印信息

}

break;

}

else {printf("没有该书记录!!");

break;}

}

printf("是否继续还书?\n");

printf("“是”请键入“yes”, “否”请按任意键,返回菜单\n");

scanf("%s",t); //读取是否继续

save(s[0]); //调用保存函数

}while(strcmp(t,"yes")==0); //判断是否继续还书

}

void save(structbook *p)//保存文件

{ FILE *fp,*fp1;

int i;

if((fp=fopen("tushu.txt","wb"))==NULL)//打开文件并判断是否出错

{ printf("创建文件失败!\n\n");//打印出错提示

getchar(); return;

}

if((fp1=fopen("book.txt","wb"))==NULL)//打开文件并判断是否出错

{ printf("创建文件失败!\n\n");//打印出错提示

getchar(); return;

}

for(i=0;im;i++,p++)

if(fwrite(p,sizeof(structbook),1,fp)==0)//向文件写入数据,并判断是否出错

printf("向文件输入数据失败!\n\n");

fprintf(fp1,"%d",m);

fclose(fp);//关闭文件

fclose(fp1);//关闭文件

}

void read(structbook *p)//从文件读取信息模块

{ FILE *fp,*fp1;

int i;

if((fp=fopen("tushu.txt","rb"))==NULL)//打开文件,并判断是否出错

{ printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示

getchar();

}

if((fp1=fopen("book.txt","rb"))==NULL)//打开文件并判断是否出错

{ printf("创建文件失败!\n\n");//打印出错提示

getchar(); return;

}

fscanf(fp1,"%d",m);

fclose(fp1);//关闭文件

for(i=0;im;i++,p++)

{ fread(p,sizeof(struct book),1,fp);//从文件中读取信息

}

fclose(fp);//关闭文件

}

你把保存的文件地址自己修改一下就可以了。。希望能帮到你

急求C语言编写的图书管理系统源代码,具体要求如下

/*这有个以前用过的程序,你可以自己改改使用,但是有些功

能好像有问题,会中断运行。至于程序的缩进式格式就你自己

敲回车和退格解决吧,不然代码看起来会很乱不好看。*/

#includestdio.h

#includestring.h

#includeconio.h

#includestdlib.h

#includectype.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!=0strlen(book[i].bookname)!=0strlen(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 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;iMAXSIZE;i++)

{

boo[i].NowNum=0;

boo[i].TotNum=0;

boo[i].next=NULL;

}

}

void InitRe(lend Lin) //初始化借阅者信息

{

for(int i=0;iLIST_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;

else low=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;imidtotal;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;jtotal;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].NowNum0) //看现库存是否大于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;iRetotal;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;iRetotal;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;kRetotal;k++)

if(!Lin[k].next)

{

int j;

for(j=k;jRetotal;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;itotal;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;itotal;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;iRetotal;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;iRetotal;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("┏—————————————————M E N U————————————————┓\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;

}

}

发表评论

评论列表

  • 瑰颈照雨(2022-06-09 21:58:07)回复取消回复

    1,fp); printf("是否要输入下个职工信息?\n"); scanf("%s",choice); } printf("按任意键返回\n"); fclose(fp); }addbook(){FILE *fp;int i=0;char cho

  • 世味只酷(2022-06-09 18:56:37)回复取消回复

    .书刊状态 = '借出'from inserted, 单本图书信息where inserted.图书条码号 = 单本图书信息.条码号update 单本图书信息set 历史借阅量 = 历史借阅量 + 1               

  • 余安浊厌(2022-06-09 14:33:53)回复取消回复

    r[i].carnum==carnum) /*卡号存在,进入下一循环*/ { n=i; fclose(fp); printf("请输入你要还的书的名字\n"); scanf("%s",len

  • 酒奴过活(2022-06-09 19:29:05)回复取消回复

    { case '1':addemploy();getch();break; case '2':delemploy(