酒店管理系统C# + sql server数据库

  1. 概述

课程设计选题:酒店管理系统。项目背景:旅游业现在发展的越来越好,大家出去旅游难免在陌生的城市需要一个落脚点,这就促进了酒店业的发展。做一个酒店管理系统,方便快捷的为游客安排入住和退房。课程设计报告编写目的:介绍开发的产品,让人读了课程设计报告就能了解产品的概况,不局限于懂代码的人。课程设计报告的组织:完整程序设计流程报告。开发环境:Microsoft SQL Server 2017、Visual Studio 2017。用C#和sql server实现了酒店管理系统。

  1. 课程设计任务的需求分析
    1. 设计任务

酒店需要一个客房信息管理系统对旅客住宿情况进行管理。系统需要维护所有客房的详细信息,登记入住旅客信息,并实现各种相关的查询、统计功能。

    1. 设计要求

酒店管理系统按照教学大纲要求,完成基本的数据管理功能。实现客房状态查询,旅客入住、旅客退房、退房结算、统计今日收益等功能。每间客房可以按类型人住多位旅客,每位旅客信息都要登记;旅客可以多次入住酒店的不同客房,每次入住需要预付定金、登记入住时间、房号,离开时登记退房时间,并进行结账。系统应提供丰富灵活的查询和统计功能。

    1. 需求描述的规范文档

随着计算机的普及、网络信息技术的发展,电子商务模式已渐入各行各业,它改变了许多行业传统的经营模式。这同样也为酒店业提供了新的竞争手段。为酒店的管理现代化、智能化、信息化 起到了不可或缺的作用。通过本系统软件,能帮助酒店管理人员利用计算机,快速方便记录酒店客人的信息,提供查询等一系列简单的工作,它能让工作人员从烦琐的手工操作中解脱,并且酒店管理系统本身就代表着一种管理方法。

  1. 概念结构设计
    1. 概念结构设计工具(E-R模型)

用Visio建立E-R模型,系统设计的数据有:客房:房号、面积、类型、租金等。旅客:身份证、姓名、性别、年龄、电话等。

酒店管理系统C# + sql server数据库_第1张图片

  1. 逻辑结构设计
    1. 关系数据模式

酒店管理系统C# + sql server数据库_第2张图片

根据概念设计的结果,将其转换为关系模型:

酒店系统管理人员(账号,密码)

当日入住人数(入住日期,人数)

当日收入(退房日期,金额)

酒店客房(房号,面积,类型,租金,是否租用)

当前旅客(订单随机号,房号,姓名,身份证,性别,年龄,手机,是否单独一人)

历史订单(订单随机号,房号,姓名,身份证,性别,年龄,手机,入住时间,退房时间,总租金,是否单独一人)

    1. 视图的设计

自顶向下。从抽象级别高的且普遍的对象开始逐步细化、具体化与特殊化。由底向上。由具体的对象开始,逐步抽象,普遍化与一般化,最后形成一个完整的视图设计。由内向外。从最基本的与最明显的对象入手,逐步扩充至非基本、不明显的其他对象。

    1. 优化

按需索取字段,跟select*说拜拜、字段名和表名修改规范,注意大小写、适当使用过渡表、删除原有where条件中做函数计算、尽量将多条SQL语句压缩到一句SQL中、使用表的别名。

  1. 数据库物理设计与实施
    1. 数据库应用的硬件、软件环境介绍

数据库在Windows10下的Microsoft SQL Server 2017下建立的。Windows 10是美国微软公司研发的跨平台及设备应用的操作系统。是微软发布的最后一个独立Windows版本。 Windows 10共有7个发行版本,分别面向不同用户和设备。SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNIX操作系统上的应用。

    1. 物理结构设计

创建四张表Hoteluser、Guestroom、Passenger、Keepmessage。

管理员表

Hoteluser表的创建

CREATE TABLE Hoteluser

(

username nchar(10) PRIMARY KEY NOT NULL,

password nchar(10) NOT NULL,

)

酒店管理系统C# + sql server数据库_第3张图片

客房表

Guestroom表的创建

CREATE TABLE Guestroom

