# C语言实现简单的学生成绩管理代码

学生管理系统-C语言

大一上学习了c语言,同时为了交作业,就选择写一个简单的学生管理系统,主要运用了结构体,函数,链表,数组,分支,循环等C语言知识.有能力的同学可以自行补上文件操作的知识哦!
代码实现的流程有通过结构体创建学生信息(包括学号,姓名以及高数,英语,C语言的成绩),之后通过各个函数来实现学生信息的添加,修改,删除,查询,以及显示,最后通过一个主菜单进行调用各个函数功能.

代码如下,每个函数都有声明哦,所以我相信你们都会看懂每个函数的功能.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student
{
    long ID;//学号
    char name[15];//姓名
    int score[3];//高数,英语,C语言的成绩
    struct student *next;
} S;
/*
函数功能:    学生信息输入
函数入口参数:头指针
返回值类型:  返回头指针
*/
S *InputStudentDate(S *head)
{
    S *pr=head,*p=NULL;
    int i;
    p=(S*)malloc(sizeof(S));
    if(p==NULL)
    {
        printf("Sorry, the system has failed!\n");
        exit(0);
    }
    if(head==NULL)
    {
        head=p;
    }
    else
    {
        while(pr->next!=NULL)
        {
            pr=pr->next;
        }
        pr->next=p;
    }
    printf("学生学号:");
    scanf("%ld",&p->ID);
    printf("学生姓名:");
    getchar();
    scanf("%s",p->name);
    printf("请分别输入该学生的高数,英语,C语言成绩:");
    for(i=0; i<3; i++)
    {
        scanf("%d",&p->score[i]);
    }
    printf("***学生信息添加成功!***\n");
    p->next=NULL;
    return head;
}
/*
函数功能:    通过输入学号进行学生信息修改
函数入口参数:头指针
返回值类型:  返回头指针
*/
S *ChangeStudent(S *head)
{
    S *pr=head,*temp=NULL;
    long ID;
    int choose=0;
    char reply='y';
    if(head==NULL)
    {
        printf("不存在学生信息,无法修改!\n");
        return head;
    }
    printf("请输入想要修改的学生ID:");
    scanf("%ld",&ID);
    while(reply=='y' || reply =='Y')
    {
        for(; pr!=NULL; pr=pr->next)
        {
            if(pr->ID==ID)
            {
                temp=pr;
                break;
            }
        }
        if(temp==NULL)
        {
            printf("输入的ID不存在!\n");
            printf("是否继续,是y(Y),请选择:");
            getchar();
            scanf("%c",&reply);
            if(reply=='Y' || reply=='y')
            {
                printf("请重新输入想要修改的学生ID:");
                scanf("%ld",&ID);
                pr=head;
            }
            else
            {
                return head;
            }
        }
        else
        {
            reply='n';
        }
    }
    if(temp!=NULL)
    {
        pr=temp;
        temp=NULL;
        while(1)
        {
            printf("***********学生信息修改***********\n");
            printf("           1.修改学号 \n");
            printf("           2.修改姓名\n");
            printf("           3.修改高数成绩\n");
            printf("           4.修改英语成绩\n");
            printf("           5.修改C语言成绩\n");
            printf("           6.返回上一层\n");
            printf("**********************************\n");
            printf("请选择:");
            scanf("%d",&choose);
            if(choose==1)
            {
                printf("请输入新的学号:");
                scanf("%ld",&pr->ID);
            }
            else if(choose==2)
            {
                printf("请输入新的学生姓名:");
                scanf("%s",pr->name);
            }
            else if(choose==3)
            {
                printf("请输入新的高数成绩:");
                scanf("%d",&pr->score[0]);
            }
            else if(choose==4)
            {
                printf("请输入新的英语成绩:");
                scanf("%d",&pr->score[1]);
            }
            else if(choose==5)
            {
                printf("请输入新的C语言成绩:");
                scanf("%d",&pr->score[2]);
            }
            else if(choose==6)
            {
                return head;
            }
            else
            {
                printf("输入错误!\n");
            }
        }
    }
    return head;
}
/*
函数功能:    学生信息删除
函数入口参数:头指针
返回值类型:  返回头指针
*/
S *DeleteStudentDate(S *head)
{
    long ID;
    S *pr=head,*p=head;
    if(head==NULL)
    {
        printf("没有学生信息哦!\n");
        return head;
    }
    else
    {
        printf("请输入想要删除的学生ID:");
        scanf("%ld",&ID);
        while(pr->next!=NULL && pr->ID!=ID)
        {
            p=pr;
            pr=pr->next;
        }
        if(pr->ID==ID)
        {
            if(pr==head)
            {
                head=pr->next;
            }
            else
            {
                p->next=pr->next;
            }
            free(pr);
            printf("**删除成功**\n");
        }
        else
        {
            printf("对不起,没有找到该学生!\n");
        }
        return head;
    }
}
/*
函数功能:    学生信息查询
函数入口参数:头指针
返回值类型:  返回头指针
*/
S *QueryStudentData(S *head)
{
    S *pr=head,*temp=NULL,*pp=NULL;
    long ID;
    if(head==NULL)
    {
        printf("不存在学生信息,无法查询!\n");
        return head;
    }
    printf("请输入想要查询的用户账号:");
    scanf("%ld",&ID);
    for(pr=head; pr!=NULL; pr=pr->next)
    {
        if(pr->ID==ID)
        {
            temp=pr;
            break;
        }
    }
    if(temp==NULL)
    {
        printf("输入的学生ID不存在!\n");
        return head;
    }
    if(temp!=NULL)
    {
        pr=temp;
        printf("----------------学生信息如下------------------\n");
        printf("    1.学号:%-10d\n",pr->ID);
        printf("    2.姓名:%-10s\n",pr->name);
        printf("    3.高数:%-6d\n",pr->score[0]);
        printf("    4.英语:%-6d\n",pr->score[1]);
        printf("    5.C语言:%-6d\n",pr->score[2]);
        printf("----------------------------------------------\n");
    }
    return head;
}
/*
函数功能:    学生信息显示
函数入口参数:头指针
返回值类型:  返回头指针
*/
S *DisplayReaderData(S *head)
{
    S *pr=head;
    if(head==NULL)
    {
        printf("没有学生信息哦!\n");
        return head;
    }
    printf("----------------学生信息如下------------------\n");
    while(pr!=NULL)
    {
        printf("    1.学号:%-10d",pr->ID);
        printf("    2.姓名:%-10s",pr->name);
        printf("    3.高数:%-6d",pr->score[0]);
        printf("    4.英语:%-6d",pr->score[1]);
        printf("    5.C语言:%-6d\n",pr->score[2]);
        printf("----------------------------------------------\n");
        pr=pr->next;
    }
    return head;
}
void Menu(S *head)
{
    int choose;
    while(1)
    {
        printf("*************************************************\n");
        printf("            1.学生信息输入\n");
        printf("            2.学生信息修改\n");
        printf("            3.学生信息删除\n");
        printf("            4.学生信息查询\n");
        printf("            5.学生信息显示\n");
        printf("            6.退出\n");
        printf("*************************************************\n");
        printf("请选择:");
        scanf("%d",&choose);
        if(choose==1)
        {
            head=InputStudentDate(head);
        }
        else if(choose==2)
        {
            head=ChangeStudent(head);
        }
        else if(choose==3)
        {
            head=DeleteStudentDate(head);
        }
        else if(choose==4)
        {
            head=QueryStudentData(head);
        }
        else if(choose==5)
        {
            head=DisplayReaderData(head);
        }
        else if(choose==6)
        {
            exit(0);
        }
        else
        {
            printf("输如错误,请重新输入!\n");
        }
    }
}
int main()
{
    S *head=NULL;
    Menu(head);
}

总结

我认为我写的代码还是有很多的缺陷与功能上的不足,比如没有使用文件操作,将数据保存到文件当中,同时,没有根据学生成绩去进行学生信息的排名,当然每个人都有自己的想法,相信大家肯定会想到更多新功能的.而且我也特别相信大家有能力去增加文件操作的代码喽.
当然,我认为我代码的书写规范还算是合格的吧,大家也可以对比一下,写的比我好的一定也要告诉我哦.毕竟好知识是要分享的.
最后希望大家不要只去看代码,毕竟好记性不如烂笔头.自己写出来才是王道.

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值