21xrx.com
2025-03-29 23:49:49 Saturday
文章检索 我的文章 写文章
C++图书管理系统课程设计:完整源代码
2023-06-30 06:46:49 深夜i     10     0
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++图书管理系统的完整源代码,希望可以对大家有所帮助,也希望同学们在使用的时候,能够多多思考,加深对面向对象编程和数据库操作的认识。

  
  

评论区

    相似文章