图书库存管理系统.docx

上传人:b****7 文档编号:9811160 上传时间:2023-02-06 格式:DOCX 页数:26 大小:137.95KB
下载 相关 举报
图书库存管理系统.docx_第1页
第1页 / 共26页
图书库存管理系统.docx_第2页
第2页 / 共26页
图书库存管理系统.docx_第3页
第3页 / 共26页
图书库存管理系统.docx_第4页
第4页 / 共26页
图书库存管理系统.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

图书库存管理系统.docx

《图书库存管理系统.docx》由会员分享,可在线阅读,更多相关《图书库存管理系统.docx(26页珍藏版)》请在冰豆网上搜索。

图书库存管理系统.docx

图书库存管理系统

 

一、需求与功能分析2

二、系统总体框架2

三、逻辑设计3

四、类的设计与分析7

五、数据库表结构设计9

六、特色算法分析9

七、功能测试11

八、存在的不足与对策13

九、使用说明13

十、程序源代码14

 

一.需求与功能分析

本系统为图书库存管理系统。

其主要功能为让用户实现对图书库存的管理,包括查询

图书信息,添加新的图书,更新图书信息,删除旧的图书。

具体功能如下:

查询图书信息:

使用此功能,用户可以查看到所查图书的全部信息,包括图书编号,

图书名字,图书作者姓名,库存量。

添加新的图书:

使用此功能,用户可以向库存中插入新的图书,即向数据库中插入新的元组,包括输入图书编号,图书名字,图书作者姓名,库存量。

更新图书信息:

使用此功能,用户可以对图书的信息进行更新,即更新图书名字,图书作者姓名,库存量。

删除旧的图书:

使用此功能,用户可以删除旧的图书,该图书所在的元组将整个都被删除。

二、系统总体框架

图书库存管理系统

查询图书信息

添加新的图书

更新图书信息

删除旧的图书

 

三.逻辑设计

1.登陆系统

类图:

在该模块中,定义一个Ontijiao()函数来实现登陆进入图书库存管理系统。

其中登陆账号:

admin,登陆密码:

admin。

具体代码如下:

voidClogin:

:

Ontijiao()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringid,no;

CStringstr="admin";

m_id.GetWindowText(id);

m_no.GetWindowText(no);

if(id.Compare(str)==0&&no.Compare(str)==0)

{

Cchaxundilog=newCchaxun;

dilog.DoModal();

}

}

2.查询图书信息

类图:

在该模块中,定义一个Onselect()函数来实现对数据库中元组的查询,即查询图书信息.具体的代码如下:

voidCchaxun:

:

Onselect()

{

if(sql.m_db.IsOpen())

{

sql.m_db.Close();

}

CStringstrnum,vSQL,vSQL1,strname,strat,strrem,j,k;

inti;

j=m_result.GetItemCount();

if(j>=1)

{

m_result.DeleteAllItems();

}

m_num1.GetWindowText(strnum);

vSQL="DRIVER={SQLServer};SERVER=(local);Database=StuCou;UID=sa;PWD=";

k=m_result.GetHeaderCtrl()->GetItemCount();

if(k<4)

{

m_result.InsertColumn(0,"图书编号");m_result.InsertColumn(1,"图书名称");m_result.InsertColumn(2,"作者");m_result.InsertColumn(3,"库存量");

m_result.SetColumnWidth(0,100);m_result.SetColumnWidth(1,120);m_result.SetColumnWidth(2,110);m_result.SetColumnWidth(3,120);

}

sql.m_db.OpenEx(vSQL,0);

sql.rs.m_pDatabase=&sql.m_db;

vSQL1="select*frombookwherenum='"+strnum+"'";

sql.rs.Open(CRecordset:

:

snapshot,vSQL1,CRecordset:

:

readOnly);

while(!

sql.rs.IsEOF())

{

i=0;

sql.rs.GetFieldValue("num",strnum);

m_result.InsertItem(i,strnum);

sql.rs.GetFieldValue("bname",strname);

m_result.SetItemText(i,1,strname);

sql.rs.GetFieldValue("author",strat);

m_result.SetItemText(i,2,strat);

sql.rs.GetFieldValue("remain",strrem);

m_result.SetItemText(i,3,strrem);

sql.rs.MoveNext();

i++;

}

sql.rs.Close();

}

