C++实现学生信息管理系统(完整版)

本文实例为大家分享了C++实现学生信息管理系统的具体代码,供大家参考,具体内容如下

实现功能

C++实现学生信息管理系统(完整版)_第1张图片

上面的功能基本完全实现

目前的程序其实还存在两个问题:

1、无法从文件中读取信息,我感觉是格式问题,输出的格式需要改,但是这样的话,保存在文件的信息看起来就不是很方便了
2、保存新同学的学号与当前记录的学号相同时不会提醒,这个实现起来比较容易,在保存的时候,再加一个链表查询就可以了,是我太懒了。

源码附上

#include 
#include 
#include 
#include
#include
#include 
using namespace std;
#define null NULL
class student
{
    private:
        int flag;
        friend class studentMessage;
        student *next; //节点指针
        string name; //学生姓名
        string address;  //家庭住址
        int age; //年龄
        int id; //学号
        string sex;
        char grade;                  班级
        //  A    代表大学生
        //  B    代表中学生
        //  C    代表小学生
        double chinese , math , english;  //语文 , 数学 , 英语
        double history , geography ;     //历史  , 地理
        string major; long long int TL;     //  专业  ,  电话

    public:
        static int num_total;  //总数
        static int num_sex;
        static int num_age;

        //小学生初始化
        student(int _id,string _name,string _sex,int _age,char _grade,double _chinese,double _math,double _english)
        {
            name = _name;
            grade = _grade;
            age  = _age;
            sex = _sex;
            id = _id;

            chinese = _chinese;
            math    =  _math;
            english = _english;
            next = NULL;
        }

        //初中生初始化
        student(int _id,string _name,string _sex,int _age,char _grade,double _geography,double _history,string _address)
        {
            name = _name;
            grade = _grade;
            age  = _age;
            sex = _sex;
            id = _id;

            geography = _geography;
            history   = _history;
            address    = _address;
            next = NULL;
        }
        //大学生初始化
        student(int _id,string _name,string _sex,int _age,char _grade,string _major,string _address,long long int _TL)
        {
            name = _name;
            grade = _grade;
            age  = _age;
            sex = _sex;
            id = _id;

            major  = _major;
            address = _address;
            TL     = _TL;
            next = NULL;
        }

        //构造函数
        student() //为studentMessage初始化头结点用
        {
            name = "null";
            sex = "null";
            address = "null";
            age = 0;
            id = 0;
            chinese = 0;
            math = 0;
            english = 0;
            grade = '0';
            geography = 0;
            history = 0;
            major = "null";
            TL = 0;
            next = NULL;
        }
        ~student(){}
        void swap(student*);
};
int student::num_total = 0; 初始化
int student::num_sex = 0;
int student::num_age = 0;

void student::swap(student *q)
{
    string _name,_sex,_address;
    int _age,_id;

     char grade;                  班级
        //  A    代表大学生
        //  B    代表中学生
        //  C    代表小学生
    double _chinese , _math , _english;  //语文 , 数学 , 英语
    double _history , _geography ;     //历史  , 地理
    string _major; long long int _TL;     //  专业  ,  电话

    _chinese   = chinese;
    chinese    = q->chinese;
    q->chinese = _chinese;

    _math   =  math;
    math    =  q->math;
    q->math =  _math;

    _english   =  english;
    english    =  q->english;
    q->english =  _english;

    _history   = history;
    history    = q->history;
    q->history = _history;

    _geography   =  geography;
    geography    =  q->geography;
    q->geography =  _geography;

    _major   =  major;
    major    = q->major;
    q->major =  _major;

    _TL   = TL;
    TL    = q->TL;
    q->TL = _TL;

    _name   = name;
    name    = q->name;
    q->name = _name;

    _sex   = sex;
    sex    = q->sex;
    q->sex = _sex;

    _address   = address;
    address    = q->address;
    q->address = _address;

    _age   = age;
    age    = q->age;
    q->age = _age;

    _id   = id;
    id    = q->id;
    q->id = _id;

}
class studentMessage
{
    private:
      student *first; //头指针
      int num; //信息中的学生人数
    public:
        studentMessage()
        {
            num = 0; //初始化学生人数为0
            first = new student;  //初始化头结点
        }
        ~studentMessage(){delete first;}

