C语言——学生信息管理系统(V1.0)
本文最后更新于452 天前,其中的信息可能已经过时,如有错误请发送邮件到echobydq@gmail.com

实现功能

1.录入(添加)学生信息:学号、姓名、平时成绩和考试成绩,总评成绩。
2.查询学生成绩:输入要查询的学生的学号,查询该学生的信息并显示。
3.显示学生成绩单:按学号顺序显示学生成绩单。
4.删除学生信息:输入要删除的学生的学号,,删除该学生的信息。
5.修改学生信息:输入要修改的学生的学号,显示该学生的原有信息,用户输入修改后的信息。

 

知识点

1.C语言的量声明和定义,以及变量初始化和生命周期与可见性
2.C语言指针的定义,初始化
3.C语言内存的申请和释放
4.C语言循环结构、选择结构、分支结构
5.C语言结构体
6.C语言数据结构之链表
7.C语言函数声明、实现、调用
8.C语言函数的参数、返回值
9.C语言文件打开、操作(读写)、关闭

代码

//宏定义区
#define _CRT_SECURE_NO_DEPRECATE  //防止VS警告

//头文件区
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

//全局变量区
//学生结构体
typedef struct tagStudent
{
    char Num[10];//学号
    char Name[20];//姓名
    double Regular_Score;//平时成绩
    double Final_Score;//期末成绩
    double Total_Score;//总评成绩
}Student;

//学生链表结点
typedef struct tagNode
{
    Student Stu;//数据域:学生信息
    struct tagNode *pNext;//指针域:指向下一个学生结点
}Node;

//定义链表的第一个学生,即学生单链表的头结点
Node *g_pHead = NULL;

//全局函数定义区
// 打印功能菜单
void Print_Menu();
//1录入学生信息
void Enter_Students();
//2查询学生信息
Node* Inquire_Students();
//3显示学生信息
void Display_Students();
//4删除学生信息
void Deleting_Students();
//5修改学生信息
void Amend_Students();

//程序的主函数——程序入口
int main(int argc, char *argv[])
{
    while (1)//死循环
    {
        //清屏
        system("CLS");

        //打印功能菜单
        Print_Menu();

        char  ch;
        //控制台无回显获取信息
        ch = _getch();

        //switch分支选择结构
        switch (ch)
        {
        case'1': //1录入学生信息
            Enter_Students();
        break;

        case'2': //2查询学生信息
        {
            Node *pNode = Inquire_Students();
            if (pNode != NULL)
            {
                printf("%s\t %s\t %0.2lf \t%0.2lf \t%0.2lf\t\n",
                    pNode->Stu.Num,   //学号
                    pNode->Stu.Name, //姓名
                    pNode->Stu.Regular_Score,//平时成绩
                    pNode->Stu.Final_Score,  //期末成绩
                    pNode->Stu.Total_Score); //总评成绩
            }
            else
            {
                printf("未找到学生信息,请确认学生信息!\n");
            }
        break;
        }

        case'3': //3显示学生信息
            Display_Students();
        break;

        case'4': //4删除学生信息
            Deleting_Students();
        break;

        case'5': //5修改学生信息
            Amend_Students();
        break;

        case'0': //退出程序系统
            printf("欢迎再次使用!\n");
            return 0;
        break;

        default: //程序的健壮性,友好提示
            printf("您输入的选择有错误,请重新选择功能!\n");
        break;
        }
    system("PAUSE");
    }
    return 0;
}

//全局函数实现区
// 打印功能菜单
void Print_Menu()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================请选择对应功能================\n");
    printf("=================================================\n");
    printf("=\t\t1、录入学生信息\t\t\t=\n");
    printf("=\t\t2、查询学生信息\t\t\t=\n");
    printf("=\t\t3、显示学生信息\t\t\t=\n");
    printf("=\t\t4、删除学生信息\t\t\t=\n");
    printf("=\t\t5、修改学生信息\t\t\t=\n");
    printf("=\t\t0、退出程序系统\t\t\t=\n");
    printf("=================================================\n");

    return;
}

//1录入学生信息
void Enter_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================录入学生信息功能================\n");
    printf("=================================================\n");
    printf("\n请依次输入学生信息:\n\n|学号 \t|姓名   |平时成绩|  |期末成绩|  |总评成绩|\n");

    //定义单链表的一个结点:当前结点
    Node *p;

    //将头结点给当前结点
    p = g_pHead;

    //在插入新结点前找到尾结点,
    while (g_pHead != NULL && p->pNext != NULL)
    {
        p = p->pNext;
    }

    //为新的学生元素分配一个空间
    //mallac  void*  泛类型   强制类型转换
    Node* pNewNode = (Node*)malloc(sizeof(Node));
    pNewNode->pNext = NULL;

    //将新节点插入尾结点或者作为头结点
    if (g_pHead == NULL)
    {
        g_pHead = pNewNode;
        p = g_pHead;
    }
    else
    {
        //p的下一个节点为pNewNode
        p->pNext = pNewNode;
    }

    //输入新的学生数据信息
    scanf("%s %s %lf %lf %lf", pNewNode->Stu.Num,        //学号  数组名就是数组首地址
        pNewNode->Stu.Name,                  //姓名
        &pNewNode->Stu.Regular_Score,    //平时成绩
        &pNewNode->Stu.Final_Score,      //期末成绩
        &pNewNode->Stu.Total_Score); //总评成绩

    printf("\n学生信息录入系统成功!\n");

    return;
}

