数据库课程设计报告模板

中南民族大学

计算机科学学院

数据库综合实验报告

题    目     学生信息系统

年    级       08         

专    业   计算机科学与技术

指导教师        陈幼均          

小组成员(姓名学号)

08061097雷文        

08061099周进            

08060000兰晨泉                   

实验类型          综合型                    

  

                 2010 12 20


目录

1引言.......................................................................................................................... 2

1. 1实验目的........................................................................................................ 2

2任务概述................................................................................................................. 2

2. 1 目标............................................................................................................... 2

2.2 开发平台....................................................................................................... 2

2.2.1最小硬件设备........................................................................................... 2

2.2.2软件环境.................................................................................................. 3

3. 功能需求.................................................................................................................. 3

3. 1  需求调查..................................................................................................... 3

3. 2  静态数据(输入、输出)描述................................................................. 3

3. 3  功能设计..................................................................................................... 3

3.3.1总体功能设计....................................................................................... 3

4. 数据描述.................................................................................................................. 4

4.1  逻辑设计................................................................................................... 4

4.2  E-R模型.................................................................................................... 5

4.3  关系模型...................................................................................................... 5

4.4  编码及调试能力............................................................................................ 9

5. 编程体会................................................................................................................ 10

6.  1  遇到问题及解决方法............................................................................ 10

6.  2  程序部分重要代码................................................................................ 10

6. 注意事项..................................................................................................................................19

7. 结束语.......................................................................................................................................19

8. 参考文献...............................................................................................................................19        


1.引言

1.1  实验目的

我们设计开发的图书馆借阅管理系统主要包括后台数据库的建立和前端应用程序的开发两个方面。对于前者我们用的是Microsoft office access,要求建立起数据一致性和完整性强.数据安全性好的库,而对于后者则用VISUAL

C++开发工具,要求应用程序功能完备,易使用等特点。

由于图书馆主要从事大量的图书资料的储存和流通。传统的人工管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。而作为计算机应用的一部分,使用计算机对图书资源信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书馆管理的效率。因此对于开发这样一个图书馆借阅管理系统,有着非常重大的意义。

2.任务概述

2. 1  目标

本系统就是要达到对教师及学生借阅书籍的日常管理,能快速完成,并对信息进行数据库管理,从而为用户提供充足的信息和快捷的查询手段的目的。

2.2  开发平台

2.2.1最小硬件设备

本系统开发所用服务器的配置是:

   ·Windows XP  PC机

·512MB内存

·80GB硬盘(7200转,串行)

2.2.2软件环境

本系统的设计采用的是Microsoft office access,以及采用Visual C++6.0来处理图像数据。

Microsoft office access是一种简单易学的数据库类型,而且易于与编程语言Visual C++进行连接,所以我们选用Microsoft office access作为我们的数据库。

3. 功能需求

3.1需求调查

我们组设计的这个图书馆借阅管理系统,主要是针对图书馆的管理员的,使用此系统管理图书与读者信息能够更加便捷,提高工作效率。

3.2静态数据(输入、输出)描述

3.3 功能设计

3.3.1  总体功能设计

图3.3.1.1   整体功能设计图

数据流图如下:

4. 数据描述

4.1 逻辑设计

两种快捷方式按钮:

1.   图书信息查询功能

通过书名、书的编号、图书类别、作者或者出版社进行检索。对于未借出的书可以借给未借满的用户。

2.  读者信息:

通过读者编号、姓名、和种类可以依据不同的分类方式对读者信息进行检索。

菜单项功能:

1.      图书管理

图书类别管理:从图书类别表中添加、修改、删除图书类别。

图书信息管理:从书籍信息表中对于图书信息进行查询、添加、修改、删除操作。

2.      读者管理

读者类别管理:从读者类别表添加、修改、删除读者类别。

读者信息管理:从读者信息表对于读者信息进行查询、添加、修改、删除操作。

3.      图书借阅管理

借书管理:从借阅信息表中添加借书信息、查询借书信息。

