用C语言设计一考勤管理系统,记录学生的缺课情况。基本要求: 数据的定义:学生数据,包括姓名,车名,核定载客人数;课程数据,包括课程信息,比如课程名称,上课时间(星期几第几节课),地点; 考勤类(Attendance)数据,包括学生在具体时间课程出席情况。 主要功能: 1、 录入学生的缺课记录。 2、 修改某个学生的缺课记录。 3、 查询某个学生的缺课情况。 统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序。
时间: 2023-06-19 17:03:54 浏览: 104
以下是一个简单的考勤管理系统的C语言代码示例(仅供参考):
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
struct student {
char name[20]; // 姓名
char car[20]; // 车名
int capacity; // 核定载客人数
};
// 定义课程结构体
struct course {
char name[20]; // 课程名称
int weekday; // 星期几
int period; // 第几节课
char location[20]; // 地点
};
// 定义考勤记录结构体
struct attendance {
char name[20]; // 学生姓名
char course_name[20]; // 课程名称
int weekday; // 星期几
int period; // 第几节课
int status; // 出席情况,0表示缺课,1表示出席
};
// 学生数据数组
struct student students[100];
int student_count = 0;
// 课程数据数组
struct course courses[100];
int course_count = 0;
// 考勤数据数组
struct attendance attendances[1000];
int attendance_count = 0;
// 录入学生信息
void add_student() {
printf("请输入学生姓名:");
scanf("%s", students[student_count].name);
printf("请输入车名:");
scanf("%s", students[student_count].car);
printf("请输入核定载客人数:");
scanf("%d", &students[student_count].capacity);
student_count++;
}
// 录入课程信息
void add_course() {
printf("请输入课程名称:");
scanf("%s", courses[course_count].name);
printf("请输入上课时间(星期几):");
scanf("%d", &courses[course_count].weekday);
printf("请输入上课时间(第几节课):");
scanf("%d", &courses[course_count].period);
printf("请输入上课地点:");
scanf("%s", courses[course_count].location);
course_count++;
}
// 录入考勤记录
void add_attendance() {
printf("请输入学生姓名:");
scanf("%s", attendances[attendance_count].name);
printf("请输入课程名称:");
scanf("%s", attendances[attendance_count].course_name);
printf("请输入上课时间(星期几):");
scanf("%d", &attendances[attendance_count].weekday);
printf("请输入上课时间(第几节课):");
scanf("%d", &attendances[attendance_count].period);
printf("请输入出席情况(0表示缺课,1表示出席):");
scanf("%d", &attendances[attendance_count].status);
attendance_count++;
}
// 修改考勤记录
void modify_attendance() {
char name[20];
char course_name[20];
int weekday;
int period;
printf("请输入学生姓名:");
scanf("%s", name);
printf("请输入课程名称:");
scanf("%s", course_name);
printf("请输入上课时间(星期几):");
scanf("%d", &weekday);
printf("请输入上课时间(第几节课):");
scanf("%d", &period);
for (int i = 0; i < attendance_count; i++) {
if (strcmp(attendances[i].name, name) == 0 && strcmp(attendances[i].course_name, course_name) == 0 && attendances[i].weekday == weekday && attendances[i].period == period) {
printf("请输入修改后的出席情况(0表示缺课,1表示出席):");
scanf("%d", &attendances[i].status);
printf("修改成功!\n");
return;
}
}
printf("没有找到该考勤记录!\n");
}
// 查询考勤记录
void query_attendance() {
char name[20];
printf("请输入学生姓名:");
scanf("%s", name);
printf("学生姓名\t课程名称\t星期几\t第几节课\t出席情况\n");
for (int i = 0; i < attendance_count; i++) {
if (strcmp(attendances[i].name, name) == 0) {
printf("%s\t\t%s\t\t%d\t%d\t\t%s\n", attendances[i].name, attendances[i].course_name, attendances[i].weekday, attendances[i].period, attendances[i].status == 0 ? "缺课" : "出席");
}
}
}
// 统计旷课情况
void count_absent() {
int start_weekday;
int end_weekday;
printf("请输入统计起始日期(星期几):");
scanf("%d", &start_weekday);
printf("请输入统计结束日期(星期几):");
scanf("%d", &end_weekday);
int count[100] = {0}; // 统计旷课次数
for (int i = 0; i < attendance_count; i++) {
if (attendances[i].weekday >= start_weekday && attendances[i].weekday <= end_weekday && attendances[i].status == 0) { // 如果在统计日期范围内且缺课
count[i]++; // 统计旷课次数
}
}
for (int i = 0; i < student_count; i++) {
int absent_count = 0;
for (int j = 0; j < attendance_count; j++) {
if (strcmp(students[i].name, attendances[j].name) == 0 && attendances[j].weekday >= start_weekday && attendances[j].weekday <= end_weekday && attendances[j].status == 0) { // 如果是该学生的记录且在统计日期范围内且缺课
absent_count += count[j]; // 累加旷课次数
}
}
if (absent_count > 0) {
printf("%s 旷课 %d 次\n", students[i].name, absent_count);
}
}
}
int main() {
int choice;
while (1) {
printf("\n\n");
printf("************ 考勤管理系统 ************\n");
printf("* *\n");
printf("* 1. 录入学生信息 *\n");
printf("* 2. 录入课程信息 *\n");
printf("* 3. 录入考勤记录 *\n");
printf("* 4. 修改考勤记录 *\n");
printf("* 5. 查询考勤记录 *\n");
printf("* 6. 统计旷课情况 *\n");
printf("* 7. 退出系统 *\n");
printf("* *\n");
printf("****************************************\n");
printf("请输入功能对应的数字:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
add_course();
break;
case 3:
add_attendance();
break;
case 4:
modify_attendance();
break;
case 5:
query_attendance();
break;
case 6:
count_absent();
break;
case 7:
printf("感谢使用本系统,下次再见!\n");
return 0;
default:
printf("请输入正确的数字!\n");
break;
}
}
return 0;
}
```
以上代码仅是一个简单的示例,实际的考勤管理系统可能需要更复杂的功能和更完善的数据结构。