21xrx.com
2024-09-20 00:56:25 Friday
登录
文章检索 我的文章 写文章
C++图书管理系统课程设计:完整源代码
2023-06-30 06:46:49 深夜i     --     --
C++ 图书管理系统 课程设计 完整源代码

C++图书管理系统是一个经典的课程设计项目,它充分体现了面向对象编程的思想,同时也让我们了解了数据库的基本操作。在这个项目中,我们可以实现对图书的管理、查询、添加、删除等操作,使图书馆的管理更加规范和高效。

下面是该项目的完整源代码,包含了所有相关的头文件和函数,代码风格简洁明了,可以供同学们参考学习和使用。


#include<iostream>

#include<fstream>

#include<cstring>

#include<cstdio>

#include<conio.h>

#include<Windows.h>

#include<mysql.h>

#pragma comment(lib,"libmysql.lib")

using namespace std;

MYSQL conn;

class library     // 图书类

{

public:

  char id[10], name[100], author[100], pub[100], category[40];

  int amount;

};

class manager      // 管理员类

{

public:

  char id[20], pwd[20], name[100];

};

class user      // 用户类

{

public:

  char id[20], pwd[20], name[100];

};

class server     // 服务类

{

public:

  MYSQL_ROW row;

  MYSQL_RES *res;

  int sele;

  char checkid[40], checkpwd[40];

  library book;

  manager admin;

  user this_user;

  void mainmenu();      // 主菜单函数

  void booksystem();     // 图书管理系统函数

  void managesystem();    // 管理员系统函数

  void usersystem();     // 用户系统函数

  int checkidpwd(char id[], char pwd[], int type);     // 检查id和pwd函数

  void searchbook();     // 查询图书函数

  void addbook();       // 添加图书函数

  void deletebook();     // 删除图书函数

  void borrowbook();     // 借阅图书函数

  void returnbook();     // 归还图书函数

  void xianshibaoliu();    // 显示全部函数

private:

  void changecolor(int color);   // 改变颜色函数

};

void server::mainmenu()  // 主菜单函数

{

  int menu;

  while (1)

  {

    system("cls");

    changecolor(7);   // 改变颜色为白色

    cout << "******** 欢迎使用图书管理系统 ********" << endl;

    cout << "请输入您的身份:" << endl;

    cout << "[1] 管理员" << endl;

    cout << "[2] 用户" << endl;

    cout << "[3] 退出系统" << endl;

    menu = _getch() - '0';

    switch (menu)

    {

    case 1:

      managesystem();

      break;

    case 2:

      usersystem();

      break;

    case 3:

      exit(0);

    default:

      cout << "输入有误,请重新选择!" << endl;

      system("pause");

      break;

    }

  }

}

void server::managesystem() // 管理员系统函数

{

  int menu;

  while (1)

  {

    system("cls");

    changecolor(7);   // 改变颜色为白色

    cout << "******** 管理员系统 ********" << endl;

    cout << "请输入管理员账号:" << endl;

    cin >> admin.id;

    cout << "请输入管理员密码:" << endl;

    cin >> admin.pwd;

    if (checkidpwd(admin.id, admin.pwd, 1))

    {

      cout << "管理员 [" << admin.name << "] 登录成功!" << endl;

      system("pause");

      break;

    }

    else

    {

      cout << "账号或密码错误!" << endl;

      system("pause");

    }

  }

  while (1)

  {

    system("cls");

    changecolor(7);   // 改变颜色为白色

    cout << "********管理员系统********" << endl;

    cout << "请选择操作:" << endl;

    cout << "[1] 图书管理" << endl;

    cout << "[2] 返回主菜单" << endl;

    menu = _getch() - '0';

    switch (menu)

    {

    case 1: booksystem(); break;

    case 2: return; break;

    default:

      cout << "输入有误,请重新选择!" << endl;

      system("pause");

      break;

    }

  }

}

int server::checkidpwd(char id[], char pwd[], int type)  // 检查id和pwd函数

{

  if (type == 1)   // 检查管理员账号和密码

  {

    int s = 0;

    char query[100];

    sprintf_s(query, "SELECT * FROM admin WHERE id='%s' and pwd='%s'", id, pwd);

    mysql_query(&conn, query);

    res = mysql_store_result(&conn);

    if (res)

    {

      while (row = mysql_fetch_row(res))

      {

        s++;

        strcpy_s(admin.name, row[1]);

      }

    }

    else

      return 0;

    mysql_free_result(res);

    if (s == 1)

      return 1;

    else

      return 0;

  }

  else if (type == 2)   // 检查用户账号和密码

  {

    int s = 0;

    char query[100];

    sprintf_s(query, "SELECT * FROM user WHERE id='%s' and pwd='%s'", id, pwd);

    mysql_query(&conn, query);

    res = mysql_store_result(&conn);

    if (res)

    {

      while (row = mysql_fetch_row(res))

      {

        s++;

        strcpy_s(this_user.name, row[1]);

      }

    }

    else

      return 0;

    mysql_free_result(res);

    if (s == 1)

      return 1;

    else

      return 0;

  }

  else         // 检查图书管理员账号和密码

  {

    int s = 0;

    char query[100];

    sprintf_s(query, "SELECT * FROM bookadmin WHERE id='%s' and pwd='%s'", id, pwd);

    mysql_query(&conn, query);

    res = mysql_store_result(&conn);

    if (res)

    {

      while (row = mysql_fetch_row(res))

      {

        s++;

      }

    }

    else

      return 0;

    mysql_free_result(res);

    if (s == 1)

      return 1;

    else

      return 0;

  }

}

