C语言链表小案例

来源:互联网 发布:双色球数据分布图 编辑:程序博客网 时间:2024/06/09 14:12

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 20struct 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 0
原创粉丝点击