还书管理:从借阅信息表中将需要还的书加入。

4.      系统管理

添加管理员:对于不同的图书馆的工作人员都可以在界面下增加新的管理人员,添加入用户表。

更改密码:对于进入系统的登录密码进行修改,随之修改用户表中对应的密码。

4.2 E-R模型

总体的ER图

     

图4.2.1    E-R图

4.3 关系模型

(1)书籍信息表:本表主要用于存储图书信息,    

    

主码为:(图书)编号

     (2) 借阅信息表:本表主要用于存储读者借阅信息:

 (3) 用户表:

(4)图书挂失信息表

4.4 编程能力及调试

1) 用户界面设计

采用总分式的结构;利用单页面多窗口,结构简单、操作方便、界面清晰

2) 功能实现情况

 1   图书信息查询功能

通过书名、书的编号、图书类别、作者或者出版社进行检索。对于未借出的书可以借给未借满的用户。

2  读者信息:

通过读者编号、姓名、和种类可以依据不同的分类方式对读者信息进行检索。

5. 编程体会

5.1遇到的问题及解决方法 

我们遇到过困难。开始时,我们准备使用微软的SQL server,但由于不熟悉如何连接,继而使用了另一种较简单的数据库access。由于时间有限,加之接触VC++时间不长,我们对于界面的美化没有做到尽善尽美;一些特殊功能模块比如借书账单没有得以开发实现。

5.2 程序部分重要代码

 以下是图书管理系统的部分功能以及实现这些功能的代码

(1). 图书管理系统登陆界面

              

实现的代码如下:CLibraryDlg::CLibraryDlg(CWnd* pParent /*=NULL*/)

  : CDialog(CLibraryDlg::IDD, pParent)

{

  //{{AFX_DATA_INIT(CLibraryDlg)

  m_strPassword = _T("");

  m_strUsername = _T("");

  //}}AFX_DATA_INIT

  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CLibraryDlg::DoDataExchange(CDataExchange* pDX)

{

  CDialog::DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CLibraryDlg)

  DDX_Text(pDX, IDC_EDIT_PASSWD, m_strPassword);

  DDX_Text(pDX, IDC_EDIT_USER, m_strUsername);

  //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CLibraryDlg, CDialog)

  //{{AFX_MSG_MAP(CLibraryDlg)

  ON_WM_PAINT()

  ON_WM_QUERYDRAGICON()

  ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)

  ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)

  ON_WM_CLOSE()

  ON_WM_LBUTTONDBLCLK()

  ON_WM_CREATE()

  ON_MESSAGE(DM_GETDEFID, OnGetDefID)

  //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CLibraryDlg message handlers

BOOL CLibraryDlg::OnInitDialog()

{

  CDialog::OnInitDialog();

  // Set the icon for this dialog.  The framework does this automatically

  //  when the application's main window is not a dialog

  SetIcon(m_hIcon, TRUE);                  // Set big icon

  SetIcon(m_hIcon, FALSE);          // Set small icon

 

  // TODO: Add extra initialization here

  count=0;

  return TRUE;  // return TRUE  unless you set the focus to a control

}

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

void CLibraryDlg::OnPaint()

{

  if (IsIconic())

  {

         CPaintDC dc(this); // device context for painting

         SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

         // Center icon in client rectangle

         int cxIcon = GetSystemMetrics(SM_CXICON);

         int cyIcon = GetSystemMetrics(SM_CYICON);

         CRect rect;

         GetClientRect(&rect);

         int x = (rect.Width() - cxIcon + 1) / 2;

         int y = (rect.Height() - cyIcon + 1) / 2;

         // Draw the icon

         dc.DrawIcon(x, y, m_hIcon);

  }

  else

  {

         CDialog::OnPaint();

  }

}

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CLibraryDlg::OnQueryDragIcon()

{

  return (HCURSOR) m_hIcon;

}

void CLibraryDlg::OnButtonOk()

