本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下

大一 C++课设,没有用分文件的形式,只是把菜单页面单独分开了。用的是链表,都是一些基础的东西。另外采用了二维数组来保存读者借书信息,并将二维数组读入文件中。

功能:
1.首先是注册,登录,找回密码和修改密码功能,登录和注册使用了多态,并且登录页面采用了*符号加密。
2.管理员在删除图书时,若用户此时已将此书借走,则会将此书从用户的借书书单中删去,实现了动态管理。
3.容错率极高,每个页面都有返回上一页面的功能。
4.每个页面都有设置有滚键盘机制,提高了容错率。

菜单:
#pragma oncevoid _mainmenu();void Loginmenu();void Registmenu();void readermenu();void mangermenu();void changebookmenu();void browsemenu();
菜单文件
`#include “menu.h”

include <cstdio>

void _mainmenu()
{

  1. printf("\n\n");
  2. printf(" 欢 迎 使 用 图 书 管 理 系 统 !\n");
  3. printf(" **************************************************\n");
  4. printf(" ** 1.登录 **\n");
  5. printf(" ** **\n");
  6. printf(" ** 2.注册 **\n");
  7. printf(" ** **\n");
  8. printf(" ** 3.找回密码 **\n");
  9. printf(" ** **\n");
  10. printf(" ** 4.退出 **\n");
  11. printf(" **************************************************\n");
  12. 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 :

  1. virtual void Login();
  2. virtual void Regist();
  3. virtual void BrowseBook();
  4. virtual void save();
  5. virtual void ChangePassword();
  6. virtual void FindPassword();
  7. void creat();
  8. void AddBook();
  9. void ChangeBook();
  10. void DeleteBook();
  11. void DeleteReaderBook(char* bookname);
  12. 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 :

  1. void creat();
  2. void save();
  3. void show_book();
  4. void set_id(int _id) { id = _id; };
  5. void set_amount(int _amount) { amount = _amount; };
  6. void set_flag(int _flag) { flag = _flag; };
  7. void set_bookname(string _bookname) { bookname = _bookname; };
  8. void set_author(string _author) { author = _author; };
  9. void set_press(string _press) { press = _press; };
  10. void set_next(Book* p) { next = p; };
  11. int get_id() { return id; };
  12. int get_amount() { return amount; };
  13. int get_flag() { return flag; };
  14. string get_bookname() { return bookname; };
  15. string get_author() { return author; };
  16. string get_press() { return press; };
  17. 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位的账户:”;
}
}

  1. cout << "请输入您的密码(按0退出):";
  2. for (i = 0; (c = _getch()) != '\r';)
  3. {
  4. if (c == '0')
  5. {
  6. return;
  7. }
  8. if (i <= 15 && isprint(c))
  9. {
  10. rpassword[i] = c;
  11. i++;
  12. k++;
  13. cout << "*";
  14. }
  15. if (k > 0 && c > 0 && c == '\b')
  16. {
  17. i--;
  18. k--;
  19. cout << "\b";
  20. cout << " ";
  21. cout << "\b";
  22. }
  23. }
  24. rpassword[i] = '\0';
  25. cout << "\n";
  26. while (p)
  27. {
  28. if (strcmp(p->account, raccount) == 0)
  29. {
  30. flag = 1;
  31. while (strcmp(p->password, rpassword) != 0)
  32. {
  33. cnt--;
  34. if (cnt == 1)
  35. {
  36. fp->cls();
  37. cout << "\n\n\n\n\n\n\n";
  38. cout << "密码输入次数已用完! " << "\n" << "即将退出登录页面...";
  39. Sleep(3000);
  40. fp->cls();
  41. return;
  42. }
  43. cout << "密码错误!您还有" << cnt - 1 << "次机会\n" << endl;
  44. cout << "请重新输入(按0退出):";
  45. k = 0;
  46. for (i = 0; (c = _getch()) != '\r';)
  47. {
  48. if (c == '0')
  49. {
  50. return;
  51. }
  52. if (i <= 15 && isprint(c))
  53. {
  54. rpassword[i] = c;
  55. i++;
  56. k++;
  57. cout << "*";
  58. }
  59. if (k > 0 && c > 0 && c == '\b')
  60. {
  61. i--;
  62. k--;
  63. cout << "\b";
  64. cout << " ";
  65. cout << "\b";
  66. }
  67. }
  68. rpassword[i] = '\0';
  69. cout << "\n";
  70. }
  71. cout << "读者" << raccount << "登陆成功!\n" << "即将跳转至读者页面..." << endl;
  72. Sleep(2000);
  73. fp->cls();
  74. fp->readerfunction(p);
  75. return;
  76. }
  77. p = p->get_next();
  78. }
  79. if (!flag)
  80. {
  81. cout << "不存在此账号!\n请先前往注册!\n" << endl;
  82. cout << "即将跳转至主页面...";
  83. Sleep(2000);
  84. }

}

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;

  1. Reader* p = new Reader;
  2. cout << "\n\n\n\n\n\n\n";
  3. cout << "请输入账户(按0退出):";
  4. while (cin >> raccount)
  5. {
  6. if (strcmp(raccount, "0") == 0)
  7. {
  8. return;
  9. }
  10. if (strlen(raccount) <= 16 && !fp->exist(raccount, 0))
  11. {
  12. break;
  13. }
  14. else if (fp->exist(raccount, 1))
  15. {
  16. cout << "该账户已存在!请重新输入(按0退出):";
  17. }
  18. else
  19. {
  20. cout << "请输入长度为1到16位的账户:";
  21. }
  22. }
  23. strcpy_s(p->account, raccount);
  24. cout << "请输入密码(按0退出):";
  25. while (cin >> rpassword)
  26. {
  27. if (strcmp(rpassword, "0") == 0)
  28. {
  29. return;
  30. }
  31. if (strlen(rpassword) <= 16)
  32. {
  33. break;
  34. }
  35. else
  36. {
  37. cout << "请输入长度为1到16位的密码(按0退出):";
  38. }
  39. }
  40. strcpy_s(p->password, rpassword);
  41. cout << "请输入您的密保(按0退出):";
  42. while (cin >> rspassword)
  43. {
  44. if (strcmp(rspassword, "0") == 0)
  45. {
  46. return;
  47. }
  48. if (strlen(rspassword) <= 16)
  49. {
  50. break;
  51. }
  52. else
  53. {
  54. cout << "请输入长度为1到16位的密保(按0退出):";
  55. }
  56. }
  57. strcpy_s(p->spassword, rspassword);
  58. cout << "请输入您的姓名(按0退出):";
  59. cin >> name;
  60. if (strcmp(name, "0") == 0)
  61. {
  62. return;
  63. }
  64. p->name = name;
  65. cout << "请输入您的性别(按0退出):";
  66. while (cin >> sex)
  67. {
  68. if (strcmp(sex, "0") == 0)
  69. {
  70. return;
  71. }
  72. if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0)
  73. {
  74. p->sex = sex;
  75. break;
  76. }
  77. else
  78. {
  79. cout << "请输入男或女(按0退出):";
  80. }
  81. }
  82. cout << "请输入您的学号(按0退出):";
  83. while (cin >> number)
  84. {
  85. if (number == 0)
  86. {
  87. return;
  88. }
  89. if (number >= 0)
  90. {
  91. p->number = number;
  92. break;
  93. }
  94. else
  95. {
  96. cout << "请输入正确格式的学号(按0退出):";
  97. }
  98. }
  99. _rend->set_next(p);
  100. _rend = p;
  101. _rend->set_next(NULL);
  102. rp->save();
  103. fp->cls();
  104. printf("\n\n\n\n\n\n\n");
  105. printf("\t\t\t\t\t*******************************\n");
  106. printf("\t\t\t\t\t** **\n");
  107. printf("\t\t\t\t\t 读者%s注册成功!! \n", raccount);
  108. printf("\t\t\t\t\t** 即将跳转至主页面... **\n");
  109. printf("\t\t\t\t\t** **\n");
  110. printf("\t\t\t\t\t*******************************\n");
  111. 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”);

  1. for (int i = 0; i < cnt; i++)
  2. {
  3. printf("\t第%d次借阅的书籍:", i + 1);
  4. printf("%s\t", pp->get_booklist(pp, i));
  5. cout << "借阅数量:" << pp->get_books() << endl;
  6. }
  7. printf("\n\n请输入0退出:");
  8. while (scanf("%lld", &sign))
  9. {
  10. if (sign == 0)
  11. {
  12. break;
  13. }
  14. else
  15. {
  16. printf("-------------无效的输入!请重新输入!");
  17. }
  18. }

}

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;

  1. cout << "\n\n\n\n";
  2. cout << "请输入要借书的名称(按0退出):";
  3. cin >> bookname;
  4. if (strcmp(bookname, "0") == 0)
  5. {
  6. return;
  7. }
  8. while (bp)
  9. {
  10. if (bp->get_bookname() == bookname)
  11. {
  12. if (bp->get_amount() == 0)
  13. {
  14. cout << "此书无余量!\n";
  15. sign = 0;
  16. }
  17. if (bp->get_flag() == 0)
  18. {
  19. cout << "此书不可借!\n";
  20. flag = 0;
  21. }
  22. if (sign == 1 && flag == 1)
  23. {
  24. cout << "请输入要借阅书籍的数量:";
  25. while (cin >> amount)
  26. {
  27. if (bp->get_amount() < amount)
  28. {
  29. cout << "借阅数量超过此书已有库存!请重新输入:";
  30. }
  31. else
  32. {
  33. int a = pp->get_books() + amount;
  34. pp->set_books(a);
  35. int b = bp->get_amount() - amount;
  36. bp->set_amount(b);
  37. break;
  38. }
  39. }
  40. pp->bookcnt++;
  41. strcpy_s(pp->booklist[pp->bookcnt - 1], bookname);
  42. pp->save();
  43. bp->save();
  44. exist = 1;
  45. break;
  46. }
  47. }
  48. bp = bp->get_next();
  49. }
  50. if (exist == 0 && sign == 1 && flag == 1)
  51. {
  52. cout << "不存在此书!!\n";
  53. }
  54. else if (exist == 1)
  55. {
  56. cout << "图书:" << bookname << "借阅成功!!\n";
  57. }
  58. cout << "页面即将跳转...";
  59. 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();

  1. switch (choose)
  2. {
  3. case 1:
  4. cls();
  5. usefindpassword(mp);
  6. sign = 1;
  7. break;
  8. case 2:
  9. cls();
  10. usefindpassword(mp);
  11. sign = 1;
  12. break;
  13. case 3:
  14. sign = 1;
  15. break;
  16. default:
  17. printf("输入无效!");
  18. break;
  19. }
  20. if (sign)
  21. {
  22. break;
  23. }
  24. }

}
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位的账户:”;
}
}

  1. cout << "请输入您的密码(按0退出):";
  2. for (i = 0; (c = _getch()) != '\r';)
  3. {
  4. if (c == '0')
  5. {
  6. return;
  7. }
  8. if (i <= 15 && isprint(c))
  9. {
  10. mpassword[i] = c;
  11. i++;
  12. k++;
  13. printf("*");
  14. }
  15. if (k > 0 && c > 0 && c == '\b')
  16. {
  17. i--;
  18. k--;
  19. printf("\b");
  20. printf(" ");
  21. printf("\b");
  22. }
  23. }
  24. mpassword[i] = '\0';
  25. printf("\n");
  26. while (p)
  27. {
  28. if (strcmp(p->account, maccount) == 0)
  29. {
  30. flag = 1;
  31. while (strcmp(p->password, mpassword) != 0)
  32. {
  33. cnt--;
  34. if (cnt == 1)
  35. {
  36. fp->cls();
  37. cout << "\n\n\n\n\n\n\n";
  38. cout << "密码输入次数已用完! " << "\n" << "即将退出登录页面...";
  39. Sleep(3000);
  40. fp->cls();
  41. return;
  42. }
  43. cout << "密码错误!您还有"<< cnt - 1 << "次机会\n"<< endl;
  44. cout << "请重新输入(按0退出):";
  45. k = 0;
  46. for (i = 0; (c = _getch()) != '\r';)
  47. {
  48. if (c == '0')
  49. {
  50. return;
  51. }
  52. if (i <= 15 && isprint(c))
  53. {
  54. mpassword[i] = c;
  55. i++;
  56. k++;
  57. printf("*");
  58. }
  59. if (k > 0 && c > 0 && c == '\b')
  60. {
  61. i--;
  62. k--;
  63. printf("\b");
  64. printf(" ");
  65. printf("\b");
  66. }
  67. }
  68. mpassword[i] = '\0';
  69. printf("\n");
  70. }
  71. cout << "管理员"<< maccount << "登陆成功!\n" << "即将跳转至管理员页面..." << endl;
  72. Sleep(2000);
  73. fp->cls();
  74. fp->mangerfunction();
  75. return;
  76. }
  77. p = p->get_next();
  78. }
  79. if (!flag)
  80. {
  81. cout << "不存在此账号!\n请先前往注册!\n" << endl;
  82. cout << "即将跳转至主页面...";
  83. Sleep(2000);
  84. }

}
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);

  1. mp->save();
  2. fp->cls();
  3. printf("\n\n\n\n\n\n\n");
  4. printf("\t\t\t\t\t*******************************\n");
  5. printf("\t\t\t\t\t** **\n");
  6. printf("\t\t\t\t\t 管理员%s注册成功!! \n", maccount);
  7. printf("\t\t\t\t\t** 即将跳转至主页面... **\n");
  8. printf("\t\t\t\t\t** **\n");
  9. printf("\t\t\t\t\t*******************************\n");
  10. 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];

  1. ifstream f_manger("manger.txt", ios::in);
  2. while (f_manger >> account && f_manger >> password && f_manger >> spassword)
  3. {
  4. Manger* p = new Manger;
  5. strcpy_s(p->account, account);
  6. strcpy_s(p->password, password);
  7. strcpy_s(p->spassword, password);
  8. mend->set_next(p);
  9. p->set_next(NULL);
  10. mend = mend->get_next();
  11. }
  12. 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() << “添加成功!”;

  1. break;
  2. }
  3. else
  4. {
  5. cout << "请输入数量为0-199以内的图书:";
  6. }
  7. }
  8. }
  9. else
  10. {
  11. p = new Book;
  12. p->set_id(id);
  13. cout << "请输入增加图书的数量:";
  14. while (cin >> amount)
  15. {
  16. if (amount <= 199 && amount > 0)
  17. {
  18. p->set_amount(amount);
  19. break;
  20. }
  21. else
  22. {
  23. cout << "请输入数量为0-199范围以内的图书:";
  24. }
  25. }
  26. cout << "请输入是否可借:";
  27. int sign = 0;
  28. while (cin >> sign)
  29. {
  30. if (sign == 1 || sign == 0)
  31. {
  32. p->set_flag(sign);
  33. break;
  34. }
  35. else if (sign < 0 || sign > 1)
  36. {
  37. cout << "请输入正确格式的可借标志(1为可借,0为不可借):";
  38. }
  39. }
  40. char bookname[200];
  41. cout << "请输入书名:";
  42. cin >> bookname;
  43. p->set_bookname(bookname);
  44. char author[200];
  45. cout << "请输作者:";
  46. cin >> author;
  47. p->set_author(author);
  48. char press[200];
  49. cout << "请输入出版社:";
  50. cin >> press;
  51. p->set_press(press);
  52. bend->set_next(p);
  53. bend = p;
  54. bend->set_next(NULL);
  55. }
  56. p->save();
  57. fp->cls();
  58. printf("\n\n\n\n\n\n");
  59. printf("\t\t\t\t\t********************************\n");
  60. printf("\t\t\t\t\t** **\n");
  61. printf("\t\t\t\t\t 图书%d添加成功! \n", bend->get_id());
  62. printf("\t\t\t\t\t** **\n");
  63. printf("\t\t\t\t\t********************************\n");
  64. Sleep(1000);
  65. fp->cls();
  66. cout << "\n\n\n\n\n";
  67. cout << "是否继续添加?\n" << "继续请按1,返回请按0:";
  68. cin >> a;
  69. } while (a == 1);
  70. printf("页面即将跳转...");
  71. 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;

  1. Book* bp = bhead->get_next();
  2. bp->show_book();
  3. cout << "请输入要修改书名的id号(按0退出):";
  4. while (cin >> id)
  5. {
  6. if (id == 0)
  7. {
  8. return;
  9. }
  10. while (p)
  11. {
  12. if (p->get_id() == id)
  13. {
  14. exist = 1;
  15. break;
  16. }
  17. p = p->get_next();
  18. }
  19. if (!exist)
  20. {
  21. p = bhead->get_next();
  22. cout << "为查询到该id号!请重新输入(按0退出):";
  23. }
  24. else
  25. {
  26. break;
  27. }
  28. }
  29. if (!exist)
  30. {
  31. return;
  32. }
  33. else
  34. {
  35. int sign = 0;
  36. int choose;
  37. fp->cls();
  38. changebookmenu();
  39. while (1)
  40. {
  41. cout << "请输入您要进行的操作:";
  42. cin >> choose;
  43. switch (choose)
  44. {
  45. case 1:
  46. cout << "请输入修改后的id号:";
  47. cin >> id;
  48. p->set_id(id);
  49. cout << "修改成功!!\n";
  50. break;
  51. case 2:
  52. cout << "请输入要修改后的图书名称:";
  53. cin >> bookname;
  54. p->set_bookname(bookname);
  55. cout << "修改成功!!\n";
  56. break;
  57. case 3:
  58. cout << "请输入要修改后的作者:";
  59. cin >> author;
  60. p->set_author(author);
  61. cout << "修改成功!!\n";
  62. break;
  63. case 4:
  64. cout << "请输入修改后的出版社:";
  65. cin >> press;
  66. p->set_press(press);
  67. cout << "修改成功!!\n";
  68. break;
  69. case 5 :
  70. cout << "请输入修改后的图书数量:";
  71. while (cin >> amount)
  72. {
  73. if (amount <= 199 && amount > 0)
  74. {
  75. p->set_amount(amount);
  76. break;
  77. }
  78. else
  79. {
  80. cout << "请输入0-199以内的图书数量:";
  81. }
  82. }
  83. cout << "修改成功!!\n";
  84. break;
  85. case 6 :
  86. if (p->get_flag() == 1)
  87. {
  88. cout << "是否将此书修改为不可借?(1确认,2返回):";
  89. while (cin >> flag)
  90. {
  91. if (flag == 2)
  92. {
  93. break;
  94. }
  95. if (flag == 1)
  96. {
  97. p->set_flag(1);
  98. p->save();
  99. cout << "修改成功!!\n";
  100. break;
  101. }
  102. else
  103. {
  104. cout << "请输入正确格式的借书标志!(1确认,2返回):";
  105. }
  106. }
  107. }
  108. else if (p->get_flag() == 0)
  109. {
  110. cout << "是否将此书修改为可借?(1确认,2返回):";
  111. while (cin >> flag)
  112. {
  113. if (flag == 2)
  114. {
  115. break;
  116. }
  117. if (flag == 1)
  118. {
  119. p->set_flag(0);
  120. p->save();
  121. cout << "修改成功!!\n";
  122. break;
  123. }
  124. else
  125. {
  126. cout << "请输入正确格式的借书标志!(1确认,2返回):";
  127. }
  128. }
  129. }
  130. break;
  131. case 7:
  132. sign = 1;
  133. break;
  134. default :
  135. cout << "输入无效!!";
  136. cin.clear();
  137. break;
  138. }
  139. if (sign)
  140. {
  141. break;
  142. }
  143. }
  144. }

}
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();
}

  1. cout << "\n\n\n\n\n\n";
  2. cout << "图书" << bookname << "删除成功!!\n";
  3. cout << "页面即将跳转..";
  4. Sleep(1500);
  5. Book* p = new Book;
  6. p->save();

}
void Manger::DeleteReaderBook(char bookname)
{
Reader
rp = rhead->get_next();
Reader* pp = new Reader;
int flag = 0;

  1. while (rp)
  2. {
  3. flag = 1;
  4. for (int i = 0; i < rp->get_bookcnt(); i++)
  5. {
  6. if (strcmp(rp->get_booklist(rp, i), bookname) == 0)
  7. {
  8. flag = i;
  9. break;
  10. }
  11. }
  12. if (flag != 1)
  13. {
  14. for (int j = flag; j < rp->get_bookcnt() - 1; j++)
  15. {
  16. strcpy(rp->get_booklist(rp, j), rp->get_booklist(rp, j + 1));
  17. }
  18. int temp = rp->get_bookcnt();
  19. temp--;
  20. rp->set_bookcnt(temp);
  21. }
  22. rp = rp->get_next();
  23. }
  24. pp->save();

}
void Manger::BrowseReader()
{

  1. cout << "账户\t\t" << "密码\t\t" << "密保\t\t" << "性别\t\t" << "姓名\t\t"
  2. << "学号\t\t" << "借书次数\n";
  3. Reader* rp = rhead->get_next();
  4. while (rp)
  5. {
  6. cout << rp->get_account(rp) << "\t\t" << rp->get_password(rp) << "\t\t" << rp->get_spassword(rp) << "\t\t"
  7. << rp->get_sex() << "\t\t" << rp->get_name() << "\t\t" << rp->get_number() << "\t\t" << rp->get_bookcnt() << endl;
  8. rp = rp->get_next();
  9. }
  10. 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;

  1. bend->set_next(p);
  2. p->set_next(NULL);
  3. bend = bend->get_next();
  4. }
  5. 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;

  1. rhead = new Reader; _rend = new Reader; rhead->set_next(NULL); _rend = rhead;
  2. bhead = new Book; bend = new Book; bhead->set_next(NULL); bend = bhead;
  3. Reader* rp = new Reader; rp->creat();
  4. Manger* mp = new Manger; mp->creat();
  5. Book* bp = new Book; bp->creat();
  6. DBFile* dbp = new DBFile;
  7. system("color B");
  8. dbp->_main();
  9. delete dbp;
  10. return 0;

}`

更多相关文章

  1. 如何在Android平板电脑POWER按钮菜单中添加休眠功能
  2. Android中使用高德地图inflating class com.amap.api.maps.MapVi
  3. android 修改actionbar title文字颜色等属性
  4. Android(安卓)为【apk】文件签名,增加修改系统时间等权限
  5. Android(安卓)前置摄像头的默认是180度,导致应用拍照和录制视频是
  6. Android-TCPDump for Android(抓TCP数据包工具)
  7. Android:实现退出确认对话框
  8. 修改android项目sdk版本的方法
  9. [Android(安卓)M] Bluedroid修改蓝牙默认名称

随机推荐

  1. Android:BroadcastReceiver 随记
  2. android开发积累4-android使用HttpURLCon
  3. Android中TextView中内容不换行的解决方
  4. android点滴(15)--ubuntu下配置Android s
  5. 简单实现Android顶部工具栏和底部工具栏(
  6. Android kernel 编译
  7. Android(安卓)UI系列-----CheckBox和Radi
  8. Android 带有角标的imageview,类似于qq、
  9. android 5.0多用户支持
  10. 【Android 界面效果12】EditText中的多行