第一篇:c语言图书管理系统
C语言——图书管理系统
代码部分: #include
/*定义数据库相关操作变量*/ MYSQL mysql;
// MYSQL_RES *result;
//定义结果集变量 MYSQL_ROW row;
//定义行变量 char ch[2];
void ShowAll();
/*显示所有的图书信息*/ void AddBook();
/*添加图书信息*/ void ModifyBook();
/*修改图书信息*/ void DeleteBook();
/*删除图书信息*/ void QueryBook();
/*查询图书信息*/
/*显示菜单*/ void showmenu(){
system(“cls”);
printf(“nnnnn”);
printf(“t╔═══════════════════════════╗n”);
printf(“t║
Welcome To Lemon Books System
║n”);
printf(“t╠═══════════════════════════╣n”);
printf(“t║t 1添加图书信息
║n”);
printf(“t║t 3删除图书信息
║n”);
printf(“t║t 5退出
║n”);
printf(“t╚═══════════════════════════╝n”);
printf(“n
ENTER YOUR CHOICE(1-6):”);
}
void inquire()/*询问用户是否显示主菜单*/ {
printf(“t 显示主菜单?(y/n):”);
scanf(“%s”,ch);
if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/
{
showmenu();
/*显示菜单*/
}
else
{
exit(0);
} }
/*显示主菜单,连接数据库*/ int main(){
int n;
//定义变量
存储用户输入的编号
mysql_init(&mysql);//初始化mysql结构
showmenu();
/*显示菜单*/
scanf(“%d”,&n);/*输入选择功能的编号*/
while(n)
{
switch(n)
{
case 1:
ShowAll();
/*调用显示所有图书数据的过程*/
break;
case 2:
AddBook();
/*添加图书信息*/
break;
case 3:
ModifyBook();
/*修改图书信息*/
break;
case 4:
DeleteBook();
/*删除图书信息*/
break;
case 5:
QueryBook();
/*查询图书信息*/
break;
case 6:
exit(0);
/*退出*/
default:break;
}
scanf(“%d”,&n);
} }
void ShowAll()
/*调用显示所有图书数据的过程*/ {
/*连接数据库*/
if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))
{
printf(“nt 不能连接数据库!n”);
}
else
{
/*数据库连接成功*/
if(mysql_query(&mysql,“select * from tb_book”))
{
//如果查询失败
printf(“nt 查询 tb_book 数据表失败!n”);
}
else
{
result=mysql_store_result(&mysql);//获得结果集
if(mysql_num_rows(result)!=NULL)
{ //有记录的情况,只有有记录取数据才有意义
printf(“t ════════════════════════════
n”);
printf(“t
显 示 所 有 图 书 信 息
n”);
printf(“t ════════════════════════════ n”);
printf(“t图书编号
图书名
作者
出版社
n”);
printf(“t-------------------------n”);
while((row=mysql_fetch_row(result)))
{
//取出结果集中记录
fprintf(stdout,“t
%s
%s
%s
%s
n”,row[0],row[1],row[2],row[3]);//输出这行记录
}
printf(“t ════════════════════════════ n”);
}
else
{
printf(“nt 没有记录信息!n”);
}
mysql_free_result(result);
//释放结果集
}
mysql_close(&mysql);
//释放连接
}
inquire();
/*询问是否显示主菜单*/ }
void AddBook()
/*添加图书信息*/ {
int rowcount;
/*结果集中的行数*/
char id[10];
/*编号*/
char *bookname;
char *author;
char *bookconcern;
char *sql;
char dest[500] ={“
”};
/*连接数据库*/
if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))
{
printf(“nt 不能连接数据库!n”);
}
else
{
/*数据库连接成功,插入数据*/
printf(“t ════════════════════════════ n”);
printf(“t
添 加 图 书 信 息
n”);
printf(“t ════════════════════════════ n”);
if(mysql_query(&mysql,“select * from tb_book”))
{
//如果查询失败
printf(“nt 查询 tb_book 数据表失败!n”);
}
else
{
result=mysql_store_result(&mysql);//获得结果集
rowcount=mysql_num_rows(result);//获得行数
row=mysql_fetch_row(result);
//获取结果集的行
printf(“t 图书编号:”);
scanf(“%s”,id);
/*输入图书编号*/
sql=“insert into tb_book(ID,bookname,author,bookconcern)values(”;
strcat(dest,sql);
strcat(dest,“'”);
strcat(dest,id);
strcat(dest,“', '”);
if(mysql_num_rows(result)!=NULL)
{
/*判断输入的编号是否存在*/
do
{
//存在相同编号
if(!strcmp(id,row[0]))
{
// printf(“%s”,row[0]);
printf(“nt 记录存在,按任意键继续!n”);
getch();
mysql_free_result(result);
/*释放结果集*/ mysql_close(&mysql);
/*释放连接*/
inquire();
/*询问是否显示主菜单*/
return;
}
}while(row=mysql_fetch_row(result));
}
bookname =(char*)malloc(50);
author =(char*)malloc(50);
bookconcern =(char*)malloc(50);
//不存在相同的编号
printf(“t 图书名:”);
scanf(“%s”,bookname);
/*输入图书名*/
strcat(dest,bookname);
/*将图书编号追加到sql语句后面*/
printf(“t 作者:”);
scanf(“%s”,author);
/*输入作者*/
strcat(dest,“', '”);
strcat(dest,author);
printf(“t 出版社:”);
scanf(“%s”,bookconcern);
/*输入出版社*/
strcat(dest,“', '”);
strcat(dest,bookconcern);
strcat(dest,“')”);
//printf(“%s”,dest);
if(mysql_query(&mysql,dest)!=0)
{
fprintf(stderr,“t 不能插入记录!”,mysql_error(&mysql));
}
else
{
printf(“t 插入成功!n”);
}
mysql_free_result(result);
//释放结果集
}
mysql_close(&mysql);
//释放连接
}
inquire();
/*询问是否显示主菜单*/ }
void ModifyBook()
/*修改图书信息*/ {
char id[10];
/*结果集中的行数*/
char *sql;
char dest[500] ={“
”};
char dest1[500] ={“
”};
char *bookname;
char *author;
char *bookconcern;
if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))
{
printf(“t 不能连接数据库!n”);
}
else
{
/*数据库连接成功*/
// printf(“连接成功”);
printf(“t 请输入您想要修改的图书编号.”);
scanf(“%s”,id);
/*输入图书编号*/
sql = “select * from tb_book where id=”;
strcat(dest,sql);
strcat(dest,id);
/*将图书编号追加到sql语句后面*/
//printf(“%sn”,dest);
/*查询该图书信息是否存在*/
if(mysql_query(&mysql,dest))
{
//如果查询失败
printf(“n 查询 tb_book 数据表失败!n”);
}
else
{
result=mysql_store_result(&mysql);//获得结果集
if(mysql_num_rows(result)!=NULL)
{
//有记录的情况,只有有记录取数据才有意义
printf(“t 发现记录信息,是否显示?(y/n)”);
scanf(“%s”,ch);
if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/
{
printf(“t ════════════════════════════
n”);
printf(“t
***** 显示图书信息 *****
n”);
printf(“t ════════════════════════════ n”);
printf(“t图书编号
图书名
作者
出版社
n”);
printf(“t-------------------------n”);
while((row=mysql_fetch_row(result)))
{
//取出结果集中记录
fprintf(stdout,“t
%s
%s
%s
%s
n”,row[0],row[1],row[2],row[3]);//输出这行记录
}
printf(“t ════════════════════════════ n”);
}
printf(“t Modify?(y/n)”);
scanf(“%s”,ch);
if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)
/*判断是否需要录入*/
{
sql = “update tb_book set bookname= '”;
strcat(dest1,sql);
//
printf(“%s”,sql);
bookname =(char*)malloc(20);
author =(char*)malloc(20);
bookconcern =(char*)malloc(20);
printf(“t 图书名:”);
scanf(“%s”,bookname);
/*输入图书名*/
strcat(dest1,bookname);
// printf(“%s”,&bookname);
printf(“t 作者:”);
scanf(“%s”,author);
/*输入作者*/
strcat(dest1,“', author= '”);
strcat(dest1,author);
/*追加sql语句*/
printf(“t 出版社:”);
scanf(“%s”,bookconcern);
/*输入出版社*/
strcat(dest1,“', bookconcern = '”);
strcat(dest1,bookconcern);
/*追加sql语句*/
strcat(dest1,“' where id= ”);
strcat(dest1,id);
//printf(“%s”,dest1);
if(mysql_query(&mysql,dest1)!=0)
{
fprintf(stderr,“t 不能修改记录!n”,mysql_error(&mysql));
}
else
{
printf(“t 修改成功!n”);
}
}
}
else
{
printf(“t 没有发现要修改的信息!n”);
}
}
mysql_free_result(result);
//释放结果集
}
mysql_close(&mysql);
//释放连接
inquire();
/*询问是否显示主菜单*/ }
void DeleteBook()
/*删除图书信息*/ {
char id[10];
/*结果集中的行数*/
char *sql;
char dest[100] ={“
”};
char dest1[100] ={“
”};
if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))
{
printf(“t 不能连接数据库!n”);
}
else
{
printf(“t 请输入您想要删除的图书编号.”);
scanf(“%s”,id);
/*输入图书编号*/
sql = “select * from tb_book where id=”;
strcat(dest,sql);
strcat(dest,id);
/*将图书编号追加到sql语句后面*/
//printf(“%sn”,dest);
/*查询该图书信息是否存在*/
if(mysql_query(&mysql,dest))
{
//如果查询失败
printf(“n 查询 tb_book 数据表失败!n”);
}
else
{
result=mysql_store_result(&mysql);//获得结果集
if(mysql_num_rows(result)!=NULL)
{ //有记录的情况,只有有记录取数据才有意义
printf(“t 发现记录信息,是否显示?(y/n)”);
scanf(“%s”,ch);
if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/
{
printf(“t ════════════════════════════
n”);
printf(“t
***** 显示图书信息 *****
n”);
printf(“t ════════════════════════════ n”);
printf(“t图书编号
图书名
作者
出版社
n”);
printf(“t-------------------------n”);
while((row=mysql_fetch_row(result)))
{
//取出结果集中记录
fprintf(stdout,“t
%s
%s
%s
%s
n”,row[0],row[1],row[2],row[3]);//输出这行记录
}
printf(“t ════════════════════════════ n”);
}
printf(“t 是否删除?(y/n)”);
scanf(“%s”,ch);
if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)
/*判断是否需要录入*/
{
sql = “delete from tb_book where ID= ”;
printf(“%s”,dest1);
strcat(dest1,sql);
strcat(dest1,id);
// printf(“%s”,dest1);
if(mysql_query(&mysql,dest1)!=0)
{
fprintf(stderr,“t 不能删除记录!n”,mysql_error(&mysql));
}
else
{
printf(“t 删除成功!n”);
}
}
}
else
{
printf(“t 没有发现要删除的信息!n”);
}
}
mysql_free_result(result);
//释放结果集
}
mysql_close(&mysql);
inquire();
/*询问是否显示主菜单*/ }
void QueryBook()
/*查询图书信息*/ {
char id[10];
/*结果集中的行数*/
char *sql;
char dest[100] ={“
”};
if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))
{
printf(“t 不能连接数据库!n”);
}
else
{
printf(“t 请输入您想要查询的图书编号:”);
scanf(“%s”,id);
/*输入图书编号*/
sql = “select * from tb_book where id=”;
strcat(dest,sql);
strcat(dest,id);
/*将图书编号追加到sql语句后面*/
if(mysql_query(&mysql,dest))
{
//如果查询失败
printf(“n 查询 tb_book 数据表失败!n”);
}
else
{
result=mysql_store_result(&mysql);//获得结果集
if(mysql_num_rows(result)!=NULL)
{ //有记录的情况,只有有记录取数据才有意义
printf(“t ════════════════════════════
n”);
printf(“t
显示图书信息
n”);
printf(“t ════════════════════════════ n”);
printf(“t图书编号
图书名
作者
出版社
n”);
printf(“t-------------------------n”);
while((row=mysql_fetch_row(result)))
{
//取出结果集中记录
fprintf(stdout,“t
%s
%s
%s
%s
n”,row[0],row[1],row[2],row[3]);//输出这行记录
}
printf(“t ════════════════════════════ n”);
}
else
{
printf(“t 没有发现要查询的信息!n”);
}
mysql_free_result(result);
//释放结果集
}
mysql_close(&mysql);
//释放连接
}
inquire();
/*询问是否显示主菜单*/ }
说明部分
附加MySQL数据库
将工程文件夹中的data文件夹下的db_books文件夹拷贝到本地Mysql数据库安装文件夹的data文件夹中。即可完成对数据库的附加。
连接MySql的步骤
MySQL为C语言提供了连接数据库的API,要想正常使用这些API,需要做以下两件事情:(1)包含这些API的声明文件,即mysql.h。
(2)让编译器找到这些API的可执行程序,即DLL库。下面介绍一下详细的步骤: 1.
下面解决,让编译器找到mysql.h的问题。需要在编译环境中作如下的设置: 在Visual C++ 6.0中,选择Tools(工具)/Options(选项)菜单项,如下图所示。
选择菜单命令
即可打开Options对话框,在Options对话框中选择Directories选项卡,在Show directories for下拉列表框中选择Include files选项,在Directiories列表框中添加本地安装MySQL的include目录路径。如下图所示。默认的路径应该在C:Program FilesMySQLMySQL Server 5.0include。
添加mysql.h文件
通过上述设置,编译器就可以知道MySQL的API接口中有哪些函数,以及函数的原型是怎样的。在编译时,所编写的程序已经能够通过编译(compile)这步了。
2.引入库函数
经过上一步的设置,程序已经可以编译通过了,但是编译通过并不等于可以生成可执行文件。还需要告诉编译器这些API函数的可执行文件在哪个DLL文件(libmysql.dll)中。
在工程中选择Tools/Options菜单命令,将弹出Options对话框,在该对话框中选择Directories选项卡,在Show directories for下拉列表框中选择Include files选项。添加本地安装的MySQL的Lib目录路径。默认的安装路径是C:Program FilesMySQLMySQL Server 5.0libdebug 或者C:Program
FilesMySQLMySQL Server 5.0libopt)。设置完成的效果如下图所示。
引用库
单击OK按钮,关闭Options对话框。选择Project/Settings菜单命令。如下图所示。
选择Project/Settings菜单项
下面添加libmysql.lib到工程中。选择Project/Settings菜单项,将弹出Project Settings对话框,在该对话框中选择Link选项卡。在Object/library modules文本框末尾添加libmysql.lib。如下图所示。
添加libmysql.lib到工程中
最好将libmysql.lib以及libmysql.dll文件拷贝到工程的目录下。设置完成后就可以运行程序了程序运行界面如下图所示:
第二篇:C语言程序设计图书管理系统
C语言程序设计
实验报告
题 目: 图书管理管理系统 院 系: 信息科技学院 专 业: 姓 名: 学 号:
指导教师: 杨呈勇 日 期: 09-09-18 问题定义 …………………………………………………………………………..3 2 系统设计 ……………………………………………………………………3 2.1 总体设计………………………………………………………………………………4
2.2 详细设计………………………………………………………………………………4 2.2.1 借书模块 ……… ………………………………………………… 4 2.2.2 图书维护………………………………………………………………………… 5 ① 新增记录 …………………………………………………………………… 5 ② 更改系统…………………………………………….………………… 6 ③删除系统 …………………………………………… 6 ④ 查找系统……………………………………………….………………….6 ⑤ 显示系统 ………………………………………………………………….7 3 系统实现 ………………………………………………………………………10 3.1 编码 ………………………………………………………………………8 3.1.1 程序预处理 ……….……………………………………………………………9 3.1.2 主函数main()……….……………………………………………………….9 4 系统维护 ………………………………………………………………………16 5 归纳总结 ………………………………………………………………………16 5.1 开发经验 ………………………………………………………………………16 5.2 实训中遇到的问题及解决方法 ………………………………………………16 5.3 设计中的不足之处……………………………………………………………………16 5.4 感想和心得体会 ……………………………………………………………………16
图书管理系统
本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表、文件及各种语句的运用如for();switch();if….else等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
图书信息包括:编号、书名、作者名、分类号、出版单位、出版时间、库存数量,价格等。试设计一图书信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作
(2)图书信息录入功能(图书信息用文件保存)(3)图书信息浏览功能(4)图书信息查询功能
查询方式:可以按书名,按作者名,按出版单位,按出版时间进行查询。(5)图书信息的删除与修改
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计 2.1 总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理
解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
图2.1
图书管理系统功能模块图
本图书管理系统要求采用单链表实现,如图2.1所示,它由如下四大功能模块组成: 借书模块。通过输入读者的编号和图书的编号,查找到要该借的书,完成借书这一项任务
还书模块。通过输入读者的编号和图书的编号,查找到要该还的书,完成还书这一项任务
图书维护模块。完成对图书信息的维护。在此图书管理系统中,它实现了对图书信息的新曾、更改、删除、查找和显示操作,并将追加后的数据存入源数据文件。读者维护模块。一是实现对读者记录的存盘,即将读者信息写入数据文件中;
2.2 详细设计
2.2.1 借书模块
通过输入读者的信息和要借的书的编号。系统显示相应的内容,若该文件中没有数据,系统会提示单链表为空,没有任何读者记录或图书操作,此时,用户应选择调用create()函数,进行读者记录的输入,即完成在单链表1中添加记录的操作。值得一提的是,这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据进行条件判断,直到满足条件为止,这样一来,大大减少了代码的重复和冗余,符合模块化程序设计的特点。
2.2.2 还书模块
还书模块主要实现了在单链表中按读者和图书的编号查找满足相关条件的借书记录。在
用户选择4,调用查询函数search()中,为指向保存了读者信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针定位操作,设计一个
int retbook(int bookid)
{
for(int i=0;i { if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } //读出读者信息 void disp() { cout << setw(5)<< no < for(int i=0;i if(borbook[i]!=0) cout << borbook[i] << “|”; cout << “]”< } }; 若没有该记录,则显示无此记录,返回到上一操作。 2.2.3 图书维护模块 此模块主要实现了对图书记录的新增、更改、删除、查找和显示操作。因为图书记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。下面分别介绍着4个功能模块。 ①新增记录。该操作需要对单链表中目标节点的数据域中的值进行追加新增要输入图书的编号和书名,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; } ⑤显示系统。该操作可以显示出图书现在的信息。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 <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } }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 <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } } 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 <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } 3、系统实现 3.1 编码 3.1.2 主函数main()include #include #include //输入/输出文件流类 #include using namespace std; //最多的读者 const int Maxr=100; //最多的图书 const int Maxb=100; //每位读者最多借五本书 const int Maxbor=5; //图书库类,实现对图书的维护,查找,删除等 class BDatabase { private: //图书记录指针 int top; //图书记录 Book book[Maxb]; public: //构造函数,将book.txt读到book[]中 BDatabase() { Book b; top=-1; fstream file(“book.txt”,ios::in); 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(); } //析构函数,将book[]写到book.txt文件中 ~BDatabase() { fstream file(“book.txt”,ios::out); 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 <<“nnnttt图 书 维 护 ”< cout<<“tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出”< 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 <<“ 该图书不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 读入图书编号:”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 该图书不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“输入错误,请从新输入:”; } } } //main()函数的实现,程序的主界面的引导 int main() { char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout < cout <<“ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开”< cin >> choice; switch(choice) { case '1': cout <<“ 借书 读者编号:”; cin >>readerid; cout <<“ 图书编号: ”; cin >>bookid; //按编号查找 r=ReaderDB.query(readerid); if(NULL==r) { cout <<“ 不存在该读者,不能借书”<< endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在该图书,不能借书”<< endl; break; } if(b->borrowbook()==0) { cout << “ 该图书已借出,不能借书”<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<“还书n 读者编号:”; cin >>readerid; cout << “ 图书编号:”; cin >>bookid; r=ReaderDB.query(readerid); if(r==NULL) { cout <<“ 不存在该读者,不能还书” << endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在该图书,不能还书” < break; } b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<“输入错误,请从新输入:”; 4、系统维护 经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。 5、归纳总结 5.1 开发经验 通过对本题目的开发,体会到要掌握以下几点内容。 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。 编写主函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。 定义函数时,应选好参数的个数和数据类型。 文件使用方法。文件使用完毕后应及时关闭。 5.2 实训中遇到的问题及解决方法 在实训过程中,我遇到许多的问题,比如有些语句有语法错误,表达式不正确,或缺少}或;等。或者是没有宏定义,申明某些变量。这些都比较容易解决。通过查阅课本和请教同学,在经过WIN-TV编译,知道哪有错误就改一下就行。比较严重的是,我的代码在求解平均成绩和总分时没有录入,且乱码。自已改了很久,也在网上查询但是都不行。最后在老师的帮助下及查阅有关资料,把代码改出来了。 5.3 设计中尚存的不足之处 关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,比如没有排序前和排序后的学生记录输出结果显示和有些程序功能没有满足所给题目要求及好几项都没有显示出学生具体的信息,甚至有些地方有点乱;其次,有些地方好像功能有点重复了,且编写的代码有重复;最后,就是该程序界面不够美观大方,有些文件不能链接。 5.4 感想和心得体会 通过这次实训,我感触甚深,要把所学的理论知识运用于解决实际问题不仅要付出艰辛的劳动,还得要有科学的方法和坚持不懈的努力。加上我们只是学了一个学期的c语言,我们所学的知识还不足以独立编写程序代码。但是我认为只要我们认真的去学去做,我们会受益非浅。这次实训让我进一步理解了“编程是什么”,“如何去编程”,“编程的目的又是什么”,„„发现自己的知识竟是如此贫乏,顿时感到了压力的存在,从而也激发了我的学习热情。它会成为我今后不断进取、永不懈怠的动力。 在整个实训过程中,老师给了我很大的帮助,使我由不了解怎样运用链表到逐渐懂得链表的结构及初步掌握链表结构。还重新复习了一些语句的使用,比如for(0;switch();if….elser();结构体的使用;枚举等。而且我能够坚持虚心的向老师以及同学请教问题。它使我明白了虚心好学的重要性,更让我懂得了如何跟老师同学去相处、去沟通。没有老师和同学们的无私帮助,我不可能圆满完成这次实训任务。非常感谢帮助过我的所有老师和同学们,在此,谨向他们一并表示感谢!我开始喜欢这个程序设计了,尤其觉得它是很有挑战性的,是对知识点扎实程度的考察,也是对个人能力的考察,还是对个人化毅力的考验。它让我明白做任何事都不应该轻易放弃。这样的课程设计,既有利于教学,又可以教会学生书本以外的很多知识。现在我对它越来越感兴趣,今后我会更加关注C语言程序,把C语言学好。希望老师以后多多指导,给予一定的帮助! 图书管理系统源代码 #include Length();//计算链表长度 DblNode 象,读入图书馆书籍数据 ofstream magFileOut;// 文件流对象,保存图书馆杂志数据 ifstream magFileIn;// 文件流对象,读入图书馆杂志数据 ofstream readerFileOut;// 文件流对象,保存图书馆读者数据 ifstream readerFileIn;// 文件流对象,读入图书馆读者数据 ofstream loanFileOut;// 文件流对象,保存图书馆借阅信息数据 ifstream loanFileIn;// 文件流对象,读入图书馆借阅信息 ofstream managerFileOut;// 文件流对象,保存图书馆管理员数据 ifstream managerFileIn;// 文件流对象,读入图书馆管理员数据 public: Library();// 构造函数 ~Library();//析构函数 void Run();// 图书馆类的运行函数 void CreateBibliotheca();// 创建书目 void CreateReader();// 创建读者库 void CreateManager();// 创建管理员信息 int ShowMainMenu();// 显示主菜单函数 void Borrow();// 借书操作 void Return();// 还书操作 void Require();// 查询操作 void SaveInfo();// 保存图书馆信息 void OpenInfo();// 读入图书馆信息 }; 目录 第一章 绪论.....................................................................................................................................1 第二章 需求分析..............................................................................................................................2 2.1任务概述............................................................................................................................2 2.1.1 图书管理系统完成的主要目标...........................................................................2 2.1.2用户的特点............................................................................................................3 2.2需求规定............................................................................................................................3 2.2.1对功能的规定........................................................................................................3 2.2.2读者管理功能........................................................................................................4 2.2.3系统管理功能........................................................................................................4 第三章 概要设计.............................................................................................................................4 3.1总体设计............................................................................................................................4 3.1.1系统目标设计........................................................................................................4 3.1.2系统功能分析........................................................................................................5 3.2系统设计思想.....................................................................................................................5 3.3 系统模块功能解析............................................................................................................5 第四章 详细设计.............................................................................................................................6 4.1程序设计说明....................................................................................................................6 4.1.1用户登录模块........................................................................................................6 4.1.2用户添加模块........................................................................................................7 4.1.3书籍查询模块........................................................................................................8 4.1.4图书借阅模块........................................................................................................9 4.1.5图书归还模块......................................................................................................10 4.1.6新书入库模块......................................................................................................11 第五章 编码与测试.......................................................................................................................13 5.1各功能模块的实现...........................................................................................................13 5.2 测试.................................................................................................................................19 5.2.1借阅卡管理测试..................................................................................................19 5.2.2书籍管理测试......................................................................................................19 5.2.3系统管理测试......................................................................................................19 结束语.............................................................................................................................................20 致 谢...........................................................................................................................................21 参考文献.........................................................................................................................................21 图书管理系统 摘要:本文介绍了在VB6.0环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个管理信息系统的过程。通过分析传统的人工管理图书馆的不足,创建了一套行之有效的计算机管理图书馆的方案。文章详细介绍了图书管理信息系统的系统分析部分,包括可行性分析、组织机构分析、管理职能分析、业务流程分析、数据流程分析、数据字典、处理描述等等;系统设计部分主要介绍了系统功能设计和数据库设计;系统实现部分列出了几个主要的程序框图,并附带了一些主要的窗口和程序。关键字:图书管理系统,VB6.0,sqlserver2000,信息系统 Library Management System Abstract:This article introduces the detailed process of exploring a management information system under the environment of VB6.0, utilizing “Top-Bottom” overall plan and a strategy according to “Bottom-Top” application and exploitation.That is to establish a set of effective scheme for library management by computer, through analyzing disadvantages of traditional library management by human resources.This article emphasizes on three sections.The system analysis section of library management information includes feasible analysis, organizing organs analysis, management function analysis, technological process of business analysis, technological process of data analysis, data dictionary, disposal description and the like.The system design section mainly focuses on system function design and data base design.And the system realization section has provided several major program charts, together with the main windows and programs.Key words: library management system, VB6.0,information system 第一章 绪论 随着人类社会的发展,人类对知识的需求也不断地增长。在这种形势下,书籍就渐渐地成为人们获取并增长知识的主要途径,而图书馆就自然而然地在人们的生活中占据了一定的位置,如何科学地管理图书馆不但关系到读者求知的方便程度,也关系到图书馆的发展,因此,开发一套完善的图书馆管理系统就必不可 少了。 图书馆管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端的应用程序的开发两个方面。对于前者要求建立数据的一致性和完整性,对于后者则要求应用程序功能的完备,易用等的特点。基于上述考虑本系统主要利用VB6.0作前端的应用开发工具,利用sqlsever 作为后台的数据库,利用WINDOWS作为系统平台开发的图书管理系统。另外本图书馆管理系统利用软件工程化思想和方法,总体上是采用结构化生命法进行系统分析和设计的,而系统实现等步骤则采用了原型法和面对对象的方法 系统开发的总目标是实现内部图书借阅管理的系统化、规范化和自动化。能够对图书进行注册登记,也就是将图书的基本信息(如:书名、作者、价格等)预先存入数据库中,供以后检索。能够对借阅人进行注册登记,包括记录借阅人的姓名、地址、电话等信息。提供方便的查询方法。如:以书名、作者、出版社、出版时间(确切的时间、时间段、某一时间之前、某一时间之后)等信息进行图书检索,并能反映出图书的借阅情况;以借阅人编号对借阅人信息进行检索;以出版社名称查询出版社联系方式信息。提供统计分析功能。可以展现出图书类型比例、库存与借出比例。提供旧书销毁功能,对于淘汰、损坏、丢失的书目可及时对数据库进行修改。能够对使用该管理系统的用户进行管理,按照不同的工作职能提供不同的功能授权。提供较为完善的差错控制与友好的用户界面,尽量避免误操作。图书馆的基本功能就是为读者提供借阅服务,读者通过借阅这一过程,可以把图书带出图书馆,从而使读者能够更方便的浏览图书。借书过程中,图书管理员要对读者的借书资格进行审查,对符合借书条件的读者,允许其借书,对其借书记录进行登记;对没有借书资格的读者,禁止其借书。 在VB6.0环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个管理信息系统的过程。通过分析传统的人工管理图书馆的不足,创建了一套行之有效的计算机管理图书馆的方案。文章详细介绍了图书管理信息系统的系统分析部分,包括可行性分析、组织机构分析、管理职能分析、业务流程分析、数据流程分析、数据字典、处理描述等等;系统设计部分主要介绍了系统功能设计和数据库设计;系统实现部分列出了几个主要的程序框图,并附带了一些主要的窗口和程序。 第二章 需求分析 2.1任务概述 2.1.1 图书管理系统完成的主要目标 进入系统前需要身份认证、用户名、密码、输入正确方可进入。用户可以根据需要进行书库管理。用户可以进行借书证的办理、查询、挂失等操作。用户可 以添加账户和修改密码。2.1.2用户的特点 最终用户包括读者(具有借阅卡的人)、图书管理员,鉴于此软件应用于大学图书管理,读者基本都是在校大学生即校职工和领导,图书管理员都是接受过高等教育的职工,因此他们都懂得运用基本的计算机知识。大学图书管理系统的使用频度很高,假如一个一万人的大学来讲,每天图书馆的平均日流量为1.5万。因此,该软件的可靠性、可用性、可维护性显得尤为重要。 2.2需求规定 2.2.1对功能的规定 1、图书信息查询/借书信息查询:图书馆主要向读者提供图书借阅的服务。读者为了借阅图书,一般情况下,需要在借书之前查询所要借阅的图书情况,所以图书馆需要为读者提供图书查询功能。例如,读者可能想借阅某方面的书,但不知道图书馆在该方面有哪些图书可供借阅,所以需要对图书馆的图书进行查询;或者,读者知道想借阅的图书信息,但不知道该图书馆是否有该书或不知道图书在图书馆的位置、是否被借出、是否可以借阅等信息,这也需要使用图书查询功能。一般的图书查询中,读者是通过图书登记卡、浏览图书登记卡中的信息得到图书信息的。经过图书查询,读者获得图书馆是否有自己想要的图书,该图书的简单信息以及图书在图书馆的借阅位置等信息。 2、新书入库:为了能正常运行,图书馆要及时更新馆藏图书。对于新书,要购进,供读者借阅;所以要设计到图书的批量入库。对于批量入库,图书管理员要批量登记图书的信息,包括书名ID、ISBN、图书名称、作者、出版社、单价、入库时间、图书总量、现存总量等。 3、借阅图书/归还图书:图书馆的基本功能之一就是为读者提供借阅服务,读者通过借阅这一过程,可以把图书带出图书馆,从而使读者能够更方便的浏览图书。借书过程中,图书管理员要对读者的借书资格进行审查,对符合借书条件的读者,允许其借书,对其借书记录进行登记;对没有借书资格的读者,禁止其借书。具体的步骤如下:读者向图书管理员提交请求和图书借阅卡,图书管理员检查读者提供的借阅卡,如果该借阅证真实准确,读者已经借阅的图书并没有超过允许借书量,而且读者没有逾期未还的图书,则允许读者借书,否则,读者不能从图书馆借书。读者拿到要借阅的图书,同时拿到自己的借阅卡,借书过程完毕。当借阅图书的数量超过5本或者出现未按期归还图书的情况,则不好进行借阅处理。图书馆的另一基本功能就是为读者提供还书服务,读者在一本图书借阅期满之前把该图书还给图书馆,一般的还书步骤如下:读者把所借的图书和自己的借阅卡交给图书管理员。图书管理员对图书进行检查,看有无损坏,如果出现图书的损坏情况,读者应进行相应的赔偿。图书管理员查看是否超过规定借阅期限,如果已经过期,则读者要按规定交纳罚金。图书管理员进行登记,同时把还书信息记入借阅卡。读者拿回自己的借阅卡,还书过程借书。读者逾期未归还图书超过三天,将按照每本每天进行一定的罚款。 4、书籍挂失:对图书由于丢失而不能即时还书的情况,读者要即时到图书管理员进行登记,确保图书信息的更新。进行书籍挂失的步骤一般如下:读者将所丢图书信息告诉图书管理员并将借阅卡交给图书管理员。图书管理员对该图书信息进行登记,并按图书的价格,要求读者进行相应赔偿。图书管理员将信息记入借阅卡。读者拿回自己的借阅卡,挂失功能结束。 2.2.2读者管理功能 1、办理借阅卡:图书馆向读者提供借阅服务,读者必须具有有效凭证方可借阅。因此,读者必须办理借阅卡获取有效凭证。读者在办理借阅卡时,必须输入个人有关注册信息,包括读者姓名、性别、出生日期、家庭住址、身份证号码、电话号码等信息。系统根据读者提供的信息,办理借阅卡并生成个人帐号、读者可自行修改密码。 2、借阅卡信息查询;图书馆在正常运营中要面对大量的读者信息,需要掌握每个读者的信息,即时准确的掌握读者的基本情况,这些是图书馆运营的保证。读者要进行信息查询,可以通过系统将自己的借阅卡账户、密码输入系统,系统通过核对找到读者的信息。如果读者的信息正确,系统将读者的信息包括读者姓名、性别、出生日期、家庭住址、身份证号码、电话号码等信息。如果读者的信息不正确,系统将提示错误,并且系统设定,当错误次数超过5次时,系统将不予查询。 3、借阅卡挂失:对借阅卡的丢失要即时进行挂失处理,以防止其他人盗用自己的有效信息并出现私自借书等行为。借阅卡挂失的一般步骤可分为:读者将挂失情况即时到图书管理员处进行登记,并填写登记单。图书管理员将读者情况进行登记挂失,注销借阅卡的信息,并咨询读者是否重新办理。若读者需重新办理,则重新填写相关信息,系统自动生成心的借阅卡信息记录,读者重新设置帐号即密码,并交纳相应的费用。若读者不需办理,则系统将信息注销。读者获得新的图书借阅卡。 2.2.3系统管理功能 1、注册管理员:为了对图书馆管理系统进行管理,图书馆需要若干名图书管理员进行管理,在图书管理员对系统进行管理之前必须进行注册功能,以确定管理员身份。对管理员进行注册,系统生成相应信息。其中管理员的基本信息包括:成员ID、密码等。系统管理员每次登陆前输入自己的ID与密码,系统对其信息进行核实,如基本信息正确,则系统管理员可进行系统管理功能,若系统检查不正确,则系统管理员不可以进行相应的操作。 2、修改密码:服务图书馆管理员可能由于某些原因,如电脑中毒导致管理员密码的泄露,为避免图书管理信息遭到破坏,系统具有修改密码的功能,确保图书管理功能的安全性。 3、退出功能:系统管理员每次离开必须进行退出功能,确保管理功能不被他人所用,这样更方便图书管理系统出现问题时,找到责任人。 第三章 概要设计 3.1总体设计 3.1.1系统目标设计 系统开发的总目标是实现内部图书借阅管理的系统化、规范化和自动化。能够对图书进行注册登记,也就是将图书的基本信息(如:书名、作者、价格等) 预先存入数据库中,供以后检索。能够对借阅人进行注册登记,包括记录借阅人的姓名、地址、电话等信息。提供方便的查询方法。如:以书名、作者、出版社、出版时间(确切的时间、时间段、某一时间之前、某一时间之后)等信息进行图书检索,并能反映出图书的借阅情况;以借阅人编号对借阅人信息进行检索;以出版社名称查询出版社联系方式信息。提供统计分析功能。可以展现出图书类型比例、库存与借出比例。提供旧书销毁功能,对于淘汰、损坏、丢失的书目可及时对数据库进行修改。能够对使用该管理系统的用户进行管理,按照不同的工作职能提供不同的功能授权。提供较为完善的差错控制与友好的用户界面,尽量避免误操作。3.1.2系统功能分析 根据以上功能,将图书管理系统的数据分为:数据输入部分:主要包括图书基本信息的录入、借阅人基本信息的录入、用户基本信息的录入。数据输出部分:主要是各种统计查询,包括:根据图书信息(如书名、作者、出版社等)查阅图书及其借阅信息、统计输出图书类型比例等。数据处理部分:主要涉及借阅和归还的处理,如一本书借出后,必须在数据 库中将该书标记为已借出,以防出现数据库中有书但图书馆无书的情况;一本书归还后,同样必须在数据库中将其标记为已经归还,以便再次借出。 概念设计阶段主要任务和目标是根据需求分析的结果,包括一般联系实体,画出对应的ER图。对于复杂的系统,通常首先要对它的各功能模进行分析,然后再把它的功能结构图画出来,便是设计和优化。功能分析之后,再根据各个岗位、各个用户对数据和使用权限的不同要求作出局部ER图,然后再把各个局部ER图综合起来形成统一的整体ER图。 3.2系统设计思想 1、图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。图书管理系统使用的是SQL Server2000的数据管理系统和以Visual Basic6.0为开发工具。 2、首先进行系统设计分析,系统设计主要包括系统功能分析、系统模块设计以及运行环境的选择、系统实现过程。 3、然后根据系统功能分析设计出需要的数据库,绘制系统数据流图与总结数据字典、设计数据库结构。 4、最后在实现各个功能模块时,采用先模块后系统集成的方式,即各系统功能模块分别独立设计和调试,在创建系统主窗体时才将各个功能模块通过主窗体菜单系统集成到一起,最后进行系统整体的设计和调试。 3.3 系统模块功能解析 (1)系统设计分析 本图书管理系统主要有以下功能: 图书征订:包括图书征订数据的录入、修改、删除与审校等功能。图书编目:包括图书数目信息的录入、修改、删除功能。图书典藏:包括新书分配、库室调配等功能。 图书流通:包括图书借阅、续借、图书返还,图书书目的查询的功能。系统用户管理:包括系统用户数据的录入、修改与删除等功能。 读者数据管理:包括读者类别管理,读者个人数据的录入、修改和删除功能。(2)系统功能分析 权限功能:权限功能设置的对象为高级管理员、普通管理员、读者。高级管 删除所有信息;普通管理员只能对授权范围内进行相应修改及删除;读者 只能查询借阅记录和图书书目不能修改。 录入功能:为普通管理员提供相应的录入功能,为高级管理员提供对所有信息的录入功能。 查询功能:为所有用户提供查询的功能,可查询允许范围内的所有信息。维护功能:为普通管理员提供查询及相应的修改,删除功能,为高级管理提 供对所有信息的修改删除功能。 打印功能:可打印图书征订计划。 退出功能:各个功能模块和主窗体都设有关闭命令按钮,可方便地退出各模 块或系统。 第四章 详细设计 4.1程序设计说明 4.1.1用户登录模块 1.程序描述:此程序用于用户登陆的至用户界面,程序通过输入用户的ID,用户密码的正确性来实现对验证用户的真实性。2.功能:实现用户的登录功能 3.性能:用户通过输入用户ID,用户名和密码进行用户登陆,通过认证后,用户 即可进入用户界面。 4.输入项:输入用户ID,用户名,密码5.输出项:用户主页面。流程逻辑如图所示: 输入用户名和密码N数据库是否打开Y连接失败返回N用户名和密码是否正确Y输入次数是否超过5次YN重新输入密码关闭数据库返回登陆成功进入主界面 图4-1用户登录流程逻辑 4.1.2用户添加模块 1.程序描述:此程序用于添加新的用户,用户通过向数据库内输入必要的信息来注册成为新的用户,才通过一系列的验证之后,即注册成为真正的用户。 2.功能:实现对用户的添加功能。 3.性能:查询新用户的用户名是否存在,若存在则停止添加返还数据库;若用户不存在,则进行添加,并进行注册,注册成功后返回。 4.输入项:输入用户的详细信息,包括姓名,出生日期,性别,地址,身份证号码,电话号码等信息。 5.输出项:若添加成功,则输出提示用户注册成功界面;若未成功,则提示输出未成功原因界面。 6.流程逻辑如下图所示: 输入用户信息N判断数据库是否打开提示连接失败返回Y查询数据库中是否有该用户Y提示已经存在该用户关闭数据库并返回N向数据库中添加新用户提示注册成功返回 图4-2用户添加模块流程逻辑 4.1.3书籍查询模块 1.程序描述:此程序用于实现用户对想要借阅的查询功能。用户通过输入相应的图书信息来查询,数据库根据用户提供的信息来搜索,最后给出客户相应的图书信息。 2.功能:实现图书查询功能。 3.性能:对进行想要查询的书籍进行搜索,若存在此书则显示该书的详细信息;若不存在此书,则提示没有此书并返回。 4.输入项:输入图书的详细信息,包括图书名称,书籍ID,图书作者,出版社,单价等信息。 5.输出项:若输入的图书存在即输出图书详细信息界面;若输入的图书不存在则显示图书不存在界面。 6.流程逻辑如下图所示: 输入图书信息判断数据库是否打开Y查询是否有该书YN连接失败返回N关闭数据库返回显示该书的信息关闭数据库返回 图4-3图书查询模块流程 4.1.4图书借阅模块 1.程序描述:此程序用于图书的借阅,用户通过登录自己的借阅ID后,对需要借阅的图书进行借阅操作,如果符合借阅的要求,则可进行借阅。2.功能:实现对图书的书籍借阅功能。 3.性能:首先验证借阅者输入的借阅ID是否存在,若存在进行下一步;若不存在则返回。 4.若借阅ID存在,则检查此借阅ID是否借阅书籍超出4本,若超出则提示超出借阅数目,返回;若没有超出,则进行下一操作。 5.对想要借阅的图书ID进行搜索,若此书不存在,则提示此书不存在;若此书存在则进行下一步操作。 将借阅者借阅的数量増一,将数据库中此书数量减一,同时提醒借阅成功,然后返回。 6.输入项:输入借阅证的ID,图书ID 7.输出项:若借阅证ID正确且图书ID正确且符合借阅要求,则输出提示借阅成功界面;若存在借阅ID或图书ID或不符合借阅要求等问题,则输出提示没有借阅成功原因的界面。8.流程逻辑如下图 输入书籍ID和借阅IDN数据库是否打开YN借阅卡ID是否存在YY判断借阅ID是否借书超出4本提示超出最大借书数量关闭数据库返回提示不存在该借阅者关闭数据库返回数据库连接失败返回NN数据库中是否存在书籍IDY将借阅者的借书数量加1提示不存在该书籍关闭数据库返回将书籍的数量减1提示借书成功关闭数据库返回 图4-4图书借阅模块 4.1.5图书归还模块 1.程序描述:此程序用于图书的归还,用户在登录自己的ID之后,用户可以对需要归还的图书进行操作,如果符合归还要求,则可以将图书归还。2.功能:实现对图书的书籍归还功能。 3.性能:首先验证借阅者输入的借阅ID是否存在,若存在进行下一步;若不存在则返回。 对想要归还的图书ID进行搜索,若此书不存在,则提示此书不存在;若此书存在则进行下一步操作。将借阅者借阅的数量减一,将数据库中此书数量加一,同时提醒借阅归还,然后返回。 4.输入项:输入借阅证ID和图书ID 5.输出项:若借阅证ID和图书ID正确,则输出提示图书归还成功界面;若借阅证ID或图书ID不正确,则输出提示没有成功原因的界面。 6.流程逻辑如下图: 输入书籍ID和借阅IDN数据库是否打开YN借阅卡ID是否存在YN提示不存在该书籍关闭数据库返回提示不存在该借阅者关闭数据库返回数据库连接失败返回数据库中是否存在书籍IDY将借阅者的借书数量减1将书籍的数量加1提示还书成功关闭数据库返回 图4-5图书归还模块 4.1.6新书入库模块 1.程序描述:此程序用户对新进图书的入口登记处理。用户可以将新书的详细信息进行输入,保存在数据库中后,新书即登记成功。 2.功能;实现新进图书入库功能。 3.性能:对数据库查询是否已存在此书,若存在则将此书数量加一,提示添加成功;若没有此书,则将此书的基本信息存入数据库,并提示添加书籍成功。 4.输入项:输入新书的书籍ID,书名,作者,出版社,单价等信息。 5.输出项:若添加成功,则输出提示新书添加成功界面;若没有添加成功,输出提示未成功原因界面。 6.流程逻辑如下图 输入书籍信息N数据库是否打开关闭数据库返回Y是否已经存在Y该书将该书的数量加1提示添加书籍成功关闭数据库N将该书信息存入数据库是否是第一条N记录提示添加书籍成功关闭数据库返回Y提示添加第一本书籍关闭数据库返回图4-6新书入库模块 返回 第五章 编码与测试 5.1各功能模块的实现 (1)用户登录窗体 图5-1 用户登录窗体 用户登录代码: Const MaxLogTimes As Integer = 3 Private Sub cmdcancel_Click() If MsgBox(“是否真的退出系统登录?”, vbYesNo, “登录验证”)= vbYes Then Unload Me End If End Sub Private Sub cmdok_Click() Static intLogTimes As Integer intLogTimes = intLogTimes + 1 If intLogTimes > MaxLogTimes Then MsgBox “超过登录次数!”, vbCritical, “登录验证” Else With Library_Manage.rsSysUsers .Open If.RecordCount > 0 Then .MoveFirst .Find “编号=” & Trim(txtLog(0))& “" If.EOF Then MsgBox Trim(txtLog(0))& ”不是系统用户,请检查输入!“, vbCritical, ”登录验证“ txtLog(0).SetFocus txtLog(0).SelStart = 0 txtLog(0).SelLength = Len(txtLog(0)) ElseIf.Fields(”口令“)<> Trim(txtLog(1))Then MsgBox ”口令错误,请检查输入口令!“, vbCritical, ”登录验证“ txtLog(1).SetFocus: txtLog(1)= ”“ Else CurrentUserNum =.Fields(编号) CurrentUserPassword =.Fields(”口令“) CurrentUserStatus =.Fields(”权限“) MsgBox ”欢迎使用常州信息学院管理系统!“, vbInformation, ”登陆成功!“ Unload Me End If End If .Close End With End If End Sub Private Sub Form_Load() SysLogon.BackColor = RGB(192, 210, 270)End Sub(2)用户管理窗体界面 图5-2 用户管理窗体 用户管理窗体代码 '保存 Private Sub cmdSave_Click() Dim objcopy As New Recordset If Trim(txtNum)= ”“ Then MsgBox ”不能为空!“, vbCritical, ”系统用户管理“ txtNum.SetFocus txtNum.SelStart = 0 txtNum.SelLength = Len(txtNum) ElseIf Len(Trim(txtPwd))<> 6 Then MsgBox ”用户口令须为6位字符串!“, vbCritical, ”系统用户管理“ txtPwd.SetFocus txtPwd.SelStart = 0 txtPwd.SelLength = Len(txtPwd)ElseIf Not txtAuth Like ”[0,1]“ Then MsgBox ”用户权限必须为0或1“, vbCritical, ”系统用户管理“ txtAuth = ”“ txtAuth.SetFocus Else Set objcopy = Library_Manage.rsSysUsers.Clone '对错? With objcopy If.RecordCount > 0 Then .MoveFirst .Find ”编号“ & Trim(txtNum)& ”“ If Not.EOF And.AbsolutePosition <> Library_Manage.rsSysUsers.AbsolutePosition Then MsgBox ”编号:“ & Trim(txtNum)& ”已被使用,请选择其他编号!“, vbCritical, ”系统用户管理“ txtNum.SetFocus txtNum.SelStart = 0 txtNum.SelLength = Len(txtNum) Exit Sub Else '保存记录 Library_Manage.rsSysUsers.Update MsgBox ”数据保存成功!“, vbInformation, ”系统用户管理“ cmdAdd.Enabled = True cmdDel.Enabled = True isAdding = False: picNavigation.Enabled = True End If End With End If End Sub Private Sub Form_Load() cmdMove(0).Value = True End Sub(3)读者数据管理窗体界面 图5-3 读者数据管理窗体 读者数据管理窗体代码 Library_Manage.Library_Manage_Con.Execute ”TRUNCATE TABLE 读者类别“ With Library_Manage.ReaderType If.State = adStateClosed Then.Open .AddNew .Fields(”编号“)= ”0“ .Fields(”名称“)= ”特殊“ .Fields(”借书量“)= Val(txtSp(1)) .Fields(”借书期“)= Val(txtSp(2)) .Fields(”有效期“)= Val(txtSp(3)) .Update .AddNew .Fields(”编号“)= ”1“ .Fields(”名称“)= ”馆员“ .Fields(”借书量“)= Val(txtL(1)) .Fields(”借书期“)= Val(txtL(2)) .Fields(”有效期“)= Val(txtL(3)) .Update .AddNew .Update .AddNew .Fields(”编号“)= ”2“ .Fields(”名称“)= ”教师“ .Fields(”借书量“)= Val(txtT(1)) .Fields(”借书期“)= Val(txtT(2)) .Fields(”有效期“)= Val(txtT(3)) .Update .AddNew .Fields(”编号“)= ”3“ .Fields(”名称“)= ”学生“ .Fields(”借书量“)= Val(txtS(1)) .Fields(”借书期“)= Val(txtS(2)) .Fields(”有效期“)= Val(txtS(3)) .Update End With End Sub Private Sub Form_Load()cmdMove(0).Value = True End Sub Private Sub SSTab1_DblClick()End Sub(4)图书征订管理窗体 图5-4 图书征订管理窗体 图书征订管理代码 txtPubDate.SelLength = Len(txtPubDate) ElseIf Trim(txtAuthor)= ”“ Then MsgBox ”作者不能为空!“, vbCritical, ”图书征订管理“ txtAuthor.SetFocus txtAuthor.SelStart = 0 txtAuthor.SelLength = Len(txtAuthor) ElseIf Val(txtNum)= ”“ Then MsgBox ”正的数量无效!“, vbCritical, ”图书征订管理“ txtNum.SetFocus txtNum.SelStart = 0 txtNum.SelLength = Len(txtNum) ElseIf Not IsDate(txtDate)= ”“ Then MsgBox ”作者不能为空!“, vbCritical, ”图书征订管理“ txtDate.SetFocus txtDate.SelStart = 0 txtDate.SelLength = Len(txtDate) Else '保存记录 Library_Manage.rsBooksOrder.Update MsgBox ”数据保存成功!“, vbInformation, ”图书征订管理“ cmdAdd.Enabled = True: cmdDel.Enabled = True cmdExam.Enabled = True: cmdRefresh.Enabled = True isAdding = False: picNavigation.Enabled = True End If End Sub Dim objcopy As Recordset Private Sub cmbOut_Click() AddListOut End Sub Private Sub cmdAddAll_Click(Index As Integer)'选择全部条码 ListItem_Add lstPre(Index), LstIn(Index), Index, True End Sub Private Sub cmdAddOne_Click(Index As Integer)'选择当前条码 ListItem_Add lstPre(Index), LstIn(Index), Index, False End Sub Private Sub cmdExit_Click() If LstIn(0).ListCount > 0 Then If MsgBox(”你选定了部分新书准备入库,但没执行保存操作“ & vbCr & ”是否要执行保存操作?“, vbCritical + vbYesNo, ”图书典藏管理“)= vbYes Then SSTab1.Tab = 0 cmdSave.Value = True End If ElseIf LstIn(1).ListCount > 0 Then If MsgBox(”你选定了部分新书准备入库,但没执行保存操作“ & vbCr & ”是否要执行保存操作?“, vbCritical + vbYesNo, ”图书典藏管理“)= vbYes Then SSTab1.Tab = 1 cmdSave.Value = True End If End If Unload Me End Sub '刷新新书或调出库室条码列表 Private Sub cmdRefresh_Click(Index As Integer) Select Case Index Case 0 '刷新新书列表 With Library_Manage.rsBooksBibli If.State = adStateClosed Then.Open .Requery End With AddListNew Case 1 '刷新库室条码列表 With Library_Manage.rsBooksStore If.State = adStateClosed Then.Open .Requery End With AddListOut End Select End Sub Public Sub AddListNew() lstPre(0).Clear With Library_Manage.rsBooksBibli If.State = adStateClosed Then.Open If.RecordCount > 0 Then .MoveFirst While Not.EOF lstPre(0).AddItem.Fields(”条码“) .MoveNext Wend Else lstPre(0).AddItem ”当前无待分配新书" End If End With End Sub 5.2 测试 5.2.1 借阅卡管理测试 进度安排测试办理借阅证信息,检查个人账号、读者可自行修改密码。测试查询借阅卡信息的正确性,包括输入的读者信息等。测试借阅卡挂失功能,包括读者信息等。 5.2.2 书籍管理测试 进度安排:测试新书入库信息的正确性。测试借书、还书功能信息正确性。测试书籍挂失信息的正确性。测试图书信息查询的正确性。测试借书信息查询的正确性。 5.2.3 系统管理测试 进度安排测试注册管理员信息的正确性。测试修改密码信息的正确性。 结束语 对于这篇论文我有不少心得体会。这次是对我们掌握所学知识的一次考核。它可以让我们了解自己一学期里的学习情况,有助于在今后的学习中加以改进。通过这次上机实验,我发现了自己对数据库和vb语言掌握的并不牢,有的知识点根本就不懂。这都要怪自己在平时的学习过程中不够用心,不懂的地方也没有及时的去搞懂,课后也没怎么花时间去研究。这次实验我觉得自己不仅学到了很多软件设计方面的知识,也让我巩固了以前所学的知识以及看到了自己以前学习中的不足之处。 在今后的学习过程中,我一定会认真学习专业课程,再也不能像以前那样迷迷糊糊的,课后要多花时间去研究一些有关编程方面的题目,不懂的地方及时把它弄懂。以后自己还要多动手编写一些程序。在这里我要感谢学校能提供这么一个宝贵的机会,我们可以把课堂上所学的理论知识运用到实践中去,把书上的东西变成我们自己的。这个机会既让我们学习巩固了知识,也让我们发现了自己的不足之处。特别要感谢我们的指导老师,正因为有了您的帮助我们才可以完成实验。我也希望今后还会有更多的机会让我们去实践,去充实自己。 致 谢 在本次设计的过程中,老师们给了我们很大的帮助。不仅使我们在规定时间内完成了系统的设计,同时还使我们学到了很多有益的知识和宝贵的经验在此,我谨向他们表示最衷心的感谢。感谢老师的指导,使我们充分利用软件工程,VB,数据库原理开发出自己的项目.在开发的过程中使我体会到了工程化开发方法和瀑布模型利用的重要性,在此还要感谢所有合作参与项目开发的同学们这次毕业设计的成功离不开所有参与的同学们的帮助和支持,是他们让我知道了团队工作的重要.参考文献 1、陶宏才.数据库原理及设计[M].北京:清华大学出版社.2004.2、陆丽娜.软件工程 [M].北京:经济科学出版社.1999 3、郝志恒、刘舫.Visual Basic 6.0 编程篇[M] 北京:电子工业出版社 2004 4、刘世峰.数据库基础与应用[M] 北京: 中央电大出版社 2003 5、吴斌、鲁大林.Visual Basic+SQL Sever数据库应用系统开发[M] 北京:机械工程出版社 2008 6、邱李华.SQL Server 2000 数据库应用教程[M] 北京:人民邮电出版社 2007 7、钟军.Visual Basic数据库高级实例导航[M] 北京:清华大学出版社 2003 8、赵松涛.Visual Basic+SQL Server 2000 系统开发实录[M] 北京: 机械工业出版社 2007 图书管理系统 背景:当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大提高了其安全性。 随着图书馆的藏书、管理人员、读者数量的不断增多,如何对书籍以及读者信息、读者借阅信息进行管理成为一个难题。图书涉及大量的数据处理,如果用手工来完成庞大的数据处理,不仅费时费力,还容易出错。为了满足图书管理的需要,急需要一套图书管理系统来完成这项工作。作为计算机应用的一部分,使用计算机对图书信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率,也是图书馆信息的科学化、正规化管理的重要条件。因此将详细分析一个图书馆系统地实现过程。从需求分析、架构设计、系统建模、详细设计、代码实现逐步展开分析,整个过程按照软件实际流程进行。 意义:通过学习JAVA语言,又加深对面向对象分析,确定问题域中的对象及对象间关系,并建立起问题域的对象模型。面向对象的设计方法是一种进行程序设计的新方法,它吸取了结构化程序设计的先进思想,为解决程序结构过于复杂而产生。它的思想是在进行程序设计时,把整个问题分成由相关部分组成的组,每个组考虑和组相关的代码和数据,同时这些分组将按层次关系组织起来,每个分组转换为对象的独立单元。面向对象的程序设计语言都具有多态性、继承性、封装性等特点。学习以后对JAVA程序设计有了深入的了解,JAVA语言程序设计要求结构紧凑,概念准确。 实践项目:图书管理系统。 主要完成这个项目的,可以实现图书系统的系统化和自动化,帮助图书管理人员更好更高效地完成图书管理工作。需求分析:图书管理系统需要满足三方面的需求,这三个方面分别是图书借阅者、图书馆工作人员和图书馆管理人员。图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时形成借书或还书记录;图书馆管理人员的功能最复杂,包括对图书借阅者、图书进行管理和维护,及系统状态的查看、维护。 图书借阅者可直接查看图书馆图书情况,如果图书借阅者根据本人借书证号和密码登录系统,还可以进行本人借书情况的查询并维护部分个人信息。一般情况下,图书借阅者只应该查询和维护本人的借书情况和信息,若查询和维护其他借阅者的借书情况和信息,就要知道其他图书借阅者的借书证号和密码。这些是很难得到的,特别是密码,所以不但满足了图书借阅者的要求,还保护了图书借阅者的个人隐私。 图书馆工作人员有修改图书借阅者借书和还书记录的权限,在此模块中,图书馆工作人员可以为图书借阅者加入借书记录或是还书记录。 图书馆管理人员功能的信息量大,数据安全性和保密性要求最高。本功能实现对图书信息、借阅者信息、总体借阅情况信息的管理和信息查看及维护。图书馆管理员可以浏览、查询、添加、删除、修改图书的基本信息;浏览、查询、添加、删除和修改图书借阅者的基本信息,但不能添加、删除和修改借阅信息,这部分功能应该由图书馆工作人员执行,但是,删除某条图书借阅者基本信息记录时,应实现对该图书借阅者借阅记录的级联删除。 功能如下:⑴书籍管理部分:主要包括读者类别和书籍信息管理两部分。其中,书籍类别管理包括添加书籍类别、修改书籍类别等;书籍信息管理包括书籍信息的添加、书籍信息的修改、书籍信息的查询、书籍信息的删除等。 ⑵读者管理部分:主要包括读者类别管理和读者信息管理两部分。其中,读者类别管理包括添加读者类 别、修改读者类别等;读者信息管理包括添加读者信息、修改读者信息、删除读者信息、查询读者信息等。 ⑶借阅管理部分:主要包括借书信息管理和还书信息管理两部分。其中,借书信息管理包括借书信息的添加、借书信息的修改、借书信息的查询等;还书信息管理部分包括还书信息的添加、还书信息的修改、还书信息的查询等。 ⑷系统管理部分:包括修改系统用户密码、增加新用户以及退出系统等 所以,该图书管理系统能够是图书管理员方便地管理图书馆内的多种事务,让图书馆工作人员更有效地 为读者提供借阅、归还书籍的服务,也能够为读者提供查询书籍信息、个人借阅信息。 数据库流程分析: 1.数据处理流程 数据库或数据表结构确定之后,在实际的数据处理程序设计之前需要对所处理的数据处理流程作必要的分析。所谓对数据处理流程作必要的分析是指找出各数据之间的主要关系,数据存取的主要走向。另外,在实际的数据处理过程中还会有些细节问题。在遇到这些细节问题时,及时处理即可。并且,有些细节问题不是在做数据处理流程分析时事先都能预料的。对于现在这个数据处理系统来说,最主要的工作实际就是三项: 1)读者信息的基本情况及时录入数据库; 2)要将读者查询情况及时录入数据库; 3)对读者操作情况进行汇总。 整体数据流:管理员通过密码进入系统,分别对上述几大功能逐一实现。 在数据关系简单的情况下对数据处理,可以在将数据库设计好之后直接设计程序。但是按正规的数据库管理系统的设计程序,无论要处理的数据关系复杂与否都应在做程序设计之前做好数据的流程分析。 2.管理窗体 创建该窗体,根据相关操作可以完成个人信息、图书信息、管理操作、系统设置等功能实现,在图书信息里可以进行图书查询、图书借阅、图书归还、图书续借等功能。 总结:图书管理系统可以有效的省去很多的认为登记错误,并且能够节省广大的师生宝贵时间。另一方面,图书 馆里系统具有界面清晰,操作方便,功能少而使用,实现图书馆工作的自动化,减少手工劳动量带来的数据遗漏,误报等人为因素,提高工作效率,也增强系统的通用性。但是完善的系统也会有所弊处,有计算机操控的系统,一旦系统出现问题,整个图书馆的借阅系统也会跟着瘫痪,带来不便。所以,也要经常的去维护系统,这样才能给我们提供一个安全的信息处理方法。 管理信息系统创建,首先数据库在一个管理系统中占有非常重要的地位,数据库设计的好坏将直接对应用系 统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,以确保数据的完整性和一致性。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。数据库设计一般包括如下几个步骤:数据库需求分析;数据库逻辑结构设计;数据库概念结构设计;数据库物理设计。设计中详细的总结了该系统的系统设计部分,包括功能模块设计、数据库结构设计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。通过本次课程设计知道了各种数据之间的相互关系,并在操作中用适当的SQL语句和存储过程实现。本系统还实现了VB通过ODBC对SQL的数据库快递、高效访问和更新功能。 通过这次课程设计懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。 在程序设计与代码编写阶段我们遇到了很多的问题,由于我们组中的人大部分都是第一次开发数据库系统,所以对数据库开发的流程不熟息,而且在数据库的与编程系统的连接方面也遇到了很多的问题。第三篇:图书管理系统
第四篇:图书管理系统
第五篇:图书管理系统