{

  UpdateData();

  if(m_strUsername.IsEmpty())

  {

         MessageBox("Please input your username!","登录系统",MB_OK|MB_ICONEXCLAMATION);

         m_strUsername.Empty();

         UpdateData(FALSE);

         return;

  }

  if(!m_database.IsOpen())

  {

         //连接数据源

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("Cannot access the database!","图书管理系统",MB_OK|MB_ICONINFORMATION);

                return;

         }

  }

 

  CLoginSet *m_pLogset=new CLoginSet(&m_database);

  //编写SQL语句

  CString strSQL;

  strSQL.Format("select * from Admin_Info where User_Name='%s' AND Password='%s'",m_strUsername,m_strPassword);

  //编写SQL语句结束

  m_pLogset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

 

  if(m_pLogset->GetRecordCount()==0)

  {

         if(count<5)

         {

                MessageBox("Login incorrect!","图书管理系统",MB_OK|MB_ICONERROR);

                count++;

                m_strPassword.Empty();

                m_strUsername.Empty();

                UpdateData(FALSE);

         }

         else

         {

                m_database.Close();

                MessageBox("You are dismissed this time, Please contact with Administrator!","图书管理系统");

                OnOK();

         }

  }

  else

  {

         m_database.Close();

         CMainDlg m_Main;

         m_Main.m_user=m_strUsername;

         MessageBox("Login OK! Welcome to use my software!","图书管理系统");

         m_Main.DoModal();

         OnOK();              

  }

}

void CLibraryDlg::OnButtonCancel()

{

 

  int iResult=MessageBox("Will you really quit?","图书管理系统",MB_YESNO|MB_ICONQUESTION);

  if(iResult==IDYES)

  {

         if(m_database.IsOpen())

                m_database.Close();

         OnOK();

  }

}

void CLibraryDlg::OnClose()

{

  OnButtonCancel();

}

void CLibraryDlg::OnLButtonDblClk(UINT nFlags, CPoint point)

{

  MessageBox("What do you want to do?","图书管理系统",MB_ICONQUESTION);

  CDialog::OnLButtonDblClk(nFlags, point);

}

int CLibraryDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

  if (CDialog::OnCreate(lpCreateStruct) == -1)

         return -1;

  return 0;

}

LRESULT CLibraryDlg::OnGetDefID(WPARAM wp, LPARAM lp)

{

    return MAKELONG(0,DC_HASDEFID);

}

(2). 修改密码

                       

实现的代码如下:CPasswdDlg::CPasswdDlg(CWnd* pParent /*=NULL*/)

  : CDialog(CPasswdDlg::IDD, pParent)

{

  //{{AFX_DATA_INIT(CPasswdDlg)

  m_strConfirm = _T("");

  m_strNewPass = _T("");

  //}}AFX_DATA_INIT

}

void CPasswdDlg::DoDataExchange(CDataExchange* pDX)

{

  CDialog::DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CPasswdDlg)

  DDX_Text(pDX, IDC_EDIT_CONFIRM_PASS, m_strConfirm);

  DDX_Text(pDX, IDC_EDIT_NEW_PASS, m_strNewPass);

  //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CPasswdDlg, CDialog)

  //{{AFX_MSG_MAP(CPasswdDlg)

  ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)

  ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)

  ON_WM_CLOSE()

  //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CPasswdDlg message handlers

BOOL CPasswdDlg::OnInitDialog()

{

  CDialog::OnInitDialog();

 

  count=0;

 

  return TRUE;  // return TRUE unless you set the focus to a control

                // EXCEPTION: OCX Property Pages should return FALSE

}

void CPasswdDlg::OnButtonOk()

