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

本文档展示了一个简单的学生成绩管理程序的课程设计,旨在实现对学生信息的基本操作和管理功能。

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

问题及代码:

    编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。

  main.cpp:

#include"heaad.h"


int  main()
{
char c;
cla a;
do
{
cout<<"\n 学 生 成 绩 管 理 系 统 \n";
cout<<"**************************************\n";
cout<<" 作者:计控学院 :刘磊 \n";
cout<<" 1……增加学生 \n";
cout<<" 2……删除学生 \n";
cout<<" 3……修改学生 \n";
cout<<" 4……查询学生信息 \n";
cout<<" 5……排序 \n";
cout<<" 6……保存信息 \n";
//cout<<" 7……读取信息 \n";
cout<<" 7……退出 \n";
cout<<"**************************************\n";
cout<<"请选择(1-7):";
cin>>c;
//以下进行条件选择
switch(c)
{
case '1': a.sadd();break;
case '2': a.sremove();break;
case '3': a.samend();break;
case '4': a.ssearch();break;
case '5': a.staxis();break;
case '6': a.ssave();break;
//case '7': a.sload();break;
}

}while(c!='7');
}

 heaad.h:

#ifndef HEAAD_H_INCLUDED
#define HEAAD_H_INCLUDED


#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
#include<windows.h>
using namespace std;

#define max 100;

class student
{
public:
student *next;
public:
string name;//姓名
long num;//学号
int x,y,z;//数学,语文,英语
int AA;//总分
void play(){cout<<name<<"学生的学号是"<<num<<",数学:"<<x<<",语文:"<<y<<",英语:"<<z<<",总分:"<<AA<<endl;};
student(string sname,long snum,int sx,int sy,int sz)
{
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
}
};


class cla
{
public:
cla()//构造函数
{
stu=0;
//sload();
}
~cla()//析构函数
{
student *p;
p=stu;
while(p)
{
p=p->next;
delete stu;
stu=p;
}
stu=0;
}
void sadd(); //添加
void sremove(); //删除
void samend(); //修改
void ssearch(); //查询
void staxis(); //排序
void ssave(); //保存
void sload(); //读取

//排序函数
void pxh();
void psx();
void pyw();
void pyy();
void pAA();
private:
student *stu; //头接点
};

#endif // HEAAD_H_INCLUDED
  yuanwenjian.cpp:

 

#include"heaad.h"

void cla::sadd()//添加
{
    student *q;
    string name1;
    long num1;
    int x1,y1,z1;



    system("cls");
    cout<<"\n **增加的学生** \n"<<endl;
    cout<<"请输入学生的(中间用空格间隔) "<<endl;
    cout<<"姓名 学号 数学成绩 语文成绩 英语成绩:"<<endl;
    cin>>name1>>num1>>x1>>y1>>z1;

    q=new student(name1,num1,x1,y1,z1);
    q->next=0;
    q->AA=x1+y1+z1;

    if(stu)
    {
        student *t;
        t=stu;
        if(t->num==num1)
        {
            cout<<"学号已存在,请重新输入"<<endl;
            return;
        }
        while(t->next)
        {
            if(t->num==num1)
            {
                cout<<"学号已存在,请重新输入"<<endl;
                return;
            }
            t=t->next;
        }
        t->next=q;
    }
    else
    {
        stu=q;
    }
    cout<<"输入完毕"<<endl;
}

void cla::sremove()//删除
{
    system("cls");
    int num1;
    cout<<"\n** 删除学生信息 **\n";
    cout<<"请输入想要删除学生的学号:";
    cin>>num1;//查找要删除的结点
    student *p1,*p2;
    p1=stu;
    while(p1)
    {
        if(p1->num==num1)
            break;
        else
        {
            p2=p1;
            p1=p1->next;
        }
    }

//删除结点
    if(p1!=NULL)//若找到结点,则删除
    {
        p1->play();
        cout<<"确定删除吗?[Y/N]"<<endl;
        char c;
        cin>>c;
        if(toupper(c)!='Y') return;

        if(p1==stu) //若要删除的结点是第一个结点
        {
            stu=p1->next;
            delete p1;
        }
        else //若要删除的结点是后续结点
        {
            p2->next=p1->next;
            delete p1;
        }
        cout<<"找到学号为"<<num1<<"的学生,并删除\n";
    }
    else //未找到结点
        cout<<"未找到想要删除的学生!\n";
}

