1. 简单文件数据库-模拟图书馆管理系统
涉及知识点:文件读写、内存管理、结构体定义、基本数据结构、高级格式化输入输出
要求:
编写一个程序模拟图书管理系统。用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择。读者菜单包括借书、还书、查询等功能。管理员菜单包括图书和读者信息录入、修改和删除。图书信息至少应包括:编号、书名、数量,读者信息至少应包括:编号、姓名、所借图书。可根据图书名称或编号进行图书信息查询,可查询某本书现在被哪些读者借走。
命令行参数如下:
Libsim –a(-u) xxxx
第一个参数为可执行程序名称;第二个参数为用户身份,-a表示管理员,-u表示读者;第三个参数为用户名
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
#include <windows.h>
//书名
typedef struct {
int number;
char name[20];
int totalnumber;
} book;
//读者
typedef struct {
char name[20];
char borrowedbook[20][100];
char password[20];
int id;
int totalborrownumber = 0;
} reader;
//管理员
typedef struct {
int id = 1;
char name[6] = "admin";
char password[6] = "admin";
} administrator;
book book_list[100];
reader reader_list[100];
administrator administrator_list;
FILE *readerlist;
FILE *borrowedbooklist;
FILE *booklist;
int readersum = 0;
int booksortsum = 0;
int temp;//用来记录是哪个用户登入
int successful;//用来标记用户是否成功登录
void HideCursor();//隐藏鼠标
void makemenue();//创建初始界面
void makereader();//创建用户(用户注册)
void save_readerlist();//将读者信息从数组中保存到文件;
void load_readerlist();//将读者信息从文件读到数组中
void load_booklist();//所有书籍信息从文件中读到数组中
void save_booklist();//将所有书籍信息从数组拷贝到文件中
void save_borrowbooklist();//将所有借书信息记录到文件
void load_borrowedbooklist();//将借的书读入数组中
void readermenue();//读者菜单
void leadermenue();//管理员界面
void seek_book();//查看所有书
void borrow_book();//用户借书
void return_book();//用户还书
void display_book();//用户查询书籍借阅信息
void signreader();//用户登录
void signleader();//管理员登录;
void diplay_reader();//展示所有用户信息
void changereaderinformation();//管理员修改读者信息
void changbookinformation();//管理员修改书籍信息;
void HideCursor() { //隐藏鼠标
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
}
void makemenue() { //创建初始界面
printf("\t\t*************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 欢迎使用图书管理系统 *\n");
printf("\t\t* *\n");
printf("\t\t* 登录管理员账号 请按 1 *\n");
printf("\t\t* 注册用户新账号 请按 2 *\n");
printf("\t\t* 登录用户账号 请按 3 *\n");
printf("\t\t* 退出程序 请按 4 *\n");
printf("\t\t* *\n");
printf("\t\t*************************************************\n");
}
//创建用户(用户注册)
void makereader() {
int falg = 0;
readersum++;
printf("\t\t请输入需要创建账户的名字(不超过20个字符)\t\t\n");
char makename[20];
char password[20];
scanf("%s", makename);
for (int i = 0; i < readersum; i++) {
if (strcmp(reader_list[i].name, makename) == 0) { // 判断该账号是否存在
printf("该账号已存在,请重新输入\n");
falg = 1;
system("pause");
readersum--;
return;
}
}
if (falg == 0) {
printf("请输入你的密码\n");
scanf("%s", password);
strcpy(reader_list[readersum - 1].name, makename);
strcpy(reader_list[readersum - 1].password, password);
srand(time(NULL));
reader_list[readersum - 1].id = rand() % (9000) + 1000;
printf("注册成功");
system("pause");
return;
}
}
//将读者信息从文件读到数组中
void load_readerlist() {
readersum = 0;
readerlist = fopen("readerlist.txt", "r");
fscanf(readerlist, "%*[^\n]%*c");
while (fscanf(readerlist, "%s %s %d %d\n", reader_list[readersum].name, reader_list[readersum].password,
&reader_list[readersum].id, &reader_list[readersum].totalborrownumber) != EOF) {
readersum++;
}
fclose(readerlist);
}
//将读者信息从数组中保存到文件;
void save_readerlist() {
char a[] = "名字";
char b[] = "密码";
char c[] = "id";
char d[] = "借书数量";
readerlist = fopen("readerlist.txt", "wt");
fprintf(readerlist, "%s %s %s %s\n", a, b, c, d);
for (int i = 0; i < readersum; i++) {
fprintf(readerlist, "%s %s %d %d\n", reader_list[i].name,
reader_list[i].password, reader_list[i].id, reader_list[readersum].totalborrownumber);
}
// printf("%d\n",readersum);
fclose(readerlist);
}
//所有书籍信息从文件中读到数组中
void load_booklist() {
booksortsum = 0;
booklist = fopen("booklist.txt", "r");
fscanf(booklist, "%*[^\n]%*c"); // 跳过第一行
while (fscanf(booklist, "%d%s%d", &book_list[booksortsum].number, book_list[booksortsum].name,
&book_list[booksortsum].totalnumber) != EOF) {
booksortsum++;
}
fclose(booklist);
}
//将所有书籍信息从数组拷贝到文件中
void save_booklist() {
char a[] = "编号";
char b[] = "书名";
char c[] = "书的数量";
booklist = fopen("booklist.txt", "wt");
fprintf(booklist, "%s %s %s\n", a, b, c);
for (int i = 0; i < booksortsum; i++) {
fprintf(booklist, "%d %s %d\n", book_list[i].number, book_list[i].name,
book_list[i].totalnumber);
}
fclose(booklist);
}
//将所有借书信息记录到文件
void save_borrowbooklist() {
char a[] = "借书人";
char b[] = "书名";
borrowedbooklist = fopen("borrowedbooklist.txt", "wt");
fprintf(borrowedbooklist, "%s %s\n", a, b);
for (int i = 0; i < readersum; i++) {
for (int j = 0; j < reader_list[i].totalborrownumber; j++) {
fprintf(borrowedbooklist, "%s %s\n", reader_list[i].name, reader_list[i].borrowedbook[j]);
}
}
fclose(borrowedbooklist);
}
//将借的书读入数组中
void load_borrowedbooklist() {
int j = 0;
borrowedbooklist = fopen("borrowedbooklist.txt", "r");
char bookname[20];
char readername[20];
fscanf(borrowedbooklist, "%*[^\n]%*c");
while (fscanf(borrowedbooklist, "%s %s\n", readername, bookname) != EOF) {
for (int i = 0; i < readersum; i++) {
if (strcmp(reader_list[i].name, readername) == 0) {
strcpy(reader_list[i].borrowedbook[j], bookname);
reader_list[i].totalborrownumber++;
j++;
}
j = 0;
}
}
fclose(borrowedbooklist);
}
void readermenue() {
printf("\t\t*************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 欢迎进入用户系统 *\n");
printf("\t\t* *\n");
printf("\t\t* 借书 请按 1 *\n");
printf("\t\t* 还书 请按 2 *\n");
printf("\t\t* 查看图书馆藏书 请按 3 *\n");
printf("\t\t* 查看书被谁借走 请按 4 *\n");
printf("\t\t* 退出 请按 5 *\n");
printf("\t\t* *\n");
printf("\t\t*************************************************\n");
}
//管理员界面
void leadermenue() {
printf("\t\t******************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 欢迎进入管理员系统 *\n");
printf("\t\t* *\n");
printf("\t\t* 修改图书信息 请按 1 *\n");
printf("\t\t* 修改用户信息 请按 2 *\n");
printf("\t\t* 查看图书馆藏书 请按 3 *\n");
printf("\t\t* 查看书被谁借走 请按 4 *\n");
printf("\t\t* 退出 请按 5 *\n");
printf("\t\t* *\n");
printf("\t\t******************************************************\n");
}
//查看所有书
void seek_book() {
printf("\t\t\t编号 书名 书的数量\n");
for (int i = 0; i < booksortsum; i++) {
printf("\t\t\t %d %s %d\n", book_list[i].number, book_list[i].name, book_list[i].totalnumber);
}
}
//用户借书
void borrow_book() {
int flag = 0, flag2 = 0, flag3 = 0;
int flag4 = 0;
int a;
char b[20];
printf("\t\t\t按书编查询请按1,按书名查询请按2\n");
scanf("%d", &flag);
if (flag == 1) {
printf("\t\t\t请输入书的编号\n");
scanf("%d", &a);
for (int i = 0; i < booksortsum; i++) {
if (a == book_list[i].number) {
flag3 = 1;
if (book_list[i].totalnumber == 0) {
printf("\t\t\t该书目前暂缺\n");
return;
} else {
strcpy(b, book_list[i].name);
// printf("temp=%d sum=%d\n",temp,readersum);
for (int j = 0; j < reader_list[temp].totalborrownumber; j++) {
// printf("number=%d\n",reader_list[temp].totalborrownumber);
// printf("%s\n",reader_list[temp].borrowedbook[0]);
if (strcmp(reader_list[temp].borrowedbook[j], b) == 0) {
printf("\t\t\t你已经借过该书\n");
flag2 = 1;
return;
}
}
if (flag2 == 0) {
// printf("f=%d\n",flag2);
book_list[i].totalnumber--;
strcpy(reader_list[temp].borrowedbook[reader_list[temp].totalborrownumber], book_list[i].name);
reader_list[temp].totalborrownumber++;
printf("\t\t\t借书成功!\n");
}
}
}
}
if (flag3 == 0) {
printf("\t\t\t输入编号错误\n");
return;
}
}
if (flag == 2) {
printf("\t\t\t请输入书的名字\n");
scanf("%s", b);
for (int i = 0; i < booksortsum; i++) {
if (strcmp(book_list[i].name, b) == 0) {
if (book_list[i].totalnumber == 0) {
printf("\t\t\t该书目前暂缺\n");
return;
} else {
for (int j = 0; j < reader_list[temp].totalborrownumber; j++) {
if (strcmp(reader_list[temp].borrowedbook[j], b) == 0) {
printf("\t\t\t你已经借过该书\n");
flag2 = 1;
return;
}
}
if (flag2 == 0) {
book_list[i].totalnumber--;
strcpy(reader_list[temp].borrowedbook[reader_list[temp].totalborrownumber], book_list[i].name);
reader_list[temp].totalborrownumber++;
printf("\t\t\t借书成功!\n");
}
}
}
}
}
}
//用户还书
void return_book() {
int a, flag = 0, q;
int flag1 = 0;
char b[20];
char book[20];
int flag2 = 0;
printf("\t\t\t按书编还书按1,按书名还书按2\n");
scanf("%d", &flag);
if (flag == 1) {
printf("\t\t\t请输入书的编号\n");
scanf("%d", &a);
for (int i = 0; i < booksortsum; i++) {
if (book_list[i].number == a) {
strcpy(book, book_list[i].name);
q = i;
flag2 = 1;
break;
}
}
}
if (flag == 2) {
printf("\t\t\t请输入书名\n");
scanf("%s", book);
for (int i = 0; i < booksortsum; i++) {
if (strcmp(book, book_list[i].name) == 0) {
q = i;
flag2 = 1;
break;
}
}
}
if (flag2 == 0) {
printf("\t\t\t该书不存在于这个图书馆\n");
return;
}
for (int i = 0; i < reader_list[temp].totalborrownumber; i++) {
if (strcmp(book, reader_list[temp].borrowedbook[i]) == 0) {
for (int k = i; k < reader_list[temp].totalborrownumber; k++) {
strcpy(reader_list[temp].borrowedbook[k], reader_list[temp].borrowedbook[k + 1]);
}
reader_list[temp].totalborrownumber--;
book_list[q].totalnumber++;
flag1 = 1;
printf("\t\t\t还书成功!\n");
break;
}
}
if (flag1 == 0)
printf("\t\t\t你没有借阅这本书\n");
}
//用户查询书籍借阅信息
void display_book() {
int a, flag = 0, q, flag2 = 0;
char book[20];
printf("\t\t\t按书编查书按1,按书名查书按2\n");
scanf("%d", &flag);
if (flag == 1) {
printf("\t\t\t请输入书的编号\n");
scanf("%d", &a);
for (int i = 0; i < booksortsum; i++) {
if (book_list[i].number == a) {
strcpy(book, book_list[i].name);
if (book_list[i].totalnumber != 0)
printf("\t\t\t该书在图书馆中还有%d本\n", book_list[i].totalnumber);
for (int j = 0; j < readersum; j++) {
for (int k = 0; k < reader_list[j].totalborrownumber; k++) {
if (strcmp(reader_list[j].borrowedbook[k], book) == 0) {
printf("\t\t\t%s借走了%s\n", reader_list[j].name, book);
}
}
}
flag2 = 1;
}
}
if (flag2 == 0)
printf("\t\t\t查无此书\n");
}
if (flag == 2) {
printf("\t\t\t请输入书名\n");
scanf("%s", book);
for (int i = 0; i < booksortsum; i++) {
if (strcmp(book, book_list[i].name) == 0) {
if (book_list[i].totalnumber != 0)
printf("\t\t\t该书在图书馆中还有%d本\n", book_list[i].totalnumber);
for (int j = 0; j < readersum; j++) {
for (int k = 0; k < reader_list[j].totalborrownumber; k++) {
if (strcmp(reader_list[j].borrowedbook[k], book) == 0) {
printf("\t\t\t%s借走了%s\n", reader_list[i].name, book);
}
}
}
flag2 = 1;
}
}
if (flag2 == 0)
printf("\t\t\t查无此书\n");
}
}
//用户登录
void signreader() {
int i;
int flag = 0;
char name[20];
char key[20];
successful = 0;
printf("\t\t\t请输入用户账号\n");
scanf("%s", name);
for (i = 0; i < readersum; i++) {
if (strcmp(reader_list[i].name, name) == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("\t\t\t账号错误\n");
system("pause");
system("cls");
return;
}
if (flag == 1) {
printf("\t\t\t请输入密码\n");
scanf("%s", key);
if (strcmp(reader_list[i].password, key) == 0) {
printf("\t\t\t登录成功\n");
successful = 1;
temp = i;
return;
} else {
printf("\t\t\t密码错误\n");
system("pause");
system("cls");
return;
}
}
}
//管理员登录;
void signleader() {
int flag = 0;
char key[20];
char name[20];
successful = 0;
printf("\t\t\t\t请输入管理员账号\n");
scanf("%s", name);
if (strcmp(administrator_list.name, name) != 0) {
flag = 1;
printf("\t\t\t\t账号错误\n");
system("pause");
system("cls");
return;
}
if (flag == 0) {
printf("\t\t\t\t请输入密码\n");
scanf("%s", key);
if (strcmp(administrator_list.password, key) != 0) {
printf("\t\t\t\t密码错误\n");
system("pause");
system("cls");
return;
} else {
printf("\t\t\t\t登录成功\n");
successful = 1;
return;
}
}
}
//展示所有用户信息
void diplay_reader() {
printf("\t\t\t\t所有用户信息如下:\n");
printf("\t\t\t账号 ID 密码 借书数量\n");
for (int i = 0; i < readersum; i++) {
printf("\t\t\t %s %d %s %d\n", reader_list[i].name, reader_list[i].id, reader_list[i].password,
reader_list[i].totalborrownumber);
}
}
//管理员修改读者信息
void changereaderinformation() {
int flag;
int b;
char name[20];
char key[20];
int flag1 = 0;
printf("\t\t\t\t按ID修改按1,按账号修改按2\n");
scanf("%d", &flag);
if (flag != 1 && flag != 2) {
printf("\t\t\t\t请输入正确操作\n");
}
if (flag == 1) {
printf("\t\t\t\t\t请输入ID\n");
scanf("%d", &b);
for (int i = 0; i < readersum; i++) {
if (reader_list[i].id == b) {
flag1 = 1;
break;
}
}
}
if (flag == 2) {
printf("\t\t\t\t\t请输入账号\n");
scanf("%s", name);
for (int i = 0; i < readersum; i++) {
if (strcmp(reader_list[i].name, name) == 0) {
b = reader_list[i].id;
flag1 = 1;
break;
}
}
}
if ((flag == 1 || flag == 2) && flag1 == 0) {
printf("\t\t\t\t\t查无此人\n");
return;
}
for (int i = 0; i < readersum; i++) {
if (reader_list[i].id == b) {
printf("\t\t\t账号 ID 密码 借书数量\n");
printf("\t\t\t %s %d %s %d\n", reader_list[i].name, reader_list[i].id, reader_list[i].password,
reader_list[i].totalborrownumber);
printf("\t\t\t\t修改编号按1,修改用户账号按2,修改密码按3,注销该用户按4\n");
scanf("%d", &b);
switch (b) {
case 1: {
printf("\t\t\t\t请输入新的编号(四位)\n");
scanf("%d", &b);
reader_list[i].id = b;
printf("\t\t\t\t修改完成\n");
break;
}
case 2: {
printf("\t\t\t\t请输入新的账号\n");
scanf("%s", name);
strcpy(reader_list[i].name, name);
printf("\t\t\t\t修改完成\n");
break;
}
case 3: {
printf("\t\t\t\t\t请输入新的密码\n");
scanf("%s", key);
strcpy(reader_list[i].password, key);
printf("\t\t\t\t\t修改完成\n");
break;
}
case 4: {
if (reader_list[i].totalborrownumber == 0) {
printf("\t\t\t\t\t%s用户已被注销\n", reader_list[i].name);
for (int j = i; j < readersum; j++) {
for (int k = 0; k < reader_list[j].totalborrownumber; k++) {
strcmp(reader_list[j].borrowedbook[k], reader_list[j + 1].borrowedbook[k]);
}
reader_list[j].id = reader_list[j + 1].id;
reader_list[j].totalborrownumber = reader_list[j + 1].totalborrownumber;
strcpy(reader_list[j].name, reader_list[j + 1].name);
strcpy(reader_list[j].password, reader_list[j + 1].password);
}
readersum--;
}
if (reader_list[i].totalborrownumber != 0) {
printf("\t\t\t\t该用户还有书未还,无法注销\n");
}
break;
}
}
}
}
}
//管理员修改书籍信息;
void changbookinformation() {
char name[20];
int falg;
int falg1;
int flag;
int b;
int p = 0;
int flag2 = 0;
printf("\t\t\t按书编修改书籍信息按1,按书名修改书籍信息按2\n");
scanf("%d", &falg);
if (falg == 1) {
printf("\t\t\t\t请输入书的书编\n");
scanf("%d", &falg1);
for (int i = 0; i < booksortsum; i++) {
if (book_list[i].number == falg1) {
flag2 = 1;
break;
}
}
if (flag2 == 0) {
printf("%d\n", flag2);
printf("\t\t\t\t4查无此书\n");
return;
}
for (int i = 0; i < booksortsum; i++) {
if (falg1 == book_list[i].number && book_list[i].totalnumber != 0) {
printf("\t\t\t编号 书名 数量\n");
printf("\t\t\t %d %s %d\n", book_list[i].number, book_list[i].name, book_list[i].totalnumber);
printf("\t\t\t修改编号按1,修改数量按2,下架该书按3\n");
scanf("%d", &flag);
switch (flag) {
case 1: {
printf("\t\t\t\t请输入新的编号(四位)\n");
scanf("%d", &b);
book_list[i].number = b;
break;
}
case 2: {
printf("\t\t\t\t请输入新的数量\n");
scanf("%d", &b);
book_list[i].totalnumber = b;
break;
}
case 3: {
if (book_list[i].totalnumber != 0) {
printf("\t\t\t\t%s已被下架\n", book_list[i].name);
for (int j = i; j < booksortsum; j++) {
book_list[j].number = book_list[j + 1].number;
book_list[j].totalnumber = book_list[j + 1].totalnumber;
strcpy(book_list[j].name, book_list[j + 1].name);
}
booksortsum--;
break;
}
}
}
p = 1;
break;
}
if (falg1 == book_list[i].number && book_list[i].totalnumber == 0) {
printf("\t\t\t\t该书暂时被人全部借走,无法修改\n");
p = 1;
break;
}
}
if (p == 0)
printf("\t\t\t\t输入的编号错误\n");
}
if (falg == 2) {
printf("\t\t\t\t请输入书名\n");
scanf("%s", name);
for (int i = 0; i < booksortsum; i++) {
if (strcmp(book_list[i].name, name) == 0) {
flag2 = 1;
break;
}
}
if (flag2 == 0) {
printf("\t\t\t\t查无此书\n");
return;
}
for (int i = 0; i < booksortsum; i++) {
if (strcmp(name, book_list[i].name) == 0 && book_list[i].totalnumber != 0) {
printf("\t\t\t\t编号 书名 数量\n");
printf("\t\t\t\t%d %s %d\n", book_list[i].number, book_list[i].name, book_list[i].totalnumber);
printf("\t\t\t\t修改编号按1,修改数量按2,下架该书按3\n");
scanf("%d", &flag);
switch (flag) {
case 1: {
printf("\t\t\t\t请输入新的编号(四位)\n");
scanf("%d", &b);
book_list[i].number = b;
break;
}
case 2: {
printf("\t\t\t\t请输入新的数量\n");
scanf("%d", &b);
book_list[i].totalnumber = b;
break;
}
case 3: {
if (book_list[i].totalnumber != 0) {
printf("\t\t\t\t%s已被下架\n", book_list[i].name);
for (int j = i; j < booksortsum; j++) {
book_list[j].number = book_list[j + 1].number;
book_list[j].totalnumber = book_list[j + 1].totalnumber;
strcpy(book_list[j].name, book_list[j + 1].name);
}
booksortsum--;
break;
}
}
}
p = 1;
break;
}
if (falg1 == book_list[i].number && book_list[i].totalnumber == 0) {
printf("\t\t\t\t该书暂时被人全部借走,无法修改\n");
p = 1;
break;
}
}
if (p == 0)
printf("\t\t\t\t输入的书名错误\n");
}
}
int main() {
int flag1, flag4;
while (1) {
HideCursor();
int flag3 = 0;
makemenue();
load_booklist();
load_readerlist();
load_borrowedbooklist();
scanf("%d", &flag1);
switch (flag1) {
case 1: {
signleader();
if (successful == 1) {
system("pause");
system("cls");
while (1) {
leadermenue();
scanf("%d", &flag4);
switch (flag4) {
case 1: {
changbookinformation();
save_booklist();
save_borrowbooklist();
system("pause");
system("cls");
break;
}//修改书籍信息
case 2: {
load_readerlist();
load_borrowedbooklist();
diplay_reader();
changereaderinformation();
save_booklist();
save_borrowbooklist();
save_readerlist();
save_readerlist;
system("pause");
system("cls");
break;
}//修改用户信息
case 3: {
seek_book();
system("pause");
system("cls");
break;
}//查看藏书
case 4: {
display_book();
system("pause");
system("cls");
break;
}//查看谁借了书
case 5: {
flag3 = 1;
printf("\t\t\t\t退出成功\n");
system("pause");
system("cls");
break;
}
default: {
printf("\t\t\t\t请按正确格式输入操作\n");
system("pause");
system("cls");
break;
}
}
if (flag3 == 1)
break;
}
break;
}
break;
}//管理员系统
case 3: {
signreader();
if (successful == 1) {
system("pause");
system("cls");
while (1) {
readermenue();
scanf("%d", &flag4);
switch (flag4) {
case 1: {
borrow_book();
save_booklist();
save_borrowbooklist();//将用户借书信息传到文件中
system("pause");
system("cls");
break;
}//用户借书
case 2: {
return_book();
save_booklist();
save_borrowbooklist();
system("pause");
system("cls");
break;
}//用户还书
case 3: {
seek_book();
system("pause");
system("cls");
break;
}//查看藏书
case 4: {
display_book();
system("pause");
system("cls");
break;
}
case 5: {
flag3 = 1;
printf("\t\t\t\t退出成功\n");
system("pause");
system("cls");
break;
}
//查看书被谁借走
default: {
printf("\t\t\t\t请按正确格式输入操作\n");
system("pause");
system("cls");
break;
}
}
if (flag3 == 1)
break;
}
break;
}
break;
}//用户登录及用户操作
case 2: {
makereader();
save_readerlist();
system("cls");
break;
}//注册用户;
default: {
printf("\t\t\t\t请按正确格式输入操作\n");
system("pause");
system("cls");
break;
}
}
save_booklist();
save_readerlist();
save_borrowbooklist();
}
return 0;
}
ps:如有错误敬请指正,欢迎评论区交流或者发私信
邮箱1654407501@qq.com,QQ号同邮箱