#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>
typedef int BOOL;
typedef struct bookinfo
{
char number[15];/*产品编号*/
char name[30];/*产品名称*/
char auther[20];/*作者*/
char authernum[15];//作者编号
BOOL isExit;/*存在状态*/
char pubname[20];//出版社名
char pubnum[15]; //出版社号
int now; //现存量
int all; //总存量
}BOOKINFO;
typedef struct lender
{
char bookname[30];
char lendernum[15];/*借书人学号(图书证号)*/
int lendertime;/*借书时间*/
}LENDER;
int search_according_name(char* );
void menu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t图书管理系统\n");
printf("\t\t\t1:新进图书基本信息的输入\n");
printf("\t\t\t2:显示全部记录\n");
printf("\t\t\t3:根据图书名称查询图书基本信息\n");
printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n");
printf("\t\t\t5:按照出版社名称查询图书基本信息\n");
printf("\t\t\t6:根据作者名称查询图书基本信息\n");
printf("\t\t\t7:列出所有未借出去的图书信息\n");
printf("\t\t\t8:组合查询图书基本信息\n");
printf("\t\t\ta:借书\n");
printf("\t\t\tb:还书\n");
printf("\t\t\tt:退出\n");
}
void choice_1_input_new()/*输入新进的图书信息*/
{
char choice;
FILE *p;
BOOKINFO newbook;
system("cls");
while (1)
{
printf("输入图书编号:");
gets(newbook.number);
printf("输入图书名称:");
gets(newbook.name);
printf("输入图书的作者:");
gets(newbook.auther);
printf("输入作者编号:");
gets(newbook.authernum);
printf("输入图书的出版社名:");
gets(newbook.pubname);
printf("输入出版社编号:");
gets(newbook.pubnum);
printf("输入现存量:");
scanf("%d", &newbook.now);
printf("输入总存量:");
scanf("%d", &newbook.all);
printf("是否保存该条书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
newbook.isExit = 1;/*将图书状态设置成1,表示没有借出*/
p = fopen("book.txt", "ab");
fwrite(&newbook, sizeof(BOOKINFO), 1, p);
fclose(p);
printf("\n该条书目已添加到book.txt文件中!\n");
}
else
{
printf("\n本条书目未保存!\n");
}
printf("\n是否继续添加书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}
}
void choice_2_display_all()/*显示全部图书信息*/
{
FILE *p;
int n;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
booknumber--;
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
n = 0;
printf(" 图书信息如下\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
while (n<booknumber)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now,bookinfo[n].all);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
void choice_8_display_lend()/*显示全部借书信息*/ //无法使用
{
FILE *p;
int n;
LENDER lendinfo[10];
int lendnumber = 0;
system("cls");
p = fopen("lend.txt", "rb");
while (!feof(p))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, p);
lendnumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
lendnumber--;
if (lendnumber == 0)
{
printf("没有任何借书信息!\n\n");
}
else
{
n = 0;
printf(" 借书信息如下\n");
printf(" 借书信息 \n");
printf("书名 图书证号 借书时间 \n");
while (n<lendnumber)
{
printf("%-12s%-12s%-6d\n",
lendinfo[n].bookname,lendinfo[n].lendernum,lendinfo[n].lendertime);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的书名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的书本名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
char search[20] = "";/*search用来存放要删除的书名*/
int n, i;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber;
system("cls");
while (1)
{
getchar();
printf("输入要删除的书本名称:");
gets(search);
p = fopen("book.txt", "rb");
booknumber = 0;
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getchar();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
else
{
printf("是否确认需要删除该条书目?(Y/N)");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
for (i = n; i<booknumber - 1; i++)
bookinfo[i] = bookinfo[i + 1];
booknumber--;
p = fopen("book.txt", "wb");
for (n = 0; n<booknumber; n++)
fwrite(&bookinfo[n], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("删除成功!\n");
}
else
printf("\n\n该条书目没有被删除!");
}
printf("\n\n是否继续进行删除操作?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_5_sort_according_name()/*根据图书名称排序*/
{
FILE *p;
int m, n;
BOOKINFO temp;
BOOKINFO bookinfo[100];
int booknumber;
p = fopen("book.txt", "rb");
booknumber = 0;
system("cls");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
for (m = 0; m<booknumber - 1; m++)
for (n = m + 1; n<booknumber; n++)
if (strcmp(bookinfo[m].name, bookinfo[n].name)>0)
{
temp = bookinfo[m];
bookinfo[m] = bookinfo[n];
bookinfo[n] = temp;
}
p = fopen("book.txt", "wb");
for (m = 0; m<booknumber; m++)
fwrite(&bookinfo[m], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("\n\n完成排序!\n\n");
}
printf("按任意键回到主菜单!\n");
getchar();
}
void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
FILE *p;
int n;
int count = 0;
BOOKINFO bookinfo[100];
int booknumber;
system("cls");
booknumber = 0;
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何书目存在!\n");
}
else
{
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
count++;
if (count == 0)
printf("书库中的书籍全部借出!\n");
else
{
printf("书库中未被借出的图书信息如下:\n\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
}
}
}
printf("\n按任意键返回主菜单!\n");
getchar();
}
int search_according_name(char* bookname)/*根据图书名称显示图书的信息*/
{
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
for (n = 0; n<booknumber; n++)
if (strcmp(bookname, bookinfo[n].name) == 0)
{
return n; //找到
}
else
return -1;
}
void lendbook(int n) //n!=-1
{
FILE *p,*q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo;
int booknumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now--;
bookinfo[n].isExit = 0;
strcpy(lendinfo.bookname, bookinfo[n].name);
p = fopen("book.txt", "wb");
for (i = 0; i<booknumber; i++)
fwrite(&bookinfo[i], sizeof(BOOKINFO), 1, p);
fclose(p);
q = fopen("lend.txt", "ab"); //借书记录
printf("请输入图书证号:\n");
gets(lendinfo.lendernum);
lendinfo.lendertime = 20;
fclose(q);
printf("借书成功\n");
getchar();
}
void backbook(int n) //还书
{
FILE *p, *q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo[10];
int booknumber = 0;
int lendnumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now++; bookinfo[n].isExit = 1;
q = fopen("lend.txt","rb");
while (!feof(q))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, q);
lendnumber++;
}
lendnumber--;
fclose(q);
int n1;
for (n1 = 0; n1<lendnumber; n1++)
if (strcmp(lendinfo[n1].bookname, bookinfo[n].name) == 0)
{
break;
}
for (i = n1; i<lendnumber - 1; i++)
lendinfo[i] = lendinfo[i + 1];
lendnumber--;
q = fopen("lend.txt", "wb");
for (n1 = 0; n1<lendnumber; n1++)
fwrite(&lendinfo[n1], sizeof(LENDER), 1, q);
fclose(q);
p = fopen("book.txt", "wb");
for (n1 = 0; n1<booknumber; n1++)
fwrite(&bookinfo[n1], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("删除成功!\n");
getchar();
}
void choice_6_search_according_author()/*根据作者名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的作者名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].auther, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void search_according_pubname()/*根据出版社名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的出版社名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].pubname, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void search_according_all()/*组合查询显示图书的信息*/
{
char search1[20] = "";/*search1用来存放要查询的作者名*/
char search2[20] = "";/*存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search1);
printf("输入要查询的出版社名称:");
gets(search2);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if ((strcmp(bookinfo[n].pubname, search2) == 0)&&(strcmp(bookinfo[n].auther,search1)==0))
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void main()
{
char choice;
clock_t tm;
FILE *p;
char s[30];
int n;
if ((p = fopen("book.txt", "rb")) == NULL)
{
p = fopen("book.txt", "wb");
fclose(p);
}
while (1)
{
system("cls");
menu();
choice = getch();
switch (choice)
{
case '1':choice_1_input_new(); break;/*输入新进的图书信息*/
case '2':choice_2_display_all(); break;/*显示全部图书信息*/
case '3':choice_3_search_according_name(); break;/*根据图书名称显示图书的信息*/
case '4':choice_4_delete_according_name(); break;/*根据图书名称对图书信息进行删除*/
case '5':search_according_pubname(); break;/*根据出版社名称查找*/
case '6':choice_6_search_according_author(); break;/*根据作者名称查找*/
case '7':choice_7_display_according_exitflag(); break;/*根据存在状态列出图书信息*/
case '8':search_according_all(); break; /*组合查询*/
case 'a':printf("请输入借书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { lendbook(n); }
break;
case 'b':printf("请输入还书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { backbook(n); }
break;
case 't':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n"); getch(); return;
default:
printf("\n\n\t\t\t请输入菜单中的字符!");
tm = clock();
while (clock()<tm + 1800);
break;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>
typedef int BOOL;
typedef struct bookinfo
{
char number[15];/*产品编号*/
char name[30];/*产品名称*/
char auther[20];/*作者*/
char authernum[15];//作者编号
BOOL isExit;/*存在状态*/
char pubname[20];//出版社名
char pubnum[15]; //出版社号
int now; //现存量
int all; //总存量
}BOOKINFO;
typedef struct lender
{
char bookname[30];
char lendernum[15];/*借书人学号(图书证号)*/
int lendertime;/*借书时间*/
}LENDER;
int search_according_name(char* );
void menu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t图书管理系统\n");
printf("\t\t\t1:新进图书基本信息的输入\n");
printf("\t\t\t2:显示全部记录\n");
printf("\t\t\t3:根据图书名称查询图书基本信息\n");
printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n");
printf("\t\t\t5:按照出版社名称查询图书基本信息\n");
printf("\t\t\t6:根据作者名称查询图书基本信息\n");
printf("\t\t\t7:列出所有未借出去的图书信息\n");
printf("\t\t\t8:组合查询图书基本信息\n");
printf("\t\t\ta:借书\n");
printf("\t\t\tb:还书\n");
printf("\t\t\tt:退出\n");
}
void choice_1_input_new()/*输入新进的图书信息*/
{
char choice;
FILE *p;
BOOKINFO newbook;
system("cls");
while (1)
{
printf("输入图书编号:");
gets(newbook.number);
printf("输入图书名称:");
gets(newbook.name);
printf("输入图书的作者:");
gets(newbook.auther);
printf("输入作者编号:");
gets(newbook.authernum);
printf("输入图书的出版社名:");
gets(newbook.pubname);
printf("输入出版社编号:");
gets(newbook.pubnum);
printf("输入现存量:");
scanf("%d", &newbook.now);
printf("输入总存量:");
scanf("%d", &newbook.all);
printf("是否保存该条书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
newbook.isExit = 1;/*将图书状态设置成1,表示没有借出*/
p = fopen("book.txt", "ab");
fwrite(&newbook, sizeof(BOOKINFO), 1, p);
fclose(p);
printf("\n该条书目已添加到book.txt文件中!\n");
}
else
{
printf("\n本条书目未保存!\n");
}
printf("\n是否继续添加书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}
}
void choice_2_display_all()/*显示全部图书信息*/
{
FILE *p;
int n;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
booknumber--;
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
n = 0;
printf(" 图书信息如下\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
while (n<booknumber)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now,bookinfo[n].all);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
void choice_8_display_lend()/*显示全部借书信息*/ //无法使用
{
FILE *p;
int n;
LENDER lendinfo[10];
int lendnumber = 0;
system("cls");
p = fopen("lend.txt", "rb");
while (!feof(p))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, p);
lendnumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
lendnumber--;
if (lendnumber == 0)
{
printf("没有任何借书信息!\n\n");
}
else
{
n = 0;
printf(" 借书信息如下\n");
printf(" 借书信息 \n");
printf("书名 图书证号 借书时间 \n");
while (n<lendnumber)
{
printf("%-12s%-12s%-6d\n",
lendinfo[n].bookname,lendinfo[n].lendernum,lendinfo[n].lendertime);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的书名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的书本名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
char search[20] = "";/*search用来存放要删除的书名*/
int n, i;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber;
system("cls");
while (1)
{
getchar();
printf("输入要删除的书本名称:");
gets(search);
p = fopen("book.txt", "rb");
booknumber = 0;
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getchar();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
else
{
printf("是否确认需要删除该条书目?(Y/N)");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
for (i = n; i<booknumber - 1; i++)
bookinfo[i] = bookinfo[i + 1];
booknumber--;
p = fopen("book.txt", "wb");
for (n = 0; n<booknumber; n++)
fwrite(&bookinfo[n], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("删除成功!\n");
}
else
printf("\n\n该条书目没有被删除!");
}
printf("\n\n是否继续进行删除操作?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_5_sort_according_name()/*根据图书名称排序*/
{
FILE *p;
int m, n;
BOOKINFO temp;
BOOKINFO bookinfo[100];
int booknumber;
p = fopen("book.txt", "rb");
booknumber = 0;
system("cls");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
for (m = 0; m<booknumber - 1; m++)
for (n = m + 1; n<booknumber; n++)
if (strcmp(bookinfo[m].name, bookinfo[n].name)>0)
{
temp = bookinfo[m];
bookinfo[m] = bookinfo[n];
bookinfo[n] = temp;
}
p = fopen("book.txt", "wb");
for (m = 0; m<booknumber; m++)
fwrite(&bookinfo[m], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("\n\n完成排序!\n\n");
}
printf("按任意键回到主菜单!\n");
getchar();
}
void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
FILE *p;
int n;
int count = 0;
BOOKINFO bookinfo[100];
int booknumber;
system("cls");
booknumber = 0;
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何书目存在!\n");
}
else
{
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
count++;
if (count == 0)
printf("书库中的书籍全部借出!\n");
else
{
printf("书库中未被借出的图书信息如下:\n\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
}
}
}
printf("\n按任意键返回主菜单!\n");
getchar();
}
int search_according_name(char* bookname)/*根据图书名称显示图书的信息*/
{
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
for (n = 0; n<booknumber; n++)
if (strcmp(bookname, bookinfo[n].name) == 0)
{
return n; //找到
}
else
return -1;
}
void lendbook(int n) //n!=-1
{
FILE *p,*q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo;
int booknumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now--;
bookinfo[n].isExit = 0;
strcpy(lendinfo.bookname, bookinfo[n].name);
p = fopen("book.txt", "wb");
for (i = 0; i<booknumber; i++)
fwrite(&bookinfo[i], sizeof(BOOKINFO), 1, p);
fclose(p);
q = fopen("lend.txt", "ab"); //借书记录
printf("请输入图书证号:\n");
gets(lendinfo.lendernum);
lendinfo.lendertime = 20;
fclose(q);
printf("借书成功\n");
getchar();
}
void backbook(int n) //还书
{
FILE *p, *q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo[10];
int booknumber = 0;
int lendnumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now++; bookinfo[n].isExit = 1;
q = fopen("lend.txt","rb");
while (!feof(q))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, q);
lendnumber++;
}
lendnumber--;
fclose(q);
int n1;
for (n1 = 0; n1<lendnumber; n1++)
if (strcmp(lendinfo[n1].bookname, bookinfo[n].name) == 0)
{
break;
}
for (i = n1; i<lendnumber - 1; i++)
lendinfo[i] = lendinfo[i + 1];
lendnumber--;
q = fopen("lend.txt", "wb");
for (n1 = 0; n1<lendnumber; n1++)
fwrite(&lendinfo[n1], sizeof(LENDER), 1, q);
fclose(q);
p = fopen("book.txt", "wb");
for (n1 = 0; n1<booknumber; n1++)
fwrite(&bookinfo[n1], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("删除成功!\n");
getchar();
}
void choice_6_search_according_author()/*根据作者名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的作者名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].auther, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void search_according_pubname()/*根据出版社名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的出版社名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].pubname, search) == 0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void search_according_all()/*组合查询显示图书的信息*/
{
char search1[20] = "";/*search1用来存放要查询的作者名*/
char search2[20] = "";/*存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search1);
printf("输入要查询的出版社名称:");
gets(search2);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if ((strcmp(bookinfo[n].pubname, search2) == 0)&&(strcmp(bookinfo[n].auther,search1)==0))
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 \n");
printf("编号 名称 作者 作者号|图书状态 |出版社名 出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar(); //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void main()
{
char choice;
clock_t tm;
FILE *p;
char s[30];
int n;
if ((p = fopen("book.txt", "rb")) == NULL)
{
p = fopen("book.txt", "wb");
fclose(p);
}
while (1)
{
system("cls");
menu();
choice = getch();
switch (choice)
{
case '1':choice_1_input_new(); break;/*输入新进的图书信息*/
case '2':choice_2_display_all(); break;/*显示全部图书信息*/
case '3':choice_3_search_according_name(); break;/*根据图书名称显示图书的信息*/
case '4':choice_4_delete_according_name(); break;/*根据图书名称对图书信息进行删除*/
case '5':search_according_pubname(); break;/*根据出版社名称查找*/
case '6':choice_6_search_according_author(); break;/*根据作者名称查找*/
case '7':choice_7_display_according_exitflag(); break;/*根据存在状态列出图书信息*/
case '8':search_according_all(); break; /*组合查询*/
case 'a':printf("请输入借书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { lendbook(n); }
break;
case 'b':printf("请输入还书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { backbook(n); }
break;
case 't':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n"); getch(); return;
default:
printf("\n\n\t\t\t请输入菜单中的字符!");
tm = clock();
while (clock()<tm + 1800);
break;
}
}
}