学生成绩管理系统完整版

学生成绩管理系统能够实现基本的录入、查找、插入、删除、修改、计算平均成绩、根据平均成绩排名和输出等功能。

学生成绩管理系统可以在VC++Dev-c++等可视化环境中编译

录入(选择1):录入也是创建的过程,创建时先输入各科成绩,再调用平均分函数,再以平均分的大小从大到小的顺序创建链表.

删除(选择2:根据学号来删除。

插入(选择3):插入和创建基本相同,也调用插入函数,根据平均分来

查找(选择4:根据学号来查找相应的信息。

修改(选择5):修改的基本思路是先根据学号来查找学号在链表中的位置,然后把它从链表中删除,再根据平均分的大小来调用插入函数重新插入链表中来,让链表始终有顺序。

   排名和输出在整个系统中都用到了!!!

1、 学生管理系统代码如下:

//编译环境:VC++

//date:2006.6.16

//作者:刘德范 05软件2 0513222

#include "stdio.h"

#include "malloc.h"

#include "stdlib.h"

#include "conio.h"

#include"ctype.h"

#define Esc 27       //定义键盘退出键Esc

#define NULL 0

#define LEN sizeof(struct student)

struct student

{

        char class_0[20];  //班级

        int num;           //学号 

        char name[20];     //姓名 

        float elec;        //电子技术

        float c_prog;      //C++程序设计

        float media;       //多媒体技术

        float eng;         //大学英语

        float math;        //高等数学

        float sport;       //大学体育

        float polity;      //马克思主义政治经济学    

        float ave;         //平均成绩

        int order;         //名次

        struct student *next;

};

 

   int n;    //全局变量,统计学生记录的个数

  

   //涵数声明区   

   struct student *create();

   void Output(struct student *head);

   struct student *Delete(struct student *head,int num);

    struct student *insert(struct student *head, struct student *stud);

   struct student *Lookup(struct student *head, int num);

   struct student *Modify(struct student *head, int num);

   float Statistic(struct student *p);

   struct student *order(struct student *head );

   void start();

 

 

//创建链表,输入学生的信息

 

struct student *create()

{

    struct student *head;

    struct student *p1;

    n=0;

    p1=( struct student*) malloc(LEN);

    printf("请输入学生信息,输入格式为:(每输入一项回车)/n");

    printf("以学号为0退出!!!/n");

    printf("请输入学生学号:");

    scanf("%d",&p1->num);

    printf("请输入学生姓名:");

    scanf("%s",&p1->name);

    printf("请输入学生班级:");

    scanf("%s",&p1->class_0);

       printf("/n");

    printf("请输入电子技术成绩:");

    scanf("%f",&p1->elec);

    printf("请输入程序设计成绩:");

    scanf("%f",&p1->c_prog);

    printf("请输入多媒体成绩:");

    scanf("%f",&p1->media);

    printf("请输入大学英语成绩:");

    scanf("%f",&p1->eng);

    printf("请输入高等数学成绩:");

    scanf("%f",&p1->math);

    printf("请输入大学体育成绩:");

    scanf("%f",&p1->sport);

    printf("请输入马克思主义政治经济学成绩:");

    scanf("%f",&p1->polity);

    printf("/n");

    head=NULL;

    while(p1->num!=0)

    {

            p1->ave=Statistic(p1);  //P1的平均值

            head=insert(head,p1);   //创建链表

            p1=(struct student*)malloc(LEN);

            printf("如果你想结束输入,请输入0/n");

            printf("请输入学生学号:");

            scanf("%d",&p1->num);

            if(p1->num==NULL)      //控制是否退出

                continue;

            printf("请输入学生姓名:");

            scanf("%s",&p1->name);

            printf("请输入学生班级:");

            scanf("%s",&p1->class_0);

            printf("/n");

            printf("请输入电子技术成绩:");

            scanf("%f",&p1->elec);

            printf("请输入程序设计成绩:");

            scanf("%f",&p1->c_prog);

            printf("请输入多媒体成绩:");

            scanf("%f",&p1->media);

            printf("请输入大学英语成绩:");

            scanf("%f",&p1->eng);

            printf("请输入高等数学成绩:");

            scanf("%f",&p1->math);

            printf("请输入大学体育成绩:");

            scanf("%f",&p1->sport);

            printf("请输入马克思主义政治经济学成绩:");

            scanf("%f",&p1->polity);

            printf("/n");           

    }

    //p2->next=NULL;

    return(head);

}

 

 

//查看链表

void Output(struct student *head)

{

      struct student *p;

      /*FILE *fp;

      if((fp=("answer.txt","wb"))==NULL)

      {

        printf("不能打开文件!!!/n");

        getch();

        exit(0);

      }*/

      printf("/n现在有 %d 个记录是:/n",n);

      p=head;

      if(head!=NULL)

          do

          {

               printf("学号为:%d/t",p->num);

               printf("姓名为:%s/t",p->name);

               printf("班级为:%s/t",p->class_0);

               printf("/n");

               printf("电子技术成绩为:%.2f/t",p->elec);

               printf("程序设计成绩为:%.2f/t",p->c_prog);

               printf("多媒体成绩为:%.2f/t",p->media);

               printf("/n");

               printf("英语成绩为:%.2f/t",p->eng);

               printf("数学成绩为:%.2f/t",p->math);

               printf("体育成绩为:%.2f/t",p->sport);

               printf("/n");

               printf("马克思主义政治经济学成绩为:%.2f/t",p->polity);

               printf("平均成绩为:%.2f/t",p->ave);

               printf("学生名次为:%d/t",p->order);

 

               /*if(fwrite(p,LEN,1,fp)!=1)

               {

                  printf("写入错误!!!/n");

                  exit(0);

               } */

               printf("/n");

               p=p->next;

          }

          while(p!=NULL);

       printf("/n按任意键继续!!!");

          printf("/n");

       //fclose(fp);

       getch();

}

 

 

//根据学号来删除学生信息

struct student *Delete(struct student *head,int num)

{

       struct student *p1,*p2;

       if (head==NULL)    //空链表时返回

       {

           printf("/n链表为空!/n");

           return(head);

       }

       p1=head;  

       while(num!=p1->num && p1->next!=NULL)

       {

            p2=p1;

            p1=p1->next;

       }

        if(num==p1->num)   //链表找到相应的学号

        {

               if(p1==head)     //表头删除

                   head=p1->next;

               else         //表中和表尾删除

                   p2->next=p1->next;

               printf("你删除的学生信息为:/n");

               printf("学号为:%d/t",p1->num);

               printf("姓名为:%s/t",p1->name);

               printf("班级为:%s/t",p1->class_0);

                        printf("/n");

               printf("电子技术成绩为:%.2f/t",p1->elec);

               printf("程序设计成绩为:%.2f/t",p1->c_prog);

               printf("多媒体成绩为:%.2f/t",p1->media);

                        printf("/n");

               printf("英语成绩为:%.2f/t",p1->eng);

               printf("数学成绩为:%.2f/t",p1->math);

               printf("体育成绩为:%.2f/t",p1->sport);

                        printf("/n");

               printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

               printf("平均成绩为:%.2f/t",p1->ave);

               printf("学生名次为:%d/t",p1->order);

               printf("/n");

                        head=order(head);

               n=n-1;

                        free(p1);

        }

        else        //找不到学号

                printf("学号 %d 没有找到!/n",num);

        return(head);

}

 

 

//插入学生信息

struct student *insert(struct student *head, struct student *stud)

{

         struct student *p0,*p1,*p2;

         p1=head;

         p0=stud;  

         if(head==NULL)    //空链表时返回

         {

                 head=p0;

                 p0->next=NULL;

         }

         else

         {

                  while((p0->ave<p1->ave) && (p1->next!=NULL))

                  {

                          p2=p1;          

                          p1=p1->next;

                  }

 

                  if(p0->ave>=p1->ave)

                  {

                          if(p1==head)   //链表头插入

                          {

                              p0->next=p1;

                              head=p0;

                                                   // head->next=p0;

                           }

                          else      //链表中插入

                          {

                              p2->next=p0;

                              p0->next=p1;

                          }

 

                 }

                 else     //链表尾部插入

                 {

                      p1->next=p0;

                      p0->next=NULL;

                 }

 

         }

         n=n+1;

               p0->order=0;   //初始化名次

         return(head);

}

 

//根据学生学号来查找学生信息

struct student *Lookup(struct student *head, int num)

{

          struct student *p1,*p2;

 

          p1=head;

 

          if(head==NULL)    //空链表时返回

          {

                printf("/n链表为空!/n");

                return(head);

          }

          else

          {

                while(num!=p1->num && p1->next!=NULL)

                {

                    p2=p1;

                    p1=p1->next;

                }

                if(num==p1->num)   //找到相对应的学号则显示

                {

                    printf("你查找的学生信息为:/n");

                    printf("学号为:%d/t",p1->num);

                    printf("姓名为:%s/t",p1->name);

                    printf("班级为:%s/t",p1->class_0);

                                   printf("/n");

                    printf("电子技术成绩为:%.2f/t",p1->elec);

                    printf("程序设计成绩为:%.2f/t",p1->c_prog);

                    printf("多媒体成绩为:%.2f/t",p1->media);

                                   printf("/n");

                    printf("英语成绩为:%.2f/t",p1->eng);

                    printf("数学成绩为:%.2f/t",p1->math);

                    printf("体育成绩为:%.2f/t",p1->sport);

                                   printf("/n");

                    printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

                    printf("平均成绩为:%.2f/t",p1->ave);

                    printf("学生名次为:%d/t",p1->order);

                    printf("/n");

                    return(head);

                }

                else         //学号不在链表内

                {

                    printf("你输入的学号不在链表内!/n");

                    return(head);

                }

          }

}

 

 

//根据学生学号来修改学生的信息

struct student *Modify(struct student *head, int num)

{

          struct student *p1,*p2;

          struct student *stude;

                stude=(struct student*)malloc(LEN);

                p1=head;

                if(head==NULL)       //链表为空时不能改变信息

          {

                printf("/n链表为空!/n");

                return(head);

          }

          else

          {

                while(num!=p1->num && p1->next!=NULL)

                {

                    p2=p1;

                    p1=p1->next;

                }

                if(num==p1->num)   //找到相应的学号时

                {

                    if(p1==head)     //表头删除

                                          head=p1->next;

                                   else         //表中和表尾删除

                                          p2->next=p1->next;

                                   printf("你要修改的学号为%d的先前信息为:/n",num);

                                   printf("学号为:%d/t",p1->num);

                                   printf("姓名为:%s/t",p1->name);

                                   printf("班级为:%s/t",p1->class_0);

                                   printf("/n");

                                   printf("电子技术成绩为:%.2f/t",p1->elec);

                                   printf("程序设计成绩为:%.2f/t",p1->c_prog);

                                   printf("多媒体成绩为:%.2f/t",p1->media);

                                   printf("/n");

                                   printf("英语成绩为:%.2f/t",p1->eng);

                                   printf("数学成绩为:%.2f/t",p1->math);

                                   printf("体育成绩为:%.2f/t",p1->sport);

                                   printf("/n");

                                   printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

                                   printf("平均成绩为:%.2f/t",p1->ave);

                                   printf("学生名次为:%d/t",p1->order);

                                   printf("/n");

                                printf("请输入你要改变的成绩:(格式为:每输入一次回车)/n");

                    printf("请输入电子技术成绩:");

                    scanf ("%f",&stude->elec);

                    printf("请输入程序设计成绩:");

                    scanf ("%f",&stude->c_prog);

                    printf("请输入多媒体技术成绩:");

                    scanf ("%f",&stude->media);

                    printf("请输入大学英语成绩:");

                    scanf ("%f",&stude->eng);

                    printf("请输入高等数学成绩:");

                    scanf ("%f",&stude->math);

                    printf("请输入体育成绩:");

                    scanf ("%f",&stude->sport);

                    printf("请输入马克思主义政治经济学成绩:");

                    scanf ("%f",&stude->polity);

                    p1->elec=stude->elec;

                    p1->c_prog=stude->c_prog;

                    p1->media=stude->media;

                    p1->eng=stude->eng;

                    p1->math=stude->math;

                    p1->sport=stude->sport;

                    p1->polity=stude->polity;

                    p1->ave=Statistic(p1);

                    head=insert(head,p1);

                                   head=order(head);

                                   n=n-1;

                                   return(head);

                }

                else       //找不到学号时

                {

                    printf("你查找的学号不在链表内!/n");

                    return(head);

                }

          }  

}

 

 

//根据学生平均分来排名

struct student *order(struct student *head )

{

            struct student *p;

            int i=1;

                     p=head;

            while(p!=NULL)

                     {

                            p->order=i;

                            i++;

                            p=p->next;

                     }

 

            return (head);

}

 

 

//根据输入的各科成绩来计算平均分

float Statistic(struct student *p)

{

            p->ave=(p->elec+p->c_prog+p->media+p->eng+p->math+p->sport+p->polity)/7.0;

            return p->ave;

}

 

//打印星涵数

void start()

{

       printf("********************************************************************************/n");

}

 

//主涵数

int main()

{     

     struct student *head,*stu;

     int  Delete_num;

     int  lookup_num;

     int  Modify_num;

     char ckey='a';

     int istate=0;

     do

     {

        system("cls"); //VC++清屏涵数 包含在#include"stdlib.h"

            //clrscr();   //C/C++清屏涵数 包含在#include"conio.h"

        start();

           printf("/t/t/tWelcome to my score program!!!/n");

           printf("/t/t/t欢迎你来到我的成绩管理系统 !!!/n");

           printf("/t/t/t/t/t作者:刘德范/n/n");

           start();

              printf("1:输入学生信息/n");

        printf("2:删除学生信息/n");

        printf("3:插入学生信息/n");

        printf("4:查找学生信息/n");

        printf("5:修改学生信息/n");

        printf("6:平均成绩排序/n");

        printf("7:输出学生信息/n");

        printf("Esc:退出/n");

        printf("请输入你的选择(1-7):/n/n");

        ckey=getch();

        if(ckey=='1')    //创建

        {

                printf("请输入学生的信息:/n/n");

                head=create();

                head=order(head);

                            Output(head);

                istate=1;   //记录链表是否有数据

        }

        else if((istate==0)&&(ckey!=Esc))

        {

                printf("/n错误:你必需先输入学生信息!!!");

                printf("/n按任意键继续!!!");

                printf("/n");

                getch();

        }

        else if(ckey=='2')   //删除

        {

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

                scanf ("%d",&Delete_num);

                head=Delete(head,Delete_num);

                Output(head);

        }

        else if(ckey=='3')   //插入

        {

 

                printf (" /n请输入你要插入的学生信息:/n/n");

                stu=(struct student*)malloc(LEN);

                printf("请输入学生信息,输入格式为:(每输入一项回车)/n");

                printf("请输入学生学号:");

                scanf("%d",&stu->num);

                printf("请输入学生姓名:");

                scanf("%s",&stu->name);

                printf("请输入学生班级:");

                scanf("%s",&stu->class_0);

                            printf("/n");

                printf("请输入电子技术成绩:");

                scanf("%f",&stu->elec);

                printf("请输入程序设计成绩:");

                scanf("%f",&stu->c_prog);

                printf("请输入多媒体成绩:");

                scanf("%f",&stu->media);

                printf("请输入大学英语成绩:");

                scanf("%f",&stu->eng);

                printf("请输入高等数学成绩:");

                scanf("%f",&stu->math);

                printf("请输入大学体育成绩:");

                scanf("%f",&stu->sport);

                printf("请输入马克思主义政治经济学成绩:");

                scanf("%f",&stu->polity);

                printf("/n");

                stu->ave=Statistic(stu);  //stu的平均值

                head=insert(head,stu);

                head=order(head);

                            Output(head);

        }

 

        else if(ckey=='4')   //查找

        {

                printf("  /n请输入你要查找的学生学号:/n/n");

                scanf ("%d,",&lookup_num) ;

                head=Lookup(head,lookup_num);

                Output(head);

        }

        else if(ckey=='5')    //修改

        {

                printf("  /n请输入你要修改学生信息的学号:/n/n");

                scanf ("%d,",&Modify_num) ;

                head=Modify(head,Modify_num);

                Output(head);

        }

        else if(ckey=='6')    //排序

        {

                order(head);

                Output(head);

        }

        else if(ckey=='7')   //查看

        {

                Output(head);

        }

     }

     while(ckey!=Esc);       //按键盘上的Esc键退出!!!

}
流程图:
流程图
结果如下

运行结果

  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C# 学生成绩管理系统是一个用于管理学生信息和成绩的应用程序。它可以帮助学校或教育机构轻松地记录、查询和分析学生的成绩数据。以下是一个可能的C# 学生成绩管理系统完整版的功能和实现思路: 1. 学生信息管理:系统应该能够添加、编辑和删除学生的基本信息,如姓名、学号、性别、年龄等。可以使用一个学生类来表示学生对象,并使用集合(如List)来存储学生信息。 2. 成绩录入:系统应该提供一个界面,让教师或管理员输入学生的各科成绩。可以为每个学生创建一个成绩类,包含学生学号和各科成绩属性。可以使用嵌套的集合(如Dictionary)来存储学生的成绩信息。 3. 成绩查询:系统应该提供查询学生成绩的功能,可以按学号或姓名进行查询,并显示学生的各科成绩。可以使用LINQ查询语句来实现成绩的查询和排序。 4. 成绩统计与分析:系统应该能够计算学生的总分和平均分,并提供各科成绩的最高分和最低分。可以使用LINQ查询语句来实现成绩的统计和分析。 5. 成绩报表:系统应该能够生成学生的成绩报表,包括学生基本信息和各科成绩。可以使用文件操作来将报表保存为文本文件或Excel文件。 6. 用户权限管理:系统应该提供不同用户角色的权限管理,如管理员可以添加和删除学生信息,教师可以录入和查询成绩。可以使用角色和权限的方式来实现用户权限管理。 以上是一个可能的C# 学生成绩管理系统完整版的功能和实现思路,具体的实现方式可以根据需求和设计进行调整和扩展。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值