void server::usersystem()   // 用户系统函数

{

  int menu;

  while (1)

  {

    system("cls");

    changecolor(7);     // 改变颜色为白色

    cout << "******** 用户系统 ********" << endl;

    cout << "请输入用户账号:" << endl;

    cin >> this_user.id;

    cout << "请输入用户密码:" << endl;

    cin >> this_user.pwd;

    if (checkidpwd(this_user.id, this_user.pwd, 2))

    {

      cout << "用户 [" << this_user.name << "] 登录成功!" << endl;

      system("pause");

      break;

    }

    else

    {

      cout << "账号或密码错误!" << endl;

      system("pause");

    }

  }

  while (1)

  {

    system("cls");

    changecolor(7);   // 改变颜色为白色

    cout << "******** 用户系统 ********" << endl;

    cout << "请选择操作:" << endl;

    cout << "[1] 查询图书" << endl;

    cout << "[2] 借阅图书" << endl;

    cout << "[3] 归还图书" << endl;

    cout << "[4] 返回主菜单" << endl;

    menu = _getch() - '0';

    switch (menu)

    {

    case 1: searchbook(); break;

    case 2: borrowbook(); break;

    case 3: returnbook(); break;

    case 4: return; break;

    default:

      cout << "输入有误,请重新选择!" << endl;

      system("pause");

      break;

    }

  }

}

void server::booksystem()   // 图书管理系统函数

{

  char query[500];

  int menu;

  while (1)

  {

    system("cls");

    changecolor(7);   // 改变颜色为白色

    cout << "******** 图书管理系统 ********" << endl;

    cout << "请选择操作:" << endl;

    cout << "[1] 查询图书" << endl;

    cout << "[2] 添加图书" << endl;

    cout << "[3] 删除图书" << endl;

    cout << "[4] 显示全部" << endl;

    cout << "[5] 返回" << endl;

    menu = _getch() - '0';

    switch (menu)

    {

    case 1: searchbook(); break;

    case 2: addbook(); break;

    case 3: deletebook(); break;

    case 4: xianshibaoliu(); break;

    case 5: return; break;

    default:

      cout << "输入有误,请重新选择!" << endl;

      system("pause");

      break;

    }

  }

}

void server::searchbook()   // 查询图书函数

{

  char selectstr[40];

  system("cls");

  changecolor(7);      // 改变颜色为白色

  cout << "请输入查询方式:" << endl;

  cout << "[1] 书名" << endl;

  cout << "[2] 作者" << endl;

  cout << "[3] 出版社" << endl;

  cout << "[4] 类别" << endl;

  cout << "[5] 关键字" << endl;

  sele = _getch() - '0';

  switch (sele)

  {

  case 1: strcpy_s(selectstr, "name"); break;

  case 2: strcpy_s(selectstr, "author"); break;

  case 3: strcpy_s(selectstr, "pub"); break;

  case 4: strcpy_s(selectstr, "category"); break;

  case 5: strcpy_s(selectstr, "name"); break;

  default: break;

  }

  system("cls");

  changecolor(7);      // 改变颜色为白色

  char inputstr[100];

  cout << "请输入要查询的图书信息:" << endl;

  cin >> inputstr;

  getchar();

  char query[500];

  sprintf_s(query, "SELECT * FROM book WHERE %s LIKE '%%%s%%'", selectstr, inputstr);

  mysql_query(&conn, query);

  res = mysql_store_result(&conn);

  int num_rows = mysql_num_rows(res);

  if (num_rows)

  {

    int count = 0;

    while (row = mysql_fetch_row(res))

    {

      cout << row[0] << "\t问题:" << row[1] << endl;

      cout << "答案:" << row[2] << endl;

      cout << "点赞数:" << row[3] << endl;

      count++;

    }

    cout << "共检索到 " << count << " 条数据!" << endl;

  }

  else

    cout << "没有检索到相关数据!" << endl;

  mysql_free_result(res);

  system("pause");

}

void server::addbook()    // 添加图书函数