//2查询学生信息
Node *Inquire_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================查询学生信息功能================\n");
    printf("=================================================\n");
    char Num[10]; //学号

    printf("\n请输入需要查询学生的学号:\n");

    scanf("%s",Num);

    Node  *p = g_pHead;
    printf("\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩\t\n");

    //遍历链表
    while (p != NULL)
    {
        /*if (p->Stu.Num == Num) 字符数组不能比较
        需要字符比较      调用函数stricmp 以大小写不敏感方式比较两个串
        用法:int  stricmp( char  *str1,  char  *str2);
        返回值大于0,则str1>str2
        返回值小于0,则str1<str2
        返回值等于0,则str1=str2*/
        int  ptr = _stricmp(p->Stu.Num , Num);
        //如果找到学生信息
        if (ptr  ==  0)
        {
            return  p;
        }
        //否则继续找,直到遍历完链表退出while
        p = p->pNext;
    }

    //遍历完没有找到学生信息
    if (p == NULL)
    {
        return  NULL;
    }

    return  NULL;
}

//3显示学生信息
void Display_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================显示学生信息功能================\n");
    printf("=================================================\n");

    Node  *p = g_pHead;
    printf("学号\t| 姓名\t| 平时成绩\t| 期末成绩\t| 总评成绩\t|\n");

    //如果链表里没有学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请先录入学生信息!\n\n");
        return;
    }

    //如果链表里有学生信息,则遍历链表
    while (p != NULL)
    {
        printf("%s\t|  %s\t|  %0.2lf \t| %0.2lf \t| %0.2lf\t|\n",
                    p->Stu.Num,                  //学号
                    p->Stu.Name,                 //姓名
                    p->Stu.Regular_Score,    //平时成绩
                    p->Stu.Final_Score,      //期末成绩
                    p->Stu.Total_Score); //总评成绩);

        p = p->pNext;
    }
    printf("=================================================\n");
    return;
}

//4删除学生信息
void Deleting_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================删除学生信息功能================\n");
    printf("=================================================\n");
    char Num[10];  //学号

    printf("\n请输入需要删除学生的学号:\n");

    scanf("%s", Num);

    Node  *p = g_pHead;

    //定义一个临时变量结点
    Node  *p2 = NULL;

    //如果要删除的学生信息是链表的头结点
    int  ptr = _stricmp(g_pHead->Stu.Num , Num);
    if (ptr  ==  0)
    {
        p2 = g_pHead;
        g_pHead = g_pHead->pNext;
        //释放内存,删除信息
        free(p2);
        printf("删除学生信息成功!");
        return;
    }

    //删除的学生信息不是头结点
    while (p->pNext  !=  NULL)
    {
        int  ptr = _stricmp(p->pNext->Stu.Num, Num);
        if (ptr  ==  0)
        {
            p2 = p->pNext;
            p->pNext = p->pNext->pNext;
            //释放内存,删除信息
            free(p2);
            printf("删除学生信息成功!");
            return;
        }
        if (ptr != 0)
        {
            printf("学生信息不正确,请确认学生信息!");
        }
        //遍历链表
        p = p->pNext;
    }
    //遍历完没有找到学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请确认学生信息!\n\n");
    }
    return;
}

//5修改学生信息
void Amend_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================修改学生信息功能================\n");
    printf("=================================================\n");

    char Num[10];  //学号

    printf("\n请输入需要修改学生的学号:");

    scanf("%s", Num);

    Node  *p = g_pHead;

    //遍历链表
    while (p != NULL)
    {
        int  ptr = _stricmp(p->Stu.Num, Num);
        if (ptr  ==  0)
        {
            //显示要修改学生信息
            printf("=================================================\n");
            printf("%s\t|  %s\t|  %0.2lf \t| %0.2lf \t| %0.2lf\t|\n",
                p->Stu.Num,                  //学号
                p->Stu.Name,                 //姓名
                p->Stu.Regular_Score,    //平时成绩
                p->Stu.Final_Score,      //期末成绩
                p->Stu.Total_Score); //总评成绩);
            printf("=================================================\n");
            printf("请修改学生信息\n\n");
            printf("学号\t姓名\t平时成绩\t期末成绩\t总评成绩\t\n");
            scanf("%s %s %lf %lf %lf",
                p->Stu.Num,                  //学号
                p->Stu.Name,                 //姓名
                &p->Stu.Regular_Score,   //平时成绩
                &p->Stu.Final_Score,     //期末成绩
                &p->Stu.Total_Score);    //总评成绩
            printf("修改学生信息成功!\n");
            break;
        }
        //遍历链表
        p = p->pNext;
    }
    //遍历完没有找到学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请确认学生信息!\n\n");
    }
    return;
}
觉得有帮助可以投喂下博主哦~感谢!
作者:Echo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
转载请注明文章地址及作者哦~
暂无评论

发送评论(请正确填写邮箱地址,否则将会当成垃圾评论处理) 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