博客
关于我
学生成绩管理系统
阅读量:673 次
发布时间:2019-03-15

本文共 2919 字,大约阅读时间需要 9 分钟。

学习C语言是每一个编程爱好者的必经之路。为完成工作中的编程需求,我阅读了《C Primer Plus》,对基础知识进行了初步了解。为了巩固所学知识,我决定独立开发了一个学生成绩管理系统

主要功能概述

该系统能够完成以下操作:

  • 录入信息:输入学生的基本信息,包括学号、姓名、性别、数学成绩、英语成绩及总成绩。
  • 打印信息:输出已录入的所有学生数据清晰的表格形式。
  • 保存数据:将录入的学生信息保存至指定文件中。
  • 读取数据:从文件中读取并显示学生信息。
  • 统计人数:计算已录入学生的总人数。
  • 查找信息:通过学生姓名查询对应的详细信息。
  • 修改信息:支持对指定学生的信息进行单项修改,包括学号、姓名、性别、成绩等。
  • 删除信息:允许管理员删除特定学生的记录。

开发思路

在编写代码时,主要采用以下方法:

  • 使用while循环接收用户输入,确保程序能够持续运行。
  • 利用switch语句根据用户输入选择相应操作模块,增强代码的可维护性。
  • 将学生信息存储在结构体中,采用链表结构管理学生数据,支持动态添加、删除操作。
  • 在读取文件时,通过将数据转换为字符数组适配输入方式,确保数据读取的准确性。
  • 代码实现

    主菜单显示

    void show_menu() {    printf("*********************************************************\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("8. 删除学生信息\n");    printf("返回主目录\n");    printf("*********************************************************\n");    printf("请输入功能编号\n");}

    主函数逻辑

    int main() {    while (1) {        show_menu();        int choice;        scanf("%d", &choice);        switch (choice) {            case 1: addinfo(); break;            case 2: PrintInfo(); break;            case 3: savestudent(); break;            case 4: ReadStudentInfo(); break;            case 5: CountItem(); break;            case 6: FindStudent(); break;            case 7: ChangeStudent(); break;            case 8: DelStudent(); break;            default: printf("输入有误,请重选\n"); break;        }    }}

    信息录入

    void addinfo() {    Node *newNode = malloc(sizeof(Node));    newNode->next = NULL;    Node *current = head;        if (head == NULL) {        head = newNode;    } else {        while (current->next != NULL) {            current = current->next;        }        current->next = newNode;    }        printf("请输入学号:"); scanf("%ld", &newNode->stu.num);    printf("请输入姓名:"); scanf("%s", newNode->stu.name);    printf("请输入性别:"); scanf("%s", newNode->stu.sex);    printf("请输入数学成绩:"); scanf("%d", &newNode->stu.maths);    printf("请输入英语成绩:"); scanf("%d", &newNode->stu.english);    newNode->stu.total = newNode->stu.maths + newNode->stu.english;        printf("信息录入成功\n");}

    信息打印

    void PrintInfo() {    if (head == NULL) {        printf("无相关数据\n");        return;    }        printf("*********************************************************\n");    printf("学号      姓名  性别  数学  英语  总成绩\n");        Node *current = head;    while (current != NULL) {        printf("%ld       %s    %s    %d    %d    %d\n",               current->stu.num, current->stu.name, current->stu.sex,               current->stu.maths, current->stu.english, current->stu.total);        current = current->next;    }        printf("*********************************************************\n");}

    其他功能

    =fopen("student_data.db", "w");

    fprintf(fd, "\t学号\t姓名\t性别\t数学\t英语\t总成绩\n");
    ...
    азвание和实现过程略。

    转载地址:http://bjgmz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 中锁的面试题总结
    查看>>
    MySQL 中随机抽样:order by rand limit 的替代方案
    查看>>
    MySQL 为什么需要两阶段提交?
    查看>>
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>