{

  system("cls");

  changecolor(7);     // 改变颜色为白色

  cout << "请输入书本编号:" << endl;

  cin >> book.id;

  cout << "请输入书名:" << endl;

  cin >> book.name;

  cout << "请输入作者:" << endl;

  cin >> book.author;

  cout << "请输入出版社:" << endl;

  cin >> book.pub;

  cout << "请输入类别:" << endl;

  cin >> book.category;

  cout << "请输入数量:" << endl;

  cin >> book.amount;

  char query[500];

  sprintf_s(query, "INSERT INTO book(id,name,author,pub,category,amount) values('%s','%s','%s','%s','%s',%d)", book.id, book.name, book.author, book.pub, book.category, book.amount);

  mysql_query(&conn, query);

  int res = mysql_affected_rows(&conn);

  if (res)

    cout << "添加图书成功!" << endl;

  else

    cout << "添加图书失败!" << endl;

  system("pause");

}

void server::deletebook()    // 删除图书函数

{

  system("cls");

  changecolor(7);     // 改变颜色为白色

  cout << "请输入要删除的图书编号:" << endl;

  cin >> book.id;

  char query[500];

  sprintf_s(query, "DELETE FROM book WHERE id='%s'", book.id);

  mysql_query(&conn, query);

  int res = mysql_affected_rows(&conn);

  if (res)

    cout << "删除图书成功!" << endl;

  else

    cout << "删除图书失败!" << endl;

  system("pause");

}

void server::borrowbook()   // 借阅图书函数

{

  system("cls");

  changecolor(7);

  cout << "输入要借阅的书本编号:" << endl;

  cin >> book.id;

  char query[500];

  sprintf_s(query, "SELECT * FROM book WHERE id='%s'", book.id);

  mysql_query(&conn, query);

  res = mysql_store_result(&conn);

  int num_rows = mysql_num_rows(res);

  if (num_rows)

  {

    while (row = mysql_fetch_row(res))

    {

      if (atoi(row[5]) > 0)

      {

        int amount = atoi(row[5]) - 1;

        sprintf_s(query, "UPDATE book set amount='%d' WHERE id='%s'", amount, book.id);

        mysql_query(&conn, query);

        sprintf_s(query, "INSERT INTO userborrow(id,borrowuser,borrowtime) values('%s','%s',NOW())", book.id, this_user.name);

        mysql_query(&conn, query);

        cout << "借阅成功!" << endl;

      }

      else

        cout << "本书已全部借出!" << endl;

    }

  }

  else

    cout << "查询不到此书!" << endl;

  mysql_free_result(res);

  system("pause");

}

void server::returnbook()   // 归还图书函数

{

  system("cls");

  changecolor(7);

  cout << "输入要归还的书本编号:" << endl;

  cin >> book.id;

  char query[500];

  sprintf_s(query, "SELECT * FROM userborrow WHERE id='%s'", book.id);

  mysql_query(&conn, query);

  res = mysql_store_result(&conn);

  int num_rows = mysql_num_rows(res);

  if (num_rows)

  {

    while (row = mysql_fetch_row(res))

    {

      if (strcmp(row[2], this_user.name) == 0)

      {

        sprintf_s(query, "UPDATE book set amount=amount+1 WHERE id='%s'", book.id);

        mysql_query(&conn, query);

        sprintf_s(query, "DELETE FROM userborrow WHERE id='%s'", book.id);

        mysql_query(&conn, query);

        cout << "还书成功!" << endl;

      }

      else

        cout << "不是您借的此书!" << endl;

    }

  }

  else

    cout << "查询不到此书!" << endl;

  mysql_free_result(res);

  system("pause");

}

void server::xianshibaoliu()    // 显示全部函数

{

  char query[100] = "SELECT * FROM book";

  mysql_query(&conn, query);

  res = mysql_store_result(&conn);

  cout << "编号\t书名\t作者\t出版社\t类别\t数量\r\n";

  while (row = mysql_fetch_row(res))

    printf("%s\t%s\t%s\t%s\t%s\t%s\r\n", row[0], row[1], row[2], row[3], row[4], row[5]);  // 横向显示数据

  mysql_free_result(res);

  system("pause");

}

void server::changecolor(int color)     // 改变控制台颜色函数

{

  HANDLE hConsole;

  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(hConsole, color);

}

int main()

{

  mysql_init(&conn);

  mysql_real_connect(&conn, "localhost", "root", "123456", "bookmanage", 3306, NULL, 0);

  mysql_query(&conn, "set names gbk");

  server s;

  s.mainmenu();

  mysql_close(&conn);

  return 0;

}

以上便是C++图书管理系统的完整源代码,希望可以对大家有所帮助,也希望同学们在使用的时候,能够多多思考,加深对面向对象编程和数据库操作的认识。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复