栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现学生管理系统V3.1(链表方式实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现学生管理系统V3.1(链表方式实现)

实现功能
  • 添加学生
  • 删除学生
  • 修改学生
  • 查询学生
  • 显示所有学生信息
  • 菜单
简述

        该系统主要使用了链表、循环、条件语句等相关模块, 其中包含头文件string.h、windows.h等函数库。使用链表做为学生数据的存储结构,该链表存放了学生的基本信息,包括学号、姓名、性别、年龄、院系、专业等相关信息,系统实现了对于学生的CRUD操作。

运行截图

 代码
#include 
#include 
#include 
#include 
#define N 100       //最大学生数量为50

typedef struct Student{
    int id;         //编号
    char name[20];  //姓名
    char sex[20];   //性别
    int age;        //年龄
    char depart[40];   //院系
    char major[40];     //专业
    struct Student * next;
}Student;

Student * studentList;



void initList();
void addStu(Student * head);      //添加学生信息
void delStu(Student * head);      //删除学生信息
void modStu(Student * head);      //修改学生信息
Student * seaStuById(int id,Student * head);   //查询学生信息 - 根据ID
void showStu(Student * head);     //显示学生信息
void print(int id,Student * head); //显示一条学生信息
void menu();        //菜单


void initList(){
    studentList = (Student*)malloc(sizeof(Student));
    studentList->next = NULL;
}



//添加学生信息
void addStu(Student * head){
    Student * s = head;
    while(s->next != NULL){
        s = s->next;
    }

    Student * student = malloc(sizeof(Student));
    printf("请输入学生编号(1 - N):");
    scanf("%d",&student->id);
    printf("请输入学生姓名:");
    scanf("%s",student->name);
    printf("请输入学生性别(男/女):");
    scanf("%s",student->sex);
    printf("请输入学生年龄:");
    scanf("%d",&student->age);
    printf("请输入学生院系:");
    scanf("%s",student->depart);
    printf("请输入学生专业:");
    scanf("%s",student->major);
    student->next = NULL;
    s->next = student;
}

//删除学生信息
void delStu(Student * head){
    int id;
    printf("请输入学生编号:");
    scanf("%d",&id);
    Student * p = head;
    while(p->next){
        if(p->next->id == id)
            break;
        p = p->next;
    }

    if(p->next == NULL){
        printf("未查找到!n");
        return;
    }
    p->next = p->next->next;        //移除结点
    printf("删除成功!n");
}

//修改学生信息
void modStu(Student * head){
    int id;
    printf("请输入学生编号:");
    scanf("%d",&id);
    Student * student;
    student = seaStuById(id,head);
    if(student == NULL){
        printf("未查找到!n");
        return;
    }

    printf("请输入学生编号(1 - N):");
    scanf("%d",&student->id);
    printf("请输入学生姓名:");
    scanf("%s",student->name);
    printf("请输入学生性别(男/女):");
    scanf("%s",student->sex);
    printf("请输入学生年龄:");
    scanf("%d",&student->age);
    printf("请输入学生院系:");
    scanf("%s",student->depart);
    printf("请输入学生专业:");
    scanf("%s",student->major);
    printf("修改成功!n");
}

//查询学生信息 - 根据ID
Student * seaStuById(int id,Student * head){
    Student * p = head->next;
    while(p){
        if(p->id == id){
            return p;
        }
        p = p->next;
    }
    return NULL;      //查询失败 - 返回 NULL 的意义在于可以根据返回值的不同做成功与否的验证
}

//显示学生信息
void showStu(Student * head){
    int i;
    Student * student = head->next;
    printf("---------------------------------------------n");
    printf("学生编号   姓名   性别  年龄  院系  专业n");
    while(student){
        printf("%d   %s   %s   %d   %s   %sn",student->id,student->name,student->sex,student->age,student->depart,student->major);
        student = student->next;
    }
    printf("---------------------------------------------n");
}

//显示一条学生信息
void print(int id,Student * head){
    Student * student;
    student = seaStuById(id,head);
    if(student == NULL){
        printf("未查找到!n");
        return;
    }

    printf("---------------------------------------------n");
    printf("学生编号   姓名   性别  年龄  院系  专业n");
    printf("%d   %s   %s   %d   %s   %sn",student->id,student->name,student->sex,student->age,student->depart,student->major);
    printf("---------------------------------------------n");
}


//菜单

void menu(){
    int choice,id;
    while(1){
        printf("---------------------------------------------n");
        printf("0、退出n");
        printf("1、添加学生信息n");
        printf("2、删除学生信息n");
        printf("3、修改学生信息n");
        printf("4、查询学生信息n");
        printf("5、显示学生信息n");
        printf("---------------------------------------------n");
        printf("请输入您的选择:");
        scanf("%d",&choice);
        switch(choice){
        case 0:
            exit(0);
            break;
        case 1:
            addStu(studentList);
            break;
        case 2:
            delStu(studentList);
            break;
        case 3:
            modStu(studentList);
            break;
        case 4:
            printf("请输入查找的学生编号:");
            scanf("%d",&id);
            print(id,studentList);
            break;
        case 5:
            showStu(studentList);
            break;
        default:
            printf("输入有误!n");
            break;
        }
        system("pause");
        system("cls");
    }
}

int main()
{
    initList();
    menu();
    return 0;
}
总结

        链表结构算是比较有难度的一种结构, 但是也是最节省空间的一种存取方式, 当然它仅仅只是数据存取的一种载体而已。这里给出的带头结点 + 尾插法 的方式完成数据的添加, 具体还有 不带头节点和头插法 的区别, 在此便不再一一讨论。  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/590045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号