学生管理系统

#include<fstream>

#include<iostream>

#include <algorithm>sort

#include<string>

#include<iomanip>

using namespace std;

class data

{

public:

         void input();

    int num;

         char name[10];

         char sex;

         float score[4];

         float sum_score;

         float ave_score;

};

void data::input()

{

         cout<<"学号(整型)   姓名(字符串)   性别(字符型)   高数.离散.C++.英语(浮点型)"<<endl;

         cin>>num>>name>>sex>>score[0]>>score[1]>>score[2]>>score[3];

         sum_score=score[0]+score[1]+score[2]+score[3];

         ave_score=sum_score/4;

}

class student:public data

{

public:

         student();

    void creat_data();

         void updata_data();

         void search_data();

         void delete_data();

         void paixu();

         void display();

    void run();

         void help();

protected:

         data ll;

         fstream file;

         ofstream outfile;

 

};

student::student()

{

         char a;

         cout<<"是否清空文件数据,第一次运行程序请新建文件数据(Y,N)"<<endl;

         while(1)

         {

                   cin>>a;

                   a=tolower(a);

                   if(a=='y'||a=='n')

                            break;

                   else

                            cout<<"输入数据有误,请重新输入:"<<endl;

                  

         }

         if(a=='y')

         {

                   outfile.open("filename1.bin",ios::out);

                   outfile.close();

         }

         file.open("filename1.bin",ios::in|ios::out|ios::binary);

         system("cls");

}

void student::creat_data()

{

 

         file.seekp(0,ios::beg);

         char tag;

         int i=0;

         while(1)

         {

                   ll.input();

                   file.seekp(0,ios::end);

                   file.write((char*)&ll,sizeof(ll));

             cout<<"是否继续建立(Y,N)"<<endl;

             cin>>tag;

             tag=tolower(tag);

             while(tag!='y'&&tag!='n')

             {

                            cout<<"error"<<endl;

                            cout<<"请重新输入:"<<endl;

                            cin>>tag;

                            tag=tolower(tag);

                   }

                   if(tag=='n')

                            break;

         }

         file.seekg(0,ios::beg);

         cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

         while(!file.eof())

         {

                   if(file.peek()==EOF)

                   {break;}

             file.read((char*)&ll,sizeof(ll));

           cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                        <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

         }

         file.clear();

}

 

void student::updata_data()

{

         int n;int y=0;

         cout<<"请输入要更新同学的学号"<<endl;

         cin>>n;

         file.seekg(0,ios::beg);

         while(!file.eof())

         {

                   file.read((char*)&ll,sizeof(ll));

                   if(ll.num==n)

                            break;

         }

         if(!file.eof())

         {

                   cout<<"该同学原始数据:"<<endl;

                   cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                   cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                        <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                   ll.input();

                   file.seekp(-sizeof(ll),ios::cur);

                   file.write((char*)&ll,sizeof(ll));

         }

         else

         {

                   cout<<"无此学号!!!"<<endl;

                   file.clear();

         }

         if(!file.eof())

         {

                   cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                   file.seekg(0,ios::beg);

                   while(!file.eof())

                   {

                            if (file.peek() == EOF)

                                     break;

                 file.read((char*)&ll,sizeof(ll));

                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                        <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                   }

                   file.clear();

         }

}

void student::search_data()

{

         int aa;

         cout<<"请输入要查询的学号:"<<endl;

         cin>>aa;

         file.seekg(0,ios::beg);

         while(!file.eof())

         {

                   if(file.peek()==EOF)

                   {break;}

                            file.read((char*)&ll,sizeof(ll));

                            if(ll.num==aa)

                            {

                                     cout<<"该同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                   <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                     break;

                            }

         }

         if(file.eof())

         {

                   cout<<"无此学号!!!"<<endl;

                  

         }

         file.clear();

}

void student::delete_data()

