课程设计之学生成绩管理系统

这是一个基于C语言实现的学生信息及成绩管理系统,提供了新建、增加、删除、修改学生信息等功能,并支持成绩排序、查询以及数据的文件读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include<string.h>
struct student
 {
     char nu[99];
     char ss[10][30];
    long long int num;          //学号
    char cla[30];               //班级
    char name[30];              //姓名
    char xi[30];                //性别
    int s[10];                  //C语言、高数、英语、计算机原理、离散数学
    int zp[10];                 // zp1,zp2总分,总分排名
 }std[100];
 int sum=1;
 void f1(struct student std[]);
 void f2(struct student std[]);
 void f3(struct student std[]);
 void f4(struct student std[]);
 void f5(struct student std[]);
 void f6(struct student std[]);
 void f7(struct student std[]);
 void f8(struct student std[]);
 void f9(struct student std[]);
 int main()
 {
    int i,t;
    int sa;
    begin:system("cls");
    printf("\n\n\n\n\n\t\t\t\t\t     学生成绩管理系统:\n");
    printf("\t\t\t\t\t\t请进行操作:\n\t\t\t\t\t\t1-新建成绩记录文件\n\t\t\t\t\t\t2-增加学生记录\n");
    printf("\t\t\t\t\t\t3-删除\n\t\t\t\t\t\t4-修改\n\t\t\t\t\t\t5-排序\n\t\t\t\t\t\t6-查询\n\t\t\t\t\t\t7-显示内存记录\n");
    printf("\t\t\t\t\t\t8-从文件获得学生数据\n\t\t\t\t\t\t9-保存到文件\n\t\t\t\t\t\t0-\n\t\t\t\t\t\tEsc-退出程序\n");
    sa=getch();
    if(sa==49)          //新建文件
        f1(std);
    else if(sa==50)     //增加记录
        f2(std);
    else if(sa==51)     //删除
        f3(std);
    else if(sa==52)     //修改
        f4(std);
    else if(sa==53)     //排序
        f5(std);
    else if(sa==54)     //查询
        f6(std);
    else if(sa==55)     //显示
        f7(std);
    else if(sa==56)     //从文件中获得
        f8(std);
    else if(sa==57)     //保存到文件
        f9(std);
    else if(sa==27)     //退出程序
        exit(1);
    goto begin;
    return 0;
 }
