#include<iostream>
#include<fstream>
using namespace std;
struct Book {
string isbn;
string bookName;
string author;
string publishingHouse;
int remainNumber;
Book *next;
};
void menu() {
cout << "图书管理系统" << endl;
cout << "1.录书" << endl;
cout << "2.删书" << endl;
cout << "3.馆藏" << endl;
cout << "4.查书" << endl;
cout << "5.借书" << endl;
cout << "6.还书" << endl;
cout << "7.退出" << endl;
cout << endl;
}
void clear() { //清屏
system("pause");
system("cls");
}
void saveBook(Book *head) {
ofstream ofs;
Book *p = head;
ofs.open("library.txt", ios::trunc | ios::binary);
while (p->next != nullptr) {
p = p->next;
ofs << p->isbn << endl << p->bookName << endl << p->author << endl << p->publishingHouse << endl << p->remainNumber << endl;
}
}
void addBook() {
ofstream ofs;
bool flag = true;
string isbn;
string bookName;
string author;
string publishingHouse;
int remainNumber;
while (flag) {
cout << "请输入书籍的ISBN号;" << endl;
cin >> isbn;
cout << "请输入书籍的书名:" << endl;
cin >> bookName;
cout << "请输入书籍的作者:" << endl;
cin >> author;
cout << "请输入书籍的出版社:" << endl;
cin >> publishingHouse;
cout << "请输入书籍的数量" << endl;
cin >> remainNumber;
ofs.open("library.txt", ios::app | ios::binary);
ofs << isbn << endl << bookName << endl << author << endl << publishingHouse << endl << remainNumber << endl;
ofs.close();
cout << "是否继续录入信息:(0.取消 1.确定)" << endl;
cin >> flag;
}
cout << "录入完成!" << endl;
clear();
}
Book* makeLinkList(Book *head) {
ifstream ifs;
ifs.open("library.txt", ios::in | ios::binary);
if (!ifs.is_open()) {
cout << "文件打开失败" << endl;
exit(0);
}
string isbn;
string bookName;
string author;
string publishingHouse;
int remainNumber;
Book *p = head;
while (ifs >> isbn && ifs >> bookName && ifs >> author && ifs >> publishingHouse && ifs >> remainNumber) {
Book *newNode = new Book;
newNode-> isbn = isbn;
newNode-> bookName = bookName;
newNode->author = author;
newNode->publishingHouse = publishingHouse;
newNode->remainNumber = remainNumber;
p->next = newNode;
p = newNode;
}
p->next = nullptr;
ifs.close();
return head;
}
void showBook(Book *head) {
head = makeLinkList(head);
Book *p = head;
while (p->next != nullptr) {
p = p->next;
cout << "书籍的ISBN号:" << p->isbn << " "
<< "书籍的书名:" << p->bookName << " "
<< "书籍的作者:" << p->author << " "
<< "书籍的出版社;" << p->publishingHouse << " "
<< "书籍的数量:" << p->remainNumber << " "
<< endl;
}
}
void deleteBook(Book *head) {
showBook(head);
head = makeLinkList(head);
int pos, i = 0, j = 0;
cout << "请输入要删除第几本书:" << endl;
cin >> pos;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
j++;
}
if (pos > j || pos < 1) {
cout << "您的输入不合法!" << endl;
clear();
return;
}
p = head;
while (p->next != nullptr) {
i++;
if (i == pos) {
p->next = p->next->next;
break;
}
p = p->next;
}
saveBook(head);
cout << "删除完成!" << endl;
clear();
}
void findISBN(Book *head) {
cout << "请输入要查询的ISBN号:" << endl;
string target;
bool flag = false;
cin >> target;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
if (p->isbn == target) {
cout << "已经查到了ISBN号为:" << p->isbn << " 的书籍" << endl
<< "书籍的书名:" << p->bookName << " "
<< "书籍的作者:" << p->author << " "
<< "书籍的出版社;" << p->publishingHouse << " "
<< "书籍的数量:" << p->remainNumber << " "
<< endl;
flag = true;
break;
}
}
if (flag == false)
cout << "没有查到该ISBN号的书籍!" << endl;
cout << "查询完成!" << endl;
clear();
}
void findBookName(Book *head) {
cout << "请输入要查询的书名:" << endl;
string target;
bool flag = false;
cin >> target;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
if (p->bookName == target) {
cout << "已经查到了书名为:" << p->bookName << " 的书籍" << endl
<< "书籍的ISBN:" << p->isbn << " "
<< "书籍的作者:" << p->author << " "
<< "书籍的出版社;" << p->publishingHouse << " "
<< "书籍的数量:" << p->remainNumber << " "
<< endl;
flag = true;
break;
}
}
if (flag == false)
cout << "没有查到该书名的书籍!" << endl;
cout << "查询完成!" << endl;
clear();
}
void findAuthor(Book *head) {
cout << "请输入要查询的作者:" << endl;
string target;
bool flag = false;
cin >> target;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
if (p->author == target) {
cout << "已经查到了作者为:" << p->author << " 的书籍" << endl
<< "书籍的ISBN:" << p->isbn << " "
<< "书籍的书名:" << p->bookName << " "
<< "书籍的出版社;" << p->publishingHouse << " "
<< "书籍的数量:" << p->remainNumber << " "
<< endl;
flag = true;
break;
}
}
if (flag == false)
cout << "没有查到该作者的书籍!" << endl;
cout << "查询完成!" << endl;
clear();
}
void findPublishingHouse(Book *head) {
cout << "请输入要查询的出版社:" << endl;
string target;
bool flag = false;
cin >> target;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
if (p->publishingHouse == target) {
cout << "已经查到了出版社为:" << p->publishingHouse << " 的书籍" << endl
<< "书籍的ISBN:" << p->isbn << " "
<< "书籍的书名:" << p->bookName << " "
<< "书籍的作者;" << p->author << " "
<< "书籍的数量:" << p->remainNumber << " "
<< endl;
flag = true;
break;
}
}
if (flag == false)
cout << "没有查到该出版社的书籍!" << endl;
cout << "查询完成!" << endl;
clear();
}
void findBook(Book *head) {
head = makeLinkList(head);
int choose;
bool flag = true;
while (flag) {
cout << "查询书籍模式" << endl;
cout << "1.ISBN号" << endl;
cout << "2.书名" << endl;
cout << "3.作者" << endl;
cout << "4.出版社" << endl;
cout << "5.退出" << endl;
cout << "请输入要按什么方式查询书籍:" << endl;
cin >> choose;
switch (choose) {
case 1:
findISBN(head);
break;
case 2:
findBookName(head);
break;
case 3:
findAuthor(head);
break;
case 4:
findPublishingHouse(head);
break;
case 5:
flag = false;
break;
default:
system("cls");
cout << "您的输入有误,请重新输入!" << endl;
system("pause");
break;
}
}
}
void borrowBook(Book *head) {
showBook(head);
head = makeLinkList(head);
int pos, i = 0, j = 0;
cout << "请输入要借第几本书:" << endl;
cin >> pos;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
j++;
}
if (pos > j || pos < 1) {
cout << "您的输入不合法!" << endl;
clear();
return;
}
p = head;
while (p->next != nullptr) {
i++;
p = p->next;
if (i == pos) {
if (p->remainNumber < 1) {
cout << "该书籍已经没有了," << endl
<< "借书失败!" << endl;
break;
} else {
p->remainNumber--;
cout << "借书完成!" << endl;
break;
}
}
}
saveBook(head);
clear();
}
void returnBook(Book *head) {
showBook(head);
head = makeLinkList(head);
int pos, i = 0, j = 0;
cout << "请输入要还第几本书:" << endl;
cin >> pos;
Book *p = head;
while (p->next != nullptr) {
p = p->next;
j++;
}
if (pos > j || pos < 1) {
cout << "您的输入不合法!" << endl;
clear();
return;
}
p = head;
while (p->next != nullptr) {
i++;
p = p->next;
if (i == pos) {
p->remainNumber++;
break;
}
}
cout << "还书完成!" << endl;
saveBook(head);
clear();
}
int main() {
int choose;
Book *head = new Book;
while (1) {
menu();
cout << "请输入您的选项:" << endl;
cin >> choose;
switch (choose) {
case 1:
addBook();
break;
case 2:
deleteBook(head);
break;
case 3:
showBook(head);
clear();
break;
case 4:
findBook(head);
break;
case 5:
borrowBook(head);
break;
case 6:
returnBook(head);
break;
case 7:
exit(0);
default:
system("cls");
cout << "您的输入有误,请重新输入!" << endl;
system("pause");
break;
}
}
return 0;
}
图书管理系统(单链表实现)
最新推荐文章于 2024-07-11 18:56:11 发布