返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现简单学生信息管理系统
  • 621
分享到

C语言实现简单学生信息管理系统

2024-04-02 19:04:59 621人浏览 独家记忆
摘要

学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。 在main函数里调用这8个函数 学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全

学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。

在main函数里调用这8个函数

学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全局声明):

typedef struct _student{
    char name[20];
    int age;
    int stuNum;
    int score;
}student;

需要有一个存储数据的空间,所以使用单链表存储,定义如下:

typedef struct _node{
    student stu1;
    struct _Node* pNext;
}Node;

此时需要给链表一个头:

Node *g_head=NULL;

录入学生信息:

1)创建一个新节点,结点里包括结构体数据,和下一个指针。
2)需要判断头结点是不是空的,如果是空的,则此时需要将新节点付给头结点,如果不是空的,那么该结点的下一个指针=头结点(头插法,能用就行)。
3)然后就输入数据scanf("%s",&p->stu1.age);
4)最后提示一下该学生信息输入完毕!
5)现在只输入了一个学生信息,此时只需要在主函数里写一个循环就可以无限调用该函数进行数据录入。

void input(){
    printf("请输入学生信息\t\n");
    Node *pNewNode=(Node*)malloc(sizeof(Node));//创建一个新节点。
    pNewNode->pNext=NULL;
    
    if(g_head==NULL){
        g_head=pNewNode;
    }
    else{
        pNewNode->pNext=g_head;
        g_head=pNewNode;
    }
    printf("请输入姓名: ");
    scanf("%s",pNewNode->stu1.name);
    printf("请输入年龄: ");
    scanf("%d",&pNewNode->stu1.age);
    printf("请输入学号 : ");
    scanf("%d",&pNewNode->stu1.stuNum);
    printf("请输入成绩 : ");
    scanf("%d",&pNewNode->stu1.score);
printf("该学生信息输入完毕!\n\n");
}

查看信息:

1)需要对链表进行遍历然后printf;
2)新建一个结点指针然后 Node* p=g_head; while(p!=NULL){ printf p=p->next}(注:以上代码只是功能的描述)

代码:

void printdate(){
    Node* p=g_head;
    printf("\t姓名\t年龄\t学号\t成绩\n");
    while(p!=NULL)
    {
        printf("\t%s\t,%d\t,%d\t,%d\t\n",p->stu1.name,p->stu1.age,p->stu1.stuNum,p->stu1.score);
        p=p->pNext;
    }
}

保存信息:

1)先用文件指针指向一个要使用的文件,
2)便利所有链表的数据,将遍历的数据写入文件指针指向的文件里

void save(){
    FILE *fp=fopen("E:\\stu.data","w");
    if(fp==NULL){
        printf("文件打开失败");
        return;
    }
    Node* p=g_head;
    while(p!=NULL){
        fwrite(&p->stu1,1,sizeof(student),fp);
        p=p->pNext;
    }
    fclose(fp);
    printf("文件保存成功!\n");
}

文件读取:

1)先用文件指针指向一个使用的文件,
2)这里需要开辟链表来将读取到的数据写入链表里的数据里的结构体里,
3)需要判断一下是否读取到了数据,将文件里的数据先读到结构体数组
4)然后while循环里 ,,将结构体数组里的数据复制给链表,
5)需要将每一个节点排好队列,这里用头插法,每复制一个就会开辟一个结点,

代码:

void rs(){
    FILE* fp=fopen("E:\\stu.data","r");
    if(fp==NULL){
        printf("文件打开失败");
    }
    printf("文件读取成功!\n 查看文件请按2\n");
    student stu;
    
    while(fread(&stu,1,sizeof(student),fp)){
        Node* pNewNode=(Node*)malloc(sizeof(Node));
        pNewNode->pNext=NULL;

        memcpy(pNewNode,&stu,sizeof(student));

        if(g_head==NULL){
            g_head=pNewNode;

        }
        else{
            pNewNode->pNext=g_head;
            g_head=pNewNode;

        }
    }
    }

统计人数:

1)遍历链表的时候定义一个整型数组自加最后输出

void count(){
    int a=0;
    FILE* fp=fopen("E:\\stu.data","r");
    if(fp==NULL){
        printf("文件打开失败");
        return;
    }
    Node* p=g_head;
    while(p!=NULL){
        p=p->pNext;
        a++;
    }
    printf("总人数%d",a);
}

查找学生:

1)定义整型数据,输入学号,先遍历再if判断输入的学号和p->stu1.num是否相等,相等的话输出:

void find(){
    int num;
    printf("请输入要查找的学生学号: \n");
    scanf("%d",&num);
    Node* p=g_head;
    while(p!=NULL){
        if(p->stu1.stuNum==num){
            printf("\t%s\t,%d\t,%d\t,%d\t\n",p->stu1.name,p->stu1.age,p->stu1.stuNum,p->stu1.score);
        }
        p=p->pNext;
    }
printf("无该学生信息");
}

修改信息:

1)定义整型数据,输入学号,先遍历再if判断输入的学号和p->stu1.num是否相等,相等的话重新输入:

void change(){
    int num;
    printf("请输入要修改的学生的学号: ");
    scanf("%d",&num);
    Node* p=g_head;
    while(p!=NULL){

        if(p->stu1.stuNum==num){
            printf("请输入姓名: \n");
            scanf("%s",p->stu1.name);
            printf("请输入年龄: \n");
            scanf("%d",&p->stu1.age);
            printf("请输入学号: \n");
            scanf("%d",&p->stu1.stuNum);
            printf("请输入成绩: \n");
            scanf("%d",&p->stu1.score);
            printf("信息更改完毕!");
        }

        p=p->pNext;
    }
    if(p==NULL){
        printf("该学生不存在!\n");
    }

}

删除信息:

1)思路是先遍历,找到了free就可以了,
2)需要定义两个节点指针,如果找到了是头结点直接将头结点付给定义的节点,然后free,
如果不是头结点,将该节点付给定义的节点,p->next=p->next->next;
然后free

void del(){
    int num;

    printf("请输入要删除的学号");
    scanf("%d",&num);
    Node* p=g_head;
    Node*p1,*p2;
    if(p->stu1.stuNum==num){
        p1=p->pNext;

        free(p1);

    }
    if(p->pNext!=NULL){
        p2=p->pNext;
        p->pNext=p->pNext->pNext;
        free(p2);
    }
printf("学号为%d的信息删除成功!\n",num);

}

下面是完整代码:

#include<stdio.h>
#include<coNIO.h>
#include<stdlib.h>
#include<string.h>
typedef struct _student{
    char name[20];
    int age;
    int stuNum;
    int score;
}student;

typedef struct _Node{
    student stu1;
    struct _Node* pNext;
}Node;

Node *g_head=NULL;
void menu(){
    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("- 0退出-\n");
    printf("退出不要直接点叉,请按0退出!\n查看文件之前请先读取文件!\n");
}
void input(){
    printf("请输入学生信息\t\n");
    Node *pNewNode=(Node*)malloc(sizeof(Node));//创建一个新节点。
    pNewNode->pNext=NULL;
    
    if(g_head==NULL){
        g_head=pNewNode;
    }
    else{
        pNewNode->pNext=g_head;
        g_head=pNewNode;
    }
    printf("请输入姓名: ");
    scanf("%s",pNewNode->stu1.name);
    printf("请输入年龄: ");
    scanf("%d",&pNewNode->stu1.age);
    printf("请输入学号 : ");
    scanf("%d",&pNewNode->stu1.stuNum);
    printf("请输入成绩 : ");
    scanf("%d",&pNewNode->stu1.score);
printf("该学生信息输入完毕!\n\n");
}

void printdate(){
    Node* p=g_head;
    printf("\t姓名\t年龄\t学号\t成绩\n");
    while(p!=NULL)
    {
        printf("\t%s\t,%d\t,%d\t,%d\t\n",p->stu1.name,p->stu1.age,p->stu1.stuNum,p->stu1.score);
        p=p->pNext;
    }
}


void save(){
    
    FILE *fp=fopen("E:\\stu.data","w");
    if(fp==NULL){
        printf("文件打开失败");
        return;
    }
    Node* p=g_head;
    while(p!=NULL){
        fwrite(&p->stu1,1,sizeof(student),fp);
        p=p->pNext;

    }
    fclose(fp);
    printf("文件保存成功!\n");
}


void rs(){
    FILE* fp=fopen("E:\\stu.data","r");
    if(fp==NULL){
        printf("文件打开失败");
    }
    printf("文件读取成功!\n 查看文件请按2\n");
    student stu;
    
    while(fread(&stu,1,sizeof(student),fp)){
        Node* pNewNode=(Node*)malloc(sizeof(Node));
        pNewNode->pNext=NULL;

        memcpy(pNewNode,&stu,sizeof(student));

        if(g_head==NULL){
            g_head=pNewNode;

        }
        else{
            pNewNode->pNext=g_head;
            g_head=pNewNode;

        }
    }
    }

void count(){
    int a=0;
    FILE* fp=fopen("E:\\stu.data","r");
    if(fp==NULL){
        printf("文件打开失败");
        return;
    }
    Node* p=g_head;
    while(p!=NULL){
        p=p->pNext;
        a++;
    }
    printf("总人数%d",a);
}


void find(){
    int num;
    printf("请输入要查找的学生学号: \n");
    scanf("%d",&num);
    Node* p=g_head;
    while(p!=NULL){
        if(p->stu1.stuNum==num){
            printf("\t%s\t,%d\t,%d\t,%d\t\n",p->stu1.name,p->stu1.age,p->stu1.stuNum,p->stu1.score);
        }
        p=p->pNext;
    }
printf("have not");
}

void change(){
    int num;
    printf("请输入要修改的学生的学号: ");
    scanf("%d",&num);
    Node* p=g_head;
    while(p!=NULL){

        if(p->stu1.stuNum==num){
            printf("请输入姓名: \n");
            scanf("%s",p->stu1.name);
            printf("请输入年龄: \n");
            scanf("%d",&p->stu1.age);
            printf("请输入学号: \n");
            scanf("%d",&p->stu1.stuNum);
            printf("请输入成绩: \n");
            scanf("%d",&p->stu1.score);
            printf("信息更改完毕!");
        }

        p=p->pNext;
    }
    if(p==NULL){
        printf("该学生不存在!\n");
    }

}

