c++酒店管理系统课程设计_基于java的酒店管理系统源码

c++酒店管理系统课程设计_基于java的酒店管理系统源码朋友们好呀,我是马保国。呸。我是一名大一刚过完一个学期的学生。————————————————————————在我忙碌的努力的在RushB并且备战期末考试的时候我想到了我还得学习!!!但是,临近期末课又少所以,我想到了我一直想要去做的,一个关于酒店的一些小东西,他能够做到酒店的一些鸡操(基本操作),像酒店的入住,退房,还有酒店员工的系统这些我认为比较牛(我认为比较厉害,别抬杠)的一个操作,所以在接近期末的时候疯狂肝,终于在考完试回到家的第一天写完了(前后20天左右了,浪费生命的臭玩意,啊。。。.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

||酒店系统内容||

  1. 最简单的,也是我最后充数写的:仓库物品的系统(可以从这个系统了解我的过程大概是怎么进行的,怎么去运用函数的,其他两个的思路大致都相同,算是大同小异吧,但是有些细微的地方我觉得还是值得一看的)
  2. 酒店员工账户的管理系统
  3. 酒店的住户管理系统
  4. 原本其实还有一个会员系统,但是我发现其实这几个的具体写法都是差不多的,所以就没有写的必要了(有人肯定会质疑啦,”你就是懒,你就是不想写”欸…是又怎么样!我不用节省时间Rush B的吗?哦!不好意思,是复习高数)

另外,Important!!!有些读者老爷可能对一些函数没有了解,我这里对这些比较少见但是我用上了的函数做一些介绍

头文件 conio.h

_getch():我们一般所使用的 getchar() 函数在读入一个字符时 必须按一下 enter 键,该代码才会继续运行;但是_getch() 函数读入一个字符时 不用 enter 代码会继续跑。就像游戏中你如果方向前进W键每按一下你就Enter一下,换谁都会烦死的呀,如果我直接输入一个字符直接接受进行下一步操作岂不美哉,喵啊!
在这里插入图片描述

头文件 windows.h

system(“pause”):从程序中发起系统命令行调用,执行命令:pause。system(“PAUSE”) 是暂停的意思,等待用户信号;不然控制台程序会一闪即过,你来不及看到执行结果。

system(“cls”):system函数代表执行系统命令,system(“cls”)就是执行命令”清屏“的意思。

头文件 iostream

这个部分主要是因为一些函数在VS中因为安全性会报错,所以VS改良了一些函数
strcpy_s():和strcpy相比用法没变化
fopen_s(FILE **_Stream, const char *_FileName, const char *_Mode):这一个和原来相比,原来文件指针传入方式是FILE *_Stream,直接传入文件指针的变量,改良后变成了传入文件指针的变量的地址(&fp),使用时要注意!他的返回值如果打开不成功就返回0,成功就返回非0!!
fscanf_s(FILE *_Stream, const char *_Format, …):和fscanf相比应该或许可能没有改变吧(我忘了),这个函数的返回值就是我们该函数的成功读入的数据的数量,但是我主要用它来扫描数据

头文件cstdio

remove(const char *_FileName):删除文件
rename(const char *_OldFileName, const char *_NewFileName):更改文件名字
这两个本应该是头文件中的,但我在VS中不知道为什么没有引入这个头文件就可以使用了?

一些主要操作的用法,这里就用最简单的仓库系统来举例子吧!

头文件h

#pragma once
#include<iostream>
#include<conio.h>
#include<windows.h>
#include<iomanip>

using namespace std;

//仓库系统
class Item
{ 
   
private:
	char name[10];	//物品名称
	int count;//数目

public:
	//物品清单
	void ItemList();
	//新填物品
	void Itemnew();
	//删除物品
	void ItemDelete();
	//物品的进货和出货(增加\减少物品数量)
	void ItemChange();
	//返回物品系统目录
	void Exit();
private:
	void Fprintf(FILE* fp);
	//文件的输出fscanf_s函数需要扫描多个对象,简化过程
	void Fscanf(FILE* fp);
	//检查这个物品的名字是否可以使用(没有重名)
	bool CheckName(FILE* fp, char* name);
};
Choose1();

Fscanf(FILE* fp)

void Item::Fscanf(FILE* fp)
{ 
   
	fscanf_s(fp, "%s", name, sizeof(name));
	fscanf_s(fp, "%d", &count);
}

Fprintf(FILE* fp)

void Item::Fprintf(FILE* fp)
{ 
   
	fprintf(fp, "%s %d\n", this->name, this->count);
}

这两个函数在每一个函数中几乎都会用到,就是为了方便不想多敲代码

Exit()

这个是返回仓库系统的函数,WarehouseMenu()是打印目录,后面再说,现在先知道他是返回目录的就行啦。

void Item::Exit()
{ 
   
	system("pause");
	system("cls");
	WarehouseMenu();
}

Choose1()

让字符返回的只可以是‘1’或‘2’

char Choose1()//让字符返回的只可以是‘1’或‘2’
{ 
   
	while (1)
	{ 
   
		char ch = _getch();
		if (ch == '1' || ch == '2')
			return ch;
		else
			cout << "输入格式有误请重新输入!" << endl;
	}
}

ItemList()

//物品清单
void Item::ItemList()
{ 
   
	FILE* fp;
	if (fopen_s(&fp, ".\\Item.txt", "r+") != 0)
	{ 
   
		cout << "文件ITem.txt打开错误,不能够查看物品!" << endl;
		return;
	}
	puts("*商品名称\t*商品库存");
	while (1)
	{ 
   
		Fscanf(fp);
		if (feof(fp))//当文件结尾是扫描结束
			break;
		printf("*%-10s\t*%-10d\n", this->name, this->count);
	}
	fclose(fp);
	Exit();
}

CheckName(FILE* fp,char* name)

//检查这个物品的名字是否可以使用(没有重名)
这个函数用来检查这个物品名字是否被使用过,在下面会用到,值得注意的是,结束时记得rewind(fp),使文件指针返回开头,不然Fscanf扫描的时候不是从头开始,数据读取就不全。

bool Item::CheckName(FILE*fp,char* name)
{ 
   
	while (1)
	{ 
   
		Fscanf(fp);
		if (feof(fp))
		{ 
   
			rewind(fp);
			return true;
		}
		else if (strcmp(this->name, name) == 0)
		{ 
   
			rewind(fp);
			return false;
		}
	}
	fclose(fp);
}

Itemnew()

//新填物品
void Item::Itemnew()
{ 
   
	FILE* fp;
	if (fopen_s(&fp, ".\\Item.txt", "a+") != 0)
	{ 
   
		cout << "文件ITem.txt打开错误,不能够添加物品!" << endl;
		return;
	}
	char Cname[10];
	while (1)
	{ 
   
		cout << "请输入要添加的物品名称:";
		cin >> Cname;
		if (CheckName(fp,Cname) == false)
		{ 
   
			cout << "此物品名称已经存在!" << endl;
			cout << "是否重新输入名称?\t1.是 2.否" << endl;
			char ch = Choose1();
			if (ch == '1') { 
   }
			else if (ch == '2')
			{ 
   
				fclose(fp);
				Exit();
				return;
			}
		}
		else
			break;
	}
	strcpy_s(this->name, Cname);
	cout << "请输入要添加的物品数量:";
	cin >> count;
	
	Fprintf(fp);
	fclose(fp);
	Exit();
}

ItemDelete()

//删除物品

这里我找了挺多的资料,就只找到一种可以修改文件数据的方法,就是将数据扫描后,再修改数据,再将数据输入到新的文件中,在删除原文件,将新文件名字改为原文件名字。(不知道大佬有没有更好的办法?)

void Item::ItemDelete()
{ 
   
	FILE* fpR, * fpW;//fpR用来读取原文件中数据,将修改后的数据输入到fpW指向的文件中
	if (fopen_s(&fpR, ".\\Item.txt", "r+") != 0)
	{ 
   
		cout << "文件ITem.txt打开错误,不能够删除物品!" << endl;
		return;
	}
	char Cname[10];
	while (1)
	{ 
   
		cout << "请输入要添加的物品名称:";
		cin >> Cname;
		if (CheckName(fpR,Cname) == true)
		{ 
   
			cout << "此物品名称不存在!" << endl;
			cout << "是否重新输入名称?\t1.是 2.否" << endl;
			char ch = Choose1();
			if (ch == '1') { 
   }
			else if (ch == '2')
			{ 
   
				WarehouseMenu();//打印仓库系统的目录,这个先不管
				return;
			}
		}
		else
			break;
		system("cls");
	}

	fopen_s(&fpW, ".\\temporary.txt", "w+"); //创建一个新的暂时的文件
	while (1)
	{ 
   
		Fscanf(fpR);
		if (feof(fpR))
			break;
		else if (strcmp(Cname, this->name) == 0)
			continue;
		Fprintf(fpW);
	}
	fclose(fpW);//忘记关文件是小狗!
	fclose(fpR);
	remove(".\\Item.txt");//删除原文件
	rename(".\\temporary.txt", ".\\Item.txt");//新文件改名字
	cout << "删除成功!" << endl;
	Exit();
}

ItemChange()

//物品的进货和出货(增加\减少物品数量)
void Item::ItemChange()
{ 
   
	FILE* fpR, * fpW;//fpR用来读取原文件中数据,将修改后的数据输入到fpW指向的文件中
	if (fopen_s(&fpR, ".\\Item.txt", "r+") != 0)
	{ 
   
		cout << "文件Item.txt打开错误,不能够改变物品数量!" << endl;
		return;
	}
	char Cname[10];//临时存放物品名称的数组
	while (1)
	{ 
   
		cout << "请输入要进货的物品名称:";
		cin >> Cname;
		if (CheckName(fpR,Cname) == true)
		{ 
   
			cout << "此物品名称不存在!" << endl;
			cout << "是否重新输入名称?\t1.是 2.否" << endl;
			char ch = Choose1();
			if (ch == '1') { 
   }
			else if (ch == '2')
			{ 
   
				WarehouseMenu();
				return;
			}
		}
		else
			break;
		system("cls");
	}

	fopen_s(&fpW, ".\\temporary.txt", "w+");
	while (1)
	{ 
   
		Fscanf(fpR);
		if (feof(fpR))
			break;
		else if (strcmp(Cname, this->name) == 0)
		{ 
   
			cout << "商品名称:" << this->name << endl;
			cout << "现在存货数量:" << this->count << endl;
			cout << endl;
			cout << "请输入要进货的数量:";
			int n;
			cin >> n;
			this->count += n;
		}
		Fprintf(fpW);
	}
	fclose(fpW);
	fclose(fpR);
	remove(".\\Item.txt");
	rename(".\\temporary.txt", ".\\Item.txt");
	cout << "进货成功!" << endl;
	Exit();
}

这些就大概是整个系统的主要操作,做到文件的数据输入和输出,对文件内容的修改。
还要一个打印目录的函数

WarehouseMenu()

void WarehouseMenu()
{ 
   
	Item a;
	system("cls");
	while (1)
	{ 
   
		for (int i = 0; i < 5; i++)
			cout << endl;
		cout << "\t\t\t\t\t****************************" << endl;
		cout << "\t\t\t\t\t* 仓库管理系统 *" << endl;
		cout << "\t\t\t\t\t* 1.酒店物品列表 *" << endl;
		cout << "\t\t\t\t\t* 2.新增物品 *" << endl;
		cout << "\t\t\t\t\t* 3.删除物品 *" << endl;
		cout << "\t\t\t\t\t* 4.物品进货 *" << endl;
		cout << "\t\t\t\t\t* 5.返回 *" << endl;
		cout << "\t\t\t\t\t****************************" << endl;
		char ch = _getch();

		if (ch == '1')
		{ 
   
			a.ItemList();
			break;
		}
		else if (ch == '2')
		{ 
   
			a.Itemnew();
			break;
		}
		else if (ch == '3')
		{ 
   
			a.ItemDelete();
			break;
		}
		else if (ch == '4')
		{ 
   
			a.ItemChange();
			break;
		}
		else if (ch == '5')
		{ 
   
			MainMenu();
			break;
		}
		
		else
		{ 
   
			cout << "输入错误,无此功能,请重新输入!" << endl;
			system("pause");
			system("cls");
		}
	}
}

主要思路已经讲了,但是源码比这个复杂得多,这是我第一次程序敲上千行。
后面会把源码发出来,希望大家可以给建议,毕竟还有太多东西需要学习了,程序没大问题的话不打算再改了,后面准备开始学python了,寒假要加油干!

|||源码连接,随便借鉴,能给意见是最好不过了|||

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192830.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月7日 下午1:22
下一篇 2025年12月7日 下午2:01


相关推荐

  • ROS 中 rosbag 相关命令介绍

    ROS 中 rosbag 相关命令介绍

    2020年11月8日
    272
  • 微信小程序后端开发流程_微信小程序开发入门

    微信小程序后端开发流程_微信小程序开发入门微信小程序开发流程记录一、代码处理(一)微信小程序(前端显示)微信小程序项目的架构部分特点说明(二)后台服务器(数据交互)需要的环境特别注意二、项目部署(一)Wampserver的设置(二)域名的获取(三)小程序官方网站上的设置一、代码处理最近一大学同窗开了家自习室,需要一个自习室的预约微信小程序,又恰好手上没有什么代码项目在写,本着少一事不如多一事的原则,尝试了第一次的微信小程序开发。白天要上班,只能利用晚上时间编写,反正他也不着急开业,于是前前后后用了大概半个月的时间,故做记录。刚开始写,确实没什

    2025年11月19日
    9
  • my10_使用binlog2sql闪回DML操作

    my10_使用binlog2sql闪回DML操作

    2021年6月10日
    126
  • PHP中Array的hash函数实现

    PHP中Array的hash函数实现

    2021年9月4日
    70
  • VPP前言

    VPP前言这里写的是研究 vpp 的一些心路历程 我在这里并不打算写下 本科毕业一年之际也就是 20 年五月份第一次接触 vpp 也是公司需要 当时的我对许多网络知识并不了解 因为大学对网络方面的教育太薄弱 当时很难对网络知识有深刻的理解 脑海里剩下的就剩 tcp 三次握手和 DNS 相关的知识 也就会在服务器上配置 IP 网关 路由等 刚开始研究的 OVS 都不知道是什么 更不要提对 SDN NFV 有什么概念 所以研究 VPP 对我是个很大的挑战 除去中间干别的事情的几个月 现在算起来研究 vpp 也有近半年时间了 到现在为止也算是对 vpp 的一

    2026年3月20日
    2
  • Verilog中inout的用法(二)

    Verilog中inout的用法(二)芯片外部引脚很多都使用 inout 类型的 为的是节省管腿 一般信号线用做总线等双向数据传输的时候就要用到 INOUT 类型了 就是一个端口同时做输入和输出 inout 在具体实现上一般用三态门来实现 三态门的第三个状态就是高阻 Z 当 inout 端口不输出时 将三态门置高阻 这样信号就不会因为两端同时输出而出错了 更详细的内容可以搜索一下三态门 tri state 的资料

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号