文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++图书管理系统程序的示例代码

2023-06-29 12:17

关注

这篇文章主要为大家展示了“C++图书管理系统程序的示例代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++图书管理系统程序的示例代码”这篇文章吧。

具体内容如下

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

实验要求

实验目的:

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

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

具体要求:

定义图书管理系统中的Book书目类(还可以定义User用户类、Log图书借还日志类等)。

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

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

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

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

扩展实验:可尝试使用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 seconds;    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.seconds = p->tm_sec;    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 set_name(char a[])//设置书名    {        strcpy(name, a);    }    void set_author(char a[])//设置作者    {        strcpy(author, a);    }    void set_press(char a[])//设置出版社    {        strcpy(press, a);    }    void set_price(char a[])//设置价格    {        strcpy(price, a);    }    void set_no(int a)//设置编号    {        no = a;    }    void set_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.close();        return 0;    }};class User {//用户类protected:    char name[20];//用户名    char password[20];//密码public:    User(){}    friend Log;    void set_name(char a[])//设置用户名    {        strcpy(name, a);    }    void set_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("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())//判断是否到文件末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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("User.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)                {                    memset(name, '\0', sizeof(name));//清空数组                    strcpy(name, a);                    memset(e[i], '\0', sizeof(e[i]));//清空数组                    strcpy(e[i], a);                }                if (n == 2)                {                    memset(password, '\0', sizeof(password));//清空数组                    strcpy(password, a);                    memset(f[i], '\0', sizeof(f[i]));//清空数组                    strcpy(f[i], a);                }            }            num++;        }        in.close();        fstream out;        out.open("User.text", ios::out|ios::trunc);        for (i = 0;i<num; i++)//将修改后的用户信息写入文件        {            if(strcmp(d[i],"读者"))//读者                out << setiosflags(ios::left) << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl;            else//图书管理员或系统管理员                out << setiosflags(ios::left) << setw(14) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl;        }        out.close();        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("User.text", ios::in);        for (i = 0;; i++)//获取已注册的用户信息        {            if (in.eof())//判断文件是否到末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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 User {//读者类public:    Reader():User()    {     }    void zhuce()//注册读者    {        int i;        int num = 0;//已注册的用户量        char d[100][50];//已注册的用户类型        char e[100][50];//已注册的用户名        char f[100][50];//已注册的密码        fstream in;        in.open("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())//判断是否到文件末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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;                }                else                {                    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;                set_name(a);                set_password(b);                fstream out;                out.open("User.text", ios::app);                out <<setiosflags(ios::left)<<setw(18)<< "读者" <<setw(20)<< a <<setw(20)<< b << endl;//将用户信息写入文件                out.close();                break;            }            else            {                cout << "两次密码不一致,请重新输入" << endl;            }        }    } };class Librarian :public User {//图书管理员类public:    void zhuce()//注册图书管理员    {        int i;        int num = 0;//已注册的用户量        char d[100][10];//已注册的用户类型        char e[100][20];//已注册的用户名        char f[100][20];//已注册的密码        fstream in;        in.open("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())//判断文件是否到末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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;                }                else                {                    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;                set_name(a);                set_password(b);                fstream out;                out.open("User.text", ios::app);                out << setiosflags(ios::left) << setw(14) << "图书管理员" << setw(20) << a << setw(20) << b << endl;                out.close();                break;            }            else            {                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 << setiosflags(ios::left) << setw(15) << no1 << setw(20) << name1 << setw(20) << author1 << setw(20) << press1 << setw(20) << price1 <<setw(5)<<1 <<endl;//最后一个左对齐能否去掉        out.close();        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.close();        fstream out;        out.open("Book.text", ios::out);        for (i = 0; i < num; i++)//将删除图书后的的图书信息写入文件        {            if (x[i] != n)                out << setiosflags(ios::left) << setw(20) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl;//最后一个左对齐能否去掉            else                flag = 1;        }        out.close();        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.close();        for (i = 0; i < num; i++)        {            if (n == x[i])//找到要修改的图书            {                memset(leixing[i], '\0', sizeof(leixing[i]));                x[i] = 0;                memset(c[i], '\0', sizeof(c[i]));                memset(d[i], '\0', sizeof(d[i]));                memset(e[i], '\0', sizeof(e[i]));                memset(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 << setiosflags(ios::left) << setw(20) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i];            out<< setw(20) << e[i]<< setw(20) << f[i] << setw(5) << y[i] << endl;        }        out.close();    }    void see_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.seconds;            num++;        }        out2.close();        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 User{//系统管理员类public:    void zhuce()//注册系统管理员    {        int i;        int num = 0;//已注册的用户量        char d[100][10];//已注册的用户类型        char e[100][20];//已注册的用户名        char f[100][20];//已注册的密码        fstream in;        in.open("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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;                }                else                {                    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;                set_name(a);                set_password(b);                fstream out;                out.open("User.text", ios::app);                out << setiosflags(ios::left) << setw(14) << "系统管理员" << setw(20) << a << setw(20) << b << endl;                out.close();                break;            }            else            {                cout << "两次密码不一致,请重新输入" << endl;            }        }    }    void add_User(char name[],char password[],int y)//增加用户    {        if (chongfu_name(name) == 1)//用户名已注册            cout << "增加用户失败,该用户名已存在!" << endl;        if (chongfu_name(name) == 0)//用户名未注册        {            fstream out;            out.open("User.text", ios::app);            if (y == 1)                out << setiosflags(ios::left) << setw(18) << "读者" << setw(20) << name << setw(20) << password << endl;            if (y == 2)                out << setiosflags(ios::left) << setw(14) << "图书管理员" << setw(20) << name << setw(20) << password << endl;            out.close();            cout << "增加成功!" << endl;        }    }    void delete_user(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("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())//判断是否到文件末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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("User.text", ios::out);        for (i = 0;i<num; i++)//将删除后的全部用户信息写入文件        {            if(i!=del)            out << setiosflags(ios::left) << setw(20) << d[i]<< setw(20) << e[i] << setw(20) << f[i] << endl;        }        out.close();        cout << "删除成功!" << endl;    }    void change_user(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("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())//判断文件是否到末尾            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        if (y == 1)//修改用户类型        {            for (i = 0;i<num; i++)            {                if (strcmp(name, e[i]) == 0)//找到该用户                {                    if (strcmp(d[i], "读者") == 0)//该用户为读者                    {                        memset(d[i], '\0', sizeof(d[i]));//清空用户类型数组                        strcpy(d[i], "图书管理员");                        break;                    }                    else//该用户为图书管理员                    {                        memset(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;                else                {                    strcpy(name2, name1);                    break;                }            }            for (i = 0;; i++)            {                if (strcmp(name, e[i]) == 0)//找到要修改的用户                {                    memset(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)                {                    memset(f[i], '\0', sizeof(f[i]));                    strcpy(f[i], password2);                    break;                }            }        }        fstream out;        out.open("User.text", ios::out);        for (i = 0;i<num; i++)        {            out << setiosflags(ios::left) << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << endl;        }        out.close();        cout << "修改成功!" << endl;    }    void see_user()//查看所有用户信息    {        int i;        int num = 0;//已注册的用户量        char d[100][50];//已注册的用户类型        char e[100][50];//已注册的用户名        char f[100][50];//已注册的密码        fstream in;        in.open("User.text", ios::in);        for (i = 0;; i++)        {            if (in.eof())            {                num--;                break;            }            in >> d[i];            in >> e[i];            in >> f[i];            num++;        }        in.close();        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 see(User 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++)        {            if (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.seconds;            num++;        }        in.close();        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(User 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.close();        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 << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl;                out.close();                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 << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i] << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i];                        out2 << yonghu.name << "  ";                        out2 << p.year << " " << p.month << " " << p.day << " " << p.hours << " " << p.minutes << " " << p.seconds << endl;                        break;                    }                }                out2.close();                cout << "借阅成功!" << endl;            }        }    }    void return_book(int n,User 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.close();        see(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;        }        else//查询到图书        {            fstream out;            out.open("Book.text", ios::out);            for (i = 0; i < num; i++)//更新book文件            {                out << setiosflags(ios::left) << setw(15) << leixing[i] << setw(15) << x[i] << setw(20) << c[i];                out << setw(20) << d[i] << setw(20) << e[i] << setw(20) << f[i] << setw(5) << y[i] << endl;            }            out.close();             //更改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].seconds;                log_num++;//            }            in2.close();            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 << setiosflags(ios::left) << setw(15) << leixing2[i] << setw(15) << x2[i];                out2<< setw(20) << c2[i] << setw(20) << d2[i] << setw(20) << e2[i] << setw(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].seconds << endl;            }            out2.close();            //判断是否超出还书时间            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;            }            else                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;                    }                    else                    {                        cout << "口令错误,请输入正确口令!" << endl;                    }                }            }            if (m == 3)            {                for (;;)                {                    char k2[20];//系统管理员口令                    cout << "请输入系统管理员口令:" << endl;                    cin >> k2;//接收口令                    if (strcmp(k2, kouling2) == 0)                    {                        xitong[i].zhuce();//注册系统管理员                        break;                    }                    else                    {                        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].see(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].see(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].see_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].see(xitong[i]);                        }                        if (x == 6)                        {                            char kouling3[50];                            cout << "请输入修改后的图书管理员口令:" << endl;                            cin >> kouling3;                            memset(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_User(name,password,y);                        }                        if (x == 8)                        {                            char name[50];                            cout << "请输入您要删除用户的用户名:" << endl;                            cin >> name;                            xitong[i].delete_user(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_user(name,y);                        }                        if (x == 10)                        {                            xitong[i].see_user();                        }                        if (x == 11)                        {                            break;                        }                    }                }            }        }        if (n == 3)            return 0;    }    return 0;}

实验结果展示

C++图书管理系统程序的示例代码

C++图书管理系统程序的示例代码

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

用户信息

C++图书管理系统程序的示例代码

C++图书管理系统程序的示例代码

三个text文件分别保存书籍信息(Book)、借阅信息(Log)、用户信息(User)

书籍信息

C++图书管理系统程序的示例代码

借阅信息

C++图书管理系统程序的示例代码

C++图书管理系统程序的示例代码

C++图书管理系统程序的示例代码

C++图书管理系统程序的示例代码

以上是“C++图书管理系统程序的示例代码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