资源描述
目录
第一章 概述 2
1.1 开发目的 2
1.2 功能需求 2
第二章 需求分析 3
2.1 数据需求 3
2.2 数据字典 3
第三章 数据库设计 5
3.1 概念结构设计 5
3.2 逻辑结构设计 5
3.3 物理结构设计 6
第四章 应用系统设计 9
4.1概要设计 9
4.2详细设计 10
4.3系统测试 14
第五章 设计小结 18
第一章 概述
1.1 开发目的
为了进一步加强对宾馆宾客及工作人员的管理,规范宾馆行为, 减少主管部门和企业的工作量,提高工作效率,特开发此系统。
1.2 功能需求
1)使用系统的管理部门人员:
a.信息要求:
能够了解宾馆的实时信息,可以查询所有的宾馆信息,并按要求管理和处理宾馆信息。
b.处理要求:
主管部门根据自身的权限,对所在辖区的位置进行管理,并能查看所在辖区的宾馆信息,有权给宾馆信息反馈,警告。
c.安全性
安全性要求:
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如总经理,管理员等。
2)宾馆:
a.信息要求:
能够填写和查看自身宾馆的信息,上报后,能查看自身信息的状态,并能修改。
b.处理要求:
当宾馆信息初次填写,和审批通过或为审批通过,则可以修改自身信息。
第二章 需求分析
2.1 数据需求
宾馆客房管理系统就是对宾客及负责员工信息的管理
1) 能够通过键盘登记客人入住信息(房号、客人姓名、入住时间、入住期限、入住押金、每日租金、客房等级、单/双/三人间)
2) 给定员工姓名,显示本员工所管理的楼层客房信息(经济、标间、豪华、单/双/三人间的入住情况(包括空闲/已入住/入住客人姓名)
3) 给定入住客人姓名,显示其入住情况(房号、姓名、已交押金、入住费用累计,入住结算)
4) 给定房号,修改押金数目(实现添加的数目和以往的数目累加)
2.2 数据字典
该系统的房间数据主要是描述房间管理中存储的所有房间信息(包括所有房间查询的所需信息),起数据字典如下表所示:
属性名
存储代码
类型
长度
房间号
RNum
char
10
房间级别
Rlevel
char
4
房间类型
RType
char
6
该系统的员工数据主要是描述员工信息组成,其数据字典如下表所示:
属性名
存储代码
类型
长度
员工姓名
EName
char
20
员工牌号
EName
char
10
所管理的楼层号
EFloor
Int
\
员工职务
EBusiness
char
10
该系统的宾客数据字典如下表所示:
属性名
存储代码
类型
长度
入住房间号
RNum
Char
10
客人姓名
GName
chat
20
入住时间
GCheckintime
Char
10
入住期限
GCheckinterm
int
\
每日租金
GEverdayRENT
int
\
入住押金
GCheckinForegift
int
\
楼层号
GFloorNum
Int
\
该系统的系统数据主要是用来描述宾馆住房情况的信息,其数据字典如下表所示:
属性名
存储代码
类型
长度
楼层总数
SFloorSUM
int
\
每层房间数
SFreeNum
Int
\
空闲数量
SFreeNum
Int
\
入住数量
SCheckinNum
Int
\
第三章 数据库设计(江亚波)
3.1 概念结构设计
E-R图:
所管理的楼层号
入住时间
员工牌号
入住期限
客人姓名
员工姓名
员工
管理
入住押金
宾客
日租金
空闲数量
楼层号
员工职务
房间号码
入住数量
豪华间日租金
标准房日租金
房间等级
房间
经济房日租金
房间类型
入住数量
系统信息
空闲数量
楼层总数
每层房间数量
3.2 逻辑结构设计
该设计以概念结构设计中的E-R图为主要依据,设计出相关的整体逻辑结构。根据总E-R图了解有四个实体,四个关系模式如下:
员工表(员工名,员工牌号,所管理楼层,员工职务,入住数量,空闲数量)
宾客表(宾客姓名,入住时间,入住期限,日租金,入住押金,楼层号,房间号码)
房间表(房间号,房间类型,房间等级)
系统表(经济房日租金,标准房日租金,豪华间日租金,入住数量,空闲数量,每层房间数量,楼层总数)
3.3 物理结构设计
a. 创建课程信息表的语句为:
CREATE TABLE Employee(
EName CHAR(20) NOT NULL, --员工姓名
ENum CHAR(10) NOT NULL, --员工牌号
EFloorNum INT NOT NULL, --所管理的楼层号
EBusiness CHAR(10) NOT NULL, --员工职务
--ECheckinNum INT DEFAULT 0, --入住数量
--EFreeNum INT NOT NULL, --空闲数量
CONSTRAINT pk_ENum PRIMARY KEY(ENum),
CONSTRAINT ck_EBusiness CHECK( EBusiness IN('楼层管理员','客房领班') ),
--add in program CONSTRAINT ck_ECheckinNum CHECK( ECheckinNum >= 0 ),
--add in program CONSTRAINT ck_EFreeNum CHECK( EFreeNum >= 0 ),
);
输入数据后,效果如下图:
b.创建宾客信息表的语句为:
CREATE TABLE Guest(
RNum varchar(10), --房间号码
GName CHAR(20) NOT NULL, --客人姓名
GCheckinTime DATE DEFAULT(GETDATE()), --入住时间
GCheckinTerm DATE DEFAULT(GETDATE()), --入住期限
GEverydayRent INT DEFAULT 0, --每日租金
GCheckinForegift INT DEFAULT 0, --入住押金
GFloorNum INT, --楼层号
PRIMARY KEY(RNum),
FOREIGN KEY(RNum) REFERENCES Room(RNum)
ON DELETE CASCADE
ON UPDATE CASCADE,
);
输入数据后,结果如下图所示:
c.创建房间信息表的语句为:
CREATE TABLE Room(
RNum varchar(10), --房间号码
RLevel CHAR(4) NOT NULL DEFAULT '标间', --房间等级:经济 标间 豪华
RType CHAR(6) NOT NULL DEFAULT '双人间', --房间类型:单人间 双人间 三人间
CONSTRAINT pk_RNum PRIMARY KEY(RNum),
CONSTRAINT ck_RLevel CHECK( RLevel IN('经济','标间','豪华') ),
CONSTRAINT ck_RType CHECK( RType IN('单人间','双人间','三人间') )
);
输入数据后,效果如下图所示:
d.创建系统信息表的语句为:
CREATE TABLE SystemInfo(
SFloorSum INT PRIMARY KEY, --楼层总数
SRSumEachF INT NOT NULL, --每层房间数量
SFreeNum INT NOT NULL, --空闲数量
SCheckinNum INT DEFAULT 0, --入住数量
SEachDRentEco INT DEFAULT 50, --each day rent for economy level
SEachDRentSta INT DEFAULT 80, --each day rent for standard level
SEachDRentLux INT DEFAULT 150, --each day rent for luxury level
CONSTRAINT SFloorSum CHECK( SFloorSum > 0 ),
CONSTRAINT SRSumEachF CHECK( SRSumEachF > 0 ),
CONSTRAINT ck_SCheckinNum CHECK( SCheckinNum >= 0 ),
CONSTRAINT ck_SFreeNum CHECK( SFreeNum >= 0 ),
CONSTRAINT ck_SEachDRentEco CHECK( SEachDRentEco > 0 ),
CONSTRAINT ck_SEachDRentSta CHECK( SEachDRentSta > 0 ),
CONSTRAINT ck_SEachDRentLux CHECK( SEachDRentLux > 0 )
);
输入数据后,效果如下图所示:
第四章 应用系统设计(刘涛)
4.1概要设计
输入: 程序正常运行后,屏幕上显示一个文字菜单(根据序号选定相应的操作项目),当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。
输出: 1) 应用程序正常运行后,要在屏幕上显示一个文字菜单
2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等
系统功能模块图:
COpBase类——数据库操作
CBaCombox类——combox控件的基本操作
CDeCCHead类——主窗口的combox控件操作
CDeCCAdd类——[增加...]选项的combox控件操作
CEmployee类——员工操作
CGuest类——宾客与房间操作
4.2详细设计
1)数据库操作:
class COpBase{
public:
bool ConnectDatabase();
void OpenRecordSet( const string &str );
void CloseRecordSet();
void CloseDatabase();
void Execute( const char *ch );
~COpBase(){}
protected:
_ConnectionPtr _pConnection;//建立Connection对象的指针
_RecordsetPtr _pRecordset;
};
//////////////////////////////////////////////////////////////////////////
class CEmployee: public COpBase{
public:
void InitSysInfo();
void InitEmployee();
void ClearEmployee();
void SetEmployeeInfo( const string &str, int i ){ _employee[i] = str; }
void AddEmployee( HWND );
void AmendEmployee();
// TABLE SystemInfo operation
void SaveSysInfo();
void SetSysInfo();
void IncSysInfo();
void DecSysInfo();
int GetSysInfo( int i ){ return _system[i]; }
// search string
void SetSearchStr( const string &str ){ _SearchStr = str; }
void SetSearchIndex( const int &Search ){ _SearchIndex = Search; }
size_t GetcolumnSize(){ return _columnSet.size(); }
vector<string>& GetColumnSet(){ return _columnSet; }
typedef map<int,vector<_variant_t> > Map_IVal;
typedef map<int,vector<_variant_t> >::value_type Map_IVal_ValType;
typedef vector< vector<_variant_t> * > VecVec_Var;
VecVec_Var& EdataSet(){ return _EdataSet; }
Map_IVal& EdataSetAd(){ return _EdataSetAd; }
Map_IVal& EdataSetFm(){ return _EdataSetFm; }
size_t GetdataSetSize(){ return _EdataSet.size(); }
void DisplayE( CListView &ListView );
protected:
string PLoadSQLstrE();
// index of combo box HEAD_CC_SEARCH
int _SearchIndex;
// search string
string _SearchStr;
// System information
// 0:_SFloorSum(maximum room number)、1:_SRSumEachF(the number of floor)
// 2:_SFreeNum(the number of free rooms)、3:_SCheckinNum(the number of checking in )
// 4:_SEachDRentEco、5:_SEachDRentSta、6:_SEachDRentLux
static const int NSysSize = 7;
int _system[NSysSize];
// key: floor number
// value: dataset
Map_IVal _EdataSetAd; // 楼层管理员
Map_IVal _EdataSetFm; // 客房领班(guest room foreman)
vector< vector<_variant_t> * > _EdataSet;
// employee information
// 0:_EName、1:_ENum、2:_EFloorNum、3:_EBusiness、4:_ECheckinNum、5:_EFreeNum
static const int N = 6;
string _employee[N];
vector<string> _columnSet;
};
//////////////////////////////////////////////////////////////////////////
class CGuest: public CEmployee{
public:
// operate to database
void AddGuest( HWND hwnd, HWND hwndHead, CDeCCAdd &cbAdd );
void InitGuest();
void ClearGuest(){ _dataSet.clear(); }
void SetRoomInfo( const string &str, int i ){ _room[i] = str; }
void SetGuestInfo( const string &str, int i ){ _guest[i] = str; }
size_t GetdataSize(){ return _dataSet.size(); }
vector< vector<_variant_t> >& dataSet(){ return _dataSet; }
void DisplayG( CListView &ListView );
// set detail information
void SetDetInfoG( HWND hwnd, int index );
// set detail information to database
void SetDBDetInfoG( HWND hwnd, int index );
void DelCurGuest( HWND, CDeCCAdd& );
void DelDBGuest( HWND );
~CGuest(){}
private:
string PLoadSQLstring();
void PCreateDataSet();
// guest information
// 0:_GName、1:_GCheckinTime、2:_GEverydayRent
// 3:_GCheckinForegift、4:_GFloorNum
static const int sciGuestN = 5;
string _guest[sciGuestN];
// room information
// 0:_RNum、1:_RLevel、2:_RType
static const int sciRoomN = 3;
string _room[sciRoomN];
vector< vector<_variant_t> > _dataSet;
};
2)combobox控件操作:
class CBaCombobox{
public:
CBaCombobox( HWND hwndParent, CGuest &data, int baseIndex ):
_hwndParent(hwndParent),_data(data), _baseIndex(baseIndex){}
void Clear( int baseIndex, int num );
/*virtual ~CBaCombobox() = 0;*/
protected:
HWND _hwndParent;
CGuest &_data;
// store the first address of the sequence of the Combo Box IDs
int _baseIndex;
};
class CDeCCHead: public CBaCombobox{
public:
CDeCCHead( HWND hwndParent, CGuest &data, int baseIndex ):
CBaCombobox(hwndParent, data, baseIndex){}
void SetGuest();
void SetEmployee();
void SetRoom();
// update combo box information
bool UpadateCBInfo();
bool UpadateCBEmployee();
/*~CDeCCHead(){}*/
private:
void PSetGuestRoom();
};
class CDeCCAdd: public CBaCombobox{
public:
CDeCCAdd( HWND hwndParent, CGuest &data, int baseIndex ):
CBaCombobox(hwndParent, data, baseIndex){}
void SetGuest();
void SetEmployee();
void SetRoom();
void ClearGuest();
void Init();
void SethwndParent( HWND hwndParent ){ _hwndParent = hwndParent; }
void IncFRoom( int floor, int room );
void DecFRoom( int floor, int room );
void TestEmployee( int );
void SetCurGuest();
void SetType();
/*virtual ~CDeCCAdd(){}*/
private:
void PAssitGuest( int rtype, int level, int floor );
vector< vector<bool> > _FreeRoom;
vector< int > _FRoomEachF; // free rooms each floor
};
4.3系统部分功能测试
1) 登陆界面如下:
2) 运行界面:
2.1)文件——>添加
2.1.1)添加顾客
2.1.2)添加员工
2.2)帮助——>关于:
第五章 设计小结
1. 在开发一个系统时,前期的分析准备工作非常的重要。对于系统的需求要明确,这样才能做到有的放矢。特别是对于系统中数据的存储和重要算法的设计,设计的不好会出现大量的冗余,不仅浪费存储空间,还影响查询效率。
2.在设计的初期,对一个功能模块的设计,要想出两种或两种以上方案,这样可以进行比较,从而获得更佳的设计方案,设计开发过程中一定要吸取经验教训,避免返工。尤其是一些重要算法或功能。在对具体实现功能模块进行编程时,要养成良好的加注释的习惯,这样的话不仅能理清思路,而且可以为以后的调试带来很大的方便。
3. 懂得充分利用网络资源,因为实地调研的时间是非常有限的,所以需求分析中大部分分析结构都是在我阅读专业书籍,网络资料后得出的。
参考文献:
[1] 卢湘江,李向荣,晏子. MySQL高级配置和管理. 北京:清华大学出版社,
[2] 萨师煊,王珊. 数据库系统概论. 北京:高等教育出版社
[3] 张海藩. 软件工程. 北京:人民邮电出版社,
[4]孙明丽,王斌.sql server 2005 数据库系统开发.北京,人民邮电出版社
[5]苗雪兰.数据库系统原理及应用教程[M].北京,机械工业出版社.
[6] Scott Meyers, Effective C++ Third Edition. Addison Wesley Professional
[7] Charles Petzold, Programming Windows.
数据库原理课程设计
宾馆客房管理系统
系 、 部:计算机与信息科学系
学生姓名: 江 亚 波
学 号: 09301040328
合作伙伴: 刘 涛
专 业: 计算机科学与技术
班 级: 计本0903班
完成时间: 2011.12.25
展开阅读全文