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.
text1/data.h

231 lines
5.5 KiB

#ifndef DATA_H_INCLUDED
#define DATA_H_INCLUDED
#include <stdio.h>
2 years ago
#include "sqlist.h"
2 years ago
struct Book {
int id; // 编号
string title; // 标题
int number; // 数量
};
2 years ago
2 years ago
SqList <Book> books;
2 years ago
2 years ago
// 函数声明
bool bookempty(); // 书籍库判空
void input(Book& b); // 输入一本书的信息
void print(const Book& b);// 打印一本书的信息
int find(int id); // 根据 id 查找图书 || 若找到,返回元素的位序,找不到时返回 0
2 years ago
void DoAddBook(); // 添加图书
void DoFindBook(); // 查找图书
void DoDeleteBook(); // 删除图书
void DoPrintBook(); // 打印所有图书
void DoRepaidBook(); // 归还图书
void DoBoorowBook(); // 借用图书
2 years ago
void DoReviseBook(); // 修改图书
void DoSortBook(); // 排序图书
2 years ago
// 输入一本书的信息
2 years ago
void input(Book& b)
{
cout << "ID : ";
cin >> b.id;
cin.ignore(1024, '\n'); // skip rest chars of the line
cout << "TITLE : ";
getline(cin, b.title);
cout << "Number : ";
while (1){
cin >> b.number;
if (b.number>0) break;
cout << "Number ERROR" << endl;
cout << "Input again" << endl;
}
}
// 打印一本书的信息
void print(const Book& b)
{
cout << "Book " << endl << endl
<<"**************** id: " << b.id << " ****************" << endl
<< "**** title: 《 " << b.title << " 》****" << endl
<< "************** Number: " << b.number << " **************" << endl << endl;
}
// 根据 id 查找图书
// 若找到,返回元素的位序,找不到时返回 0
int find(int id)
{
for (int i = 1; i <= books.length; i++)
{
2 years ago
if (id == books.elem[i].id){
return i;
}
}
return 0; // not found
}
2 years ago
// 书籍库判空
bool bookempty()
{
int a=0;
for (int i=1;i<=books.length;i++)
{
if (find(i)==0) a++;
}
if (a==books.length) return true;
else return false;
}
2 years ago
// 添加图书
void DoAddBook()
{
2 years ago
cout << endl << "Add Book"<< endl<<endl;
2 years ago
Book book;
input(book); //输入图书
books.elem[books.length + 1] = book;
books.length++;
print(book);
cout << "*******Added********" << endl;
}
// 查找图书
void DoFindBook()
{
2 years ago
cout << endl << "Find Book" << endl <<endl;
2 years ago
int id;
cout << "Enter book ID: ";
cin >> id;
Book book;
if (find(id) == 0)
cout << "Not found" << endl;
else
{
book = books.elem[find(id)];
cout << "Found" << endl;
cout << "************" << endl;
print(book);
}
2 years ago
}
// 删除图书
void DoDeleteBook()
{
2 years ago
cout << endl << "Delete Book" << endl << endl;
2 years ago
int id;
cout << "Which book you wanna delelet?"<<endl;
cout << "Enter book ID: ";
cin >> id;
Book e;
if (find(id) == 0)
cout << "Not found" << endl;
else
{
2 years ago
e = books.elem[find(id)];
print(e);
for (int i = find(id); i < books.length; i++)
{
books.elem[i] = books.elem[i + 1];
}
--books.length;
cout << "************************" << endl;
cout << "Deleted" << endl;
}
2 years ago
}
// 打印所有图书
void DoPrintBook()
{
2 years ago
cout << endl << "Print All Books" << endl <<endl;
2 years ago
int flag = 0;
for (int i = 0; i < books.length; i++)
{
2 years ago
Book e;
e = books.elem[i + 1];
print(e);
flag++;
}
cout << "Total: ";
cout << flag;
cout << " books" << endl;
}
// 归还图书
void DoRepaidBook()
{
2 years ago
cout << endl << "Repaid Book" << endl<<endl;
2 years ago
int id;
cout << "Which book you wanna repaid ? " << endl;
cin >> id;
cout << endl;
if (find(id)){
Book e;
e = books.elem[find(id)];
++books.elem[find(id)].number;
}else{
DoAddBook();
}
2 years ago
}
// 借用图书
void DoBoorowBook()
{
2 years ago
cout << endl << "Boorow Book" << endl <<endl;
2 years ago
int id;
cout << "Which book you wanna boorow ? " << endl;
cin >> id;
cout << endl;
if (find(id)){
if (books.elem[find(id)].number>0) {
Book e;
e = books.elem[find(id)];
cout<< "*********"<< endl << "OK" << endl << "*********"<<endl;
--books.elem[find(id)].number;
}else cout << "***************************"<< endl
<< "Book empty" << endl << "***************************" << endl;
2 years ago
}else cout<< "NOT FOUND THIS BOOK"<<endl;
2 years ago
}
2 years ago
// 修改图书
void DoReviseBook()
{
cout <<endl<< "Revise Book" <<endl <<endl;
int id;
printf( "Which book you wanna revise ?\n" );
cin >> id;
2 years ago
if ( find(id)!=0 ) {
printf ( "Original book number : %d\n", books.elem[id].number );
printf ( "Revised number :" );
int xiugai;
scanf ( "%d", &xiugai );
books.elem[id].number+=xiugai;
cout << "**********************" << endl;
printf ( "Revise success \n" );
}
else printf ( "No such book\n");
}
// 排序图书
void DoSortBook()
{
cout << endl << "Sort Books" << endl << endl;
int a=0;
if (bookempty()) cout << "Book data empty"<< endl;
2 years ago
else {
for (int i=1;i<books.length;i++)
for (int j=books.length;j>0;j--)
{
if (books.elem[i].id>books.elem[j].id) {
auto temp=books.elem[i];books.elem[i]=books.elem[j];books.elem[j]=temp;}
}
}
cout << "*****************************" <<endl;
cout << "Sort success"<<endl;
2 years ago
}
#endif // DATA_H_INCLUDED