学生成绩管理系统完整版

原创 2006年06月16日 19:49:00

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

学生成绩管理系统可以在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键退出!!!

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

运行结果

VB学生成绩管理系统——完整版

  • 2013年06月26日 10:09
  • 415KB
  • 下载

学生成绩管理系统 完整版

  • 2009年03月06日 09:42
  • 515KB
  • 下载

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加...

学生成绩管理系统(完整版)

  • 2012年08月27日 23:35
  • 1.72MB
  • 下载

学生成绩管理信息系统完整版

  • 2013年04月13日 18:09
  • 835KB
  • 下载

c++链表实现学生成绩管理系统(简易版)

常敲代码心情好 当年我的学生成绩管理系统的数据结构版是没写出来了的 ,现在有时间,顺便写了个简易版的管理系统,微微弥补一下一直以来的遗憾。 #include // #include using...

成绩管理系统完整版

  • 2012年06月05日 14:24
  • 1.04MB
  • 下载

数据结构实验 第一单元 学生成绩管理系统(链表版)

#define _TABLE_STU_PRINT_LEVEL_LINE printf("**************************************************\n"); ...

完整版学生管理系统界面

  • 2017年07月23日 16:01
  • 21KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学生成绩管理系统完整版
举报原因:
原因补充:

(最多只允许输入30个字)