{

  UpdateData();

  if(m_strNewPass!=m_strConfirm)

  {

         if(count<5)

         {

                MessageBox("New passwords of two times are different!","修改密码");

                count++;

                return;

         }

         else

         {

                MessageBox("You have no right for more trials, please contact with Administrator!","修改密码");

                OnOK();

         }

  }

 

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("Cannot access the database!","图书管理系统",MB_OK);

                return;

         }

  }

  CString strSQL;

  strSQL.Format("select * from Admin_Info where User_Name='%s'",m_user);

  CLoginSet *m_pset=new CLoginSet(&m_database);

  m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  m_pset->Edit();

  m_pset->m_Password=m_strNewPass;

  m_pset->Update();

  m_pset->Requery();

  m_database.Close();

  MessageBox("Password Modified successfully, do remember new password!","修改密码");

  OnOK();

}

void CPasswdDlg::OnButtonCancel()

{

  if(m_database.IsOpen())

         m_database.Close();

  OnOK();

}

void CPasswdDlg::OnClose()

{

  OnButtonCancel();

}

(3). 借书还书管理

实现代码如下:CBorrowDlg::CBorrowDlg(CWnd* pParent /*=NULL*/)

  : CDialog(CBorrowDlg::IDD, pParent)

{

  //{{AFX_DATA_INIT(CBorrowDlg)

  m_strBookID = _T("");

  m_strProofID = _T("");

  //}}AFX_DATA_INIT

}

void CBorrowDlg::DoDataExchange(CDataExchange* pDX)

{

  CDialog::DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CBorrowDlg)

  DDX_Control(pDX, IDC_LIST_SHOW, m_ctrList);

  DDX_Text(pDX, IDC_EDIT_BOOK, m_strBookID);

  DDX_Text(pDX, IDC_EDIT_PROOF, m_strProofID);

  //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CBorrowDlg, CDialog)

  //{{AFX_MSG_MAP(CBorrowDlg)

  ON_BN_CLICKED(IDC_BUTTON_RESET, OnButtonReset)

  ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)

  ON_BN_CLICKED(IDC_BUTTON_BACK, OnButtonBack)

  ON_WM_CLOSE()

  ON_BN_CLICKED(IDC_BUTTON_CHECK_BORROW, OnButtonCheckBorrow)

  ON_BN_CLICKED(IDC_BUTTON_RETURN, OnButtonReturn)

  ON_BN_CLICKED(IDC_BUTTON_CHECK_BOOKS, OnButtonCheckBooks)

  //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CBorrowDlg message handlers

void CBorrowDlg::OnButtonReset()

{

  m_strProofID.Empty();

  m_strBookID.Empty();

  UpdateData(FALSE);

}

void CBorrowDlg::OnButtonOk()

