IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C课设/宾馆客房管理系统/内附源码 -> 正文阅读

[C++知识库]C课设/宾馆客房管理系统/内附源码

C课设/宾馆客房管理系统/内附源码/数组实现

//你错过的,别人才会得到,正如你得到的,正是别人错过的。

两周的C语言课程设计结束了,课设是对一个程序从刚开始的构思到最后的编写代码调试代码的一个过程。完整的做出一个产品的雏形,锻炼编程实战能力,体现对学习C的实战运用。

下面是我对此次课设过程的经验分享,以及代码的开源。
课设题目:宾馆客房管理系统。

1.题目要求

设计“宾馆客房管理系统”软件,使之具备如下要求:
(1) 系统所涉及的信息有:
① 顾客信息包括:编号,姓名,性别,籍贯,身份证号,出生日期,年龄,民族,居住地,工作单位等。
② 客房信息包括:房间编号,房间等级,价格,是否空闲等
③ 入住信息包括:所住顾客编号,顾客姓名,入住日期,退房日期等。
④ 服务信息包括:服务项目编号,项目名称,费用等。
(2) 系统能够实现:信息浏览功能;查询功能:按房号、姓名、入住时间查询;信息的删除与修改。

本管理系统采用结构体数组实现,也可以用链表来存储信息,其基本功能大致相同。涉及单链表的基本操作源码,请看下面的文章:
单链表的基本操作源码以及数据结构的基本学习思路

2.产品需求

该管理系统适用于各类中小型酒店的客房资源和客户信息的管理,实现了酒店的信息化管理,该系统主要包括基础信息设置、查询统计管理,实现开房退房功能。

编译软件:本程序使用的编译软件:microsoft visual C++ 6.0

3.功能需求

3.1管理员登陆系统

 (1)初始化管理员登录账号及密码
 (2)管理员输入登录密码
 (3)进入系统界面完成开房退房信息查询等功能    

3.2登记客户信息系统

(1)登记顾客姓名,性别,身份证号码等信息
(2)记录顾客预住天数和预支付房费
(3)显示顾客成功登记的房间号
(4)选择房间并自动更改房间状态信息

由于住房及顾客信息由于涉及多种类型的数据,因此应用结构体数组储存信息。可以用文件记录相关数据。

3.3房间信息及顾客信息查询

(1)查询房间状态 
(2)按顾客姓名查找:查找顾客的房间号码及顾客信息
(3)按顾客身份证号码查找:查找顾客的房间号码及顾客信息

3.4开房函数的封装

(1)动态内存分配初始化新增顾客信息
(2)记录顾客预住天数和预支付房费
(3)显示顾客成功登记的房间号且顾客数量加一
(4)更改房间状态信息

3.5退房函数的封装

(1)根据实际住房时间计算实际消费金额
(2)更改房间状态且顾客数量减一
(3)显示退房成功并释放该内存空间

4.详细设计

4.1主函数(main)

【功能】此程序运行的入口

4.2登录函数

【功能】管理员同时输入正确的账户和密码登录进入系统界面

4.3信息录入函数

【功能】录入客户信息

4.4进入系统函数

【功能】进入系统界面进行功能选择

4.5信息查询函数

【功能】查询客户信息以及客房状态信息

4.6开房函数的封装

【功能】为顾客选择需求类型的房间并修改房间状态

4.7退房函数的封装

【功能】实现退房并修改房间状态

5.系统测试

登录界面
只有用户同时输入正确的用户名和密码,才可以进入本系统,如图:

1
如果输入错误,提示请重新输入!如图:
2
系统主界面
用户成功进入系统界面,可以根据需求选择需要实现的功能,实现用户与该系统的交互。如图:
3

入住与选择界面
录入入住顾客信息,选择房间类型和预住天数。如图:
4

输入信息全部完善并正确后就会出现对应应支付的金额以及安排入住的房间号码,开房成功。如图:
5

查询宾馆房间状态
打印出已经住人的房间和未住人的房间号码,以十个房间为一行输出在屏幕上,如图:
6
按照顾客姓名查找顾客信息,如图:
7

按照顾客身份证号码查找顾客信息,如图:
8
退房界面
(1)输入退房顾客姓名和身份证号码
(2)输入实际住房天数
(3)返回实际消费金额
如图:
9