{

         ofstream outfile1("filename2.bin",ios::out);

         int aa;int gg=0;

         cout<<"请输入要删除的学号:"<<endl;

         cin>>aa;

         file.seekg(0,ios::beg);

    while(!file.eof())

         {

                   if(file.peek()==EOF)

                   {break;}

                            file.read((char*)&ll,sizeof(ll));

                            if(ll.num!=aa)

                                     outfile1.write((char*)&ll,sizeof(ll));

                            if(ll.num==aa)

                            {

                                     gg=1;

                                     cout<<"该同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                            }

         }

         file.clear();

         file.close();

         outfile1.close();

         remove("filename1.bin");//删除文件

         rename("filename2.bin","filename1.bin");//更改文件名

         file.open("filename1.bin",ios::in|ios::out|ios::binary);

         if(gg==1)

         {

                   file.seekg(0,ios::beg);

             cout<<"文件里剩余数据:"<<endl;

             cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

             while(!file.eof())

                   {

                            if(file.peek()==EOF)

                                     break;

                       file.read((char*)&ll,sizeof(ll));

                       cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                   }

         }

         if(gg==0)

         {cout<<"无此学号?"<<endl;}

         file.clear();

}

void student::paixu()

{

         cout<<" ******************************************************************************"<<endl;

    cout<<"                            请选择排序方式                                     "<<endl;

         cout<<" ******************************************************************************"<<endl;

    cout<<" *       1.★学号                         2.★高数                            *"<<endl;

    cout<<" *       3.★C++                          4.★离散                            *"<<endl;

    cout<<" *       5.★英语                         6.★总分                            *"<<endl;

    cout<<" *       7.★平均分                       8.★退出                            *"<<endl;

    cout<<" *                                                                            *"<<endl;

    cout<<" ******************************************************************************"<<endl<<endl;

         cout<<"请选择:";

         float er[50];int pp=0;data data1[50];

         int  xuan;cin>>xuan;

         switch(xuan)

                   {

                   case 1:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.num;

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.num)

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 2:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.score[0];

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.score[0])

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 3:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.score[1];

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.score[1])

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 4:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.score[2];

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.score[2])

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 5:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.score[3];

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.score[3])

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 6:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.sum_score;

                                               pp++;

                                     }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.sum_score)

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                           

                   case 7:

                            {

                                     file.seekg(0,ios::beg);

                                     while(!file.eof())

                                     {

                                               if(file.peek()==EOF)

                                                        break;

                                               file.read((char*)&ll,sizeof(ll));

                                               er[pp]=ll.ave_score;

                                               pp++;

                                      }

                                     file.clear();

                                     sort(er,er+pp);

                                     cout<<"排序后同学数据:"<<endl;

                                     cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

                                     for(int k=0;k<pp;k++)

                                     {

                                               file.seekg(0,ios::beg);

                                               while(!file.eof())

                                               {

                                                        if(file.peek()==EOF)

                                                                 break;

                                                        file.read((char*)&ll,sizeof(ll));

                                                        if(er[k]==ll.ave_score)

                                                        {

                                                                 data1[k]=ll;

                                                                 cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                                                          <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

                                                                 break;

                                                        }

                                               }

                                     }

                                     break;

                            }

                   case 8:

                            {

                                     exit(1);

                                     break;

                            }

                   }

         cout<<"排序后数据是否存入文件(Y,N):"<<endl;

         char a;

         while(1)

         {

                   cin>>a;

                   a=tolower(a);

                   if(a=='y'||a=='n')

                            break;

                   else

                            cout<<"输入数据有误,请重新输入:"<<endl;

                  

         }

         if(a=='y')

         {

                   file.seekp(0,ios::beg);

                   for(int f=0;f<pp;f++)

                            file.write((char*)&data1[f],sizeof(data1[f]));

         }

         file.clear();

}

void student::display()

{

         file.seekg(0,ios::end);

         int i=file.tellg();

         if(i==0)

                   cout<<"文件里没有数据,请建立数据:"<<endl;

         file.seekg(0,ios::beg);

         if(i!=0)

                   cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;

         while(!file.eof())

         {

                   if(file.peek()==EOF)

                            break;

                   file.read((char*)&ll,sizeof(ll));

                   cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'

                                <<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;

         }

         file.clear();

}

void student::help()

{

         cout<<"①该系统可以保存数据供下次使用,也可下次运行时清空数据"<<endl<<endl;

         cout<<"②该系统排序有7种方式"<<endl<<endl;

         cout<<"③若你要想以某种顺序显示数据,请先以该种方式排序后存入文件在显示"<<endl<<endl;

         cout<<"④该系统可以增加数据,数据在文件末尾"<<endl<<endl;

         system("pause");

    cout<<"\t\t***************************************************"<<endl;

    cout<<"\t\t**********                               **********"<<endl;

    cout<<"\t\t**********           欢迎使用            **********"<<endl;

    cout<<"\t\t**********                               **********"<<endl;

    cout<<"\t\t**********        软件四班-王新          **********"<<endl;

    cout<<"\t\t**********                               **********"<<endl;

    cout<<"\t\t**********       学生信息管理系统        **********"<<endl;

    cout<<"\t\t**********                               **********"<<endl;

    cout<<"\t\t***************************************************"<<endl;

         system("pause");

         system("cls");

         cout<<"\t\t           系统设计日期:二〇一二年六月九日            "<<endl<<endl;;

    cout<<"\t\t         系统仍有许多不足之处,敬请见谅               "<<endl<<endl;

    cout<<"\t\t          如发现错误,请联系QQ 993636112              "<<endl;

}

void student::run()

{

         int tt=1;int num=0;int num1=sizeof(ll);

         while(!(tt==8))

         {

                   file.seekp(0,ios::end);

                   num=file.tellp();

                   cout<<"系统正在进入主菜单..."<<endl<<endl;

                   system("pause");

                   system("cls");

             cout<<" ******************************************************************************"<<endl;

        cout<<"                            欢迎使用学生信息管理管理                            "<<endl;

             cout<<" ******************************************************************************"<<endl;

        cout<<" *       1.★添加数据                     2.★更新数据                        *"<<endl;

        cout<<" *       3.★查询数据                     4.★删除数据                        *"<<endl;

        cout<<" *       5.★排序(升序)                   6.★显示文件数据                    *"<<endl;

        cout<<" *       7.★系统信息                     8.★  退出                          *"<<endl;

        cout<<" *                                                                            *"<<endl;

        cout<<" ******************************************************************************"<<endl;

        cout<<"                                                                               "<<endl;

             cout<<" *****************************"<<"目前文件共有"<<setw(2)<<num/num1<<"个数据"<<"*****************************"<<endl<<endl;

        cout<<"请输入1-8之间的任意一数字:"<<endl;

                   cin>>tt;

                   system("cls");

                   switch(tt)

                   {

                   case 1:creat_data();break;

                   case 2:updata_data();break;

                   case 3:search_data();break;

                   case 4:delete_data();break;

                   case 5:paixu();break;

                   case 6:display();break;

                   case 7:help();break;

                   case 8:exit(1);break;

                   }

         }

}

void main()

{

         system("title 文件写的简单学生管理系统-王新");

    //system("mode con cols=90 lines=40");

         system("color e0");

         student b;

         b.run();

}

posted @ 2012-09-21 16:37  ♂咱說 ろ算  阅读(217)  评论(0编辑  收藏  举报