void cla::samend()//修改
{
    system("cls");
    long num1;
    cout<<"\n** 修改学生信息 **\n";
    cout<<"输入要修改学生的学号";
    cin>>num1;

//查找要修改的结点
    student *p1,*p2;
    p1=stu;
    while(p1)
    {
        if(p1->num==num1)
            break;
        else
        {
            p2=p1;
            p1=p1->next;
        }
    }
    if(p1!=NULL)
    {
        cout<<"学号是"<<num1<<"的学生的信息"<<endl;
        cout<<"姓名 "<<p1->name<<"数学"<<p1->x<<"语文"<<p1->y<<"英语"<<p1->z<<endl;
        cout<<"请输入修改后的信息:姓名 数学成绩 语文成绩 英语成绩"<<endl;
        cin>>p1->name>>p1->x>>p1->y>>p1->z;
        p1->AA=p1->x+p1->y+p1->z;
        cout<<"修改成功"<<endl;
    }
    else //未找到接点
        cout<<"未找到!\n";
}

void cla::ssearch()//查询
{
    system("cls");
    cout<<"\n** 查询学生信息 **\n"<<endl;
    cout<<"请输入查询方式:"<<endl;
    cout<<"1.按学号查询"<<endl;
    cout<<"2.按姓名查询"<<endl;
    cout<<"3.返回"<<endl;
    char c;
    cin>>c;
    switch (c)
    {
    case '1':
    {
        long num1;
        cout<<"要查询的学号"<<endl;
        cin>>num1;
//查找要查询的结点
        student *p1,*p2;
        p1=stu;
        while(p1)
        {
            if(p1->num==num1)
                break;
            else
            {
                p2=p1;
                p1=p1->next;
            }
        }

        if(p1!=NULL)
        {
            cout<<"学号是"<<num1<<"的学生的信息"<<endl;
            cout<<"姓名:"<<p1->name<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl;
            cout<<"查询完毕...";
        }
        else //未找到接点
            cout<<"未找到!\n";
        break;
    }
    case '2':
    {
        string name1;
        cout<<"要查询的学生姓名"<<endl;
        cin>>name1;
//查找要查询的结点
        student *p1,*p2;
        p1=stu;
        while(p1)
        {
            if(p1->name==name1)
                break;
            else
            {
                p2=p1;
                p1=p1->next;
            }
        }

        if(p1!=NULL)
        {
            cout<<name1<<"的学生的信息"<<endl;
            cout<<"学号:"<<p1->num<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl;
            cout<<"查询完毕...";
        }
        else //未找到接点
            cout<<"未找到!\n";
        break;
    }
    case '3':
        return;
    }

}

void cla::pxh() //按学号排序
{
    student *p1,*p2;
    int n;
    p1=stu;
    n=1;
    while(p1->next)
    {
        n++;
        p1=p1->next;
    }
    cout<<"共有"<<n<<"条信息..."<<endl;
    int i;
    p1=stu;
    for(i=1; i<n; i++)
    {
        p1=stu;
        if (p1->num>p1->next->num) // 如果头结点大于第二个的
        {
            p2=p1->next;
            p1->next=p1->next->next;
            p2->next=p1; //头结点交换
            stu=p2;
        }
        p1=stu;
        while(p1->next->next) //中间的交换
        {
            p2=p1;
            p1=p1->next;
            if(p1->num>p1->next->num)
            {
                p2->next=p1->next;
                p1->next=p1->next->next;
                p2->next->next=p1;
                p1=p2->next; //交换
            }
        }
    }

    p1=stu;
    do
    {
        p1->play();
        p1=p1->next;
    }
    while(p1);
}

