C语言课程设计——排班系统 DFS解决(附课设报告)

数据库课程设计——某工厂的物料管理系统(附Java源码与课程设计报告)
数据库课程设计——某商店进销存管理系统(附Java源码与课程设计报告)
数据库课程设计——某煤气公司送气管理系统(附课设报告)
数据库课程设计——基于JavaEE的企业进销存系统(附Java源码与课程设计报告)
Java课程设计——哈夫曼编码译码系统的Java语言实现
C语言课程设计——班级成绩管理系统(附课设报告)
C语言课程设计——排班系统 DFS解决(附课设报告)

排班系统——DFS解决!

课设题目描述:

学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下:
钱:星期一、星期六
赵:星期二、星期四
孙:星期三、星期日
李:星期五
周:星期一、星期四、星期六
吴:星期二、星期五
陈:星期三、星期六、星期日
运行结果:
Solution: 1

赵 钱 孙 李 周 吴 陈

星期四 星期一 星期三 星期五 星期六 星期二 星期日

Solution: 2

赵 钱 孙 李 周 吴 陈

星期四 星期一 星期日 星期五 星期六 星期二 星期三

Solution: 3

赵 钱 孙 李 周 吴 陈

星期四 星期六 星期三 星期五 星期一 星期二 星期日

Solution: 4

赵 钱 孙 李 周 吴 陈

星期四 星期六 星期日 星期五 星期一 星期二 星期三

课设源代码:

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;

int n;
int rest[7][7];
string choice;
char week[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
char weekkk[7][15]={"星期日、","星期一、","星期二、","星期三、","星期四、","星期五、","星期六、"};
char people[7][5]={"赵","钱","孙","李","周","吴","陈"}; 

void distinguish(){
	for(int i=0;i<7;++i){
		cout<<people[i]<<":";
		for(int j=0;j<6;++j){
			cin>>choice;
			for(int k=0;k<7;++k){
				if(choice==weekkk[k]){
					rest[i][k]=1;
					choice="";
					break;
				}
			}
			if(choice=="") continue;
			for(int k=0;k<7;++k){
				if(choice==week[k]){
					rest[i][k]=1;
					choice="";
					break;
				}
			}
			if(choice=="") break;
		}	
	}
} 

bool judge(int x,int y){
	for(int i=0;i<x;++i)
		if(rest[i][y]==8)
			return false;
	return true;
}

void show(){
	cout<<"Solution: "<<n<<endl;
	cout<<"赵 钱 孙 李 周 吴 陈"<<endl;
	cout<<"============================================================="<<endl;
	for(int i=0;i<7;++i){
		for(int j=0;j<7;++j){
			if(rest[i][j]==8){
				cout<<week[j]<<" ";
				break;
			}
		}
	}
	cout<<endl<<endl;
}

void dfs(int person){
	if(person==7){
		n++;
		show();
		return;
	}
	for(int j=0;j<7;++j){
		if(rest[person][j]==1&&judge(person,j)){
			rest[person][j]=8;
			dfs(person+1);
			rest[person][j]=1;
		}
	}
}

int main()
{
	memset(rest,0,sizeof(rest));
	cout<<"注意!每次输入完“、”后请输入空格再继续输入!"<<endl; 
	cout<<"注意!每次输入完“、”后请输入空格再继续输入!"<<endl<<endl; 
	distinguish();
	cout<<endl; 
	dfs(0);
	return 0;
}

运行结果:

在这里插入图片描述

课程设计报告:

https://download.csdn.net/download/weixin_45953673/14011037

  • 26
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
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这个不会与其他日期混淆的数字,以此表示可以对下一个对象进行输出。这就需要
C语言课程设计——学生成绩管理系统(源代码 详细注释).zip》是一个包含有源代码和详细注释的学生成绩管理系统的压缩文件。 学生成绩管理系统是一种用于管理学生的考试成绩和相关信息的软件工具。该系统基于C语言开发,通过使用源代码和详细注释来了解其内部工作原理和实现细节。 源代码是指程序员使用C语言编写的计算机程序的文本文件。它包含一系列的指令和算法来实现特定的功能。通过查看源代码,我们可以了解程序是如何实现学生成绩管理的,例如如何读取和存储学生信息、计算和存储考试成绩等。同时,源代码中也包含了程序的各种功能和特性的具体实现细节。 详细注释是在源代码中加入的对代码的解释和说明,用于帮助程序员和读者理解代码的逻辑和功能。注释通常以特定的标记符或特殊的注释语法来标识,并且会提供对代码行为、变量、函数和算法的解释。通过详细注释,我们可以更好地理解程序的运行逻辑和实现方式,同时也帮助我们更加容易地进行修改和维护。 压缩文件(.zip)是一种常见的文件格式,可以将多个文件或文件夹压缩成一个单独的文件。通过将源代码和详细注释压缩成一个文件,可以方便地进行存储、传输和共享。 因此,对于《C语言课程设计——学生成绩管理系统(源代码 详细注释).zip》,我们可以通过解压缩该文件并查看源代码和详细注释来了解其中的实现细节和代码逻辑。这对于学习C语言编程以及了解学生成绩管理系统设计和实现都是非常有帮助的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木何日可逢春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值