只用c语言写排班系统代码
时间: 2023-12-23 08:02:16 浏览: 309
好的,以下是一个简单的C语言排班系统的代码示例,供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEE 100 // 最大员工数量
#define MAX_SHIFT 10 // 最大班次数量
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_DEPT_LEN 20 // 部门名称最大长度
// 员工信息结构体
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
char id[10]; // 工号
char dept[MAX_DEPT_LEN]; // 所属部门
int available_shifts[MAX_SHIFT]; // 可排班次
} Employee;
// 班次信息结构体
typedef struct {
char name[MAX_NAME_LEN]; // 班次名称
int duration; // 班次时长(小时)
int required_employees; // 所需人数
} Shift;
// 排班信息结构体
typedef struct {
int employee_id; // 员工ID
int shift_id; // 班次ID
} Schedule;
int num_employee = 0; // 员工数量
int num_shift = 0; // 班次数量
Employee employees[MAX_EMPLOYEE]; // 员工数组
Shift shifts[MAX_SHIFT]; // 班次数组
Schedule schedule[MAX_EMPLOYEE * MAX_SHIFT]; // 排班数组
int num_schedule = 0; // 排班数量
// 添加员工
void add_employee() {
if (num_employee == MAX_EMPLOYEE) {
printf("员工数量已达到最大值,无法添加!\n");
return;
}
printf("请输入员工信息:\n");
printf("姓名:");
scanf("%s", employees[num_employee].name);
printf("工号:");
scanf("%s", employees[num_employee].id);
printf("部门:");
scanf("%s", employees[num_employee].dept);
printf("可排班次(输入-1结束):");
int shift_id = 0;
while (shift_id != -1 && employees[num_employee].available_shifts[num_shift] < MAX_SHIFT) {
scanf("%d", &shift_id);
if (shift_id != -1) {
employees[num_employee].available_shifts[num_shift++] = shift_id;
}
}
num_employee++;
printf("员工添加成功!\n");
}
// 添加班次
void add_shift() {
if (num_shift == MAX_SHIFT) {
printf("班次数量已达到最大值,无法添加!\n");
return;
}
printf("请输入班次信息:\n");
printf("名称:");
scanf("%s", shifts[num_shift].name);
printf("时长(小时):");
scanf("%d", &shifts[num_shift].duration);
printf("所需人数:");
scanf("%d", &shifts[num_shift].required_employees);
num_shift++;
printf("班次添加成功!\n");
}
// 打印员工信息
void print_employee(int id) {
printf("姓名:%s\n", employees[id].name);
printf("工号:%s\n", employees[id].id);
printf("部门:%s\n", employees[id].dept);
printf("可排班次:");
for (int i = 0; i < num_shift && employees[id].available_shifts[i] != -1; i++) {
printf("%s ", shifts[employees[id].available_shifts[i]].name);
}
printf("\n");
}
// 打印班次信息
void print_shift(int id) {
printf("名称:%s\n", shifts[id].name);
printf("时长(小时):%d\n", shifts[id].duration);
printf("所需人数:%d\n", shifts[id].required_employees);
}
// 查找员工
int find_employee(char *id) {
for (int i = 0; i < num_employee; i++) {
if (strcmp(employees[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 查找班次
int find_shift(char *name) {
for (int i = 0; i < num_shift; i++) {
if (strcmp(shifts[i].name, name) == 0) {
return i;
}
}
return -1;
}
// 添加排班
void add_schedule() {
char id[10], name[MAX_NAME_LEN];
printf("请输入员工工号:");
scanf("%s", id);
int employee_id = find_employee(id);
if (employee_id == -1) {
printf("未找到该员工!\n");
return;
}
printf("请输入班次名称:");
scanf("%s", name);
int shift_id = find_shift(name);
if (shift_id == -1) {
printf("未找到该班次!\n");
return;
}
for (int i = 0; i < num_schedule; i++) {
if (schedule[i].employee_id == employee_id && schedule[i].shift_id == shift_id) {
printf("该员工已被排班!\n");
return;
}
}
if (shifts[shift_id].required_employees <= 0) {
printf("该班次已满员!\n");
return;
}
if (employees[employee_id].available_shifts[shift_id] == -1) {
printf("该员工不可排该班次!\n");
return;
}
schedule[num_schedule].employee_id = employee_id;
schedule[num_schedule].shift_id = shift_id;
num_schedule++;
shifts[shift_id].required_employees--;
printf("排班成功!\n");
}
// 显示排班表
void print_schedule() {
printf("排班表:\n");
for (int i = 0; i < num_schedule; i++) {
printf("%s %s\n", employees[schedule[i].employee_id].name, shifts[schedule[i].shift_id].name);
}
}
int main() {
int choice = 0;
while (1) {
printf("请选择操作:\n");
printf("1.添加员工\n");
printf("2.添加班次\n");
printf("3.查看员工信息\n");
printf("4.查看班次信息\n");
printf("5.添加排班\n");
printf("6.查看排班表\n");
printf("7.退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_employee();
break;
case 2:
add_shift();
break;
case 3:
printf("请输入员工工号:");
char id[10];
scanf("%s", id);
int employee_id = find_employee(id);
if (employee_id == -1) {
printf("未找到该员工!\n");
} else {
print_employee(employee_id);
}
break;
case 4:
printf("请输入班次名称:");
char name[MAX_NAME_LEN];
scanf("%s", name);
int shift_id = find_shift(name);
if (shift_id == -1) {
printf("未找到该班次!\n");
} else {
print_shift(shift_id);
}
break;
case 5:
add_schedule();
break;
case 6:
print_schedule();
break;
case 7:
exit(0);
default:
printf("无效操作!\n");
break;
}
}
return 0;
}
```
这个排班系统实现了添加员工、添加班次、查看员工信息、查看班次信息、添加排班、查看排班表等功能。排班算法部分没有在代码中实现,需要根据具体需求进行编写。希望对您有所帮助。
阅读全文