6.参考文献

[1] 谭浩强. 《 C程序设计(第三版)》. 清华大学出版社.2005年
[2]何钦铭 颜晖.《C语言程序设计》.高等教育出版社.2008年
[3] 陈强 .《C语言核心开发技术从开发到精通》.电子工业大学出版社.2006年
[4]严蔚敏、吴为民.《数据结构(C语言版)》.清华大学出版社.2007年
[5]周二强.《新编C程序设计》.清华大学出版社.2011年
[6]邓文华.《数据结构实验和实训教程》.清华大学出版社.2011年

7.源码

//结构体,结构体数组,指向结构体数组的指针,函数封装。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>//动态内存分配
void init_room();
void enter();
void start();
void check_in();
void check_out();
void change();
void search();
void add(struct Customer* cs);

int i = 0;
int pay = 0;

struct Room
{
	int number;
	int grade;
	int price;
	int status;
};

struct Customer
{
	char name[10];
	char sex[2];
	char ID[19];
	char addr[10];
	char birth[10];
	char nation[10];
	char place[10];//居住地
	char work[10];//工作单位 
	int pay;
	int day;
	int room_number;
};

struct Room room[60];
struct Customer* customer[60];

int main()
{
	system("mode con cols=130 lines=50");
    system("color 0A");
	init_room();
	enter();
	while (1)
	{
		start();
	}
	return 0;
}

//初始化六十个房间
void init_room()
{
	int j = 101, k;
	for (k = 0; k < 20; k++)
	{
		room[k].number = j++;
		room[k].grade = 1;//单人间 
		room[k].price = 150;
		room[k].status = 0;
	}
	j = 201, k;
	for (k = 20; k < 40; k++)
	{
		room[k].number = j++;
		room[k].grade = 2;//双人间 
		room[k].price = 200;
		room[k].status = 0;
	}
	j = 301, k;
	for (k = 40; k < 60; k++)
	{
		room[k].number = j++;
		room[k].grade = 3;//家庭房 
		room[k].price = 300;
		room[k].status = 0;
	}
}

//登录函数
void enter()
{
	char administrator[10] = "123";
	char password[20] = "000";
	char name[10];
	char code[20];
	printf("\n\n\n\n");
	printf("\t\t\t\t--------------------------------------------------\n");
	printf("\t\t\t\t|                                                 |\n");
	printf("\t\t\t\t-------------欢迎进入酒店客房管理系统-------------\n");
	printf("\t\t\t\t|                                                 |\n");
	printf("\t\t\t\t--------------------------------------------------\n");
	printf("\n\n");
	printf("\t\t\t\t账号:");
	scanf("%s", name);
	printf("\t\t\t\t密码:");
	scanf("%s", code);
	while ((strcmp(name, administrator) != 0) || (strcmp(code, password) != 0))
	{
		printf("\t\t\t\t输入不正确,请重新输入!\n");
		printf("\t\t\t\t账号:");
		scanf("%s", name);
		printf("\t\t\t\t密码:");
		scanf("%s", code);
	}
	printf("\t\t\t\t请按任意键登录!\n");
}

//系统入口
void start()
{
	int choice;
	system("pause");
	system("cls");
	printf("1->开房 2->退房 3->信息查询 4->修改信息 5->退出系统\n");	
	printf("请输入你的选择:");
	scanf("%d", &choice);
	while (choice != 1 && choice != 2 && choice != 3 && choice != 4&&choice!=5)
	{
		printf("选项输入无效,请重新输入:\n");
		printf("1->开房 2->退房 3->信息查询 4->修改信息 5->退出系统\n");	
		printf("请输入你的选择:\n");
		scanf("%d", &choice);
	}
	switch (choice)
	{
	case 1:
		check_in();
		break;
	case 2:
		check_out();
		break;
	case 3:
		search();
		break;
	case 4:
		change();
		break;
	case 5:
		exit(0);
		break;
	default:
		break;
	}
}

