广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现学生管理系统总结
  • 390
分享到

C语言实现学生管理系统总结

2024-04-02 19:04:59 390人浏览 薄情痞子
摘要

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 前言 本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下

前言

本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块。

登陆界面

在写学生管理系统时,我首先写的是登陆界面,学生管理系统有三个身份的id,分别是管理员,老师,与学生。我的想法是输入账号,系统可以自动识别账户的身份,所以我的结构体设计如下:

struct personid {       // 账户数据结构
    char id[20];
    char cypher1[20];
    char quanxian[20];
    char classnum[20];
    struct personid *next;
};

字符串存储账号,密码,权限,以及学号或者班级。
在登陆前首先应该用链表提取文件中的账号。代码如下:

struct personid *Create(char name[]) {  //从文件中读取账户;
    FILE *fp = fopen(name, "r");
    if (fp == NULL) {
            printf("不存在文件%s\n", name);
            exit(1);
    }
    struct personid *head = (struct personid*)malloc(sizeof(struct personid));
    head->next = NULL;
    while (!(feof(fp))) {
        struct personid *p = (struct personid*)malloc(sizeof(struct personid));
        fscanf(fp, "%s %s %s %s\n", p->id, p->cypher1, p->quanxian, p->classnum);
        p->next = head->next;
        head->next = p;
    }
    fclose(fp);
    return  head;
}

下面是登陆界面的代码:

void menu() {     //初始界面
    printf("--------[欢迎进入学生管理系统]--------\n");
    printf("1.登录账户\n");
    printf("2.注册账户\n");
    printf("3.修改密码\n");
    printf("4.找回密码\n");
    printf("0.退出系统\n");
    printf("----------------------------------\n");
    setbuf(stdin, NULL);
    keydown();
}
void keydown() {
    char choice[50];
    scanf("%s", choice);
    setbuf(stdin, NULL);
    if (choice[1] == '\0') {
        switch (choice[0]) {
            case '0':
                exit(0);
                break;
            case '1':
                denglu();
                break;
            case '2':
                zhuce();
                break;
            case '3':
                xiugai();
                break;
            case '4':
                zhaohui();
                break;
            default:
                printf("无效输入\n");
                menu();
                break;
        }
    } else {
        printf("无效输入\n");
        menu();
    }
    
}

在写系统时一定要注意程序的稳定性,我的程序是通过不断输入来进行操作的,一开始我在写代码时,利用的是getchar函数来进行输入,造成了输入多个字符之后程序就会崩掉的问题,在后来修改时,将所有的getchar函数换成的scanf来输入,这样可以保证程序的稳定性,在进行判断时只需判断输入的是否是一个字符且有这个操作即可。
MacOS系统下可以利用setbuf(stdin, NULL) 来清除缓冲区。

注册操作

如果新用户进入程序,那么首先进行的操作就是注册操作,我在最开始写注册操作时,是让 用户自己输入自己的身份 ,这样的写法是很失败的,如果学生进行操作,也可以注册管理员,是很不严谨的!
后来在修改时,利用了不同的邀请码注册不同的身份,用户无需输入身份,学生只需输入自己的学号,老师则需要选择自己对应的班级。

代码如下:

void zhuce() {
    printf("请输入邀请码:\n");
    int yaoqingma1 = 111;
    int yaoqingma2 = 222;
    int yaoqingma3 = 333;
    int x;
    scanf("%d", &x);
    if (x != yaoqingma1 && x != yaoqingma2 && x != yaoqingma3) {
        printf("无效邀请码,请联系导员:\n");
        setbuf(stdin, NULL);
        menu();
    }
    if (x == 111 || x ==222 || x == 333) {
        printf("please input the id with number:");
        char id[20];
        char id1[20];
        char id2[20];
        char id3[20] = "\n";
        char id4[20] = "0";
        char id6[20];
        scanf("%s", id);
        printf("please input the passWord:");
        scanf("%s", id1); next1:
        if (x == 111) {
            strcpy(id2, qx1);
            printf("请输入学号\n");
            scanf("%s", id4);
            struct personid *p = Create(zhroad);
            while (p) {
                if (!strcmp(id4, p->classnum)) {
                    printf("该学号已被注册,按0返回上一层,任意键重新输入\n");
                    setbuf(stdin, NULL);
                    char a;
                    a = getchar();
                    if (a == '0') {
                        menu();
                    }
                    setbuf(stdin, NULL);
                    Goto next1;
                }
                p = p->next;
            }
        } else if (x == 222) {
            printf("请选择您的班级\n");
            printf("1.网络1班\n");
            printf("2.网络2班\n");
            printf("3.网络3班\n");
            printf("4.网络4班\n");
            printf("5.网络5班\n");
            scanf("%s", id6);
            if (id6[1] == '\0') {
                if (id6[0] == '1' || id6[0] == '2' || id6[0] == '3' || id6[0] == '4' || id6[0] == '5') {
                    setbuf(stdin, NULL);
                    strcpy(id4, id6);
                } else {
                    setbuf(stdin, NULL);
                    printf("该班级不存在.\n");
                    menu();
                }
            } else {
                printf("该班级不存在\n");
                setbuf(stdin, NULL);
                menu();
            }
            strcpy(id2, qx2);
        } else if (x == 333) {
            strcpy(id2, qx3);
        }
        AppendDataToFile(zhroad, id);
        AppendDataToFile(zhroad, kong);
        AppendDataToFile(zhroad, id1);
        AppendDataToFile(zhroad, kong);
        AppendDataToFile(zhroad, id2);
        AppendDataToFile(zhroad, kong);
        AppendDataToFile(zhroad, id4);
        AppendDataToFile(zhroad, id3);
        printf("注册成功请重新登陆!\n");
        setbuf(stdin, NULL);
        menu();
    }
}

在进行学生注册时,应该对学生输入的学号进行一个判断,判断该学号是否被注册,若被注册应该重新输入。
在进行老师注册时,应该让老师选择已有的班级,如果没有则重新输入。
在注册成功后利用文件将已经注册的账号存储起来

学生界面的一些操作

学生主要可以进行下面几种操作:

void studentmenu() {        //学生操作界面
    printf("-----[good afternoon student ]-----\n");
    printf("1.查询成绩\n");
    printf("2.查询本班成绩\n");
    printf("3.成绩分析\n");
    printf("4.成绩申诉\n");
    printf("5.返回上一层:\n");
    printf("0.退出系统\n");
    printf("----------------------------------\n");
    studenTKEydown();
    }

在最初写代码时,我是让学生输入自己的学号来进行成绩查询,如果是考输入学号来查询的话,那么也可以输入别人的成绩,查询别人班的成绩,如果这样写,那学生的操作就和老师甚至管理员无异。
在最后修改代码时,我将学生的学号和账号绑定,在进行成绩查询等操作时,无需输入自己的学号,

教师界面的一些操作

教师界面的主要功能如下

