|
|
#include "stdio.h"
|
|
|
|
|
|
#include "stdlib.h"
|
|
|
|
|
|
#include "conio.h"//定义了通过控制台进行数据输入和数据输出的函数
|
|
|
|
|
|
#include "string.h"//定义字符数组
|
|
|
|
|
|
#include "math.h"
|
|
|
|
|
|
#define LEN sizeof(struct library)
|
|
|
|
|
|
#define LEN1 sizeof(struct reader)
|
|
|
|
|
|
#define NULL 0
|
|
|
|
|
|
struct library//图书馆结构体
|
|
|
|
|
|
{int xcl;//库存
|
|
|
|
|
|
float price;//单价
|
|
|
|
|
|
char name[20],author[20],chuban[20],kind[20],shuhao[20];
|
|
|
|
|
|
struct library *next;
|
|
|
|
|
|
};
|
|
|
|
|
|
struct reader//读者结构体
|
|
|
|
|
|
{
|
|
|
|
|
|
int zhenghao;
|
|
|
|
|
|
char mingzi[20],riqi[20],zname[20];
|
|
|
|
|
|
struct reader *next;
|
|
|
|
|
|
};
|
|
|
|
|
|
void mainmenu()//主菜单
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("**************************************************");
|
|
|
|
|
|
printf("\n\n 1.图书信息\n\n");
|
|
|
|
|
|
printf("\n\n 2.借阅系统\n\n");
|
|
|
|
|
|
printf("\n\n 3.退出系统\n\n");
|
|
|
|
|
|
printf("\n\n 请按键选择,回车确定\n");
|
|
|
|
|
|
printf("*************************************************\n");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
void menu1() //显示图书馆信息菜单
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("****************************************************");
|
|
|
|
|
|
printf("\n 1.增加图书\n\n");
|
|
|
|
|
|
printf("\n 2.删除图书\n\n");
|
|
|
|
|
|
printf("\n 3.图书查询\n\n");
|
|
|
|
|
|
printf("\n 4.库存浏览\n\n");
|
|
|
|
|
|
printf("\n 5.返回上一层\n\n");
|
|
|
|
|
|
printf("\n 请按键选择,回车确定\n");
|
|
|
|
|
|
printf("***************************************************\n");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
void menu2() //显示查询菜单
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("请输入书号,书名,作者或类别查询:\n");
|
|
|
|
|
|
printf("类别(科学技术 语言文学 政治经济 历史地理 意识形态 艺术)\n\n");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
void main1()//main1函数
|
|
|
|
|
|
{void tsgxx();//声明
|
|
|
|
|
|
void jieshuxitong();//声明
|
|
|
|
|
|
char choose;
|
|
|
|
|
|
mainmenu();
|
|
|
|
|
|
scanf("%c",&choose);
|
|
|
|
|
|
switch(choose)//功能函数选择
|
|
|
|
|
|
{ case '1':
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '2':
|
|
|
|
|
|
jieshuxitong();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '3':
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
exit(0);
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}}
|
|
|
|
|
|
void tsgxx()//图书馆信息函数
|
|
|
|
|
|
{ void tsjinku();
|
|
|
|
|
|
void shanchu();
|
|
|
|
|
|
void chaxunts();
|
|
|
|
|
|
void xianshikucun();//函数声明
|
|
|
|
|
|
char choose;
|
|
|
|
|
|
menu1();
|
|
|
|
|
|
scanf("%c",&choose);
|
|
|
|
|
|
scanf("%c",&choose);
|
|
|
|
|
|
for (;;)
|
|
|
|
|
|
switch(choose)
|
|
|
|
|
|
{ case '1':
|
|
|
|
|
|
tsjinku();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '2':
|
|
|
|
|
|
shanchu();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '3':
|
|
|
|
|
|
chaxunts();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '4':
|
|
|
|
|
|
xianshikucun();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case '5':
|
|
|
|
|
|
main1();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}}
|
|
|
|
|
|
int tjzs()//统计文本个数函数
|
|
|
|
|
|
{ FILE *fp;
|
|
|
|
|
|
int txcl=0,n;
|
|
|
|
|
|
float tprice=0;
|
|
|
|
|
|
char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'};
|
|
|
|
|
|
fp=fopen("library.txt","r");//打开文件
|
|
|
|
|
|
for (n=0;!feof(fp);n++)//逐个读文件
|
|
|
|
|
|
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
|
|
|
|
|
|
n--;
|
|
|
|
|
|
fclose(fp);//关闭文件
|
|
|
|
|
|
return (n);//返回个数
|
|
|
|
|
|
}
|
|
|
|
|
|
int tjdzzs()//统计文本个数函数
|
|
|
|
|
|
{ FILE *fp;
|
|
|
|
|
|
int zhenghao=0,n;
|
|
|
|
|
|
char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
|
|
|
|
|
|
fp=fopen("reader.txt","r");//打开文件
|
|
|
|
|
|
for (n=0;!feof(fp);n++)//逐个读文件
|
|
|
|
|
|
fscanf(fp,"%d%s%s%s ",&zhenghao,&mingzi,&riqi,&zname);
|
|
|
|
|
|
fclose(fp);//关闭文件
|
|
|
|
|
|
return (n);//返回个数
|
|
|
|
|
|
}
|
|
|
|
|
|
void tsjinku()//图书进库函数
|
|
|
|
|
|
{ FILE *fp;
|
|
|
|
|
|
int xcl=0,n=0;
|
|
|
|
|
|
float price=0;
|
|
|
|
|
|
char name[20]={'\0'},author[20]={'\0'},kind[20]={'\0'},chuban[20]={'\0'},shuhao[20]={'\0'};
|
|
|
|
|
|
char hitkey;
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
if ((fp=fopen("library.txt","r"))==NULL)//打开图书馆文件,不存在此文件则新建
|
|
|
|
|
|
{ fp=fopen("library.txt","w");
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}
|
|
|
|
|
|
fp=fopen("library.txt","a");
|
|
|
|
|
|
printf("\n请按以下格式输入图书信息:\n书号 书名 作者 出版社 类别 进库量 单价");
|
|
|
|
|
|
printf("\n(类别(科学技术 语言文学 政治经济 历史地理 意识形态 艺术))\n");
|
|
|
|
|
|
for (;hitkey!=27;)//循环输入
|
|
|
|
|
|
{ if (n!=0)
|
|
|
|
|
|
printf("请输入:");
|
|
|
|
|
|
scanf("%s%s%s%s%s%d%f",shuhao,name,author,chuban,kind,&xcl,&price);
|
|
|
|
|
|
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",shuhao,name,author,chuban,kind,xcl,price);
|
|
|
|
|
|
printf("继续输入请按回车,结束输入请按Esc\n");
|
|
|
|
|
|
n++;
|
|
|
|
|
|
hitkey=getch();
|
|
|
|
|
|
for (;hitkey!=13&&hitkey!=27;)
|
|
|
|
|
|
hitkey=getch();
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
printf("\n保存成功,按任意键返回上一层!");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
tsgxx();//返回上一层
|
|
|
|
|
|
}
|
|
|
|
|
|
void shanchu()//删除图书信息
|
|
|
|
|
|
{ struct library *head=NULL;
|
|
|
|
|
|
struct library *p,*p1,*p2;
|
|
|
|
|
|
int txcl=0,n=0,j,i;
|
|
|
|
|
|
float tprice=0;
|
|
|
|
|
|
char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},ttname[20]={'\0'},tshuhao[20]={'\0'};
|
|
|
|
|
|
char hitkey;
|
|
|
|
|
|
FILE *fp;
|
|
|
|
|
|
if ((fp=fopen("library.txt","r"))==NULL)//打开文件
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("\n记录文件不存在!按任意键返回");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("\n请输入你要删除的书名:");//输入删除图书书名
|
|
|
|
|
|
scanf("%s",&ttname);
|
|
|
|
|
|
printf("\n确认删除请回车,取消请按Esc\n");
|
|
|
|
|
|
hitkey=getch();
|
|
|
|
|
|
for(;hitkey!=13&&hitkey!=27;)
|
|
|
|
|
|
hitkey=getch();
|
|
|
|
|
|
if (hitkey==27)
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
fp=fopen("library.txt","r");
|
|
|
|
|
|
for (j=0;!feof(fp);)//读文件夹信息,统计个数
|
|
|
|
|
|
{ j++;
|
|
|
|
|
|
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("library.txt","r");
|
|
|
|
|
|
for (i=1;i<j;i++)
|
|
|
|
|
|
{ fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
|
|
|
|
|
|
if (strcmp(ttname,tname))//比较名字,将不同名字的信息复制到链表
|
|
|
|
|
|
{ n++;
|
|
|
|
|
|
if (n==1)//建立链表
|
|
|
|
|
|
{ p1=p2=(struct library*)malloc(LEN);
|
|
|
|
|
|
head=p1;}
|
|
|
|
|
|
else
|
|
|
|
|
|
{ p2->next=p1;
|
|
|
|
|
|
p2=p1;
|
|
|
|
|
|
p1=(struct library*)malloc(LEN);//新建链表
|
|
|
|
|
|
}
|
|
|
|
|
|
strcpy(p1->shuhao,tshuhao);//复制书号
|
|
|
|
|
|
strcpy(p1->name,tname);//复制书名
|
|
|
|
|
|
strcpy(p1->author,tauthor);//复制作者名字
|
|
|
|
|
|
strcpy(p1->chuban,tchuban);//复制出版社
|
|
|
|
|
|
strcpy(p1->kind,tkind);//复制类别
|
|
|
|
|
|
p1->xcl=txcl;//复制个数
|
|
|
|
|
|
p1->price=tprice;//复制单价
|
|
|
|
|
|
}}
|
|
|
|
|
|
if (n==0)
|
|
|
|
|
|
{ head=NULL;}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
p2->next=p1;
|
|
|
|
|
|
p1->next=NULL;
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}}
|
|
|
|
|
|
fp=fopen("library.txt","w");//清空文件
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("library.txt","a");//追加文件
|
|
|
|
|
|
p=head;
|
|
|
|
|
|
for (;p!=NULL;)//把链表内容覆盖到文件
|
|
|
|
|
|
{
|
|
|
|
|
|
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->shuhao,p->name,p->author,p->chuban,p->kind,p->xcl,p->price);
|
|
|
|
|
|
p=p->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);//关闭文件
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
printf("\n删除成功 \n按任意键返回上一层\n");
|
|
|
|
|
|
getch();//返回上一层
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
void chaxunts()//查询函数
|
|
|
|
|
|
{
|
|
|
|
|
|
FILE *fp;
|
|
|
|
|
|
char choose;
|
|
|
|
|
|
int txcl=0,n=0,k=0,i,l;
|
|
|
|
|
|
float tprice=0;
|
|
|
|
|
|
char tname[20]={'\0'},tauthor[20]={'\0'},chazhao[20]={'\0'},tchuban[20]={'\0'},
|
|
|
|
|
|
tshuhao[20]={'\0'},tkind[20]={'\0'};
|
|
|
|
|
|
if ((fp=fopen("library.txt","r"))==NULL)//打开文件
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("\n记录文件不存在!按任意键返回");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
l=tjzs();//获得文件个数
|
|
|
|
|
|
menu2();//调用菜单函数
|
|
|
|
|
|
scanf("%s",chazhao);
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
for (i=0;i<l;i++)
|
|
|
|
|
|
{ fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);//读文件信息
|
|
|
|
|
|
if(!strcmp(chazhao,tshuhao)||!strcmp(chazhao,tname)||!strcmp(chazhao,tauthor)||!strcmp(chazhao,tkind))//输出查询信息
|
|
|
|
|
|
{if (k==0)
|
|
|
|
|
|
{
|
|
|
|
|
|
printf("查询结果:\n\n");
|
|
|
|
|
|
printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t现存量\t单价\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",tshuhao,tname,tauthor,tchuban,tkind,txcl,tprice);
|
|
|
|
|
|
k++;
|
|
|
|
|
|
}}
|
|
|
|
|
|
if (k==0)//文件夹为空则输出无记录
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("\n无符合记录!\n");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
void xianshikucun()//现实库存信息
|
|
|
|
|
|
{
|
|
|
|
|
|
FILE *fp;
|
|
|
|
|
|
int xcl=0,n=0,i=0,j=0;
|
|
|
|
|
|
float price=0;
|
|
|
|
|
|
char name[20]={'\0'},author[20]={'\0'},kind[20]={'\0'},chuban[20]={'\0'},shuhao[20]={'\0'};
|
|
|
|
|
|
if ((fp=fopen("library.txt","r"))==NULL)//打开文件夹
|
|
|
|
|
|
{
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
printf("\n记录文件不存在!");
|
|
|
|
|
|
}
|
|
|
|
|
|
n= tjzs();
|
|
|
|
|
|
if (n==0)
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("\n无任何记录!");
|
|
|
|
|
|
}
|
|
|
|
|
|
fp=fopen("library.txt","r");//打开只读文件
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t库存量\t单价\n");
|
|
|
|
|
|
for (i=0;i<n;i++)//输出信息
|
|
|
|
|
|
{
|
|
|
|
|
|
fscanf(fp,"%s%s%s%s%s%d%f",shuhao,name,author,chuban,kind,&xcl,&price);
|
|
|
|
|
|
printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",shuhao,name,author,chuban,kind,xcl,price);
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
printf("\n按任意键返回\n");
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
tsgxx();
|
|
|
|
|
|
}
|
|
|
|
|
|
void menu3() //显示借书系统主菜单
|
|
|
|
|
|
{ system ("cls");
|
|
|
|
|
|
printf("*****************************************************");
|
|
|
|
|
|
printf("\n\n 1.借书登记\n\n");
|
|
|
|
|
|
printf("\n\n 2.还书登记\n\n");
|
|
|
|
|
|
printf("\n\n 3.借阅情况查看\n\n");
|
|
|
|
|
|
printf("\n\n 4.返回上一层\n\n");
|
|
|
|
|
|
printf("\n\n 请按键选择,回车确定\n");
|
|
|
|
|
|
printf("****************************************************");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
void jieshuxitong()//借书系统函数
|
|
|
|
|
|
{ void jieshu();
|
|
|
|
|
|
void huanshu();
|
|
|
|
|
|
void duzheyilang();//函数声明
|
|
|
|
|
|
char choose;
|
|
|
|
|
|
menu3();
|
|
|
|
|
|
scanf("%c",&choose);
|
|
|
|
|
|
scanf("%c",&choose);//选择功能
|
|
|
|
|
|
for (;;)
|
|
|
|
|
|
switch(choose)//调用函数
|
|
|
|
|
|
{ case '1':jieshu();break;
|
|
|
|
|
|
case '2':huanshu();break;
|
|
|
|
|
|
case '3':duzheyilang();break;
|
|
|
|
|
|
case '4':main1();break;
|
|
|
|
|
|
}}
|
|
|
|
|
|
void jieshu()//借书函数
|
|
|
|
|
|
{
|
|
|
|
|
|
FILE *fp,*fp3;
|
|
|
|
|
|
struct library *head=NULL;
|
|
|
|
|
|
struct library *p,*p1,*p2;
|
|
|
|
|
|
int txcl=0,i,loop,zhenghao=0,n=0,k=0,t=0,flag=0;
|
|
|
|
|
|
float tprice=0;
|
|
|
|
|
|
char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'},
|
|
|
|
|
|
ttname[20]={'\0'},mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
|
|
|
|
|
|
char hitkey=0;
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((fp=fopen("library.txt","r"))==NULL)//打开图书馆文件
|
|
|
|
|
|
{
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
printf("\n 图书馆无库存!按任意键退出!");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
exit (0);
|
|
|
|
|
|
}
|
|
|
|
|
|
else{{
|
|
|
|
|
|
printf("\n请输入借阅书名:\n请输入:");//输入书名
|
|
|
|
|
|
scanf("%s",zname);
|
|
|
|
|
|
k= tjzs();//统计图书馆文件个数
|
|
|
|
|
|
for (i=0;i<k;i++)//读入图书馆信息,存储到链表
|
|
|
|
|
|
{
|
|
|
|
|
|
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
|
|
|
|
|
|
n++;
|
|
|
|
|
|
if (n==1)
|
|
|
|
|
|
{ p1=p2=(struct library*)malloc(LEN);
|
|
|
|
|
|
head=p1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{ p2->next=p1;
|
|
|
|
|
|
p2=p1;
|
|
|
|
|
|
p1=(struct library*)malloc(LEN);//新建链表
|
|
|
|
|
|
}
|
|
|
|
|
|
strcpy(p1->shuhao,tshuhao);//复制书号
|
|
|
|
|
|
strcpy(p1->name,tname);//复制书名
|
|
|
|
|
|
strcpy(p1->author,tauthor);//复制作者
|
|
|
|
|
|
strcpy(p1->chuban,tchuban);//复制出版社
|
|
|
|
|
|
strcpy(p1->kind,tkind);//复制类别
|
|
|
|
|
|
p1->xcl=txcl;//复制现存量
|
|
|
|
|
|
p1->price=tprice;//复制单价
|
|
|
|
|
|
}
|
|
|
|
|
|
if (n==0)
|
|
|
|
|
|
head=NULL;
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
p2->next=p1;
|
|
|
|
|
|
p1->next=NULL;
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}}}
|
|
|
|
|
|
p=head;
|
|
|
|
|
|
for (;p!=NULL;)//读链表
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!(strcmp(p->name,zname)))//名字相同
|
|
|
|
|
|
{flag=1;//标记取1
|
|
|
|
|
|
loop=p->xcl;//现存量减1
|
|
|
|
|
|
(p->xcl)--;}
|
|
|
|
|
|
p=p->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(flag&&(loop>0))//存在借书书名且现存量大于0
|
|
|
|
|
|
{ fp=fopen("library.txt","w");
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("library.txt","a");
|
|
|
|
|
|
p=head;
|
|
|
|
|
|
for (;p!=NULL;)
|
|
|
|
|
|
{
|
|
|
|
|
|
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->shuhao,p->name,p->author,p->chuban,p->kind,p->xcl,p->price);
|
|
|
|
|
|
p=p->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
free(p);//把链表内容覆盖文件
|
|
|
|
|
|
fclose(fp);}
|
|
|
|
|
|
if(flag&&(loop>0))//存在借书书名且现存量大于0
|
|
|
|
|
|
{{
|
|
|
|
|
|
if ((fp3=fopen("reader.txt","r"))==NULL)//建读者文件夹
|
|
|
|
|
|
{ fp3=fopen("reader.txt","w");//打开只读文件
|
|
|
|
|
|
fclose(fp3);
|
|
|
|
|
|
}
|
|
|
|
|
|
fp3=fopen("reader.txt","a");//以附加的方式打开文件
|
|
|
|
|
|
}
|
|
|
|
|
|
{{ if (n!=0)
|
|
|
|
|
|
printf("\n请按以下格式输入读者信息:\n 证号 姓名 归还日期 借书书名\n请输入:");//录入读者信息
|
|
|
|
|
|
scanf("%d %s %s %s",&zhenghao,&mingzi[20],&riqi[20],&zname[20]);
|
|
|
|
|
|
fprintf(fp3,"\n%-8d%-23s%-18s%-10s\n",zhenghao,&mingzi[20],&riqi[20],&zname[20]);
|
|
|
|
|
|
fp=fopen("library.txt","w");//删除图书馆文件信息
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("library.txt","a");//重新追加信息
|
|
|
|
|
|
p=head;
|
|
|
|
|
|
for (;p!=NULL;)//把链表内容覆盖图书馆文件
|
|
|
|
|
|
{
|
|
|
|
|
|
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->shuhao,p->name,p->author,p->chuban,p->kind,p->xcl,p->price);
|
|
|
|
|
|
p=p->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fclose(fp3);
|
|
|
|
|
|
printf("成功!按任意键返回\n");
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
|
|
|
}}
|
|
|
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
printf("此书已被借完!按任意键返回!");//否则输出此书已被借完
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
|
|
|
}}
|
|
|
|
|
|
void huanshu()//还书函数
|
|
|
|
|
|
{FILE *fp,*fp3;
|
|
|
|
|
|
struct reader *head=NULL;
|
|
|
|
|
|
struct reader *p,*p1,*p2;
|
|
|
|
|
|
struct library *lhead1=NULL;
|
|
|
|
|
|
struct library *zp1,*lp1,*lp2;
|
|
|
|
|
|
int txcl=0,i;
|
|
|
|
|
|
float tprice=0;
|
|
|
|
|
|
char tname[20]={'\0'},tauthor[20]={'\0'},tkind[20]={'\0'},
|
|
|
|
|
|
tchuban[20]={'\0'},ttname[20]={'\0'},tshuhao[20]={'\0'};
|
|
|
|
|
|
int ttzhenghao=0,tzhenghao=0,n=0,k=0,t=0,flag=0;
|
|
|
|
|
|
char tmingzi[20]={'\0'},triqi[20]={'\0'},tzname[20]={'\0'},ttzname[20]={'\0'};
|
|
|
|
|
|
char hitkey=0;
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((fp=fopen("reader.txt","r"))==NULL)//不存在读者文件,则输出不能还书
|
|
|
|
|
|
{
|
|
|
|
|
|
system ("cls");
|
|
|
|
|
|
printf("\n 不存在借书者!按任意键退出!");
|
|
|
|
|
|
getch();
|
|
|
|
|
|
exit (0);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{{
|
|
|
|
|
|
printf("\n请输入读者证号和书名:\n请输入:");
|
|
|
|
|
|
scanf("%d %s",&ttzhenghao,ttzname);//输入还书证号和书名
|
|
|
|
|
|
k=tjdzzs();//获取读者文件夹信息个数
|
|
|
|
|
|
for (i=0;i<k;i++)//读取读者文件夹信息
|
|
|
|
|
|
{
|
|
|
|
|
|
fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);
|
|
|
|
|
|
if((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname))//如果证号书名存在,则标记为1
|
|
|
|
|
|
flag=1;
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("reader.txt","r");//打开读者文件
|
|
|
|
|
|
if(flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (i=0;i<k;i++)//将读者文件复制到链表
|
|
|
|
|
|
{
|
|
|
|
|
|
fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);//读取文件信息
|
|
|
|
|
|
if(!((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname)))
|
|
|
|
|
|
{ n++;
|
|
|
|
|
|
if (n==1)
|
|
|
|
|
|
{ p1=p2=(struct reader*)malloc(LEN1);//新建链表
|
|
|
|
|
|
head=p1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{ p2->next=p1;
|
|
|
|
|
|
p2=p1;
|
|
|
|
|
|
p1=(struct reader*)malloc(LEN1);//新建链表
|
|
|
|
|
|
}
|
|
|
|
|
|
p1->zhenghao=tzhenghao;//复制证号
|
|
|
|
|
|
strcpy(p1->mingzi,tmingzi);//复制读者名字
|
|
|
|
|
|
strcpy(p1->riqi,triqi);//复制日期
|
|
|
|
|
|
strcpy(p1->zname,tzname);//复制书名
|
|
|
|
|
|
}}
|
|
|
|
|
|
if (n==0)
|
|
|
|
|
|
head=NULL;
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
p2->next=p1;
|
|
|
|
|
|
p1->next=NULL;
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}
|
|
|
|
|
|
fp=fopen("reader.txt","w");//清空读者文件
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp=fopen("reader.txt","a");//追加信息
|
|
|
|
|
|
p=head;
|
|
|
|
|
|
for (;p!=NULL;)//把链表内容覆盖读者文件
|
|
|
|
|
|
{
|
|
|
|
|
|
fprintf(fp,"\n%-8d%-23s%-18s%-10s\n",p->zhenghao,p->mingzi,p->riqi,p->zname);
|
|
|
|
|
|
p=p->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
free(p);
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
}}}}
|
|
|
|
|
|
if(flag)//标记为1,即还书时
|
|
|
|
|
|
{{
|
|
|
|
|
|
{printf("确认还书请按回车!");
|
|
|
|
|
|
for (;hitkey!=13&&hitkey!=27;)
|
|
|
|
|
|
hitkey=getch();
|
|
|
|
|
|
if (hitkey==13)
|
|
|
|
|
|
printf("成功!按任意键返回!");
|
|
|
|
|
|
n=0;flag=0;
|
|
|
|
|
|
fp3=fopen("library.txt","r");//打开图书馆文件
|
|
|
|
|
|
k=tjzs();//获取图书馆文件个数
|
|
|
|
|
|
for (i=0;i<k;i++)//将图书馆文件复制到链表
|
|
|
|
|
|
{
|
|
|
|
|
|
fscanf(fp3,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);//读取信息
|
|
|
|
|
|
n++;
|
|
|
|
|
|
if (n==1)
|
|
|
|
|
|
{ lp1=lp2=(struct library*)malloc(LEN);//新建链表
|
|
|
|
|
|
lhead1=lp1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{ lp2->next=lp1;
|
|
|
|
|
|
lp2=lp1;
|
|
|
|
|
|
lp1=(struct library*)malloc(LEN);//新建链表
|
|
|
|
|
|
}
|
|
|
|
|
|
strcpy(lp1->shuhao,tshuhao);//复制书号
|
|
|
|
|
|
strcpy(lp1->name,tname);//复制书名
|
|
|
|
|
|
strcpy(lp1->author,tauthor);//复制作者
|
|
|
|
|
|
strcpy(lp1->chuban,tchuban);//复制出版社
|
|
|
|
|
|
strcpy(lp1->kind,tkind);//复制类别
|
|
|
|
|
|
lp1->xcl=txcl; //复制现存量
|
|
|
|
|
|
lp1->price=tprice;//复制单价
|
|
|
|
|
|
}
|
|
|
|
|
|
if (n==0)
|
|
|
|
|
|
{ lhead1=NULL;}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
lp2->next=lp1;
|
|
|
|
|
|
lp1->next=NULL;
|
|
|
|
|
|
fclose(fp3);
|
|
|
|
|
|
}}}
|
|
|
|
|
|
zp1=lhead1;
|
|
|
|
|
|
for (;zp1!=NULL;)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!(strcmp(zp1->name,ttzname)))//寻找书名相同
|
|
|
|
|
|
++(zp1->xcl);//现存量加1
|
|
|
|
|
|
zp1=zp1->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
fp3=fopen("library.txt","w");//清空图书馆文件
|
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
fp3=fopen("library.txt","a");//追加信息
|
|
|
|
|
|
zp1=lhead1;
|
|
|
|
|
|
for (;zp1!=NULL;)//把链表内容覆盖图书馆文件
|
|
|
|
|
|
{
|
|
|
|
|
|
fprintf(fp3,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",
|
|
|
|
|
|
zp1->shuhao,zp1->name,zp1->author,zp1->chuban,zp1->kind,zp1->xcl,zp1->price);
|
|
|
|
|
|
zp1=zp1->next;
|
|
|
|
|
|
}
|
|
|
|
|
|
fclose(fp3);
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
printf("不存在此信息!按任意键返回!");
|
|
|
|
|
|
getch();//返回
|
|
|
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
|
|
|
}
|
|
|
|
|
|
void duzheyilang()//显示借书情况函数
|
|
|
|
|
|
{
|
|
|
|
|
|
FILE *fp;
|
|
|
|
|
|
int zhenghao=0,xcl=0,n=0,i=0,j=0;
|
|
|
|
|
|
char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
|
|
|
|
|
|
if ((fp=fopen("reader.txt","r"))==NULL)//打开读者文件夹
|
|
|
{
|
|
|
system ("cls");
|
|
|
printf("\n记录文件不存在!");
|
|
|
}
|
|
|
n=tjdzzs();
|
|
|
if (n==0)
|
|
|
{ system ("cls");
|
|
|
printf("\n无任何记录!");
|
|
|
}
|
|
|
fp=fopen("reader.txt","r");
|
|
|
system ("cls");
|
|
|
printf("\n证号\t读者姓名\t\t还书日期\t书名\n");
|
|
|
for (i=0;i<n;i++)//输出文件信息
|
|
|
{
|
|
|
fscanf(fp,"%d%s%s%s\n ",&zhenghao,mingzi,riqi,zname);
|
|
|
printf("\n%-8d%-23s%-18s%-10s\n", zhenghao,mingzi,riqi,zname);
|
|
|
}
|
|
|
fclose(fp);
|
|
|
printf("\n按任意键返回\n");
|
|
|
getch();//返回
|
|
|
jieshuxitong();//调用借阅系统
|
|
|
}
|
|
|
void main()//主函数调用
|
|
|
{
|
|
|
void main1();
|
|
|
main1();
|
|
|
|
|
|
}
|