基于C语言的轮班查询器

本文介绍了作者为满足父亲查询轮班需求而编写的C语言轮班查询器。查询器遵循“三班倒”制度,包括晚班、早班、中班和休息四种状态,每八天轮换一次。通过用户输入日期,结合班组信息,计算出对应轮班状态和星期。文章包含了编写思路、实现效果和代码,同时也反思了使用goto语句的不足。
摘要由CSDN通过智能技术生成

创作背景

轮班,顾名思义,就是员工按照轮休制度参加工作的时间,一般分为“两班倒”和“三班倒”,而对于员工而言,轮班表就是他们上下班的工作时间表。现行很多大众化的日历或者app中都无法实现自动编排轮班,导致部分员工如果需要超前知晓轮班时间就需要一轮一轮递推,过程十分繁琐,而且容易出错。于是,一个能够查询员工轮班时间的执行文件就十分有必要了。2021年2月12日晚,笔者父亲来电,希望能够编出一种帮他查询轮休的代码或者可执行文件。挂断电话后,稍作思考,便有了思路,第二天上午经过几轮修改,一种基于C语言的轮班查询器得以完善。

具体要求

笔者父亲工作的地方是按照“三班倒”的轮休制度来操作的,总共分为“甲、乙、丙、丁”四种班组,分别按照不同的作息上班,但总体轮休办法基本一致,具体为“晚班、早班、中班、休息”四种工作时间,按照“晚班、早班、中班、休息”的顺序,每种工作时间执行两天,往复递推,例如,星期一二是晚班、星期三四是早班、星期五六是中班、星期日和下星期的星期一则为休息,往复轮休。该轮班查询器不仅要满足以上条件,并且希望能够查询轮休的同时,知晓星期。

编写思路

1、由于是四种班组,因此就可以定义一个一维数组,数组中储存分别表示“甲、乙、丙、丁”四种班组的代码,代码运行前,首先咨询使用者班组,再进行下一步操作。
2、首先设定“甲、乙、丙、丁”四种班组的某一日期的轮班代码,如2021年1月1日甲班是早班第二天,再让用户输入某个日期,拿用户输入的日期与所设定的固定日期进行比较,计算差值,得到该日期与前面设定的固定日期的差,再利用每八天轮班一次,用差值除以8取余,得到余数,余数“1、2、3、4、5、6、7、8”分别对应“晚班第一天、晚班第二天、早班第一天、早班第二天、中班第一天、中班第二天、休息第一天、休息第二天”。
3、计算星期。利用基姆拉尔森计算公式计算该日期的星期,w = ( day + 2month +3(month+1)/5 + year + year/4 - year/100 +year/400)%7,根据已知公元1年1月1日星期一来推算。其中,要把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
4、如果输入日期与设定固定日期的差值超过一年,则利用循环来重复定义固定日期和轮休代码,即“自适应环境变化”。

实现效果演示

在这里插入图片描述

源码

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

/*
*运行软件:Visual C++
*作者:彭晟祺
*完成日期:2021年2月12日
*/

