数据结构课程设计论文--学生信息管理系统

数据结构课程设计论文--学生信息管理系统

1.学生成绩分析问题

1)问题描述。录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。

2)基本要求。a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.datb)对文件input.dat中的数据进行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。c)使用Visual C++ 6. 0控制台应用程序开发,界面美观。

3)测试数据,如下图所示。

学号

姓名

数学

英语

计算机

01

王芳

78

77

90

02

张强

89

67

88

03

李浩

56

66

78

04

黄鹏

89

86

85

05

尚校

67

88

76

06

赵鹏

45

54

67

07

蒋泽

78

76

70

2.程序结构及清单

程序结构及清单 
2.1.1  头文件
#define NUM1 30 
class Students
{
public:
    Students(char *sNane, int cNumber,int sMath,int sEnglish,int sComputer);
    Students()
    {}
    ~Students()
    {}
    char* GetName();
    void SetName(char* sName);//获取姓名
     int GetNumber();
    void SetNumber(int sNumber);//获取学号
    int GetMath();
    void SetMath(int sMath);//获取数学成绩
    int GetEnglish();
    void SetEnglish(int sEnglish);//获取英语成绩
   int GetComputer();
    void SetComputer(int sComputer);//获取计算机成绩
    void disply(Students &st1);
    //void WriterData();
    //void DeleteData(int icount);
    //void GetStudentsFromFile(int icount);//数据库接口
protected:
    char Name[NUM1];
    int Number;
    int  Math;
    int English;
    int Computer;
};
2.1.2  公共函数
#include "stuends.h"
#include
#include
#include
#include
using namespace std;

Students::Students(char *sName,int sNumber,int sMath,int sEnglish,int sComputer)
{
    strncpy(Name,sName,NUM1);
    Number=sNumber;
    Math=sMath;
    English=sEnglish;
    Computer=sComputer;
}
char* Students::GetName()
{
    return Name;
}
int Students::GetNumber()
{
    return Number;
}
int Students::GetMath()
{
    return Math;
}
int Students::GetEnglish()
{
    return English;
}
int Students::GetComputer()
{
    return Computer;
}
void Students::SetName(char* sName)
{
    strncpy(Name,sName,NUM1);
}
void Students::SetNumber(int sNumber)
{
        Number=sNumber;
}
void Students::SetMath(int sMath)
{
    Math=sMath;
}
void Students::SetEnglish(int sEnglish)
{
    English=sEnglish;    
}
void Students::SetComputer(int sComputer)
{
    Computer=sComputer;    
}
void Students::disply(Students &st1)
{
        cout<
#include

#include
#include
#include
#include
using namespace std;

    Students st1[20];
    int mm;
int addmain()
{
    cout<<"请输入要添加的学生成绩记录的个数"<>mm;
    for(int i=0;i>aName>>aNumber>>aMath>>aEnglish>>aComputer;
        Students st(aName,aNumber,aMath,aEnglish,aComputer);
        st1[i]=st;
        cout<<"添加的记录为:"<>num;
    for(int j=0;j>aName>>aNumber>>aMath>>aEnglish>>aComputer;
            Students st3(aName,aNumber,aMath,aEnglish,aComputer);
            st1[j]=st3;
            st1[j].disply(st1[j]);
            return;
        }
    }
    cout<<"未找到相应的学生的成绩"<>num;
    for(int j=0;j>num;
    for(int j=0;jmax[i2])
            {
                int temp;
                temp=max[i];
                max[i]=max[i2];
                max[i2]=temp;
            }
        }
}//总成绩排序
void highall()
{
    temp();
    cout<<"最高总分为:"<maxM[i2])
            {
                int temp;
                temp=maxM[i];
                maxM[i]=maxM[i2];
                maxM[i2]=temp;
            }
        }
}//数学成绩排序
void highallM()
{
    tempM();
    cout<<"最高数学成绩为:"<maxE[i2])
            {
                int temp;
                temp=maxE[i];
                maxE[i]=maxE[i2];
                maxE[i2]=temp;
            }
        }
}//英语成绩排序
void highallE()
{
    tempE();
    cout<<"最高英语成绩为:"<maxC[i2])
            {
                int temp;
                temp=maxC[i];
                maxC[i]=maxC[i2];
                maxC[i2]=temp;
            }
        }
}//计算机成绩排序
void highallC()
{
    tempC();
    cout<<"最高计算级成绩为:"<st1[i2].GetNumber())
            {
                    Students temp;
                    temp=st1[i1];
                    st1[i1]=st1[i2];
                    st1[i2]=temp;
            }
        }
        cout<<"按学号排列为:"<90)
        {
            count++;
        }
    }
    cout<<"数学成绩大于90分的有"<79 &&st1[i].GetMath()<90)
        {
            count++;
        }
    }
    cout<<"数学成绩在80-89分的有"<69 &&st1[i].GetMath()<80)
        {
            count++;
        }
    }
    cout<<"数学成绩在70-79分的有"<59 &&st1[i].GetMath()<70)
        {
            count++;
        }
    }
    cout<<"数学成绩在60-69分的有"<90)
        {
            count++;
        }
    }
    cout<<"计算机成绩大于90分的有"<79 &&st1[i].GetComputer()<90)
        {
            count++;
        }
    }
    cout<<"计算机成绩在80-89分的有"<69 &&st1[i].GetComputer()<80)
        {
            count++;
        }
    }
    cout<<"计算机成绩在70-79分的有"<59 &&st1[i].GetComputer()<70)
        {
            count++;
        }
    }
    cout<<"计算机成绩在60-69分的有"<90)
        {
            count++;
        }
    }
    cout<<"英语成绩大于90分的有"<79 &&st1[i].GetEnglish()<90)
        {
            count++;
        }
    }
    cout<<"英语成绩在80-89分的有"<69 &&st1[i].GetEnglish()<80)
        {
            count++;
        }
    }
    cout<<"英语成绩在70-79分的有"<59 &&st1[i].GetEnglish()<70)
        {
            count++;
        }
    }
    cout<<"英语成绩在60-69分的有"<90)
        {
            count++;
        }
    }
    cout<<"平均成绩大于90分的有"<79 &&aa<90)
        {
            count++;
        }
    }
    cout<<"平均成绩在80-89分的有"<69 && aa<80)
        {
            count++;
        }
    }
    cout<<"平均成绩在70-79分的有"<59 && aa<70)
        {
            count++;
        }
    }
    cout<<"平均成绩在60-69分的有"<>xun;
     if(xun==1)
     {
         displayall();
     }
     else if(xun==2)
     {
         chaxun();
     }
 system("pause");
 }
