文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、需求分析
- 二、代码实现
- 总结
前言
问题描述
要求以图书馆管理业务为背景,设计并实现一个“图书馆管理信息系统”软件,使用该系统可以方便查询图书的信息、借阅者的个人等信息,实现借书与还书等功能。
一、需求分析
1.介绍
本系统的用户分为学生和管理员两类,其中学生为普通用户。普通用户只能对自己的信息进行查询以及借书、还书的权限,管理员用户则拥有系统的所有功能权限。
2.模块划分
(1)登录模块 登录模块用于用户登录,完成基本的验证。根据所填信息进行判断,提示“登录成功” 、 “账号或密码错误”等信息。 (2)学生模块 学生登录之后,可以浏览图书,借书,还书,以及查看个人借书清单等功能。 (3)管理员模块 管理员登录之后,可以对系统进行管理,原则上拥有所有用户的全部权限。主要功能有对学生的增删查, 对图书的增删查,以及查看全部借书清单等功能。
3.系统设计
二、代码实现 1.完整代码
代码如下(示例):
#include#include #include using namespace std; //学生结构体数组最大容量 #define student_max 100 //图书结构体数组最大容量 #define book_max 200 //借书记录结构体数组最大容量 #define record_max 200 //学生结构体 struct Student { string id; //学号 string name; //姓名 string password; //密码 }; //学生结构体数组 struct StudentArray { StudentArray() : count(0) { } Student data[student_max]; //学生结构体数组 int count; //学生数量 }; int find_StudentArray(StudentArray& sa, const string id); //查找学生 bool add_StudentArray(StudentArray& sa, const Student& student); //添加学生 bool del_StudentArray(StudentArray& sa, const string id); //删除学生 //查找学生 int find_StudentArray(StudentArray& sa, const string id) { for (int index = 0; index < sa.count; index++) { if (sa.data[index].id == id) { return index; } } return -1; } //添加学生 bool add_StudentArray(StudentArray& sa, const Student& student) { int position = find_StudentArray(sa, student.id); if (position == -1) { sa.data[sa.count] = student; sa.count++; return true; } cout << "该学生已存在,无法添加!" << endl; return false; } //删除学生 bool del_StudentArray(StudentArray& sa, const string id) { int position = find_StudentArray(sa, id); if (position != -1) { for (int index = position; index < sa.count - 1; index++) { sa.data[index] = sa.data[index + 1]; } sa.count--; return true; } cout << "未找到该学生,删除失败!" << endl; return false; } //图书结构体 struct Book { Book() :borrow(false) { } string id; //编号 string name; //书名 bool borrow; //借出 | 可借 }; //图书结构体数组 struct BookArray { BookArray() : count(0) { } Book data[book_max]; //图书结构体数组 int count; //图书数量 }; int find_BookArray(BookArray& ba, const string id); //查找图书 bool add_BookArray(BookArray& ba, const Book& book); //添加图书 bool del_BookArray(BookArray& ba, const string id); //删除图书 //查找图书 int find_BookArray(BookArray& ba, const string id) { for (int index = 0; index < ba.count; index++) { if (ba.data[index].id == id) { return index; } } return -1; } //添加图书 bool add_BookArray(BookArray& ba, const Book& book) { int position = find_BookArray(ba, book.id); if (position == -1) { ba.data[ba.count] = book; ba.count++; return true; } cout << "该图书已存在,添加失败!" << endl; return false; } //删除图书 bool del_BookArray(BookArray& ba, const string id) { int position = find_BookArray(ba, id); if (position != -1) { for (int index = position; index < ba.count - 1; index++) { ba.data[index] = ba.data[index + 1]; } ba.count--; return true; } cout << "未找到该图书,删除失败!" << endl; return false; } //借书记录结构体 struct Record { string student_id; //学生学号 string student_name; //学生姓名 string book_id; //图书编号 string book_name; //图书书名 }; //借书记录结构体数组 struct RecordArray { RecordArray() : count(0) { } Record data[record_max]; //借书记录结构体数组 int count; //借书记录数量 }; int find_RecordArray(RecordArray& ra, const string book_id); //通过图书编号查找借书记录 bool add_RecordArray(RecordArray& ra, const Record& record); //添加借书记录 bool del_RecordArray(RecordArray& ra, const string book_id); //删除借书记录 //通过图书编号查找借书记录 int find_RecordArray(RecordArray& ra, const string book_id) { for (int index = 0; index < ra.count; ++index) { if (ra.data[index].book_id == book_id) { return index; } } return -1; } //添加借书记录 bool add_RecordArray(RecordArray& ra, const Record& record) { int position = find_RecordArray(ra, record.book_id); if (position == -1) { ra.data[ra.count++] = record; return true; } cout << "该借书记录已存在,添加失败!" << endl; return false; } //删除借书记录 bool del_RecordArray(RecordArray& ra, const string book_id) { int position = find_RecordArray(ra, book_id); if (position != -1) { for (int index = position; index < ra.count - 1; index++) { ra.data[index] = ra.data[index + 1]; } ra.count--; cout << "删除成功!" << endl; return true; } cout << "未找到该借书记录,删除失败!" << endl; return false; } //管理员登录 void loginAdmin() { do { cout << "# 管理员登录 #" << endl; string id; string password; cout << "账号:"; cin >> id; cout << "密码:"; cin >> password; if (id == "admin" && password == "123456") { break; } cout << "账号或者密码错误,请重新输入!" << endl; } while (true); } //学生登录 Student& loginStudent(StudentArray& sa) { do { cout << "# 学生登录 #" << endl; string id; string password; cout << "账号:"; cin >> id; cout << "密码:"; cin >> password; int position = find_StudentArray(sa, id); if (position != -1) { if (sa.data[position].password == password) { return sa.data[position]; } } cout << "账号或者密码错误,请重新输入!" << endl; } while (true); } void printBook(BookArray& ba); //浏览图书 void borrowBook(Student& my, BookArray& ba, RecordArray& ra); //借书 void returnBook(Student& my, BookArray& ba, RecordArray& ra); //还书 void printRecord(Student& my, RecordArray& ra); //学生借书清单 //学生操作菜单 void menuStudent(StudentArray& sa, BookArray& ba, RecordArray& ra) { Student& my = loginStudent(sa); int option = 0; do { cout << "# 图书管理系统 - 学生 #" << endl; cout << "1 > 浏览图书" << endl; cout << "2 > 借书 #" << endl; cout << "3 > 还书 #" << endl; cout << "4 > 借书清单 #" << endl; cout << "0 > 注销 #" << endl; cin >> option; switch (option) { case 1: printBook(ba); break; case 2: borrowBook(my, ba, ra); break; case 3: returnBook(my, ba, ra); break; case 4: printRecord(my, ra); break; } } while (option != 0); } //浏览图书 void printBook(BookArray& ba) { cout << "# 浏览图书 #" << endl; for (int index = 0; index < ba.count; index++) { Book& book = ba.data[index]; cout << book.id << " " << book.name << " "; if (book.borrow) { cout << "借出"; } else { cout << "可借"; } cout << endl; } } //借书 void borrowBook(Student& my, BookArray& ba, RecordArray& ra) { cout << "# 借书 #" << endl; cout << "输入图书编号:"; string book_id; cin >> book_id; int position = find_BookArray(ba, book_id); if (position != -1) { Book& book = ba.data[position]; if (!book.borrow) { book.borrow = true; Record record; record.student_id = my.id; record.student_name = my.name; record.book_id = book.id; record.book_name = book.name; add_RecordArray(ra, record); cout << "恭喜,借书成功!" << endl; } else { cout << "抱歉,该书已经出借!" << endl; } } else { cout << "抱歉,未找到图书信息!" << endl; } } //还书 void returnBook(Student& my, BookArray& ba, RecordArray& ra) { cout << "# 还书 #" << endl; cout << "输入图书编号:"; string book_id; cin >> book_id; int position = find_BookArray(ba, book_id); if (position != -1) { Book& book = ba.data[position]; if (book.borrow) { book.borrow = false; del_RecordArray(ra, book_id); cout << "恭喜,还书成功!" << endl; } else { cout << "抱歉,该书尚未出借!" << endl; } } else { cout << "抱歉,未找到图书信息!" << endl; } } //学生借书清单 void printRecord(Student& my, RecordArray& ra) { cout << "# 借书清单 #" << endl; for (int index = 0; index < ra.count; ++index) { Record& record = ra.data[index]; if (record.student_id == my.id) { cout << record.book_id << " " << record.book_name << endl; } } } void printStudent(StudentArray& sa); //浏览学生 void addBook(BookArray& ba); //添加图书 void delBook(BookArray& ba); //删除图书 void addStudent(StudentArray& sa); //添加学生 void delStudent(StudentArray& sa); //删除学生 void printRecord(RecordArray& ra); //借书清单(全部) //管理员操作菜单 void menuAdmin(StudentArray& sa, BookArray& ba, RecordArray& ra) { loginAdmin(); int option = 0; do { cout << "# 图书管理系统 - 管理员 #" << endl; cout << "1 > 浏览图书 #" << endl; cout << "2 > 添加图书 #" << endl; cout << "3 > 删除图书 #" << endl; cout << "4 > 浏览学生 #" << endl; cout << "5 > 添加学生 #" << endl; cout << "6 > 删除学生 #" << endl; cout << "7 > 借书清单(全部) #" << endl; cout << "0 > 注销 #" << endl; cin >> option; switch (option) { case 1: printBook(ba); break; case 2: addBook(ba); break; case 3: delBook(ba); break; case 4: printStudent(sa); break; case 5: addStudent(sa); break; case 6: delStudent(sa); break; case 7: printRecord(ra); break; } } while (option != 0); } //浏览学生 void printStudent(StudentArray& sa) { cout << "# 浏览学生 #" << endl; for (int index = 0; index < sa.count; ++index) { Student& student = sa.data[index]; cout << student.id << " " << student.name << " "; cout << student.password << endl; } } //添加图书 void addBook(BookArray& ba) { cout << "# 添加图书 #" << endl; Book book; book.borrow = false; cout << "输入图书编号:"; cin >> book.id; cout << "输入图书名称:"; cin >> book.name; if (add_BookArray(ba, book)) { cout << "恭喜,添加成功!" << endl; } else { cout << "抱歉,添加失败!" << endl; } } //删除图书 void delBook(BookArray& ba) { cout << "# 删除图书 #" << endl; string book_id; cout << "输入图书编号:"; cin >> book_id; if (del_BookArray(ba, book_id)) { cout << "恭喜,删除成功!" << endl; } else { cout << "抱歉,删除失败!" << endl; } } //添加学生 void addStudent(StudentArray& sa) { cout << "# 添加学生 #" << endl; Student student; cout << "输入学生编号:"; cin >> student.id; cout << "输入学生姓名:"; cin >> student.name; cout << "输入学生密码:"; cin >> student.password; if (add_StudentArray(sa, student)) { cout << "恭喜,添加成功!" << endl; } else { cout << "抱歉,添加失败!" << endl; } } //删除学生 void delStudent(StudentArray& sa) { cout << "# 删除学生 #" << endl; string student_id; cout << "输入学生编号:"; cin >> student_id; if (del_StudentArray(sa, student_id)) { cout << "恭喜,删除成功!" << endl; } else { cout << "抱歉,删除失败!" << endl; } } //借书清单(全部) void printRecord(RecordArray& ra) { cout << "# 借书清单(全部) #" << endl; for (int index = 0; index < ra.count; ++index) { Record& record = ra.data[index]; cout << record.book_id << " " << record.book_name << " "; cout << record.student_id << " " << record.student_name << endl; } } //数据读入 //学生数据读入 void read_student(StudentArray& sa) { Student s; ifstream stfile; stfile.open("student.txt"); if (!stfile.is_open()) { cout << "文件打开失败!" << endl; } while (stfile >> s.id >> s.name >> s.password) { add_StudentArray(sa, s); } stfile.close(); } //图书数据读入 void read_book(BookArray& ba) { Book b; ifstream bkfile; bkfile.open("book.txt"); if (!bkfile.is_open()) { cout << "文件打开失败!" << endl; } while (bkfile >> b.id >> b.name) { add_BookArray(ba, b); } bkfile.close(); } //数据读出 //学生数据读出 void write_student(StudentArray& sa) { Student s; ofstream stfile; stfile.open("student.txt"); if (!stfile.is_open()) { cout << "文件打开失败!" << endl; } for (int i = 0; i < sa.count; i++) { stfile << sa.data[i].id << " " << sa.data[i].name << " " << sa.data[i].password << endl; } stfile.close(); } //图书数据读出 void write_book(BookArray& ba) { Book b; ofstream bkfile; bkfile.open("book.txt"); if (!bkfile.is_open()) { cout << "文件打开失败!" << endl; } for (int i = 0; i < ba.count; i++) { bkfile << ba.data[i].id << " " << ba.data[i].name << endl; } bkfile.close(); } //主菜单 void menuMain() { StudentArray sa; BookArray ba; RecordArray ra; read_student(sa); read_book(ba); int option = 0; do { cout << "# 图书管理系统 #" << endl; cout << "1 > 学生登录" << endl; cout << "2 > 管理员登录 #" << endl; cout << "0 > 退出 #" << endl; cin >> option; switch (option) { case 1: menuStudent(sa, ba, ra); break; case 2: menuAdmin(sa, ba, ra); break; } } while (option != 0); write_student(sa); write_book(ba); } int main() { menuMain(); return 0; }
总结
以上就是今天要讲的内容,本文仅仅简单介绍了图书管理系统的实现,希望能给大家带来帮助。



