- u投在线
-
1 本系统为图书库存管理系统。其主要功能为让用户实现对图书库存的管理,包括查询 图书信息,添加新的图书,更新图书信息,删除旧的图书。具体功能如下: 查询图书信息:使用此功能,用户可以查看到所查图书的全部信息,包括图书编号, 图书名字,图书作者姓名,库存量。 添加新的图书:使用此功能,用户可以向库存中插入新的图书,即向数据库中插入新的元组,包括输入图书编号,图书名字,图书作者姓名,库存量。 更新图书信息:使用此功能,用户可以对图书的信息进行更新,即更新图书名字,图书作者姓名,库存量。 删除旧的图书:使用此功能,用户可以删除旧的图书,该图书所在的元组将整个都被删除。 图书库存管理系统 查询图书信息 添加新的图书 更新图书信息 删除旧的图书 2 类图: 在该模块中,定义一个 Ontijiao()函数来实现登陆进入图书库存管理系统。其中登陆账号:admin,登陆密码:admin。具体代码如下: void Clogin::Ontijiao() { // TODO: Add your control notification handler code here CString id,no; CString str="admin"; m_id.GetWindowText(id); m_no.GetWindowText(no); if (id.Compare(str)==0&&no.Compare(str)==0) { Cchaxun dilog=new Cchaxun; dilog.DoModal(); } } 类图: 在该模块中,定义一个 Onselect()函数来实现对数据库中元组的查询,即查询图书信息.具体的代码如下: void Cchaxun::Onselect() { 3 if(sql.m_db.IsOpen()) { sql.m_db.Close(); } CString strnum,vSQL,vSQL1,strname,strat,strrem,j,k; int i; j=m_result.GetItemCount(); if(j>=1) { m_result.DeleteAllItems(); } m_num1.GetWindowText(strnum); vSQL="DRIVER={SQL Server};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.Se tColumnWidth(2,110);m_result.SetColumnWidth(3,120); } sql.m_db.OpenEx(vSQL,0); sql.rs.m_pDatabase=&sql.m_db; vSQL1="select * from book where num=""+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(); } 类图: 4 在该模块中,定义一个 Onadd()函数来实现向数据库中添加新的元组,即添加新的图书信息,包括图书编号,图书名字,作者名字,以及库存量.具体代码如下: void Cchaxun::Onadd() { // TODO: Add your control notification handler code here UpdateData(true); CString strnum2,strname2,strat2,strrem2,vSQL2; CString add,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={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql2.m_db.OpenEx(vSQL2,0); sql2.rs.m_pDatabase=&sql2.m_db; sql2.rs.Close(); add="insert into book values(""+strnum2+"",""+strname2+"",""+strat2+"",""+strrem2+"")"; sql2.m_db.ExecuteSQL(add); if(sql2.m_db.CanUpdate()) { AfxMessageBox("添加成功"); } } 类图: 5 在该模块中,定义了一个 Onupdate()函数,用来实现对数据库中元组的更新,即对图书信息的更新, 包括图书名字,作者名字,以及库存量的更新.具体代码如下: void Cchaxun::Onupdate() { // TODO: Add your control notification handler code here CString strnum3,strname3,strat3,strrem3,vSQL3; CString update; 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={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql3.m_db.OpenEx(vSQL3,0); update="update book set bname=""+strname3+"",author=""+strat3+"",remain=""+strrem3+"" where num=""+strnum3+"""; sql3.m_db.ExecuteSQL(update); if(sql3.m_db.CanUpdate()) { AfxMessageBox("更新成功"); } } 类图: 6 在该模块中,定义了一个 Ondelete()函数,用来实现对数据库中元组的删除,即删除某一图书,使用该功能时将删除该图书所在的整个元组.具体代码如下: void Cchaxun::Ondelete() { // TODO: Add your control notification handler code here CString strnum4,vSQL4; CString del; m_num4.GetWindowText(strnum4); if(sql4.m_db.IsOpen()) { sql4.m_db.Close(); return; } vSQL4="DRIVER={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql4.m_db.OpenEx(vSQL4,0); sql4.rs.m_pDatabase=&sql4.m_db; del="delete from book where num=""+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 类: 7 class Cchaxun : public CDialog { public: Cchaxun(CWnd* pParent = NULL); void Onselect(); void Onadd(); void Onupdate(); void Ondelete() protected: DECLARE_MESSAGE_MAP(); }; 名称 属性 说明 Cchaxun() 成员方法 构造函数 Onselect() 成员方法 查询图书信息 Onadd() 成员方法 添加新的图书 Onupdate() 成员方法 更新图书信息 Ondelete 成员方法 删除图书 DECLARE_ MESSAGE_MAP() 成员方法 VC 已定义好的函数 2.SQL 类: class SQL{ public: CDatabase m_db; CRecordset rs; }; 名称 属性 说明 m_db 数据成员 用来实现连接到数据库 rs 数据成员 用来实现连接到数据库 2.Clogin 类: 8 class Clogin : public CDialog { public: Clogin(CWnd* pParent = NULL); void Ontijiao(); protected: DECLARE_MESSAGE_MAP() }; 名称 属性 说明 Clogin() 成员方法 构造函数 Ontijiao() 成员方法 用来实现用户登陆 DECLARE_MESSAGE_MAP() 成员方法 VC 已定义好的函数 book 表结构如下: book(num int, bname char(100), author char(50), remain int) 其中num:图书编号,bname:书名,author:图书作者姓名,remian:库存量 Cchaxun 类中的Onselect()方法 功能:根据用户输入的图书编号,向数据库中搜索相应的元组,并显示出结果,即输出所查询的图书的图书信息。 算法思路:首先先判断数据源是否开启,如果已经开启先关了它,这里用到IsOpen() 函数和Close()函数。然后用GetWindowText()函数获取用户输入的图书编号。接下来连接数据库,用SQL 语句来搜索找到相应元组,并将结果显示出来。用到GetFieldValue() 函数和SetItemText()函数等。 流程图: 9 代码: void Cchaxun::Onselect() { if(sql.m_db.IsOpen()) { sql.m_db.Close(); } CString strnum,vSQL,vSQL1,strname,strat,strrem,j,k; int i; j=m_result.GetItemCount(); if(j>=1) { m_result.DeleteAllItems(); } m_num1.GetWindowText(strnum); vSQL="DRIVER={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; k=m_result.GetHeaderCtrl()->GetItemCount(); if(k<4) { m_result.InsertColumn(0,"图书编号");m_result.InsertColumn(1,"图书名称开 始 如果已经开启数据源则关了它 输入要查找的图书编号 连接数据库并查找到相应元组 结查询结果显示出来 结 束 10 ");m_result.InsertColumn(2,"作者");m_result.InsertColumn(3,"库存量"); m_result.SetColumnWidth(0,100);m_result.SetColumnWidth(1,120);m_result.Se tColumnWidth(2,110);m_result.SetColumnWidth(3,120); } sql.m_db.OpenEx(vSQL,0); sql.rs.m_pDatabase=&sql.m_db; vSQL1="select * from book where num=""+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(); } 11 图7-1 登陆界面测试图 图7-2 查询图书信息测试图 图7-3 添加图书测试图 12 图7-4 更新图书测试图 图7-5 删除图书测试图 由于设计者水平有限及时间等方面的原因,该系统的功能比较简单,查错能力也不强,对于一些不正确的输入可能会造成一些难以预料的结果,因此,请不要故意输入错误信息。这些不足请老师多多谅解。今后设计者会更多的学习编程技巧,不断的提高程序设计水平。 1,在登陆本系统时,由于能力有限,暂时设计不出让用户自己注册账号的功能,所以用户要登陆时统一采用同一账号密码,其中账号:admin,密码:admin。 2,在添加新的图书时,由于系统存在漏洞,所以添加的新图书是可以出现相同编号的,为了避免混乱,请在输入时输入不同的编号,不同的图书信息。 3,在更新,删除图书时,如果输入不存在的图书编号,它还是会提示“更新成功” 和“删除成功”,而实际上该操作是无效的,所以请输入确实在数据库中存在的图书编号。 13 1.登陆账号:admin ,密码:admin 。 2.查询图书请输入确实存在的正确的图书编号,然后点击“查询”即可。 3.添加图书请添加不同于已经存在的图书的新图书信息。 4. 更新图书则输入您要更新的图书编号和新的信息,然后点击“提交”即可。 5.删除图书则输入您要删除的图书编号,然后点击“删除”即可。 #if !defined(AFX_LOGIN_H__E4090B58_E195_42FA_9ADC_C346B139F6F0__INCLUDED_) #define AFX_LOGIN_H__E4090B58_E195_42FA_9ADC_C346B139F6F0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif class Clogin : public CDialog { public: Clogin(CWnd* pParent = NULL); protected: DECLARE_MESSAGE_MAP() }; #endif #include "stdafx.h" #include "BOOK.h" #include "login.h" #include "chaxun.h" #ifdef _DEBUG #define new DEBUG_NEW 14 #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif Clogin::Clogin(CWnd* pParent /*=NULL*/) : CDialog(Clogin::IDD, pParent) { } void Clogin::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(Clogin, CDialog) END_MESSAGE_MAP() void Clogin::Ontijiao() { CString id,no; CString str="admin"; m_id.GetWindowText(id); m_no.GetWindowText(no); if (id.Compare(str)==0&&no.Compare(str)==0) { Cchaxun dilog=new Cchaxun; dilog.DoModal(); } } #include"afxdb.h" class SQL{ 15 public: CDatabase m_db; CRecordset rs; }; #if !defined(AFX_CHAXUN_H__261FE414_5B2D_4D97_BB7D_00E6992FD7A0__INCLUDED_) #define AFX_CHAXUN_H__261FE414_5B2D_4D97_BB7D_00E6992FD7A0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class Cchaxun : public CDialog { public: Cchaxun(CWnd* pParent = NULL); enum { IDD = IDD_manage }; CEdit m_num4; CEdit m_remain3; CEdit m_author3; CEdit m_name3; CEdit m_num3; CEdit m_remain2; CEdit m_author2; CEdit m_name2; CEdit m_num2; CListCtrl m_result; CEdit m_num1; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: afx_msg void Onselect(); 16 afx_msg void Onadd(); afx_msg void Onupdate(); afx_msg void Ondelete(); DECLARE_MESSAGE_MAP() }; #include "stdafx.h" #include "BOOK.h" #include "chaxun.h" #include "lianjie.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif SQL sql,sql2,sql3,sql4; Cchaxun::Cchaxun(CWnd* pParent /*=NULL*/) : CDialog(Cchaxun::IDD, pParent) { } void Cchaxun::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); DDX_Control(pDX, IDC_EDIT6, m_num3); DDX_Control(pDX, IDC_EDIT5, m_remain2); 17 DDX_Control(pDX, IDC_EDIT4, m_author2); DDX_Control(pDX, IDC_EDIT3, m_name2); DDX_Control(pDX, IDC_EDIT2, m_num2); DDX_Control(pDX, IDC_LIST1, m_result); DDX_Control(pDX, IDC_EDIT1, m_num1); } BEGIN_MESSAGE_MAP(Cchaxun, CDialog) ON_BN_CLICKED(IDC_BUTTON1, Onselect) ON_BN_CLICKED(IDC_BUTTON2, Onadd) ON_BN_CLICKED(IDC_BUTTON3, Onupdate) ON_BN_CLICKED(IDC_BUTTON4, Ondelete) END_MESSAGE_MAP() void Cchaxun::Onselect() { if(sql.m_db.IsOpen()) { sql.m_db.Close(); } CString strnum,vSQL,vSQL1,strname,strat,strrem,j,k; int i; j=m_result.GetItemCount(); if(j>=1) { m_result.DeleteAllItems(); } m_num1.GetWindowText(strnum); 18 vSQL="DRIVER={SQL Server};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.Se tColumnWidth(2,110);m_result.SetColumnWidth(3,120); } sql.m_db.OpenEx(vSQL,0); sql.rs.m_pDatabase=&sql.m_db; vSQL1="select * from book where num=""+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(); } 19 void Cchaxun::Onadd() { // TODO: Add your control notification handler code here UpdateData(true); CString strnum2,strname2,strat2,strrem2,vSQL2; CString add,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={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql2.m_db.OpenEx(vSQL2,0); sql2.rs.m_pDatabase=&sql2.m_db; sql2.rs.Close(); add="insert into book values(""+strnum2+"",""+strname2+"",""+strat2+"",""+strrem2+"")"; sql2.m_db.ExecuteSQL(add); if(sql2.m_db.CanUpdate()) { AfxMessageBox("添加成功"); } } void Cchaxun::Onupdate() { 20 CString strnum3,strname3,strat3,strrem3,vSQL3; CString update; 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={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql3.m_db.OpenEx(vSQL3,0); update="update book set bname=""+strname3+"",author=""+strat3+"",remain=""+strrem3+"" where num=""+strnum3+"""; sql3.m_db.ExecuteSQL(update); if(sql3.m_db.CanUpdate()) { AfxMessageBox("更新成功"); } } void Cchaxun::Ondelete() { CString strnum4,vSQL4; CString del; m_num4.GetWindowText(strnum4); if(sql4.m_db.IsOpen()) { sql4.m_db.Close(); 21 return; } vSQL4="DRIVER={SQL Server};SERVER=(local);Database=StuCou;UID=sa;PWD="; sql4.m_db.OpenEx(vSQL4,0); sql4.rs.m_pDatabase=&sql4.m_db; del="delete from book where num=""+strnum4+"""; sql4.m_db.ExecuteSQL(del); if(sql4.m_db.CanUpdate()) { AfxMessageBox("删除成功"); return; } }
- Chen
-
我有图书管理系统的设计