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了,寒假要加油干!

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java面试题笔试题_外贸函电考试题和答案

    java面试题笔试题_外贸函电考试题和答案声明:有人说,有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目,知识面很广,而且这位前辈对于每个题都自己测试给出了答案,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步!以下内容来自这位前辈2013年年底的…

  • mac datagrip激活【2021免费激活】

    (mac datagrip激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1PA3AFINM4-eyJsaWNlbnNlSWQi…

  • 《大话数据结构》pdf

    《大话数据结构》pdf下载地址:网盘下载编辑推荐编辑超级畅销书《大话设计模式》作者的新作!用户群更为广泛,写作风格一如既往,技术沉淀更加深厚,势必掀起全民数据结构的热潮!内容简介编辑本书为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生…

  • 深度信念网络DBN的一个matlab实例「建议收藏」

    关于深度学习的一些个人浅见:   深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络指是具有深层(多层)网络结构的神经网络。   深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。   但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

  • 投影矩阵推导_矩阵投影变换

    投影矩阵推导_矩阵投影变换概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。投影是通过一个4×4的矩阵来完成的,将视锥映射成标准观察体(齐次裁剪空间)。正交投影OpenGLOpenGL采用的是右手坐标系,z轴朝屏幕向外,因此观察方向是朝着z轴负方向的,那么将x,y,z坐标从区间[l,r],

  • Springboot+Spring-Security+JWT 实现用户登录和权限认证「建议收藏」

    如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC基于角色权限的验证,shiro框架专门用于处理权限方面的,另一个比较流行的后端框架是Spring-Security,该框架提供了一整套比较成熟,也很完整的机制用于处理各类场景下的可以基于权限,资源路径,以及授权方面的解决方案,部分模块支持定制化,而且在和oauth2.0进…

发表回复

您的电子邮箱地址不会被公开。

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