void cla::psx()//按数学成绩排序
{
    student *p1,*p2;
    int n;
    p1=stu;
    n=1;
    while(p1->next)
    {
        n++;
        p1=p1->next;
    }
    cout<<"共有"<<n<<"条信息..."<<endl;
    int i;
    p1=stu;
    for(i=1; i<n; i++)
    {
        p1=stu;
        if (p1->x>p1->next->x) // 如果头结点大于第二个的
        {
            p2=p1->next;
            p1->next=p1->next->next;
            p2->next=p1; //头结点交换
            stu=p2;
        }
        p1=stu;
        while(p1->next->next) //中间的交换
        {
            p2=p1;
            p1=p1->next;
            if(p1->x>p1->next->x)
            {
                p2->next=p1->next;
                p1->next=p1->next->next;
                p2->next->next=p1;
                p1=p2->next; //交换
            }
        }
    }
    p1=stu;
    do
    {
        p1->play();
        p1=p1->next;
    }
    while(p1);
}


void cla::pyw()//按语文成绩排序
{
    student *p1,*p2;
    int n;
    p1=stu;
    n=1;
    while(p1->next)
    {
        n++;
        p1=p1->next;
    }
    cout<<"共有"<<n<<"条信息..."<<endl;
    int i;
    p1=stu;
    for(i=1; i<n; i++)
    {
        p1=stu;
        if (p1->y>p1->next->y) // 如果头结点大于第二个的
        {
            p2=p1->next;
            p1->next=p1->next->next;
            p2->next=p1; //头结点交换
            stu=p2;
        }
        p1=stu;
        while(p1->next->next) //中间的交换
        {
            p2=p1;
            p1=p1->next;
            if(p1->y>p1->next->y)
            {
                p2->next=p1->next;
                p1->next=p1->next->next;
                p2->next->next=p1;
                p1=p2->next; //交换
            }
        }
    }
    p1=stu;
    do
    {
        p1->play();
        p1=p1->next;
    }
    while(p1);
}

void cla::pyy()//按英语成绩排序
{
    student *p1,*p2;
    int n;
    p1=stu;
    n=1;
    while(p1->next)
    {
        n++;
        p1=p1->next;
    }
    cout<<"共有"<<n<<"条信息..."<<endl;
    int i;
    p1=stu;
    for(i=1; i<n; i++)
    {
        p1=stu;
        if (p1->z>p1->next->z) // 如果头结点大于第二个的
        {
            p2=p1->next;
            p1->next=p1->next->next;
            p2->next=p1; //头结点交换
            stu=p2;
        }
        p1=stu;
        while(p1->next->next) //中间的交换
        {
            p2=p1;
            p1=p1->next;
            if(p1->z>p1->next->z)
            {
                p2->next=p1->next;
                p1->next=p1->next->next;
                p2->next->next=p1;
                p1=p2->next; //交换
            }
        }
    }
    p1=stu;
    do
    {
        p1->play();
        p1=p1->next;
    }
    while(p1);
}

void cla::pAA()//按总分排序
{
    student *p1,*p2;
    int n;
    p1=stu;
    n=1;
    while(p1->next)
    {
        n++;
        p1=p1->next;
    }
    cout<<"共有"<<n<<"条信息..."<<endl;
    int i;
    p1=stu;
    for(i=1; i<n; i++)
    {
        p1=stu;
        if (p1->AA>p1->next->AA) // 如果头结点大于第二个的
        {
            p2=p1->next;
            p1->next=p1->next->next;
            p2->next=p1; //头结点交换
            stu=p2;
        }
        p1=stu;
        while(p1->next->next) //中间的交换
        {
            p2=p1;
            p1=p1->next;
            if(p1->AA>p1->next->AA)
            {
                p2->next=p1->next;
                p1->next=p1->next->next;
                p2->next->next=p1;
                p1=p2->next; //交换
            }
        }
    }
    p1=stu;
    do
    {
        p1->play();
        p1=p1->next;
    }
    while(p1);
}

