当前位置 博文首页 > Dp_Json's Blog:C++课程设计:图书管理系统【附源码】

    Dp_Json's Blog:C++课程设计:图书管理系统【附源码】

    作者:[db:作者] 时间:2021-08-05 18:57

    课程设计目的

    ??作为软件工程和计算机科学与技术专业的基本课程,课程设计不仅涵盖了C++语言的知识体系,又与工程的实际需要切实相关。通过课程设计的综合性训练,对开发者解决实际问题能力,编程能力,动手能力有很大的提升,更有助于样成良好的编程习惯。

    图书管理系统需求分析

    ?? 某高校为更好的管理图书馆,现需设计一简易图书管理系统,实现新书录入,图书资料查询,显示总图书信息功能。要求开发的系统需要具备以下功能:
    ??1.实现读者借阅图书;
    ??2.实现读者归还图书;
    ??3.实现对图书信息的综合管理:
    ????(设置二级子目录实现信息的增,删,改,查等操作)
    ??4.实现对读者信息的综合管理:
    ????(设置二级子目录实现信息的增,删,改,查等操作)
    ??5.显示用户信息:显示所有用户信息,含学号、姓名、借阅状况等信息;
    ??6.返回主界面;

    设计实现

    ??本部分设计内容包括:类的设计、数据成员设计、成员函数设计,以及主程序设计(模块函数实现,主函数) 【源码中详细解释,此处不作赘述】
    按照工程的建立实现过程,各部分实现内容如下:

    头文件

    • book.h
    #pragma once   //包含此语句的文件只会被编译一次,表示在编译时, 该文件只被包含一次, 减少整个编译过程中打开该文件次数
    
    //图书管理模块
    //图书类
    class book {
    public:
        int no;            //图书编号
        char name[20];     //图书名称
        int b_flag;        //1:在架 2:借出
        int b_del;         //1:存在 2:删除
    public:
        book() {}        //无参构造函数
        void setno(int n);    //设置图书编号
        int getno();    //返回图书编号值
        void setname(char na[]);
        char* getname();    //返回图书名称
        void borbook();
        void delbook();
        void addbook(int no, char na[]);  //增加图书功能
    };
    
    //图书数据库类
    const int BMAX = 50;       //定义书本最大值
    class bdatabase {
    public:
        book btarray[BMAX];    //图书集合
        int top;
    public:
        bdatabase();
        ~bdatabase();       //析构函数,将btarray[]写到book.txt文件中
        void addbooks();                 //在图书数据库中添加图书
        int findbooks(int suffix);      //查找图书,该函数用于借书操作,suffix是数组下标
        int findbooks();                 //查找图书,该函数用于图书维护
        void editbooks();     //编辑图书
        void delbooks();  //删除图书
        void listbooks();      //显示全部图书
    };
    
    void booksmanage(); //图书信息管理界面 声明
    void borrow_or_return(char br);
    
    • interface.h
    #pragma once
    
    void login();
    void Main_Interface();
    void Book_Maintenance_Interface();
    void Reader_Maintenance_Interface();
    void UI();
    
    • reader.h
    #pragma once
    
    #include"book.h"
    
    //读书管理模块
    //读者类
    class reader {
    public:
        int no;
        char name[20];
        int r_del;      //1存在    2删除
        int r_bor;      //1借过书  2未借书
        book brbook;
    public:
        void addreader(int id, char na[]);   //增加读者
        void setbrbook(book bt); //设置借书标记
        book getbrbook() {
            return brbook;  //返回借书信息
        }
    };
    
    //读者数据库类
    class rdatabase {
    public:
        reader rdarray[BMAX];
        int top;
    public:
        rdatabase();
        ~rdatabase();
        void addreaders();   //添加读者
        int findreaders(int suffix);      //查找读者,该函数用于借书还书操作,suffix是数组下标
        int findreaders();        //查找读者,该函数用于读者维护操作
        void editreaders();     //编辑读者信息
        void delreaders();  //删除读者,读者如果借书,需要还书后才能删除
        void listreaders();      //显示所有读者
    };
    
    void readersmange();
    

    函数实现

    • main.cpp
    #include <iostream>
    using namespace std;
    
    #include "interface.h"
    #include "reader.h"
    
    int main() {          
        char in = -1; //因为VS环境不能使用为初始化的变量,所以首先赋值为不可能使用的变量值以通过编译 char in=-1
        login();
        do{//退出系统限制条件
           UI();  //系统界面改变
           Main_Interface();
           cin >> in;
           switch (in) {
           case'1':
               borrow_or_return(in);
               break;
           case'2':
               borrow_or_return(in);
               break;
           case'3':
               booksmanage();
               break;
           case'4':
               readersmange();
               break;
           case'0': {
               cout << "感谢您使用本系统,再见!" << endl;
               break;
           }
           default:
               cout << "In Put Error!!! Please try again!!!" << endl;
           }
        } while (in != '0');
        return 0;
    }
    
    • book.cpp
    #include <iostream>
    using namespace std;
    #include <fstream>
    #include <cstring>
    
    #include "interface.h"
    #include "reader.h"
    
    //图书管理模块
    
    //图书类函数实现
    void book::setno(int n) {
    	no = n;
    }
    
    int book::getno() {
    	return no;
    }
    
    void book::setname(char na[]) {
    	strcpy_s(name, na);
    }
    
    char* book:: getname() {
    	return name;  
    }
    
    void book::borbook() {
    	b_flag = 2;          //借书标志
    }
    
    void book::delbook() {
    	b_del = 2;           //删除标志
    }
    
    void book::addbook(int no, char na[]) {
    	setno(no);
    	setname(na);
    	b_flag = 1;
    	b_del = 1;
    }
    
    //图书数据库类
    bdatabase::bdatabase() {
    	book b;            //建立book类对象并b
    	top = -1;          //数组下标从0开始,此处top值置为-1可保证从数组第一个元素开始存储信息
    	fstream file("book.txt", ios::in);//打开文件进行读操作,若文件不存在则出错.输入输出指:内存与硬盘间的信息传递
    	while (1) {
    		file.read((char*)&b, sizeof(b));//从文件中读取b个字符到char*指向的缓存中(book类对象b的地址)
    		if (!file) //若读取到文件尾EOF,返回非0值(一般为1),结束书本数量的计数,关闭文件
    			break;
    		top++;
    		btarray[top] = b;
    	}
    	file.close();
    }
    
    bdatabase::~bdatabase() {
    	fstream file("book.txt", ios::out);//输出:内存->硬盘
    	for (int i = 0; i <= top; i++) {
    		if (btarray[i].b_del == 1)
    
    下一篇:没有了