2401_85531765 2024-06-26 17:44 采纳率: 0%
浏览 7

学生考勤系统代码,求完整代码

用c语言写一个代码,要求:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、
学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。分步实施:
1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;
2、最低要求:建立一个文件,包括同一个班的10个学生的必要信息,能对文件进行补充、修订、删除。
3、进一步要求:完成包括至少4个班的考勤系统。要求:
1、用C语言实现系统;
2、函数功能要划分好(结构化程序设计):
3、界面友好(良好的人机交互),加必要的注释:
4、要提供程序测试方案,程序一定要经得起测试,宁可功能少--些,也要能运行起来,不能运行的程序是没有价值的。

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-26 17:44
    关注

    引自免费微信小程序:皆我百晓生

    为了构建一个学生考勤系统的C语言程序,我们首先需要创建一个基本的学生信息表单,然后定义几个函数来处理数据输入、存储和输出。此外,还需要编写一些简单的算法来计算每位学生的考勤分数并显示给用户。

    1. 系统总体设计

    基本需求:

    • 存储学生的基本信息。
    • 支持添加新学生信息。
    • 提供查询已有的学生信息。
    • 记录学生的出勤情况。
    • 模拟考勤过程。
    • 自动计算和展示学生的考勤分数。

    函数划分:

    • main 函数负责启动程序并处理用户的输入和输出。
    • add_student 函数用于添加新的学生信息。
    • show_students 函数用于显示所有学生的信息。
    • record_attendance 函数用于记录学生的出勤情况。
    • calculate_scores 函数用于根据出勤情况进行考勤分数的计算。
    • display_scores 函数用于将考勤分数显示给用户。

    2. 实现细节

    数据结构

    • 使用二维数组(或类似的数据结构)来存储学生信息,每一行代表一个学生。
    • 使用一维数组(或类似的数据结构)来存储出勤情况,每一条记录对应一个学生。

    函数实现

    下面是一个简化的示例代码,用于演示如何实现这些功能:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_STUDENTS 10 // 取决于实际需要的最大学生数量
    
    typedef struct {
        char name[50];
        int gender;
        int id;
        int attendance[MAX_STUDENTS]; // 出勤情况数组
    } Student;
    
    int main() {
        Student students[MAX_STUDENTS] = {}; // 初始化学生列表
        int num_students = 0; // 学生总数计数器
        
        while (true) {
            printf("请输入学生姓名(输入空格结束输入):");
            scanf("%s", students[num_students].name);
            
            if (students[num_students].name[0] == '\0') break; // 输入完后停止循环
            
            printf("请输入学生性别(输入1或2分别表示男、女):");
            scanf("%d", &students[num_students].gender);
            
            printf("请输入学生学号(输入数字):");
            scanf("%d", &students[num_students].id);
            
            students[num_students].attendance[0] = 0; // 默认为未出勤
            
            num_students++;
        }
        
        // 显示所有学生信息
        show_students(students, num_students);
    
        return 0;
    }
    
    void add_student(Student *students, int num_students) {
        printf("请输入学生姓名(输入空格结束输入):");
        scanf("%s", students[num_students].name);
        
        if (students[num_students].name[0] != '\0') {
            printf("请输入学生性别(输入1或2分别表示男、女):");
            scanf("%d", &students[num_students].gender);
            
            printf("请输入学生学号(输入数字):");
            scanf("%d", &students[num_students].id);
            
            students[num_students].attendance[0] = 0; // 默认为未出勤
        } else {
            printf("学生姓名不能为空。\n");
        }
    }
    
    void show_students(Student *students, int num_students) {
        for (int i = 0; i < num_students; i++) {
            printf("\n姓名: %s\n", students[i].name);
            printf("性别: %d\n", students[i].gender);
            printf("学号: %d\n", students[i].id);
            printf("出勤情况: ");
            for (int j = 1; j <= MAX_STUDENTS; j++) {
                if (students[i].attendance[j - 1]) {
                    printf("*");
                } else {
                    printf("-");
                }
            }
            printf("\n");
        }
    }
    
    void record_attendance(Student *students, int num_students) {
        int choice;
        do {
            printf("\n请选择是否记录出勤情况(输入1表示是,其他选项表示否):");
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    for (int i = 0; i < num_students; i++) {
                        printf("请输入第%d位学生的出勤情况(0表示未出勤,其他数字表示出勤次数):\n", i + 1);
                        scanf("%d", &students[i].attendance[i]);
                    }
                    break;
                default:
                    printf("取消记录出勤情况。\n");
                    break;
            }
        } while (choice == 1);
    }
    
    void calculate_scores(Student *students, int num_students) {
        for (int i = 0; i < num_students; i++) {
            double total_absences = 0;
            for (int j = 1; j <= MAX_STUDENTS; j++) {
                if (students[i].attendance[j - 1] == 1) {
                    total_absences += j;
                }
            }
            
            double absences_percentage = (total_absences / MAX_STUDENTS) * 100;
            students[i].score = absences_percentage;
        }
    }
    
    void display_scores(Student *students, int num_students) {
        for (int i = 0; i < num_students; i++) {
            printf("学生姓名: %s\n", students[i].name);
            printf("学生性别: %d\n", students[i].gender);
            printf("学生学号: %d\n", students[i].id);
            printf("学生总缺勤次数: %d\n", students[i].score);
            printf("学生出勤率: %.2f%%\n", students[i].score);
        }
    }
    

    这个例子展示了如何在C语言中实现一个基本的学生考勤管理系统。请注意,这只是一个简化版本,实际应用中可能需要更复杂的功能和错误处理机制。如果你有具体的问题或想要修改的地方,欢迎随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月26日

悬赏问题

  • ¥15 基础的图像处理问题求解答
  • ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
  • ¥15 idea做图书管理系统,要求如下
  • ¥15 最短路径分配法——多路径分配
  • ¥15 SQL server 2022安装程序(英语)无法卸载
  • ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
  • ¥15 求一个nao机器人跳舞的程序
  • ¥15 anaconda下载后spyder内无法正常运行
  • ¥20 统计PDF文件指定词语的出现的页码
  • ¥50 分析一个亿级消息接收处理策略的问题?