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.
test/图书管理.c

311 lines
6.6 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();
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");
}
int main()
{
}
//查询图书馆的总信息
void ShowLibInfo(const Book* book1, const Reader* reader1)
{
}
//查寻图书馆藏书信息
void ShowLibBook(Book* book1)
{
}
//存入新书
Book* AddBook(Book* book1)
{
}
//旧书处理
Book* DealoldBook(Book* book1)
{
}
//根据书名检索书刊信息
void foundBook(Book* book1)
{
}
//查询读者的借阅信息
void foundReader_Info(Reader* reader1)
{
}
//查询读者信息
void foundReaderInfo(Reader* reader1)
{
}
//读者借书
Reader* LendBook(Reader* reader1, Book* book1)
{
Reader* reader = reader1;
Book* book = book1;
Reader* prev = reader1;
Reader* tmpp = reader1;
printf("输入读者id:");
int id;
scanf("%d", &id);
getchar();
if (reader == NULL)
{
Reader* tmp = (Reader*)malloc(sizeof(Reader));
tmp->next = NULL;
tmp->iAmount = 0;
tmp->iNum = id;
printf("输入读者名字:");
scanf("%s", &tmp->acName);
getchar();
printf("输入读者性别:");
scanf("%s", &tmp->acSex);
getchar();
printf("输入读者职位:<student\tor\tteacher>");
scanf("%s", &tmp->position);
getchar();
if (strcmp(tmp->position, "student") == 0)
{
tmp->iMax = 20;
tmp->day = 30;
}
else {
tmp->iMax = 40;
tmp->day = 60;
}
for (int i = 0; i < tmp->iMax; i++)
{
tmp->aiBookId[i] = 0;
}
printf("输入要借的书的编号:");
int id_book;
scanf("%d", &id_book);
getchar();
while (book != NULL)
{
if (id_book == book->iNum)
{
if (book->iAmount <= 1)
{
printf("借阅失败,该图书库存不足.\n");
printf("按任意键返回\n");
getchar();
return NULL;
}
if ((tmp->iAmount) + 1 > tmp->iMax)
{
printf("借阅失败,该读者借阅图书数量已达上线.\n");
printf("按任意键返回\n");
getchar();
return NULL;
}
book->iAmount--;
tmp->aiBookId[tmp->iAmount] = id_book;
tmp->iAmount;
reader = tmp;
printf("借阅成功!\n");
printf("按任意键返回\n");
getchar();
return reader;
}
book = book->next;
}
printf("没有找到该书!\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
if (reader != NULL)
{
while (reader != NULL)
{
if (id == reader->iNum)
{
printf("图使馆当前的书籍册:\n");
ShowLibBook(book);
printf("输入要借的书的编号:");
int id_book;
scanf("%d", &id_book);
getchar();
while (book != NULL)
{
if (id_book == book->iNum)
{
if (book->iAmount <= 1)
{
printf("借阅失败,该图书库存不足.\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
if (tmpp->iAmount + 1 > tmpp->iMax)
{
printf("借阅失败,该读者借阅图书数量已达上线.\n");
printf("按任意键返回\n");
getchar();
return reader1;
}
reader->iAmount++;
reader->aiBookId[tmpp->iAmount] = id_book;
return reader1;
}
book = book->next;
}
printf("没有找到该书!\n");
printf("按任意键返回\n");
}
reader = reader->next;
}
}
}
//读者还书
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);
}
//从文件读取
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;
}