C语言源代码系列-管理系统之机房机位预定系统

news2024/11/30 0:50:03
往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能要求:
(1)系统以菜单方式工作
(2)查询,根据输入时间,输出机位信息。
(3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。
(4)退出预定,根据输入的时间,机器号撤销该事件的预定!
(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短),若无则显示提示信息。

😜回答

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 20
#define T  (time-8)/2

int sum[6]={0};
int computer[6][20]={{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1},
{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,0},
{1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1}};/*该数组表示假设某天某人查询时机房各个时间段机位数情况*/
void Menu();       
void Situation();
void Book();
void Cancel();
void SearchWaiting();
void detail(int time);
void prione(int i);
struct waitlist       /*等待列表*/
{
   char number[3];
   char telephonenumber[11];      
} wait[N];

void printone(int i);
int main()
{
	Menu();     /*当前状态函数*/
}

void Menu()         /*主界面*/
{
	int n,w;
	do
	{
	  puts("\t\t****************机房机位预约系统************************\n");
      puts("\t\t*************************菜单***************************\n");
	  puts("\t\t\t 1.查询某时间段机位状态");  /*查询某时间段机位状态*/
	  puts("\t\t\t 2.预定空机位");   /*预定空机位*/
	  puts("\t\t\t 3.取消预订");    /*取消预订*/
	  puts("\t\t\t 4.查询等待信息");     /*查询等待信息*/
      puts("\t\t\t 5.退出");    /*退出*/
	  puts("\t\t********************************************************\n");
	  printf("选择菜单号(1-5):");
	  scanf("%d",&n); 
	  if(n<1||n>5)
	  {w=1;getchar();}
	  else
	  w=0;
	}while(w==1);
	switch(n)
	{
	case 1:Situation();break;
	case 2:Book();break; 
	case 3:Cancel();break;
	case 4:SearchWaiting();break;
	case 5:exit(0);break;
	}
	getch();
}
/*时间查询*/
void Situation()
{
	int time;
	printf("输在 (8-20)范围内的时间:");
	scanf("%d",&time);
	if(time<8||time>20)
	{printf("\t时间输入错误!\n");
	printf("输入在 (8-20)范围内的时间:");
	scanf("%d",&time);
    }
	detail(time);              /*函数调用*/
	getchar();
	Menu();
}
/*预定函数*/
void Book()
{int time,i=0,x,y;
FILE *fp;
 char c;
 printf("在(8-20)时间范围内输入你想要预定的时间:");
 scanf("%d",&time);
 if(time<8||time>20)
 {
	 printf("\t时间输入错误!\n");
	 printf("\t在(8-20)时间范围内输入你想要预定的时间:");
	 scanf("%d",&time);
 }
 detail(time);              /*函数调用*/
if(sum[T]>0)
{   if((fp=fopen("waitlist.txt","a"))==NULL)
		{
		   printf("\n无法打开文件!\n");
		  exit(0);
		}
	    printf("\n\t请输入你想要预定的机号,并且留下你的电话号码!:\n");	
	    scanf("%s %s",wait[i].number,wait[i].telephonenumber);
		for(i=0;i<1;i++)
	    fwrite(&wait[i],sizeof(struct waitlist),1,fp);
	    fclose(fp);/*向文本文档添加一个结构体单元*/
	printf("\t再次输入你想要预定的时间!\n");
	scanf("%d",&x);
	sum[T]--;       /*预定后该时间段空机位数减1*/
	computer[T][x]=1;   /*预定后该机状态变为1*/
	printf("\t预订成功!\n");
	getchar();
	Menu();
}
else
{
	printf("这是在这个时间段内未预定的电脑!\n");
	for(i=T+1;i<6;i++)
	{    time=9+2*i;
		detail(time);  /*函数调用*/
		if(sum[T]>0)
		printf("\t最近的空闲时间是 %d,%d\n",2*i+8,2*i+10);break;
	}
		printf("\t你想要预定吗?:y/n?");
		scanf("%s",&c);
		getchar();
		if(c=='Y'||c=='y')
		{
		   if((fp=fopen("waitlist.txt","r"))==NULL)
		 {
            printf("\n无法打开文件!\n");
	        exit(0);
		 }
		   else
		   {  printf("waitlist: number  telephonenumber\n");
              for(i=0;!feof(fp);i++)
			  {
			     fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);
			  }
                fclose(fp);
		   }
		       for(i=0;i<10;i++)
			   { prione(i);}
        printf("\n\t请输入您想预定的机号并留下您的联系方式!:\n");
        if((fp=fopen("waitlist.txt","a"))==NULL)
		{
		   printf("\n无法打开文件!\n");
		  exit(0);
		}
	
	    scanf("%s %s",wait[i].number,wait[i].telephonenumber);
	    for(i=0;i<1;i++)
	    fwrite(&wait[i],sizeof(struct waitlist),1,fp);
	    fclose(fp);                 /*若等待,就用文件的方式列出当时的等待列表并提示输入你的等待序号和联系方式*/
		printf("再次输入电脑的序号!\n");
		scanf("%d",&y);
		sum[T]--;                  
		computer[T][y]=1;  
	    printf("\t好了,请等待我们的电话!\n");
	    Menu();
		}
   else Menu();
}
}
/*取消预订*/
void Cancel()
{
	int time,number;
	printf("在(8-20)时间范围内输入你已经预定的时间:");
	scanf("%d",&time); 
	if(time<8||time>20)
	{
	 printf("\t输入时间错误!\n");
	 printf("\t在(8-20)时间范围内输入你已经预定的时间:");
	 scanf("%d",&time);
   	}
	else
	{printf("\t输入你预定的机号 :");
	scanf("%d",&number);}
	detail(time);
   sum[T]++;    /*预定后该时间段空机位数加1*/
	computer[T][number]=0;   /*预定后该机状态变为0*/
	printf("\t取消成功!\n");
	getchar();
	Menu();
}
/*查看等待信息*/
void SearchWaiting()
{
	int time,i;
     FILE *fp;
	printf("\t在(8-20)之间输入您要搜索的时间:");
	scanf("%d",&time);
	if(time<8||time>20)
	{
	 printf("\t时间输入错误!\n");
	 printf("\t在(8-20)之间输入您要搜索的时间:");
	 scanf("%d",&time);
	}
	else   if((fp=fopen("waitlist.txt","r"))==NULL)
   {
      printf("\nCannot open file!\n");
	 exit(0);
   }
   else
   {  printf("waitlist: number  telephonenumber\n");
        for(i=0;!feof(fp);i++)
		 {
			  fscanf(fp,"%s %s",&wait[i].number,&wait[i].telephonenumber);
		 }
          fclose(fp);
}
	for(i=0;i<10;i++)
	{ prione(i);}
	Menu();
}
/*公共函数*/ 
void detail(int time)           /*此函数功能是实现查找每个时间段空机位总数和空机位号*/
{   
	int i,j=0,k,s=0;
	int v[30];
    for(i=0;i<20;i++)
	{
    if(computer[T][i]==0)
	{  s++;	
	   v[j++]=i;
	}
	}
	sum[T]=s;
	printf("\t目前空置的电脑:%d\n",sum[T]);
	for(k=0;k<j;k++)
	printf("\t空置的电脑是:%d\n",v[k]);
}
void prione(int i)             /*此函数功能是实现输出等待列表到屏幕*/
{
	printf("\t\t%s %s  \n",wait[i].number,wait[i].telephonenumber);}


👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为电量分段图表实现过程

以前一直是改的MPAndroidChart&#xff0c;但最近看到华为手机的电池图表发现一旦设计不符合常规图表逻辑实现起来就很困难&#xff0c; 考虑过path相减(areaPath.op(-,- Path.Op.DIFFERENCE))、图像混合&#xff08;paint.setXfermode&#xff09;、裁剪区域&#xff08;clipR…

学生HTML个人网页作业作品下载 动漫主题网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

vue3面试题

文章目录一、vue3有了解过吗&#xff1f;能说说跟vue2的区别吗&#xff1f;1.vue3介绍2.vue3的新特性&#xff1a;2.1速度更快2.2体积更小2.3更易维护2.4更好的Typescript支持2.5编译器重写2.6更接近原生2.7更易使用3.vue3新增特性framentsTeleportcreateRenderercomposition A…

JVM区域划分

概述 JVM在运行代码时&#xff0c;他使用多块内存空间&#xff0c;不同的内存空间用来放不同的数据&#xff0c;然后配合代码流程&#xff0c;让系统运行起来。 存放类加载信息 举个最简单的例子&#xff0c;比如现在知道了JVM会加载类到内存里来供后续运行&#xff0c;所以…

java后端web前端10套项目开发案例源码,毕设,期末作业

项目包括 基础的html,css,js,jquery期末作业项目,毕设 1.古风诗意主题的背单词项目 2.模仿考虫软件实现的考拉背单词网页 3.模仿不背单词软件实现的背单词项目 html,css,js,jquery,瀑布流&#xff0c;懒加载的前端毕设 仿京东网站实现的前端平台 java基础作业 1.纯后端学生管…

初识Nodejs -- nodejs简介

视频链接&#xff1a;黑马程序员Node.js全套入门教程 文章目录1. 初识Nodejs1.1 思考为什么JavaScript可以在浏览器中被执行为什么JavaScript可以操作DOM和BOM&#xff1f;浏览器中的JavaScript运行环境1.2 Nodejs简介1.2.1 Nodejs中的JavaScript运行环境1.2.2 Node.js可以做什…

元数据管理-解决方案调研三:元数据管理解决方案——开源解决方案

开源解决方案 3.1、Apache Atlas Atlas 是一组可扩展和可扩展的核心基础治理服务——使企业能够有效和高效地满足其在 Hadoop 中的合规性要求&#xff0c;并允许与整个企业数据生态系统集成。 Apache Atlas 为组织提供开放的元数据管理和治理功能&#xff0c;以构建其数据资产…

