图书信息管理的设计与实现(C课程设计)

更新时间:2023-03-08 07:03:42 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

图书信息管理的设计与实现

1. 课程设计的目的与要求

1.1 课程设计的需求分析

为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。

1.2 课程设计的目的

将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结

构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度

(1) 进一步巩固加强《C语言程序设计教程》中所学习的内容。

(2) 将《C语言程序设计教程》中学到的内容付诸实践,提高学生的实际解决

问题的能力。

(3) 利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统

程序,训练独立开发应用系统,进行数据处理的综合能力 (4) 熟练掌握C++语言的基本语法,灵活运用各种数据类型。

1.3 课程设计的实验环境

硬件要求能运行Windows 操作系统的微机系统。C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件。

1.4 课程设计的预备知识

熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。

1.5 课程设计的要求

1. 仔细分析设计题目,画出程序流程图,编写程序源代码。 2. 积极上机调试源程序,增强编程技巧与调程能力。 3. 认真书写课程设计预习报告,课程设计说明书。

4. 积极和小组内同学合作,听从指导老师的意见,确保课程设计顺利完成。

2. 课程设计的内容

2.1 C++语言程序设计------《图书馆信息管理系统》问题分析

2.1.1 功能分析

(1)图书信息:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。 (2)系统以菜单方式工作:

图书信息录入功能:可以输入图书的相关信息,例如关键字,书名等。

图书信息浏览功能:可以了解图书作者以及书的大体内容等。 查询和排序功能:按书名查询,按作者名查询。

图书信息的删除与修改:可以删除与修改图书的相关信息。

2.1.2 算法设计及程序设计中的技术重点?

1.采用Visual C++6.0 编写程序,使用文本文件保存数据。

2. 定义读者类,保存单个读者信息。 3. 定义读者库类,实现建立读者的个人资料。 4. 定义图书类,保存单个图书信息。

5. 定义图书库类,实现对图书的维护,查找,删除等。 6. 编制主函数 main() 完成函数调用过程。

7. 使用文本文件利用输入输出流留保存和提取数据。 读者类:Reader

表2-1读者类设计参数

名称 说明 类别 成员变量 int tag; 删除标记 int no; 读 者编号 成员变量 char name[10]; 读 者姓名 int borbook[Maxbor] 所借图书 Reader(); 成员变量 成员变量 构造函数 成员函数 成员函数 成员函数 成员函数 成员函数 成员函数 成员函数 成员函数 char *getname(); 获取姓名 int gettag(); 获取删除标记 int getno(); 获取读者编号 void delbook(); 设置删除标记 void addreader(); 增加读者 void borrowbook(); 借书操作 int retbook(); 还书操作 void disp(); 输出读者信息

读者库类:RDataBase

表2-2读者库类设计参数 名称 说明 类别 成员变量 成员变量 int top; 读者记录指针 Reader read[Maxr]; 图书记录 RDatabase(); 构造函数,将reader.txt读到构造函数 read[] void clear(); 全删 int addreader(int n,char *na) 成员函数 添加读者 成员函数 成员函数 成员函数 成员函数 Reader *query(int readerid); 按编号查找读者 void readerdata(); 读 者库维护 void disp(); ~RDatabase(); 输出所有读者信息 析构函数,将read[]写到成员函数 reader.txt 图书类:Book

表2-3图书类设计参数

名称 说明 类别 成员变量 int tag; 删除标记 int no; 图 书编号 成员变量 char name[20]; 书 名 int onshelf; 是否在架 Book(); 成员变量 成员变量 构造函数 成员函数 成员函数 成员函数 成员函数 成员函数 char *getname(); 获取书名 int getno(); 获取图书编号 int gettag(); 获取删除标记 void setname(char na[]); 设置书名 void delbook(); 删除图书 void addbook(int n,char *na) 增加图书 成员函数 成员函数 成员函数 成员函数 int borrowbook(); 借书操作 void retbook(); 还书操作 void disp(); 输 出图书

图书库类:BDataBase

表2-4图书库类设计参数

名称 说明 类别 成员变量 成员变量 int top; 图书记录指针 Book book[Maxb]; 图书记录 BDatabase(); 构造函数,将book.txt读到构造函数 book[] void clear(); 全删 int addbook(int n,char *na) 成员函数 增加图书 成员函数 成员函数 成员函数 成员函数 Book *query(int bookid); 按编号查找图书 void bookdata(); 图 书库维护 void disp(); ~BDatabase(); 显示 析构函数,将book[]写到成员函数 book.txt

系统流程图

图书管理系统 图书管理 读者管理 借书 还书 退出 图书添加

图书修改 图书查询 读者添加 读者修改 读者查询 借书 操作 还书 操作

