You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libray/图书管理系统.c

196 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h> /*getch()函数使用的头文件*/
#include <windows.h> /*Sleep()函数使用的头文件*/
#include <string.h> /*strcmp()函数使用的头文件*/
#include<assert.h>
/*图书结构体:图书编号,图书名,图书作者,出版社,库存量*/
typedef struct Book
{
int iNum;
char acName[15];
char acAuthor[15];
char acPress[15];
int iAmount;
struct Book* next;
}Book;
/*读者:读者编号,读者姓名,性别,可借书数,读者已借书的编号*/
typedef struct Reader
{
int iNum;
char acName[15];
char acSex[4];
char position[20];
int iMax; //Student 20本 teacher 40本
int iAmount;
int aiBookId[100];
int balance;
int day;
struct Reader* next;
}Reader;
void ShowLibInfo(const Book* book, const Reader* reader);
void ShowLibBook(Book* book);
Book* AddBook(Book* book);
Book* DealoldBook(Book* book);
void foundBook(Book* book);
void foundReader_Info(Reader* reader);
void foundReaderInfo(Reader* reader);
Reader* LendBook(Reader* reader, Book* book);
void returnBook(Reader* reader, Book* book);
void save(Book* book);
Book* read1();
//C1
void ShowMainMenu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t|----------------------欢迎进入---------------------------\n");
printf("\t| 读者管理系统 \n");
printf("\t| 1、查询图书馆的总信息 \n");
printf("\t| 2、查询图书馆藏书信息 \n");
printf("\t| 3、存入新书 \n");
printf("\t| 4、旧书处理 \n");
printf("\t| 5、根据书名检索书刊信息 \n");
printf("\t| 6、查询读者的借阅信息 \n");
printf("\t| 7、查询读者信息 \n");
printf("\t| 8、读者借书 \n");
printf("\t| 9、读者还书 \n");
printf("\t| 10、文件保存 \n");
printf("\t| 11、从文件读取 \n");
printf("\t| 0、退出 \n");
printf("\t|---------------------------------------------------------\n");
printf("新打开程序需先添加管理员\n");
printf("\n");
printf("\t\t请选择0-11");
}
//C2
//C3
//C4
//C5
//C6
//C7
//C8
//C9
//C10
void returnBook(Reader* reader1, Book* book1)
{
Reader* reader = reader1;
Book* book = book1;
printf("请输入读者的id:");
int id;
scanf("%d", &id);
getchar();
if (reader != NULL)
{
while (reader != NULL)
{
if (id == reader->iNum)
{
printf("请输入要还的书的编号:");
int id_book;
scanf("%d", &id_book);
getchar();
for (int i = 0; i < reader->iMax; i++)
{
if (reader->aiBookId[i] == id_book)
{
reader->aiBookId[i] = 0;
while (book)
{
if (id_book == book->iNum)
{
book->iAmount++;
printf("还书成功!\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
book = book->next;
}
}
}
printf("没有找到该图书检查图书的Id\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
reader = reader->next;
}
printf("没有找到该读者检查读者id是否输入有误\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
}
//C11
void save(Book* book1)
{
FILE* fp;
Book* pCur = book1;
int iCount = 0;
if (pCur == NULL)
{
printf("\n没有学生记录!\n");
return;
}
if ((fp = fopen("book.txt", "wb")) == NULL)
{
printf("创建文件失败!\n");
getchar();
exit(1);
}
while (pCur)
{
fwrite(pCur, sizeof(Book), 1, fp);
pCur = pCur->next;
iCount++;
}
printf("\n");
printf("保存文件的数据数目为:%d\n", iCount);
fclose(fp);
}
//C12
Book* read1()
{
FILE* fp;
Book* pHead = NULL, * pTemp = NULL, * pCur = NULL;
if ((fp = fopen("book.txt", "r")) == NULL)
{
printf("\n文件打开失败!请检查文件名!\n");
exit(0);
}
pTemp = (Book*)malloc(sizeof(Book));
while (fread(pTemp, sizeof(Book), 1, fp))
{
if (!pHead)
{
pHead = pCur = pTemp;
}
else
{
pCur->next = pTemp;
pCur = pTemp;
}
pTemp = (Book*)malloc(sizeof(Book));
}
fclose(fp);
return pHead;
}