当前位置 博文首页 > Dp_Json's Blog:C++课程设计:图书管理系统【附源码】
??作为软件工程和计算机科学与技术专业的基本课程,课程设计不仅涵盖了C++语言的知识体系,又与工程的实际需要切实相关。通过课程设计的综合性训练,对开发者解决实际问题能力,编程能力,动手能力有很大的提升,更有助于样成良好的编程习惯。
?? 某高校为更好的管理图书馆,现需设计一简易图书管理系统,实现新书录入,图书资料查询,显示总图书信息功能。要求开发的系统需要具备以下功能:
??1.实现读者借阅图书;
??2.实现读者归还图书;
??3.实现对图书信息的综合管理:
????(设置二级子目录实现信息的增,删,改,查等操作)
??4.实现对读者信息的综合管理:
????(设置二级子目录实现信息的增,删,改,查等操作)
??5.显示用户信息:显示所有用户信息,含学号、姓名、借阅状况等信息;
??6.返回主界面;
??本部分设计内容包括:类的设计、数据成员设计、成员函数设计,以及主程序设计(模块函数实现,主函数) 【源码中详细解释,此处不作赘述】
按照工程的建立实现过程,各部分实现内容如下:
头文件
#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);
#pragma once
void login();
void Main_Interface();
void Book_Maintenance_Interface();
void Reader_Maintenance_Interface();
void UI();
#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();
函数实现
#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;
}
#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)