资源描述
课程设计说明书 NO.20
图书管理系统
1.课程设计目的
VC++程序设计课程设计是计算机科学与技术专业的《VC++程序设计》课程的综合性实践环节。VC++程序设计是一门实用性很强的学科,是进行软件开发的主要工具,只有进行实际操作,才能将理论知识和实际应用有机的结合起来,锻炼学生分析解决实际问题的能力,提高学生实际运用的能力,为学生毕业设计,日后工作中的软件开发打下良好的基础。
具体掌握如下技能:
1 掌握VC++6.0开发环境开发软件的方法;
2 掌握单文档应用程序结构,熟悉多文档和基于对话框应用程序的方法;
3 掌握资源编辑器进行图标、光标、菜单、工具栏、对话框等资源的编辑,熟悉应用程序界面的设计方法;
4 掌握对话框,常用控件和Active控件的使用方法;
5 熟悉文档结构试图,掌握文档和视图,视图与视图的数据传递技巧;
6 熟悉切分窗口及一档多视的编程方法;
7 实现视图和对话框控件等窗口中绘制图形的方法;
8 掌握用MFC编写ODBC数据库应用程序的方法和技巧。
2.系统需求分析
系统开发的总体任务是实现图书信息管理。下面就其系统功能作简单的说明。
主要完成的功能有:登录功能、图书管理、借阅信息、读者查询、新增图书。
图书管理系统
登陆功能
图书管理
借阅信息
读者查询
新增图书
图1.系统总体设计
3.设计方案论证
3.1数据库设计
1)逻辑结构
图书管理系统数据模型:
图书(编号,名称,作者,出版日期,登记日期)
管理员(编号,姓名,性别,年龄,工作时间)
会员(编号,姓名,性别,家庭住址,联系方式)
2)图书信息表
字段名称
数据类型
说明
tno
文本
图书编号
tname
文本
图书名称
twriter
文本
作者姓名
tcbs
文本
出版社名称
Tcbrq
日期/时间
出版日期
tdgrq
日期/时间
登记日期
表1.图书信息
表1为图书信息数据表—图书信息数据表记录了图书的基本信息,图书的编号,名称,作者姓名,出版社名称,出版日期,登记日期。
3)管理员信息表
字段名称
数据类型
说明
gno
数字
管理员编号
gname
文本
姓名
gsex
文本
管理员性别
gage
数字
管理员年龄
ggztime
数字
工作时间
表2管理员信息
表2为管理员信息数据表—管理员信息数据表记录了管理员的基本信息,管理员的编号,姓名,性别,年龄,工作时间。
4)会员信息表
字段名称
数据类型
说明
hno
数字
会员编号
hname
文本
会员姓名
hsex
文本
会员性别
haddress
数字
家庭住址
htel
数字
联系方式
表3.会员信息
表3为会员信息数据表—会员信息数据表记录了会员的基本信息,会员的编号,姓名,性别,家庭住址,联系方式。
3.2模块设计
图2.管理员模块、
图2为管理员模块,在管理员模式下可以进行的修改密码,信箱管理,天家图书,新书入库,还书管理等管理员功能。
图3.用户模块
图3为用户模块,会员模式下用户的功能,如修改密码,信箱管理,个人信息,图书查询等。
4.应用软件的实现与运行结果
4.1显示模块
1.登陆
输入账号密码时显示的界面:
图4.登录界面
2.进入图书管理系统
图5.进入管理系统
其中系统登录可以登录和退出系统,登录后可以查看图书资料、读者资料,进行图书馆里和读者管理;图书资料中可以增加、修改、删除、查询图书信息;读者资料中可以增加、修改、删除、查询读者信息;结束管理中可以借阅相关图书;还书管理可以归还借阅图书。
3.图书信息
图6.图书信息
4.借阅信息
图7.借阅信息
5.借阅查询
图8.借阅查询
6. 读者信息管理
图9.读者信息管理
7.归还图书
图10.归还图书
8. 续借图书
图11.续借图书
9.新增图书
图12.新增图书
10.新增读者
图13.新增读者
4.2具体实现
#include "stdafx.h"
#include "LMSystem.h"
#include "AddBookManage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAddBookManage dialog
CAddBookManage::CAddBookManage(CWnd* pParent /*=NULL*/)
: CDialog(CAddBookManage::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddBookManage)
m_actorEdit = _T("");
m_bookIDEdit = _T("");
m_bookNameEdit = _T("");
m_bookTypeEdit = _T("");
m_positionEdit = _T("");
m_yearEdit = _T("");
m_ISBNEdit = _T("");
//}}AFX_DATA_INIT
}
void CAddBookManage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddBookManage)
DDX_Control(pDX, IDC_POSITIONEDIT, m_ctrPosition);
DDX_Control(pDX, IDC_YEAREDIT, m_ctrYear);
DDX_Control(pDX, IDC_BOOKTYPEEDIT, m_ctrBookType);
DDX_Control(pDX, IDC_BOOKNAMEEDIT, m_ctrBookName);
DDX_Control(pDX, IDC_BOOKLIST, m_bookList);
DDX_Control(pDX, IDC_BOOKIDEDIT, m_ctrBookIDEdit);
DDX_Control(pDX, IDC_ACTOREDIT, m_ctrActorEdit);
DDX_Text(pDX, IDC_ACTOREDIT, m_actorEdit);
DDX_Text(pDX, IDC_BOOKIDEDIT, m_bookIDEdit);
DDX_Text(pDX, IDC_BOOKNAMEEDIT, m_bookNameEdit);
DDX_Text(pDX, IDC_BOOKTYPEEDIT, m_bookTypeEdit);
DDX_Text(pDX, IDC_POSITIONEDIT, m_positionEdit);
DDX_Text(pDX, IDC_YEAREDIT, m_yearEdit);
DDX_Text(pDX, IDC_ISBNEDIT, m_ISBNEdit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddBookManage, CDialog)
//{{AFX_MSG_MAP(CAddBookManage)
ON_EN_KILLFOCUS(IDC_BOOKIDEDIT, OnKillfocusBookidedit)
ON_BN_CLICKED(IDC_ADDBUTTON, OnAddbutton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddBookManage message handlers
BOOL CAddBookManage::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
iFlag=0;
DBOpt.DBConnecte();
m_bookList.SetExtendedStyle(LVS_EX_GRIDLINES);
m_bookList.InsertColumn(0,"ISBN编号",LVCFMT_LEFT,120);
m_bookList.InsertColumn(1,"书名编号",LVCFMT_LEFT,120);
// m_bookList.InsertColumn(2,"年代",LVCFMT_LEFT,120);
// m_bookList.InsertColumn(3,"作者",LVCFMT_LEFT,120);
// m_bookList.InsertColumn(4,"类型",LVCFMT_LEFT,120);
// m_bookList.InsertColumn(5,"位置",LVCFMT_LEFT,120);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddBookManage::OnKillfocusBookidedit()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_bookList.DeleteAllItems();
CString strSQL;
m_bookIDEdit.TrimRight();
strSQL.Format("select * from booktype where ISBN_ID='"+m_bookIDEdit+"'");
DBOpt.BookTypeOperate(strSQL);
if (DBOpt.curItem==1)
{
m_bookNameEdit=DBOpt.strArrayOne.GetAt(0);
m_yearEdit=DBOpt.strArrayTwo.GetAt(0);
m_actorEdit=DBOpt.strArrayThree.GetAt(0);
m_bookTypeEdit=DBOpt.strArrayFour.GetAt(0);
// m_bookIDEdit=DBOpt.strArrayFive.GetAt(0);
iFlag=1;
m_ctrActorEdit.EnableWindow(FALSE);
m_ctrBookName.EnableWindow(FALSE);
m_ctrBookType.EnableWindow(FALSE);
m_ctrYear.EnableWindow(FALSE);
m_ctrPosition.EnableWindow(FALSE);
}
else
{
iFlag=0;
m_ctrActorEdit.EnableWindow(TRUE);
m_ctrBookName.EnableWindow(TRUE);
m_ctrBookType.EnableWindow(TRUE);
m_ctrYear.EnableWindow(TRUE);
m_ctrPosition.EnableWindow(TRUE);
m_bookNameEdit="";
m_yearEdit="";
m_actorEdit="";
m_bookTypeEdit="";
m_positionEdit="";
}
strSQL.Format("select * from bookid where ISBN_ID='"+m_bookIDEdit+"'");
DBOpt.ReadBookID(strSQL);
for(int i=0;i<DBOpt.curItem;i++)
{
m_bookList.InsertItem(i,DBOpt.strArrayTwo.GetAt(i)) ;
m_bookList.SetItemText(i,1,DBOpt.strArrayOne.GetAt(i));
}
strSQL.Format("select * from position where ISBN_ID='"+m_bookIDEdit+"'");
CString strAddress;
strAddress=DBOpt.ReadPosition(strSQL);
for( i=0;i<DBOpt.curItem;i++)
{
m_positionEdit=strAddress;
}
UpdateData(FALSE);
}
void CAddBookManage::OnAddbutton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSQL;
if (m_ISBNEdit.GetLength()<1||m_ISBNEdit.GetLength()>10)
{
MessageBox("图书编号为空或长度太长!");
return;
}
if (m_bookIDEdit.GetLength()<1||m_bookIDEdit.GetLength()>10)
{
MessageBox("ISBN编号为空或长度太长!");
return;
}
if(iFlag==0)
{
if (m_bookNameEdit.GetLength()<1||m_bookNameEdit.GetLength()>20)
{
MessageBox("书名为空或长度太长,请重新输入!");
return;
}
if (m_positionEdit.GetLength()<1||m_positionEdit.GetLength()>20)
{
MessageBox("书名为空或长度太长,请重新输入!");
return;
}
if (m_yearEdit.GetLength()>10||m_actorEdit.GetLength()>20||m_bookTypeEdit.GetLength()>20)
{
MessageBox("年代、作者、图书类型或方位长度太长,请重新输入!");
return;
}
strSQL.Format("insert into booktype(ISBN_ID,book_name,yeartime,actor,book_type,allnumber,lastnumber)values('%s','%s','%s','%s','%s','1','1')",m_bookIDEdit,m_bookNameEdit,m_yearEdit,m_actorEdit,m_bookTypeEdit);
DBOpt.ReaderTypeOperate(strSQL);
strSQL.Format("insert into position(ISBN_ID,book_position)values('%s','%s')",m_bookIDEdit,m_positionEdit);
DBOpt.ReaderTypeOperate(strSQL);
}
else
{
strSQL.Format("select * from bookid where book_id='%s'",m_ISBNEdit);
DBOpt.ReadBookID(strSQL);
if (DBOpt.curItem>0)
{
MessageBox("此书已经存在!");
return;
}
strSQL.Format("update booktype set allnumber=allnumber+1,lastnumber=lastnumber+1 where ISBN_ID='%s'",m_bookIDEdit);
DBOpt.ReaderTypeOperate(strSQL);
}
strSQL.Format("insert into bookid(ISBN_ID,book_id)values('%s','%s')",m_bookIDEdit,m_ISBNEdit);
DBOpt.ReaderTypeOperate(strSQL);
OnKillfocusBookidedit();
}
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// AddBookManage.h : header file
//
#include "DBOperate.h"
/////////////////////////////////////////////////////////////////////////////
// CAddBookManage dialog
class CAddBookManage : public CDialog
{// Construction
public:
CAddBookManage(CWnd* pParent = NULL); // standard constructor
CDBOperate DBOpt;
int iFlag;
// Dialog Data
//{{AFX_DATA(CAddBookManage)
enum { IDD = IDD_ADDBOOKDIALOG };
CEdit m_ctrPosition;
CEdit m_ctrYear;
CEdit m_ctrBookType;
CEdit m_ctrBookName;
CListCtrl m_bookList;
CEdit m_ctrBookIDEdit;
CEdit m_ctrActorEdit;
CString m_actorEdit;
CString m_bookIDEdit;
CString m_bookNameEdit;
CString m_bookTypeEdit;
CString m_positionEdit;
CString m_yearEdit;
CString m_ISBNEdit;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAddBookManage)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddBookManage)
virtual BOOL OnInitDialog();
afx_msg void OnKillfocusBookidedit();
afx_msg void OnAddbutton();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ADDBOOKMANAGE_H__CBF00BEE_87DD_4CD9_8B61_134915710C31__INCLUDED_)
#include "stdafx.h"
#include "LMSystem.h"
#include "AdminManage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdminManage dialog
CAdminManage::CAdminManage(CWnd* pParent /*=NULL*/)
: CDialog(CAdminManage::IDD, pParent)
{
//{{AFX_DATA_INIT(CAdminManage)
m_editPassward = _T("");
//}}AFX_DATA_INIT
}
void CAdminManage::DoDataExchange(CDataExchange* pDX)
{// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddBookManage)
virtual BOOL OnInitDialog();
afx_msg void OnKillfocusBookidedit();
afx_msg void OnAddbutton();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ADDBOOKMANAGE_H__CBF00BEE_87DD_4CD9_8B61_134915710C31__INCLUDED_)
#include "stdafx.h"
#include "LMSystem.h"
#include "AdminManage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdminManage dialog
CAdminManage::CAdminManage(CWnd* pParent /*=NULL*/)
: CDialog(CAdminManage::IDD, pParent)
{
//{{AFX_DATA_INIT(CAdminManage)
m_editPassward = _T("");
//}}AFX_DATA_INIT
}
void CAdminManage::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdminManage)
DDX_Text(pDX, IDC_EDITPASSWARD, m_editPassward);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAdminManage, CDialog)
//{{AFX_MSG_MAP(CAdminManage)
ON_BN_CLICKED(IDC_BTNOK, OnBtnok)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdminManage message handlers
void CAdminManage::OnBtnok()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_editPassward.GetLength()>10)
{
MessageBox("密码长度不能超过10个字符!");
return;
}
if (m_editPassward.GetLength()<=0)
{
MessageBox("密码不能为空!");
return;
}
CString strSQL;
strSQL.Format("update admin set passward='%s' where userid='%s'",m_editPassward,strID);
DBOpt.UpatePassward(strSQL);
CDialog::OnOK();
}
#if !defined(AFX_ADMINMANAGE_H__433F88A2_8B7D_4ED0_A537_1D4A2485C49B__INCLUDED_)
#define AFX_ADMINMANAGE_H__433F88A2_8B7D_4ED0_A537_1D4A2485C49B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// AdminManage.h : header file
//
#include "DBOperate.h"
/////////////////////////////////////////////////////////////////////////////
// CAdminManage dialog
class CAdminManage : public CDialog
{
// Construction
public:
CAdminManage(CWnd* pParent = NULL); // standard constructor
CDBOperate DBOpt;
CString strID;
// Dialog Data
//{{AFX_DATA(CAdminManage)
enum { IDD = IDD_ADMINMANAGE };
CString m_editPassward;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAdminManage)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAdminManage)
afx_msg void OnBtnok();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ADMINMANAGE_H__433F88A2_8B7D_4ED0_A537_1D4A2485C49B__INCLUDED_)
5.设计体会
计算机具有强大的功能,它现已应用于各行各业,在人们生活的各个领域起着非常重要的作用。它的高速运算能力极大的提高了工作效率,把人们从浩瀚的计算中解放出来,并且在高、尖的大型科学计算和大型信息处理及运算需求高的领域发挥着重要的作用。计算机在人们的日常生活中能帮助人们发送邮件,网上购物,远程学习,休闲娱乐,使人们的生活变得快捷方便,它推动了人类社会的发展与进步,对人类社会生产生活的各个领域产生了极其深刻的影响。正是因为计算机有这些强大的功能,学习计算机知识与计算机交流才显得尤为重要。因此学习VC++语言就显得更为重要,VC++语言作为国际上广泛流行的通用程序设计语言,在计算机的研究和应用中已展现出强大的生命力。VC++语言兼顾了诸多高级语言的特点。
通过此次图书管理系统的设计,使我对VC++程序设计有了深一步的了解,对系统设计及开发有了比较全面的思路。首先,通过对系统进行需求分析,确定各个功能函数;然后一个个具体地对他们进行编程,并且仔细检查看是否有错;在完成这一步之后才开始构造主函数,通过主函数把各个功能函数联系起来,编译修改错误和不足之处
在实际编程过程中会遇到很多不同的错误,有时候是一些很明显很细节的语法错误,这些可以通过编译来查找错误的所在,然而那些并不明显难以查找的隐性错误却真让人头痛。同时我翻阅了大量的书籍,也在网上查了很多资料。
总之,此次系统设计给我们提供了一个既动手又动脑、自学、独立实践的机会,使我们养成了勤翻阅各种相关资料的习惯,将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际、实践编程的能力,为今后的学习和实践打下了良好的基础。
6.参考文献
[1] 郑阿奇 visual c++实训 [M]. 北京:清华大学出版社,2005
[2] 韩存兵 visual c++数据库编程实战[M]. 北京: 科学出版社, 2003
[3] 原奕 visual c++实践与提高[M]. 北京: 中国铁道出版社, 2006
[4] 求是科技 visual c++数据库通用模块及典型系统开发[M]. 北京: 人民邮电出版社, 2006
合同管理制度
1 范围
本标准规定了龙腾公司合同管理工作的管理机构、职责、合同的授权委托、洽谈、承办、会签、订阅、履行和变更、终止及争议处理和合同管理的处罚、奖励;
本标准适用于龙腾公司项目建设期间的各类合同管理工作,厂内各类合同的管理,厂内所属各具法人资格的部门,参照本标准执行。
2 规范性引用
《中华人民共和国合同法》
《龙腾公司合同管理办法》
3 定义、符号、缩略语
无
4 职责
4.1 总经理:龙腾公司经营管理的法定代表人。负责对厂内各类合同管理工作实行统一领导。以法人代表名义或授权委托他人签订各类合法合同,并对电厂负责。
4.2 工程部:是发电厂建设施工安装等工程合同签订管理部门;负责签订管理基建、安装、人工技术的工程合同。
4.3 经营部:是合同签订管理部门,负责管理设备、材料、物资的订购合同。
4.5 合同管理部门履行以下职责:
4.5.1 建立健全合同管理办法并逐步完善规范;
4.5.2 参与合同的洽谈、起草、审查、签约、变更、解除以及合同的签证、公证、调解、诉讼等活动,全程跟踪和检查合同的履行质量;
4.5.3 审查、登记合同对方单位代表资格及单位资质,包括营业执照、经营范围、技术装备、信誉、越区域经营许可等证件及履约能力(必要时要求对方提供担保),检查合同的履行情况;
4.5.4 保管法人代表授权委托书、合同专用章,并按编号归口使用;
4.5.5 建立合同管理台帐,对合同文本资料进行编号统计管理;
4.5.6 组织对法规、制度的学习和贯彻执行,定期向有关领导和部门报告工作;
4.5.7 在总经理领导下,做好合同管理的其他工作,
4.6 工程技术部:专职合同管理员及材料、燃料供应部兼职合同管理员履行以下职责:
4.6.1 在主任领导下,做好本部门负责的各项合同的管理工作,负责保管“法人授权委托书”;
4.6.2 签订合同时,检查对方的有关证件,对合同文本内容依照法规进行检查,检查合同标的数量、金额、日期、地点、质量要求、安全责任、违约责任是否明确,并提出补充及修改意见。重大问题应及时向有关领导报告,提出解决方案;
4.6.3 对专业对口的合同统一编号、登记、建立台帐,分类整理归档。对合同承办部门提供相关法规咨询和日常协作服务工作;
4.6.4 工程技术部专职合同管理员负责收集整理各类合同,建立合同统计台帐,并负责
沈 阳 大 学
展开阅读全文