首页 > 作文

C++图书管理系统程序源代码

更新时间:2023-04-06 03:14:49 阅读: 评论:0

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

大一期末c++综合实验,功能基本都实现了,但是代码写的有些繁琐,还有很大的优化空间,仅供参考。

实验要求

实验目的:

1、能够综合运用面向对象程序设计方法,设计实现一个相对完整信息管理应用程序。
2、能够适当进行题目分析、实验设计、核心代码描述、实验结果分析等。

实验:设计并编写一个c++风格应用程序,模拟一个图书管理系统应用程序,支持系统用户的图书借阅、图书管理、用户管理等功能。图书借阅管理主要包括图书借阅、图书归还、借阅信息查看等功能。图书管理主要包括图书的增加、删除、修改、查看、统计等功能。用户管理主要包括用户注册、登录、修改密码、修改个人信息、设置用户类型等功能。

具体要求:

1、定义图书管理系统中的book书目类(还可以定义ur用户类、log图书借烹饪学校学费表还日志类等)。

2、合理应用类的继承性进行馆藏资源的继承性定义,可分为书、碟片、电子资源等(或将系统用户分为读者、图书管理员、系统管理员)。

3、根据不同类型用户,登录系统显示不同的用户功能菜单,实现不同的操作处理,如学生与教师所借阅书的数量和天数均不相同(或考虑图书馆中多种馆藏资源支持的用户操作有所区别)。

4、增加异常处理,在借阅图书时,已到所能借阅图书数量的最大数量给予提示;归还图书时,图书已超期需要缴纳罚款。

5、通过重载运算符“<<”和“>>”方便图书信息、读者信息录入等操作,并实现将馆藏图书信息、借阅记录等保存到磁盘,形成图书借还日志文件。

6、扩展实验:可尝试使用mfc可视化界面提高用户操作方便性和友好性。

程序源代码