//开房函数的封装
void check_in()
{
	int choice, day;
	customer[i] = (struct Customer*)malloc(sizeof(struct Customer));
	add(customer[i]);
	printf("1->单人房150/间 2->双人房200/间 3->家庭房300/间\n");
	printf("请选择房型:");
	scanf("%d", &choice);
	printf("请输入预住天数:");
	scanf("%d", &day);
	customer[i]->day = day;
	switch (choice)
	{
		int n;
	case 1:
		for (n = 0; n < 20; n++)
		{
			if (room[n].status == 0)
			{
				pay = 150 * day;
				printf("请收取%d房费\n", pay);
				printf("入住房间号码为:%d\n", room[n].number);
				customer[i]->pay = pay;
				customer[i]->room_number = room[n].number;
				room[n].status = 1;
			}
			break;
		}
		break;
	case 2:
		for (n = 20; n < 40; n++)
		{
			if (room[n].status == 0)
			{
				pay = 200 * day;
				printf("请收取%d房费\n", pay);
				printf("入住房间号码为:%d\n", room[n].number);
				customer[i]->pay = pay;
				customer[i]->room_number = room[n].number;
				room[n].status = 1;
			}
			break;
		}
		break;
	case 3:
		for (n = 40; n < 60; n++)
		{
			if (room[n].status == 0)
			{
				pay = 200 * day;
				printf("请收取%d房费\n", pay);
				printf("入住房间号码为:%d\n", room[n].number);
				customer[i]->pay = pay;
				customer[i]->room_number = room[n].number;
				room[n].status = 1;
			}
			break;
		}
		break;
	}
	++i;
}

//退房结算函数的封装
void check_out()
{
	char name2[10], ID2[19];
	int k, day2, room_number, day, standard,choice;
	printf("请输入退房顾客的姓名:");
	scanf("%s", name2);
	printf("请输入退房顾客的身份证号码:");
	scanf("%s", ID2);
	printf("请输入该顾客实住天数:\n");
    scanf("%d", &day2);
	for (k = 0; k < i; k++)
	{
		if ((strcmp(customer[k]->ID, ID2) == 0) && (strcmp(customer[k]->name, name2) == 0))
		{
			room_number = customer[k]->room_number;
			day = (customer[k]->day) - day2;
			standard = room_number / 100;
			switch (standard)
			{
			case 1:
				printf("顾客的房间号是%d :为单人间,每天150元\n",room_number);
				printf("实际住房消费 %d元整!\n", day2 * 150);
				printf("\n");
				if (day2 * 150 < pay)
					printf("请退给该顾客 %d 元整!\n", day * 150);
				if (day2 * 150 > pay)
					printf("请补收该顾客住房费 %d 元整!\n", day2 * 150 - pay);

				printf("消费总钱数为%d\n", day2 * 150);
				break;
			case 2:
				printf("顾客的房间号是%d :为双人间,每天200元\n",room_number);
				printf("实际住房消费 %d元整!\n", day2 * 200);
				printf("\n");
				if (day2 * 200 < pay)
					printf("请退给该顾客 %d 元整!\n", day * 150);
				if (day2 * 200 > pay)
					printf("请补收该顾客住房费 %d 元整!\n", day2 * 200 - pay);

				printf("消费总钱数为%d\n", day2 * 200);
				break;
			case 3:
				printf("号顾客的房间号是%d :为家庭房,每天300元\n",room_number);
				printf("实际住房消费 %d元整!\n", day2 * 300);
				printf("\n");
				if (day2 * 300 < pay)
					printf("请退给该顾客 %d 元整!\n", day * 300);
				if (day2 * 150 > pay)
					printf("请补收该顾客住房费 %d 元整!\n", day2 * 300 - pay);

				printf("消费总钱数为%d\n", day2 * 300);
				break;
			}

			printf("退房核算清楚,请按1: ");
			scanf("%d", &choice);
			if (choice == 1)
			{
				int j;
				for (j = 0; j < 80; j++)
				{
					if (room[j].number == customer[k]->room_number)
						room[j].status = 0;
				}
				--i;
				for (j = 0; j < i; j++)
				{
					customer[j] = customer[j + 1];
				}
				free(customer[i]);
				printf("退房成功!");
			}
		}
	}
}