进入借书模块,开始 输出提示信息 输入读者编号和借阅的图书编号 读者是否存在 Y N 提示错误信息 图书是否存在 Y 图书是否全部借出 N Y 保存借书信息 提示错误信息 提示错误信息 提示成功信息 退出借书模块,结束 图2-5 借书模块流程图

2.2源程序代码

#include #include #include

#include //输入/输出文件流类 using namespace std;

const int Maxr=100;//最多的读者 const int Maxb=100;//最多的图书

const int Maxbor=5;//每位读者最多借五本书 //读者类,实现对读者的信息的描述 class Reader {

private:

int tag; //删除标记 1:已删 0:未删 int no; //读者编号

char name[10]; //读者姓名

int borbook[Maxbor];//所借图书 public:

Reader() {}

char *getname() {return name;} //获取姓名 int gettag() {return tag;} //获取删除标记 int getno() {return no;} //获取读者编号 void setname(char na[]) //设置姓名 { strcpy(name,na); }

void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删 void addreader(int n,char *na)//增加读者 { tag=0; no=n;

strcpy(name,na);

for(int i=0;i

void borrowbook(int bookid)//借书操作 { for(int i=0;i

} } }

int retbook(int bookid)//还书操作 { for(int i=0;i

void disp()//读出读者信息 { cout << setw(5) << no <

//读者类库,实现建立读者的个人资料 class RDatabase {

private:

int top; //读者记录指针

Reader read[Maxr];//读者记录 public:

RDatabase() //构造函数,将reader.txt读到read[]中 { Reader s; top=-1; fstream file(\打开一个输入文件 while (1) { file.read((char *)&s,sizeof(s)); if (!file)break; top++; read[top]=s; }

file.close(); //关闭 reader.txt }

void clear()//删除所有读者信息 { top=-1; }

int addreader(int n,char *na)//添加读者时先查找是否存在 { Reader *p=query(n); if (p==NULL) { top++; read[top].addreader(n,na); return 1; } return 0; }

Reader *query(int readerid)//按编号查找 { for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) { return &read[i]; } return NULL; }

void disp() //输出所有读者信息 { for (int i=0;i<=top;i++) read[i].disp(); }

void readerdata();//读者库维护

~RDatabase() //析构函数,将read[]写到reader.txt文件中 { fstream file(\ for (int i=0;i<=top;i++) if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i])); file.close(); } };

void RDatabase::readerdata() {

char choice; char rname[20]; int readerid;

Reader *r;

while (choice!='0') { cout <<\读 者 维 护\\n\\n\\n\\t\\t 1 新 增\\n\\n\\t\\t 2 更 改\\n\\n\\t\\t 3 删 除\\n\\n\\t\\t 4 查 找\\n\\n\\t\\t 5 显 示\\n\\n\\t\\t 6 全 删\\n\\n\\t\\t 0 退 出\ cin >> choice; switch (choice) { case '1': cout << \输入读者编号:\ cin >> readerid; cout << \输入读者姓名:\ cin >> rname; addreader (readerid,rname); break; case '2': cout << \输入读者编号:\ cin >> readerid; r=query(readerid); if (r==NULL) { cout << \该读者不存在 \ break; } cout << \输入新的姓名:\ cin >> rname; r->setname(rname); break; case '3': cout << \输入读者编号:\ cin >> readerid; r=query(readerid); if (r==NULL) { cout <<\该读者不存在\ break; } r->delbook(); break; case '4': cout << \读入读者编号:\ cin >> readerid; r=query(readerid); if (r==NULL)

{ cout <<\该读者不存在\ break; } r->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<\输入错误,请从新输入:\ } } }

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等 class Book {

private:

int tag;//删除标记 1:已删 0:未删 int no;//图书编号 char name[20];//书名

int onshelf;//是否再架 1:再架 2:已借 public:

Book(){}

char *getname() { return name; }//获取姓名 int getno(){ return no; }//获取图书编号 int gettag(){ return tag; }//获取删除标记 void setname(char na[])//设置书名 { strcpy(name,na); }

void delbook(){ tag=1;}//删除图书 void addbook(int n,char *na)//增加图书 { tag=0; no=n; strcpy(name,na); onshelf=1; }

int borrowbook()//借书操作 { if (onshelf==1)

{ onshelf=0; return 1; } return 0; }

void retbook()//还书操作 { onshelf=1; }

void disp()//输出图书 { cout << setw(6) << no << setw(18) << name << setw(10) <<(onshelf==1? \在架\已借\ } };

//图书库类,实现对图书的维护,查找,删除等 class BDatabase {

private:

int top; //图书记录指针

Book book[Maxb]; //图书记录 public:

BDatabase()//构造函数,将book.txt读到book[]中 { Book b; top=-1; fstream file(\ while (1) { file.read((char *)&b,sizeof(b)); if (!file) break; top++; book[top]=b; } file.close(); }