3.添加新的图书

类图:

在该模块中,定义一个Onadd()函数来实现向数据库中添加新的元组,即添加新的图书信息,包括图书编号,图书名字,作者名字,以及库存量.具体代码如下:

voidCchaxun:

:

Onadd()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(true);

CStringstrnum2,strname2,strat2,strrem2,vSQL2;

CStringadd,check;

m_num2.GetWindowText(strnum2);

m_name2.GetWindowText(strname2);

m_author2.GetWindowText(strat2);

m_remain2.GetWindowText(strrem2);

if(sql2.m_db.IsOpen())

{

sql2.m_db.Close();

}

vSQL2="DRIVER={SQLServer};SERVER=(local);Database=StuCou;UID=sa;PWD=";

sql2.m_db.OpenEx(vSQL2,0);

sql2.rs.m_pDatabase=&sql2.m_db;

sql2.rs.Close();

add="insertintobookvalues('"+strnum2+"','"+strname2+"','"+strat2+"','"+strrem2+"')";

sql2.m_db.ExecuteSQL(add);

if(sql2.m_db.CanUpdate())

{

AfxMessageBox("添加成功");

}

}

4.更新图书信息

类图:

在该模块中,定义了一个Onupdate()函数,用来实现对数据库中元组的更新,即对图书信息的更新,包括图书名字,作者名字,以及库存量的更新.具体代码如下:

voidCchaxun:

:

Onupdate()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringstrnum3,strname3,strat3,strrem3,vSQL3;

CStringupdate;

m_num3.GetWindowText(strnum3);

m_name3.GetWindowText(strname3);

m_author3.GetWindowText(strat3);

m_remain3.GetWindowText(strrem3);

if(sql3.m_db.IsOpen())

{

sql3.m_db.Close();

}

vSQL3="DRIVER={SQLServer};SERVER=(local);Database=StuCou;UID=sa;PWD=";

sql3.m_db.OpenEx(vSQL3,0);

update="updatebooksetbname='"+strname3+"',author='"+strat3+"',remain='"+strrem3+"'wherenum='"+strnum3+"'";

sql3.m_db.ExecuteSQL(update);

if(sql3.m_db.CanUpdate())

{

AfxMessageBox("更新成功");

}

}

5.删除旧的图书

类图:

 

在该模块中,定义了一个Ondelete()函数,用来实现对数据库中元组的删除,即删除某一图书,使用该功能时将删除该图书所在的整个元组.具体代码如下:

voidCchaxun:

:

Ondelete()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringstrnum4,vSQL4;

CStringdel;

m_num4.GetWindowText(strnum4);

if(sql4.m_db.IsOpen())

{

sql4.m_db.Close();

return;

}

vSQL4="DRIVER={SQLServer};SERVER=(local);Database=StuCou;UID=sa;PWD=";

sql4.m_db.OpenEx(vSQL4,0);

sql4.rs.m_pDatabase=&sql4.m_db;

del="deletefrombookwherenum='"+strnum4+"'";

sql4.m_db.ExecuteSQL(del);

if(sql4.m_db.CanUpdate())

{

AfxMessageBox("删除成功");

return;

}

}

四.类的设计与分析

在本系统中,一共有7个类:

CBOOKApp类、CBOOKDoc类、CBOOKView类、Cchaxun类、SQL类、Clogin类、CMainFrame类。

其中最核心类为Cchaxun类、SQL类、Clogin类.类Cchaxun用来实现对图书库存的管理,包括:

查询图书信息,添加新的图书,更新图书信息,删除旧的图书。

类SQL用来实现连接到数据库。

类Clogin用来实现用户登陆的功能。

1.Cchaxun类:

classCchaxun:

publicCDialog

{

public:

Cchaxun(CWnd*pParent=NULL);

voidOnselect();

voidOnadd();

voidOnupdate();

voidOndelete()

protected:

DECLARE_MESSAGE_MAP();

};

名称

属性

说明

Cchaxun()

成员方法

构造函数

Onselect()

成员方法

查询图书信息

Onadd()

成员方法

添加新的图书

Onupdate()

成员方法

更新图书信息

Ondelete

成员方法

删除图书

DECLARE_MESSAGE_MAP()

成员方法

VC已定义好的函数

2.SQL类:

classSQL{

public:

CDatabasem_db;

CRecordsetrs;

};

名称

属性

说明

m_db

数据成员

用来实现连接到数据库

rs

数据成员

用来实现连接到数据库

2.Clogin类:

classClogin:

publicCDialog

{

public:

Clogin(CWnd*pParent=NULL);

voidOntijiao();

protected:

DECLARE_MESSAGE_MAP()

};

名称

属性

说明

Clogin()

成员方法

构造函数

Ontijiao()

成员方法

用来实现用户登陆

DECLARE_MESSAGE_MAP()

成员方法

VC已定义好的函数

 

五.数据库表结构设计

book表结构如下:

book(numint,bnamechar(100),authorchar(50),remainint)

其中num:

图书编号,bname:

书名,author:

图书作者姓名,remian:

库存量

六.特色算法分析

Cchaxun类中的Onselect()方法

功能:

根据用户输入的图书编号,向数据库中搜索相应的元组,并显示出结果,即输出所查询的图书的图书信息。

算法思路:

首先先判断数据源是否开启,如果已经开启先关了它,这里用到IsOpen()函数和Close()函数。

然后用GetWindowText()函数获取用户输入的图书编号。

接下来连接数据库,用SQL语句来搜索找到相应元组,并将结果显示出来。

用到GetFieldValue()函数和SetItemText()函数等。

流程图:

 

代码:

voidCchaxun:

:

Onselect()

{

if(sql.m_db.IsOpen())

{

sql.m_db.Close();

}

CStringstrnum,vSQL,vSQL1,strname,strat,strrem,j,k;

inti;

j=m_result.GetItemCount();

if(j>=1)

{

m_result.DeleteAllItems();

}

m_num1.GetWindowText(strnum);

vSQL="DRIVER={SQLServer};SERVER=(local);Database=StuCou;UID=sa;PWD=";k=m_result.GetHeaderCtrl()->GetItemCount();

if(k<4)

{

m_result.InsertColumn(0,"图书编号");m_result.InsertColumn(1,"图书名称");m_result.InsertColumn(2,"作者");m_result.InsertColumn(3,"库存量");

m_result.SetColumnWidth(0,100);m_result.SetColumnWidth(1,120);m_result.SetColumnWidth(2,110);m_result.SetColumnWidth(3,120);

}

sql.m_db.OpenEx(vSQL,0);

sql.rs.m_pDatabase=&sql.m_db;

vSQL1="select*frombookwherenum='"+strnum+"'";

sql.rs.Open(CRecordset:

:

snapshot,vSQL1,CRecordset:

:

readOnly);

while(!

sql.rs.IsEOF())

{

i=0;

sql.rs.GetFieldValue("num",strnum);

m_result.InsertItem(i,strnum);

sql.rs.GetFieldValue("bname",strname);

m_result.SetItemText(i,1,strname);

sql.rs.GetFieldValue("author",strat);

m_result.SetItemText(i,2,strat);

sql.rs.GetFieldValue("remain",strrem);

m_result.SetItemText(i,3,strrem);

sql.rs.MoveNext();

i++;

}

sql.rs.Close();

}

七.功能测试

图7-1登陆界面测试图

图7-2查询图书信息测试图

图7-3添加图书测试图

图7-4更新图书测试图

图7-5删除图书测试图

八.存在的不足与对策