void mainloop2()
{
    addmain();
    system("pause");
}
void mainloop3()
{
    miodefy();
    system("pause");
}
void mainloop4()
{
    deletea();
    system("pause");
}
void mainloop5()
{
    avgs();
    system("pause");
}
 void mainloop6()
 {
     cout<<"输入 1:查看数学平均成绩"<>m;
     if(m==1)
     {
        avgcm();
     }
     else if(m==2)
     {
        avgcE();
     }
     else if(m==3)
     {
        avgcc();
     }
     else if(m==4)
     {
        avgca();
     }
     system("pause");
 }
 void mainloop7()
 {
     cout<<"输入 1:查看数学最高成绩"<>m;
     if(m==1)
     {
        highallM();
     }
     else if(m==2)
     {
        highallE();
     }
     else if(m==3)
     {
        highallC();
     }
     else if(m==4)
     {
        highall();
     }
     system("pause");
 }
 void mainloop8()
 {
     cout<<"输入 1:查看数学最低成绩"<>m;
     if(m==1)
     {
        lowallM();
     }
     else if(m==2)
     {
        lowallE();
     }
     else if(m==3)
     {
        lowallC();
     }
     else if(m==4)
     {
        lowall();
     }
     system("pause");
 }
 void mainloop9()
 {
    cout<<"输入 1:查看不及格人数"<>i1;
     if(i1==1)
     {
        cout<<"输入 1:查看数学在此范围内人数"<>jj;
        if(jj==1)
        {
            coun1M();
        }
        else if(jj==2)
        {
            coun1E();
        }
        else if(jj==3)
        {
            coun1C();
        }
        else if(jj==4)
        {
            coun1Z();
        }
     }
     else if(i1==2)
     {
        cout<<"输入 1:查看数学在此范围内人数"<>jj;
        if(jj==1)
        {
            coun2M();
        }
        else if(jj==2)
        {
            coun2E();
        }
        else if(jj==3)
        {
            coun2C();
        }
        else if(jj==4)
        {
            coun2Z();
        }
     }
     else if(i1==3)
     {
        cout<<"输入 1:查看数学在此范围内人数"<>jj;
        if(jj==1)
        {
            coun3M();
        }
        else if(jj==2)
        {
            coun3E();
        }
        else if(jj==3)
        {
            coun3C();
        }
        else if(jj==4)
        {
            coun3Z();
        }
     }
     else if(i1==4)
     {
        cout<<"输入 1:查看数学在此范围内人数"<>jj;
        if(jj==1)
        {
            coun4M();
        }
        else if(jj==2)
        {
            coun4E();
        }
        else if(jj==3)
        {
            coun4C();
        }
        else if(jj==4)
        {
            coun4Z();
        }
     }
     else if(i1==5)
     {
        cout<<"输入 1:查看数学在此范围内人数"<>jj;
        if(jj==1)
        {
            coun5M();
        }
        else if(jj==2)
        {
            coun5E();
        }
        else if(jj==3)
        {
            coun5C();
        }
        else if(jj==4)
        {
            coun5Z();
        }
     }
     system("pause");
 }