void clear()//全删 { top=-1; }

int addbook(int n,char *na)//增加图书 {

Book *p=query(n); if (NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; }

Book *query(int bookid)//查找图书 { for (int i=0;i<=top;i++) if (book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; }

void bookdata();//图书库维护 void disp() { for (int i=0;i<=top;i++) if (book[i].gettag()==0) book[i].disp(); }

~BDatabase()//析构函数,将book[]写到book.txt文件中 { fstream file(\ for (int i=0;i<=top;i++) if (book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } };

void BDatabase::bookdata() {

char choice; char bname[40]; int bookid; Book *b;

while (choice!='0') { cout <<\图 书 维 护 \ cout<<\新 增\\n \\t\\t2 更 改\\n\\t\\t3 删 除\\n\\t\\t4 查 找\\n\\t\\t5 显 示

\\n\\t\\t6 全 删\\n\\t\\t0 退 出\ cin >> choice; switch (choice) { case '1': cout << \输入图书编号:\ cin >> bookid; cout << \输入图书书名:\ cin >> bname; addbook(bookid,bname); break; case '2': cout << \输入图书编号:\ cin >> bookid; b=query(bookid); if (b==NULL) { cout << \该图书不存在 \ break; } cout << \输入新的书名:\ cin >> bname; b->setname(bname); break; case '3': cout <<\读入图书编号:\ cin >> bookid; b=query(bookid); if (b==NULL) { cout <<\该图书不存在\ break; } b->delbook(); break; case '4': cout << \读入图书编号:\ cin >> bookid; b=query(bookid); if (b==NULL) { cout <<\该图书不存在\ break; } b->disp(); break;

case '5': disp(); break; case '6': clear(); break; default:cout<<\输入错误,请从新输入:\ } } }

//main() 函数的实现,程序的主界面的引导 void main() {

char choice;

int bookid,readerid; RDatabase ReaderDB; Reader *r;

BDatabase BookDB; Book *b;

while(choice!='0') { cout <> choice; switch (choice) { case '1': cout <<\借书 读者编号:\ cin >>readerid; cout <<\图书编号: \ cin >>bookid; r=ReaderDB.query(readerid);//按编号查找 if (NULL==r) { cout <<\不存在该读者,不能借书\ } b=BookDB.query(bookid); if (b==NULL) { cout <<\不存在该图书,不能借书\ break; } if (b->borrowbook()==0) { cout << \该图书已借出,不能借书\

}

}

r->borrowbook(b->getno()); break; case '2': cout<<\还书\\n 读者编号:\ cin >>readerid; cout << \图书编号:\ cin >>bookid; r=ReaderDB.query(readerid); if (r==NULL) { cout <<\不存在该读者,不能还书\ } b=BookDB.query(bookid); if (b==NULL) { cout <<\不存在该图书,不能还书\ b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break;

default:cout<<\输入错误,请从新输入:\ system(\}

2.3 运行结果

(1)主菜单

(2)新增图书

(3)查找图书

(4)删除图书

(5)添加读者

(6)查找读者

(7)删除读者

(8)借书

借书之后读者信息

借书之后图书信息

(9)还书

还书之后读者信息

还书之后图书信息

(10)文本的输入\\输出

2.5 用户手册

说明:进入主界面。有五个功能:(输入完后,回车)

(1)借书:依次输入读者编号,图书编号,若不存在读者或图书,显示提示信息。 (2)还书:依次输入读者编号,图书编号,若输入信息错误,显示提示信息。 (3)图书维护:具有新增、更改、删除、查找、显示、全删、退出,七大功能。用户可根据需要,选择相应功能。

(4)读者维护:具有新增、更改、删除、查找、显示、全删、退出,七大功能。用户可根据需要,选择相应功能。 (5)离开。

程序关闭后,可在程序保存文档中找到reader.txt,book.txt文件,便于信息的保存,方便用户查找相应信息。

2.4 课程设计总结

整个系统编写的而过程中,涉及了较多C++语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。

这个实用的小型图书管理程序程序以面向对象的设计理念为基础,灵活应用类的知识,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。查询时可按书名、编号等方式查询,找到后输出这本书的所有信息。可查询图书的在架状态,方便用户进行借书、还书操作。在借书、还书成功后图书的在架状态改变,并有提示信息让用户保存信息。系统中主要的数据结构就是读者类、读者库类、图书类、图书库类的建立,包含读者姓名、图书名、读者编号、图书编号、读者标号、图书标号、在架状态等,在处理过程中各项可以作为一名读者和一本图书的不同属性来进行处理。

3. 参考文献

本文来源:https://www.bwwdw.com/article/71z.html

Top