logo资料库

C++(sql)图书管理系统.doc

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
图书管理系统(VC++与 SQL SERVER) 一.数据库设计 一共 4 张表:管理员基本信息表,图书信息表,借阅卡信息表,借书信息表 管理员信息表 字段名称 数据类型 可否为空 约束条件 用户名 Varchar(50) NOT NULL 主键 密码 Varchar(50) NOT NULL 无 图书信息表 字段名称 数据类型 可否为空 约束条件 书籍 ID Varchar(50) NOT NULL 主键 书名 作者 Varchar(50) NOT NULL 无 Varchar(50) NOT NULL 无 出版社 Varchar(50) NOT NULL 无 单价 Float(8) NOT NULL 无 入库时间 Datetime(8) NOT NULL 无 总量 现存量 Int(4) Int(4) NOT NULL 无 NOT NULL 无 借阅卡信息表 字段名称 数据类型 可否为空 约束条件 借阅卡 ID Varchar(50) NOT NULL 主键 姓名 性别 Varchar(50) NOT NULL 无 Varchar(50) NOT NULL 无 出生日期 Datetime(8) NOT NULL 无 地址 Varchar(50) NOT NULL 无 身份证号码 Varchar(50) NOT NULL 无 电话号码 Varchar(50) NOT NULL 无 现借书总量 Int(4) NOT NULL 无 借书信息表 字段名称 数据类型 可否为空 约束条件 借书 ID Varchar(50) NOT NULL 主键 借阅卡 ID Varchar(50) NOT NULL 外键(借阅信息表) 书籍 ID Varchar(50) NOT NULL 外键(图书信息表) 借出时间 Dateime(8) NOT NULL 无 二.新建数据库用户的登陆和数据源的连接 1.打开企业管理器,新建一个数据库,命名为图书管理。按照上面四张表格建立四张表。 在安全性目录下创建一个新登陆用户,用户名为 zhang 密码为 123,并设定允许该用户 访问图书管理数据库。 2.打开管理工具中的数据源(ODBC),添加 SQL SERVER 数据源命名为 Library,服务器 为 Local,使用数据库用户登陆。
3.点击测试是否成功,如果测试成功则点确定。 三.工程框架设计 1.将应用程序类型设定为基于对话框的应用程序。设定工程名称为 LibraryDBS。 2.将主对话框的 ID 改为 ID_DIALOG_LIBRARYDBS,标题改为“图书馆管理系统”。 主对话框布局如图 书籍管理控件列表 控件类型 ID 组框 按钮 按钮 按钮 按钮 按钮 IDC_STATIC IDC_BUTTON_BOOK_IN 属性 书籍管理 新书入库 变量或者函数 无 OnButtonBookIn() IDC_BUTTON_BORROW_RETURN 借书/还书 OnButtonBorrowReturn() IDC_BUTTON_BOOK_LOST 书籍挂失 OnButtonBookLost() IDC_BUTTON_BOOK_CHECK 图书信息查询 OnButtonBookCheck() IDC_BUTTON_BORROW_CHECK 借书信息查询 OnButtonBorrowCheck() 借阅卡管理控件列表 控件类型 ID 属性 变量或者函数 组框 按钮 按钮 按钮 IDC_STATIC 借阅卡管理 无 IDC_BUTTON_NEW_PROOF 办理借阅卡 OnButtonNewProof() IDC_BUTTON_PROOF_CHECK 借阅卡信息查询 OnButtonProofCheck() IDC_BUTTON_PROOF_LOST 借阅卡挂失 OnButtonProofLost() 系统管理控件列表 控件类型 ID 属性 变量或者函数 组框 按钮 按钮 按钮 IDC_STATIC 系统管理 无 IDC_BUTTON_ADD_USER 注册管理员 OnButtonAddUser() IDC_BUTTON_MOD_PASSWORD 修改密码 OnButtonModPassword() IDOK 退出 无 3.总的工程设计一共分为 5 个部分:管理员的登陆,书籍的入库、查询和挂失,借阅卡的 办理、查询和挂失,管理员的注册和密码的修改,借书和还书的办理。
第一部分 管理员的登陆 1.添加一个对话框,对话框的类名为 CLoginDlg,资源 ID 为 IDD_DIALOG_LOGIN,对话框名 称为“登陆图书管理系统” 2.登陆对话框如图 对话框控件列表: 控件类型 ID 属性 变量或者函数 静态文本 IDC_STATIC 登陆图书管理系统 无 静态文本 IDC_STATIC 编辑框 IDC_EDIT_USER 静态文本 IDC_STATIC 用户名 无 密码 无 CString 类型变量 m_strUser 无 编辑框 IDC_EDIT_PASSWORD 无 CString 类型变量 m_strPassword 按钮 按钮 IDOK IDCANCLE 3.部分程序代码 登陆 退出 OnOK() 无 在主对话框创建前先创建登陆对话框,在 BOOL CLibDBSDlg::OnInitDialog()中添加代码 BOOL CLibDBSDlg::OnInitDialog() { … CLoginDlg dlg; m_login=1; dlg.m_login=&m_login; dlg.DoModal(); if(m_login) { CDialog::OnOK(); } … } 实现登陆成功的部分代码,在 void CLoginDlg::OnOK()中添加代码 void CLoginDlg::OnOK() { // TODO: Add extra validation here
UpdateData(); if(m_strUser==""||m_strPassword=="") { MessageBox("请填写用户名和密码!","登陆图书管理系统"); m_strUser.Empty(); m_strPassword.Empty(); UpdateData(FALSE); return; } if(!m_database.IsOpen()) { if(!m_database.Open(_T("Library"))) { MessageBox("连接数据库失败!","数据库连接"); return; } } CLoginSet *m_pset=new CLoginSet(&m_database); CString strSQL; strSQL.Format("select * from 管 理 员 信 息 表 where 用 户 名 ='%s' AND 密 码 ='%s'",m_strUser,m_strPassword); m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(!m_pset->GetRecordCount()) { if(count<5) { MessageBox("对不起,你输入的用户名和密码不正确!","图书管理系统"); count++; m_strUser.Empty(); m_strPassword.Empty(); UpdateData(FALSE); } else { m_database.Close(); MessageBox("你的登陆失败超过 5 次,请与管理员联系!","图书管理系统"); OnCancel(); } } else { m_database.Close(); *m_login=0; CDialog::OnOK();
} } 第二部分 书籍的入库,查询和挂失 书籍入库 1. 添 加 一 个 对 话 框 , 对 话 框 的 类 名 为 CNewBookInDlg , 资 源 ID 为 IDD_DIALOG_NEW_BOOK_IN,对话框名称为“新书入库” 2. 新书入库对话框如图 对话框控件列表 控件类型 ID 静态文本 IDC_STATIC 属性 书号 变量或者函数 无 编辑框 IDC_EDIT_BOOK_NO 无 CString 类型变量 m_strBookNo 静态文本 IDC_STATIC 书名 无 编辑框 IDC_EDIT_BOOK_NAME 无 CString 类型变量 m_strBookName 静态文本 IDC_STATIC 作者 无 编辑框 IDC_EDIT_WRITER 无 CString 类型变量 m_strWriter 静态文本 IDC_STATIC 单价 无 编辑框 IDC_EDIT_PRICE 无 double 类型变量 m_dPrice 静态文本 IDC_STATIC 出版社 无 编辑框 IDC_EDIT_PRESS 无 CString 类型变量 m_strPress 静态文本 IDC_STATIC 总量 无 编辑框 IDC_EDIT_TOTAL 无 Long 类型变量 m_lTotal 静态文本 IDC_STATIC 现存量 无 编辑框 IDC_EDIT_NOW 无 Long 类型变量 m_lNow 按钮 按钮 IDC_BUTTON_BOOK_IN 入库 OnButtonBookIn() IDC_BUTTON_BACK 返回 OnButtonBack() 3.实现书籍入库功能在 void CNewBookInDlg::OnButtonBookIn()添加代码 void CNewBookInDlg::OnButtonBookIn() { // TODO: Add your control notification handler code here UpdateData(); if(m_strBookNo.Compare("")==0)
{ MessageBox("请输入书号!","新书入库"); return; } if(!m_database.IsOpen()) { if(!m_database.Open(_T("Library"))) { MessageBox("连接数据库失败!","新书入库"); return; } } CBookSet *m_pset= new CBookSet(&m_database); CString strSQL; strSQL.Format("select * from 图书信息表 where 书籍 ID='%s'",m_strBookNo); m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()!=0) { m_pset->Edit(); m_pset->m_Total=m_pset->m_Total+m_lTotal; m_pset->m_Now=m_pset->m_Now+m_lNow; m_pset->Update(); m_pset->Requery(); m_pset->Close(); m_database.Close(); MessageBox("添加书籍成功!","新书入库"); return; } m_pset->Close(); if(m_strBookNo==""||m_strBookName==""||m_strWriter==""||m_dPrice==0|| m_strPress==""||m_lTotal==0||m_lNow==0) { MessageBox("请将下列选项填写完整!","新书入库"); m_database.Close(); return; } strSQL.Format("select * from 图书信息表"); m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) { MessageBox("添加的第一本书!","新书入库"); } m_pset->AddNew(); m_pset->SetFieldNull(&(m_pset->m_Book_NO),FALSE);
m_pset->m_Book_NO=m_strBookNo; m_pset->SetFieldNull(&(m_pset->m_Book_Name),FALSE); m_pset->m_Book_Name=m_strBookName; m_pset->SetFieldNull(&(m_pset->m_Writer),FALSE); m_pset->m_Writer=m_strWriter; m_pset->SetFieldNull(&(m_pset->m_Price),FALSE); m_pset->m_Price=m_dPrice; m_pset->SetFieldNull(&(m_pset->m_Press),FALSE); m_pset->m_Press=m_strPress; m_pset->SetFieldNull(&(m_pset->m_Total),FALSE); m_pset->m_Total=m_lTotal; m_pset->SetFieldNull(&(m_pset->m_Now),FALSE); m_pset->m_Now=m_lNow; CTime curTime=CTime::GetCurrentTime(); m_pset->SetFieldNull(&(m_pset->m_InLibrary_Time),FALSE); m_pset->m_InLibrary_Time=curTime; m_pset->Update(); m_pset->Requery(); m_pset->Close(); m_database.Close(); MessageBox("新书入库成功!","新书入库"); m_strBookNo.Empty(); m_strBookName.Empty(); m_strWriter.Empty(); m_dPrice=0; m_strPress.Empty(); m_lTotal=0; m_lNow=0; UpdateData(FALSE); return; } 书籍查询 1. 添加一个对话框,对话框的类名为 CBookCheckDlg,资源 ID 为 IDD_DIALOG_BOOK_CHECK, 对话框名称为“图书查询” 2. 图书查询对话框如图
书籍查询对话框控件列表 控件类型 ID 静态文本 IDC_STATIC 编辑框 IDC_EDIT_BOOK_NO IDC_BUTTON_CHECK 按钮 按钮 按钮 属性 书号 无 查询 变量或者函数 无 CString 类型变量 m_strBookNo OnButtonCheck() IDC_BUTTON_CHECK_ALL 全部查询 OnButtonCheckAll() IDC_BUTTON_BACK 列表控件 IDC_LIST_RESULT 返回 无 OnButtonBack() CListCtrl 类型变量 m_ctrList 3. 实现查询书籍功能在 void CBookCheckDlg::OnButtonCheck()添加代码 void CBookCheckDlg::OnButtonCheck() { // TODO: Add your control notification handler code here UpdateData(); if(m_strBookNo=="") { MessageBox("请输入书号!","书籍查询"); return; } if(!m_database.IsOpen()); { if(!m_database.Open(_T("Library"))) { MessageBox("连接数据库失败!","书籍查询"); return; } } CBookSet *m_pset=new CBookSet(&m_database); CString strSQL; strSQL.Format("select * from 图书信息表 where 书籍 ID='%s'",m_strBookNo); m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_pset->GetRecordCount()==0) { MessageBox("书库中没有该书!","书籍查询");
分享到:
收藏