(

roomnumber nchar(10) PRIMARY KEY NOT NULL,

area nchar(10) NOT NULL,

type nchar(10) NOT NULL,

rent nchar(10) NOT NULL,

lease nchar(10) NOT NULL,

)

酒店管理系统C# + sql server数据库_第4张图片

当前房客表

Passenger表的创建

CREATE TABLE Passenger

(

roomnumber nchar(10) NOT NULL,

name nchar(10) NOT NULL,

id nchar(20) NOT NULL,

sex nchar(10) NOT NULL,

age nchar(10) NOT NULL,

phone nchar(20) NOT NULL,

randno nchar(20) PRIMARY KEY NOT NULL,

deposit nchar(10),

)

酒店管理系统C# + sql server数据库_第5张图片

当日入住人数表

Daypc表的创建

CREATE TABLE Daypc

(

indata nchar(20) NOT NULL,

peoplecount nchar(10) NOT NULL,

)

酒店管理系统C# + sql server数据库_第6张图片

当日收入表

Daymoney表的创建

CREATE TABLE Daymoney

(

outdata nchar(20) NOT NULL,

allmoney nchar(10) NOT NULL,

)

历史记录表

Keepmessage表的创建

CREATE TABLE Keepmessage

(

roomnumber nchar(10) NOT NULL,

name nchar(10) NOT NULL,

id nchar(20) NOT NULL,

sex nchar(10) NOT NULL,

age nchar(10) NOT NULL,

phone nchar(20) NOT NULL,

indate nchar(20) NOT NULL,

intime nchar(20) NOT NULL,

outdate nchar(20),

outtime nchar(20),

allrent nchar(10),

randno nchar(20) NOT NULL,

together nchar(10) NOT NULL,

)

酒店管理系统C# + sql server数据库_第7张图片

    1. 索引的设计

选择的唯一性,提高查询的效率、为经常需要排序,分组和联合操作的字段建立索引、为常作为where查询条的字段建立索引、从数据搜索实现的角度来看,索引也是另外一类文件/记录,它包含着可以指示出相关数据记录的各种记录。其中,每一索引都有一个相对应的搜索码,字符段的任意一个子集都能够形成一个搜索码。这样,索引就相当于所有数据目录项的一个集合,它能为既定的搜索码值的所有数据目录项提供定位所需的各种有效支持。

    1. 建立数据库

create database Hotel; 酒店管理系统C# + sql server数据库_第8张图片

    1. 加载测试数据

四张表Hoteluser、Guestroom、Passenger、Keepmessage,分别添加测试数据。

Hoteluser的测试数据

酒店管理系统C# + sql server数据库_第9张图片

Guestroom的测试数据

酒店管理系统C# + sql server数据库_第10张图片

Passenger的测试数据

酒店管理系统C# + sql server数据库_第11张图片

Keepmessage的测试数据

酒店管理系统C# + sql server数据库_第12张图片

  1. 数据操作要求及实现

酒店管理系统C# + sql server数据库_第13张图片

登录页面,连接数据库实现对账号、密码验证"select * from Hoteluser where username='" + username.Text.Trim() + "' and password='" + password.Text.Trim() + "'"

若用户名不存在或密码错误登录失败提示

酒店管理系统C# + sql server数据库_第14张图片

若账户密码正确则跳转窗口到酒店管理窗口

酒店管理系统C# + sql server数据库_第15张图片

酒店管理系统,"select * from Guestroom"是通过访问数据库获取客房信息动态增加按钮来表示房间,无需修改软件代码,只需要修改数据库就可以实现客房的增删改查。通过每个房间的lease列来判断目前房间是否有人入住,无则用绿色表示,有则用红色表示。用控件TabPage来对房间的类型type进行分类。并统计当天退房的客人的租金来计算今日收入。

酒店管理系统C# + sql server数据库_第16张图片

