//库函数头文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//系统调用头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
//宏定义
#define MAX 1000 //书籍最大量
#define m 10 //属性数组下标
//结构体数组
struct book
{
char number[m];//编号
char name[m];//书名
char writer[m];//作者
int count;//总数
int loan;//借出
int residue;//剩余
}book;
struct book bk[MAX]; //图书结构体
//全局变量
int book_number=0;//书总数
int book_count=0;//书籍总数
int book_borrow=0;//借书数量
int book_no=0;//剩余数量
//字符串
char str[m]; //总数字符串
char str1[m];//借出数字符串
char str2[m];//剩余数字符串
//函数声明
void display();//主函数
void add_book();//添加图书
void find_book();//查询图书
void statistic_book();//统计图书
void borrow_book();//借出图书
void return_book();//归还图书
void delete_book();//删除图书
void read_book();//读取文件
//函数调用
void display()
{
read_book();//读取文件信息
int choose;//定义选择变量
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("**********************\n");
printf("你的选择是:");
scanf("%d",&choose);//输入选择选项
switch(choose)//选择
{
case 1:
add_book();//添加图书
break;
case 2:
find_book();//查询图书
break;
case 3:
borrow_book();//借出图书
break;
case 4:
return_book();//归还图书
break;
case 5:
delete_book();//删除图书
break;
case 6:
statistic_book();//统计图书
break;
case 0:
exit(0);//退出界面
default: //选择错误提示
printf("请正确选择!\n");
break;
}
}
while(1);//循环
}
void add_book()//添加函数
{
int i;//变量i
int fd;//文件描述符
int number;//书的数量
fd=open("t.txt",O_RDWR|O_APPEND|O_CREAT);//打开文件t.txt,存在打开,不存在创建、可追加、读写数据进入文件
if(fd<0)//判断文件状态
{
perror("文件打开失败!\n");
exit(-1);
}
printf("请输入添加的图书数量:");
scanf("%d",&number);//输入书的数量
for(i=0;i<number;i++)//输入number个书的数量
{
printf("添加第%d本图书的信息:\n",i+1);
printf("编号:");
scanf("%s",bk[i].number);//输入编号
write(fd,bk[i].number,sizeof(bk[i].number));//编号写入文件
printf("书名:");
scanf("%s",bk[i].name);//输入姓名
write(fd,bk[i].name,sizeof(bk[i].name));//姓名写入文件
printf("作者:");
scanf("%s",bk[i].writer);//输入作者
write(fd,bk[i].writer,sizeof(bk[i].writer));//作者写入文件
printf("数量:");
scanf("%d",&bk[i].count);//输入总数
snprintf(str,m,"%d ",bk[i].count);//整型转化为字符串
write(fd,str,sizeof(str));//字符串存入文件
printf("借出(0):");
scanf("%d",&bk[i].loan);//初始化借出数
snprintf(str1,m,"%d ",bk[i].loan);//整型转化为字符串
write(fd,str1,sizeof(str1)); //字符串存入文件
printf("剩余(%d):",bk[i].count);
scanf("%d",&bk[i].residue);//初始化剩余数
snprintf(str2,m,"%d\n",bk[i].residue);//整型转化为字符串
write(fd,str2,sizeof(str2)); //字符串存入文件
}
book_number=number;//书总数赋值于全局变量
close(fd);//关闭文件
read_book();//读取文件
}
void find_book()//查询函数
{
int i;
int flag=0;//标记,不存在为0,存在为1
char name[m];//定义变量
printf("请输入查询的书名为:");
scanf("%s",name);//输入变量
for(i=0;i<book_number;i++)//遍历所有图书
{
if(strcmp(bk[i].name,name)==0)//找到
{
flag=1;//标记为1
//输出书的信息
printf("编号:%s\n",bk[i].number);
printf("书名:%s\n",bk[i].name);
printf("作者:%s\n",bk[i].writer);
printf("总数:%d\n",bk[i].count);
printf("借出:%d\n",bk[i].loan);
printf("剩余:%d\n",bk[i].residue);
}
}
if(flag==0)//未找到
{
printf("没有找到%s图书信息\n",name);
}
}
void statistic_book()//统计函数
{
int i;
int flag=0;
printf("编号\t书名\t作者\t总数\t借出\t剩余\n");
for(i=0;i<book_number;i++)//遍历所有图书
{
flag=1;
printf("%s\t",bk[i].number);
printf("%s\t",bk[i].name);
printf("%s\t",bk[i].writer);
printf("%d\t",bk[i].count);
printf("%d\t",bk[i].loan);
printf("%d\n",bk[i].residue);
}
if(flag==0)
{
printf("没有任何图书信息\n");
}
}
void borrow_book()//借出函数
{
int i,t;
int num;
int flag=0;
char name[m];
printf("请输入借阅的书名:");
scanf("%s",name);
for(i=0;i<book_number;i++)
{
if(strcmp(bk[i].name,name)==0)//比较图书
{
flag=1;
printf("已找到%s书籍,总数%d,已借出%d,剩余%d:\n",name,bk[i].count,bk[i].count-bk[i].residue,bk[i].residue);//提示相关书籍信息
printf("输入借阅%s的数量:",name);
scanf("%d",&num);//输入借出数量
if(num>bk[i].count)//借出数大于书总数
{
printf("最多可借出%d本书籍\n",bk[i].count);
num=bk[i].count; //借出数赋值于书总数
}
bk[i].residue=bk[i].count-num;//求剩余数
bk[i].loan=num;//借出数赋值
printf("%s成功借出\n",name);
}
}
if(flag==0)
{
printf("没有任何%s图书信息\n");
}
}
void return_book()//归还函数
{
int i;
int flag=0;
int total=0;
int number=0;//定义归还书数量
char name[m];
printf("请输入归还的书名:");
scanf("%s",name);
for(i=0;i<book_number;i++)
{
if(strcmp(bk[i].name,name)==0)
{
flag=1;
printf("输入归还%s的数量:",name);
scanf("%d",&number);//输入归还书数量
total=bk[i].residue+number;//更新剩余数
if(bk[i].loan==0)//没有借出
{
printf("%s没有借出,无需归还\n");
break;
}
if(total<=bk[i].count)//有借出
{
bk[i].loan=bk[i].loan-number;//更新借出数
bk[i].residue=number+bk[i].residue;//更新剩余数
printf("%s归还成功\n",name);
break;
}
}
}
if(flag==0)
{
printf("没有任何%s图书信息\n");
}
}
void delete_book()//删除图书
{
int i,j;
int flag=0;//定义标记
char name[m];
printf("输入删除书籍的书名:");
scanf("%s",name);
for(i=0;i<book_number;i++)
{
if(strcmp(bk[i].name,name)==0)
{
flag=1;
if(i==book_number)//删除的书在最后一个
book_number-=1;//书总数减1
else//在中间
{
bk[i]=bk[book_number-1];
book_number-=1;
}
printf("成功删除%s书籍信息\n",name);
}
}
if(flag==0)
{
printf("没有任何%s图书信息\n");
}
}
void read_book()//读取文件
{
int t;
int fd;//文件描述符
//定义总数、借出数、剩余数变量
int num;
int num1;
int num2;
book_number=0;
//定义编号、书名、作者变量
char number[m];
char name[m];
char writer[m];
fd=open("t.txt",O_RDONLY);//打开文件
if(fd<0)//打开失败
{
perror("文件打开失败!");
}
else
{
while((t=read(fd,number,sizeof(number)))!=0&&t!=-1)//读取文件中的数据
{
strcpy(bk[book_number].number,number);//文件中读取的数据付给结构体
read(fd,name,sizeof(name));//读取书名
strcpy(bk[book_number].name,name);//文件中读取的数据付给结构体
read(fd,writer,sizeof(writer));//读取作者
strcpy(bk[book_number].writer,writer);//文件中读取的数据付给结构体
read(fd,str,sizeof(str));//读取总数
sscanf(str,"%d",&num);//字符串转化为整数
bk[book_number].count=num;//赋�
- 1
- 2
- 3
前往页