C语言链表小案例

C语言学生管理系统(练手)

  • main.c
#include <stdio.h>
#include <stdlib.h>

#include "studentclass.h"

int main(){
    //显示菜单
    Student_menu();
    int number_index  = 0;
    while (1){
        printf("\n==========================\n");
        printf("Please enter the number:");
        if (scanf("%d",&number_index) == 1){
            printf("==========================\n");
            //处理接收到的命令
            switch(number_index){
                case 1:
                        //录入学生的信息
                        Insert_Student();
                    break;
                case 2:
                     printf("\n==========================\n");
                     printf("please enter student id:");
                     scanf("%d",&number_index);
                     printf("\n==========================\n");
                    //根据ID删除学生
                    Student_Head = Delete_Student_id(number_index);
                    //显示操作是否成功
                    Show_Error_Success(Student_Head);
                    //显示剩余学生的数量
                    Student_Length();
                    break;
                case 3:
                    printf("\n==========================\n");
                     printf("please enter student id:");
                     scanf("%d",&number_index);
                     printf("\n==========================\n");
                    //根据ID查找学生
                     Student_Head = Student_SearchId(number_index);
                    if (Student_Head == NULL){
                        printf("\n==========================\n");
                        printf("= cannot not find student! \n");
                        printf("==========================\n");
                    }else{
                        printf("\n ==========================\n ");
                        printf("= Student_no :%ld    \n ",Student_Head->sno);
                        printf("= Student_age :%d   \n ",Student_Head->sage);
                        printf("= Student_name :%s   \n ",Student_Head->sname);
                        printf("= Student_class :%s  \n ",Student_Head->sclass);
                        printf("==========================\n");
                    }
                    break;
                case 4:
                        //修改学生信息
                    printf("\n==========================\n");
                     printf("please enter student id:");
                     scanf("%d",&number_index);
                     printf("\n==========================\n");
                    Student_Head = Update_Student_id(number_index);
                    Show_Error_Success(Student_Head);
                    break;
                case 5:
                        //显示所有的学生
                        Student_All();
                    break;
                case 6:
                        //显示菜单
                        Student_menu();
                    break;
                case 0:
                        //退出程序
                        exit(0);
                    break;
            }
        }else{
            printf("System Error!");
            exit(0);
        }
    }
    return 0;
}
  • studentclass.h
#ifndef STUDENTCLASS_INCLUDED
#define STUDENTCLASS_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 20

struct student{

    long int sno;//学号
    int sage;//年龄
    char sname[MAX_LENGTH];//姓名
    char sclass[MAX_LENGTH];//班级

    struct student * next;
};

typedef struct student Student;

//创建头节点[全局变量]
Student * Student_Head ;

//功能展示


//菜单
void Student_menu();
//录入学生信息
Student getStudentInfo();
//增
void Insert_Student();
//删
void * Delete_Student_all();//清空所有节点
Student * Delete_Student_id(long int sno);
//改
Student * Update_Student_id(long int sno);
//查
void Student_All();
Student * Student_SearchId(long int sno);
//统计数量
int getStudentLength();
void Student_Length();
//操作成功失败友好提示
void Show_Error_Success(void * str);

#endif // STUDENTCLASS_INCLUDED
  • studentclass.c

#include "studentclass.h"

//功能实现


