物业管理系统(C++/详细源码/思路流程图)

        这个实战项目是我的一个小学期任务,主要是让我们感受一下未来行业实际开发解决问题中编程的应用和实现,也是一个培养编程思维和用编程解决问题思维的一个很好的训练方式。

        那么话不多说,直接上题目:

        某写字楼物业管理公司管理着一栋3层的办公楼,每层分A、B两座,每座有5套房间。编写程序,输入楼层数、每层座数以及每座房间数,自动生成所有的房间及其编号。用户可以增加、删除、修改房间及其编号,设置每一个房间的住户及其电话号码。可以根据住户姓名查找其房间及编号,可以列出所有或指定楼层、座次、房间的住户信息。

       一、代码流程图:流程图可以在自己无法解决问题的时候给自己一个很好的帮助,不仅仅是框架上的,更是思维上的

 二、解读题目要求

//某写字楼物业管理公司管理着一栋3层的办公楼,每层分A、B两座,每座有5套房间。
//编写程序,输入楼层数、每层座数以及每座房间数,自动生成所有的房间及其编号。
//用户可以增加、删除、修改房间及其编号,设置每一个房间的住户及其电话号码。
//可以根据住户姓名查找其房间及编号,可以列出所有或指定楼层、座次、房间的住户信息。

因此我构造了九个函数,用于实现以上的要求和功能。

三、根据流程图去编写代码

part 1、包含头文件

#include<iostream>
#include<stdlib.h>
using namespace std;

part 2、代码之结构体和结构体数组

//创建房间类
struct room
{	//用户名、电话、编号

public:
	string name, phoneNum;
	int ID;
	int Num;

};
struct room roomArray[3][2][10];

part 3、创建不同功能的函数(其中我把函数2放在4、5后面的原因是有关函数嵌套的问题处理)

