学生信息管理系统设计

1、问题描述

学生信息包括:学号、姓名、性别、年龄、班级等信息。

小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。

中学生除了包括小学生所有信息外,还包括地理、历史成绩、家庭住址等信息。

大学生除了包括学生所有信息外,还包括专业、家庭地址、联系方式等信息。

2、功能要求

(1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。

(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。

(3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。

(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。

(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。

(6)统计功能:能根据多种参数进行统计。能统计学生人数、按性别统计、按年龄统计等。

(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。

(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。

#include<iostream>
#include<string>
#include<string.h>
#include<fstream>
#include<iomanip>
using namespace std;
#define N 1000
#define M 2000
class student
{
public:
    student(){}
    ~student(){}
    void setnum(long long int nu) {num=nu;}
    long long int getnum() {return num;}
    void setname(char na[]) {strcpy(name,na);}
    char * getname() {return name;}
    void setsex(char se[]) {strcpy(sex,se);}
    char * getsex() {return sex;}
    void setage(int ag) {age=ag;}
    int getage() {return age;}
    void setgrade (char  gra[] ){strcpy(grade,gra);}
    char * getgrade(){return grade;}
    void setb_del(int n){b_del=n;}
    int getb_del(){return b_del;}
    int b_del;
private:
    long long int num;
    char name[15];
    char sex[5];
    int age;
    char grade[15];
};
void input(student &p)
    {
        char na[15];
        char se[5];
        int as;
        char g[15];
        cout<<"请输入姓名:" ;
        cin>>na;
        cout<<"请输入性别:" ;
        cin>>se;
        cout<<"请输入年龄:" ;
        cin>>as;
        cout<<"请输入班级:" ;
        cin>>g;
        p.setname(na);
        p.setsex(se);
        p.setage(as);
        p.setgrade(g);
        p.setb_del(1);
    }
class xiao:public student
{
private:
    int ying,shu,yu;
public:
    xiao(){}
    ~xiao(){}
    void set1(int a,int b,int c){ying=a;shu=b;yu=c;}
    int getying() {return ying;}
    int getshu()  {return shu;}
    int getyu()    {return yu;}
};
class zhong:public xiao
{
private:
    int di,li;
    char home[15];
public:
    zhong(){}
    ~zhong(){}
    void set2(int a,int b){di=a;li=b;}
    int getdi() {return di;}
    int getli()  {return li;}
    void sethome(char hom[]) {strcpy(home,hom);}
    char * gethome(){return home;}
};
class da:public student
{
private:
      char home[15];
      char major[15];
      char pnum[12];
public:
    da(){}
    ~da(){}
    void sethome(char hom[]) {strcpy(home,hom);}
    char * gethome(){return home;}
    void setmajor(char maj[]) {strcpy(major,maj);}
    char * getmajor(){return major;}
    void setpnum(char p[]) {strcpy(pnum,p);}
    char * getpnum(){return pnum;}
};
class studentmanager
{
public:
    xiao a[50];
    zhong b[50];
    da c[50];
    int x;
    int top1,top2,top3;
public:
    studentmanager()
    {
        xiao a1;
        zhong b1;
        da c1;
        fstream file1("xiao.txt",ios::in);
        fstream file2("zhong.txt",ios::in);
        fstream file3("da.txt",ios::in);
        top1=-1;
        top2=-1;
        top3=-1;
        while(1)
        {
            file1.read((char*)&a1,sizeof(a1));
           if(!file1)  break;
           top1++;
           a[top1]=a1;

            file2.read((char*)&b1,sizeof(b1));
           if(!file2)  break;
           top2++;
           b[top2]=b1;

            file3.read((char*)&c1,sizeof(c1));
           if(!file3)  break;
           top3++;
           c[top3]=c1;
        }
        file1.close();
        file2.close();
        file3.close();
    }
    ~studentmanager()
    {
        fstream file1("xiao.txt",ios::out);
        for(int i=0;i<=top1;i++)
        {
            if(a[i].getb_del()==1)
                file1.write((char *)&a[i],sizeof(a[i]));
        }
        file1.close();
        fstream file2("zhong.txt",ios::out);
        for(int i=0;i<=top2;i++)
        {
            if(b[i].getb_del()==1)
                file2.write((char *)&b[i],sizeof(b[i]));
        }
        file2.close();
         fstream file3("da.txt",ios::out);
        for(int i=0;i<=top3;i++)
        {
            if(c[i].getb_del()==1)
                file3.write((char *)&c[i],sizeof(c[i]));
        }
        file3.close();
    }
    void addstudent()
    {
        cout<<"********************"<<endl;
        cout<<"请你选择添加类别"<<endl;
        cout<<"1.小学生"<<endl;
        cout<<"2.中学生"<<endl;
        cout<<"3.大学生"<<endl;
        cout<<"********************"<<endl;
        int x;
        cin>>x;
        if(x==1)
        {
            xiao ak;
            long long int  n;
            int yi;
            int s;
            int y;
            bool f1=true;
            cout<<"请输入学号:" ;
            cin>>n;
             for(int i=0;i<=top1;i++)
            {
                if(a[i].getnum()==n&&a[i].getb_del()==1)
                {
                    f1=false;
                    cout<<"添加重复,取消添加 "<<endl;
                    break;
                }
            }
             if(f1)
            {
            input(ak);
            cout<<"请输入英语成绩:" ;
            cin>>yi;
            cout<<"请输入数学成绩:" ;
            cin>>s;
            cout<<"请输入语文成绩:" ;
            cin>>y;
            ak.setnum(n);
            ak.set1(yi,s,y);
           top1++;
           a[top1]=ak;
            }
        }
       if(x==2)
        {
            zhong bk;
            long long int n1;
            char na1[15];
            char se1[5];
            int a1;
            char g1[15];
            char ho[15];
            int yi1;
            int s1;
            int y1;
            int d;
            int l;
            bool f2=true;
            cout<<"请输入学号:" ;
            cin>>n1;
            for(int i=0;i<=top2;i++)
            {
                if(b[i].getnum()==n1&&b[i].getb_del()==1)
                {
                    f2=false;
                    cout<<"添加重复,取消添加 "<<endl;
                    break;
                }
            }
            if(f2)
            {
            cout<<"请输入姓名:" ;
            cin>>na1;
            cout<<"请输入性别:" ;
            cin>>se1;
            cout<<"请输入年龄:" ;
            cin>>a1;
            cout<<"请输入班级:" ;
            cin>>g1;
            cout<<"请输入家庭住址:";
            cin>>ho;
            cout<<"请输入英语成绩:" ;
            cin>>yi1;
            cout<<"请输入数学成绩:" ;
            cin>>s1;
            cout<<"请输入语文成绩:" ;
            cin>>y1;
            cout<<"请输入地理成绩:" ;
            cin>>d;
            cout<<"请输入历史成绩:" ;
            cin>>l;
            bk.setnum(n1);
            bk.setname(na1);
            bk.setsex(se1);
            bk.setage(a1);
           bk.setgrade(g1);
           bk.sethome(ho);
           bk.set1(yi1,s1,y1);
           bk.set2(d,l);
           bk.setb_del(1);
           top2++;
           b[top2]=bk;
        }
        }
         if(x==3)
        {
            da ck;
            long long int  n3;
           char ho1[15];
           char ma1[15];
           char p1[12];
           bool f3=true;
            cout<<"请输入学号:" ;
            cin>>n3;
             for(int i=0;i<=top3;i++)
            {
                if(c[i].getnum()==n3&&c[i].getb_del()==1)
                {
                    f3=false;
                    cout<<"添加重复,取消添加 "<<endl;
                    break;
                }
            }
            if(f3)
            {
            input(ck);
            cout<<"请输入家庭住址:";
            cin>>ho1;
            cout<<"请输入专业:";
            cin>>ma1;
            cout<<"请输入电话号码:";
            cin>>p1;
            ck.setnum(n3);
            ck.sethome(ho1);
            ck.setmajor(ma1);
            ck.setpnum(p1);
           top3++;
           c[top3]=ck;
            }
        }
    }
     int  findstudent()
    {
       cout<<"********************"<<endl;
      cout<<"      查询方式          "<<endl;
      cout<<"       (1) 学号           "<<endl;
      cout<<"       (2) 姓名           "<<endl;
      cout<<"********************"<<endl;
      int x;
      cout<<"请你选择查询方式:";
      cin>>x;
       if(x==1)
        {
        long long int  pi;
        bool flag=false;
        cout<<"请你输入学号:";
        cin>>pi;
        for(int i=0;i<=top1;i++)
        {
            if((a[i].getnum()==pi)&&a[i].getb_del()==1)
            {
                flag=true;
                cout<<"学号:"<<a[i].getnum()<<" 姓名:"<<a[i].getname()<<" 性别:"<<a[i].getsex()<<" 年龄:"<<a[i].getage()<<" 班级:"<<a[i].getgrade()<<endl;
                cout<<"英语成绩:"<<a[i].getying()<<" 数学成绩:"<<a[i].getshu()<<" 语文成绩:"<<a[i].getyu()<<endl;
                return i;
                break;
            }
        }
        for(int i=N;i<=N+top2;i++)
        {
            if((b[i-N].getnum()==pi)&&b[i-N].getb_del()==1)
            {
               flag=true;
                cout<<"学号:"<<b[i-N].getnum()<<" 姓名:"<<b[i-N].getname()<<" 性别:"<<b[i-N].getsex()<<" 年龄:"<<b[i-N].getage()<<" 班级:"<<b[i-N].getgrade();
                cout<<" 家庭住址:"<<b[i-N].gethome()<<endl<<"英语成绩:"<<b[i-N].getying()<<" 数学成绩:"<<b[i-N].getshu()<<" 语文成绩:"<<b[i-N].getyu();
                cout<<" 地理成绩:"<<b[i-N].getdi()<<" 历史成绩:"<<b[i-N].getli()<<endl;
                return i;
                break;
            }
        }
        for(int i=M;i<=M+top3;i++)
        {
            if((c[i-M].getnum()==pi)&&c[i-M].getb_del()==1)
            {
                flag=true;
                cout<<"学号:"<<c[i-M].getnum()<<" 姓名:"<<c[i-M].getname()<<" 性别:"<<c[i-M].getsex()<<" 年龄:"<<c[i-M].getage()<<" 班级:"<<c[i-M].getgrade()<<endl;
                cout<<"家庭住址:"<<c[i-M].gethome()<<" 专业:"<<c[i-M].getmajor()<<" 电话号码:"<<c[i-M].getpnum()<<endl;
                return i;
                break;
            }
        }
        if(!flag)
        {
            cout<<"查无此人"<<endl;
        }
        return -1;
      }
      else if(x==2)
        {
        char p1[15];
        bool fla=false;
        cout<<"请你输入姓名:";
        cin>>p1;
        for(int i=0;i<=top1;i++)
        {
            if((strcmp(a[i].getname(),p1)==0)&&a[i].getb_del()==1)
            {
                fla=true;
                cout<<"学号:"<<a[i].getnum()<<" 姓名:"<<a[i].getname()<<" 性别:"<<a[i].getsex()<<" 年龄:"<<a[i].getage()<<" 班级:"<<a[i].getgrade()<<endl;
                cout<<"英语成绩:"<<a[i].getying()<<" 数学成绩:"<<a[i].getshu()<<" 语文成绩:"<<a[i].getyu()<<endl;
                return i;
                break;
            }
        }
        for(int i=N;i<=N+top2;i++)
        {
            if((strcmp(b[i-N].getname(),p1)==0)&&b[i-N].getb_del()==1)
            {
               fla=true;
                cout<<"学号:"<<b[i-N].getnum()<<" 姓名:"<<b[i-N].getname()<<" 性别:"<<b[i-N].getsex()<<" 年龄:"<<b[i-N].getage()<<" 班级:"<<b[i-N].getgrade();
                cout<<" 家庭住址:"<<b[i-N].gethome()<<endl<<"英语成绩:"<<b[i-N].getying()<<" 数学成绩:"<<b[i-N].getshu()<<" 语文成绩:"<<b[i-N].getyu();
                cout<<" 地理成绩:"<<b[i-N].getdi()<<" 历史成绩:"<<b[i-N].getli()<<endl;
                return i;
                break;
            }
        }
        for(int i=M;i<=M+top3;i++)
        {
            if((strcmp(c[i-M].getname(),p1)==0)&&c[i-M].getb_del()==1)
            {
                fla=true;
                cout<<"学号:"<<c[i-M].getnum()<<" 姓名:"<<c[i-M].getname()<<" 性别:"<<c[i-M].getsex()<<" 年龄:"<<c[i-M].getage()<<" 班级:"<<c[i-M].getgrade()<<endl;
                cout<<"家庭住址:"<<c[i-M].gethome()<<" 专业:"<<c[i-M].getmajor()<<" 电话号码:"<<c[i-M].getpnum()<<endl;
                return i;
                break;
            }
        }
        if(!fla)
        {
            cout<<"查无此人"<<endl;
        }
        return -1;
      }
      else{
    cout<<"输入错误!" ;
    return -1;
      }
    }
    void showstudent()
    {
        cout<<"**********************"<<endl;
      cout<<"       显示人员             "<<endl;
      cout<<"       (1) 小学生           "<<endl;
      cout<<"       (2) 中学生           "<<endl;
      cout<<"       (3) 大学生           "<<endl;
      cout<<"***********************"<<endl;
      int x;
      cin>>x;
      if(x==1)
        {
        cout<<"学号"<<"    姓名"<<" 性别"<<" 年龄"<<" 班级"<<"  英语成绩"<<"  数学成绩"<<"  语文成绩"<<endl;
        for(int i=0;i<=top1;i++)
        {
            if(a[i].getb_del()==1)
            {
                cout<<a[i].getnum()<<setw(8)<<a[i].getname()<<setw(5)<<a[i].getsex()<<setw(5)<<a[i].getage()<<setw(5)<<a[i].getgrade();
                cout<<setw(10)<<a[i].getying()<<setw(10)<<a[i].getshu()<<setw(10)<<a[i].getyu()<<endl;
            }
        }
      }
      else if(x==2)
        {
       cout<<"学号"<<"  姓名"<<" 性别"<<" 年龄"<<" 班级"<<" 家庭住址"<<"  英语成绩"<<"  数学成绩"<<"  语文成绩"<<" 地理成绩"<<" 历史成绩"<<endl;
        for(int i=0;i<=top2;i++)
        {
            if(b[i].getb_del()==1)
            {
                cout<<b[i].getnum()<<setw(8)<<b[i].getname()<<setw(5)<<b[i].getsex()<<setw(5)<<b[i].getage()<<setw(6)<<b[i].getgrade();
                cout<<setw(8)<<b[i].gethome()<<setw(10)<<b[i].getying()<<setw(10)<<b[i].getshu()<<setw(10)<<b[i].getyu();
                cout<<setw(10)<<b[i].getdi()<<setw(9)<<b[i].getli()<<endl;
            }
        }
      }
      else if(x==3)
        {
       cout<<"学号"<<"  姓名"<<" 性别"<<" 年龄"<<" 班级"<<"  家庭住址"<<"    专业"<<"     电话号码"<<endl;
        for(int i=0;i<=top3;i++)
        {
            if(c[i].getb_del()==1)
            {
                cout<<c[i].getnum()<<setw(8)<<c[i].getname()<<setw(5)<<c[i].getsex()<<setw(5)<<c[i].getage()<<setw(5)<<c[i].getgrade();
                cout<<setw(10)<<c[i].gethome()<<setw(8)<<c[i].getmajor()<<setw(14)<<c[i].getpnum()<<endl;
            }
        }
      }
      else{cout<<"输入错误!"<<endl;}
    }
    void editstudent()
    {
           int x;
           x=findstudent();
           if(x==-1)
            return ;
          cout<<"请输入编辑信息"<<endl;
           if(x>=0&&x<=top1)
           {
            char na[15];
            char se[5];
            int ap;
            char g[15];
            int yi;
            int s;
            int y;
            cout<<"请输入英语成绩:" ;
            cin>>yi;
            cout<<"请输入数学成绩:" ;
            cin>>s;
            cout<<"请输入语文成绩:" ;
            cin>>y;
            a[x].setname(na);
            a[x].setsex(se);
            a[x].setage(ap);
            a[x].setgrade(g);
            a[x].set1(yi,s,y);
            a[x].setb_del(1);
           }
           if(x>=N&&x<=N+top2)
           {
            char na1[15];
            char se1[5];
            int a1;
            char g1[15];
            char ho[15];
            int yi1;
            int s1;
            int y1;
            int d;
            int l;
            cout<<"请输入姓名:" ;
            cin>>na1;
            cout<<"请输入性别:" ;
            cin>>se1;
            cout<<"请输入年龄:" ;
            cin>>a1;
            cout<<"请输入班级:" ;
            cin>>g1;
            cout<<"请输入家庭住址:";
            cin>>ho;
            cout<<"请输入英语成绩:" ;
            cin>>yi1;
            cout<<"请输入数学成绩:" ;
            cin>>s1;
            cout<<"请输入语文成绩:" ;
            cin>>y1;
            cout<<"请输入地理成绩:" ;
            cin>>d;
            cout<<"请输入历史成绩:" ;
            cin>>l;
            b[x-N].setname(na1);
            b[x-N].setsex(se1);
            b[x-N].setage(a1);
           b[x-N].setgrade(g1);
           b[x-N].sethome(ho);
           b[x-N].set1(yi1,s1,y1);
           b[x-N].set2(d,l);
           b[x-N].setb_del(1);
           }
        if(x>=M&&x<=M+top3)
        {
            char na3[15];
            char se3[5];
            int a3;
            char g3[15];
           char ho1[15];
           char ma1[15];
           char p1[12];
            cout<<"请输入姓名:" ;
            cin>>na3;
            cout<<"请输入性别:" ;
            cin>>se3;
            cout<<"请输入年龄:" ;
            cin>>a3;
            cout<<"请输入班级:" ;
            cin>>g3;
            cout<<"请输入家庭住址:";
            cin>>ho1;
            cout<<"请输入专业:";
            cin>>ma1;
            cout<<"请输入电话号码:";
            cin>>p1;
            c[x-M].setname(na3);
            c[x-M].setsex(se3);
          c[x-M].setage(a3);
           c[x-M].setgrade(g3);
            c[x-M].sethome(ho1);
            c[x-M].setmajor(ma1);
            c[x-M].setpnum(p1);
            c[x-M].setb_del(1);
        }
    }
    void delstudent()
    {
        long long int n;
        bool f=false;
        cout<<"请你输入所要删除学生学号:";
        cin>>n;
        for(int i=0;i<=top1;i++)
        {
            if((a[i].getnum()==n)&&a[i].getb_del()==1)
            {
                a[i].setb_del(2);
                f=true;
                break;
            }
        }
         for(int i=0;i<=top2;i++)
        {
            if((b[i].getnum()==n)&&b[i].getb_del()==1)
            {
                b[i].setb_del(2);
                f=true;
                break;
            }
        }
         for(int i=0;i<=top3;i++)
        {
            if((c[i].getnum()==n)&&c[i].getb_del()==1)
            {
                c[i].setb_del(2);
                f=true;
                break;
            }
        }
        if(!f)
        cout<<"记录为空!"<<endl;
    }
    void sortstudent()
    {
      cout<<"********************"<<endl;
      cout<<"      统计方式          "<<endl;
      cout<<"       (1) 性别           "<<endl;
      cout<<"       (2) 年龄           "<<endl;
      cout<<"********************"<<endl;
      int x;
      cout<<"请你选择统计方式:";
      cin>>x;
      if(x==1)
      {
          int  s1=0,s2=0;
          for(int i=0;i<=top1;i++)
          {
              if(strcmp(a[i].getsex(),"nan")==0&&a[i].getb_del()==1)
                s1++;
             if(strcmp(a[i].getsex(),"nan")!=0&&a[i].getb_del()==1)
                s2++;
          }
          for(int i=0;i<=top2;i++)
          {
             if(strcmp(b[i].getsex(),"nan")==0&&b[i].getb_del()==1)
                s1++;
             if(strcmp(b[i].getsex(),"nan")!=0&&b[i].getb_del()==1)
                s2++;
          }
          for(int i=0;i<=top3;i++)
          {
            if(strcmp(c[i].getsex(),"nan")==0&&c[i].getb_del()==1)
                s1++;
             if(strcmp(c[i].getsex(),"nan")!=0&&c[i].getb_del()==1)
                s2++;
          }
          cout<<"男生人数:"<<s1<<endl;
          cout<<"女生人数:"<<s2<<endl;
      }
     else if(x==2)
      {
         int p;
         cout<<"请你输入所要统计年龄:";
         cin>>p;
          int s1=0,s2=0;
          for(int i=0;i<=top1;i++)
          {
              if(a[i].getage()>=p&&a[i].getb_del()==1)
                s1++;
              if(a[i].getage()<p&&a[i].getb_del()==1)
                s2++;
          }
          for(int i=0;i<=top2;i++)
          {
              if(b[i].getage()>=p&&b[i].getb_del()==1)
                s1++;
              if(b[i].getage()<p&&b[i].getb_del()==1)
                s2++;
          }
          for(int i=0;i<=top3;i++)
          {
              if(c[i].getage()>=p&&c[i].getb_del()==1)
                s1++;
              if(c[i].getage()<p&&c[i].getb_del()==1)
                s2++;
          }
          cout<<"大于及等于"<<p<<"岁人数:"<<s1<<endl;
          cout<<"小于"<<p<<"岁人数:"<<s2<<endl;
      }
      else
        cout<<"输入错误!"<<endl;
    }
};

#include<iostream>
#include"Mytype.h"
#include<Cstdlib>
using namespace std;
void huanying()
{
    cout<<"            ***************************************"<<endl;
    cout<<"            ***    欢迎进入学生信息管理系统     ***"<<endl;
    cout<<"            ***************************************"<<endl;
}
void jiemian()
{
    cout<<endl;
    cout<<"|----------------------------------|"<<endl;
    cout<<"           (1)添加信息                     "<<endl;
    cout<<"           (2)查询信息                     "<<endl;
    cout<<"           (3)显示信息                     "<<endl;
    cout<<"           (4)编辑信息                     "<<endl;
    cout<<"           (5)删除信息                     "<<endl;
    cout<<"           (6)统计信息                     "<<endl;
    cout<<"           (7)退出                     "<<endl;
    cout<<"|-----------------------------------|"<<endl;
    cout<<endl;
}
int main()
{
  char in;
   int x=1;
   studentmanager rm;
   huanying();
   char s[6];
    cout<<"                 Password: ";
    cin>>s;
    if(strcmp(s,"201708")!=0)
        cout<<"密码错误!请你退出系统,重新登录。";
    else
    {
   system("cls");
    huanying();
   do
  	{
          if(x%3==0)
          system("cls");
           jiemian();
           x++;
		  cin>>in;
		  switch (in)
		  {
			case '1':
				rm.addstudent();
				break;
			case '2':
				rm.findstudent();
				break;
			case '3':
				rm.showstudent();
				break;
			case '4':
				rm.editstudent();
				break;
			case '5':
			   	rm.delstudent();
				break;
			case '6':
                rm.sortstudent();
				break;
            case '7':
            break;
	       	default:cout<<"输入错误,请重新输入。"<<endl;
		  }
  	}while(in!='7');
    }
    return 0;
}

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值