没有公网IP,怎么远程访问ERP/NAS?

当前&#xff0c;国内疫情形势不容乐观&#xff0c;企业的经营发展再一次面临巨大挑战。虽然“远程办公”早已不是新鲜词&#xff0c;但依然有大量企业没有做好随时切换到远程办公的准备。如遇疫情风险&#xff0c;企业运营很容易陷入瘫痪。 企业一般在内网部署服务器、视频监…

2分钟看懂OA与ERP

ERP (Enterprise Resource Planning)即企业资源计划&#xff0c;最早是一种供应链的管理思想。它汇合了商贸代理行业的各项特点&#xff0c;旨在协调企业各管理部门围绕市场导向&#xff0c;更加灵活或柔性地开展业务活动&#xff0c;实时地响应市场需求。 从功能来看&#xf…

AVL树左旋转算法思路与图解

AVL树左旋转算法思路与图解 对于数列{4, 3, 6, 5, 7, 8}, 当我们插入8的时候, rightHeight() - leftHeight() > 1成立(也就是当前AVL树中的根节点的BF(平衡因子)> 1了), 此时这个AVL树已经不再是平衡的了, 也就是已经不是一个AVL树了, 所以我们要经过处理之后让其重新平…

【C】输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数

C语言没有字符串形式&#xff0c;所以可以用 char[] 数组来代替&#xff0c;但需要指定分配空间&#xff0c;所以可以采用单字符读取的形式&#xff1a; #include<stdio.h> int main(){char ch;int space0,number0,character0,other0;chgetchar(); …

WSO2安装使用的全过程详解

WSO2安装使用的全过程详解1. Install1.1 Docker Install 1.2 Uninstall2. User Guide3. Big Data -- Postgres4. Awakening1. Install 1.1 Docker Install 显示镜像 docker images/docker image ls拉去镜像/版本 docker pull wso2/wso2am 1.2 Uninstall 查看正在运行的容器 d…

流体动力润滑(轴承油膜承载机理)

目录 1.流体动力润滑 2.流体动力润滑的应用&#xff1a;楔形效应承载机理 3.承载量的计算 4.轴承动压油膜 1.流体动力润滑 定义&#xff1a;两个相对运动物体的摩擦表面&#xff0c;用于借助相对速度而产生的黏性流体膜将两摩擦面完全隔离开&#xff0c;由流体膜产生的压力…

那些下载不了的视频,Python只用1行代码就能直接下载

前言 现在有很多网站都并不支持直接下载的&#xff0c;例如我们常去的B站里面的视频&#xff0c;在页面是没有下载按钮的&#xff0c;还有的视频需要我们下载客户端才能下载…虽然这并不能拦住多少人&#xff0c;有些聪明的小伙伴就会去下载一些第三方软件去下载&#xff0c;比…

apache-atlas-hbase-bridge-源码分析

元数据类型 Hbase元数据类型, 包括命令空间、表、列族、列 public enum HBaseDataTypes {// ClassesHBASE_NAMESPACE,HBASE_TABLE,HBASE_COLUMN_FAMILY,HBASE_COLUMN;public String getName() {return name().toLowerCase();} }Hbase元数据采集实现 1&#xff09;批量采集HBa…

MyBatis基于XML的使用——缓存

1、介绍 MyBatis 内置了一个强大的事务性查询缓存机制&#xff0c;它可以非常方便地 配置和定制。 为了使它更加强大而且易于配置&#xff0c;我们对 MyBatis 3 中的缓存实现进行了许多改进。 默认情况下&#xff0c;只启用了本地的会话缓存&#xff0c;它仅仅对一个会话中的数…

【Java】异常处理

异常本质上是程序上的错误&#xff0c;包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等. 错误在我们编写程序的过程中会经常发生&#xff0c;包括编译期间和运行期间的错误&#xff0c;在编译期间出现的错误有编译器帮助我们一起修正&#xff0c;…

使用java代码向mysql数据库插入100万条数据

使用java代码向mysql数据库插入100万条数据 使用springboot集成Mysql数据库&#xff0c;并使用java代码循环向msql数据库插入100万条数据&#xff0c;并测试插入时间 目录结构使用java代码向mysql数据库插入100万条数据一、使用工具二、项目结构图创建springboot项目启动类创建…

高并发-防止雪崩与穿透

一、DB查询前加锁 /** * 本地堆内缓存&#xff0c;优先级最高 */ ON_HEAP(1), /** * 本地堆外缓存&#xff0c;不影响GC&#xff0c;可以管理比堆内缓存更多的数据 * 数据get/set涉及序列化&#xff0c;性能次于本地堆内缓存 */ OFF_HE…

手撕红黑树

目录 一、概念 二、红黑树的插入操作 第一步: 按照二叉搜索树的规则插入新节点 第二步: 插入后检测性质是否造到破坏&#xff0c;若遭到破坏则进行调整 情况一: cur为红&#xff0c;parent为红&#xff0c;grandfather为黑&#xff0c;uncle存在且为红 情况二: cur为红&a…