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

问题及代码:

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

  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";

    */


  运行结果:

  课程设计———学生成绩管理系统_第1张图片

课程设计———学生成绩管理系统_第2张图片课程设计———学生成绩管理系统_第3张图片课程设计———学生成绩管理系统_第4张图片课程设计———学生成绩管理系统_第5张图片课程设计———学生成绩管理系统_第6张图片课程设计———学生成绩管理系统_第7张图片

你可能感兴趣的:(课程设计———学生成绩管理系统)