void mainloop10()
{
    sortchengji();
     system("pause");
}
2.1.5  主窗体设计及主函数
void SetScreenGrid()
{
    //char sysSetBuf[80];
    //sprintf(sysSetBuf,"mode con cols=%d line=%d " ,CMD_COLS,CMD_LINES);
    //system(sysSetBuf);
    system("color 5");
}//设置显示信息的行数,列数和背景颜色等信息
int mainlook()
{
    SetScreenGrid();
    int c;
    do 
    { 
          //设置字体为绿色
        system("cls");
        cout<>c;
        switch(c) 
        { 
        case 1: system("cls");mainloop1(); break; 
        case 2:system("cls");mainloop2();break; 
        case 3: system("cls");mainloop3();break; 
        case 4: system("cls");mainloop4(); break;  
        case 5: system("cls");mainloop5(); break;
        case 6: system("cls");mainloop6(); break;
        case 7: system("cls");mainloop7(); break;
        case 8: system("cls");mainloop8(); break;
        case 9:system("cls");mainloop9();break;
        case 10:system("cls");mainloop10();break;
        default: break;
        } 
    }while(c!=0); 
return 0;
}
int main()
{
    mainlook();
    return 0;
}

3.程序功能展示


4.算法描述

1. 设置公共类students,设置姓名Name,学号Number,数学成绩Math,英语成绩English,计算机成绩Computer,四个属性来存储学生成绩记录。

2.公共类设置15个函数来获取信息与成绩及初始化。

1) Students(char *sNane, int cNumber,int sMath,int sEnglish,int sComputer);

2)  Students()

3)  {}

4)  ~Students()

5)  {}

6)  char* GetName();

7)  void SetName(char* sName);//获取姓名

8)      int GetNumber();

9)  void SetNumber(int sNumber);//获取学号

10)  int GetMath();

11)  void SetMath(int sMath);//获取数学成绩

12)  int GetEnglish();

13)  void SetEnglish(int sEnglish);//获取英语成绩

14)    int GetComputer();

15)     void SetComputer(int sComputer);//获取计算机成绩

3.功能函数。

1) 添加修改成绩功能。

2) 初始化一个对象数组,采用带参数的构造函数初始化记录,完成学生信息的添加,修改功能。

3) 2,删除学生成绩功能。

4) 设置计数器,与学号关联,查询到要删去的学号,去掉该学生的成绩,其他的成绩依次向前移动一位,学生成绩总数减一位。

5) 排序,最低最高成绩功能。

6) 进行学生成绩的排序,对象数组下标为0的是最低成绩,为计数器数字减一的是最高成绩。

7) 各个分数段人数。

8)  进行简单的筛选,外加计数器。

4.排序采用简单的冒泡排序,时间复杂度为O(n)

5.菜单设计。

函数工能组合后,为mainloop1-10,为了能进行多次功能选择,采用永真的while(1)循环,只有当判断条件(c==0)满足时退出系统。

循环中采用switchcase结构方便进行选择。

6.主窗体设计。

    采用system(“cls”)函数调动DOS下的清屏功能,system("color 5")进行文字背景颜色选择功能,使界面看起来美观。

使用system("pause")函数,是程序暂停,给使用者以选择的时间。

5.界面展示


6.  开发难点及解决技巧

1.使各个功能能够持续不断地进行,而不丢失已经录入的数据。

   设置一个全局变量的对象数组,每个函数对数组进行操作。

2.菜单设置每次单个功能完成后能再次回到菜单继续执行命令,以及程 序的退出。

为了能进行多次功能选择,采用永真的while(1)循环,只有当判断          条件(c==0)满足时退出系统。

循环中采用switchcase结构方便进行选择。

3.功能执行时,没有给以选择时间,程序闪退。

使用system("pause")函数,是程序暂停,给使用者以选择的时间。

4.快速设置改变背景色,样式,标题,等格式。

  采用system(“cls”)系列的函数,调用系统命令,快速改变样式。

例如:

sprintf(sysSetBuf,"mode con cols=%d line=%d  " ,CMD_COLS,CMD_LINES); 

 system(sysSetBuf);

system("color 5");

7.小节

    1) 实验过程中学到了不少的知识,例如如何设置菜单,改界面,完一个简单的数据的增删改查的功能,以及简单的从文件中读取 数据的操作,对文件中的数据进行操作。

   2)了解了做一个项目的大致的流程。感觉总体功能做的可以了,也设 置了一个简单的界面。

   3) 从文件中读入,写入数据可以采用文件的输入输出流。例如:

#include

#include

using namespace std;

int main()

{

ofstream fout;

fout.open("output.txt");

fout << "Here is a number: " << "/n";

fout << "Now here is a string: " << "/n";

fout << flush
fout.close();

ifstream fin("input.txt");

return 0;

}
时间紧急没有来的及完成。



你可能感兴趣的:(c++)