功能:
界面
入库:
查询书库:
录入学生信息与遍历:
借书:
借阅时间为读取操作系统的时间
修改信息
还书:
出库:
代码:
各种类定义(头文件):
class Book {
public:
virtual void display() = 0; //抽象基类
protected:
int ID; //图书编号
float price;//图书价格
string book_name; //图书名称
};
class store_Book : public Book
{
public:
store_Book();
int return_ID();
string return_book_name();
float return_price();
string return_borrower();
bool return_borrowed();
bool return_on_shelves();
virtual void display();
void operateStoreBook();
void Offshelves();
void Onshelves();
void borrowerBook();
void returnBook();
void setBorrower(string name);
static int amount; //图书的总数量(静态成员)
private:
bool borrowed; //是否被借阅
bool on_shelves;//是否上架(默认上架)
string borrower;//借阅者
};
class borrowed_Book :public Book//被借阅的书籍
{
public:
borrowed_Book(store_Book book);
int return_ID();
string return_book_name();
virtual void display();
private:
Day borrow_date; //借阅日期
Day return_date ; //还书日期
};
class Day {
public:
Day();
Day operator+(int m); //操作符重载,归还日期=借阅日期加期限
friend ostream& operator<<(ostream& output, Day Day);
private:
int year;
int month;
int day;
};
class borrower
{
public:
int number;//借阅者借书的数量
list Book; //借的书,一个人可以借10本
string return_borrower_name();
int return_ID();
borrower(int ID, string name);
borrower();
void display();
static int stu_amount;
private:
string borrower_name; //借阅者姓名
int ID; //借阅者学号
};
各种函数:
界面:
void Interface() {
system("COLOR 74");
cout << "****************************************************************" << endl;
cout << "输入1将书入库" << endl;
cout << "输入2将书出库" << endl;
cout << "输入3浏览书库" << endl;
cout << "输入4查询指定书" << endl;
cout << "输入5更改书籍信息以及上架或下架书籍" << endl;
cout << "输入6录入学生信息" << endl;
cout << "输入7学生借书" << endl;
cout << "输入8学生还书" << endl;
cout << "输入9查询指定学生信息" << endl;
cout << "输入Q展示所有学生信息" << endl;
cout << "输入W统计所有书的数量" << endl;
cout << "输入E统计某本书数量" << endl;
cout << "输入R清屏" << endl;
cout << "输入0重新展示版面" << endl;
cout << "为防止误触,关闭程序请在操作系统直接关闭" << endl;
cout << "****************************************************************" << endl;
cout << endl;
}
操作:
#include "function.h" void operate(list& store, vector & borrowed) { Interface(); char n; while (1) { cin.clear(); cin >> n; switch (n) { case '1': cout << "将书入库操作:" << endl; putOn(store); cout << endl; break; case '2': cout << "将书出库操作:" << endl; deleteBook(store); cout << endl; break; case '3': cout << "浏览书库操作:" << endl; displayBook(store); cout << endl; break; case '4': cout << "查询指定书操作:" << endl; searchBook(store); cout << endl; break; case '5': cout << "更改书籍信息以及上架或下架书籍操作:" << endl; changeInform(store); cout << endl; break; case '6': cout << "录入学生操作:" << endl; enterStudent(borrowed); cout << endl; break; case '7': cout << "学生借书操作:" << endl; borrowBook(borrowed, store); cout << endl; break; case '8': cout << "学生还书操作:" << endl; returnBook(borrowed, store); cout << endl; break; case '9': cout << "查询指定学生信息操作:" << endl; searchBorrower(borrowed); cout << endl; break; case 'q': case 'Q': cout << "展示所有学生信息操作:" << endl; displayBorrower(borrowed); cout << endl; break; case 'w': case 'W': cout << "统计所有书的数量操作:" << endl; cout << "书库书籍有:" << store_Book::amount << "本" << endl; cout << endl; break; case 'e': case 'E': cout << "统计某本书数量操作:" << endl; statisticsName(store); cout << endl; break; case 'r': case 'R': cout << "清屏操作:" << endl; system("cls"); Interface(); cout << endl; break; case '0': Interface(); break; default: cout << "非法输入,请重试" << endl; break; } } }
书库中的书类:
store_Book::store_Book() {
cout << "请分别输入ID,书名,价格:";
cin >> ID >> book_name >> price;
borrowed = false;
on_shelves = true;
borrower = "Nobody";
}
int store_Book::amount = 0;
int store_Book::return_ID() {
return ID;
}
string store_Book::return_book_name() {
return book_name;
}
float store_Book::return_price() {
return price;
}
string store_Book::return_borrower() {
return borrower;
}
bool store_Book::return_borrowed() {
return borrowed;
}
bool store_Book::return_on_shelves() {
return on_shelves;
}
void store_Book::Onshelves() {
on_shelves = true;
}
void store_Book::Offshelves() {
on_shelves = false;
}
void store_Book::borrowerBook() {
borrowed = true;
}
void store_Book::returnBook() {
borrowed = false;
}
void store_Book::setBorrower(string name) {
borrower = name;
}
void store_Book::operateStoreBook() {
char n;
re:
cout << "输入1上架,输入2下架,输入3修改信息,输入0退出:";
while (1) {
cin >> n;
if (n == '1') {
on_shelves = true;
cout << "上架成功" << endl;
continue;
}
else if (n == '2') {
on_shelves = false;
cout << "下架成功" << endl;
continue;
}
else if (n == '3') {
char m;
while (1) {
cout << "输入1修改ID,输入2修改书名,输入3修改价格,输入4返回上一级,输入0退出:";
cin >> m;
if (m == '1') {
cout << "请输入修改的ID:";
cin >> ID;
cout << "修改成功" << endl;
break;
}
else if (m == '2') {
cout << "请输入修改的书名:";
cin >> book_name;
cout << "修改成功" << endl;
break;
}
else if (m == '3') {
cout << "请输入修改的价格:";
cin >> price;
cout << "修改成功" << endl;
break;
}
else if (m == '4') {
goto re;
}
else if (m == '0')return;
else {
cout << "非法输入,请重试";
continue;
}
}
}
else if (n == '0') {
cout << "结束操作" << endl;
return;
}
else {
cout << "非法输入,请重试";
continue;
}
}
}
void store_Book::display() {
cout << "书的ID:" <
被借阅的书类:
borrowed_Book::borrowed_Book(store_Book book) { //参数是仓库里的书籍,给本
int m;
ID = book.return_ID();
book_name = book.return_book_name();
price = book.return_price();
cout << "输入借书时间1~12(月):";
while(1){
cin >> m;
if (m >= 1 && m <= 12) {
return_date = borrow_date + m;
break;
}
else {
cout << "非法输入,请重试"<
时间类:
Day Day:: operator+(int m) {
Day d=*this;
if (month + m <= 12)d.month += m;
else {
d.year++;
d.month = (d.month + m) % 12;
}
return d;
}
ostream& operator<<(ostream& output, Day Day) {
output << Day.year << '-' << Day.month << '-' << Day.day;
return output;
}
Day::Day() {
SYSTEMTIME sys; //获取系统时间
GetLocalTime(&sys);
year = sys.wYear;
month = sys.wMonth;
day = sys.wDay;
}
借阅者类:
string borrower:: return_borrower_name() {
return borrower_name;
}
int borrower::return_ID() {
return ID;
}
borrower::borrower() {
cout << "请分别输入学号,姓名:";
cin >> ID >> borrower_name;
number = 0;
stu_amount++;
}
borrower::borrower(int ID,string name) {
this->ID = ID;
this->borrower_name = name;
number = 0;
stu_amount++;
}
void borrower::display() {
cout <display();
}
}
int borrower::stu_amount = 0;
各种功能函数:
void borrowBookAPI(borrower& stu, list & Book) {
flag:
cout << "请输入需要借的书的信息" << endl;
list ::iterator it = findBook(Book);
if (it != Book.end()) {
if (!(it->return_borrowed()) && it->return_on_shelves()) {
borrowed_Book book(*it);
it->borrowerBook();
stu.Book.push_back(book);
stu.number++;
it->setBorrower(stu.return_borrower_name());
}
else {
cout << "该书没有上架或者被假借走了,按任意重试,按0退出";
char n;
cin >> n;
if ('0')return;
else {
goto flag;
}
}
}
else {
cout << "未找到该书,按任意重试,按0退出" << endl;
char n;
cin >> n;
if ('0')return;
else {
goto flag;
}
}
}
void borrowBook(vector& borrowers, list & Book)//借书函数,先输入借书人信息然后再输入书的信息进行查找操作
{
cout << "请输入借书同学的信息" << endl;
int i = findBorrowerName(borrowers);
if (i != -1) { //找到该同学在数据库里,在其后面添加借书信息即可;
borrowBookAPI(borrowers[i], Book);
cout << "借书成功" << endl;
}
else { //未找到,添加该同学信息,再操作
cout << "未找到数据库里有该名同学,请再次输入相关信息" << endl;
borrower stu;
borrowers.push_back(stu);
borrowBookAPI(borrowers.back(), Book);
cout << "借书成功" << endl;
}
}
void changeInform(list & Book)//在根据用户输入的要修改的内容修改
{
cout << "输入要修改的相关书籍信息或状态" << endl;
auto it = findBook(Book);
if (it != Book.end()) {
it->operateStoreBook();
}
else {
cout << "未查找到要修改的书籍" << endl;
}
}
int statisticsName(list Book)//统计该书数量,返回数量
{
string name;
cout << "请输入需要查询的书籍名:";
cin >> name;
int count = 0;
for (auto it = Book.begin(); it != Book.end(); it++) {
if (it->return_book_name() == name)count++;
}
cout << "名字为" << name << "的书有:" << count << "本" << endl;
return count;
}
void displayBook(list Book)//遍历书的信息
{
cout << "一共有" << store_Book::amount << "本书" << endl;
for_each(Book.begin(), Book.end(), [](store_Book Book) {
Book.display();
});
cout << "遍历完成" << endl;
}
void displayBorrower(vector borrowers)//遍历所有借阅者各种信息;
{
cout << "一共有" << borrower::stu_amount << "位学生:" << endl;
for (auto it = borrowers.begin(); it != borrowers.end(); it++) {
it->display();
}
}
void enterStudent(vector& borrowers) {
string name;
int ID;
cout << "请分别输入要导入的学生的学号、姓名:" << endl;
cin >> ID >> name;
for (auto it = borrowers.begin(); it != borrowers.end(); it++) {
if (it->return_ID() == ID) {
cout << "已存在此学号的学生,录入失败" << endl;
return;
}
}
borrower stu(ID,name);
borrowers.push_back(stu);
cout << "录入成功" << endl;
}
list ::iterator findBookByName(list & Book, string name) { //根据书名查找函数,传入一个书库(书的数组)参数,一个书名参数,查询成功返回数组下标,查询失败返回-1;
list ::iterator it;
for (it = Book.begin(); it != Book.end(); it++) {
if (it->return_book_name() == name) {
break;
}
}
return it;
}
list ::iterator findBookById(list & Book, int id) //根据ID查找函数,传入一个书库(书的数组)参数,一个ID参数,查询成功返回数组下标,查询失败返回-1;
{
list ::iterator it;
for (it = Book.begin(); it != Book.end(); it++) {
if (it->return_ID() == id) {
break;
}
}
return it;
}
list ::iterator findBook(list & Book) //查找函数,让用户决定传入ID还是书名,查询成功返回数组下标,查询失败返回-1(调用上面两个函数解决);
{
char n;
list ::iterator it = Book.end();
cout << "输入1用书名查找,输入2用ID查找" << endl;
while (1) {
cin >> n;
if (n == '1') {
string name;
cout << "请输入书名:";
cin >> name;
it = findBookByName(Book, name);
break;
}
else if (n == '2') {
int ID;
cout << "请输入ID:";
cin >> ID;
it = findBookById(Book, ID);
break;
}
else {
cout << "非法输入,请重试";
continue;
}
}
return it;
}
list ::iterator findBorrowedBookByName(list & Book, string name) { //根据书名查找函数,传入一个书库(书的数组)参数,一个书名参数,查询成功返回数组下标,查询失败返回-1;
list ::iterator it;
for (it = Book.begin(); it != Book.end(); it++) {
if (it->return_book_name() == name) {
break;
}
}
return it;
}
list ::iterator findBorrowedBookById(list & Book, int id) //根据ID查找函数,传入一个书库(书的数组)参数,一个ID参数,查询成功返回数组下标,查询失败返回-1;
{
list ::iterator it;
for (it = Book.begin(); it != Book.end(); it++) {
if (it->return_ID() == id) {
break;
}
}
return it;
}
list ::iterator findBorrowedBook(list & Book) //查找函数,让用户决定传入ID还是书名,查询成功返回数组下标,查询失败返回-1(调用上面两个函数解决);
{
char n;
list ::iterator it = Book.end();
cout << "输入1用书名查找,输入2用ID查找" << endl;
while (1) {
cin >> n;
if (n == '1') {
string name;
cout << "请输入书名:";
cin >> name;
it = findBorrowedBookByName(Book, name);
break;
}
else if (n == '2') {
int ID;
cout << "请输入ID:";
cin >> ID;
it = findBorrowedBookById(Book, ID);
break;
}
else {
cout << "非法输入,请重试";
continue;
}
}
return it;
}
int findBorrowerName(vector& borrowers)//让用户决定传入ID还是姓名,查询成功返回数组下标,查询失败返回-1;
{
int n;
int id;
cout << "请输入学号:";
cin >> id;
for (int i = 0; i < borrowers.size(); i++) {
if (id == borrowers[i].return_ID())return i;
}
return -1;
}
// }
//
//}
void deleteBook(list & Book)//删除函数,先查找,查找在的位置完删除该书(数组内元素的删除)
{
list ::iterator it;
cout << "输入相关信息:" << endl;
it = findBook(Book);
if (it != Book.end()) {
Book.erase(it);
store_Book::amount--;
cout << "删除成功" << endl;
}
else {
cout << "没有该书籍,删除失败" << endl;
}
}
void putOn(list & Book)//入库函数,输入要加入的信息,数组加入末尾加入该书
{
store_Book book;
for (auto it = Book.begin(); it != Book.end(); it++) {
if (book.return_ID() == it->return_ID()) {
cout << "已存在ID为" << book.return_ID() <<"的书,入库失败" << endl;
return;
}
}
Book.push_back(book);
book.amount++;
cout << "入库成功" << endl;
}
void returnBook(vector& borrowers, list & Book)//还书函数,同上
{
cout << "请输入还书同学的信息" << endl;
int i = findBorrowerName(borrowers);
if (i != -1) {
cout << "请输入该同学要归还的书的信息" << endl;
list::iterator it = findBorrowedBook(borrowers[i].Book);
if (it != borrowers[i].Book.end()) {
int ID = it->return_ID();
borrowers[i].Book.erase(it);
borrowers[i].number--;
list::iterator it2 = findBookById(Book, ID); //对应书库里的书
if (it2 != Book.end()) {
it2->returnBook();
cout << "还书成功" << endl;
}
else cout << "该同学的借的书不在库里了,送你了" << endl;
}
else {
cout << "该同学没有借这本书" << endl;
}
}
else {
cout << "该同学不在数据库里" << endl;
}
}
void searchBook(list Book) {
auto it = findBook(Book);
if (it != Book.end()) {
cout << "查找成功:" << endl;
it->display();
}
else {
cout << "查找失败" << endl;
}
}
void searchBorrower(vector borrowers) {
int i = findBorrowerName(borrowers);
if (i != -1) {
borrowers[i].display();
}
else {
cout << "未找到该学生" << endl;
}
}



