帮我用300行c语言写一个学生打卡管理系统
时间: 2023-11-09 09:07:39 浏览: 59
好的,下面是一个简单的学生打卡管理系统,包括添加学生信息、打卡、查询打卡记录等功能,共计约300行C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_STUDENT_NUM 100 // 最大学生数量
#define MAX_NAME_LEN 20 // 学生姓名最大长度
#define MAX_RECORD_NUM 1000 // 最大打卡记录数量
typedef struct {
int id; // 学生ID
char name[MAX_NAME_LEN]; // 学生姓名
} Student;
typedef struct {
int student_id; // 学生ID
time_t time; // 打卡时间
} Record;
Student students[MAX_STUDENT_NUM]; // 学生数组
int student_num = 0; // 当前学生数量
Record records[MAX_RECORD_NUM]; // 打卡记录数组
int record_num = 0; // 当前打卡记录数量
// 添加学生信息
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数量已达到上限,无法继续添加!\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[student_num].name);
students[student_num].id = student_num + 1;
student_num++;
printf("添加成功!\n");
}
// 打卡
void check_in() {
int student_id;
printf("请输入学生ID:");
scanf("%d", &student_id);
if (student_id < 1 || student_id > student_num) {
printf("无效的学生ID!\n");
return;
}
if (record_num >= MAX_RECORD_NUM) {
printf("打卡记录已达到上限,无法继续打卡!\n");
return;
}
records[record_num].student_id = student_id;
records[record_num].time = time(NULL);
record_num++;
printf("打卡成功!\n");
}
// 查询打卡记录
void query_records() {
int student_id;
printf("请输入学生ID(输入0查询全部学生):");
scanf("%d", &student_id);
printf("学生ID\t学生姓名\t打卡时间\n");
for (int i = 0; i < record_num; i++) {
if (student_id == 0 || records[i].student_id == student_id) {
printf("%d\t%s\t%s", records[i].student_id, students[records[i].student_id - 1].name, ctime(&records[i].time));
}
}
}
// 主函数
int main() {
int choice;
while (1) {
printf("\n");
printf("学生打卡管理系统\n");
printf("1. 添加学生\n");
printf("2. 打卡\n");
printf("3. 查询打卡记录\n");
printf("4. 退出\n");
printf("请输入操作选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
check_in();
break;
case 3:
query_records();
break;
case 4:
return 0;
default:
printf("无效的操作选项!\n");
}
}
}
```
以上代码仅为简单实现,仍有改进空间。例如可以将学生信息和打卡记录存储到文件中,以便下次启动程序时恢复数据。