//创建不同功能的函数
//1、输入楼层数、座数、房间数会显示出所有的房间编号
void ID_Show() {
	printf("请输入总楼层数,总座数和总房间数\n");
	int floor_num, zuo_num, room_num;
	cin >> floor_num >> zuo_num >> room_num;
	for ( int i = 0; i < 3; i++)
	{
		cout << endl;
		for (int j = 0; j < 2; j++) {
			cout << endl;
			for (int k = 0; k < room_num; k++)
			{
				printf("第%d层第%d座第%d号房间的编号为%d\n", i + 1, j + 1, k + 1, roomArray[i][j][k].ID);
			};
		};
	};
};
//4、在某层某座修改某房间编号
void Change_ID() {
	printf("请分别输入层数(1-3)、座数(A、B分别用1、2替代)、和房间数\n");
	int floor_num, zuo_num, room_num;
	cin >> floor_num >> zuo_num >> room_num;
	cout << "plaese input the ID\n" << endl;
	int in_ID;
	cin >> in_ID;
	roomArray[floor_num - 1][zuo_num - 1][room_num - 1].ID = in_ID;
	printf("修改完成,现在第%d层第%d第%d间的ID为:%d\n", floor_num, zuo_num, room_num, in_ID);
};
//5、设置某层某座某房间的用户名和电话号码
void Set_napho() {
	printf("请分别输入层数(1-3)、座数(A、B分别用1、2替代)、和房间数\n");
	int floor_num, zuo_num, room_num;
	cin >> floor_num >> zuo_num >> room_num;
	cout << "请分别输入此房间的用户名和电话号码(俩次输入之间用回车键隔开)\n" << endl;
	string in_name;
	string in_phoneNum;
	cin >> in_name >> in_phoneNum;
	roomArray[floor_num - 1][zuo_num - 1][room_num - 1].name = in_name;
	roomArray[floor_num - 1][zuo_num - 1][room_num - 1].phoneNum = in_phoneNum;
	printf("修改完成,现在第%d层第%d第%d间的", floor_num, zuo_num, room_num);
	cout << "name is" << in_name << ",phonenumber is" << in_phoneNum << endl;
};
//2、在某层某座增加多个房间(由于要调用Change_ID函数和Set_napho函数,所以将其放在Add_Room函数前面)
void Add_Room() {
	printf("请分别输入层数(1-3)、座数(A、B分别用1、2替代)\n");
	int floor_num, zuo_num;
	cin >> floor_num >> zuo_num;
	printf("请问您要增加几个房间?\n");
	int add_num;
	cin >> add_num;
	for (int j = 0; j < add_num; j++) {
		cout << "以下将设置新房间的编号" << endl;
		Change_ID();
		cout << "以下将设置新房间的用户姓名和电话" << endl ;
		Set_napho();
		printf("现在第%d层第%d座还剩下%d间房间\n", floor_num, zuo_num, 5 + j);
		printf("新增第%d间的房间编号为%d,", j + 1, roomArray[floor_num - 1][zuo_num - 1][5 + j].ID);
		cout << "姓名为" << roomArray[floor_num - 1][zuo_num - 1][5 + j].name << ",电话为" << roomArray[floor_num - 1][zuo_num - 1][5 + j].phoneNum << endl;
	}
	};
	//3、在某层某座删除多个房间
	void Delete_Room() {
		printf("请分别输入层数(1-3)、座数(A、B分别用1、2替代)\n");
		int floor_num, zuo_num;
		cin >> floor_num >> zuo_num;
		printf("请问您要删除几个房间?\n");
		int del_num;
		cin >> del_num;
		for (int i = 0; i < del_num; i++) {
			roomArray[floor_num - 1][zuo_num - 1][4 - i].name = "用户已删除";
			roomArray[floor_num - 1][zuo_num - 1][4 - i].ID = -1;
			roomArray[floor_num - 1][zuo_num - 1][4 - i].phoneNum = -1;
			printf("现在第%d层第%d座还剩下%d间房间\n", floor_num, zuo_num, 5 - i);
		}

	};
	
	
	//6、通过姓名查找房间编号
	void Find_ID() {
		printf("请输入所需要查找的姓名:\n");
		string in_name;
		cin >> in_name;
		int i, j, k;
		for (i = 0; i < 3; i++)
		{
			for (j = 0; j < 2; j++) {
				for (k = 0; k < 5; k++)
				{
					if (roomArray[i][j][k].name == in_name) {
						cout << "房间编号为:" << roomArray[i][j][k].ID << endl;
					}
				};
			};
		};

	};
	//7、列出所有住户信息
	void Show_All() {
		for (int i = 0; i < 3; i++)
		{
			cout<<endl;
			for (int j = 0; j < 2; j++) {
				//可以加个endl;
				cout<<endl;
				for (int k = 0; k < 5; k++)
				{
					printf("第%d层第%d座第%d号房间的", i + 1, j + 1, k + 1);
					cout << "name is" << roomArray[i][j][k].name << ",phonenumber is" << roomArray[i][j][k].name << endl;
				};
			};
		};
		cout << "所有用户信息已罗列完成" << endl;
	};


	//8、列出指定层、座、房间的用户信息
	void Show_This() {
		printf("请分别输入层数(1-3)、座数(A、B分别用1、2替代)、和房间数\n");
		int floor_num, zuo_num, room_num;
		cin >> floor_num >> zuo_num >> room_num;
		//如果未定义,有俩种方法:一是直接变成全局变量,另外一种是传入参数
		if (room_num > roomArray[floor_num - 1][zuo_num - 1][room_num - 1].Num) {
			cout << "查无此房" << endl;
		}
		else {
			cout << "name is:" << roomArray[floor_num - 1][zuo_num - 1][room_num - 1].name << endl;
			cout << "ID is:" << roomArray[floor_num - 1][zuo_num - 1][room_num - 1].ID << endl;
		}
	};


	//9、跳出整个系统
	void Exit_All() {
		printf("你确定要退出整个系统?(确定回复1,否定回复0)\n");
		int exit_0;
		cin >> exit_0;
		if (exit_0)
		{
			exit(0);
		}
		//怎么跳出一个函数
		//else 

	};

part 4、主函数(其实如果要尽善尽美满足封装的思想,可以把菜单栏也封装成一个函数)

