#pragma once #define detail_short 20 #define value_size 5 class book_recycle { public: book_recycle() {} book_recycle(char* bname, char* bisbn, char* bauthor, char* bnum, char* bdamage) { strncpy_s(book_name,bname,sizeof(bname)); strncpy_s(book_isbn,bisbn, sizeof(bisbn)); strncpy_s(book_author,bauthor,sizeof(bauthor)); strncpy_s(book_sum, bnum, sizeof(bnum)); strncpy_s(book_damage, bdamage, sizeof(bdamage)); } ~book_recycle() {} const char *get_book_name() const { return book_name; } const char *get_book_isbn() const { return book_isbn; } const char *get_book_author() const { return book_author; } const char *get_book_sum() const { return book_sum; } const char *get_book_available() const { return book_available; } const char *get_book_damage() const { return book_damage; } const char *get_book_scrap_num() const { return book_scrap_num; } void set_book_name(char *bname) { strncpy_s(book_name, bname, detail_short); } void set_book_isbn(char* bisbn) { strncpy_s(book_isbn, bisbn, detail_short); } void set_book_author(char* bauthor) { strncpy_s(book_author, bauthor, detail_short); } void set_book_sum(char *bnum) { strncpy_s(book_sum, bnum, value_size);} void set_book_available(char *bavailable) { strncpy_s(book_available, bavailable, value_size); } void set_book_damage(char *bdamage) { strncpy_s(book_damage, bdamage, value_size); } void set_book_scrap_num(char *bscrap_num) { strncpy_s(book_scrap_num, bscrap_num, value_size); } void book_enter(); void deldata(int &num); private: char book_name[detail_short]; char book_isbn[detail_short]; char book_author[detail_short]; char book_sum[value_size]; char book_available[value_size]; char book_damage[value_size]; char book_scrap_num[value_size]; }; class entry_exit_book { public: entry_exit_book() {} entry_exit_book(char* cname, char* bname, char* bisbn, char* entnum) { strncpy_s(class_name, cname, detail_short); strncpy_s(book_name, bname, detail_short); strncpy_s(book_isbn, bisbn, detail_short); strncpy_s(enter_num, entnum, value_size); } entry_exit_book(char* cname, char* bname, char* bisbn, char* exnum, char* bdamage, char* bscrap_num) { strncpy_s(class_name, cname, detail_short); strncpy_s(book_name, bname, detail_short); strncpy_s(book_isbn, bisbn, detail_short); strncpy_s(exit_num, exnum, value_size); strncpy_s(book_damage, bdamage, value_size); strncpy_s(book_scrap_num, bscrap_num, value_size); } ~entry_exit_book() {} const char *get_class_name() const { return class_name; } const char *get_book_name() const { return book_name; } const char *get_book_isbn() const { return book_isbn; } const char *get_enter_num() const { return enter_num; } const char *get_exit_num() const { return exit_num; } const char *get_book_damage() const { return book_damage; } const char *get_book_scrap_num() const { return book_scrap_num; } void set_class_name(char* cname) { strncpy_s(class_name, cname, detail_short); } void set_book_name(char *bname) { strncpy_s(book_name, bname, detail_short); } void set_book_isbn(char* bisbn) { strncpy_s(book_isbn, bisbn, detail_short); } void set_enter_num(char *entnum) { strncpy_s(enter_num, entnum, value_size); } void set_exit_num(char *exitnum) { strncpy_s(exit_num, exitnum, value_size); } void set_book_damage(char *bdamage) { strncpy_s(book_damage, bdamage, value_size); } void set_book_scrap_num(char *bscrap_num) { strncpy_s(book_scrap_num, bscrap_num, value_size); } void writr_enter_data(); void writr_exit_data(); private: char class_name[detail_short]; char book_name[detail_short]; char book_isbn[detail_short]; char enter_num[value_size]; char exit_num[value_size]; char book_damage[value_size]; char book_scrap_num[value_size]; };
#include<fstream> #include<iostream> #include<cstring> #include<iomanip> #include "book.h" using namespace std; void view_all_book(int); void book_recycle::book_enter() { ofstream os; os.open("book.bat", ios::binary | ios::out | ios::app); try { os.write(get_book_name(), detail_short); os.write(get_book_isbn(), detail_short); os.write(get_book_author(), detail_short); os.write(get_book_sum(), value_size); os.write(get_book_available(), value_size); os.write(get_book_damage(), value_size); os.write(get_book_scrap_num(), value_size); } catch (...) { throw "Open file defeated"; os.close(); } os.close(); } void book_recycle::deldata(int &num) { long response; int num_after = 0; fstream book_is; fstream tempfile; ofstream book_os; char ch_temp[detail_short * 3 + value_size * 4]; book_is.open("book.bat", ios::binary | ios::in | ios::out); tempfile.open("temp.bat", ios::binary | ios::in | ios::out | ios::trunc); book_is.seekg(0, ios::end); response = book_is.tellg(); num_after = response / (detail_short * 3 + value_size * 4); if (num<0 && num>num_after) { throw "Error"; } else { book_is.seekg((num)*(detail_short * 3 + value_size * 4), ios::beg); for (int a = 0; a < (num_after - num); a++) { memset(ch_temp, 0, (detail_short * 3 + value_size * 4)); book_is.read(ch_temp, (detail_short * 3 + value_size * 4)); tempfile.write(ch_temp, (detail_short * 3 + value_size * 4)); } book_is.close(); tempfile.seekg(0, ios::beg); book_os.open("book.bat"); book_os.seekp((num - 1)*(detail_short * 3 + value_size * 4), ios::beg); for (int i = 0; i < (num_after - num); i++) { memset(ch_temp, 0, (detail_short * 3 + value_size * 4)); tempfile.read(ch_temp, (detail_short * 3 + value_size * 4)); book_os.write(ch_temp, (detail_short * 3 + value_size * 4)); } } tempfile.close(); book_os.close(); remove("temp.txt"); } void entry_exit_book::writr_enter_data() { ofstream os; os.open("enterdata.bat", ios::binary | ios::out | ios::app); try { os.write(get_class_name(), detail_short); os.write(get_book_name(), detail_short); os.write(get_book_isbn(), detail_short); os.write(get_enter_num(), value_size); } catch (...) { throw "Open file defeated"; os.close(); } os.close();; } void entry_exit_book::writr_exit_data() { ofstream os; os.open("exitdata.bat", ios::binary | ios::out | ios::app); try { os.write(get_class_name(), detail_short); os.write(get_book_name(), detail_short); os.write(get_book_isbn(), detail_short); os.write(get_exit_num(), value_size); os.write(get_book_damage(), value_size); os.write(get_book_scrap_num(), value_size); } catch (...) { throw "Open file defeated"; os.close(); } os.close();; } long getfilelen(ifstream & ifs) { long tmp, res; ifs.seekg(0, ios::beg); tmp = ifs.tellg(); ifs.seekg(0, ios::end); res = ifs.tellg(); ifs.seekg(tmp, ios::beg); return res; } void userdeal(int num) { char buf; cout << " n显示下一页 r返回" << endl; cin >> buf; if (buf == 'r' || buf == 'm') return; if (buf == 'n') view_all_book(num); } void view_enter_record(void) { long filelen; int record_num; bool rt_book = false; char classname[detail_short]; char bname[detail_short]; char bisbn[detail_short]; char num[value_size]; ifstream file; file.open("enterdata.bat", ios::binary | ios::in | ios::app); filelen = getfilelen(file); record_num = filelen / (detail_short * 3 + value_size ); if (record_num >= 1) rt_book = true; system("cls"); cout << setw(5) << "序号"; cout << setw(25) << "班级" << setw(20) << "书名"; cout << setw(22) << "ISBN" << setw(10) << "数量"; cout << endl; try { if (!file.fail()) { for (auto i = 1; i <= record_num; i++) { memset(classname, '\0', detail_short); memset(bname, '\0', detail_short); memset(bisbn, '\0', detail_short); memset(num, '\0', value_size); file.read(classname, detail_short); file.read(bname, detail_short); file.read(bisbn, detail_short); file.read(num, value_size); if (rt_book) cout << setw(3) << i; cout << setw(27) << classname; cout << setw(22) << bname; cout << setw(20) << bisbn; cout << setw(10) << num; cout << endl; if (file.tellg() < 0) rt_book = false; else rt_book = true; } } } catch (...) { throw "file error "; file.close(); } file.close(); cin.ignore(INT_MAX, '\n'); cout << "(任意键返回)" << endl; getchar(); } void view_exit_record(void) { long filelen; int record_num; bool rt_book = false; char classname[detail_short]; char bname[detail_short]; char bisbn[detail_short]; char bnum[value_size]; char bdamage[value_size]; char bscrap_num[value_size]; ifstream file; file.open("exitdata.bat", ios::binary | ios::in | ios::app); filelen = getfilelen(file); record_num = filelen / (detail_short * 3 + value_size * 3); if (record_num >= 1) rt_book = true; system("cls"); cout << setw(5) << "序号"; cout << setw(25) << "班级" << setw(20) << "书名"; cout << setw(22) << "ISBN" << setw(10) << "归还数量"; cout << setw(12) << "破损数量" << setw(10) << "报废数量"; cout << endl; try { if (!file.fail()) { for (auto i = 1; i <= record_num; i++) { memset(classname, '\0', detail_short); memset(bname, '\0', detail_short); memset(bisbn, '\0', detail_short); memset(bnum, '\0', value_size); memset(bdamage, '\0', value_size); memset(bscrap_num, '\0', value_size); file.read(classname, detail_short); file.read(bname, detail_short); file.read(bisbn, detail_short); file.read(bnum, value_size); file.read(bdamage, value_size); file.read(bscrap_num, value_size); if (rt_book) cout << setw(3) << i; cout << setw(27) << classname; cout << setw(22) << bname; cout << setw(20) << bisbn; cout << setw(10) << bnum; cout << setw(10) << bdamage; cout << setw(10) << bscrap_num; cout << endl; if (file.tellg() < 0) rt_book = false; else rt_book = true; } } } catch (...) { throw "file error "; file.close(); } file.close(); cin.ignore(INT_MAX, '\n'); cout << "(任意键返回)" << endl; getchar(); }
#include <iostream> #include <fstream> #include <cstring> #include <iomanip> #include <climits> #include "book.h" using namespace std; void userdeal(int); long getfilelen(ifstream & ifs); void view_enter_record(); void view_exit_record(); void book_mean() { cout << " " << endl; cout << " 欢迎使用教材管理系统 " << endl; cout << " " << endl; cout << " 1.借出教材 2.归还教材" << endl; cout << " 3.录入教材 4.浏览全部" << endl; cout << " 5.删除教材 6.出入记录" << endl; cout << " 7.破损教材 8.报废教材" << endl; cout << " " << endl; } void exit_add_data() { entry_exit_book add; char cname[detail_short] = { '\0' }; char bname[detail_short] = { '\0' }; char bisbn[detail_short] = { '\0' }; char num[value_size] = { '\0' }; cout << "请输入班级:" << endl; cin >> cname; add.set_class_name(cname); cout << "请输入书名:" << endl; cin >> bname; add.set_book_name(bname); cout << "请输入ISBN:" << endl; cin >> bisbn; add.set_book_isbn(bisbn); cout << "请输入数量:" << endl; cin >> num; add.set_enter_num(num); add.writr_enter_data(); cin.ignore(INT_MAX, '\n'); cout << "保存成功!!(任意键返回)" << endl; getchar(); } void enter_add_data() { entry_exit_book add; char cname[detail_short] = { '\0' }; char bname[detail_short] = { '\0' }; char bisbn[detail_short] = { '\0' }; char num[value_size] = { '\0' }; char bdamage[value_size] = { '\0' }; char bscrap_num[value_size] = { '\0' }; cout << "请输入班级:" << endl; cin >> cname; add.set_class_name(cname); cout << "请输入书名:" << endl; cin >> bname; add.set_book_name(bname); cout << "请输入ISBN:" << endl; cin >> bisbn; add.set_book_isbn(bisbn); cout << "请输入归还数量:" << endl; cin >> num; add.set_exit_num(num); cout << "请输入教材破损数量:" << endl; cin >> bdamage; add.set_book_damage(bdamage); cout << "请输入教材报废数量:" << endl; cin >> bscrap_num; add.set_book_scrap_num(bscrap_num); add.writr_exit_data(); cin.ignore(INT_MAX, '\n'); cout << "保存成功!!(任意键返回)" << endl; getchar(); } void add_book(void) { book_recycle add; char bname[detail_short] = { '\0' }; char bisbn[detail_short] = { '\0' }; char bauthor[detail_short] = { '\0' }; char bsum[value_size] = { '\0' }; char bavailable[value_size] = { '\0' }; char bdamage[value_size] = { '\0' }; char bscrap_num[value_size] = { '\0' }; cout << "请输入书名:" << endl; cin >> bname; add.set_book_name(bname); cout << "请输入ISBN:" << endl; cin >> bisbn; add.set_book_isbn(bisbn); cout << "请输入作者:" << endl; cin >> bauthor; add.set_book_author(bauthor); cout << "请输入教材总数:" << endl; cin >> bsum; add.set_book_sum(bsum); cout << "请输入教材可用数量:" << endl; cin >> bavailable; add.set_book_available(bavailable); cout << "请输入教材破损数量:" << endl; cin >> bdamage; add.set_book_damage(bdamage); cout << "请输入教材报废数量:" << endl; cin >> bscrap_num; add.set_book_scrap_num(bscrap_num); add.book_enter(); cin.ignore(INT_MAX, '\n'); cout << "保存成功!!(任意键返回)" << endl; getchar(); } void view_all_book(int num = 1) { int page; int page_now = num; long filelen; int book_num; int page_num = 20; bool rt_book = false; char bname[detail_short]; char bisbn[detail_short]; char bauthor[detail_short]; char bsum[value_size]; char bavailable[value_size]; char bdamage[value_size]; char bscrap_num[value_size]; ifstream file; file.open("book.bat", ios::binary | ios::in | ios::app); filelen = getfilelen(file); book_num = filelen / (detail_short * 3 + value_size * 4); if (book_num >= 1) rt_book = true; page = book_num / page_num + 1; system("cls"); cout << setw(5) << "序号"; cout << setw(25) << "书名" << setw(20) << "ISBN"; cout << setw(22) << "作者" << setw(10) << "总数量"; cout << setw(10) << "可用数" << setw(10) << "破损数" << setw(10) << "报废数"; cout << endl; try { file.seekg((page_now - 1)*page_num*(detail_short * 3 + value_size * 4), ios::beg); if (!file.fail()) { for (auto i = 1; i <= page_num && i <= book_num ;i++) { memset(bname, '\0', detail_short); memset(bisbn, '\0', detail_short); memset(bauthor, '\0', detail_short); memset(bsum, '\0', value_size); memset(bavailable, '\0', value_size); memset(bdamage, '\0', value_size); memset(bscrap_num, '\0', value_size); if (rt_book) cout << setw(3) << ((page_now - 1) * 20 + i); file.read(bname, detail_short); file.read(bisbn, detail_short); file.read(bauthor, detail_short); file.read(bsum, value_size); file.read(bavailable, value_size); file.read(bdamage, value_size); file.read(bscrap_num, value_size); cout << setw(27) << bname; cout << setw(20) << bisbn; cout << setw(22) << bauthor; cout << setw(10) << bsum; cout << setw(10) << bavailable; cout << setw(10) << bdamage; cout << setw(10) << bscrap_num; cout << endl; if (file.tellg()<0) rt_book = false; else rt_book = true; } cout << '\n' << setw(100) << "第" << page_now << "页" << " "; cout << "共" << page << "页" << endl; } } catch (...) { throw "file error "; file.close(); } if (page_now<page) { page_now = page_now + 1; userdeal(page_now); } else if (page_now = page) { cout << "最后一页了!" << endl; userdeal(page_now); } else { userdeal(page_now); } file.close(); } void del_book(void) { int num; view_all_book(); cout << "请输入教材的序号:" << endl; cin >> num; book_recycle temp; temp.deldata(num); cin.ignore(INT_MAX, '\n'); cout << "删除完成(任意键返回)" << endl; getchar(); } void view_recorder() { int num; cout << "\n 1 借书记录 2 归还记录\n"; cout << "请输入序号:" << endl; cin >> num; if (num == 1) view_enter_record(); if (num == 2) view_exit_record(); } void view_damage_book(void) { long filelen; int book_num; bool rt_book = false; char bname[detail_short]; char bisbn[detail_short]; char bauthor[detail_short]; char bsum[value_size]; char bavailable[value_size]; char bdamage[value_size]; char bscrap_num[value_size]; ifstream file; file.open("book.bat", ios::binary | ios::in | ios::app); filelen = getfilelen(file); book_num = filelen / (detail_short * 3 + value_size * 4); if (book_num >= 1) rt_book = true; system("cls"); cout << setw(5) << "序号"; cout << setw(25) << "书名" << setw(20) << "ISBN"; cout << setw(22) << "作者" << setw(10) << "总数量"; cout << setw(10) << "破损数" << endl; try { if (!file.fail()) { for (auto i = 1; i <= book_num; i++) { memset(bname, '\0', detail_short); memset(bisbn, '\0', detail_short); memset(bauthor, '\0', detail_short); memset(bsum, '\0', value_size); memset(bavailable, '\0', value_size); memset(bdamage, '\0', value_size); memset(bscrap_num, '\0', value_size); file.read(bname, detail_short); file.read(bisbn, detail_short); file.read(bauthor, detail_short); file.read(bsum, value_size); file.read(bavailable, value_size); file.read(bdamage, value_size); file.read(bscrap_num, value_size); if (*bscrap_num > '0') { if (rt_book) cout << setw(3) << i; cout << setw(27) << bname; cout << setw(20) << bisbn; cout << setw(22) << bauthor; cout << setw(10) << bsum; cout << setw(10) << bdamage; cout << endl; } if (file.tellg() < 0) rt_book = false; else rt_book = true; } } } catch (...) { throw "file error "; file.close(); } file.close(); cin.ignore(INT_MAX, '\n'); cout << "(任意键返回)" << endl; getchar(); } void view_scrap_book(void) { long filelen; int book_num; bool rt_book = false; char bname[detail_short]; char bisbn[detail_short]; char bauthor[detail_short]; char bsum[value_size]; char bavailable[value_size]; char bdamage[value_size]; char bscrap_num[value_size]; ifstream file; file.open("book.bat", ios::binary | ios::in | ios::app); filelen = getfilelen(file); book_num = filelen / (detail_short * 3 + value_size * 4); if (book_num >= 1) rt_book = true; system("cls"); cout << setw(5) << "序号"; cout << setw(25) << "书名" << setw(20) << "ISBN"; cout << setw(22) << "作者" << setw(10) << "总数量"; cout << setw(10) << "报废数" << endl; try { if (!file.fail()) { for (auto i = 1; i <= book_num; i++) { memset(bname, '\0', detail_short); memset(bisbn, '\0', detail_short); memset(bauthor, '\0', detail_short); memset(bsum, '\0', value_size); memset(bavailable, '\0', value_size); memset(bdamage, '\0', value_size); memset(bscrap_num, '\0', value_size); file.read(bname, detail_short); file.read(bisbn, detail_short); file.read(bauthor, detail_short); file.read(bsum, value_size); file.read(bavailable, value_size); file.read(bdamage, value_size); file.read(bscrap_num, value_size); if (*bscrap_num > '0') { if (rt_book) cout << setw(3) << i; cout << setw(27) << bname; cout << setw(20) << bisbn; cout << setw(22) << bauthor; cout << setw(10) << bsum; cout << setw(10) << bscrap_num; cout << endl; } if (file.tellg() < 0) rt_book = false; else rt_book = true; } } } catch (...) { throw "file error "; file.close(); } file.close(); cin.ignore(INT_MAX, '\n'); cout << "(任意键返回)" << endl; getchar(); } int main(void) { int function; book_mean(); while (1) { cout << "请输入选择的序号(0退出):" << endl; cin >> function; switch (function) { case 1: system("cls"); exit_add_data(); system("cls"); book_mean(); break; case 2: system("cls"); enter_add_data(); system("cls"); book_mean(); break; case 3: system("cls"); add_book(); system("cls"); book_mean(); break; case 4: view_all_book(); system("cls"); book_mean(); break; case 5: del_book(); system("cls"); book_mean(); break; case 6: system("cls"); view_recorder(); system("cls"); book_mean(); break; case 7: view_damage_book(); system("cls"); book_mean(); break; case 8: view_scrap_book(); system("cls"); book_mean(); break; case 0: return 0; break; default: cout << "输入有误" << endl; break; } } return 0; }