本文整理自网络,侵删。
本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下
大一 C++课设,没有用分文件的形式,只是把菜单页面单独分开了。用的是链表,都是一些基础的东西。另外采用了二维数组来保存读者借书信息,并将二维数组读入文件中。
功能:
1.首先是注册,登录,找回密码和修改密码功能,登录和注册使用了多态,并且登录页面采用了*符号加密。
2.管理员在删除图书时,若用户此时已将此书借走,则会将此书从用户的借书书单中删去,实现了动态管理。
3.容错率极高,每个页面都有返回上一页面的功能。
4.每个页面都有设置有滚键盘机制,提高了容错率。
菜单:
#pragma once void _mainmenu(); void Loginmenu(); void Registmenu(); void readermenu(); void mangermenu(); void changebookmenu(); void browsemenu();
菜单文件
#include "menu.h" #include <cstdio> void _mainmenu() { ?? ?printf("\n\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?欢 迎 使 用 图 书 管 理 系 统 !\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ?1.登录 ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ?2.注册 ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ?3.找回密码 ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ?4.退出 ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf("请按键选择:"); } void Loginmenu() { ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 登录页面\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 1.管理员登录 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 2.用户登录 ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 3.返回 ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 4.退出 ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf("请按键选择:"); } void Registmenu() { ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 注册页面\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 1.管理员注册 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 2.用户注册 ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 3.返回 ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? 4.退出 ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf("请按键选择:"); } void readermenu() { ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用户页面\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 1.借书 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 2.还书 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 3.浏览图书信息 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 4.查看已借阅书籍 ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 5.修改密码 ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 6.返回 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 7.退出 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf("请按键选择:"); } void mangermenu() { ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?管理员页面\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 1.增加图书 ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 2.删除图书 ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 3.修改图书信息 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 4.查看读者信息 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 5.浏览图书信息 ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 6.修改密码 ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 7.返回 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?** ? ? ? ? ? ? ? 8.退出 ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**************************************************\n"); ?? ?printf("请按键选择:"); } void changebookmenu() { ?? ?printf("\n\n"); ?? ?printf("\t\t\t\t*******************************\n"); ?? ?printf("\t\t\t\t** ? ? ?1.修改id号 ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?2.修改图书名称 ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?3.修改图书作者 ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?4.修改出版社 ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?5.修改图书数量 ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?6.修改是否可借 ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ?7.返回 ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t*******************************"); ?? ?printf("\n\n"); } void browsemenu() { ?? ?printf("\n\n\n\n"); ?? ?printf("\t\t\t\t***********************************\n"); ?? ?printf("\t\t\t\t** ? ? ? ? 1.按id号浏览 ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? 2.按图书数量浏览 ? ? ?**\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? 3.返回 ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t** ? ? ? ? 4.退出 ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t***********************************\n"); ?? ?printf("请按键选择:"); }
主程序
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <Windows.h> #include <string> #include <fstream> #include <conio.h> #include "menu.h" using namespace std; class User { protected : ?? ?char account[20]; ?? ?char password[20]; ?? ?char spassword[20]; public : ?? ?virtual void Login() = 0; ?? ?virtual void Regist() = 0; ?? ?virtual void save() = 0; ?? ?virtual void BrowseBook() = 0; ?? ?virtual void ChangePassword() = 0; ?? ?virtual void FindPassword() = 0; }; class Reader : public User { private: ?? ?int number; ?? ?string name; ?? ?string sex; ?? ?int books; // 借书数量 ?? ?int bookcnt;// 借阅次数 ?? ?char booklist[20][20];// 储存借阅书籍 ?? ?class Reader* next; public : ?? ?virtual void Login(); ?? ?virtual void Regist(); ?? ?virtual void save(); ?? ?virtual void BrowseBook(); ?? ?virtual void ChangePassword(); ?? ?virtual void FindPassword(); ?? ?void creat(); ?? ?void BrowseBorrowBook(Reader* pp); ?? ?void BorrowBook(Reader* pp); ?? ?void ReturnBook(Reader* pp); ?? ? public : ?? ?void set_number(int _number) { number = _number; }; ?? ?void set_name(string _name) { name = _name; }; ?? ?void set_sex(string _sex) { sex = _sex; }; ?? ?void set_next(Reader* p) { next = p; }; ?? ?void set_books(int _books) { books = _books; }; ?? ?void set_bookcnt(int _bookcnt) { bookcnt = _bookcnt; }; ?? ?int get_bookcnt() { return bookcnt; }; ?? ?int get_number() { return number; }; ?? ?int get_books() { return books; }; ?? ?Reader* get_next() { return next; } ?? ?string get_name() { return name; }; ?? ?string get_sex() { return sex; }; ?? ?char* get_account(Reader* p) { return p->account; }; ?? ?char* get_password(Reader* p) { return p->password; }; ?? ?char* get_spassword(Reader* p) { return p->spassword; }; ?? ?char* get_booklist(Reader* p, int i) { return p->booklist[i]; }; }; class Manger : public User { private: ?? ?class Manger* next; public : ?? ? ?? ?virtual void Login(); ?? ?virtual void Regist(); ?? ?virtual void BrowseBook(); ?? ?virtual void save(); ?? ?virtual void ChangePassword(); ?? ?virtual void FindPassword(); ?? ?void creat(); ?? ?void AddBook(); ?? ?void ChangeBook(); ?? ?void DeleteBook(); ?? ?void DeleteReaderBook(char* bookname); ?? ?void BrowseReader(); ?? ? public : ?? ?void set_next(Manger* p) { next = p; }; ?? ?Manger* get_next() { return next; }; ?? ?char* get_account(Manger* p) { return p->account; }; ?? ?char* get_password(Manger* p) { return p->password; }; ?? ?char* get_spassword(Manger* p) { return p->spassword; }; }; class Book { private: ?? ?int id; ?? ?int amount; ?? ?int flag; ?? ?string bookname; ?? ?string author; ?? ?string press; ?? ?class Book* next; public : ?? ? ?? ?void creat(); ?? ?void save(); ?? ?void show_book(); ?? ?void set_id(int _id) { id = _id; }; ?? ?void set_amount(int _amount) { amount = _amount; }; ?? ?void set_flag(int _flag) { flag = _flag; }; ?? ?void set_bookname(string _bookname) { bookname = _bookname; }; ?? ?void set_author(string _author) { author = _author; }; ?? ?void set_press(string _press) { press = _press; }; ?? ?void set_next(Book* p) { next = p; }; ?? ?int get_id() { return id; }; ?? ?int get_amount() { return amount; }; ?? ?int get_flag() { return flag; }; ?? ?string get_bookname() { return bookname; }; ?? ?string get_author() { return author; }; ?? ?string get_press() { return press; }; ?? ?Book* get_next() { return next; }; }; class DBFile { public : ?? ?void cls(); ?? ?void over(); ?? ?void login(); ?? ?void useLogin(User* base); ?? ?void regist(); ?? ?void useRegist(User* base); ?? ?void usebrowsebook(User* base); ?? ?void usesave(User* base); ?? ?void usechangepassword(User* base); ?? ?void usefindpassword(User* base); ?? ?void findpassword(); ?? ?int exist(char* acconut, int flag); ?? ?void _main(); ?? ?void idsort(); ?? ?void bookamountsort(); ?? ?void showidsort(); ?? ?void showbookamountsort(); ?? ?void mangerfunction(); ?? ?void readerfunction(Reader* rp); }; Reader* rhead = NULL; Reader* _rend = NULL; Manger* mhead = NULL, * mend = NULL; Book* bhead = NULL; Book* bend = NULL; char code[20] = "glysw"; // 读者类 void Reader::Login() { ?? ?int cnt = 4; ?? ?int flag = 0; ?? ?int k = 0; ?? ?int i; ?? ?char c; ?? ?DBFile* fp = new DBFile; ?? ?Reader* p = rhead->get_next(); ?? ?char rpassword[2000]; ?? ?char raccount[2000]; ?? ?cout << "\n\n\n\n\n\n\n"; ?? ?printf("请输入您的账户(按0退出):"); ?? ?while (cin >> raccount) ?? ?{ ?? ??? ?if (strcmp(raccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(raccount) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的账户:"; ?? ??? ?} ?? ?} ?? ?cout << "请输入您的密码(按0退出):"; ?? ?for (i = 0; (c = _getch()) != '\r';) ?? ?{ ?? ??? ?if (c == '0') ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (i <= 15 && isprint(c)) ?? ??? ?{ ?? ??? ??? ?rpassword[i] = c; ?? ??? ??? ?i++; ?? ??? ??? ?k++; ?? ??? ??? ?cout << "*"; ?? ??? ?} ?? ??? ?if (k > 0 && c > 0 && c == '\b') ?? ??? ?{ ?? ??? ??? ?i--; ?? ??? ??? ?k--; ?? ??? ??? ?cout << "\b"; ?? ??? ??? ?cout << " "; ?? ??? ??? ?cout << "\b"; ?? ??? ?} ?? ?} ?? ?rpassword[i] = '\0'; ?? ?cout << "\n"; ?? ?while (p) ?? ?{ ?? ??? ?if (strcmp(p->account, raccount) == 0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?while (strcmp(p->password, rpassword) != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?cnt--; ?? ??? ??? ??? ?if (cnt == 1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?fp->cls(); ?? ??? ??? ??? ??? ?cout << "\n\n\n\n\n\n\n"; ?? ??? ??? ??? ??? ?cout << "密码输入次数已用完! " << "\n" << "即将退出登录页面..."; ?? ??? ??? ??? ??? ?Sleep(3000); ?? ??? ??? ??? ??? ?fp->cls(); ?? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?cout << "密码错误!您还有" << cnt - 1 << "次机会\n" << endl; ?? ??? ??? ??? ?cout << "请重新输入(按0退出):"; ?? ??? ??? ??? ?k = 0; ?? ??? ??? ??? ?for (i = 0; (c = _getch()) != '\r';) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (c == '0') ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (i <= 15 && isprint(c)) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?rpassword[i] = c; ?? ??? ??? ??? ??? ??? ?i++; ?? ??? ??? ??? ??? ??? ?k++; ?? ??? ??? ??? ??? ??? ?cout << "*"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (k > 0 && c > 0 && c == '\b') ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?i--; ?? ??? ??? ??? ??? ??? ?k--; ?? ??? ??? ??? ??? ??? ?cout << "\b"; ?? ??? ??? ??? ??? ??? ?cout << " "; ?? ??? ??? ??? ??? ??? ?cout << "\b"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?rpassword[i] = '\0'; ?? ??? ??? ??? ?cout << "\n"; ?? ??? ??? ?} ?? ??? ??? ?cout << "读者" << raccount << "登陆成功!\n" << "即将跳转至读者页面..." << endl; ?? ??? ??? ?Sleep(2000); ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->readerfunction(p); ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?p = p->get_next(); ?? ?} ?? ?if (!flag) ?? ?{ ?? ??? ?cout << "不存在此账号!\n请先前往注册!\n" << endl; ?? ??? ?cout << "即将跳转至主页面..."; ?? ??? ?Sleep(2000); ?? ?} } void Reader::Regist() { ?? ?DBFile* fp = new DBFile; ?? ?Reader* rp = new Reader; ?? ?char raccount[2000]; ?? ?char rpassword[2000]; ?? ?char rspassword[2000]; ?? ?char name[200]; ?? ?char sex[10]; ?? ?int number; ?? ?Reader* p = new Reader; ?? ?cout << "\n\n\n\n\n\n\n"; ?? ?cout << "请输入账户(按0退出):"; ?? ?while (cin >> raccount) ?? ?{ ?? ??? ?if (strcmp(raccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(raccount) <= 16 && !fp->exist(raccount, 0)) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else if (fp->exist(raccount, 1)) ?? ??? ?{ ?? ??? ??? ?cout << "该账户已存在!请重新输入(按0退出):"; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的账户:"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->account, raccount); ?? ?cout << "请输入密码(按0退出):"; ?? ?while (cin >> rpassword) ?? ?{ ?? ??? ?if (strcmp(rpassword, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(rpassword) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的密码(按0退出):"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->password, rpassword); ?? ?cout << "请输入您的密保(按0退出):"; ?? ?while (cin >> rspassword) ?? ?{ ?? ??? ?if (strcmp(rspassword, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(rspassword) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的密保(按0退出):"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->spassword, rspassword); ?? ?cout << "请输入您的姓名(按0退出):"; ?? ?cin >> name; ?? ?if (strcmp(name, "0") == 0) ?? ?{ ?? ??? ?return; ?? ?} ?? ?p->name = name; ?? ?cout << "请输入您的性别(按0退出):"; ?? ?while (cin >> sex) ?? ?{ ?? ??? ?if (strcmp(sex, "0") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ?if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0) ?? ??? ?{ ?? ??? ??? ?p->sex = sex; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入男或女(按0退出):"; ?? ??? ?} ?? ?} ?? ? ?? ?cout << "请输入您的学号(按0退出):"; ?? ?while (cin >> number) ?? ?{ ?? ??? ?if (number == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (number >= 0) ?? ??? ?{ ?? ??? ??? ?p->number = number; ?? ??? ??? ?break; ?? ??? ?}? ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入正确格式的学号(按0退出):"; ?? ??? ?} ?? ?} ?? ?_rend->set_next(p); ?? ?_rend = p; ?? ?_rend->set_next(NULL); ?? ?rp->save(); ?? ?fp->cls(); ?? ?printf("\n\n\n\n\n\n\n"); ?? ?printf("\t\t\t\t\t*******************************\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t\t ? ? ? 读者%s注册成功!! ? ? \n", raccount); ?? ?printf("\t\t\t\t\t** ? ? 即将跳转至主页面... ? **\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t\t*******************************\n"); ?? ?Sleep(1500); } void Reader::save() { ?? ?Reader* rp = rhead->get_next(); ?? ?ofstream f_reader("reader.txt", ios::out); ?? ?while (rp) ?? ?{ ?? ??? ?f_reader << rp->account << " " << rp->password << " " << rp->spassword << " " << rp->number ?? ??? ??? ?<< " " << rp->name << " " << rp->sex << " " << rp->bookcnt << " " << rp->books; ?? ??? ?for (int i = 0; i < rp->bookcnt; i++) ?? ??? ?{ ?? ??? ??? ?f_reader << " " << booklist[i]; ?? ??? ?} ?? ??? ?f_reader << endl; ?? ??? ?rp = rp->get_next(); ?? ?} ?? ?f_reader.close(); } void Reader::BrowseBook() { ?? ?DBFile* fp = new DBFile; ?? ?int sign = 0; ?? ?while (1) ?? ?{ ?? ??? ?fp->cls(); ?? ??? ?browsemenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->showidsort(); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->showbookamountsort(); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void Reader::creat() { ?? ?ifstream f_reader("reader.txt", ios::in); ?? ?char _account[20]; ?? ?char _password[20]; ?? ?char _spassword[20]; ?? ?int number; ?? ?int bookcnt; ?? ?int books; ?? ?char name[20]; ?? ?char sex[20]; ?? ?char booklist[20][20]; ?? ?while (f_reader >> _account && f_reader >> _password && f_reader >> _spassword) ?? ?{ ?? ??? ?Reader* p = new Reader; ?? ??? ?strcpy_s(p->account, _account); ?? ??? ?strcpy_s(p->password, _password); ?? ??? ?strcpy_s(p->spassword, _password); ?? ??? ?_rend->set_next(p); ?? ??? ?p->set_next(NULL); ?? ??? ?_rend = _rend->get_next(); ?? ?} ?? ?while (f_reader >> number && f_reader >> name && f_reader >> sex ?? ??? ? && f_reader >> bookcnt && f_reader >> books) ?? ?{ ?? ??? ?Reader* p = new Reader; ?? ??? ?p->number = number; ?? ??? ?p->sex = sex; ?? ??? ?p->name = name; ?? ??? ?p->bookcnt = bookcnt; ?? ??? ?p->books = books; ?? ??? ?_rend->set_next(p); ?? ??? ?p->set_next(NULL); ?? ??? ?_rend = _rend->get_next(); ?? ?} ?? ?while (f_reader >> bookcnt) ?? ?{ ?? ??? ?Reader* p = new Reader; ?? ??? ?for (int i = 0; i < bookcnt; i++) ?? ??? ?{ ?? ??? ??? ?f_reader >> booklist[i]; ?? ??? ??? ?strcpy_s(p->booklist[i], booklist[i]); ?? ??? ?} ?? ??? ?_rend->set_next(p); ?? ??? ?p->set_next(NULL); ?? ??? ?_rend = _rend->get_next(); ?? ?} ?? ?f_reader.close(); } void Reader::BrowseBorrowBook(Reader* pp) { ?? ?int cnt = pp->bookcnt; ?? ?long long ?sign; ?? ?if (cnt == 0) ?? ?{ ?? ??? ?printf("\n\n\n\n\n\n\n"); ?? ??? ?printf("\t\t\t\t\t\t您还未借阅任何书籍!\n"); ?? ?} ?? ?printf("\n\n\n\n\n\n"); ?? ?for (int i = 0; i < cnt; i++) ?? ?{ ?? ??? ?printf("\t第%d次借阅的书籍:", i + 1); ?? ??? ?printf("%s\t", pp->get_booklist(pp, i)); ?? ??? ?cout << "借阅数量:" << pp->get_books() << endl; ?? ?} ?? ?printf("\n\n请输入0退出:"); ?? ?while (scanf("%lld", &sign)) ?? ?{ ?? ??? ?if (sign == 0) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?printf("-------------无效的输入!请重新输入!"); ?? ??? ?} ?? ?} } void Reader::BorrowBook(Reader* pp) { ?? ?Book* bp = bhead->get_next(); ?? ?Book* _bp = new Book; ?? ?_bp->show_book(); ?? ?char bookname[200]; ?? ?int amount; ?? ?int flag = 1; ?? ?int sign = 1; ?? ?int exist = 0; ?? ?cout << "\n\n\n\n"; ?? ?cout << "请输入要借书的名称(按0退出):"; ?? ?cin >> bookname; ?? ?if (strcmp(bookname, "0") == 0) ?? ?{ ?? ??? ?return; ?? ?} ?? ?while (bp) ?? ?{ ?? ??? ?if (bp->get_bookname() == bookname) ?? ??? ?{ ?? ??? ??? ?if (bp->get_amount() == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "此书无余量!\n"; ?? ??? ??? ??? ?sign = 0; ?? ??? ??? ?} ?? ??? ??? ?if (bp->get_flag() == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "此书不可借!\n"; ?? ??? ??? ??? ?flag = 0; ?? ??? ??? ?} ?? ??? ??? ?if (sign == 1 && flag == 1) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "请输入要借阅书籍的数量:"; ?? ??? ??? ??? ?while (cin >> amount) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (bp->get_amount() < amount) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?cout << "借阅数量超过此书已有库存!请重新输入:"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?int a = pp->get_books() + amount; ?? ??? ??? ??? ??? ??? ?pp->set_books(a); ?? ??? ??? ??? ??? ??? ?int b = bp->get_amount() - amount; ?? ??? ??? ??? ??? ??? ?bp->set_amount(b); ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?pp->bookcnt++; ?? ??? ??? ??? ?strcpy_s(pp->booklist[pp->bookcnt - 1], bookname); ?? ??? ??? ??? ?pp->save(); ?? ??? ??? ??? ?bp->save(); ?? ??? ??? ??? ?exist = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?bp = bp->get_next(); ?? ?} ?? ?if (exist == 0 && sign == 1 && flag == 1) ?? ?{ ?? ??? ?cout << "不存在此书!!\n"; ?? ?} ?? ?else if (exist == 1) ?? ?{ ?? ??? ?cout << "图书:" << bookname << "借阅成功!!\n"; ?? ?} ?? ?cout << "页面即将跳转..."; ?? ?Sleep(1200); } void Reader::ReturnBook(Reader* pp) { ?? ?Book* bp = bhead->get_next(); ?? ?char bookname[200]; ?? ?int amount; ?? ?int exist = 0; ?? ?int flag = 0; ?? ?int cnt = pp->bookcnt; ?? ?if (cnt == 0) ?? ?{ ?? ??? ?printf("\n\n\n\n\n\n\n"); ?? ??? ?printf("\t\t\t\t\t\t您还未借阅任何书籍!\n"); ?? ??? ?system("pause"); ?? ??? ?return; ?? ?} ?? ?printf("\n\n\n\n\n\n"); ?? ?for (int i = 0; i < cnt; i++) ?? ?{ ?? ??? ?cout << "-------------第" << i + 1 << "次借阅的书籍:" << pp->booklist[i] << "\t\t"; ?? ??? ?cout << "借阅数量:" << pp->books << endl; ?? ?} ?? ?cout << "请输入您要退还的书籍(按0退出):"; ?? ?while (cin >> bookname) ?? ?{ ?? ??? ?if (strcmp(bookname, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return ; ?? ??? ?} ?? ??? ?for (int i = 0; i < pp->bookcnt; i++) ?? ??? ?{ ?? ??? ??? ?if (strcmp(pp->booklist[i], bookname) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = i; ?? ??? ??? ??? ?exist = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?if (!exist) ?? ??? ?{ ?? ??? ??? ?cout << "未查询到该书!\n"; ?? ??? ??? ?cout << "请重新输入(按0退出):"; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?while (bp) ?? ?{ ?? ??? ?if (bp->get_bookname() == bookname) ?? ??? ?{ ?? ??? ??? ?cout << "请输入您要退还书籍的数量:"; ?? ??? ??? ?while (cin >> amount) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (pp->books < amount) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "您未持有此数量的书籍!\n"; ?? ??? ??? ??? ??? ?cout << "请重新输入:"; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?int a = pp->books - amount; ?? ??? ??? ??? ??? ?int b = bp->get_amount() + amount; ?? ??? ??? ??? ??? ?pp->set_books(a); ?? ??? ??? ??? ??? ?bp->set_amount(b); ?? ??? ??? ??? ??? ?break; ??? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?bp = bp->get_next(); ?? ?} ?? ?if (pp->books == 0) ?? ?{ ?? ??? ?for (int i = flag; i < pp->books - 1; i++) ?? ??? ?{ ?? ??? ??? ?strcpy_s(pp->booklist[i], pp->booklist[i + 1]); ?? ??? ?} ?? ??? ?pp->bookcnt--; ?? ?} ?? ?pp->save(); ?? ?bp->save(); ?? ?cout << bookname << "退还成功!!\n"; ?? ?cout << "即将返回上一页面..."; ?? ?Sleep(1100); } void Reader::FindPassword() { ?? ?Reader* rp = rhead->get_next(); ?? ?char password[200]; ?? ?char account[200]; ?? ?char spassword[200]; ?? ?int flag = 0; ?? ?int sign = 0; ?? ?cout << "请输入您的账户(按0退出):"; ?? ?while (cin >> account) ?? ?{ ?? ??? ?if (strcmp(account, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (rp) ?? ??? ?{ ?? ??? ??? ?if (strcmp(rp->get_account(rp), account) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?rp = rp->get_next(); ?? ??? ?} ?? ??? ?if (flag) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?printf("此账号不存在!请重新输入(按0退出):"); ?? ??? ??? ?rp = rhead->get_next(); ?? ??? ?} ?? ?} ?? ?if (flag) ?? ?{ ?? ??? ?rp = rhead->next; ?? ??? ?printf("请输入您设置的密保(按0退出):"); ?? ??? ?while (cin >> spassword) ?? ??? ?{ ?? ??? ??? ?if (strcmp(spassword, "0") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?while (rp) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (strcmp(rp->get_spassword(rp), spassword) == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?sign = 1; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?rp = rp->get_next(); ?? ??? ??? ?} ?? ??? ??? ?if (sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("密保输入正确!\n"); ?? ??? ??? ??? ?printf("您的密码为%s\n", rp->get_password(rp)); ?? ??? ??? ??? ?system("pause"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("-------------密保输入错误!请重新输入(按0退出):"); ?? ??? ??? ??? ?rp = rhead->get_next(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } void Reader::ChangePassword() { ?? ?DBFile* fp = new DBFile; ?? ?Reader* p = rhead->get_next(), * rp = new Reader; ?? ?int flag = 0; ?? ?int sign = 0; ?? ?char raccount[200]; ?? ?char rpassword[200]; ?? ?char rspassword[200]; ?? ?cout << "请输入您的账户(按0退出):"; ?? ?while (cin >> raccount) ?? ?{ ?? ??? ?if (strcmp(raccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (p) ?? ??? ?{ ?? ??? ??? ?if (strcmp(p->account, raccount) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ??? ?if (flag) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "此账号不存在!请重新输入(按0退出):"; ?? ??? ??? ?p = rhead->get_next(); ?? ??? ?} ?? ?} ?? ?if (flag) ?? ?{ ?? ??? ?p = rhead->get_next(); ?? ??? ?cout << "请输入您设置的密保(按0退出):"; ?? ??? ?while (cin >> rspassword) ?? ??? ?{ ?? ??? ??? ?if (strcmp(rspassword, "0") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?while (p) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (strcmp(p->spassword, rspassword) == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?sign = 1; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?p = p->get_next(); ?? ??? ??? ?} ?? ??? ??? ?if (sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "请输入修改后的密码(按0退出):"; ?? ??? ??? ??? ?while (cin >> rpassword) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (strcmp(rpassword, "0") == 0) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (strlen(rpassword) <= 16) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?cout << "请输入长度为1到16位的密码(按0退出):"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?strcpy_s(p->password, rpassword); ?? ??? ??? ??? ?cout << "密码修改成功!"; ?? ??? ??? ??? ?fp->usesave(p); ?? ??? ??? ??? ?system("pause"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "密保输入错误!!请重新输入(按0退出):"; ?? ??? ??? ??? ?p = rhead->get_next(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } // 数据操作类 void DBFile::cls() { ?? ?system("cls"); } void DBFile::over() { ?? ?DBFile* dbp = new DBFile; ?? ?dbp->cls(); ?? ?system("color 6"); ?? ?int time = 6; ?? ?printf("\n\n\n\n\n\n\n\n\n"); ?? ?printf("\t\t\t\t\t\t感谢您的使用!!\n\n\n\n\n"); ?? ?printf(" 程序即将关闭..."); ?? ?while (--time >= 1) ?? ?{ ?? ??? ?printf("\r%d", time); ?? ??? ?printf("\b"); ?? ??? ?Sleep(1000); ?? ?} ?? ?dbp->cls(); ?? ?exit(0); } void DBFile::login() { ?? ?Reader* rp = new Reader; ?? ?Manger* mp = new Manger; ?? ?int sign = 0; ?? ?while (1) ?? ?{ ?? ??? ?cls(); ?? ??? ?Loginmenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?cls(); ?? ??? ??? ?useLogin(mp); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?cls(); ?? ??? ??? ?useLogin(rp); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?cls(); ?? ??? ??? ?over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "输入无效!!"; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void DBFile::useLogin(User* base) { ?? ?base->Login(); } void DBFile::regist() { ?? ?Reader* rp = new Reader; ?? ?Manger* mp = new Manger; ?? ?int sign = 0; ?? ?while (1) ?? ?{ ?? ??? ?cls(); ?? ??? ?Registmenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?cls(); ?? ??? ??? ?useRegist(mp); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?cls(); ?? ??? ??? ?useRegist(rp); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?cls(); ?? ??? ??? ?over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "无效输入!!"; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void DBFile::usesave(User* base) { ?? ?base->save(); } void DBFile::usechangepassword(User* base) { ?? ?base->ChangePassword(); } void DBFile::useRegist(User* base) { ?? ?base->Regist(); } void DBFile::usebrowsebook(User* base) { ?? ?base->BrowseBook(); } void DBFile::usefindpassword(User* base) { ?? ?base->FindPassword(); } void DBFile::findpassword() { ?? ?printf("\n\n\n\n\n\n"); ?? ?printf("\t\t\t\t\t********************************\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ?1.管理员找回密码 ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ?2.用户找回密码 ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ?3.返回 ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ?printf("\t\t\t\t\t********************************\n"); ?? ?printf("请按键选择:"); ?? ?int choose; ?? ?int sign = 0; ?? ?Reader* rp = new Reader; ?? ?Manger* mp = new Manger; ?? ?scanf("%d", &choose); ?? ?while (1) ?? ?{ ?? ??? ?cls(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?cls(); ?? ??? ??? ?usefindpassword(mp); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?cls(); ?? ??? ??? ?usefindpassword(mp); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?printf("输入无效!"); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } int DBFile::exist(char* account, int flag) { ?? ?if (flag == 0) ?? ?{ ?? ??? ?Reader* p = rhead->get_next(); ?? ??? ?while (p != NULL) ?? ??? ?{ ?? ??? ??? ?if (strcmp(account, p->get_account(p)) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return 1; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ?} ?? ?else if (flag == 1) ?? ?{ ?? ??? ?Manger* p = mhead->get_next(); ?? ??? ?while (p != NULL) ?? ??? ?{ ?? ??? ??? ?if (strcmp(account, p->get_account(p) ) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return 1; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ?} ?? ?return 0; } void DBFile::_main() { ?? ?while (1) ?? ?{ ?? ??? ?cls(); ?? ??? ?_mainmenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?cls(); ?? ??? ??? ?login(); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?cls(); ?? ??? ??? ?regist(); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?cls(); ?? ??? ??? ?findpassword(); ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?cls(); ?? ??? ??? ?over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "无效输入!!"; ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void DBFile::idsort() { ?? ?Book* f, *x, *y, *p; ?? ?f = NULL; ?? ?if (bhead->get_next() == NULL || bhead->get_next()->get_next() == NULL) ?? ?{ ?? ??? ?return; ?? ?} ?? ?while (f != bhead->get_next()->get_next()) ?? ?{ ?? ??? ?for (p = bhead; p->get_next()->get_next() != f; p = p->get_next()) ?? ??? ?{ ?? ??? ??? ?if (p->get_next()->get_id() > p->get_next()->get_next()->get_id()) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = p->get_next(); ?? ??? ??? ??? ?y = p->get_next()->get_next(); ?? ??? ??? ??? ?p->set_next(y); ?? ??? ??? ??? ?x->set_next(y->get_next()); ?? ??? ??? ??? ?y->set_next(x); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?f = p->get_next(); ?? ?} } void DBFile::bookamountsort() { ?? ?Book* f, * x, * y, * p; ?? ?f = NULL; ?? ?if (bhead->get_next() == NULL || bhead->get_next()->get_next() == NULL) ?? ?{ ?? ??? ?return; ?? ?} ?? ?while (f != bhead->get_next()->get_next()) ?? ?{ ?? ??? ?for (p = bhead; p->get_next()->get_next() != f; p = p->get_next()) ?? ??? ?{ ?? ??? ??? ?if (p->get_next()->get_amount() > p->get_next()->get_next()->get_amount()) ?? ??? ??? ?{ ?? ??? ??? ??? ?x = p->get_next(); ?? ??? ??? ??? ?y = p->get_next()->get_next(); ?? ??? ??? ??? ?p->set_next(y); ?? ??? ??? ??? ?x->set_next(y->get_next()); ?? ??? ??? ??? ?y->set_next(x); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?f = p->get_next(); ?? ?} } void DBFile::showidsort() { ?? ?DBFile* fp = new DBFile; ?? ?Book* bp = new Book; ?? ?fp->idsort(); ?? ?bp->show_book(); ?? ?system("pause"); } void DBFile::showbookamountsort() { ?? ?DBFile* fp = new DBFile; ?? ?Book* bp = new Book; ?? ?fp->bookamountsort(); ?? ?bp->show_book(); ?? ?system("pause"); } void DBFile::mangerfunction() { ?? ?DBFile* fp = new DBFile; ?? ?Manger* mp = new Manger; ?? ?int sign = 0; ?? ?int choose; ?? ?while (1) ?? ?{ ?? ??? ?fp->cls(); ?? ??? ?mangermenu(); ?? ??? ?cin >> choose; ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case 1: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?mp->AddBook(); ?? ??? ??? ?break; ?? ??? ?case 2: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?mp->DeleteBook(); ?? ??? ??? ?break; ?? ??? ?case 3: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?mp->ChangeBook(); ?? ??? ??? ?break; ?? ??? ?case 4: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?mp->BrowseReader(); ?? ??? ??? ?break; ?? ??? ?case 5: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?mp->BrowseBook(); ?? ??? ??? ?break; ?? ??? ?case 6: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->usechangepassword(mp); ?? ??? ??? ?break; ?? ??? ?case 7: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case 8: ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "输入无效!!"; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void DBFile::readerfunction(Reader* pp) { ?? ?DBFile* fp = new DBFile; ?? ?Reader* rp = new Reader; ?? ?int sign = 0; ?? ?while (1) ?? ?{ ?? ??? ?fp->cls(); ?? ??? ?readermenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?rp->BorrowBook(pp); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?rp->ReturnBook(pp); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->usebrowsebook(rp); ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?rp->BrowseBorrowBook(pp); ?? ??? ??? ?break; ?? ??? ?case '5': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->usechangepassword(rp); ?? ??? ??? ?break; ?? ??? ?case '6': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case '7': ?? ??? ??? ?fp->over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?cout << "输入无效!!"; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } // 管理员类 void Manger::Login() { ?? ?int cnt = 4; ?? ?int flag = 0; ?? ?int k = 0; ?? ?int i; ?? ?char c; ?? ?DBFile* fp = new DBFile; ?? ?Manger* p = mhead->get_next(); ?? ?char mpassword[2000]; ?? ?char maccount[2000]; ?? ?cout << "\n\n\n\n\n\n\n"; ?? ?printf("请输入您的账户(按0退出):"); ?? ?while (cin >> maccount) ?? ?{ ?? ??? ?if (strcmp(maccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(maccount) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的账户:"; ?? ??? ?} ?? ?} ?? ?cout << "请输入您的密码(按0退出):"; ?? ?for (i = 0; (c = _getch()) != '\r';) ?? ?{ ?? ??? ?if (c == '0') ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (i <= 15 && isprint(c)) ?? ??? ?{ ?? ??? ??? ?mpassword[i] = c; ?? ??? ??? ?i++; ?? ??? ??? ?k++; ?? ??? ??? ?printf("*"); ?? ??? ?} ?? ??? ?if (k > 0 && c > 0 && c == '\b') ?? ??? ?{ ?? ??? ??? ?i--; ?? ??? ??? ?k--; ?? ??? ??? ?printf("\b"); ?? ??? ??? ?printf(" "); ?? ??? ??? ?printf("\b"); ?? ??? ?} ?? ?} ?? ?mpassword[i] = '\0'; ?? ?printf("\n"); ?? ?while (p) ?? ?{ ?? ??? ?if (strcmp(p->account, maccount) == 0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?while (strcmp(p->password, mpassword) != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?cnt--; ?? ??? ??? ??? ?if (cnt == 1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?fp->cls(); ?? ??? ??? ??? ??? ?cout << "\n\n\n\n\n\n\n"; ?? ??? ??? ??? ??? ?cout << "密码输入次数已用完! " << "\n" << "即将退出登录页面..."; ?? ??? ??? ??? ??? ?Sleep(3000); ?? ??? ??? ??? ??? ?fp->cls(); ?? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?cout << "密码错误!您还有"<< cnt - 1 << "次机会\n"<< endl; ?? ??? ??? ??? ?cout << "请重新输入(按0退出):"; ?? ??? ??? ??? ?k = 0; ?? ??? ??? ??? ?for (i = 0; (c = _getch()) != '\r';) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (c == '0') ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (i <= 15 && isprint(c)) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?mpassword[i] = c; ?? ??? ??? ??? ??? ??? ?i++; ?? ??? ??? ??? ??? ??? ?k++; ?? ??? ??? ??? ??? ??? ?printf("*"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (k > 0 && c > 0 && c == '\b') ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?i--; ?? ??? ??? ??? ??? ??? ?k--; ?? ??? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ??? ?printf(" "); ?? ??? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?mpassword[i] = '\0'; ?? ??? ??? ??? ?printf("\n"); ?? ??? ??? ?} ?? ??? ??? ?cout << "管理员"<< maccount << "登陆成功!\n" << "即将跳转至管理员页面..." << endl; ?? ??? ??? ??? ?Sleep(2000); ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->mangerfunction(); ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?p = p->get_next(); ?? ?} ?? ?if (!flag) ?? ?{ ?? ??? ?cout << "不存在此账号!\n请先前往注册!\n" << endl; ?? ??? ?cout << "即将跳转至主页面..."; ?? ??? ?Sleep(2000); ?? ?} } void Manger::Regist() { ?? ?DBFile* fp = new DBFile; ?? ?Manger* mp = new Manger; ?? ?char maccount[2000]; ?? ?char mpassword[2000]; ?? ?char mspassword[2000]; ?? ?char mangercode[2000]; ?? ?cout << "\n\n\n\n\n\n\n"; ?? ?cout << "请输入管理员验证码:"; ?? ?cin >> mangercode; ?? ?int cnt = 2; ?? ?while (--cnt >= 0) ?? ?{ ?? ??? ?if (strcmp(mangercode, code) == 0) ?? ??? ?{ ?? ??? ??? ?cout << "管理员验证成功!!\n" << "即将跳转至注册页面..."; ?? ??? ??? ?Sleep(1000); ?? ??? ??? ?fp->cls(); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "管理员验证失败!!\n" << "您还有" << cnt + 1 << "次机会\n"; ?? ??? ??? ?cout << "请重新输入:"; ?? ??? ??? ?cin >> mangercode; ?? ??? ?} ?? ??? ?if (cnt == 0) ?? ??? ?{ ?? ??? ??? ?cout << "输入次数已用完\n" << "即将退出管理员注册系统..."; ?? ??? ??? ?Sleep(1000); ?? ??? ??? ?fp->cls(); ?? ??? ??? ?return; ?? ??? ?} ?? ?} ?? ?Manger* p = new Manger; ?? ?cout << "\n\n\n\n\n\n\n"; ?? ?cout << "请输入账户(按0退出):"; ?? ?while (cin >> maccount) ?? ?{ ?? ??? ?if (strcmp(maccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(maccount) <= 16 && !fp->exist(maccount, 1)) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else if (fp->exist(maccount, 1)) ?? ??? ?{ ?? ??? ??? ?cout << "该账户已存在!请重新输入(按0退出):"; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的账户:"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->account, maccount); ?? ?cout << "请输入密码(按0退出):"; ?? ?while (cin >> mpassword) ?? ?{ ?? ??? ?if (strcmp(mpassword, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(mpassword) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的密码(按0退出):"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->password, mpassword); ?? ?cout << "请输入您的密保(按0退出):"; ?? ?while (cin >> mspassword) ?? ?{ ?? ??? ?if (strcmp(mspassword, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?if (strlen(mspassword) <= 16) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "请输入长度为1到16位的密保(按0退出):"; ?? ??? ?} ?? ?} ?? ?strcpy_s(p->spassword, mspassword); ?? ?mend->set_next(p); ?? ?mend = p; ?? ?mend->set_next(NULL); ?? ?mp->save(); ?? ?fp->cls(); ?? ?printf("\n\n\n\n\n\n\n"); ?? ?printf("\t\t\t\t\t*******************************\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t\t ? ? ? 管理员%s注册成功!! ? ? \n", maccount); ?? ?printf("\t\t\t\t\t** ? ? 即将跳转至主页面... ? **\n"); ?? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? **\n"); ?? ?printf("\t\t\t\t\t*******************************\n"); ?? ?Sleep(1500); } void Manger::BrowseBook() { ?? ?DBFile* fp = new DBFile; ?? ?int sign = 0; ?? ?while (1) ?? ?{ ?? ??? ?fp->cls(); ?? ??? ?browsemenu(); ?? ??? ?char choose = _getch(); ?? ??? ?switch (choose) ?? ??? ?{ ?? ??? ?case '1': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->showidsort(); ?? ??? ??? ?break; ?? ??? ?case '2': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->showbookamountsort(); ?? ??? ??? ?break; ?? ??? ?case '3': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?sign = 1; ?? ??? ??? ?break; ?? ??? ?case '4': ?? ??? ??? ?fp->cls(); ?? ??? ??? ?fp->over(); ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?if (sign) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void Manger::save() { ?? ?Manger* mp = mhead->get_next(); ?? ?ofstream f_manger("manger.txt", ios::out); ?? ?while (mp) ?? ?{ ?? ??? ?f_manger << mp->account << " " << mp->password << " " << mp->spassword << endl; ?? ??? ?mp = mp->get_next(); ?? ?} ?? ?f_manger.close(); } void Manger::creat() { ?? ?char account[20]; ?? ?char password[20]; ?? ?char spassword[20]; ?? ?ifstream f_manger("manger.txt", ios::in); ?? ?while (f_manger >> account && f_manger >> password && f_manger >> spassword) ?? ?{ ?? ??? ?Manger* p = new Manger; ?? ??? ?strcpy_s(p->account, account); ?? ??? ?strcpy_s(p->password, password); ?? ??? ?strcpy_s(p->spassword, password); ?? ??? ?mend->set_next(p); ?? ??? ?p->set_next(NULL); ?? ??? ?mend = mend->get_next(); ?? ?} ?? ?f_manger.close(); } void Manger::AddBook() { ?? ?DBFile* fp = new DBFile; ?? ?Book* p = bhead->get_next(); ?? ?int a; ?? ?int id = 0; ?? ?int amount; ?? ?char bookname[2000]; ?? ?do ?? ?{ ?? ??? ?fp->cls(); ?? ??? ?cout << "\n\n\n\n\n"; ?? ??? ?cout << "请输入要添加书名id(按0退出):"; ?? ??? ?while (cin >> id) ?? ??? ?{ ?? ??? ??? ?if (id == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?if (id < 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "请输入正确格式的id号(按0退出):"; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?int flag = 0; ?? ??? ?while (p) ?? ??? ?{ ?? ??? ??? ?if (p->get_id() == id) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ??? ?if (flag) ?? ??? ?{ ?? ??? ??? ?cout << "已查出此书,请输入再次增加图书的数量:"; ?? ??? ??? ?while (cin >> amount) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (amount <= 199 && amount > 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?int temp = p->get_amount() + amount; ?? ??? ??? ??? ??? ?p->set_amount(temp); ?? ??? ??? ??? ??? ?cout << "图书" << p->get_bookname() << "添加成功!"; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "请输入数量为0-199以内的图书:"; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?p = new Book; ?? ??? ??? ?p->set_id(id); ?? ??? ??? ?cout << "请输入增加图书的数量:"; ?? ??? ??? ?while (cin >> amount) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (amount <= 199 && amount > 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p->set_amount(amount); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "请输入数量为0-199范围以内的图书:"; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?cout << "请输入是否可借:"; ?? ??? ??? ?int sign = 0; ?? ??? ??? ?while (cin >> sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (sign == 1 || sign == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p->set_flag(sign); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if (sign < 0 || sign > 1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "请输入正确格式的可借标志(1为可借,0为不可借):"; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?char bookname[200]; ?? ??? ??? ?cout << "请输入书名:"; ?? ??? ??? ?cin >> bookname; ?? ??? ??? ?p->set_bookname(bookname); ?? ??? ??? ?char author[200]; ?? ??? ??? ?cout << "请输作者:"; ?? ??? ??? ?cin >> author; ?? ??? ??? ?p->set_author(author); ?? ??? ??? ?char press[200]; ?? ??? ??? ?cout << "请输入出版社:"; ?? ??? ??? ?cin >> press; ?? ??? ??? ?p->set_press(press); ?? ??? ??? ?bend->set_next(p); ?? ??? ??? ?bend = p; ?? ??? ??? ?bend->set_next(NULL); ?? ??? ?} ?? ??? ?p->save(); ?? ??? ?fp->cls(); ?? ??? ?printf("\n\n\n\n\n\n"); ?? ??? ?printf("\t\t\t\t\t********************************\n"); ?? ??? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ??? ?printf("\t\t\t\t\t ? ? ?图书%d添加成功! ? ? ? \n", bend->get_id()); ?? ??? ?printf("\t\t\t\t\t** ? ? ? ? ? ? ? ? ? ? ? ? ? ?**\n"); ?? ??? ?printf("\t\t\t\t\t********************************\n"); ?? ??? ?Sleep(1000); ?? ??? ?fp->cls(); ?? ??? ?cout << "\n\n\n\n\n"; ?? ??? ?cout << "是否继续添加?\n" << "继续请按1,返回请按0:"; ?? ??? ?cin >> a; ?? ?} while (a == 1); ?? ?printf("页面即将跳转..."); ?? ?Sleep(1000); } void Manger::ChangeBook() { ?? ?DBFile* fp = new DBFile; ?? ?Book* p = bhead->get_next(); ?? ?int id; ?? ?int amount; ?? ?int flag = 0; ?? ?char bookname[200]; ?? ?char author[200]; ?? ?char press[200]; ?? ?int exist = 0; ?? ?int sign = 0; ?? ?Book* bp = bhead->get_next(); ?? ?bp->show_book(); ?? ?cout << "请输入要修改书名的id号(按0退出):"; ?? ?while (cin >> id) ?? ?{ ?? ??? ?if (id == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (p) ?? ??? ?{ ?? ??? ??? ?if (p->get_id() == id) ?? ??? ??? ?{ ?? ??? ??? ??? ?exist = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ??? ?if (!exist) ?? ??? ?{ ?? ??? ??? ?p = bhead->get_next(); ?? ??? ??? ?cout << "为查询到该id号!请重新输入(按0退出):"; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?if (!exist) ?? ?{ ?? ??? ?return; ?? ?} ?? ?else ?? ?{ ?? ??? ?int sign = 0; ?? ??? ?int choose; ?? ??? ?fp->cls(); ?? ??? ?changebookmenu(); ?? ??? ?while (1) ?? ??? ?{ ?? ??? ??? ?cout << "请输入您要进行的操作:"; ?? ??? ??? ?cin >> choose; ?? ??? ??? ?switch (choose) ?? ??? ??? ?{ ?? ??? ??? ?case 1: ?? ??? ??? ??? ?cout << "请输入修改后的id号:"; ?? ??? ??? ??? ?cin >> id; ?? ??? ??? ??? ?p->set_id(id); ?? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?cout << "请输入要修改后的图书名称:"; ?? ??? ??? ??? ?cin >> bookname; ?? ??? ??? ??? ?p->set_bookname(bookname); ?? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?cout << "请输入要修改后的作者:"; ?? ??? ??? ??? ?cin >> author; ?? ??? ??? ??? ?p->set_author(author); ?? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ?break; ?? ??? ??? ?case 4: ?? ??? ??? ??? ?cout << "请输入修改后的出版社:"; ?? ??? ??? ??? ?cin >> press; ?? ??? ??? ??? ?p->set_press(press); ?? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ?break; ?? ??? ??? ?case 5 : ?? ??? ??? ??? ?cout << "请输入修改后的图书数量:"; ?? ??? ??? ??? ?while (cin >> amount) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (amount <= 199 && amount > 0) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?p->set_amount(amount); ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?cout << "请输入0-199以内的图书数量:"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ?break; ?? ??? ??? ?case 6 : ?? ??? ??? ??? ?if (p->get_flag() == 1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "是否将此书修改为不可借?(1确认,2返回):"; ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?while (cin >> flag) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if (flag == 2) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ??? ?if (flag == 1) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?p->set_flag(1); ?? ??? ??? ??? ??? ??? ??? ?p->save(); ?? ??? ??? ??? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?cout << "请输入正确格式的借书标志!(1确认,2返回):"; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if (p->get_flag() == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?cout << "是否将此书修改为可借?(1确认,2返回):"; ?? ??? ??? ??? ??? ?while (cin >> flag) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if (flag == 2) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ??? ?if (flag == 1) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?p->set_flag(0); ?? ??? ??? ??? ??? ??? ??? ?p->save(); ?? ??? ??? ??? ??? ??? ??? ?cout << "修改成功!!\n"; ?? ??? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?cout << "请输入正确格式的借书标志!(1确认,2返回):"; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ??? ?case 7: ?? ??? ??? ??? ?sign = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?default : ?? ??? ??? ??? ?cout << "输入无效!!"; ?? ??? ??? ??? ?cin.clear(); ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?if (sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ?} } void Manger::DeleteBook() { ?? ?Book* bp = bhead->get_next(); ?? ?char bookname[20]; ?? ?int flag = 0; ?? ?bp->show_book(); ?? ?cout << "请输入您要删除图书的名称(按0退出):"; ?? ?while (cin >> bookname) ?? ?{ ?? ??? ?if (strcmp(bookname, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (bp) ?? ??? ?{ ?? ??? ??? ?if (bp->get_bookname() == bookname) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?bp = bp->get_next(); ?? ??? ?} ?? ??? ?if (flag == 0) ?? ??? ?{ ?? ??? ??? ?cout << "未查询到此书!\n" << "请重新输入(按0退出):"; ?? ??? ??? ?bp = bhead->get_next(); ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?DeleteReaderBook(bookname); ?? ?bp = bhead->get_next(); ?? ?Book* pp = bhead; ?? ?while (bp) ?? ?{// bp->next 可能是链表的最后一个 ?? ??? ?if (bp->get_bookname() == bookname) ?? ??? ?{ ?? ??? ??? ?if (bp->get_next() == NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?bhead->set_next(NULL); ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?pp->set_next(bp->get_next()); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?pp = pp->get_next(); ?? ??? ?bp = bp->get_next(); ?? ?} ?? ? ?? ?cout << "\n\n\n\n\n\n"; ?? ?cout << "图书" << bookname << "删除成功!!\n"; ?? ?cout << "页面即将跳转.."; ?? ?Sleep(1500); ?? ?Book* p = new Book; ?? ?p->save(); } void Manger::DeleteReaderBook(char* bookname) { ?? ?Reader* rp = rhead->get_next(); ?? ?Reader* pp = new Reader; ?? ?int flag = 0; ?? ?while (rp) ?? ?{ ?? ??? ?flag = 1; ?? ??? ?for (int i = 0; i < rp->get_bookcnt(); i++) ?? ??? ?{ ?? ??? ??? ?if (strcmp(rp->get_booklist(rp, i), bookname) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = i; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?if (flag != 1) ?? ??? ?{ ?? ??? ??? ?for (int j = flag; j < rp->get_bookcnt() - 1; j++) ?? ??? ??? ?{ ?? ??? ??? ??? ?strcpy(rp->get_booklist(rp, j), rp->get_booklist(rp, j + 1)); ?? ??? ??? ?} ?? ??? ??? ?int temp = rp->get_bookcnt(); ?? ??? ??? ?temp--; ?? ??? ??? ?rp->set_bookcnt(temp); ?? ??? ?} ?? ??? ?rp = rp->get_next(); ?? ?} ?? ?pp->save(); } void Manger::BrowseReader() { ?? ? ?? ?cout << "账户\t\t" << "密码\t\t" << "密保\t\t" << "性别\t\t" << "姓名\t\t" ?? ??? ?<< "学号\t\t" << "借书次数\n"; ?? ?Reader* rp = rhead->get_next(); ?? ?while (rp) ?? ?{ ?? ??? ? ?? ??? ?cout << rp->get_account(rp) << "\t\t" << rp->get_password(rp) << "\t\t" << rp->get_spassword(rp) << "\t\t"? ?? ??? ??? ?<< rp->get_sex() << "\t\t" << rp->get_name() << "\t\t" << rp->get_number() << "\t\t" << rp->get_bookcnt() << endl; ?? ??? ?rp = rp->get_next(); ?? ?} ?? ?system("pause"); } void Manger::FindPassword() { ?? ?Manger* mp = mhead->get_next(); ?? ?char password[200]; ?? ?char account[200]; ?? ?char spassword[200]; ?? ?int flag = 0; ?? ?int sign = 0; ?? ?cout << "请输入您的账户(按0退出):"; ?? ?while (cin >> account) ?? ?{ ?? ??? ?if (strcmp(account, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (mp) ?? ??? ?{ ?? ??? ??? ?if (strcmp(mp->get_account(mp), account) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?mp = mp->get_next(); ?? ??? ?} ?? ??? ?if (flag) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?printf("此账号不存在!请重新输入(按0退出):"); ?? ??? ??? ?mp = mhead->get_next(); ?? ??? ?} ?? ?} ?? ?if (flag) ?? ?{ ?? ??? ?mp = mhead->get_next(); ?? ??? ?printf("请输入您设置的密保(按0退出):"); ?? ??? ?while (cin >> spassword) ?? ??? ?{ ?? ??? ??? ?if (strcmp(spassword, "0") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?while (mp) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (strcmp(mp->get_spassword(mp), spassword) == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?sign = 1; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?mp = mp->get_next(); ?? ??? ??? ?} ?? ??? ??? ?if (sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("密保输入正确!\n"); ?? ??? ??? ??? ?printf("您的密码为%s\n", mp->get_password(mp)); ?? ??? ??? ??? ?system("pause"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("-------------密保输入错误!请重新输入(按0退出):"); ?? ??? ??? ??? ?mp = mhead->get_next(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } void Manger::ChangePassword() { ?? ?DBFile* fp = new DBFile; ?? ?Manger* p = mhead->get_next(), *mp = new Manger; ?? ?int flag = 0; ?? ?int sign = 0; ?? ?char maccount[200]; ?? ?char mpassword[200]; ?? ?char mspassword[200]; ?? ?cout << "请输入您的账户(按0退出):"; ?? ?while (cin >> maccount) ?? ?{ ?? ??? ?if (strcmp(maccount, "0") == 0) ?? ??? ?{ ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?while (p) ?? ??? ?{ ?? ??? ??? ?if (strcmp(p->account, maccount) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?p = p->get_next(); ?? ??? ?} ?? ??? ?if (flag) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout << "此账号不存在!请重新输入(按0退出):"; ?? ??? ??? ?p = mhead->get_next(); ?? ??? ?} ?? ?} ?? ?if (flag) ?? ?{ ?? ??? ?p = mhead->get_next(); ?? ??? ?cout << "请输入您设置的密保(按0退出):"; ?? ??? ?while (cin >> mspassword) ?? ??? ?{ ?? ??? ??? ?if (strcmp(mspassword, "0") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?while (p) ?? ??? ??? ?{ ?? ??? ??? ??? ?if (strcmp(p->spassword, mspassword) == 0) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?sign = 1; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?p = p->get_next(); ?? ??? ??? ?} ?? ??? ??? ?if (sign) ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "请输入修改后的密码(按0退出):"; ?? ??? ??? ??? ?while (cin >> mpassword) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if (strcmp(mpassword, "0") == 0) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?return; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (strlen(mpassword) <= 16) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?cout << "请输入长度为1到16位的密码(按0退出):"; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?strcpy_s(p->password, mpassword); ?? ??? ??? ??? ?cout << "密码修改成功!"; ?? ??? ??? ??? ?fp->usesave(p); ?? ??? ??? ??? ?system("pause"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?cout << "密保输入错误!!请重新输入(按0退出):"; ?? ??? ??? ??? ?p = mhead->get_next(); ?? ??? ??? ?} ?? ??? ?} ?? ?} } // 图书类 void Book::creat() { ?? ?ifstream f_book("book.txt", ios::in); ?? ?int id; ?? ?int amount; ?? ?int flag; ?? ?string bookname; ?? ?string author; ?? ?string press; ?? ?while (f_book >> id && f_book >> flag && f_book >> amount && f_book >> bookname ?? ??? ?&& f_book >> author && f_book >> press) ?? ?{ ?? ??? ?Book* p = new Book; ?? ??? ?p->id = id; ?? ??? ?p->flag = flag; ?? ??? ?p->amount = amount; ?? ??? ?p->bookname = bookname; ?? ??? ?p->author = author; ?? ??? ?p->press = press; ?? ??? ?bend->set_next(p); ?? ??? ?p->set_next(NULL); ?? ??? ?bend = bend->get_next(); ?? ?} ?? ?f_book.close(); } void Book::save() { ?? ?Book* bp = bhead->get_next(); ?? ?ofstream f_book("book.txt", ios::out); ?? ?while (bp) ?? ?{ ?? ??? ?f_book << bp->id << " " << bp->flag << " " << bp->amount << " " ?? ??? ??? ?<< bp->bookname << " " << bp->author << " " << bp->press << endl; ?? ??? ?bp = bp->get_next(); ?? ?} ?? ?f_book.close(); } void Book::show_book() { ?? ?Book* bp = bhead->get_next(); ?? ?cout << "id号\t\t" << "是否可借\t\t" << "数量\t\t" << "书名\t\t" << "作者\t\t" << "出版社\n"; ?? ?while (bp) ?? ?{ ?? ??? ?cout << bp->get_id() << "\t\t" << bp->get_flag() << "\t\t\t" << bp->get_amount() << "\t\t" ?? ??? ??? ?<< bp->get_bookname() << "\t\t" << bp->get_author() << "\t\t" << bp->get_press() << "\n"; ?? ??? ?bp = bp->get_next(); ?? ?} } int main() { ?? ?mhead = new Manger; mend = new Manger; mhead->set_next(NULL); mend = mhead; ?? ?rhead = new Reader; _rend = new Reader; rhead->set_next(NULL); _rend = rhead; ?? ?bhead = new Book; bend = new Book; bhead->set_next(NULL); bend = bhead; ?? ?Reader* rp = new Reader; rp->creat(); ?? ?Manger* mp = new Manger; mp->creat(); ?? ?Book* bp = new Book; bp->creat(); ?? ?DBFile* dbp = new DBFile; ?? ?system("color B"); ?? ?dbp->_main(); ?? ?delete dbp; ?? ?return 0; }
更多学习资料请关注专题《管理系统开发》。
更多技术内容来自木庄网络博客(www.1000zx.cn)
标签:帝国CMS
相关阅读 >>
帝国CMS7.0实现微博群发功能插件教程(支持28个微博平台支持定时发布)
通过syntaxhighlight实现帝国CMS代码高亮语法高亮(二) 在编辑器中加载
火车头wordpress2.9.2,3.0.1免登陆发布接口
更多相关阅读请进入《帝国CMS》频道 >>