        /*管理系统常规操作*/
        void Insret(void); //插入
        void Display(void); //显示
        void Delete(void); //删除
        void Search(void); //搜索
        void Change(void); //改动
        void SearchByid(void); //按照学号查找
        void SearchByname(void); //按照姓名查找
        int menu(void); //初始的菜单
        void clear(void); //清空列表
        void tongji(void);  //统计学生人数
        void save(void);
        void read(void);
};


int studentMessage::menu(void)
{
    system("cls");
    int ch;
    cout<> ch;
    cout<<"\n\n\n"<next;
            while(p != null)
            {
                f<<"学号:"<id<<"  "<name<sex<age<grade<grade == 'A')
            {
                f<<"专业:"<major<address<TL<grade == 'B')
            {
                f<<"地理成绩:"<geography<history<address<chinese<math<english<next;
            }

        }
         f.close();
            cout<>ch;
        if(f.eof())
        {
            cout<<"文件为空!按任意键返回"<>name;
            f>>sex;
            f>>age;
            f>>id;
            f>>grade;
        if(grade=='A')
        {
            f>>major;
            f>>address;
            f>>TL;
        }

        else if(grade == 'B')
        {

            f>>geography;
            f>>history;
            f>>address;
        }
        else
        {
            f>>chinese;
            f>>math;
            f>>english;
        }
        student::num_total ++;

        if(sex=="boy") student::num_sex++;
        if(age>=18) student::num_age ++;
        student *newstu = new student();
        if(grade == 'A')    newstu = new student(id,name,sex,age,grade,major,address,TL);
        else if(grade == 'B')    newstu = new student(id,name,sex,age,grade,geography,history,address);
        else if(grade == 'C')    newstu = new student(id,name,sex,age,grade,chinese,math,english);
    student *p = first;
    while(p->next != NULL)
        {
            p = p->next;
        }
        p->next = newstu;
        newstu->next = null;
    }

}
/统计
void studentMessage::tongji(void)
{
    system("cls");//
    cout<<"学生人数一共为:" <>name;
    cout<<"请输入学生性别(boy/girl): ";
    cin>>sex;
    cout<<"请输入学生年龄: ";
    cin>>age;
    cout<<"请输入学生学号: ";
    cin>>id;
    cout<<"下面请输入学生班级(大学生输入'A',初中生输入'B',小学生输入'C'): ";
    cout<>grade;
    cout<>major;
        cout<<"请输入家庭住址:"<>address;
        cout<<"请输入联系电话:"<>TL;
    }

    else if(grade == 'B')
    {

        cout<<"请输入地理成绩:"<>geography;
        cout<<"请输入历史成绩:"<>history;
        cout<<"请输入家庭住址:"<>address;
    }
    else
    {
        cout<<"请输入语文成绩:"<>chinese;
        cout<<"请输入数学成成绩:"<>math;
        cout<<"请输入英语成绩:"<>english;
    }
    student::num_total ++;
    if(sex=="boy") student::num_sex++;
    if(age>=18) student::num_age ++;
    student *newstu = new student();
         if(grade == 'A')    newstu = new student(id,name,sex,age,grade,major,address,TL);
    else if(grade == 'B')    newstu = new student(id,name,sex,age,grade,geography,history,address);
    else if(grade == 'C')    newstu = new student(id,name,sex,age,grade,chinese,math,english);


    student *p = first;
    while(p->next != NULL)
    {
        p = p->next;
    }
    p->next = newstu;
    newstu->next = null;
}
//00000000000000000000000/
void studentMessage::Display(void)
{
    system("cls");
    if(student::num_total == 0)
    {
        cout<<"当前记录中无学生..."<next;
        while(p != null)
        {
            cout<<"学号:"<id<<"  "<name<sex<age<grade<grade == 'A')
            {
                cout<<"专业:"<major<address<TL<grade == 'B')
            {
                cout<<"地理成绩:"<geography<history<address<chinese<math<english<next;
        }
    }
    int i;
            cout<>_name;
    int k=0;
    student *p = first;
    student *pre = first;
    while(p->next)
    {
        pre=p->next;
        if(pre->name == _name)
        {
            p->next=pre->next;
            k=1;
            delete pre;
        }
        p=p->next;
    }
     if(k==0&&p->name!=_name)   cout<<"记录为空!"<sex=="boy") student::num_sex--;
        if(p->age>=18)   student::num_age--;
    }


    int i;
            cout<>temp;
    switch(temp)
    {
        case 1: SearchByid(); break;
        case 2: SearchByname(); break;
        case 666: return;
        default: cout<<"输入有误..."<> _id;
    student *p = first->next;
    while(p != null)
    {
        if(p->id == _id)
        {
            flag = 1;
            cout<<"下面是查找匹配结果:"<id<<"  "<name<sex<age<grade<grade == 'A')
            {
                cout<<"专业:"<major<address<TL<grade == 'B')
            {
                cout<<"地理成绩:"<geography<history<address<chinese<math<english<next;
    }
    if(flag == 0)
    {
        cout<<"未找到匹配项..."<> _name;
    student *p = first->next;
    while(p != null)
    {
        if(p->name == _name)
        {
            cout<<"下面是查找匹配结果:"<id<<"  "<name<sex<age<grade<grade == 'A')
            {
                cout<<"专业:"<major<address<TL<grade == 'B')
            {
                cout<<"地理成绩:"<geography<history<address<chinese<math<english<next;
    }

    if(flag == 0)
    {
        cout<<"未找到匹配项..."<> _name;
    student *p = first->next;
    while(p != null)
    {
        if(p->name == _name)
        {
            flag = 1;
            cout<<"该学生当前信息如下:"<id<<"  "<name<sex<age<grade<grade == 'A')
            {
                cout<<"专业:"<major<address<TL<grade == 'B')
            {
                cout<<"地理成绩:"<geography<history<address<chinese<math<english<> temp;
            switch(temp)
            {
                case 1:
                    {
                        cout<<"请输入新的学号:"<>_id;
                        p->id = _id;
                    }
                    break;
                case 2:
                    {
                        cout<<"请输入新的年龄:"<>_age;
                        p->age = _age;
                    }
                    break;
                case 3:
                    {
                        cout<<"请输入新的班级信息(大学生输入'A',初中生输入'B',小学生输入'C'):"<>_grade;
                        p->grade = _grade;

                         if(_grade=='A')
                            {

                                cout<<"请输入专业:"<>_major;
                                p->major = _major;
                                cout<<"请输入家庭住址:"<>_address;
                                p->address = _address;
                                cout<<"请输入联系电话:"<>_TL;
                                p->TL = _TL;
                            }
                        else if(_grade == 'B')
                            {

                                cout<<"请输入地理成绩:"<>_geography;
                                p->geography = _geography;
                                cout<<"请输入历史成绩:"<>_history;
                                p->history = _history;
                                cout<<"请输入家庭住址:"<>_address;
                                p->address = _address;
                            }
                            else
                            {
                                cout<<"请输入语文成绩:"<>_chinese;
                                p->chinese = _chinese;
                                cout<<"请输入数学成成绩:"<>_math;
                                p->major = _math;
                                cout<<"请输入英语成绩:"<>_english;
                                p->english = _english;
                            }
                    }
                    break;
                    case 666: return ;
                    cout<<"修改后的信息如下: "<name<<"  "<sex<<"  "<age<<"  "<id<<"  "<address<<"  "<next;
    }
    if(flag == 0)
        cout<<"当前记录中没有此学生..."<next;
    while(p != null)
    {
        first->next = p->next;
        p->next = null;
        delete p;
        p = first->next;
    }
}

int main()
{
    studentMessage stulist;
    int ch;
    while(ch = stulist.menu())
    {
        switch(ch)
        {

            case 1: stulist.Insret();  break;
            case 2: stulist.Search();  break;
            case 3: stulist.Display(); break;
            case 4: stulist.Change();  break;
            case 5: stulist.Delete();  break;
            case 6: stulist.tongji();  break;
            case 7: stulist.save();    break;
            case 8: stulist.clear();   break;
            case 0: return 0;
            default: cout<<"请按要求输入..."< 
 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(C++实现学生信息管理系统(完整版))