void teachermenu() {           //老师操作界面
    printf("-----[good afternoon teacher]-----\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("0.退出系统\n");
    printf("----------------------------------\n");
    setbuf(stdin, NULL);
    teacherkeydown();
}

在一开始写代码时,和上面的学生操作类似,我是让老师输入班级或者老师输入学号来进行相关操作的,这样书写的话老师就成为了一个万能老师,可以查询文件中所存储的所有学生信息,现实中不存在教整个学校的老师,并且这样与管理员的功能冲突。
在后来修改代码时,我在老师注册时让老师选择了班级,我们将这个班级与老师的账号绑定,并且规定老师只能查询自己班学生的成绩,若输入其他班的成绩,则会进行相应的错误提醒。
老师操作界面代码如下:

void teacherkeydown() { //教师输入选择界面
    char *x;
    char *a;
    x = allclassnum;
    struct student *temp1 = NULL;
    char str2[200];
    char str1[100];
    setbuf(stdin, NULL);
    scanf("%s", str1);
    if (str1[1] == '\0') {
        switch (str1[0]) {
            case '0':
                exit(0);
                break;
            case '1':
                a = classnum(x);
                temp1 = mescreate(a);
                temp1 = addnode(temp1);
                writetoclassfile(temp1, a);
                teachermenu();
                break;
            case '2':
                a = classnum(x);
                temp1 = mescreate(a);
                temp1 = delnode(temp1);
                writetoclassfile(temp1, a);
                teachermenu();
                break;
            case '3':
                a = classnum(x);
                temp1 = mescreate(a);
                temp1 = changenode(temp1);
                writetoclassfile(temp1, a);
                teachermenu();
                break;
            case '4':
                printf("please input student studyid:\n");
                char studyid[20];
                scanf("%s", studyid);
                if (studyid[1] == allclassnum[0] && studyid[0] == '0' && strlen(studyid) < 6) {
                    printpersonnalsocre(studyid);
                    teachermenu();
                } else {
                    printf("不是您的学生或者学号不存在\n");
                    teachermenu();
                }
                
                break;
            case '5':
                a = classnum(x);
                temp1 = mescreate(a);
                temp1 = sort4(temp1);
                Printall(temp1);
                setbuf(stdin, NULL);
                teachermenu();
                break;
            case '6':
                a = classnum(x);
                temp1 = mescreate(a);
                chengjifenxi(temp1);
                teachermenu();
                break;
            case '7':
                FILE *fp1;
                fp1 = fopen(shensu, "w");
                printf("please input the wrong\n");
                scanf("%s", str2);
                fprintf(fp1, "%s\n", str2);
                printf("您的提醒已经发送!");
                break;
            case '8':
                menu();
                break;
            default:
                printf("输入有误请重新输入\n");
                teachermenu();
                break;
            }
    } else {
        printf("输入有误请重新输入\n");
        teachermenu();
    }
}

管理员的一些操作

管理员的主要功能如下:

void guanlidaiban() {
    printf("-----[good afternoon manager ]----\n");
    printf("1.密码注册\n");
    printf("2.密码修改\n");
    printf("3.密码找回\n");
    printf("4.成绩申诉\n");
    printf("5.更新成绩库\n");
    printf("0.退出系统\n");
    printf("----------------------------------\n");
    keydowmdaiban();
}
void guanlimenu() {
    printf("-----[good afternoon manager ]----\n");
    printf("1.代办选项\n");
    printf("2.增加账号和密码\n");
    printf("3.删除账号和密码\n");
    printf("4.修改账号和密码\n");
    printf("5.输出所有账号和密码\n");
    printf("6.录入所有的账号和密码\n");
    printf("7.进入教师用户端\n");
    printf("a.返回上一层\n");
    printf("0.退出系统\n");
    printf("----------------------------------\n");
    guanlikeydown();
}

管理员相比较于教师,可以对账号进行操作,并且可以查询所有班的成绩,在最开始设计时,我将管理员的操作写的跟学生教师冲突,尤其是进入教师用户端,进入教师用户端的代码如下。

printf("请选择您想进行操作的班级\n");
                printf("1.网络1班\n");
                printf("2.网络2班\n");
                printf("3.网络3班\n");
                printf("4.网络4班\n");
                printf("5.网络5班\n");
                scanf("%s", choice1);
                if (choice1[1] != '\0') {
                    printf("班级不存在请重新输入\n");
                    goto  next1;
                } else if (choice1[0] == '1' || choice1[0] == '2' || choice1[0] == '3' || choice1[0] == '4' || choice1[0] == '5') {
                    allclassnum[0] = choice1[0];
                    teachermenu();
                } else {
                    printf("班级不存在请重新输入\n");
                    goto  next1;
                }

管理员可以选择班级进行查看,当管理员选择后我将全局变量allclassnum(记录教师班级)改成了相对应操作的班级然后进入教师端。

总结

最开始写管理系统时没有注意很多细节,并且逻辑不合理,导致刚刚写完时非常的拉垮,在以后写程序时一定会多多留心。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现学生管理系统总结

本文链接: https://www.lsjlt.com/news/164987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现学生管理系统总结
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 前言 本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块...
    99+
    2022-11-13
  • C语言实现学生宿舍管理系统
    本文实例为大家分享了C语言实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下 实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系...
    99+
    2022-11-13
  • C语言实现简易学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,如:简单的增,删,改,查,即:录入成绩...
    99+
    2022-11-13
  • C语言实现学生档案管理系统
    本文实例为大家分享了C语言实现学生档案管理系统的具体代码,供大家参考,具体内容如下     #include<stdio.h&...
    99+
    2022-11-13
  • C语言实现班级学生管理系统
    本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下 下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺序录入,...
    99+
    2022-11-12
  • c语言实现学生管理系统详解
    目录infor.htest.cinfor.c总结 该学生管理系统的实现是通过分文件的方式来写的,infor.h 文件为头文件,源文件infor.c实现源文件tes...
    99+
    2022-11-12
  • C语言编写实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 项目介绍 学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识...
    99+
    2022-11-13
  • C语言实现学生消费管理系统
    本文实例为大家分享了C语言实现学生消费管理系统的具体代码,供大家参考,具体内容如下 代码可以实现的功能: (1)直接从终端键盘输入信息(2)从磁盘文件录入学生信息(3)可以查询学生消...
    99+
    2022-11-13
    C语言学生消费系统 C语言消费管理系统 C语言学生管理系统
  • C语言实现学生信息管理系统
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdi...
    99+
    2022-11-13
  • 基于C语言实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 1.目标要求: 1.学生成绩管理系统2.可增、删、改、查、浏览3.数据保存在文件中 2.C语言代码: ...
    99+
    2022-11-13
  • C语言模拟实现学生学籍管理系统
    学生学籍管理系统的C语言模拟实现是对链表、指针、结构体、文件操作等知识点的综合运用,需要实现的功能主要包含:输入学生信息、显示学生信息、查询学生信息、新增学生信息、删除学生信息、修改...
    99+
    2022-11-13
  • C语言实现简单的学生学籍管理系统
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一 .课题设计内容与主要功能 1.1问题描述: 通过该系统实现对学生学籍信息进行录入、显示、修改、...
    99+
    2022-11-13
  • C语言结构体链表和指针实现学生管理系统
    目录一、需求分析二、整体设计三、详细设计学生档案管理子系统学生成绩管理子系统四、代码实现本文实例为大家分享了C语言结构体链表和指针实现学生管理系统的具体代码,供大家参考,具体内容如下...
    99+
    2022-11-13
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2022-11-13
  • C语言如何实现简易学生管理系统
    本篇内容主要讲解“C语言如何实现简易学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简易学生管理系统”吧!首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,...
    99+
    2023-07-02
  • C语言实现学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统项目,供大家参考,具体内容如下 1、数据结构:学生信息:学号、姓名、年龄、性别、3课成绩 2、功能: (1)  增加学生记录(...
    99+
    2022-11-13
  • C语言实现学生宿舍信息管理系统
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生...
    99+
    2022-11-13
  • C语言代码实现学生成绩管理系统
    某班有最多不超过 30 人(具体人数由键盘输人)参加期未考试,考试科目 最多不超过 6 门(具体门数由键盘输入,但不少于 3 门),学生成绩管理系统是一 个非常实用的程序,如果能够把...
    99+
    2022-11-13
  • C语言实现简单学生信息管理系统
    学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。 在main函数里调用这8个函数 学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全...
    99+
    2022-11-13
  • C语言链表实现学生成绩管理系统
    目录一、课程设计题目及内容二、主要设计思路三、程序源码及具体注释(1)预处理指令(2)类型定义(3)函数原型(4)main函数定义(5)其他函数定义 四、运行示例五、注意事...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作