点击任意一个按钮则进入对每个客房的旅客信息进行入住、修改、退房等操作。"select rent,lease from Guestroom where roomnumber='" + rn + "'"入住时获取一天的租金和是否已有人入住,来作为押金和避免一个房间多个人住多收钱的情况。"Update Guestroom set lease='" + YN + "' where roomnumber ='"+rn+"'"更新房间入住情况用按钮颜色来表示。"insert into Passenger(roomnumber,name,id,sex,age,phone,randno,deposit) values ('"+rn+ "','" + name + "','" + id + "','" + sex + "','" + age + "','" + phone + "','" + no + "','" + deposit + "')"同时在Passenger和Keepmessage表中增加旅客信息。"insert into Keepmessage(roomnumber,name,id,sex,age,phone,indate,intime,randno,together) values ('" + rn + "','" + name + "','" + id + "','" + sex + "','" + age + "','" + phone + "','" + indate + "','" + intime + "','" + no + "','" + to + "')"。修改旅客信息则也是修改Passenger和Keepmessage两张表"Update Keepmessage set roomnumber='" + rn + "',name='" + name + "',id='" + id + "',sex='" + sex + "',age='" + age + "',phone='" + phone + "'where randno='" + no + "'"、"Update Passenger set roomnumber='" + rn + "',name='" + name + "',id='" + id + "',sex='" + sex + "',age='" + age + "',phone='" + phone + "'where randno='" + no + "'"。退房时获取了当前时间和入住时间,计算天数最后得到总租金与客户结算。即修改表Keppmessage和删除表Passenger中的行"Update Keepmessage set outdate='" + outdate + "',outtime='" + outtime + "',allrent='" + allrent + "' Where randno = '" + randno + "'"、"Delete Passenger where roomnumber='" + rn + "'"。

酒店管理系统C# + sql server数据库_第17张图片

进入查询统计界面,显示所有客房信息、和历史入住信息。并根据不同条件对历史入住信息进行筛选,SQL语句就不一一列举了,还可以统计营业至今总营业额。

酒店管理系统C# + sql server数据库_第18张图片

  1. 源代码及查询截图
    1. 程序流程图

酒店管理系统C# + sql server数据库_第19张图片

酒店管理系统C# + sql server数据库_第20张图片

    1. 数据库链接方法

链接数据库:

public static SqlConnection My_Conn;  public static string openConnstr = "server=HPH;Database=Hotel;uid=hph1998;pwd=hph1998";

public static SqlConnection getcon()

        {

            My_Conn = new SqlConnection(openConnstr);

            My_Conn.Open();

            return My_Conn;

        }

关闭链接:

        public void conn_close()

        {

            if (My_Conn.State == ConnectionState.Open)

            {

                My_Conn.Close();

                My_Conn.Dispose();

            }

        }

  1. 收获、体会和建议

完成数据库课程设计的过程还是很艰辛的,开学初才收到学委通知有这个课程设计,只能用课余时间挤出来完成。之前学习过数据库sql server、Java高级应用开发mysql、目前在学习oracle,选择按文档要求用sql server保存后台数据。前台可以选择已经学习的Java或正在学习的C#,最后选择用C#写前台,因为对C#可视窗口比较感兴趣,Java学习一般都使用控制台操作。最后完成数据库课程设计是边巩固了数据库所学的sql语句,边预习研究C#。在编写代码的过程中,有时候会遇到很多困难,比如知识的遗忘,这促使自己又从头拿起课本,重新复习。由于作业具有一定的难度,所有自己耗费的时间也比较长,有时候会觉得很累,但是自己还是克服过来了,同时自己也渐渐养成了自主解决问题能力。收获也很多,让我对自己日后的方向有个定位,想走后端必须要学好数据库。通过这次课程设计,也使我更加认识到自己编程能力的不足,我将继续学习,提高自己编程的水平。这次数据库课程设计需要进行需求分析等,是目前软件工程刚学的,学会了对表的一些操作,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,这是我大学期间做过的最完整的一次课程设计,相信可以为后面毕业设计打下基础。

  1. 主要参考文献

1、《数据库系统概论》(第5版) 萨师煊、王珊编著;清华大学出版社

2、《C#程序设计及应用教程》(第3版);马俊著;人民邮电出版社

 

源码在github哦https://github.com/Hph1998/HotelManagement

你可能感兴趣的:(酒店管理系统C# + sql server数据库)