From 452d8bece6dbda7ff2ff113dd9fb7ea253acca72 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:36:35 +0800 Subject: [PATCH 01/25] Delete 'book.cpp' --- book.cpp | 170 ------------------------------------------------------- 1 file changed, 170 deletions(-) delete mode 100644 book.cpp diff --git a/book.cpp b/book.cpp deleted file mode 100644 index abb721f..0000000 --- a/book.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include -using namespace std; - -#include "sqlist.h" // 顺序表 - -// 图书信息 -struct Book { - int id; // 编号 - string title; // 标题 - string author; // 作者 - float price; // 价格 -}; - -// 所有书的列表 -SqList books; - -int get_command(); // 读取命令 -void DoAddBook(); // 添加图书 -void DoFindBook(); // 查找图书 -void DoDeleteBook(); // 删除图书 -void DoPrintBook(); // 打印图书 - -int main() -{ - bool finish = false; - - InitList(books); - - while (!finish) { - switch (get_command()) { - case 1: // Add book - DoAddBook(); - break; - case 2: // Find book - DoFindBook(); - break; - case 3: // Delete book - DoDeleteBook(); - break; - case 4: // Print - DoPrintBook(); - break; - case 0: // Exit - finish = true; - break; - default: // no command - cout << "Error command." << endl; - } - } - - DestroyList(books); - - return 0; -} - -// 读取命令 -int get_command() -{ - int cmd; - cout << "Commands: (1) Add, (2) Find, (3) Delete, (4) Print, (0) Exit\n"; - cout << "Enter your choice (0-4): "; - cin >> cmd; - return cmd; -} - -// 输入一本书的信息 -void read(Book& b) -{ - cout << "ID : "; - cin >> b.id; - cin.ignore(1024, '\n'); // skip rest chars of the line - cout << "TITLE : "; - getline(cin, b.title); - cout << "AUTHOR: "; - getline(cin, b.author); - cout << "PRICE : "; - cin >> b.price; -} - -// 打印一本书的信息 -void print(const Book& b) -{ - cout << "Book { id: " << b.id << "," - << " title:\"" << b.title << "\"," - << " author: \"" << b.author << "\"," - << " price: " << b.price << " }" - << endl; -} - -// 根据 id 查找图书 -// 若找到,返回元素的位序,找不到时返回 0 -int find(int id) -{ - - for (int i = 1; i <= books.length; i++) - { - if (id == books.elem[i].id){ - return i; - } - } - return 0; // not found -} - -// 添加图书 -void DoAddBook() -{ - Book e; - read(e); - books.elem[books.length + 1] = e; - books.length++; - print(e); - cout << "Added" << endl; -} - -// 查找图书 -void DoFindBook() -{ - int id; - cout << "Enter book ID: "; - cin >> id; - Book e; - - if (find(id) == 0) - cout << "Not found" << endl; - else - { - e = books.elem[find(id)]; - print(e); - cout << "Found" << endl; - } -} - -// 删除图书 -void DoDeleteBook() -{ - int id; - cout << "Enter book ID: "; - cin >> id; - Book e; - int c = find(id); - if (find(id) == 0) - cout << "Not found" << endl; - else - { - e = books.elem[c]; - print(e); - for (int i = c; i < books.length; i++) - { - books.elem[i] = books.elem[i + 1]; - } - --books.length; - cout << "Deleted" << endl; - } -} - -// 打印图书 -void DoPrintBook() -{ - int flag = 0; - for (int i = 0; i < books.length; i++) - { - Book e; - e = books.elem[i + 1]; - print(e); - flag++; - } - cout << "Total: "; - cout << flag; - cout << " books" << endl; -} \ No newline at end of file -- 2.34.1 From 98291f4a11806a519e584d8848978f8a03c95514 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:36:41 +0800 Subject: [PATCH 02/25] Delete 'data.h' --- data.h | 55 ------------------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 data.h diff --git a/data.h b/data.h deleted file mode 100644 index 24e086e..0000000 --- a/data.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef DATA_H_INCLUDED -#define DATA_H_INCLUDED - -#include -// 函数声明 -void read_data(void); // 读取 -void save_data(void); // 保存 -void print_data(void); // 打印 -void query_data(void); // 查询 -void add_data(void); // 添加 -void update_data(void); // 修改 -void delete_data(void); // 删除 -void sort_data(void); // 排序 -void make_chart(void); // 图表 - - -void read_data(void) - { - printf("读取\n"); - } -void save_data(void) - { - printf("保存\n"); - } -void print_data(void) - { - printf("打印\n"); - } -void query_data(void) - { - printf("查询\n"); - } -void add_data(void) - { - puts("添加"); - } -void update_data(void) - { - puts("修改"); - } -void delete_data(void) - { - puts("删除"); - } -void sort_data(void) - { - puts("排序"); - } -void make_chart(void) - { - puts("图表"); - } - - -#endif // DATA_H_INCLUDED \ No newline at end of file -- 2.34.1 From 35d8fad89ba261ad545c0570ddedace0d918a835 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:36:59 +0800 Subject: [PATCH 03/25] Delete 'sqlist.h' --- sqlist.h | 177 ------------------------------------------------------- 1 file changed, 177 deletions(-) delete mode 100644 sqlist.h diff --git a/sqlist.h b/sqlist.h deleted file mode 100644 index 873a930..0000000 --- a/sqlist.h +++ /dev/null @@ -1,177 +0,0 @@ -/////////////////////////////////////// -/// file: sqlist.h -/// Sequential list -/////////////////////////////////////// - -#pragma once - -#include // for std::out_of_range -using std::out_of_range; // 导入名称 -using std::length_error; - -/////////////////////////////////////// -/// 存储结构 - -/// -/// 线性表的顺序存储结构 -/// -template -struct SqList -{ - E elem[MAXSIZE]; - int length; -}; - -/////////////////////////////////////// -/// 基本操作 - -/// -/// 构造空的顺序表 L -/// -template -void InitList(SqList &L) -{ - L.length = 0; // 空表长度为 0 -} - -/// -/// 销毁顺序表 L -/// -template -void DestroyList(SqList &L) -{ - // do nothing -} - -/// -/// 将顺序表 L 置为空表 -/// -template -void ClearList(SqList &L) -{ - L.length = 0; -} - -/// -/// 若 L 为空表,则返回 true,否则返回 false -/// -template -bool ListEmpty(const SqList &L) -{ - return L.length == 0; -} - -/// -/// 返回顺序表 L 中数据元素个数 -/// -template -int ListLength(const SqList &L) -{ - return L.length; -} - -/// -/// 用 e 返回顺序表 L 中第 i 个数据元素,1<=i<=length -/// -template -bool GetElem(const SqList &L, int i, E &e) -{ - // 若 i 值不合法,则返回 false - if (i < 1 || i > L.length) - return false; - - // 取第 i 个元素 - e = L.elem[i - 1]; - - // 返回 true 表示操作成功 - return true; -} - -/// -/// 取顺序表 L 中第 i 个元素 -/// -template -const E &GetElem(const SqList &L, int i) -{ - // 若 i 值不合法,不能取元素 - if (i < 1 || i > L.length) - throw out_of_range("i out of range"); - - // 返回第 i 个元素 - return L.elem[i - 1]; -} - -/// -/// 在顺序表 L 中第 i 个位置之前插入新的数据元素 e -/// -template -void ListInsert(SqList &L, int i, E e) -{ - // 若表满,则不能插入 - if (L.length == MAXSIZE) - throw length_error("L is full"); - // 若 i 值不合法,则不能插入 - if (i < 1 || i > L.length + 1) - throw out_of_range("i out of range"); - - // 插入位置及之后的元素后移 - for (int j = L.length - 1; j >= i - 1; j--) - { - L.elem[j + 1] = L.elem[j]; - } - // 插入元素 - L.elem[i - 1] = e; - // 表长增 1 - L.length++; -} - -/// -/// 在顺序表 L 中删除第 i 个元素,用 e 返回 -/// -template -void ListDelete(SqList &L, int i, E &e) -{ - // 若 i 值不合法,则不能删除 - if (i < 1 || i > L.length) - throw out_of_range("i out of range"); - - // 取出被删除元素 - e = L.elem[i - 1]; - // 被删除元素之后的元素前移 - for (int j = i; j < L.length; j++) - { - L.elem[j - 1] = L.elem[j]; - } - // 表长减 1 - L.length--; -} - -/// -/// 返回顺序表 L 中第一个与 e 满足关系 compare 的数据元素的位序 -/// 若这样的数据元素不存在,则返回 0。 -/// -template -int LocateElem(const SqList &L, const E &e, Cmp compare) -{ - // 逐个取出元素与 e 比较 - for (int i = 0; i < L.length; i++) - { - // 若满足条件,则返回位序 - if (compare(L.elem[i], e)) - return i + 1; - } - - return 0; // 不存在 -} - -/// -/// 遍历顺序表,依次对 L 中的每个数据元素调用函数 visit -/// -template -void ListTraverse(const SqList &L, Func visit) -{ - for (int i = 0; i < L.length; i++) - { - visit(L.elem[i]); - } -} \ No newline at end of file -- 2.34.1 From 2b479bc1af392faf6a28cd942e2487a25720de67 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:37:06 +0800 Subject: [PATCH 04/25] Delete 'student.cpp' --- student.cpp | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 student.cpp diff --git a/student.cpp b/student.cpp deleted file mode 100644 index e4f8e07..0000000 --- a/student.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "student.h" -using namespace std; - -struct student{ - long int id[10]; ///十位学号 - char name[15]; ///姓名 - long int phonenumber[11]; //手机号 - struct date; //日期 -}; - -struct date{ - int year; - int month; - int day; -}; - -int main() -{ - -} -- 2.34.1 From e25a10b353265244a7778bed717424f86041f23c Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:37:12 +0800 Subject: [PATCH 05/25] Delete 'student.h' --- student.h | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 student.h diff --git a/student.h b/student.h deleted file mode 100644 index 467bd93..0000000 --- a/student.h +++ /dev/null @@ -1,6 +0,0 @@ -/////////////////// -///student.cpp -/////////////////// - - - -- 2.34.1 From 2222568065b09996fcf88ac89b8c5ca5488bdd03 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:37:17 +0800 Subject: [PATCH 06/25] Delete 'title.cpp' --- title.cpp | 117 ------------------------------------------------------ 1 file changed, 117 deletions(-) delete mode 100644 title.cpp diff --git a/title.cpp b/title.cpp deleted file mode 100644 index 6e04899..0000000 --- a/title.cpp +++ /dev/null @@ -1,117 +0,0 @@ -///程序启动 - -///1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加 -///6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出 - -///请选择: 0 -///确定要退出吗?(Y/N): no - - - - - - #include - #include - #include "data.h" - - enum { - CMD_QUIT, // 退出 - CMD_READ, // 读取 - CMD_SAVE, // 保存 - CMD_PRINT, // 打印 - CMD_QUERY, // 查询 - CMD_INSERT, // 添加 - CMD_UPDATE, // 修改 - CMD_DELETE, // 删除 - CMD_SORT, // 排序 - CMD_CHART, // 图表 - }; - - - // 函数声明 - void init(void); // 程序启动 - void quit(void); // 程序退出 - void display_menu(void); // 显示命令菜单 - int make_choice(void); // 选择命令 - int confirm(const char* msg); // 确认 - - - // 主函数 - int main(void) - { - init(); // 程序启动 - for(;;) { - display_menu(); // - int c = make_choice(); - switch(c) { - case CMD_READ: - read_data(); - break; - case CMD_SAVE: - save_data(); - break; - case CMD_PRINT: - print_data(); - break; - case CMD_QUERY: - query_data(); - break; - case CMD_INSERT: - add_data(); - break; - case CMD_UPDATE: - update_data(); - break; - case CMD_DELETE: - delete_data(); - break; - case CMD_SORT: - sort_data(); - break; - case CMD_CHART: - make_chart(); - break; - case CMD_QUIT: - if (confirm("确定要退出吗?")) quit(); // 仅在确认后退出 - break; - default: - puts("命令错误,请重新选择"); - break;} - } - quit(); // 程序退出 - return 0; - } - // 函数定义 - void init(void) - { - puts("程序启动"); - } - void quit(void) - { - puts("程序退出"); - exit(EXIT_SUCCESS); - } - void display_menu(void) - { - printf("\n%d 读取 | %d 保存 | %d 打印 | %d 查询 | %d 添加\n%d 修改 | %d 删除 | %d 排序 | %d 图表 | %d 退出\n\n", - CMD_READ,CMD_SAVE,CMD_PRINT,CMD_QUERY,CMD_INSERT,CMD_UPDATE,CMD_DELETE,CMD_SORT,CMD_CHART,CMD_QUIT); - } - int make_choice(void) - { - int c; // 用户输入 - int n = 0; // 正确读入的数据项个数 - while (n == 0) { - printf("请选择:"); - n = scanf("%d", &c); // 尝试读入整数 c - scanf("%*[^\n]"); // 跳过一行中剩余的字符 - } - return c; - } - int confirm(const char* msg) - { - char c = 'n'; // 默认选择是 no - printf("%s(Y/N): ", msg); // 提示输入 yes/no 进行确认 - scanf(" %c%*[^\n]", &c); // 读取第一个字符,忽略剩余字符 - return c == 'y' || c == 'Y'; // 返回确认结果 - } - -- 2.34.1 From e5af14f61763e2769b9e30fea959d3aef303c477 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:37:48 +0800 Subject: [PATCH 07/25] ADD file via upload --- title.cpp | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 title.cpp diff --git a/title.cpp b/title.cpp new file mode 100644 index 0000000..f501052 --- /dev/null +++ b/title.cpp @@ -0,0 +1,124 @@ + #include + #include + #include + using namespace std; + + + #include "data.h" + #include "sqlist.h" + + enum { + CMD_QUIT, // 退出程序 + CMD_QUERY, // 查书(数量) + CMD_BOOROW, // 借书 + CMD_REPAID, // 还书 + CMD_PRINT, // 打印书籍 + CMD_INSERT, // 添加书籍 + CMD_DELETE, // 删除书籍 + }; + + + // 函数声明 + void init(void); // 程序启动 + void quit(void); // 程序退出 + void display_menu(void); // 显示命令菜单 + + int make_choice(void); // 选择命令 + int confirm(const char* msg); // 确认 + + + + // 主函数 + int main(void) + { + init(); // 程序启动 + + InitList(books); + + for(;;) { + display_menu(); // + int c = make_choice(); + switch(c) { + case CMD_REPAID:// 还书 + {repaid_book(); + DoRepaidBook(); + break;} + case CMD_BOOROW:// 借书 + {boorow_book(); + DoBoorowBook(); + break;} + case CMD_PRINT:// 打印所有书籍 + {print_book(); + DoPrintBook(); + break;} + case CMD_QUERY:// 查找书籍 + {query_book(); + DoFindBook(); + break;} + case CMD_INSERT:// 添加书籍 + {add_book(); + DoAddBook(); + break;} + case CMD_DELETE:// 删除书籍 + {delete_book(); + DoDeleteBook(); + break;} + case CMD_QUIT:// 退出程序 + {if (confirm("确定要退出吗?")) quit(); // 仅在确认后退出 + break;} + default: + puts("命令错误,请重新选择"); + break;} + } + quit(); // 程序退出 + + DestroyList(books); + return 0; + } + + + + + + + void init(void) + { + puts("*******图书管理系统启动*******"); + } + void quit(void) + { + puts("系统退出"); + exit(EXIT_SUCCESS); + } + + + + void display_menu(void) + { + cout << "————————————————————————————————————————————————————————————————"< Date: Fri, 21 Apr 2023 22:38:00 +0800 Subject: [PATCH 08/25] ADD file via upload --- sqlist.h | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 sqlist.h diff --git a/sqlist.h b/sqlist.h new file mode 100644 index 0000000..873a930 --- /dev/null +++ b/sqlist.h @@ -0,0 +1,177 @@ +/////////////////////////////////////// +/// file: sqlist.h +/// Sequential list +/////////////////////////////////////// + +#pragma once + +#include // for std::out_of_range +using std::out_of_range; // 导入名称 +using std::length_error; + +/////////////////////////////////////// +/// 存储结构 + +/// +/// 线性表的顺序存储结构 +/// +template +struct SqList +{ + E elem[MAXSIZE]; + int length; +}; + +/////////////////////////////////////// +/// 基本操作 + +/// +/// 构造空的顺序表 L +/// +template +void InitList(SqList &L) +{ + L.length = 0; // 空表长度为 0 +} + +/// +/// 销毁顺序表 L +/// +template +void DestroyList(SqList &L) +{ + // do nothing +} + +/// +/// 将顺序表 L 置为空表 +/// +template +void ClearList(SqList &L) +{ + L.length = 0; +} + +/// +/// 若 L 为空表,则返回 true,否则返回 false +/// +template +bool ListEmpty(const SqList &L) +{ + return L.length == 0; +} + +/// +/// 返回顺序表 L 中数据元素个数 +/// +template +int ListLength(const SqList &L) +{ + return L.length; +} + +/// +/// 用 e 返回顺序表 L 中第 i 个数据元素,1<=i<=length +/// +template +bool GetElem(const SqList &L, int i, E &e) +{ + // 若 i 值不合法,则返回 false + if (i < 1 || i > L.length) + return false; + + // 取第 i 个元素 + e = L.elem[i - 1]; + + // 返回 true 表示操作成功 + return true; +} + +/// +/// 取顺序表 L 中第 i 个元素 +/// +template +const E &GetElem(const SqList &L, int i) +{ + // 若 i 值不合法,不能取元素 + if (i < 1 || i > L.length) + throw out_of_range("i out of range"); + + // 返回第 i 个元素 + return L.elem[i - 1]; +} + +/// +/// 在顺序表 L 中第 i 个位置之前插入新的数据元素 e +/// +template +void ListInsert(SqList &L, int i, E e) +{ + // 若表满,则不能插入 + if (L.length == MAXSIZE) + throw length_error("L is full"); + // 若 i 值不合法,则不能插入 + if (i < 1 || i > L.length + 1) + throw out_of_range("i out of range"); + + // 插入位置及之后的元素后移 + for (int j = L.length - 1; j >= i - 1; j--) + { + L.elem[j + 1] = L.elem[j]; + } + // 插入元素 + L.elem[i - 1] = e; + // 表长增 1 + L.length++; +} + +/// +/// 在顺序表 L 中删除第 i 个元素,用 e 返回 +/// +template +void ListDelete(SqList &L, int i, E &e) +{ + // 若 i 值不合法,则不能删除 + if (i < 1 || i > L.length) + throw out_of_range("i out of range"); + + // 取出被删除元素 + e = L.elem[i - 1]; + // 被删除元素之后的元素前移 + for (int j = i; j < L.length; j++) + { + L.elem[j - 1] = L.elem[j]; + } + // 表长减 1 + L.length--; +} + +/// +/// 返回顺序表 L 中第一个与 e 满足关系 compare 的数据元素的位序 +/// 若这样的数据元素不存在,则返回 0。 +/// +template +int LocateElem(const SqList &L, const E &e, Cmp compare) +{ + // 逐个取出元素与 e 比较 + for (int i = 0; i < L.length; i++) + { + // 若满足条件,则返回位序 + if (compare(L.elem[i], e)) + return i + 1; + } + + return 0; // 不存在 +} + +/// +/// 遍历顺序表,依次对 L 中的每个数据元素调用函数 visit +/// +template +void ListTraverse(const SqList &L, Func visit) +{ + for (int i = 0; i < L.length; i++) + { + visit(L.elem[i]); + } +} \ No newline at end of file -- 2.34.1 From 8f57d59dbd5b13b08389dd18c7412eac5fb3a398 Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Fri, 21 Apr 2023 22:38:12 +0800 Subject: [PATCH 09/25] ADD file via upload --- data.h | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 data.h diff --git a/data.h b/data.h new file mode 100644 index 0000000..5f19df2 --- /dev/null +++ b/data.h @@ -0,0 +1,212 @@ +#ifndef DATA_H_INCLUDED +#define DATA_H_INCLUDED + +#include +#include "sqlist.h" + + +// 函数声明 + +void print_book(void); // 打印 +void query_book(void); // 查询 +void add_book(void); // 添加 +void delete_book(void); // 删除 +void boorow_book(void); // 借书 +void repaid_book(void); // 还书 + + +void DoAddBook(); // 添加图书 +void DoFindBook(); // 查找图书 +void DoDeleteBook(); // 删除图书 +void DoPrintBook(); // 打印所有图书 +void DoRepaidBook(); // 归还图书 +void DoBoorowBook(); // 借用图书 + + + + +void repaid_book(void) // 还书 + { + printf("还书\n"); + } +void boorow_book(void) // 借书 + { + printf("借书\n"); + } +void query_book(void) // 查询 + { + printf("查书\n"); + } +void print_book(void) // 打印 + { + printf("打印\n"); + } +void add_book(void) // 添加 + { + puts("添加"); + } +void delete_book(void) // 删除 + { + puts("删除"); + } + + + + + +struct Book { + int id; // 编号 + string title; // 标题 + int number; // 数量 + }; + +SqList books; + + // 输入一本书的信息 +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++) + { + if (id == books.elem[i].id){ + return i; + } + } + return 0; // not found +} + + +// 添加图书 +void DoAddBook() +{ + Book book; + input(book); //输入图书 + books.elem[books.length + 1] = book; + books.length++; + print(book); + cout << "*******Added********" << endl; +} + +// 查找图书 +void DoFindBook() +{ + 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); + } +} + +// 删除图书 +void DoDeleteBook() +{ + int id; + cout << "Which book you wanna delelet?"<> id; + Book e; + if (find(id) == 0) + cout << "Not found" << endl; + else + { + 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; + } +} + +// 打印所有图书 +void DoPrintBook() +{ + int flag = 0; + for (int i = 0; i < books.length; i++) + { + Book e; + e = books.elem[i + 1]; + print(e); + flag++; + } + cout << "Total: "; + cout << flag; + cout << " books" << endl; +} + +// 归还图书 +void DoRepaidBook() +{ + 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(); + } +} + +// 借用图书 +void DoBoorowBook() +{ + 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 << "*********"< Date: Fri, 21 Apr 2023 22:42:53 +0800 Subject: [PATCH 10/25] =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ccfcfb2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe build active file", + "command": "C:\\mingw64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file -- 2.34.1 From 16aea1a7c5da574c99195af9043d5bcdc0e1dbfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=BD=A9=E6=9C=88?= Date: Sat, 22 Apr 2023 14:39:47 +0800 Subject: [PATCH 11/25] 1 --- .vscode/tasks.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..5f7109c --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe 生成活动文件", + "command": "D:\\mingw64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "调试器生成的任务。" + } + ], + "version": "2.0.0" +} \ No newline at end of file -- 2.34.1 From 1788b2c28e97cea2fd55232f725b14182cc40bc5 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 14:51:43 +0800 Subject: [PATCH 12/25] a --- .vscode/tasks.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index acdd131..ccfcfb2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,8 +2,6 @@ "tasks": [ { "type": "cppbuild", - "label": "C/C++: g++.exe 生成活动文件", - "command": "D:\\mingw64\\bin\\g++.exe", "label": "C/C++: g++.exe build active file", "command": "C:\\mingw64\\bin\\g++.exe", "args": [ @@ -23,7 +21,6 @@ "kind": "build", "isDefault": true }, - "detail": "调试器生成的任务。" "detail": "Task generated by Debugger." } ], -- 2.34.1 From 8c6dac2eb073be4e6691abdebfe75e8d8513c33d Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 14:53:17 +0800 Subject: [PATCH 13/25] a --- .vscode/tasks.json | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index ccfcfb2..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "tasks": [ - { - "type": "cppbuild", - "label": "C/C++: g++.exe build active file", - "command": "C:\\mingw64\\bin\\g++.exe", - "args": [ - "-fdiagnostics-color=always", - "-g", - "${file}", - "-o", - "${fileDirname}\\${fileBasenameNoExtension}.exe" - ], - "options": { - "cwd": "${fileDirname}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "detail": "Task generated by Debugger." - } - ], - "version": "2.0.0" -} \ No newline at end of file -- 2.34.1 From 54929af491c9b5cf56c3fe102d55204ee353706a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=81=AA=E9=A2=96?= <3139769854@qq.com> Date: Sat, 22 Apr 2023 15:08:31 +0800 Subject: [PATCH 14/25] 1 --- title.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/title.cpp b/title.cpp index 007ba69..bcff6b6 100644 --- a/title.cpp +++ b/title.cpp @@ -116,7 +116,7 @@ int confirm(const char* msg) { char c = 'n'; // 默认选择是 no - printf("%s(Y/N): ", msg); // 提示输入 yes/no 进行确认 + printf("%s(Y/N): ", msg); // 提示输入 yes/no 进行确认s scanf(" %c%*[^\n]", &c); // 读取第一个字符,忽略剩余字符 return c == 'y' || c == 'Y'; // 返回确认结果 } -- 2.34.1 From 2648e9258de87fb4d99595a44d095c679fda6b6f Mon Sep 17 00:00:00 2001 From: pkcs2aq9m Date: Sat, 22 Apr 2023 15:24:42 +0800 Subject: [PATCH 15/25] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index d3c45a3..0773998 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # 图书管理系统 +2022年6月9日 +杨腾泽,孙英皓,李聪颖,刘彩月 ##项目简介 +本系统是自建设计项目,实现了图书管理中的借书和还书,查询书籍,以及书籍的添加、删除和显示所有书籍等功能。项目采用 C/C++ 语言编程实现,在 VS Code 集成开发环境(IDE)中用 GCC 进行编译。系统采用模块化设计,程序结构清晰,采用菜单驱动的命令行界面,操作便捷,能够用 CSV 格式读取和保存数据,通用性强,能够用图表展示数据,直观清楚。 +下载地址: https://bdgit.educoder.net/pkcs2aq9m/text1.git +项目开发过程中采用 Kanban(看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: + 输入项目菜单 选择并执行项目菜单 -- 2.34.1 From 2072fdec33aeec0427788d2c96409fd4cd44bc5f Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 15:31:40 +0800 Subject: [PATCH 16/25] 2 --- .vscode/tasks.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ccfcfb2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++.exe build active file", + "command": "C:\\mingw64\\bin\\g++.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file -- 2.34.1 From 5022b31e89cdf4c52fa40c14fcaa6fe3fbb07f58 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 16:14:22 +0800 Subject: [PATCH 17/25] 1 --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0773998..9b79f93 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,23 @@ 2022年6月9日 杨腾泽,孙英皓,李聪颖,刘彩月 -##项目简介 +## 项目简介 + 本系统是自建设计项目,实现了图书管理中的借书和还书,查询书籍,以及书籍的添加、删除和显示所有书籍等功能。项目采用 C/C++ 语言编程实现,在 VS Code 集成开发环境(IDE)中用 GCC 进行编译。系统采用模块化设计,程序结构清晰,采用菜单驱动的命令行界面,操作便捷,能够用 CSV 格式读取和保存数据,通用性强,能够用图表展示数据,直观清楚。 下载地址: https://bdgit.educoder.net/pkcs2aq9m/text1.git +``` 项目开发过程中采用 Kanban(看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: + + + + +``` 输入项目菜单 选择并执行项目菜单 -##二级标题 +## 二级标题 学习 Markdown 格式 -- 2.34.1 From 6d60f262477fdd372ec05ec24e312802fe360170 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 16:42:53 +0800 Subject: [PATCH 18/25] 1 --- data.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/data.h b/data.h index 61b738f..3970313 100644 --- a/data.h +++ b/data.h @@ -217,6 +217,15 @@ void DoSortBook() cout << endl << "Sort Books" << endl << endl; int a=0; if (bookempty()) cout << "Book data empty"<< endl; - + else { + for (int i=1;i0;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 << "*****************************" < Date: Sat, 22 Apr 2023 16:50:34 +0800 Subject: [PATCH 19/25] 1 --- data.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data.h b/data.h index 3970313..f05e2a5 100644 --- a/data.h +++ b/data.h @@ -222,7 +222,7 @@ void DoSortBook() 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;} + Book temp=books.elem[i];books.elem[i]=books.elem[j];books.elem[j]=temp;} } } cout << "*****************************" < Date: Sat, 22 Apr 2023 17:12:08 +0800 Subject: [PATCH 20/25] 1 --- README.md | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 9b79f93..4192b2c 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,20 @@ # 图书管理系统 -2022年6月9日 +2023年4月22日 杨腾泽,孙英皓,李聪颖,刘彩月 ## 项目简介 本系统是自建设计项目,实现了图书管理中的借书和还书,查询书籍,以及书籍的添加、删除和显示所有书籍等功能。项目采用 C/C++ 语言编程实现,在 VS Code 集成开发环境(IDE)中用 GCC 进行编译。系统采用模块化设计,程序结构清晰,采用菜单驱动的命令行界面,操作便捷,能够用 CSV 格式读取和保存数据,通用性强,能够用图表展示数据,直观清楚。 下载地址: https://bdgit.educoder.net/pkcs2aq9m/text1.git -``` 项目开发过程中采用 Kanban(看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: - - - - - -``` -输入项目菜单 -选择并执行项目菜单 - - -## 二级标题 - -学习 Markdown 格式 - -列表: - --读数据 --保存数据 - -第二次修改 +|任务 |设计 |开发 |测试 |文档 | +|------ |-------|-------|--------|-------| +|C0-C2 | | | | | +|C3-C5 | | | | | +|C6-C9 | | | | | + +每个成员的工作量(百分比): +|杨腾泽|孙英皓|李聪颖|刘彩月| +|-----|----|-----|-----| +| 0 | 0 | 0 | 0 | -- 2.34.1 From ea531c9a500934a58c3b9b25d3f5be2202ffbea7 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 17:20:24 +0800 Subject: [PATCH 21/25] 1 --- 图书管理系统.txt | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/图书管理系统.txt b/图书管理系统.txt index 758c1a4..e69de29 100644 --- a/图书管理系统.txt +++ b/图书管理系统.txt @@ -1,33 +0,0 @@ -title - -///程序启动 - -///1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加 -///6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出 - -///请选择: 0 -///确定要退出吗?(Y/N): no - - - -book - -for example -:: -Commands: (1) Add, (2) Find, (3) Delete, (4) Print, (0) Exit -Enter your choice (0-4): 1 -ID : 101 -TITLE : The C Programming Language -AUTHOR: K&R -PRICE : 35.98 -Book { id: 101, title:"The C Programming Language", author: "K&R", price: 35.98 } -Added - - - -student - -id -name -class -date \ No newline at end of file -- 2.34.1 From f86c7cf25a1ee785c60c1750507ac86f853f3507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=BD=A9=E6=9C=88?= Date: Sat, 22 Apr 2023 17:20:51 +0800 Subject: [PATCH 22/25] xiao --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4192b2c..4fdcb84 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,20 @@ 项目开发过程中采用 Kanban(看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: |任务 |设计 |开发 |测试 |文档 | |------ |-------|-------|--------|-------| -|C0-C2 | | | | | -|C3-C5 | | | | | -|C6-C9 | | | | | +|Ca-Cb | | | | | +|C0-C2 | | | | | +|C3-C5 | | | | | +|C6-C8 | | | | | 每个成员的工作量(百分比): |杨腾泽|孙英皓|李聪颖|刘彩月| |-----|----|-----|-----| | 0 | 0 | 0 | 0 | +## 关于图书管理系统 +设计一个图书管理系统,要求采用命令行菜单界面进行交互,具备查书、借书、还书、打印书籍 、添加、删除等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。 +系统的功能性需求: + 数据的查书、借书、还书、打印书籍、添加、删除展示。 +系统的非功能性需求: + 菜单驱动的命令行交互界面。 + -- 2.34.1 From f15c0ca6197c678d4dbab10dc949cd8175cdc5a9 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 17:26:09 +0800 Subject: [PATCH 23/25] 1 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4fdcb84..e2ce7d7 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ 项目开发过程中采用 Kanban(看板)进行任务管理和分工协作,并使用 Git 对程序代码和文档进行版本管理。任务分工情况如下: |任务 |设计 |开发 |测试 |文档 | |------ |-------|-------|--------|-------| -|Ca-Cb | | | | | -|C0-C2 | | | | | -|C3-C5 | | | | | -|C6-C8 | | | | | +|Ca-Cb | | | | 杨腾泽 | +|C0-C2 | | | | 孙英皓 | +|C3-C5 | | | | 刘彩月 | +|C6-C8 | | | | 李聪颖 | 每个成员的工作量(百分比): |杨腾泽|孙英皓|李聪颖|刘彩月| -- 2.34.1 From 4437f35748a4137426d3dc093bfb26a25b434f79 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 20:07:36 +0800 Subject: [PATCH 24/25] change from yangtengze --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e2ce7d7..8ffe320 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,41 @@ ## 关于图书管理系统 设计一个图书管理系统,要求采用命令行菜单界面进行交互,具备查书、借书、还书、打印书籍 、添加、删除等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。 +``` 系统的功能性需求: - 数据的查书、借书、还书、打印书籍、添加、删除展示。 +- 数据的查书、借书、还书、打印书籍、添加、删除展示。 系统的非功能性需求: - 菜单驱动的命令行交互界面。 - +- 菜单驱动的命令行交互界面。 +``` +## 需求分析 +分析系统的功能需求和界面需求,编制用户手册如下。 +### Ca: 启动程序 +命令行中执行命令,系统启动,显示提示信息,然后显示功能菜单,等待用户输入命令。 +``` +*******图书管理系统启动******* +———————————————————————————————————————————— +| 1 查书 | 2 借书 | 3 还书 | 4 打印 | 5 添加 | +| 6 删除 | 7 修改 | 8 排序 | 0 退出 | +———————————————————————————————————————————— +请选择: +``` +### Cb: 显示命令菜单 +``` +———————————————————————————————————————————— +| 1 查书 | 2 借书 | 3 还书 | 4 打印 | 5 添加 | +| 6 删除 | 7 修改 | 8 排序 | 0 退出 | +———————————————————————————————————————————— +请选择: +``` +#### C0: 退出程序 +选择菜单命令:0 再输入:y,确认,则退出程序。若输入:n,则继续程序。 +``` +请选择:0 +确定要退出吗?(Y/N): y +程序退出 +``` +``` +请选择:0 +确定要退出吗?(Y/N): n +程序退出 +``` -- 2.34.1 From 9ee004c83521e82290fd9ae57942d605c9b76ca6 Mon Sep 17 00:00:00 2001 From: yangtengze Date: Sat, 22 Apr 2023 20:09:31 +0800 Subject: [PATCH 25/25] change from yangtengze --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8ffe320..924de88 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,13 @@ ## 关于图书管理系统 设计一个图书管理系统,要求采用命令行菜单界面进行交互,具备查书、借书、还书、打印书籍 、添加、删除等基本功能,能够以表格和图表形式展示数据,采用 CSV 格式保存数据。 -``` + 系统的功能性需求: - 数据的查书、借书、还书、打印书籍、添加、删除展示。 + 系统的非功能性需求: - 菜单驱动的命令行交互界面。 -``` + ## 需求分析 分析系统的功能需求和界面需求,编制用户手册如下。 ### Ca: 启动程序 -- 2.34.1