简易图书管理系统
一、功能描述
该系统运行后主菜单界面如下:
系统可实现图书查询、借书、还书、书目浏览、图书管理等功能。
在主菜单状态下输入“Q”或“q”,则系统运行结束。
一、主要数据结构:
1、图书类型:类数组
Class Book{
char Name[80]; //书名
char Auther[80]; //作者
int amount; //该书在库数量
};
Book booklist[20]; //假定不会超过20种图书
2、书库文件:用文本文件保存书目信息
其中第一个数据为一个整数,是图书的种类数。
此后的数据为书目信息,每本书包括书名、作者、在库数量。
程序运行之前可在工程文件夹下用记事本建立一个文本文件,其中写入数据0。
以此作为书库文件的初始状态。
二、主要功能模块
1、查询模块
提示输入待查询书名,搜索到匹配项后在屏幕上显示书名、作者、该书在库数量(有几本书);若库中无匹配书目,则屏幕提示“书库无此书!”。
查寻范围为从文件中读出的结构体数组。
2、浏览模块
在屏幕上显示目前书库信息,即结构体数组信息。
若库中读出的图书种类数为0,说明还没有图书,此时提示“库中无图书!”。
3、借书模块
从库中读出信息,如果图书种类数=0,表明库中无图书,则提示“库中无图书,暂不能借阅!”,否则提示输入待借图书名,如未搜索到匹配项,提示“库中无此书!”,如果搜索到的图书在库数量已经为0,则提示“抱歉,该书全部借出!”,否则提示“借阅成功”,同时将该书在库数量-1。
并将图书信息写入文件。
4、还书模块
从库中读出信息,如果图书种类数=0,库中无图书,提示“库中无图书,暂不能还书!”,否则提示输入待还书名,如未搜索到匹配项提示“库中无此书!”,否则提示“还书成功”,同时该书在库数量+1。
并将信息写入文件。
5、管理模块
该模块可向库中添加图书。
有权限者方可进入管理,运行后首先提示输入口令,可以有三次输入机会,若口令不对提示“抱歉,无权限,按回车返回主菜单”。
否则可以向书库中添加图书。
系统提示“输入添加图书的书名、作者、在库数量:”,可一次添加多种图书。
管理模块的口令自行预定。
修改信息后写入文件。
二、算法提示:
1、数据类型及变量定义
Class Book{//表示图书的类
char Name[80]; //书名
char Auther[80]; //作者
int amount; //该书在库数量
};
Book booklist[20]; //结构体数组,假定不会超过20种图书
书库图书信息:文本文件建立,初始可用记事本建立,只有一个数据0,表示空库。
2、主函数模块算法
void main(){
for(; ;){ //系统连续工作至退出为止
//调用显示主菜单模块;
//提取输入的选择字符ch;
//根据字符ch值选择调用查询模块、或借阅模块、或还书模块、或浏览
//模块、或管理模块、或退出
if(选择退出) 退出循环;
}
}
3、查询模块算法
void SearchBook(){
//将书库信息读入数组
for(;;){ //可连续查询多次
//输入待查询书名bookName;
//在数组中查找匹配的书名
//如果找到输出该书所有信息,否则cout<<endl<<"库中无此书!";
cout<<"继续查询吗?按n键退出, 回车键继续查询:";
cin.get(ch); //吸收以前输入项的回车符
cin.get(ch);
if(ch=='n'||ch=='N') 退出循环
}
MainMenu(); //显示主菜单
}
4、借阅模块算法
void BorrowBook(){
//读出书库信息
if(是空库) cout<<"库中无图书,暂不能借阅!";
else{ //库中有书
for(;;){ //可连续重复借阅
输入待借书名bookName;
//在数组中查找匹配项
if(未找到) cout<< "库中无此书!";
else if(在库数量==0) cout<<"抱歉,该书全部借出.";
else{
cout<<"借阅成功!"<<endl<<endl;
//在库数量--
}
cout<<"继续借阅吗?按n键退出, 回车键继续借阅:";
cin.get(ch);
cin.get(ch);
if(ch=='n'||ch=='N')退出循环;
}
//书的种类及书目数组写入文件
MainMenu();
}
}
5、还书模块算法
void ReturnBook(){
//读出书库信息
for(;;){ //可重复还书
//输入待还书名bookName;
//查找匹配项
if(未找到) cout<<endl<<"库中无此书!";
else{
cout<<"还书成功!";
//该书在库数量++
}
cout<<"继续借阅吗?按n键退出, 回车键继续借阅:";
cin.get(ch);
cin.get(ch);
if(ch=='n'||ch=='N')退出循环
}
//书的种类及书目数组写入文件
MainMenu();
}
6、浏览模块算法
void ListShow(){
//读出书库信息
if(是空库) cout<<"库中无图书!";
else 输出结构体数组信息;
cout<<"按回车键返回:";
cin.get(ch);
cin.get(ch);
if(ch=='\r') MainMenu();
}
7、管理模块算法
void ManageBook(){ //口令进入
for(int i=0;i<3;i++){ //有三次输入机会
输入口令password;
if(口令对) 退出循环;
}
if(i>=3){ //无权限
cout<<"抱歉,无此权限,按回车返回主菜单";
char ch;
cin.get(ch);
cin.get(ch);
if(ch=='\r') MainMenu();
}
else{ //进入管理
//读出书库信息
for(;;){ //可连续添加多种图书
//输入添加图书的书名Name、作者Author、在库数量amount;
//查找匹配项
if(已有) 在库数量增加
else{ //库中原来无此书
//数组中增加该项图书信息
}
cout<<"继续添加吗?按n键退出,回车键继续添加:";
cin.get(ch);
cin.get(ch);
if(ch=='n'||ch=='N') 退出循环
}
//书的种类及书目数组写入文件
MainMenu();
}
}
8、退出模块算法
void Quit(){
将书种类和所定义类数组信息写入文本文件;
}
三、程序设计所需知识要点
1、类数组的使用
2、文本文件使用
3、函数的使用
4、字符串处理函数的使用
四、设计方法提示
利用函数模块化的优点,自顶层向下逐个模块细化。
查询、借阅、还书、浏览等各模块功能相似。
设计时注意界面交互型良好。