//菜单
void Student_menu(){

    printf("==========================\n");
    printf("||   Student Mangerment ||             \n");
    printf("||            v 1.0     ||          \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("=  0.退出             =                           \n");
    printf("==========================\n");

}

//录入学生的信息
Student getStudentInfo(){

    Student stu ;

    //清空键缓冲区[Linux]
    setbuf(stdin,NULL);

    printf("\n==========================\n");
    printf("please enter student no:");
    scanf("%ld",&stu.sno);

    printf("please enter student age:");
    scanf("%d",&stu.sage);

    getchar();//解决换行符

    printf("please enter student name:");
    gets(stu.sname);

    printf("please enter student class:");
    gets(stu.sclass);
    printf("==========================\n");

    setbuf(stdin,NULL);

    return stu;
}

//添加学生
void Insert_Student(){


    //录入学生的信息
    Student stu = getStudentInfo();

    //判断表头是否为空
    if (Student_Head == NULL){

        //创建节点
        Student * temp = (Student *)malloc(sizeof(Student));

        if (temp == NULL){
            printf("application error!\n");
            return ;
        }

        temp->sno = stu.sno;
        temp->sage = stu.sage;
        strcpy(temp->sname,stu.sname);
        strcpy(temp->sclass,stu.sclass);

        temp->next = NULL;

        Student_Head = temp;

    }
    else{


        Student * temp = NULL;

        for (temp = Student_Head;temp->next != NULL;temp = temp->next);

        Student * current = (Student *)malloc(sizeof(Student));

        if (current == NULL){

            printf("application error!\n");
            return ;

        }

        current->sno = stu.sno;
        current->sage = stu.sage;
        strcpy(current->sname,stu.sname);
        strcpy(current->sclass,stu.sclass);

        current->next = NULL;
        temp->next = current;

    }

}


//显示所有的学生
void Student_All(){

    Student * temp = Student_Head;

    for (;temp != NULL;temp = temp->next){

        printf("\n ==========================\n ");
        printf("= Student_no :%ld    \n ",temp->sno);
        printf("= Student_age :%d   \n ",temp->sage);
        printf("= Student_name :%s   \n ",temp->sname);
        printf("= Student_class :%s  \n ",temp->sclass);
        printf("==========================\n");

    }

}


//根据ID查询学生
Student * Student_SearchId(long int sno){


    Student * temp = Student_Head;

    for (;temp != NULL;temp = temp->next){
        if (temp->sno == sno){
            return temp;
        }
    }

    return NULL;

}


//删除所有的学生
void * Delete_Student_all(){

    Student * temp = Student_Head;
    Student * current = NULL;

    while (temp->next != NULL){

            current = temp->next;
            temp->next = current->next;

            free(current);
    }

    free(Student_Head);

    Student_Head = NULL;

    return NULL;
}


//根据学号删除学生
Student * Delete_Student_id(long int sno){

    Student * temp = Student_Head;
    Student * current = NULL;

    int Flag = 0;

    for (;temp != NULL;temp = temp->next){

        if (temp->sno == sno){

            Flag = 1;
            break;

        }

        current = temp;

    }

    if (!Flag){

        printf("connot not find student id\n");
        return NULL;
    }

    //判断是否未头节点
    if (temp == Student_Head){

        Student_Head = temp->next;
        free(temp);


    }else{

        current->next = temp->next;
        free(temp);

    }

    return Student_Head;

}


//修改学生的信息
Student * Update_Student_id(long int sno){

    Student * temp = Student_Head;

    int Flag = 0;

    for (;temp != NULL;temp = temp->next){
        if (temp->sno == sno){
            Flag = 1;
            break;
        }
    }
    if (!Flag){
        printf("connot not find !\n");
        return NULL;
    }

    Student stu = getStudentInfo();
    temp->sno = stu.sno;
    temp->sage = stu.sage;
    strcpy(temp->sname,stu.sname);
    strcpy(temp->sclass,stu.sclass);
    return Student_Head;
}

//统计学生的人数
int getStudentLength(){
    Student * temp  = Student_Head;
    int index = 0;
    for (;temp != NULL;temp = temp->next){
            index++;
    }
    return index;
}

//友好操作提示
void Show_Error_Success(void * str){

    if (str == NULL){
        printf("\n==========================\n");
        printf("= error opertion! \n");
        printf("==========================\n");
    }else{
        printf("\n==========================\n");
        printf("= successful opertion! \n");
        printf("==========================\n");
    }
}

//显示学生的数量
void Student_Length(){
        printf("\n==========================\n");
        printf("= Student_Length -> [%d] \n",getStudentLength());
        printf("==========================\n");

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值