{

  UpdateData();

  if(m_strProofID==""||m_strBookID=="")

  {

         MessageBox("输入的域不完整,请重新输入!","借书管理",MB_ICONERROR);

         m_strProofID.Empty();

         m_strBookID.Empty();

         UpdateData(FALSE);

         return;

  }

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("Cannot access the database!","借书管理");

                return;

         }

  }

 

  CString strSQL;

  //判断借书人是否有资格

  strSQL.Format("select * from Proof_Info where Proof_ID='%s'", m_strProofID);

  CProofSet *m_pProof=new CProofSet(&m_database);

  m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pProof->GetRecordCount()==0)

  {

         MessageBox("There is no information for this person","借书/还书",MB_ICONINFORMATION);

         m_pProof->Close();

         m_database.Close();

         return;

  }

  CDBVariant varValue;

  m_pProof->GetFieldValue(7,varValue);

  if(varValue.m_iVal==4)

  {

         //如果不满足条件

         MessageBox("You cannot borrow more than 4 books!","借书/还书",MB_OK|MB_ICONINFORMATION);

         m_pProof->Close();

         m_database.Close();

         return;

  }

 

  //满足条件

  //借书量加一

  m_pProof->Edit();

  m_pProof->m_Now_Borrow_Amount++;

  m_pProof->Update();

  m_pProof->Requery();

  m_pProof->Close();

  //Book_Info表中,现存数量减一

  strSQL.Format("select * from Book_Info where Book_ID='%s'",m_strBookID);

  CBookSet *m_pBook=new CBookSet(&m_database);

  m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pBook->GetRecordCount()==0)

  {

         MessageBox("Sorry, there is no this book in this library!","借书/还书",MB_ICONINFORMATION);

         m_pBook->Close();

         m_database.Close();

         return;

  }

  m_pBook->Edit();

  m_pBook->m_Now_Amount--;

  m_pBook->Update();

  m_pBook->Requery();

  m_pBook->Close();

  //将借书信息存入借书信息表中

  strSQL.Format("select * from Borrow_Info");

  CBorrowSet *m_pBorrow=new CBorrowSet(&m_database);

  m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pBorrow->GetRecordCount()==0)

  {

         MessageBox("There are no any borrowing information!","借书/还书",MB_OK|MB_ICONINFORMATION);

  }

 

  m_pBorrow->AddNew();

 

  m_pBorrow->SetFieldNull(&(m_pBorrow->m_Proof_ID),FALSE);

  m_pBorrow->m_Proof_ID=m_strProofID;

  m_pBorrow->SetFieldNull(&(m_pBorrow->m_Book_ID),FALSE);

  m_pBorrow->m_Book_ID=m_strBookID;

  CTime curTime=CTime::GetCurrentTime();

  m_pBorrow->SetFieldNull(&(m_pBorrow->m_Borrow_Date),FALSE);

  m_pBorrow->m_Borrow_Date=curTime;

 

  m_pBorrow->Update();

  m_pBorrow->Requery();

  m_pBorrow->Close();

  m_database.Close();

  MessageBox("Borrowing Successfully!","借书/还书",MB_OK|MB_ICONINFORMATION);

  RefreshData();

 

}

void CBorrowDlg::OnButtonBack()

{

  if(m_database.IsOpen())

         m_database.Close();

  OnOK();

}

void CBorrowDlg::OnClose()

{

  OnButtonBack();

}

BOOL CBorrowDlg::OnInitDialog()

{

  CDialog::OnInitDialog();

        

  m_ctrList.InsertColumn(0,"借阅证号");

  m_ctrList.InsertColumn(1,"姓名");

  m_ctrList.InsertColumn(2,"性别");

  m_ctrList.InsertColumn(3,"书号");

  m_ctrList.InsertColumn(4,"书籍名称");

  m_ctrList.InsertColumn(5,"借书日期");

  RECT rect;

  m_ctrList.GetWindowRect(&rect);

  int Width=rect.right-rect.left;

  m_ctrList.SetColumnWidth(0,Width/6);

  m_ctrList.SetColumnWidth(1,Width/6);

  m_ctrList.SetColumnWidth(2,Width/6);

  m_ctrList.SetColumnWidth(3,Width/6);

  m_ctrList.SetColumnWidth(4,Width/6);

  m_ctrList.SetColumnWidth(5,Width/6);

  m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT);

 

  return TRUE;  // return TRUE unless you set the focus to a control

                // EXCEPTION: OCX Property Pages should return FALSE

}

void CBorrowDlg::RefreshData()