int main()
	{


		//创建一个三维含所有房间信息(结构体数组)
			//struct room roomArray[3][2][10];
				// (因为是数组都是数字表示,但是输入的时候会输入AB所以之后要进行输入数据AB后要转换为1、2等)
				//还有就是之后要对房间数量进行修改,所以最后的第三维数字需要扩大化,比如就输个10吧
			//初始化结构体数组
		int i, j, k;
		for (i = 0; i < 3; i++)
		{
			for (j = 0; j < 2; j++) {
				for (k = 0; k < 5; k++)
				{
					roomArray[i][j][k].ID = (i + 1) * 100 + (j + 1) * 10 + k + 1;
					roomArray[i][j][k].name = "张三";
					roomArray[i][j][k].Num = k + 1;
				};
			};
		};
		//使用while(1)无限循环包裹显示主菜单和switch转换
		while (1) {
			//显示主菜单(分别用1、2.。。。9列出所需要使用的功能)
			printf("\n\n欢迎使用物业管理系统,您要实现以下哪个功能?(输入数字即可)\n");
			printf("1、输入楼层数、座数、房间数会显示出所有的房间编号\n");
			printf("2、在某层某座增加一个房间\n");
			printf("3、在某层某座删除一个房间\n");
			printf("4、在某层某座修改某房间编号\n");
			printf("5、设置某层某座某房间的用户名和电话号码\n");
			printf("6、通过姓名查找房间编号\n");
			printf("7、列出所有住户信息(初始化名字为张三)\n");
			printf("8、列出指定层、座、房间的用户信息\n");
			printf("9、跳出整个系统\n\n");
			int in_num;
			cin >> in_num;
			//使用swtich去接收主菜单里传过来的数据,并导入不同的函数模块里面
			switch (in_num)
			{//函数运行完就会执行下一个语句,不需要在函数里面使用退出函数语句
			case 1:ID_Show(); break;
			case 2:Add_Room(); break;
			case 3:Delete_Room(); break;
			case 4:Change_ID(); break;
			case 5:Set_napho(); break;
			case 6:Find_ID(); break;
			case 7:Show_All(); break;
			case 8:Show_This(); break;
			case 9:Exit_All(); break;

			default:
				break;
			}
		}

	}

part 5、归纳总结

        这段代码呢,没有用到多么高深多么复杂的编程思路,就是一些简简单单的函数、一些简简单单的思路,都能看懂,以后掌握了数据结构/算法等一些关于队列、链表的知识的话,写起来就会简单很多,效率也会大大提升。

        我在写这个程序的时候也遇到了许多奇奇怪怪的小问题,可以做一做总结,记录一下自己的成长。

     问题与讨论:

  1. 对题目要求的抽丝剥茧,让题目概述变成我将要实现的一项项功能。
  2. 对整体代码结构框架的选择,对于此类实际问题型项目,对象化和封装思想起到了很大的作用
  3. 对于全局变量的设定,刚开始的时候,因为创建的结构体数组放置于主函数里面,导致构造的函数无法使用主函数里面的数组,因此,考虑之后,我将结构体数组放置在头文件下面便变成了全局变量,可以正常使用
  4. 函数嵌套调用出错,刚开始的时候,位于前面的构造函数调用后面构造的函数,导致,调用失败,因此我将需要被调用的函数放置在调用它的函数前面,功能正常运行
  5. 字符串(名字和电话)输出乱码,因为printf()的自身原因,输出时出现乱码,后来改用cout输出字符串类型数据便不再输出乱码

        好了,今天的这个项目到这里就结束了,希望这些代码和总结对你有所帮助。我是极客派,向着更高更远的互联网技术不断迈进的一个平凡的人,有幸与你一同成长......持续更新.......欢迎关注哦~~~

  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 ThinkPHP5 + Bootstrap 倾力打造的多小区物业管理系统源码,操作简单,功能完善,用户体验良好 至简物业管理系统功能模块说明 1. 统计分析 以小区为单位,统计如下数据: 小区总栋数 小区总户数 小区总人数 小区租户数量 小区每月收费金额统计 小区车位统计 小区车辆统计 小区宠物统计 小区报修统计 2. 小区管理 主要功能:小区概述,坐落地址,占地面积,开发商名称,物业公司名称,绿化率等信息。 3. 房产信息管理 记录每个住户的基本信息,包括户主,房间数,单元信息,楼层 4. 业主信息管理 记录业主基本信息、业主家庭成员、车辆、宠物等信息。 5. 停车位管理 记录车位基本信息(车位编号) 记录车位的使用情况(租或买),费用等信息。 6. 服务管理 主要模块有社区活动管理、客户投诉管理、报修管理、信箱管理。 7. 资产设备管理 公共设备管理,比如电梯,路灯,垃圾桶,配电箱管理等等。 8. 收费管理 主要功能模块:收费项目定义、缴费记录管理。 9. 值班管理 以日历的形式,对小区保安的值班情况进行管理。 10. 权限管理 详细的操作权限控制,不仅仅是菜单级别的控制,同时还可以精确到界面上的操作按钮。 系统内置了以下4种角色: 超级管理员、小区管理员、小区普通员工、业主 每一种角色都有不同的操作权限。 同时也可以根据需要,自定义多种角色,然后为其分配相应的操作权限。 11. 系统配置 主要模块:系统基础配置、附件管理、个人信息配置、操作日志、定时任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值