#include<iostream>#include<cstring>#include<ctime>#include<fstream>//文件输入输出#include<iomanip>//控制输入输出格式#pragma warning(disable:4996)//消除strcpy不安全的错误提示#define kouling2 "654321"using namespace std;class tt{//系统当前时间public:  int year;  int month;  int day;  int hours;  int minutes;  int conds;  tt() {}};tt system_time()//获取当前时间{  tt pp;  time_t nowtime;  struct tm* p;  time(&nowtime);  p = localtime(&nowtime);  pp.year = p->tm_year + 1900;  pp.month = p->tm_mon + 1;  pp.day = p->tm_mday;  pp.hours = p->tm_hour;  pp.minutes = p->tm_min;  pp.conds = p->tm_c;  return pp;}class log;class book {//书目类protected:  char leixing[50];//书的类型,分为纸质图书,碟片,电子书  int no;//编号  char name[50];//书名  char author[50];//作者  char press[50];//出版社  char price[50];//价格  int state;//图书是否在架,1为在架,0为借出public:  book(){}  friend log;  void t_name(char a[])//设置书名  {    strcpy(name, a);  }  void t_author(char a[])//设置作者  {    strcpy(author, a);  }  void t_press(char a[])//设置出版社  {    strcpy(press, a);  }  void t_price(char a[])//设置价格  {    strcpy(price, a);  }  void t_no(int a)//设置编号  {    no = a;  }  void t_state(int a)//设置图书状态  {    state = a;  }  char *get_name()//获取书名  {    return name;  }  char *get_author()//获取作者  {    return author;  }  char* get_press()//获取出版社  {    return press;  }  char* get_price()//获取价格  {    return price;  }  int get_no()//获取编号  {    return no;  }  int get_state()//获取图书状态  {    return state;  }  int chongfu_no(int no1)//判断编号是否重复,返回1为重复,0为不重复  {    char leixing[100][50];//图书类型    int x[100];//图书编号    char c[100][50];//图书书名    char d[100][50];//图书作者    char e[100][50];//图书出版社    char f[100][20];//价格    int yy[100];//状态    int i;    fstream in;    in.open("book.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断是否到文件末尾      {        break;      }      in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> yy[i];//读入图书信息      if (no1 == x[i])//编号已存在      {        cout << "增加图书失败,该编号已存在!" << endl;        return 1;      }    }    in.clo();    return 0;  }};class ur {//用户类protected:  char name[20];//用户名  char password[20];//密码public:  ur(){}  friend log;  void t_name(char a[])//设置用户名  {    strcpy(name, a);  }  void t_password(char a[])//设置密码  {    strcpy(password, a);  }  int chongfu_name(char a[])//检查用户名是否已存在,返回1为已存在  {    int i;    int num = 0;//已注册的用户量    char d[100][50];//已注册的用户类型    char e[100][50];//已注册的用户名    char f[100][50];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断是否到文件末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    for (i = 0;i<num; i++)    {      if (strcmp(a, e[i]) == 0)//用户名已存在        return 1;    }    return 0;  }  void change_information(char a[],int n)//修改用户名,n为1是改用户名,2是改密码  {    int i;    int num = 0;//已注册的用户量    char d[100][20];//已注册的用户类型    char e[100][20];//已注册的用户名    char f[100][20];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)//获取已注册的用户信息    {      if (in.eof())//判断是否到文件末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];       if (strcmp(e[i], name) == 0)//找到要修改的用户      {        if (n == 1)        {          memt(name, '\0', sizeof(name));//清空数组          strcpy(name, a);          memt(e[i], '\0', sizeof(e[i]));//清空数组          strcpy(e[i], a);        }        if (n == 2)        {          memt(password, '\0', sizeof(password));//清空数组          strcpy(password, a);          memt(f[i], '\0', sizeof(f[i]));//清空数组          strcpy(f[i], a);        }      }      num++;    }    in.clo();    fstream out;    out.open("ur.text", ios::out|ios::trunc);    for (i = 0;i<num; i++)//将修改后的用户信息写入文件    {      if(strcmp(d[i],"读者"))//读者        out << tiosflags(ios::left) << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i] << endl;      el//图书管理员或系统管理员        out << tiosflags(ios::left) << tw(14) << d[i] << tw(20) << e[i] << tw(20) << f[i] << endl;    }    out.clo();    cout << "修改成功!" << endl;  }  int denglu(const char p[])//用户登录,返回1为登陆成功,0为登陆失败  {    int i;    int num = 0;//已注册的用户量    char d[100][20];//已注册的用户类型    char e[100][20];//已注册的用户名    char f[100][20];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)//获取已注册的用户信息    {      if (in.eof())//判断文件是否到末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    int flag = 0;//0为登录失败,1为登录成功    char a[20];//登录用户名  char b[20];//登录密码  cout << "请输入用户名:" << endl;  cin >> a;  cout << "请输入密码:" << endl;  cin >> b;  for (i = 0; i < num; i++)  {   if (strcmp(p,d[i])==0&&strcmp(a, e[i]) == 0 && strcmp(b, f[i]) == 0)//登录成功   {    flag = 1;    break;   }  }  if (flag == 1)//登录成功  {   cout << "您好!尊敬的"<<p << e[i] << endl;      strcpy(name, a);      strcpy(password, b);      return 1;  }  if(flag==0)//登录失败  {   cout << "登录失败,用户名或密码错误" << endl;      return 0;  } }};class reader : public ur {//读者类public:  reader():ur()  {  }  void zhuce()//注册读者  {    int i;    int num = 0;//已注册的用户量    char d[100][50];//已注册的用户类型    char e[100][50];//已注册的用户名    char f[100][50];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断是否到文件末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    char a[20];//所要注册的用户名    cout << "请输入用户名:" << endl;    int flag = 1;//0为用户名已注册,1为未注册    for (;;)//输入用户名    {      char aa[20];//暂时存储所要注册的用户名      cin >> aa;      for (i = 0; i < num; i++)//判断用户名是否已注册      {        if (strcmp(e[i], aa) == 0)//用户名已被注册        {          cout << "该用户名已存在,请重新输入:" << endl;          flag = 0;          break;        }        el        {          flag = 1;        }      }      if (flag == 1)//用户名未被注册      {        strcpy(a, aa);        break;      }    }    for (;;)    {      char b[20];//密码      char c[20];//第二次输入的密码      cout << "请设置密码:" << endl;      cin >> b;      cout << "请再次输入密码:" << endl;      cin >> c;      if (strcmp(b, c) == 0)//两次密码输入一致      {        cout << "注册成功!" << endl;        t_name(a);        t_password(b);        fstream out;        out.open("ur.text", ios::app);        out <<tiosflags(ios::left)<<tw(18)<< "读者" <<tw(20)<< a <<tw(20)<< b << endl;//将用户信息写入文件        out.clo();        break;      }      el      {        cout << "两次密码不一致,请重新输入" << endl;      }    }  }};class librarian :public ur {//图书管理员类public:  void zhuce()//注册图书管理员  {    int i;    int num = 0;//已注册的用户量    char d[100][10];//已注册的用户类型    char e[100][20];//已注册的用户名    char f[100][20];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断文件是否到末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    char a[20];//所要注册的用户名    cout << "请输入用户名:" << endl;    int flag = 1;//0为用户名已注册,1为未注册    for (;;)//输入用户名    {      char aa[20];//暂时存储所要注册的用户名      cin >> aa;      for (i = 0; i < num; i++)//判断用户名是否已注册      {        if (strcmp(e[i], aa) == 0)        {          cout << "该用户名已存在,请重新输入:" << endl;          flag = 0;          break;        }        el        {          flag = 1;        }      }      if (flag == 1)      {        strcpy(a, aa);        break;      }    }    for (;;)    {      char b[20];//密码      char c[20];//第二次输入的密码      cout << "请设置密码:" << endl;      cin >> b;      cout << "请再次输入密码:" << endl;      cin >> c;      if (strcmp(b, c) == 0)      {        cout << "注册成功!" << endl;        t_name(a);        t_password(b);        fstream out;        out.open("ur.text", ios::app);        out << tiosflags(ios::left) << tw(14) << "图书管理员" << tw(20) << a << tw(20) << b << endl;        out.clo();        break;      }      el      {        cout << "两次密码不一致,请重新输入" << endl;      }    }  }  void add_book(int no1, char name1[], char author1[], char press1[], char price1[],int y)//增加图书  {    fstream out;    out.open("book.text", ios::app);    if (y == 1)//纸质图书      out << "纸质图书 ";    if (y == 2)//碟片      out << "碟片 ";    if (y == 3)//电子书      out << "电子书 ";    out << tiosflags(ios::left) << tw(15) << no1 << tw(20) << name1 << tw(20) << author1 << tw(20) << press1 << tw(20) << price1 <<tw(5)<<1 <<endl;//最后一个左对齐能否去掉    out.clo();    cout << "增加图书成功!" << endl;  }  void delete_book(int n)//删除图书信息  {    int i;    int num = 0;    char leixing[100][50];//图书类型    int x[100];//图书编号    char c[100][50];//图书书名    char d[100][50];//图书作者    char e[100][50];//图书出版社    char f[100][20];//价格    int y[100];//状态    int flag=0;//1为存在该书,0为不存在    fstream in;    in.open("book.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断文件是否到末尾      {        num--;//        break;      }      in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i];      num++;//  }  in.clo();  fstream out;  out.open("book.text", ios::out);  for (i = 0; i < num; i++)//将删除图书后的的图书信息写入文件  {      if (x[i] != n)        out << tiosflags(ios::left) << tw(20) << leixing[i] << tw(15) << x[i] << tw(20) << c[i] << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i] << tw(5) << y[i] << endl;//最后一个左对齐能否去掉      el        flag = 1;  }  out.clo();    if(flag==1)    cout << "删除成功!" << endl;    if (flag == 0)      cout << "删除失败,未查找到该书!" << endl;  }  void change_book(int n)//修改图书信息  {    int i;  int num = 0;  char leixing[100][50];//图书类型  int x[100];//图书编号  char c[100][50];//图书书名  char d[100][50];//图书作者  char e[100][50];//图书出版社  char f[100][20];//价格  int y[100];//状态  fstream in;  in.open("book.text", ios::in);  for (i = 0;; i++)  {   if (in.eof())   {    num--;//    break;   }   in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i];   num++;//  }  in.clo();  for (i = 0; i < num; i++)  {   if (n == x[i])//找到要修改的图书   {    memt(leixing[i], '\0', sizeof(leixing[i]));    x[i] = 0;    memt(c[i], '\0', sizeof(c[i]));    memt(d[i], '\0', sizeof(d[i]));    memt(e[i], '\0', sizeof(e[i]));    memt(f[i], '\0', sizeof(f[i]));    y[i] = 0;    cout << "请输入修改后的图书类型:" << endl;    cin >> leixing[i];    cout << "请输入修改后的图书编号:" << endl;    cin >> x[i];    cout << "请输入修改后的图书书名:" << endl;    cin >> c[i];    cout << "请输入修改后的图书作者:" << endl;    cin >> d[i];    cout << "请输入修改后的图书出版社:" << endl;    cin >> e[i];    cout << "请输入修改后的图书价格:" << endl;    cin >> f[i];    cout << "请输入修改后的图书状态:(1为在架,0为已借出)" << endl;    cin >> y[i];    cout << "修改成功!" << endl;    break;   }  }  if (i == num)//未查找到图书   cout << "抱歉,未查到此书!" << endl;    fstream out;    out.open("book.text", ios::out);    for (i = 0; i < num; i++)//将修改后的图书信息写入文件    {      out << tiosflags(ios::left) << tw(20) << leixing[i] << tw(15) << x[i] << tw(20) << c[i] << tw(20) << d[i];      out<< tw(20) << e[i]<< tw(20) << f[i] << tw(5) << y[i] << endl;    }    out.clo();  }  void e_all()//查看所有用户的借阅信息  {    int i;    int num = 0;    char a[100][20];//图书类型    char b[100][20];//编号    char c[100][20];//书名    char d[100][20];//作者    char e[100][20];//出版社    char f[100][20];//价格    char people[100][20];//借书人    tt p;//借书时间    fstream out2;    out2.open("log.text", ios::in);    for (i = 0;; i++)    {      if (out2.eof())//判断是否到文件末尾      {        num--;        break;      }      out2 >> a[i] >> b[i] >> c[i] >> d[i] >> e[i] >> f[i];      out2 >> people[i];      out2 >> p.year >> p.month >> p.day >> p.hours >> p.minutes >> p.conds;      num++;    }    out2.clo();    cout << "以下为所有用户借阅信息:" << endl;    for (i = 0; i < num; i++)    {      cout << a[i] << " " << b[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " " <<"借阅人:"<<people[i]<<" " << p.year << "年" << p.month << "月" << p.day << "日" << p.hours << ":" << p.minutes << endl;    }  }};class system_admin:public ur{//系统管理员类public:  void zhuce()//注册系统管理员  {    int i;    int num = 0;//已注册的用户量    char d[100][10];//已注册的用户类型    char e[100][20];//已注册的用户名    char f[100][20];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    char a[20];//所要注册的用户名    cout << "请输入用户名:" << endl;    int flag = 1;//0为用户名已注册,1为未注册    for (;;)//输入用户名    {      char aa[20];//暂时存储所要注册的用户名      cin >> aa;      for (i = 0; i < num; i++)//判断用户名是否已注册      {        if (strcmp(e[i], aa) == 0)        {          cout << "该用户名已存在,请重新输入:" << endl;          flag = 0;          break;        }        el        {          flag = 1;        }      }      if (flag == 1)      {        strcpy(a, aa);        break;      }    }    for (;;)    {      char b[20];//密码      char c[20];//第二次输入的密码      cout << "请设置密码:" << endl;      cin >> b;      cout << "请再次输入密码:" << endl;      cin >> c;      if (strcmp(b, c) == 0)      {        cout << "注册成功!" << endl;        t_name(a);        t_password(b);        fstream out;        out.open("ur.text", ios::app);        out << tiosflags(ios::left) << tw(14) << "系统管理员" << tw(20) << a << tw(20) << b << endl;        out.clo();        break;      }      el      {        cout << "两次密码不一致,请重新输入" << endl;      }    }  }  void add_ur(char name[],char password[],int y)//增加用户  {    if (chongfu_name(name) == 1)//用户名已注册      cout << "增加用户失败,该用户名已存在!" << endl;    if (chongfu_name(name) == 0)//用户名未注册    {      fstream out;      out.open("ur.text", ios::app);      if (y == 1)        out << tiosflags(ios::left) << tw(18) << "读者" << tw(20) << name << tw(20) << p经典一句话语录assword << endl;      if (y == 2)        out << tiosflags(ios::left) << tw(14) << "图书管理员" << tw(20) << name << tw(20) << password << endl;      out.clo();      cout << "增加成功!" << endl;    }  }  void delete_ur(char name[])//删除用户  {    int i;    int num = 0;//已注册的用户量    char d[100][50];//已注册的用户类型    char e[100][50];//已注册的用户名    char f[100][50];//已注册的密码    int del;//要删除的用户的序号    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断是否到文件末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    for (i = 0;i<num; i++)    {      if (strcmp(name, e[i]) == 0)//找到该用户      {        del = i;//记录i        break;      }    }    if (i == num)//未查找到该用户名    {      cout << "未查找到该用户!" << endl;      return;    }    fstream out;    out.open("ur.text", ios::out);    for (i = 0;i<num; i++)//将删除后的全部用户信息写入文件    {      if(i!=del)      out << tiosflags(ios::left) << tw(20) << d[i]<< tw(20) << e[i] << tw(20) << f[i] << endl;    }    out.clo();    cout << "删除成功!" << endl;  }  void change_ur(char name[],int y)//修改用户信息,y=1为用户类型,y=2为用户名,y=3为用户密码  {    int i;    int num = 0;//已注册的用户量    char d[100][50];//已注册的用户类型    char e[100][50];//已注册的用户名    char f[100][50];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())//判断文件是否到末尾      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    if (y == 1)//修改用户类型    {      for (i = 0;i<num; i++)      {        if (strcmp(name, e[i]) == 0)//找到该用户        {          if (strcmp(d[i], "读者") == 0)//该用户为读者          {            memt(d[i], '\0', sizeof(d[i]));//清空用户类型数组            strcpy(d[i], "图书管理员");            break;          }          el//该用户为图书管理员          {            memt(d[i], '\0', sizeof(d[i]));//清空用户类型数组            strcpy(d[i], "读者");            break;          }        }      }      if (i == num)      {        cout << "未查找到该用户!" << endl;        return;      }    }    if (y == 2)//修改用户名    {      char name2[50];//修改后的用户名      for (;;)      {        char name1[50];//暂时存储修改后的用户名        cout << "请输入修改后的用户名:" << endl;        cin >> name1;        if (chongfu_name(name1) == 1)//用户名已存在          cout << "该用户名已存在,请重新输入" << endl;        el        {          strcpy(name2, name1);          break;        }      }      for (i = 0;; i++)      {        if (strcmp(name, e[i]) == 0)//找到要修改的用户        {          memt(e[i], '\0', sizeof(e[i]));//清空用户名          strcpy(e[i], name2);          break;        }      }    }    if (y == 3)//修改密码    {      char password2[50];      cout << "请输入修改后的密码:" << endl;      cin >> password2;      for (i = 0;; i++)      {        if (strcmp(name, e[i]) == 0)        {          memt(f[i], '\0', sizeof(f[i]));          strcpy(f[i], password2);          break;        }      }    }    fstream out;    out.open("ur.text", ios::out);    for (i = 0;i<num; i++)    {      out << tiosflags(ios::left) << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i] << endl;    }    out.clo();    cout << "修改成功!" << endl;  }  void e_ur()//查看所有用户信息  {    int i;    int num = 0;//已注册的用户量    char d[100][50];//已注册的用户类型    char e[100][50];//已注册的用户名    char f[100][50];//已注册的密码    fstream in;    in.open("ur.text", ios::in);    for (i = 0;; i++)    {      if (in.eof())      {        num--;        break;      }      in >> d[i];      in >> e[i];      in >> f[i];      num++;    }    in.clo();    cout << "——————————用户信息——————————" << endl;    for (i = 0; i < num; i++)    {      cout <<"用户类型:"<<d[i]<<" 用户名:" << e[i]<<" 用户密码:" << f[i] << endl;    }  }};class log {//借还日志类private:  int lend_date;//借书日期  int return_date;//还书日期public:  log(){}  void e(ur yonghu)//查看本人借阅信息  {    int i;    int num=0;    char a[100][20];//图书类型    char b[100][20];//编号    char c[100][20];//书名    char d[100][20];//作者    char e[100][20];//出版社    char f[100][20];//价格    char people[100][20];//借书人    tt p;//借书时间    fstream in;    in.open("log.text", ios::in);    for (i = 0;; i++)    {      i什么是球体f (in.eof())      {        num--;          break;      }   in >> a[i] >> b[i] >> c[i] >> d[i] >> e[i] >> f[i];   in >> people[i];   in >> p.year >> p.month >> p.day >> p.hours >> p.minutes >> p.conds;      num++;  }    in.clo();    int flag=0;//0为没有借书,1为有借书    cout << "以下为您的借阅信息:" << endl;    for (i = 0; i < num; i++)    {      if (strcmp(people[i],yonghu.name) == 0)//检索到借阅人      {        cout << a[i] << " " << b[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " " << p.year << "年" << p.month << "月" << p.day << "日" << p.hours << ":" << p.minutes << endl;        flag = 1;      }    }    if (flag==0)      cout << " 无" << endl;  } void lend_book(ur yonghu)//借阅图书 {  int i;  char a[50];//书名  char b[50];//作者  int num = 0;//书的数目  int x[100];//在架的图书编号  char leixing[100][50];//图书类型  char c[100][50];//在架的图书书名  char d[100][50];//在架的图书作者  char e[100][50];//在架的图书出版社  char f[100][20];//价格  int y[100];//状态  cout << "请输入您要借阅的图书书名:" << endl;  cin >> a;  cout << "请输入您要借阅的图书作者:" << endl;  cin >> b;  fstream in;  in.open("book.text", ios::in);  for (i = 0;; i++)//找要借阅的书  {   if (in.eof())   {    num--;    break;   }   in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i];   num++;  }  in.clo();  cout << "查询到以下图书:" << endl;  int flag = 0;//0为未查到书,1为查到书  for (i = 0; i < num; i++)  {   if (strcmp(a, c[i]) == 0 && strcmp(b, d[i]) == 0)   {    cout << "  " << leixing[i] << " 编号:" << x[i] << " " << c[i] << " " << d[i] << " " << e[i] << " " << f[i] << " ";    if (y[i] == 1)     cout << "在架可借" << endl;    if (y[i] == 0)     cout << "已借出" << endl;    flag = 1;   }  }  if (flag == 0)//未检索到书  {   cout << "  无" << endl;   cout << "未查询到此书!" << endl;  }  if (flag == 1)//检索到书  {      int flag2=1;//0借阅失败,1为借阅成功   int bianhao;   cout << "请输入您要借阅的图书编号:" << endl;   cin >> bianhao;   for (i = 0; i < num; i++)   {    if (bianhao == x[i]&&y[i]==1)//找到书且书可借    {     y[i]=0;          break;    }        if (bianhao == x[i] && y[i] == 0)//找到书且书已借出        {          cout << "无法借阅,该书已被借出!" << endl;          flag2 = 0;          break;        }   }      if (i == num)//未检索到图书      {        flag2 = 0;        cout << "未查询到该图书!" << endl;      }      if(flag2==1)//借阅成功      {        fstream out;        out.open("book.text", ios::out);        for (i = 0; i < num; i++)          out << tiosflags(ios::left) << tw(15) << leixing[i] << tw(15) << x[i] << tw(20) << c[i] << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i] << tw(5) << y[i] << endl;        out.clo();        tt p;        p = system_time();//p存储了当前系统时间        fstream out2;        out2.open("log.text", ios::app);        for (i = 0; i < num; i++)        {          if (bianhao == x[i])          {            out2 << tiosflags(ios::left) << tw(15) << leixing[i] << tw(15) << x[i] << tw(20) << c[i] << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i];            out2 << yonghu.name << " ";            out2 << p.year << " " << p.month << " " << p.day << " " << p.hours << " " << p.minutes << " " << p.conds << endl;            break;          }        }        out2.clo();        cout << "借阅成功!" << endl;      }  } }  void return_book(int n,ur yonghu)//n:1为读者,2为图书管理员,3为系统管理员  {    int i;    int num = 0;//图书数量    int x[100];//图书编号    char leixing[100][50];//图书类型    char c[100][50];//图书书名    char d[100][50];//图书作者    char e[100][50];//图书出版社    char f[100][20];//价格    int y[100];//状态    fstream in;    in.open("book.text", ios::in);    for (i = 0;; i++)//找要还的书    {      if (in.eof())      {        num--;//        break;      }      in >> leixing[i] >> x[i] >> c[i] >> d[i] >> e[i] >> f[i] >> y[i];      num++;//    }    in.clo();    e(yonghu);//输出该用户借阅图书信息    int bianhao;    cout << "请输入您要返还图书的编号:" << endl;    cin >> bianhao;    for (i = 0; i < num; i++)//改变图书状态    {      if (bianhao == x[i])//找到图书      {        y[i] = 1;//改变图书状态为在架可借        break;      }    }    if (i == num)//未查询到图书    {      cout << "未查询到该图书!" << endl;    }    el//查询到图书    {      fstream out;      out.open("book.text", ios::out);      for (i = 0; i < num; i++)//更新book文件      {        out << tiosflags(ios::left) << tw(15) << leixing[i] << tw(15) << x[i] << tw(20) << c[i];        out << tw(20) << d[i] << tw(20) << e[i] << tw(20) << f[i] << tw(5) << y[i] << endl;      }      out.clo();      //更改log.text      int x2[100];//已借阅的的图书编号      char leixing2[100][50];//已借阅图书的图书类型      char c2[100][50];//已借阅图书的图书书名      char d2[100][50];//已借阅图书的图书作者      char e2[100][50];//已借阅图书的图书出版社      char f2[100][50];//已借阅图书的价格      char person[50];//借书者用户名      tt time1[100];//借书时间      tt time2 = system_time();//还书时间      int log_num = 0;      fstream in2;      in2.open("log.text", ios::in);      for (i = 0;; i++)      {        if (in2.eof())        {          log_num--;          break;        }        in2 >> leixing2[i] >> x2[i] >> c2[i] >> d2[i] >> e2[i] >> f2[i] >> person;        in2>> time1[i].year >> time1[i].month >> time1[i].day >> time1[i].hours >> time1[i].minutes >> time1[i].conds;        log_num++;//      }      in2.clo();      int del;//还的书的序号      for (i = 0; i < log_num; i++)      {        if (bianhao == x2[i])        {          del = i;          break;        }      }      fstream out2;      out2.open("log.text", ios::out);      for (i = 0; i < log_num; i++)//向文件输出新的log      {        if (i == del)          continue;        out2 << tiosflags(ios::left) << tw(15) << leixing2[i] << tw(15) << x2[i];        out2<< tw(20) << c2[i] << tw(20) << d2[i] << tw(20) << e2[i] << tw(20) << f2[i];        out2 << yonghu.name << " ";        out2 << time1[i].year << " " << time1[i].month << " " << time1[i].day << " ";        out2<< time1[i].hours << " " << time1[i].minutes << " " << time1[i].conds << endl;      }      out2.clo();      //判断是否超出还书时间      int deadline;      if (n == 1)//读者        deadline = 14;//读者借书期限为14天      if (n == 2 || n == 3)//图书管理员或系统管理员        deadline = 21;//管理员借书期限为21天      if (time2.year - time1[del].year > 0 || time2.month - time1[del].month > 0 || time2.day - time1[del].day > deadline)      {        cout << "您已超出图书归还日期,请到办公室缴纳罚款" << endl;      }      el        cout << "还书成功!" << endl;    } }};int main(){  char kouling1[50] = "123456";  cout << "——————图书管理系统——————" << endl;  int i,j;  book shu[100];//图书  reader duzhe[100];//读者  librarian tushu[100];//图书管理员  system_admin xitong[100];//系统管理员  log rizhi[100];//借还书日志  int flag;//0为没有用户登录,1为已有用户登录  for (i = 0;; i++)  {    if(i!=0)      cout << "————主界面————" << endl;    cout << "1.注册" << endl;    cout << "2.登录" << endl;    cout << "3.退出" << endl;    int n;//1为注册,2为登录,3为退出系统    cin >> n;    if (n == 1)//注册    {      cout << "请选择您要注册的用户类型" << endl;      cout << "1.读者" << endl;      cout << "2.图书管理员" << endl;      cout << "3.系统管理员" << endl;      cout << "4.返回上一层菜单" << endl;      int m;//1为注册读者,2为注册图书管理员,3为注册系统管理员      cin >> m;      if (m == 1)      {        duzhe[i].zhuce();//注册读者      }      认真的同义词if (m == 2)      {        for (;;)        {          char kl[20];//图书管理员口令          cout << "请输入图书管理员口令:" << endl;          cin >> kl;//接收口令          if (strcmp(kl,kouling1) == 0)          {            tushu[i].zhuce();//注册图书管理员            break;          }          el          {            cout << "口令错误,请输入正确口令!" << endl;          }        }      }      if (m == 3)      {        for (;;)        {          char k2[20];//系统管理员口令          cout << "请输入系统管理员口令:" << endl;          cin >> k2;//接收口令          if (strcmp(k2, kouling2) == 0)          {            xitong[i].zhuce();//注册系统管理员            break;          }          el          {            cout << "口令错误,请输入正确口令!" << endl;          }        }      }      if (m == 4)      {        continue;      }    }    if (n == 2)//登录界面    {      cout << "请选择您要登录的用户类型" << endl;      cout << "1.读者" << endl;      cout << "2.图书管理员" << endl;      cout << "3.系统管理员" << endl;      cout << "4.返回上一层菜单" << endl;      int m;      cin >> m;      if (m == 1)      {        flag=duzhe[i].denglu("读者");      }      if (m == 2)      {        flag=tushu[i].denglu("图书管理员");      }      if (m == 3)      {        flag=xitong[i].denglu("系统管理员");      }      if (m == 4)        continue;      if (flag == 1)//登录成功      {        if (m == 1)//读者登录        {          for (;;)          {            int x;            cout << "————读者界面————" << endl;            cout << "1.修改用户名" << endl;            cout << "2.修改密码" << endl;            cout << "3.借阅图书" << endl;            cout << "4.还书" << endl;            cout << "5.本人借阅信息查看" << endl;            cout << "6.退出账号" << endl;            cin >> x;            if (x == 1)            {              char after_name[20];//改后的用户名              cout << "请输入新的用户名:" << endl;              cin >> after_name;              duzhe[i].change_information(after_name,1);            }            if (x == 2)            {              char after_password[20];//改后的密码              cout << "请输入新的密码" << endl;              cin >> after_password;              duzhe[i].change_information(after_password,2);            }            if (x == 3)            {              rizhi[i].lend_book(duzhe[i]);            }            if (x == 4)            {              rizhi[i].return_book(1,duzhe[i]);            }            if (x == 5)              rizhi[i].e(duzhe[i]);            if (x == 6)              break;          }        }        if (m == 2)//登录的为图书管理员        {          for (;;)          {            int x;            cout << "————图书管理员界面————" << endl;            cout << "1.修改用户名" << endl;            cout << "2.修改密码" << endl;            cout << "3.借阅图书" << endl;            cout << "4.还书" << endl;            cout << "5.本人借阅信息查看" << endl;            cout << "6.增加图书" << endl;            cout << "7.修改图书信息" << endl;            cout << "8.删除图书" << endl;            cout << "9.查看用户借阅信息" << endl;            cout << "10.退出账号" << endl;            cin >> x;            if (x == 1)            {              char after_name[20];//改后的用户名              cout << "请输入新的用户名:" << endl;              cin >> after_name;              tushu[i].change_information(after_name, 1);            }            if (x == 2)            {              char after_password[20];//改后的密码              cout << "请输入新的密码" << endl;              cin >> after_password;              tushu[i].change_information(after_password, 2);            }            if (x == 3)            {              rizhi[i].lend_book(tushu[i]);            }            if (x == 4)            {              rizhi[i].return_book(2, tushu[i]);            }            if (x == 5)              rizhi[i].e(tushu[i]);            if (x == 6)            {              int y;//1为纸质图书,2为碟片,3为电子资源              int no1;//编号              char name1[20];//书名              char author1[20];//作者              char press1[20];//出版社              char price1[10];//价格              cout << "请输入您要增加的图书类型:" << endl;              cout << "1.纸质图书" << endl;              cout << "2.碟片" << endl;              cout << "3.电子资源" << endl;              cin >> y;              cout << "请输入图书编号:" << endl;              cin >> no1;              if (shu[i].chongfu_no(no1) == 1)                continue;              cout << "请输入书名:" << endl;              cin >> name1;              cout << "请输入作者:" << endl;              cin >> author1;              cout << "请输入出版社:" << endl;              cin >> press1;              cout << "请输入图书价格" << endl;              cin >> price1;       if (y == 1)        tushu[i].add_book(no1, name1, author1, press1, price1, 1);       if (y == 2)        tushu[i].add_book(no1, name1, author1, press1, price1, 2);       if (y == 3)        tushu[i].add_book(no1, name1, author1, press1, price1, 3);            }            if (x == 7)            {              int y;              cout << "请输入您要修改图书的编号:" << endl;              cin >> y;              tushu[i].change_book(y);            }            if (x == 8)            {              int y;              cout << "请输入您要删除图书的编号:" << endl;              cin >> y;              tushu[i].delete_book(y);            }            if (x == 9)            {              tushu[i].e_all();            }            if (x == 10)              break;          }        }        if (m == 3)//登录的为系统管理员        {          for (;;)          {            int x;            cout << "————系统管理员界面————" << endl;            cout << "1.修改用户名" << endl;            cout << "2.修改密码" << endl;            cout << "3.借阅图书" << endl;            cout << "4.还书" << endl;            cout << "5.本人借阅信息查看" << endl;            cout << "6.修改图书管理员口令" << endl;            cout <让我为你唱一首歌;< "7.增加用户" << endl;            cout << "8.删除用户" << endl;            cout << "9.修改用户信息" << endl;            cout << "10.查看用户信息" << endl;            cout << "11.退出账号" << endl;            cin >> x;            if (x == 1)            {              char after_name[20];//改后的用户名              cout << "请输入新的用户名:" << endl;              cin >> after_name;              xitong[i].change_information(after_name, 1);            }            if (x == 2)            {              char after_password[20];//改后的密码              cout << "请输入新的密码" << endl;              cin >> after_password;              xitong[i].change_information(after_password, 2);            }            if (x == 3)            {              rizhi[i].lend_book(xitong[i]);            }            if (x == 4)            {              rizhi[i].return_book(3,xitong[i]);            }            if (x == 5)            {              rizhi[i].e(xitong[i]);            }            if (x == 6)            {              char kouling3[50];              cout << "请输入修改后的图书管理员口令:" << endl;              cin >> kouling3;              memt(kouling1, '\0', sizeof(kouling1));              strcmp(kouling1, kouling3);            }            if (x == 7)            {              int y;//1为读者,2为图书管理员              char name[50];              char password[50];              cout << "请输入您要增加的用户类型:" << endl;              cout << "1.读者" << endl;              cout << "2.图书管理员" << endl;              cin >> y;              cout << "请输入用户名:" << endl;              cin >> name;              cout << "请输入密码:" << endl;              cin >> password;              xitong[i].add_ur(name,password,y);            }            if (x == 8)            {              char name[50];              cout << "请输入您要删除用户的用户名:" << endl;              cin >> name;              xitong[i].delete_ur(name);            }            if (x == 9)            {              char name[50];              cout << "请输入您要修改用户的用户名:" << endl;              cin >> name;              int y;              cout << "请输入您要修改用户的哪个信息:" << endl;              cout << "1.用户类型" << endl;              cout << "2.用户名" << endl;              cout << "3.用户密码" << endl;              cin >> y;              xitong[i].change_ur(name,y);            }            if (x == 10)            {              xitong[i].e_ur();            }            if (x == 11)            {              break;            }          }        }      }    }    if (n == 3)      return 0;  }  return 0;}

实验结果展示

注册成功后用户信息会写入文件中,这样关闭程序后用户信息不会丢失

用户信息

三个text文件分别保存书籍信息(book)、借阅信息(log)、用户信息(ur)

书籍信息

借阅信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-06 03:14:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d94b3f458e52424466cec5dcebe2e4d3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C++图书管理系统程序源代码.doc

本文 PDF 下载地址:C++图书管理系统程序源代码.pdf

下一篇:返回列表
标签:图书   用户名   用户   请输入
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图