{

  //刷新显示

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("Cannot open database!","借书/还书");

                return;

         }

  }

  CString strSQL,m_strName,m_strBName,m_strBookNo,m_strSex;

  char buf[50];

  CDBVariant varValue;

  //处理借阅证信息

  CProofSet *m_pProof=new CProofSet(&m_database);

  strSQL.Format("select * from Proof_Info where Proof_ID='%s'",m_strProofID);

  m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pProof->GetRecordCount()==0)

  {

         MessageBox("Cannot read table Proof_Info","借书/还书");

         m_pProof->Close();

         m_database.Close();

         return;

  }

  m_pProof->GetFieldValue(1,varValue);

  m_strName=varValue.m_pstring->GetBuffer(1);

  m_pProof->GetFieldValue(2,varValue);

  m_strSex=varValue.m_pstring->GetBuffer(1);

  m_pProof->Close();

  //处理表格

  strSQL.Format("select * from Borrow_Info where Proof_ID='%s'",m_strProofID);

  CBorrowSet *m_pBorrow=new CBorrowSet(&m_database);

  m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pBorrow->GetRecordCount()==0)

  {

         MessageBox("Cannot get borrowing information!","借书/还书",MB_OK|MB_ICONINFORMATION);

         m_pBorrow->Close();

         m_database.Close();

         return;

  }

  m_ctrList.DeleteAllItems();

  m_pBorrow->MoveFirst();

  int i=0;

  CBookSet *m_pBook=new CBookSet(&m_database);

  while(!m_pBorrow->IsEOF())

  {

         m_ctrList.InsertItem(i,buf);

         m_ctrList.SetItemText(i,0,m_strProofID);

        

         m_ctrList.SetItemText(i,1,m_strName);

         m_ctrList.SetItemText(i,2,m_strSex);

         m_pBorrow->GetFieldValue(2,varValue);

         m_strBookNo=varValue.m_pstring->GetBuffer(1);

         m_ctrList.SetItemText(i,3,m_strBookNo);

         m_pBorrow->GetFieldValue(3,varValue);

         sprintf(buf,"%d-%d-%d %d:%d:%d",varValue.m_pdate->year,

                varValue.m_pdate->month,varValue.m_pdate->day,

                varValue.m_pdate->hour,varValue.m_pdate->minute,

                varValue.m_pdate->second);

         m_ctrList.SetItemText(i,5,buf);

        

         strSQL.Format("select * from Book_Info where Book_ID='%s'",m_strBookNo);

         m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

         m_pBook->GetFieldValue(1,varValue);

         m_ctrList.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

         m_pBook->Close();

         i++;

         m_pBorrow->MoveNext();

  }

  m_pBorrow->Close();

  m_database.Close();

}

void CBorrowDlg::OnButtonCheckBorrow()

{

  CCheckBorrowDlg dlg;

  dlg.m_strProofID=m_strProofID;

  dlg.DoModal();

}

void CBorrowDlg::OnButtonReturn()

{

  UpdateData();

  if(m_strProofID==""||m_strBookID=="")

  {

         MessageBox("输入的域不完整,请重新输入!","借书管理",MB_ICONERROR);

         m_strProofID.Empty();

         m_strBookID.Empty();

         UpdateData(FALSE);

         return;

  }

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("Cannot access the database!","借书管理");

                return;

         }

  }

 

  CString strSQL;

  //借书信息表中是否有借书人的信息

  strSQL.Format("select * from Borrow_Info where Proof_ID='%s' AND Book_ID='%s'",m_strProofID,m_strBookID);

  CBorrowSet *m_pBorrow=new CBorrowSet(&m_database);

  m_pBorrow->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pBorrow->GetRecordCount()==0)

  {

         MessageBox("你并没有借这本书!","借书/还书",MB_OK|MB_ICONINFORMATION);

         m_pBorrow->Close();

         m_database.Close();

         return;

  }

  //借有这本书,删除这条记录信息。

  m_pBorrow->Delete();

  m_pBorrow->Close();

  //将借书人借书的总数减一

  strSQL.Format("select * from Proof_Info where Proof_ID='%s'", m_strProofID);

  CProofSet *m_pProof=new CProofSet(&m_database);

  m_pProof->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pProof->GetRecordCount()==0)

  {

         MessageBox("数据库中没有这个人!","借书/还书",MB_ICONINFORMATION);

         m_pProof->Close();

         m_database.Close();

         return;

  }

  CDBVariant varValue;

  //借书量加一

  m_pProof->Edit();

  m_pProof->m_Now_Borrow_Amount--;

  m_pProof->Update();

  m_pProof->Requery();

  m_pProof->Close();

  //Book_Info表中,现存数量加一

  strSQL.Format("select * from Book_Info where Book_ID='%s'",m_strBookID);

  CBookSet *m_pBook=new CBookSet(&m_database);

  m_pBook->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pBook->GetRecordCount()==0)

  {

         MessageBox("对不起,本馆没有这本书!","借书/还书",MB_ICONINFORMATION);

         m_pBook->Close();

         m_database.Close();

         return;

  }

  m_pBook->Edit();

  m_pBook->m_Now_Amount++;

  m_pBook->Update();

  m_pBook->Requery();

  m_pBook->Close();

 

  m_database.Close();

  MessageBox("Return Successfully!","借书/还书",MB_OK|MB_ICONINFORMATION);

  RefreshData();      

}