由于设计者水平有限及时间等方面的原因,该系统的功能比较简单,查错能力也不强,对于一些不正确的输入可能会造成一些难以预料的结果,因此,请不要故意输入错误信息。

这些不足请老师多多谅解。

今后设计者会更多的学习编程技巧,不断的提高程序设计水平。

1,在登陆本系统时,由于能力有限,暂时设计不出让用户自己注册账号的功能,所以用户要登陆时统一采用同一账号密码,其中账号:

admin,密码:

admin。

2,在添加新的图书时,由于系统存在漏洞,所以添加的新图书是可以出现相同编号的,为了避免混乱,请在输入时输入不同的编号,不同的图书信息。

3,在更新,删除图书时,如果输入不存在的图书编号,它还是会提示“更新成功”和“删除成功”,而实际上该操作是无效的,所以请输入确实在数据库中存在的图书编号。

九.使用说明

1.登陆账号:

admin,密码:

admin。

2.查询图书请输入确实存在的正确的图书编号,然后点击“查询”即可。

3.添加图书请添加不同于已经存在的图书的新图书信息。

4.更新图书则输入您要更新的图书编号和新的信息,然后点击“提交”即可。

5.删除图书则输入您要删除的图书编号,然后点击“删除”即可。

十.程序源代码

//login.h

#if!

defined(AFX_LOGIN_H__E4090B58_E195_42FA_9ADC_C346B139F6F0__INCLUDED_)

#defineAFX_LOGIN_H__E4090B58_E195_42FA_9ADC_C346B139F6F0__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif

classClogin:

publicCDialog

{

public:

Clogin(CWnd*pParent=NULL);protected:

DECLARE_MESSAGE_MAP()

};

#endif

//login.cpp

#include"stdafx.h"

#include"BOOK.h"

#include"login.h"

#include"chaxun.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

Clogin:

:

Clogin(CWnd*pParent/*=NULL*/)

:

CDialog(Clogin:

:

IDD,pParent)

{

}

voidClogin:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(Clogin,CDialog)

END_MESSAGE_MAP()

voidClogin:

:

Ontijiao()

{

CStringid,no;

CStringstr="admin";

m_id.GetWindowText(id);

m_no.GetWindowText(no);

if(id.Compare(str)==0&&no.Compare(str)==0)

{

Cchaxundilog=newCchaxun;

dilog.DoModal();

}

}

//lianjie.h

#include"afxdb.h"

classSQL{

public:

CDatabasem_db;

CRecordsetrs;

};

//chaxun.h

#if!

defined(AFX_CHAXUN_H__261FE414_5B2D_4D97_BB7D_00E6992FD7A0__INCLUDED_)

#defineAFX_CHAXUN_H__261FE414_5B2D_4D97_BB7D_00E6992FD7A0__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

classCchaxun:

publicCDialog

{

public:

Cchaxun(CWnd*pParent=NULL);enum{IDD=IDD_manage};

CEditm_num4;

CEditm_remain3;

CEditm_author3;

CEditm_name3;

CEditm_num3;

CEditm_remain2;

CEditm_author2;

CEditm_name2;

CEditm_num2;

CListCtrlm_result;

CEditm_num1;

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);protected:

afx_msgvoidOnselect();

afx_msgvoidOnadd();

afx_msgvoidOnupdate();

afx_msgvoidOndelete();

DECLARE_MESSAGE_MAP()

};

//chaxun.ccp

#include"stdafx.h"

#include"BOOK.h"

#include"chaxun.h"

#include"lianjie.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

SQLsql,sql2,sql3,sql4;

Cchaxun:

:

Cchaxun(CWnd*pParent/*=NULL*/)

:

CDialog(Cchaxun:

:

IDD,pParent)

{

}

voidCchaxun:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_Control(pDX,IDC_EDIT10,m_num4);

DDX_Control(pDX,IDC_EDIT9,m_remain3);

DDX_Control(pDX,IDC_EDIT8,m_author3);

DDX_Control(pDX,IDC_EDIT7,m_name3);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1