int main()
{
   

	int year0,month0,day0,year,month,day,lunban,runnian,a,b,c,d,e,n,m,i,x;
	char weekname[][10]={
   1,2,3,4,5,6,7};
	printf("轮班查询器 V1.3\n\n开发者:祺祺\n完善时间:2021年2月13日\n班次说明:1-甲班、2-乙班、3-丙班、4-丁班\n前言:由于作者水平有限,软件运行过程中难免会出现bug,数据仅供参考,希望使用者批评指正!\n\n\n");
	printf("按回车键确认\n");
repeat:
	printf("\n请按照班次说明输入班次代码(例如:1):");
	scanf("%d",&i);
	switch(i)
	{
   
	case 1:
		lunban=4;
		printf("\n您的班次为:甲班\n");
		break;
	case 2:
		lunban=6;
		printf("\n您的班次为:乙班\n");
		break;
	case 3:
		lunban=8;
		printf("\n您的班次为:丙班\n");
		break
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
课 程 设 计 课程设计名称:保 安 值 班 系 统 专 业 班 级 : 电子信息工程2班 电子信息工程 专业课程设计任务书 "学生姓名 " "专业班级 "电信2班 "学号 " " "题 目 "保安值班系统 " "课题性质 " "课题来源 " " "指导教师 " "同组姓名 " " "主要内容 "程序要求能够输入每人选择的休息日期,然后经过程序运分析." " " " " "2 保安排班管理,保安排班查询. " " " " " "3 管理员管理 " " "4 程序管理权限的设置 " "任务要求 "1该程序要求应该是能够输入每人选择的休息日期,由于工作需要" " "进行轮休制度,一星期每人只能休息一天。 " " "2先让每一个人选择自己认为合适的休息日,判断是否符合条件 " " "3此程序可以打印轮休的所有可能方案。当然使每个人都满意。 " " "4软件是TC和VC++ " "参考文献 "[1]谭浩强编著. C++程序设计. 北京:清华大学出版社,2005 " " "[2]谭浩强编著. C++程序设计解题与上机指导. 北京:清华大学 " " "出版社,2005 " " "[3]谭浩强编著. C程序设计(第二版). 北京:清华大学出版社 " " ",1999 " " "[4]谭浩强编著. C程序设计设计解题与上机指导(第二版). 北 " " "京:清华大学出版社,1999 " " "[5] 孙淑霞等C/C++程序设计实验指导与测试(第2版),电子工 " " "业出版社,2007.1 " "审查意见 "指导教师签字: " " "教研室主任签字: 年 月 " " "日 " 基本要求有下面几点: 1该程序要求应该是能够输入每人选择的休息日期,由于工作需要进行轮休制度,一星期 每人只能休息一天。 2先让每一个人选择自己认为合适的休息日,判断是否符合条件 3此程序可以打印轮休的所有可能方案。当然使每个人都满意 4每个人先给出自己的想休息的星期天,然后,经过商量,让主管人员给出可能的方案。 例如有下的例子和要求 某公司有7名保安人员:赵、钱、孙、李、周、吴、陈。由于工作需要进行轮休制度, 一星期每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制一程序, 打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日,每个人先选 择自己的休息,然后经过分析和商量,列出有关的可能的方案。 赵:星期四 钱:星期一、 孙:星期三、 李:星期五 周:星期日 吴:星期二、 陈:星期六、 基于上述分析,引入的思想,建立一套面向企业单位是十分必要的。系统的创建与实 施可以为生活区或者企业提供很方便的服务。便于保安人员的工作服务。为了使每个人 都满意,可以实施轮流的方案,这样每个人就处于平等的优势,当然保安人员可以请假 或者经过他们自己的商量,暂时的替班。 课程设计的目的和要求 1 课程设计的目的 C语言课程设计的主要目的是培养我们综合运用C语言程序设计课程所学到的知识,做 相应的自主练习,消化课堂所讲解的内容,通过编写C程序,积累调试C程序的经验,完 成所要求的题目,逐渐培养编程能力,解决实际问题的能力,以及严谨的工作态度和良 好的程序设计习惯。 1. 进一步掌握和利用C语言进行程序设计的能力。 2. 进一步培养我们结构化程序设计的思想,加深对高级语言基本语言要素和控制 结构的理解。 3. 针对C语言的重点和难点内容进行训练,独立完成有一定工作量的课程设计任 务,同时强调好课程设计风格。 4. 掌握C语言的编程技巧和上机调试程序的方法。 5. 掌握程序设计的常用法。 6. 掌握书写程序开发文档的能力。 通过课程设计的训练,我们应该能够了解程序设计的基本开发过程,掌握编写、调试 和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。 另外,C语言本身的复杂性也是其比较难学的原因之一。C不仅可以用来开发应用程序 ,更可用来设计系统程序。比起其他语言,C增加的许多特点就是为了设计高质量的系统 软件。显然,这些特点也增加了学习C的难度。 因此,在程序设计的时候必须树立以下观念:学习思考的方法比学习语言更重要,琢 磨程序设计的思维模式比琢磨C语言的知识更重要,培养自己的思考能力比记忆语言知识 更重要。 C语言程序设计的主要任务是要求我们遵循软件开发过程的基本规范,运用结构化程 序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C语言程序及 编写设计报告。 1.2 课程设计的要求 课程设计的选题必须围绕本课程内容,确定一个或几个难度、份量适当的具体的工程 实际项目,以便较系统地训练学生综合运用本课程所学知识解决工程实际问题的能力。 课程设计题目都应给出原始数据。课程设计题目需要完成的工作量。课程设计的工作量 包括:设计计(
C程序 课程设计报告 201— 201 学年第 学期 课程名称 C语言课程设计 设计题目 《排班系统》 学生姓名 学 号 专业班级 指导教师 201 年 月 日 目录 一、设计任务书…………………………………………………………3 1、题目与要求…………………………………………………3 2、本程序涉及的知识点………………………………………3 二、程序流程图…………………………………………………………4 三、程序代码设计………………………………………………………5 四、程序调试过程………………………………………………………6 五、程序运行过程………………………………………………………6 六、程序有待改进的地方………………………………………………9 七、程序设计总结………………………………………………………9 八、致谢…………………………………………………………………9 参考文献…………………………………………………………………9 附录…………………………………………………………………… 10 一、设计任务书 1、题目与要求 赵:星期二、星期四本程序实现的功能是对7名保安人员进行排班,要求每个人在一 星期可以休息一天。每名保安可以自行选择自己想要的休息日,而对于休息日的选择 既可以是某一天,也可以是某几天的其一天。当7名保安依次输入自己想要的休息日 后,系统将会给出可能的值班安排。若系统给出的值班安排是0种,证明系统对7名保安 的选择无法作出排班,需要重新输入。 具体题目:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需 要进行轮休制度,一星期每人休息一天。预先让每一个人选择自己认为合适的休息日 。请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息 日如下: 钱:星期一、星期六 孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六 吴:星期二、星期五 陈:星期三、星期六、星期日 2、本程序涉及的知识点 输入函数和输出函数、变量的定义、for语句和switch-case语句的使用等 二、程序流程图 三、程序代码设计 输入函数和输出函数、变量的定义、for语句和switch- case语句、ss字符串的使用等。 输入函数: 1)函数原形:自定义swap(int *a, int *b)函数 2) 功 能:swap()函数利用取地址符号&完成对程序某个变量的赋值,进而程序判断交换的 功能。 3)函数原形:get char() 4)功 能:向计机输入一个字符。 5)变量及类型: int a,b,m,k: 整型形参变量,接收main()传过来的随机数字。 int i:循环控制变量,其i 具有自加功能。 int j: 整型形参变量,其j 具有自加功能。 6)说 明:输入字符后需要输入-1,待系统做出判断后往下执行。 选择判断结构 switch- case语句:从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行 ,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的 第一个语句继续执行,并忽略其他case;假如任何一个case语句的值都不等于表达式的 值,就运行可选标签default之下的语句。 假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会 跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。 for语句:for(语句1 ; 语句2 ; 语句3 ) {循环体} 执行时,先执行一次语句1(注意只执行一次) 之后判断语句2是否成立 1).如果成立执行循环体,之后执行语句3。再返回语句2判断条件是否成立?成立执行循 环体后再执行语句3,如此直到循环体不成立则跳出循环 2)如果语句2不成立,则不执行循环体也不执行语句3直接跳出循环。 输出函数: 1)函数原形:printf("======",*) 2)功 能:输出相关提示信息及最后结果。 3)相关变量: int n:输出正确结果。 int i,j:输出计正确,计排班情况。 4)说 明:输出时要把要输出的信息用双引号括起来,输出数字时要在其代表变量前 加逗号。 四、程序调试过程 由于对C语言知识储备有限,且时间精力有限,我们在设计程序程序的过程遇到了 不少问题。 首先遇到的问题是:使用何种数组以及如何使输出变得简洁易懂,易操作。在思考讨 论之后,我们决定尽量"使输入数字化,输出结果文字化"的做法,也就是再输入星期几 的时候直接用数字代替,在输出的时候,为了更加直观,就需要把原先的数字输出为星 期几这种文字的形式;在单个对象输出结束之后,我们选择了 -1这个不会与其他日期混淆的数字,以此表示可以对下一个对象进行输出。这就需要
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值