void CBorrowDlg::OnButtonCheckBooks()

{

  CCheckBooksDlg m_dlg;

  m_dlg.DoModal();

}

(4). 查询借阅证信息

                      

实现的代码如下:CCheckProofDlg::CCheckProofDlg(CWnd* pParent /*=NULL*/)

  : CDialog(CCheckProofDlg::IDD, pParent)

{

  //{{AFX_DATA_INIT(CCheckProofDlg)

  m_strProofID = _T("");

  //}}AFX_DATA_INIT

}

void CCheckProofDlg::DoDataExchange(CDataExchange* pDX)

{

  CDialog::DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CCheckProofDlg)

  DDX_Control(pDX, IDC_LIST_RESULT, m_ctrList);

  DDX_Text(pDX, IDC_EDIT_PROOF_NO, m_strProofID);

  //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CCheckProofDlg, CDialog)

  //{{AFX_MSG_MAP(CCheckProofDlg)

  ON_BN_CLICKED(IDC_BUTTON_CHECK_PROOF, OnButtonCheckProof)

  ON_BN_CLICKED(IDC_BUTTON_BACK, OnButtonBack)

  ON_WM_CLOSE()

  ON_BN_CLICKED(IDC_BUTTON_SHOW_ALL, OnButtonShowAll)

  //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CCheckProofDlg message handlers

BOOL CCheckProofDlg::OnInitDialog()

{

  CDialog::OnInitDialog();

 

  m_ctrList.InsertColumn(0,"借阅证号");

  m_ctrList.InsertColumn(1,"姓名");

  m_ctrList.InsertColumn(2,"性别");

  m_ctrList.InsertColumn(3,"出生年月日");

  m_ctrList.InsertColumn(4,"家庭住址");

  m_ctrList.InsertColumn(5,"身份证号");

  m_ctrList.InsertColumn(6,"电话号码");

  m_ctrList.InsertColumn(7,"现借书数量");

  RECT rect;

  m_ctrList.GetWindowRect(&rect);

  int Width=rect.right-rect.left;

  m_ctrList.SetColumnWidth(0,Width/8);

  m_ctrList.SetColumnWidth(1,Width/8);

  m_ctrList.SetColumnWidth(2,Width/8);

  m_ctrList.SetColumnWidth(3,Width/8);

  m_ctrList.SetColumnWidth(4,Width/8);

  m_ctrList.SetColumnWidth(5,Width/8);

  m_ctrList.SetColumnWidth(6,Width/8);

  m_ctrList.SetColumnWidth(7,Width/8);

  m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT);

  return TRUE;  // return TRUE unless you set the focus to a control

                // EXCEPTION: OCX Property Pages should return FALSE

}

void CCheckProofDlg::OnButtonCheckProof()