void f1(struct student std[])                                                   //新建记录
{
    system("cls");
    int a;
    if(sum!=1)
    {
        printf("\t\t\t内存中有学生的成绩记录,新建文件会\n\t\t\t覆盖掉原有记录,是否将其先进行存储?\n----确认储存请按回车键\n----覆盖请按其他键位");
        a=getche();
        if(a==13)
            f9(std);
        else
            MessageBox(NULL,TEXT("原有记录已被覆盖"),TEXT("原有学生记录"),MB_OK);
    }
    sum=1;
    MessageBox(NULL,TEXT("已成功新建在内存!"),TEXT("新建"),MB_OK);
    return ;
}
 void f2(struct student std[])                                                  //增加学生
 {
     int pai[100];
     int i,t;
     int x;
     int b;
     system("cls");
     while(1)
     {
        printf("\n\n\n\t\t\t请输入学生的学号(输入0终止):\n");
        scanf("%s",&std[sum].nu);
        if(std[sum].nu[0]=='0'&&std[sum].nu[1]==NULL)
                break;
        if(strlen(std[sum].nu)>15)
        {
            MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
            continue;
        }
        std[sum].num=0;
        for(i=0;std[sum].nu[i]!=NULL;i++)
            std[sum].num=std[sum].num*10+std[sum].nu[i]-48;
        if(std[sum].num>999999999999)
        {
            MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
            continue;
        }
        printf("\t\t\t请输入学生的班级:\n");
        do
        {
            scanf("%s",&std[sum].cla);
            if(strlen(std[sum].cla)>10)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].cla)>10);
        printf("\t\t\t请输入学生的姓名:\n");
        do
        {
            scanf("%s",&std[sum].name);
            if(strlen(std[sum].name)>10)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].name)>10);
        printf("\t\t\t请输入学生的性别:\n");
        do
        {
            scanf("%s",&std[sum].xi);
            if(strlen(std[sum].xi)>5)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].xi)>5);
        printf("\t\t\t请输入学生的c语言成绩:\n");
        do{
            std[sum].s[1]=0;
            scanf("%s",&std[sum].ss[1]);
            for(i=0;std[sum].ss[1][i]!=NULL;i++)
                std[sum].s[1]=std[sum].s[1]*10+std[sum].ss[1][i]-48;
            if(std[sum].s[1]>100||std[sum].s[1]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[1]>100||std[sum].s[1]<0);
        printf("\t\t\t请输入学生的高数成绩:\n");
        do{
            std[sum].s[2]=0;
            scanf("%s",&std[sum].ss[2]);
               for(i=0;std[sum].ss[2][i]!=NULL;i++)
                std[sum].s[2]=std[sum].s[2]*10+std[sum].ss[2][i]-48;
            if(std[sum].s[2]>100||std[sum].s[2]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[2]>100||std[sum].s[2]<0);
        printf("\t\t\t请输入学生的英语成绩:\n");
         do{
            std[sum].s[3]=0;
            scanf("%s",&std[sum].ss[3]);
            for(i=0;std[sum].ss[3][i]!=NULL;i++)
                std[sum].s[3]=std[sum].s[3]*10+std[sum].ss[3][i]-48;
            if(std[sum].s[3]>100||std[sum].s[3]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[3]>100||std[sum].s[3]<0);
        printf("\t\t\t请输入学生的计算机原理成绩:\n");
        do{
            std[sum].s[4]=0;
            scanf("%s",&std[sum].ss[4]);
            for(i=0;std[sum].ss[4][i]!=NULL;i++)
                std[sum].s[4]=std[sum].s[4]*10+std[sum].ss[4][i]-48;
            if(std[sum].s[4]>100||std[sum].s[4]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[4]>100||std[sum].s[4]<0);
        printf("\t\t\t请输入学生的离散数学成绩:\n");
        do{
            std[sum].s[5]=0;
            scanf("%s",&std[sum].ss[5]);
            for(i=0;std[sum].ss[5][i]!=NULL;i++)
                std[sum].s[5]=std[sum].s[5]*10+std[sum].ss[5][i]-48;
            if(std[sum].s[5]>100||std[sum].s[5]<0)
                MessageBox(NULL,TEXT("输入为非法数据!请重新输入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[5]>100||std[sum].s[5]<0);
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
     }
     for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    return ;
}
  void f3(struct student std[])                                                 //删除
{
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     int a;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t删除:\n");
     printf("\t\t请选择删除方式:1-按学号删除、2-按姓名删除、3-按总分名次删除:\n");
     fa=getch();
     if(fa==49)
     {
         printf("请输入要删除的学号,按回车键结束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("请输入要删除的姓名,按回车键结束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("请输入要删除的名次,按回车键结束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,请检查输入!"), TEXT("错误"), MB_OK);         //跳出窗口
        return;
     }
    printf("待删除者信息为:\n");
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("确认删除请按回车键,取消请按其他键位\n");
    a=getch();
    if(a!=13)
        return ;
     for(i=t;i<sum;i++)
     {
        std[99]=std[i];
        std[i]=std[i+1];
        std[i+1]=std[99];
     }
     sum--;
    MessageBox(NULL, TEXT("删除成功!"), TEXT("删除"), MB_OK);         //跳出窗口
    return ;
}
void f4(struct student std[])                                                   //修改信息
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    long long int gai;
    int i,t=0;
    int ji;
    int a;
    system("cls");
    printf("请键入被修改者学号(以回车键结束):\n");
    scanf("%lld",&gai);
    for(i=1;i<=sum;i++)
        if(std[i].num==gai)
            t=i;
    if(t==0)
    {
        MessageBox(NULL, TEXT("未找到待修改者!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    printf("待修改者信息为:\n");
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("确认修改请按回车键,取消修改请按其他键位\n");
    a=getch();
    if(a==13)
    {
         printf("请依次键入修改者C语言、高数、英语、计算机原理、离散数学各科成绩\n");
        scanf("%d%d%d%d%d",&std[t].s[1],&std[t].s[2],&std[t].s[3],&std[t].s[4],&std[t].s[5]);
        MessageBox(NULL, TEXT("修改成功"), TEXT("修改学生信息及成绩"), MB_OK);         //跳出窗口
    }
    printf("继续修改请按回车,返回主菜单请按Esc键\n");
    ji=getch();
    if(ji==13)
        f4(std);
    else
        return;
}
void f5(struct student std[])                                                   //分方式排序
{
    int i,t;
    int shun;
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    printf("\n\n\n\t  请选择排序方式:\n\t1-按学号的升序进行排序\n\t2-按学号的降序进行排序\n");
    shun=getch();
    if(shun==49)
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num>std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    else
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num<std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    MessageBox(NULL, TEXT("排序完成!"), TEXT("排序"), MB_OK);                   //跳出窗口
    return ;
}
 void f6(struct student std[])                                                  //分方式查询
 {
     system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t查询:\n");
     printf("\t\t请选择查询方式:1-学号查询、2-姓名查询、3-总分名次查询:\n");
     fa=getch();
     if(fa==49)
     {
         printf("请输入要查询的学号,按回车键结束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("请输入要查询的姓名,按回车键结束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("请输入要查询的名次,按回车键结束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,请检查输入!"), TEXT("错误"), MB_OK);         //跳出窗口
        return;
     }
    printf("学号\t  班级      姓名\t\t性别   C语言  高数   英语  计算机原理 离散数学\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("\t\t\t按任意键返回主菜单......");
    t=getch();
     return ;
 }
 void f7(struct student std[])                                       //显示
 {
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    int i,t;
    printf("\n\n\t*************************************************************************************************\n");
    printf("\t\t\t\t\t\t   学生信息及成绩\n");
    printf("\t学号\t  班级      姓名\t\t性别     C语言  高数   英语  计算机原理 离散数学  总分   名次\n");
    for(i=1;i<sum;i++)
        printf("\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    printf("\t\t按任意键返回主菜单......");
    t=getch();
    return ;
 }
void f8(struct student std[])
{
    FILE * fp=fopen("student.txt","r");
    int pai[100];
    int i,t,x;
    if((fp)==NULL)
    {
        MessageBox(NULL, TEXT("没有找到学生成绩文件!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    while(fscanf(fp,"%lld %s %s %s %d %d %d %d %d",&std[sum].num,std[sum].cla,std[sum].name,std[sum].xi,&std[sum].s[1],&std[sum].s[2],&std[sum].s[3],&std[sum].s[4],&std[sum].s[5])!=EOF)
    {
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
    }
    for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    MessageBox(NULL, TEXT("从文件获得数据成功!"), TEXT("从文件获得数据"), MB_OK);         //跳出窗口
    fclose(fp);
    return ;
}
void f9(struct student std[])
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("内存中无记录!"), TEXT("错误"), MB_OK);         //跳出窗口
        return ;
    }
    int a;
    printf("存储方式:\n1-默认文件名存储\n2-自定义文件名存储\n");
    a=getch();
    FILE * fp;
    if(a==50)
    {
        char wenjian[100];
        printf("请输入您想要存放在或者新建的文本文件名字,例如student.txt\n");
        gets(wenjian);
        fp=fopen(wenjian,"w");
    }
    else
        fp=fopen("student1.txt","w");
    int i;
    fprintf(fp,"\n\n\t*************************************************************************************************\n");
    fprintf(fp,"\t\t\t\t\t\t   学生信息及成绩\n");
    fprintf(fp,"\t学号\t  班级      姓名\t\t性别     C语言  高数   英语  计算机原理 离散数学  总分   名次\n");
    for(i=1;i<sum;i++)
        fprintf(fp,"\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    fclose(fp);
    MessageBox(NULL, TEXT("保存数据成功!"), TEXT("保存数据"), MB_OK);         //跳出窗口
    return ;
}



运行:
 

 

 

 

 

 

 

摘 要 高校学生成绩管理工作是高等教育中的一个极为重要的环节,是院校学生管理的基础。面对种类繁多的数据和报表,手工处理方式已经很难跟上现代化管理的步伐,传统的文件管理方式进行成绩管理,效率很低,耗时费力,容易出错,安全性也存在问题。特别是在查询上,由于文件过多,带来很多不便。随着计算机及通讯技术的飞速发展,高等教育对教务管理工作提出了更高的要求。尽快改变传统的管理模式,运用现代化手段进行科学管理。 本设计研究的是基于J2EE的高校成绩管理系统的设计与实现。本系统是基于J2EE开发的成绩管理系统,弥补了人工管理的不足,提高了一定的效率。主要功能包括教师对学生成绩的记录,生成总评成绩,成绩单的提交。学生查询相关的成绩信息。管理员对学生、教师,课程、班级进行综合管理。该系统为教务处人员提供了强大的成绩管理功能,为教师提供了对平时成绩和期末成绩方便的管理,为学生提供了一个方便快捷的查询功能。本设计的开发工具使用MyEclipse,数据库使用的MySQL,框架是struts整合hibernate。 关键词:J2EE; 成绩管理; MySQL; MyEclipse Abstract College student grade management is a very important aspect of higher education,is the foundation of college students management. Faced with a wide variety of data and statements, the manual processing methods have been difficult to keep up with the pace of modern management, the traditional document management about grade management, is inefficient, time-consuming effort, error-prone, and also existing security issues. Because too many documents, it brings a lot of inconvenience in the query. With the computer and the rapid development of communication technology, higher education must meet a higher demand. We should change the traditional mode of management and use modern means of scientific management as soon as possible. The design based on J2EE technology mainly research about Implementation of grade management system of universities. The system is based on J2EE platform, cover the deficiencies of manual management, and improve the efficiency of management. Main features including: teachers record the grade of students in the term examines, generate the report card to examine. Students can query their information at any time with this system. Administrator can manage the students, teachers, curriculum, classes together. The system for the Registry staff with a powerful performance management capabilities, provide teachers with the usual results and final results for the management, provide students with a convenient and efficient enquiry function. The development tools is MyEclipse, database is MySQL, integrated framework is struts and hibernate. Key words: J2EE; Grade Management; MySql; MyEclipse 目 录 Abstract II 1 绪论 1 1.1高校学生成绩管理系统实施的背景分析 1 1.2选题的目的及意义 1 2 J2EE平台及其支撑技术 3 2.1 J2EE平台 3 2.1.1 J2EE简介 3 2.1.2 JSP技术 5 2.1.3 Servlet技术 7 2.1.4 EJB技术 8 2.1.5 J2EE发展趋势 9 2.2 MVC模式介绍 10 2.3 Struts框架介绍 14 2.4 Hibernate框架介绍 16 3 基于J2EE技术平台的学生成绩管理分析 18 3.1系统可行性分析. 18 3.1.1技术可行性 18 3.1.2经济可行性 18 3.1.3运行可行性 18 3.2系统需求分析 18 3.3系统整体说明 19 3.4系统模块的功能概述 19 4 系统总体设计 20 4.1.系统结构图 20 4.1.1包组织结构图 20 4.3数据流程图设计 21 4.4.1 E-R图 22 4.3主要功能模块的设计 22 4.2.1用户登录模块设计 22 4.2.2管理员管理模块设计 23 4.2.3教师成绩录入和修改模块设计 23 4.2.4学生管理模块设计 23 5 基于J2EE技术平台的系统详细设计 24 5.1数据库详细设计 24 5.1.1 数据库需求分析 24 5.1.2 数据库概念结构设计 25 5.1.3 数据库逻辑结构设计 26 5.1.4 数据库结构的实现 28 5.1.5数据库模型 30 6 系统编码与测试 31 6.1系统编码说明 31 6.1.1系统配置文件 31 6.1.2系统运行效果图示. 35 6.1.3系统主要功能模块详细实现 40 6.1.3.1管理员管理模块详细介绍 40 6.1.3.2管理员管理模块代码说明 40 6.2 系统开发环境的搭建 47 6.2.1软件环境的配置 47 6.2.2硬件环境的配置 47 6.3系统性能测试 47 6.3.1安全性测试 47 6.3.2稳定性测试 47 7 总结与展望 48 7.1总结 48 7.2展望 48 参考文献: 49 致谢 49
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值