宾馆管理系统 数据库课程设计报告
CREATE TABLE [dbo].[roomtype] ( [typeid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [typename] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [area] [float] NULL , [bednum] [int] NULL , [haircondition] [bit], [htelephone] [bit], [htelevision] [bit], [htoilet] [bit],
[price] [float] NULL
) ON [PRIMARY]
(3) 客房信息表 rooms (客房编号,客房种类,客房位置,单价,是
否被预定,备注信息)
CREATE TABLE [dbo].[rooms] ( [roomNO] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [roomtype] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [roomposition] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL , [roomprice] [float] NULL , [putup] [bit],
[roommemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
(4) 订房信息表 bookin (客房编号,顾客身份证号码,订房编号,
顾客姓名,入住日期,折扣,备注,结算日期,金额)
CREATE TABLE [dbo].[bookin] ( [bookno] [varchar] (14) COLLATE Chinese_PRC_CI_AS NOT NULL , [customname] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [customID] [varchar] (18) COLLATE Chinese_PRC_CI_AS NOT NULL , [roomno] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [indate] [datetime] NULL , [discount] [float] NULL ,
[inmemo] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[checkdate] [datetime] NULL ,
21
宾馆管理系统 数据库课程设计报告
[ammount] [float] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
2.5.3 数据库完整性设计 2.5.3.1 主键及唯一性索引
A.用户表:将该表的属性用户名设置为主键。
B.客房标准信息表:将该表的属性标准编号设置为主键。 C. 客房信息表:将该表的属性客房编号设置为主键。
D. 订房信息表:将该表的属性(客房编号,顾客身份证号码)设置为主键。 附:唯一性索引的设计已经在前面数据库物理结构设计中的存取方法设计中详细说明。 2.5.3.2 参照完整性设计
A.客房信息表:该表中属性客房种类参照客房标准信息表中的标准编号。 B.订房信息表:该表中的客房编号参照客房信息表中的客房编号。 2.5.3.3 关系表
三. 系统实现
1. 系统各功能模块的实现
1.1系统用户管理模块的实现
BOOL CLoginDLG::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here
22
宾馆管理系统 数据库课程设计报告
((CEdit*)GetDlgItem(IDC_LOGIN_USER))->SetLimitText(15); ((CEdit*)GetDlgItem(IDC_LOGIN_PWD))->SetLimitText(10); // Set Caption Font //CFont m_Font;
m_fMyFont.CreatePointFont(180,\华文彩云\
((CStatic *)GetDlgItem(IDC_LOGIN_CAPTION))->SetFont(&m_fMyFont, true);; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CLoginDLG::OnOK() { // TODO: Add extra validation here // Check UserName Vadilaty UpdateData(true); m_sUSER.TrimRight(\ if ( \ { AfxMessageBox(_T(\请填写用户名\
return; } _variant_t Holder, strQuery;
strQuery = \ theApp.ADOExecute(theApp.m_pADOSet, strQuery); int iCount = theApp.m_pADOSet->GetRecordCount(); if ( 0==iCount ) { theApp.m_iLoginCount++; if ( theApp.m_iLoginCount>2 ) { AfxMessageBox(\没有这个用户\\n三次输入均不正确,请核对后再来\MB_ICONEXCLAMATION); CDialog::OnCancel(); return; } AfxMessageBox(\没有这个用户,请重新输入用户名\
return; }
CString sPWD;
theApp.m_pADOSet->MoveFirst();
Holder = theApp.m_pADOSet->GetCollect(\sPWD = Holder.vt==VT_NULL?\if ( 0!=sPWD.Compare(m_sPWD) ) { theApp.m_iLoginCount++;
23
宾馆管理系统 数据库课程设计报告
if ( theApp.m_iLoginCount>2 ) { AfxMessageBox(\输入密码不正确\\n三次输入均不正确,请核对后再来\
MB_ICONEXCLAMATION);
CDialog::OnCancel(); return; } AfxMessageBox(\输入密码不正确,请重新输入\ return; }
// Get Login User
theApp.m_sCurrentUser = m_sUSER; CDialog::OnOK();
}
1.2 客房标准管理模块的实现
BOOL CRoomTypeDLG::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here // Init Edit Text limit
((CEdit*)GetDlgItem(IDC_ROOMTYPE_ID))->SetLimitText(50); ((CEdit*)GetDlgItem(IDC_ROOMTYPE_NAME))->SetLimitText(50); ((CEdit*)GetDlgItem(IDC_ROOMTYPE_AREA))->SetLimitText(5); ((CEdit*)GetDlgItem(IDC_ROOMTYPE_BEDNO))->SetLimitText(2); ((CEdit*)GetDlgItem(IDC_ROOMTYPE_PRICE))->SetLimitText(9); if (m_bAppend) { // Update Dialog Caption SetWindowText(_T(\添加客房标准\ // Init Combobox ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISAIRCON))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTEL))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTV))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTOILET))->SetCurSel(1); } else {
// Update Dialog Caption SetWindowText(_T(\修改客房标准\ // Disable ID and Name Edit
GetDlgItem(IDC_ROOMTYPE_ID)->EnableWindow(false); GetDlgItem(IDC_ROOMTYPE_NAME)->EnableWindow(false);
// Init Combobox
24
宾馆管理系统 数据库课程设计报告
if (m_bAirCon) ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISAIRCON))->SetCurSel(1); else ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISAIRCON))->SetCurSel(0); if (m_bTel) ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTEL))->SetCurSel(1); else ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTEL))->SetCurSel(0);
if (m_bTV) ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTV))->SetCurSel(1); else ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTV))->SetCurSel(0); if (m_bToilet) ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTOILET))->SetCurSel(1); else ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTOILET))->SetCurSel(0); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CRoomTypeDLG::OnOK() { // TODO: Add extra validation here UpdateData(true); m_sTypeID.TrimRight(\ m_sTypeName.TrimRight(\ m_sArea.TrimRight(\ m_sBedNo.TrimRight(\ m_sPrice.TrimRight(\ // Make sure all needed info is available CString sWarning=\ if ( \标准编号\
else if ( \标准名称\ else if ( \客房面积\ else if ( \床位数量\ else if ( \住房单价\ if ( \ {
sWarning += _T(\不能为空\
AfxMessageBox(sWarning, MB_ICONEXCLAMATION); return; } // Make sure the Number info is valid float fArea = atof(m_sArea); if ( 0==fArea ) { AfxMessageBox(_T(\客房面积:请输入非零数字\ return; }
m_sArea.Format(\ float fPrice = atof(m_sPrice);
if ( 0==fPrice )
25