排班系统

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int n = 0;
int rest[7][7];

char name[10][3]={"赵","钱","孙","李","周","吴","陈","郑","马","陈"};
int who[7];

void Get_Who()
{
	int i,j,flag;
	srand(time(NULL));
	for(i=0;i<7;i++)
	{
		do
		{
			flag=0;
			who[i]=rand()%10;
			for(j=0;j<i;j++)
			{
				if(who[i]==who[j])
				{
					flag=1;
					break;
				}
			}
		}while(flag);
	}
}

void swap(int *a, int *b) 
{     
    int m;     
    m = *a;     
    *a = *b;     
    *b = m; 
} 

void perm(int list[], int k, int m)
{
    int i,s;
 int j;
    if(k > m)
    {
  for (i=0; i<7; i++)
  {
   for (j=0; j<7; j++)
   {
    if (rest[i][j] == -1)
     return;
    if (rest[i][j] != list[i])
     continue;
    if (rest[i][j] == list[i])
     break;
   }
  }

  n++;
  printf("Solution: %d\n", n);
  for(s=0;s<7;s++)
  {
	  printf("%6s",name[who[s]]);
  }
  printf("\n");
  printf("=============================================================\n");
  for(i = 0; i <= m; i++)
  {
   switch (list[i])
   {
    case 1: printf("星期一 ");
     break;
    case 2: printf("星期二 ");
     break;
    case 3: printf("星期三 ");
     break;
    case 4: printf("星期四 ");
     break;
    case 5: printf("星期五 ");
     break;
    case 6: printf("星期六 ");
     break;
    case 7: printf("星期日 ");
     break;
    default:
     break;
   }
  }
        printf("\n\n\n");
    }
    else
    {
        for(i = k; i <= m; i++)
        {
             swap(&list[k], &list[i]);
             perm(list, k + 1, m);
             swap(&list[k], &list[i]);
        }
    }
}

