• 用链表做一个学生管理系统


    //Student.cpp
    #include<iostream>
      
    using namespace std;
      
    struct Stu
    {
        char no[10];
        char name[16];
        int math;
        int chi;
        double ave;
    };
      
    class Student
    {
    public:
        Stu st;
        Student * next;
    public:
        Student(){}
        Student(Stu s)
        {
            st=s;
            next=NULL;
            st.ave=(st.math+st.chi)/2.0;
        }
        void setst(Stu s)
        {
            st=s;
            st.ave=(st.math+st.chi)/2.0;
        }
        Stu getst()
        {
            return st;
        }
        void show()
        {
            cout<<"----------------------------"<<endl;
            cout<<"学号:"<<st.no<<endl;
            cout<<"姓名:"<<st.name<<endl;
            cout<<"数学成绩:"<<st.math<<endl;
            cout<<"语文成绩:"<<st.chi<<endl;
            cout<<"平均成绩:"<<st.ave<<endl;
            cout<<"----------------------------"<<endl;
        }
    };
      
      
      
      
    //main.cpp
    #include<fstream>
    #include"Student.cpp"
      
    using namespace std;
      
    Student * create_List();
    void traverse_List(Student * pHead);
    bool is_empty(Student * pHead);
    int length_List(Student * pHead);
    bool insert_List(Student * pHead,int position,Stu st);
    bool delete_List(Student * pHead,int position,Stu * st);
    void sort_List(Student * pHead); 
    void menu_select();
    void handle_menu(int s);
    void outFile();
    Student * inFile();
    void delFile();
      
    Student * pHead;
      
      
    void main()
    {
        menu_select();
    }
      
    void menu_select()
    {
        int s;
        cout<<"请输入您要操作的选项:"<<endl;
        cout<<"1.增加原始记录"<<endl;
        cout<<"2.按平均分排序显示所有记录"<<endl;
        cout<<"3.保存原始文件"<<endl;
        cout<<"4.读取原始文件"<<endl;
        cout<<"5.删除原始文件"<<endl;
        cout<<"6.插入单条记录"<<endl;
        cout<<"7.删除单条记录"<<endl;
        cout<<"8.显示记录总条数"<<endl;
        cout<<"9.结束程序运行"<<endl<<endl;
        cout<<"左边数字对应功能选择,请选择1-9:";
        cin>>s;
        handle_menu(s);
    }
      
    void handle_menu(int s)
    {
        switch (s)
        {
        case 1:
            {
               system("cls");
               pHead=create_List();
               system("cls");
               menu_select();
               break;
            }
        case 2:
            {
               if(NULL==pHead)
               {
                   cout<<"记录总条数为零"<<endl;
                   getchar();
                   getchar();
                   system("cls");
                   menu_select();
               }
               system("cls");
               sort_List(pHead);
               traverse_List(pHead);
               getchar();
               getchar();
               system("cls");
               menu_select();
               break;
            }
        case 3:
            {
               if(pHead!=NULL)
               {
                   system("cls");
                   outFile();
                   system("cls");
                   menu_select();
               }
               system("cls");
               menu_select();
               break;
            }
        case 4:
            {
               system("cls");
               pHead=inFile();
               system("cls");
               menu_select();
               break;
            }
        case 5:
            {
               system("cls");
               delFile();
               system("cls");
               menu_select();
               break;
            }
        case 6:
            {
               if(NULL==pHead)
               {
                   cout<<"记录总条数为零"<<endl;
                   getchar();
                   getchar();
                   system("cls");
                   menu_select();
               }
               system("cls");
               int num;
               Stu st;
               traverse_List(pHead);
               cout<<"您想在哪条记录后插入,请输入序号:";
               cin>>num;
               cout<<"编辑要插入的记录:"<<endl;
               cout<<"学号:";
               cin>>st.no;
               cout<<"姓名:";
               cin>>st.name;
               cout<<"数学成绩:";
               cin>>st.math;
               cout<<"语文成绩:";
               cin>>st.chi;
               if(insert_List(pHead,num-1,st))
               {
                   cout<<"插入成功!"<<endl;
               }
               else
               {
                   cout<<"插入失败!"<<endl;
               }
               getchar();
               getchar();
               system("cls");
               menu_select();
               break;
            }
        case 7:
            {
               if(NULL==pHead)
               {
                   cout<<"记录总条数为零"<<endl;
                   getchar();
                   getchar();
                   system("cls");
                   menu_select();
               }
               int num;
               Stu * st=(Stu *)malloc(sizeof(Stu));
               traverse_List(pHead);
               cout<<endl<<"请输入您要删除的记录的序号:";
               cin>>num;
               if(delete_List(pHead,num,st))
               {
                   cout<<endl<<"成功删除的记录如下:"<<endl;
                   cout<<"学号:"<<st->no<<endl<<"姓名:"<<st->name<<endl;
               }
               else
               {
                   cout<<"删除失败!"<<endl;
               }
               getchar();
               getchar();
               system("cls");
               menu_select();
               break;
            }
        case 8:
            {
               if(NULL!=pHead)
               {
                   system("cls");
                   cout<<"记录总条数:"<<length_List(pHead)<<"条"<<endl;
                   getchar();
                   getchar();
                   system("cls");
                   menu_select();
               }
               else
               {
                   cout<<"记录总条数为零"<<endl;
                   getchar();
                   getchar();
                   system("cls");
                   menu_select();
               }
               break;
            }
        case 9:
            {
               system("cls");
               cout<<"成功退出!"<<endl;
               exit(0);
               break;
            }
        }
    }
      
      
    void delFile()
    {
        ofstream fileout;
        fileout.open("c:\kcsj.txt",ios_base::out);
        fileout<<"";
        fileout.close();
    }
      
      
    Student * inFile()
    {
        Student * pHead=(Student *)malloc(sizeof(Student));
        if(NULL==pHead)
        {
            cout<<"分配失败,程序终止!"<<endl;
            exit(0);
        }
        Student * pTail=pHead;
        pTail->next=NULL;
        ifstream in("c:\kcsj.txt");
        if (!in.is_open())
        {
            cout << "Error opening file"<<endl; 
            exit(0);
        }
        while (!in.eof())
        {
            Stu st;
            in.read(reinterpret_cast<char *>(&st), sizeof(st));
            if (in.fail()) 
            {
               break;
            }
            Student * pNew=new Student();
            if(NULL==pNew)
            {
               printf("分配失败,程序终止 ");
               exit(0);
            }
            pNew->setst(st);
            pTail->next=pNew;
            pNew->next=NULL;
            pTail=pNew;
        }
        in.close();
        return pHead;
    }
      
      
    void outFile()
    {
        ofstream out;
       out.open("c:\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
        if(!out)
        {
            cout<<"文件不存在,退出时别忘记保存文件!"<<endl;
            out.close();
            out.open("stu.dat",ios_base::out|ios::binary);
        }
        else
        {  
            out.close();
           out.open("c:\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
        }
        Student * temp=pHead->next;
        while(temp!=NULL)
        {
            Stu st=temp->getst();
            out.write(reinterpret_cast<char *>(&st), sizeof(st));
            temp=temp->next;
        }   
        out.close();
    }
      
    Student * create_List()
    {
        int len;
        Student * pHead=(Student *)malloc(sizeof(Student));
        if(NULL==pHead)
        {
            cout<<"分配失败,程序终止!"<<endl;
            exit(0);
        }
        Student * pTail=pHead;
        pTail->next=NULL;
        cout<<"请输入要存储的学生人数:";
        cin>>len;
        for(int i=0;i<len;i++)
        {
            Stu st;
            cout<<"请输入第"<<i+1<<"个学生的学号:";
            cin>>st.no;
            cout<<"请输入第"<<i+1<<"个学生的姓名:";
            cin>>st.name;
            cout<<"请输入第"<<i+1<<"个学生的数学成绩:";
            cin>>st.math;
            cout<<"请输入第"<<i+1<<"个学生的语文成绩:";
            cin>>st.chi;
            Student * pNew=new Student();
            if(NULL==pNew)
            {
               printf("分配失败,程序终止 ");
               exit(0);
            }
            pNew->setst(st);
            pTail->next=pNew;
            pNew->next=NULL;
            pTail=pNew;
        }
        return pHead;
    }
      
    void traverse_List(Student * pHead)
    {
        int i=1;
        Student * temp=pHead->next;
        while(temp!=NULL)
        {
            cout<<endl<<"序号:"<<i<<endl;
            temp->show();
            temp=temp->next;
            i++;
        }
    }   
      
    bool is_empty(Student * pHead)
    {
        if(NULL==pHead->next)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
      
    int length_List(Student * pHead)
    {
        int len=0;
        Student * temp=pHead->next;
        while(temp)
        {
            len++;
            temp=temp->next;
        }
        return len;
    }
      
    bool insert_List(Student * pHead,int position,Stu st)
    {
        int i=0;
        Student * p=pHead;
      
        while(NULL!=p&&i<position-1)
        {
            p=p->next;
            i++;
        }
        if(i>position-i||NULL==p)
        {
            return false;
        }
        Student * pNew=(Student *)malloc(sizeof(Student));
        if(NULL==pNew)
        {
            cout<<"分配失败,程序终止"<<endl;
            exit(0);
        }
        pNew->setst(st);
        pNew->next=p->next;
        p->next=pNew;
        return true;
    }
      
    bool delete_List(Student * pHead,int position,Stu * st)
    {
        int i=0;
        Student * p=pHead;
      
        while(NULL!=p->next&&i<position-1)
        {
            p=p->next;
            i++;
        }
        Student * q=p->next;
        *st=q->getst();
        p->next=p->next->next;
        free(q);
        q=NULL;
        return true;
    }
      
    void sort_List(Student * pHead)
    {
        Student * p,* q;
        Stu temp;
        int i,j;
        int len=length_List(pHead);
        for(i=0,p=pHead->next;i<len-1;i++,p=p->next)
        {
            for(j=i+1,q=p->next;j<len;j++,q=q->next)
            {
               if(q->st.ave>p->st.ave)
               {
                   temp=q->st;
                   q->st=p->st;
                   p->st=temp;
               }
            }
        }   
    }
  • 相关阅读:
    服务器模型??
    tcp和udp详解??
    osi七层模型??
    高内聚 低耦合??
    进程和线程的区别和联系??
    2019.10.03题解
    2019.10.02题解
    2019.09.29考试报告
    2019.09.27考试报告
    2019.09.26考试报告
  • 原文地址:https://www.cnblogs.com/flypie/p/4628622.html
Copyright © 2020-2023  润新知