#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node{
long num;
char name[30];
long stu_num;
char stu_name[10];
int lent_out;
node *next;
node *pioneer;
}book,*pbook;
int count=0;
FILE *fp;
pbook head;
void insert_newbook(pbook head);
void delete_book(pbook head);
void lendout_book(pbook head);
void return_book(pbook head);
void search_book(pbook head);
void printf_bookinfo(pbook head);
void reserve_book(pbook head,int count);
void warning(pbook head,int count);
int creat_bookinfofile()
{
//fp=fopen("librarymaster.dat","a+");
if((fp=fopen("librarymaster.dat","a+"))!=NULL)
return 1;
else
return 0;
}
int main(void)
{
int choice;
pbook p,pdelete;
char a[4],bookname[30],studentname[10];
int newornot=0,booknum,studentnum,lentout;
head=(pbook)malloc(sizeof(book));
head->next=NULL;
head->pioneer=NULL;
head->num=0;
if(creat_bookinfofile())
printf("文件打开成功");
else
{
printf("打开失败,系统将关闭");
goto exitbookmaster;
}
if(newornot)
{
p=head->next;
while(!feof(fp))
{
fscanf(fp,"%d%s%d%s%d",&booknum,bookname,&studentnum,studentname,&lentout);
p->num=booknum;
strcpy(p->name,bookname);
p->stu_num=studentnum;
strcpy(p->stu_name,studentname);
p->lent_out=lentout;
count++;
}
}
if(!fclose(fp))
{
printf("关闭文件失败,强制退出程序\n");
system("pause");
//goto exitbookmaster;
exit(0);
}
do{
printf("╔══════════════════════════════════╗");
printf("║
欢迎使用图书管理系统㊣by 罗枭
║");
printf("╠══════════════════════════════════╣");
printf("║1、新增图书信息
2、删除图书信息║");
printf("║3、图书借出
4、图书归还
║");
printf("║5、搜索图书
6、显示图书信息║");
printf("║7、保存图书信息
0、退出管理系统║");
printf("╚══════════════════════════════════╝");
scanf("%d",&choice);
switch(choice)
{
case 1:insert_newbook(head);
break;
case 2:delete_book(head);
break;
case 3:lendout_book(head);
break;
case 4:return_book(head);
break;
case 5:search_book(head);
break;
case 6:printf_bookinfo(head);
break;
case 7:reserve_book(head,count);
break;
case 0:warning(head,count);
break;
}
system("cls");
printf("您刚才已进行操作 d%\n",choice);
}while(choice!=0);
fclose(fp);
printf("释放内存中,图书管理系统即将关闭");
pdelete=head;
while(pdelete!=NULL)
{
free(pdelete->pioneer);
pdelete=pdelete->next;
}
exitbookmaster:;
system("pause");
return 0;
}
void insert_newbook(pbook head)
{
long booknum,studentnum;
char bookname[30],studentname[10];
int lentout;
pbook newbook,ptr,ptr1,ptr2;
insertagain:
printf("请按顺序分别输入 新书号、新书名)");
scanf("%ld%s%ld%s",&booknum,bookname);
newbook->num=booknum;
strcpy(newbook->name,bookname);
newbook->stu_num=0;
strcpy(newbook->stu_name,"无");
newbook->lent_out=0;
ptr=head->next;
while(1)
{
ptr=ptr->next;
if( (newbook->num) > (ptr->pioneer->num) || (newbook->num) < (ptr->num) )
{
newbook->pioneer=ptr->pioneer;
newbook->next=ptr;
ptr->pioneer->next=newbook;
ptr->pioneer=newbook;
break;
}
else
{
newbook->pioneer=ptr;
newbook->next=NULL;
ptr->next=newbook;
break;
}
}
count++;
{
int choice1;
printf("继续输入请输入1,退出输入请输入0");
scanf("%d",&choice1);
if(choice1)
goto insertagain;
}
}
void delete_book(pbook head)
{
char bookname[30];
long booknum;
int choice,a;
pbook pdelete;
while(1)
{
printf("请选择删除方式");
printf("1、按书号删除");
printf("2、按书名删除(将会删除所有同名的书本信息)");
printf("0、退出");
scanf("%d",&choice);
if(choice==1)
{
printf("请输入书号:\n");
scanf("%ld",&booknum);
for(pdelete=head;pdelete;pdelete=pdelete->next)
{
if(booknum==pdelete->num)
{
pdelete->pioneer->next=pdelete->next;
pdelete->next->pioneer=pdelete->pioneer;
free(pdelete);
count--;
}
}
if(pdelete==NULL)
printf("无此书号,请确认后继续查询,退出查询请输入“0”");
scanf("%d",&a);
if(!a)
break;
}
else if(choice==2)
{
printf("请输入书名:\n");
scanf("%s",bookname);
for(pdelete=head;pdelete;pdelete=pdelete->next)
{
if(strcmp(bookname,pdelete->name)==0)
{
pdelete->pioneer->next=pdelete->next;
pdelete->next->pioneer=pdelete->pioneer;
free(pdelete);
count--;
}
}
if(pdelete==NULL)
printf("无此书号,请确认后继续查询,退出查询请输入“0”");
scanf("%d",&a);
if(!a)
break;
}
else
break;
}
}
void lendout_book(pbook head)
{
long booknum,studentnum;
char studentname[10];
pbook ptr=head->next;
lentoutagain:
printf("请输入借出的书号:\n");
scanf("%ld",&booknum);
printf("请输入学号、姓名");
scanf("%ld%s",&studentnum,studentname);
if( (ptr->num) < (booknum) )
{
while( ptr->num!=booknum )
{
ptr=ptr->next;
}
}
else if( (ptr->num) > (booknum))
{
while( ptr->num!=booknum )
{
ptr=ptr->pioneer;
}
}
else
{
printf("输入书号有错,请重新输入\n");
goto lentoutagain;
}
ptr->stu_num=studentnum;
strcpy(ptr->stu_name,studentname);
ptr->lent_out=1;
{
int chioce;
printf("继续借出请输入1,退出输入0");
if(chioce)
goto lentoutagain;
}
}
void return_book(pbook head)
{
long booknum;
pbook ptr;
ptr=head;
returnagain:
printf("请输入要归还的书号");
scanf("%ld",&booknum);
if( (ptr->num) < (booknum) )
{
while( ptr->num!=booknum )
{
ptr=ptr->next;
}
}
else if( (ptr->num) > (booknum))
{
while( ptr->num!=booknum )
{
ptr=ptr->pioneer;
}
}
else
{
printf("输入书号有错,请重新输入\n");
goto returnagain;
}
strcpy(ptr->stu_name,"null");
ptr->stu_num=0;
ptr->lent_out=0;
{
int choice;
printf("继续还书请输入1,退出输入0");
scanf("%ld",&choice);
if(choice)
goto returnagain;
}
}
void search_book(pbook head)
{
int choice;
pbook ptr=head;
char bookname[30];
long booknum;
searchagain:
printf("请输入查找方式");
printf("1、按书号查找");
printf("2、按书名查找");
printf("0、退出");
scanf("%d",&choice);
if(choice==1)
{
scanf("%ld",&booknum);
if( (ptr->num) < (booknum) )
{
while( ptr->num!=booknum )
{
ptr=ptr->next;
if(!ptr)
{
printf("输入书号有误,重新查找请输入1,退出输入0");
{
int choice1;
printf("继续查询输入1,退出查询输入0");
scanf("%d",&choice);
if(choice1)
goto searchagain;
else
goto exitsearch;
}
}
}
}
else if( (ptr->num) > (booknum))
{
while( ptr->num!=booknum )
{
ptr=ptr->pioneer;
if(!ptr)
{
printf("输入书号有误,重新查找请输入1,退出输入0");
{
int choice1;
printf("继续查询输入1,退出查询输入0");
scanf("%d",&choice);
if(choice1)
goto searchagain;
else
goto exitsearch;
}
}
}
}
printf("%ld%3.30s%4.ld%3.10s%2.d",ptr->num,ptr->name,ptr->stu_num,ptr->stu_name,ptr->lent_out);
{
int choice1;
printf("继续查询输入1,退出查询输入0");
scanf("%d",&choice);
if(choice1)
goto searchagain;
}
}
else if(choice==2)
{
scanf("%s",bookname);
ptr=head;
while( strcmp(ptr->name,bookname)!=0 )
{
ptr=ptr->next;
if(!ptr)
{
printf("输入书号有误,重新查找请输入1,退出输入0");
{
int choice1;
printf("继续查询输入1,退出查询输入0");
scanf("%d",&choice);
if(choice1)
goto searchagain;
else
goto exitsearch;
}
}
}
printf("%ld%3.30s%4.ld%3.10s%2.d",ptr->num,ptr->name,ptr->stu_num,ptr->stu_name,ptr->lent_out);
{
int choice1;
printf("继续查询输入1,退出查询输入0");
scanf("%d",&choice);
if(choice1)
goto searchagain;
}
}
else
goto exitsearch;
exitsearch:;
}
void printf_bookinfo(pbook head)
{
pbook ptr=head->next;
while(ptr)
{
printf("%ld%3.30s%4.ld%3.10s%2.d\n",ptr->num,ptr->name,ptr->stu_num,ptr->stu_name,ptr->lent_out);
ptr=ptr->next;
}
}
void reserve_book(pbook head,int count)
{
FILE *fp;
fp=fopen("librarymaster.dat","ab+");
if(!fp)
{
printf("打开程序失败,结束保存。");
goto exitreserve;
exit(0);
}
fwrite(head,sizeof(book),count,fp);
exitreserve:;
}
void warning(pbook head,int count)
{
printf("程序将退出,是否保存?\n 1、是 0、否");
int choice;
scanf("%d",&choice);
if(choice)
reserve_book(head,count);
}