int main() 
{
    int list[] = {1, 2, 3, 4, 5, 6, 7};
 int i, j;
  Get_Who();
  for(i = 0; i < 7; i++)
  {
  printf("%6s", name[who[i]]);
 }
printf("\n");
 for(i = 0; i < 7; i++)
 {
  printf("%s 选择休息日:\n", name[who[i]]);
  for(j = 0; j < 7; j++)
  {
   scanf("%d", &rest[i][j]);
   if(rest[i][j] == -1)
    break;
  }
 }
 printf("\n\n\n");
 perm(list,0,6);
 printf("总计:%d\n", n);
 getchar();
 getchar();
    return 0;
}
  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些思路和建议。 保安系统需要实现的功能主要包括: 1. 记录保安员的基本信息,包括姓名、性别、年龄、联系方式等; 2. 记录每个保安员的情况,包括日期、次等; 3. 支持查询某个时间段内某个保安员的情况; 4. 支持查询某个时间段内某个次的保安员情况; 5. 支持添加、修改、删除保安员的信息和情况。 下面是一个简单的实现思路: 1. 定义保安员结构体 ``` typedef struct { char name[50]; // 姓名 char gender[10]; // 性别 int age; // 年龄 char phone[20]; // 联系方式 } SecurityGuard; ``` 2. 定义结构体 ``` typedef struct { char date[20]; // 日期,格式为YYYY-MM-DD char shift[20]; // 次,如“早”、“中”、“晚”等 int guard_id; // 保安员编号 } Schedule; ``` 3. 定义保安员和的数组 ``` #define MAX_GUARDS 50 #define MAX_SCHEDULES 1000 SecurityGuard guards[MAX_GUARDS]; int num_guards = 0; Schedule schedules[MAX_SCHEDULES]; int num_schedules = 0; ``` 4. 实现添加、修改、删除保安员信息的函数 ``` void add_guard() { SecurityGuard guard; printf("请输入保安员姓名:"); scanf("%s", guard.name); printf("请输入保安员性别:"); scanf("%s", guard.gender); printf("请输入保安员年龄:"); scanf("%d", &guard.age); printf("请输入保安员联系方式:"); scanf("%s", guard.phone); guards[num_guards++] = guard; printf("添加成功!\n"); } void modify_guard() { int id; printf("请输入要修改的保安员编号:"); scanf("%d", &id); if (id < 1 || id > num_guards) { printf("保安员编号无效!\n"); return; } SecurityGuard guard = guards[id - 1]; printf("请输入保安员姓名:"); scanf("%s", guard.name); printf("请输入保安员性别:"); scanf("%s", guard.gender); printf("请输入保安员年龄:"); scanf("%d", &guard.age); printf("请输入保安员联系方式:"); scanf("%s", guard.phone); guards[id - 1] = guard; printf("修改成功!\n"); } void delete_guard() { int id; printf("请输入要删除的保安员编号:"); scanf("%d", &id); if (id < 1 || id > num_guards) { printf("保安员编号无效!\n"); return; } for (int i = id - 1; i < num_guards - 1; i++) { guards[i] = guards[i + 1]; } num_guards--; printf("删除成功!\n"); } ``` 5. 实现添加、修改、删除保安员的函数 ``` void add_schedule() { Schedule schedule; printf("请输入日期(格式为YYYY-MM-DD):"); scanf("%s", schedule.date); printf("请输入次:"); scanf("%s", schedule.shift); printf("请输入保安员编号:"); scanf("%d", &schedule.guard_id); if (schedule.guard_id < 1 || schedule.guard_id > num_guards) { printf("保安员编号无效!\n"); return; } schedules[num_schedules++] = schedule; printf("添加成功!\n"); } void modify_schedule() { int id; printf("请输入要修改的编号:"); scanf("%d", &id); if (id < 1 || id > num_schedules) { printf("编号无效!\n"); return; } Schedule schedule = schedules[id - 1]; printf("请输入日期(格式为YYYY-MM-DD):"); scanf("%s", schedule.date); printf("请输入次:"); scanf("%s", schedule.shift); printf("请输入保安员编号:"); scanf("%d", &schedule.guard_id); if (schedule.guard_id < 1 || schedule.guard_id > num_guards) { printf("保安员编号无效!\n"); return; } schedules[id - 1] = schedule; printf("修改成功!\n"); } void delete_schedule() { int id; printf("请输入要删除的编号:"); scanf("%d", &id); if (id < 1 || id > num_schedules) { printf("编号无效!\n"); return; } for (int i = id - 1; i < num_schedules - 1; i++) { schedules[i] = schedules[i + 1]; } num_schedules--; printf("删除成功!\n"); } ``` 6. 实现查询保安员情况的函数 ``` void query_guard_schedule() { int id; char start_date[20], end_date[20]; printf("请输入保安员编号:"); scanf("%d", &id); printf("请输入起始日期(格式为YYYY-MM-DD):"); scanf("%s", start_date); printf("请输入结束日期(格式为YYYY-MM-DD):"); scanf("%s", end_date); printf("保安员%s在%s至%s期间的情况如下:\n", guards[id - 1].name, start_date, end_date); printf("日期\t次\n"); for (int i = 0; i < num_schedules; i++) { if (schedules[i].guard_id == id && strcmp(schedules[i].date, start_date) >= 0 && strcmp(schedules[i].date, end_date) <= 0) { printf("%s\t%s\n", schedules[i].date, schedules[i].shift); } } } ``` 7. 实现查询次保安员情况的函数 ``` void query_shift_schedule() { char shift[20], start_date[20], end_date[20]; printf("请输入次:"); scanf("%s", shift); printf("请输入起始日期(格式为YYYY-MM-DD):"); scanf("%s", start_date); printf("请输入结束日期(格式为YYYY-MM-DD):"); scanf("%s", end_date); printf("%s在%s至%s期间的情况如下:\n", shift, start_date, end_date); printf("日期\t姓名\n"); for (int i = 0; i < num_schedules; i++) { if (strcmp(schedules[i].shift, shift) == 0 && strcmp(schedules[i].date, start_date) >= 0 && strcmp(schedules[i].date, end_date) <= 0) { printf("%s\t%s\n", schedules[i].date, guards[schedules[i].guard_id - 1].name); } } } ``` 以上是一个简单的保安系统的实现思路和代码示例,具体实现还需要根据实际需求进行调整和优化。希望能对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值