{

  UpdateData();

  if(m_strProofID=="")

  {

         MessageBox("请填写借阅证号码!","借阅证查询");

         return;

  }

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("不能打开数据库!","借阅证查询");

                return;

         }

  }

  CProofSet *m_pset=new CProofSet(&m_database);

  CString strSQL;

  strSQL.Format("select * from Proof_Info where Proof_ID='%s'",m_strProofID);

  m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pset->GetRecordCount()==0)

  {

         MessageBox("数据库中没有这个人的信息","借阅证查询");

         m_pset->Close();

         m_database.Close();

         m_strProofID.Empty();

         UpdateData(FALSE);

         return;

  }

  //读取信息,并将信息显示在控件上

  m_ctrList.DeleteAllItems();

  m_pset->MoveFirst();

  CDBVariant varValue;

  char buf[50];

  int i=0;

  while(!m_pset->IsEOF())

  {

         int temp=0;

         m_ctrList.InsertItem(i,buf);

 

         m_pset->GetFieldValue(temp,varValue);

         m_ctrList.SetItemText(i,temp,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(1,varValue);

         m_ctrList.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(2,varValue);

         m_ctrList.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(3,varValue);

         sprintf(buf,"%d-%d-%d",varValue.m_pdate->year,varValue.m_pdate->month,

                varValue.m_pdate->day);

         m_ctrList.SetItemText(i,3,buf);

         m_pset->GetFieldValue(4,varValue);

         m_ctrList.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(5,varValue);

         m_ctrList.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(6,varValue);

         m_ctrList.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(7,varValue);

         sprintf(buf,"%d",varValue.m_lVal);

         m_ctrList.SetItemText(i,7,buf);

         i++;

         m_pset->MoveNext();

  }

}

void CCheckProofDlg::OnButtonBack()

{

  if(m_database.IsOpen())

         m_database.Close();

  OnOK();

}

void CCheckProofDlg::OnClose()

{

  OnButtonBack();

}

void CCheckProofDlg::OnButtonShowAll()

{

  if(!m_database.IsOpen())

  {

         if(!m_database.Open(_T("Library")))

         {

                MessageBox("不能打开数据库!","借阅证查询");

                return;

         }

  }

  CProofSet *m_pset=new CProofSet(&m_database);

  CString strSQL;

  strSQL.Format("select * from Proof_Info");

  m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);

  if(m_pset->GetRecordCount()==0)

  {

         MessageBox("数据库中目前没有任何借阅证信息!","借阅证查询");

         m_pset->Close();

         m_database.Close();

         m_strProofID.Empty();

         UpdateData(FALSE);

         return;

  }

  //读取信息,并将信息显示在控件上

  m_ctrList.DeleteAllItems();

  m_pset->MoveFirst();

  CDBVariant varValue;

  char buf[50];

  int i=0;

  while(!m_pset->IsEOF())

  {

         int temp=0;

         m_ctrList.InsertItem(i,buf);

 

         m_pset->GetFieldValue(temp,varValue);

         m_ctrList.SetItemText(i,temp,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(1,varValue);

         m_ctrList.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(2,varValue);

         m_ctrList.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(3,varValue);

         sprintf(buf,"%d-%d-%d",varValue.m_pdate->year,varValue.m_pdate->month,

                varValue.m_pdate->day);

         m_ctrList.SetItemText(i,3,buf);

         m_pset->GetFieldValue(4,varValue);

         m_ctrList.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(5,varValue);

         m_ctrList.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(6,varValue);

         m_ctrList.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

         m_pset->GetFieldValue(7,varValue);

         sprintf(buf,"%d",varValue.m_lVal);

         m_ctrList.SetItemText(i,7,buf);

         i++;

         m_pset->MoveNext();

  }           

}

6. 注意事项

用户名为admin, 密码是123。

7. 结束语

我们小组得以完成整个项目,是归功于每个成员的,这使我们认识到了团队合作的优势,同时,我们分工明确、积极沟通,认真完成任务,感受到了融洽的学习氛围,这极大的促进了我们的工作效率。虽然对于VC++我们组内成员只有少数人略有了解,但这并没有成为我们的阻碍,借助书本、网络很快掌握了基本的操作,并在共同努力下完成了开发。我们认识到对于新知识,多种渠道综合的学习才是可快速掌握的方法。

每一次课程设计对于我们来说都是一次挑战,但又是一次机遇,是挖掘潜力,开拓思维的头脑风暴。经过此次历练,我们都对系统开发有了一定了解,也有了很大的收获,更重要的是这种学习方法和工作理念,对于今后的工作学习都是一种财富的积累。

8. 参考资料

1.   数据库系统概论(第四版)  王珊  萨师煊   高等教育出版社   20##-5

相关推荐