//信息查询函数的封装
void search()
{
	int choice;
	char name3[10];
	char id3[19];
	printf("1->房间信息查询\n2->顾客信息查询\n");
	printf("请输入你的选择:");
	fflush(stdin);
	scanf("%d", &choice);
	if (choice == 1)
	{
		int k, count1 = 0, count2 = 0;
		printf("未住人的房间有:\n");
		for (k = 0; k < 60; k++)
		{
			if (room[k].status == 0)
			{
				printf("%d", room[k].number);
				count1++;
				printf("  ");
			}
			if (count1 % 10 == 0)
			{
				printf("\n");
			}

		}
		printf("\n");
		printf("住人的房间有:\n");
		for (k = 0; k < 60; k++)
		{
			if (room[k].status != 0)
			{
				printf("%d", room[k].number);
				count2++;
			}
			else
				return;
			if (count2 % 10 == 0)
			{
				printf("\n");
			}
		}
		printf("\n");
	}
	else if (choice == 2)
	{
		int choice2 ,j;
		printf("1->按姓名查找:\n2->按身份证号码查找\n:");
		printf("请输入你的选择:");
		scanf("%d",&choice2);
		switch (choice2)
		{
		case 1:
			printf("请输入顾客的姓名: \n");
			scanf("%s", name3);
			for (j = 0; j < i; j++)
			{
				if (strcmp(customer[j]->name, name3) == 0)
				{
					printf("%s的住房信息如下:\n", name3);
					printf("房间号为: %d\n",customer[j]->room_number);
					printf("姓名:%s\n",customer[j]->name);
					printf("身份证号码:%s\n",customer[j]->ID);
					printf("籍贯:%s\n",customer[j]->addr);


				}
			}
			break;
		case 2:
			
			printf("请输入顾客的身份证: \n");
			scanf("%s", id3);
			for (j = 0; j < i; j++)
			{
				if (strcmp(customer[j]->ID, id3) == 0)
				{
					printf("%s的住房信息如下:\n", customer[j]->name);
					printf("房间号为: %d\n", customer[j]->room_number);
					printf("姓名:%s\n",customer[j]->name);
					printf("身份证号码:%s\n",customer[j]->ID);
					printf("籍贯:%s\n",customer[j]->addr);
				}
			}
			break;
		}
	}
	else
	{
		printf("输入不合适!");
	}
}


//封装添加顾客信息函数
void add(struct Customer* cs)
{
	printf("请输入顾客的姓名:");
	scanf("%s",cs->name);
	printf("请输入性别:");
	scanf("%s", cs->sex);
	printf("请输入身份证号码:");
	scanf("%s", cs->ID);
	printf("请输入籍贯:");
	scanf("%s", cs->addr);
	//printf("请输入出生年月:");
	//scanf("%s", cs->birth);
	//printf("请输入民族:");
	//scanf("%s",cs->nation);
	//printf("请输入居住地:");
	//scanf("%s", cs->place);
	//printf("请输入工作单位:");
	//scanf("%s", cs->work);
}


//修改客户信息函数封装
void change()
{
	char name4[10];
	int k,choice;
	char name5[10],sex5[2],ID5[19],addr5[10];
	printf("请输入你要修改的客户姓名:\n");
	scanf("%s",&name4);
	for(k=0;k<i;k++)
	{
			if(strcmp(customer[k]->name,name4)==0)
			{
			        printf("1->姓名 2->性别 3->身份证号码 4->籍贯\n");
					printf("请选择你要修改的客户信息:\n");
					scanf("%d",&choice);
					switch(choice)
					{
					case 1:
						printf("请输入修改后的姓名:");
						scanf("%s",&name5);
						strcpy(customer[k]->name,name5);
						//customer[i]->name=name5;
						break;
					case 2:
						printf("请输入修改后的性别:");
						scanf("%s",&sex5);
						strcpy(customer[k]->sex,sex5);
						break;
					case 3:
						printf("请输入修改后的身份证号码:");
						scanf("%s",&ID5);
						strcpy(customer[k]->ID,ID5);
						break;
					case 4:
						printf("请输入修改后的籍贯:");
						scanf("%s",&addr5);
						strcpy(customer[k]->addr,addr5);
						break;
					}
					printf("修改成功!");
			}
			else
			{
				printf("输入有误!");
				return ;
			}
	}
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:05:17  更:2021-07-16 11:05:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 17:04:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码