void del(){
    int num;

    printf("请输入要删除的学号");
    scanf("%d",&num);
    Node* p=g_head;
    Node*p1,*p2;
    if(p->stu1.stuNum==num){
        p1=p->pNext;

        free(p1);

    }
    if(p->pNext!=NULL){
        p2=p->pNext;
        p->pNext=p->pNext->pNext;
        free(p2);
    }
printf("学号为%d的信息删除成功!\n",num);

}

int main()
{
    menu();
    while(1)
    {
        char ch=getch();
        switch(ch){
        case '1':input();break;
        case '2':printdate();break;
        case '3':save();break;
        case '4':rs();break;


        case '5':count();break;
        case '6':find();break;
        case '7':change();break;
        case '8':del();break;

        case '0':exit(0);
        
        }
    }

return 0;
}

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

--结束END--

本文标题: C语言实现简单学生信息管理系统

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

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

猜你喜欢
  • C语言实现简单学生信息管理系统
    学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。 在main函数里调用这8个函数 学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全...
    99+
    2024-04-02
  • C++实现简单学生信息管理系统
    本文实例为大家分享了C++实现学生信息管理系统的具体代码,供大家参考,具体内容如下 编译环境: Microsoft Visual Studio 2019 3个头文件: Fileope...
    99+
    2024-04-02
  • C语言实现学生信息管理系统
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdi...
    99+
    2024-04-02
  • Java实现简单学生信息管理系统
    最近在学习Java,所以写了个学生信息管理系统,话不多说,上代码。 Student.java: package com.mumu; public class Student {...
    99+
    2024-04-02
  • C语言使用单链表实现学生信息管理系统
    本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下 初学数据结构,记录一下学习过程。 运行结果如图: 1.运行界面 2.录入学生信息 3.按照总分...
    99+
    2024-04-02
  • C语言实现学生宿舍信息管理系统
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生...
    99+
    2024-04-02
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2024-04-02
  • C语言实现学生信息管理系统开发
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 程序介绍 运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图所示...
    99+
    2022-11-13
    C语言学生信息系统 C语言学生管理系统 C语言信息管理系统
  • C语言实现简单职工信息管理系统
    本文实例为大家分享了C语言实现职工信息管理系统的具体代码,供大家参考,具体内容如下 代码实现如下: #include <stdio.h>//输入、输出指令 #includ...
    99+
    2024-04-02
  • C语言实现简单的学生学籍管理系统
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一 .课题设计内容与主要功能 1.1问题描述: 通过该系统实现对学生学籍信息进行录入、显示、修改、...
    99+
    2024-04-02
  • Python实现简单的学生信息管理系统
    本文实例为大家分享了Python实现学生信息管理系统的具体代码,供大家参考,具体内容如下 要求描述: 学生的信息包括:学号,姓名,年龄,性别,出生日期,地址,电话,E-mail等等。...
    99+
    2024-04-02
  • C语言实现学籍信息管理系统
    本文实例为大家分享了C语言实现学籍信息管理系统的具体代码,供大家参考,具体内容如下 系统功能:录入、修改、添加、删除、查找、读取、删除数据系统主要技术:基本就是函数的调用,只用到结构...
    99+
    2024-04-02
  • C语言实现简易学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,如:简单的增,删,改,查,即:录入成绩...
    99+
    2024-04-02
  • C++实现简单信息管理系统
    本文实例为大家分享了C++实现简单信息管理系统的具体代码,供大家参考,具体内容如下 信息管理系统 因为学校布置了写一个信息管理系统的作业,所以写下了这个信息管理系统,这是用cpp写的...
    99+
    2024-04-02
  • C语言如何使用单链表实现学生信息管理系统
    这篇文章主要介绍了C语言如何使用单链表实现学生信息管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。运行结果如图:1.运行界面2.录入学生信息3.按照总分进行排序代码如下...
    99+
    2023-06-25
  • C语言如何实现学生宿舍信息管理系统
    这篇文章主要讲解了“C语言如何实现学生宿舍信息管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现学生宿舍信息管理系统”吧!功能描述该学生宿舍信息管理系统主要实现的功能有:创...
    99+
    2023-06-29
  • C语言实现学生信息管理系统(文件操作)
    目录新增函数——文件操作;1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1.定义提示菜单2.增加学生记录3....
    99+
    2024-04-02
  • C++实现简单学生管理系统
    本文实例为大家分享了C++实现简单学生管理系统的具体代码,供大家参考,具体内容如下 实现学生管理,其中关键字可以自行替换。经过Visual C++6.0验证可执行成功。 #inclu...
    99+
    2024-04-02
  • C语言实现简单学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 系统界面及相关要求 1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。 ...
    99+
    2024-04-02
  • 基于C语言实现简单学生成绩管理系统
    本文实例为大家分享了C语言实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 一、系统主要功能 1、密码登录2、输入数据3、查询成绩4、修改成绩5、输出所有学生成绩6、退出...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作