void cla::staxis()//排序
{

    system("cls");
    char c;
    cout<<"请选择以何种方式排序:"<<endl;
    cout<<"1……以学号排序"<<endl;
    cout<<"2……以数学成绩排序"<<endl;
    cout<<"3……以语文成绩排序"<<endl;
    cout<<"4……以英语成绩排序"<<endl;
    cout<<"5……以总分排序"<<endl;
    cout<<"6……返回"<<endl;
    cout<<"请选择(1-6)"<<endl;
    cin>>c;

    switch (c)
    {
    case '1':
        pxh();
        break;
    case '2':
        psx();
        break;
    case '3':
        pyw();
        break;
    case '4':
        pyy();
        break;
    case '5':
        pAA();
        break;
    case '6':
        return;
    }
}

    void cla::ssave() //保存到文件
    {
        system("cls");
        char c;
        cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:";
        cin>>c;
        if(toupper(c)!='Y') return;


        ofstream tfile("date.txt",ios_base::binary);
        student *p=stu;
        while(p)// 写入文件
        {
            tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;
            tfile<<endl;
            p=p->next;
        }
        tfile.close();
        cout<<"保存完毕..."<<endl;
    }


    /*void cla::sload() //读取
    {
        student *p;
        p=stu;
        while(p)
        {
            stu=p->next;
            delete p;
            p=stu;
        }


        ifstream tfile("date.txt",ios_base::binary);

        string name1;
        long num1;
        int x1,y1,z1;

        tfile>>name1>>num1>>x1>>y1>>z1;
        while(tfile.good())
        {
/*创建学生接点
            student *s;
            s=stu;
            s=new student(name1,num1,x1,y1,z1);
            s->next=0;
            s->AA=x1+y1+z1;
            if(stu) //若已经存在结点
            {
                student *p2;
                p2=stu;
                while(p2->next) //查找尾结点
                {
                    p2=p2->next;
                }
                p2->next=s; //连接
            }
            else //若不存在结点(表空)
            {
                stu=s; //连接
            }
            tfile>>name1>>num1>>x1>>y1>>z1;
        }
        tfile.close();
        cout<<"\n学生信息已经装入...\n";





        tfile>>name1>>num1>>x1>>y1>>z1;
        while(tfile.good())
        {
//创建学生接点
            student *s;
            s=stu;
            s=new student(name1,num1,x1,y1,z1);
            s->next=0;
            s->AA=x1+y1+z1;
            if(stu) //若已经存在结点
            {
                student *p2;
                p2=stu;
                while(p2->next) //查找尾结点
                {
                    p2=p2->next;
                }
                p2->next=s; //连接
            }
            else //若不存在结点(表空)
            {
                stu=s; //连接
            }
            tfile>>name1>>num1>>x1>>y1>>z1;
        }
        tfile.close();
        cout<<"\n学生信息已经装入...\n";

    */


  运行结果:

  



摘 要 高校学生成绩管理工作是高等教育中的一个极为重要的环节,是院校学生管理的基础。面对种类繁多的数据和报表,手工处理方式已经很难跟上现代化管理的步伐,传统的文件管理方式进行成绩管理,效率很低,耗时费力,容易出错,安全性也存在问题。特别是在查询上,由于文件过多,带来很多不便。随着计算机及通讯技术的飞速发展,高等教育对教务管理工作提出了更高的要求。尽快改变传统的管理模式,运用现代化手段进行科学管理。 本设计研究的是基于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
学生成绩管理系统设计” A.问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。 B.功能要求 (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (9)排序功能:可按总分和单科成绩排名次。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值