程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ stl list實現簡單的學生信息管理系統

c++ stl list實現簡單的學生信息管理系統

編輯:C++入門知識

c++ stl list實現簡單的學生信息管理系統 問題描述: 已知有20個學生記錄(包括學號、姓名、成績)的文件student.dat。要求編程序實現查詢、排序、插入、刪除諸功能。 系統的基本功能: A.要求顯示如下界面 **************************************** 1--------------查詢 2--------------排序 3--------------插入 4--------------刪除 **************************************** 通過選擇1-4來確定要做哪一個操作。 B.若選1,則出現如下界面 **************************************** 1.1----------按學號查詢 1.2----------按姓名查詢 1.3----------按成績查詢 **************************************** 通過選擇1.1-1.3來確定要做哪一個操作,其中:按學號查詢用二分法實現;按姓名查詢用順序法實現;按成績查詢實現查詢成績小於m分的學生;找到該生將學生記錄輸出到屏幕,若查無此人,輸出相關信息。 C.若選2,則按成績從大到小排序,姓名,學號順序也隨之調整。 D.若選3,將一個新學生記錄按學號順序插入,並把結果保存到文件student.dat中。 E.若選4,刪除指定學生的記錄,並把結果保存到文件student.dat中。 F.以上各個功能均編寫成子函數,由主函數調用實現。 c++代碼如下: [cpp]  #include <<span class="GRcorrect" id="GRmark_5fc8fc187032ce782ecac928f035d97f41d26a88_iostream:0" grphrase="5fc8fc187032ce782ecac928f035d97f41d26a88" grtype="null">iostream</span>>   #include <<span class="GRcorrect" id="GRmark_c85475ec45e79bf31944ddd7b9056330f5830822_fstream:0" grphrase="c85475ec45e79bf31944ddd7b9056330f5830822" grtype="null">fstream</span>>   #include <list>   #include <<span class="GRcorrect" id="GRmark_4b0a33f65e13f1f129d6d1e51548c3ab91888b26_cmath:0" grphrase="4b0a33f65e13f1f129d6d1e51548c3ab91888b26" grtype="null">cmath</span>>   #include <string<span class="GRcorrect" id="GRmark_fcc4c679808977b2a91b05c30d2e55360b066247_.:0" grphrase="fcc4c679808977b2a91b05c30d2e55360b066247" grtype="null">.</span>h>   #define MAX_STU 100//讀入學生的最大數目   /*   *鄭海波 blog.csdn.net/nuptboyzhb/   *email:[email protected]   */   <span class="GRcorrect" id="GRmark_d101e8caae62915e3f88a5fb668c63e9f9483281_using:0" grphrase="d101e8caae62915e3f88a5fb668c63e9f9483281" grtype="null">using</span> namespace <span class="GRcorrect" id="GRmark_d101e8caae62915e3f88a5fb668c63e9f9483281_std:1" grphrase="d101e8caae62915e3f88a5fb668c63e9f9483281" grtype="null">std</span>;   class Student   {   public:       char * name;       char *ID;       int grade;       Student()       {           name = new char[strlen("Anonymous-----") + 1];           ID = new char[strlen("NoIdInput------") + 1];           grade = 0;       }       Student(char * pName,char * pID, int pgrade)           :grade(pgrade)       {           name = new char[strlen(pName) + 1];           strcpy(name, pName);           ID = new char[strlen(pID) + 1];           strcpy(ID, pID);       }       Student(const Student& rhs)           :grade(rhs.grade)       {           name = new char[strlen(rhs.name) + 1];           strcpy(name, rhs.name);           ID = new char[strlen(rhs.ID) + 1];           strcpy(ID, rhs.ID);       }       Student& operator=(const Student& rhs)       {           name = new char[strlen(rhs.name) + 1];           strcpy(name, rhs.name);           ID = new char[strlen(rhs.ID) + 1];           strcpy(ID, rhs.ID);           grade = rhs.grade;           return *this;       }       // overload the == operator       // for sorting purposes, we consider that two Student objects are "equal"       // if they have the same grade       bool operator==(const Student& rhs) const       {           return (grade == rhs.grade) ? true : false;       }       // overload the < operator       // for sorting purposes, we consider that a Student object is "less than" another       // if it's grade is less than the other object's grade       bool operator<(const Student& rhs) const       {           return (grade < rhs.grade) ? true : false;       }       // overload the > operator       // for sorting purposes, we consider that a Student object is "greater than" another       // if it's grade is greater than the other object's grade       bool operator>(const Student& rhs) const       {           return (grade > rhs.grade) ? true : false;       }       // 顯示學生的信息       void print()       {           cout << name <<" " <<ID << " " << grade << endl;       }       //構造函數       ~Student()       {           delete []name;           delete []ID;       }   };   list<Student> lst;//學生鏈表,用於存放學生數據   void print(list<Student> lst, char * name)//輸入鏈表中所有的學生   {       list<Student>::iterator it;       cout << name << ":" << endl;              for(it = lst.begin(); it != lst.end(); ++it)           it->print();       cout << endl;   }   void screenA()//顯示屏幕操作A   {       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;   }   void screenB()//顯示屏幕查詢   {       system("cls");       cout<<"****************************************"<<endl;       cout<<"       1----------按學號查詢"<<endl;       cout<<"       2----------按姓名查詢"<<endl;       cout<<"       3----------按成績查詢"<<endl;       cout<<"       4----------返回"<<endl;       cout<<"****************************************"<<endl;   }   void searchByID()//按學號查找   {       cout<<"-------請輸入學號ID"<<endl;       char tID[12];       memset(tID,0,12);       cin>>tID;       bool flag=false;       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           if (strcmp(it->ID,tID)==0)           {               cout<<"----查找到,該學生信息如下:-----"<<endl;               it->print();               flag=true;               break;           }       }       if (flag==false)       {           cout<<"未找到!"<<endl;       }   }   void searchByName()//按名字查找   {       cout<<"-------請輸入姓名:"<<endl;       char tname[12];       memset(tname,0,12);       cin>>tname;       bool flag=false;       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           if (strcmp(it->name,tname)==0)           {               cout<<"----查找到,該學生信息如下:-----"<<endl;               it->print();               flag=true;               break;           }       }       if (flag==false)       {           cout<<"未找到!"<<endl;       }   }   void searchByGrade()//按分數查找   {       cout<<"-------請輸入分數:"<<endl;       int tgrade;       cin>>tgrade;       bool flag=false;       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           if (it->grade==tgrade)           {               cout<<"----查找到,該學生信息如下:-----"<<endl;               it->print();               flag=true;               break;           }       }       if (flag==false)       {           cout<<"未找到!"<<endl;       }   }   void sortByGrade()//按分數進行排序,由高到低   {       system("cls");       cout<<"-------按分數排序完畢,結果如下:"<<endl;       lst.sort( greater<Student>() );       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {          it->print();       }   }   void insertStudent()//插入一個學生   {       system("cls");       cout<<"-------請輸入學號ID"<<endl;       char tID[12];       memset(tID,0,12);       cin>>tID;       cout<<"-------請輸入姓名:"<<endl;       char tname[12];       memset(tname,0,12);       cin>>tname;       cout<<"-------請輸入分數:"<<endl;       int tgrade;       cin>>tgrade;       Student stu(tname,tID,tgrade);       lst.push_back(stu);       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           it->print();       }   }   void deleteStudent()//按要求刪除一個學生   {       system("cls");       cout<<"-------請輸入要刪除學生的學號ID:"<<endl;       char tID[12];       memset(tID,0,12);       cin>>tID;       bool flag=false;       list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           if (strcmp(it->ID,tID)==0)           {               cout<<"----查找到,該學生信息如下:-----"<<endl;               it->print();               lst.erase(it);               cout<<"刪除完畢!"<<endl;               flag=true;               break;           }       }       if (flag==false)       {           cout<<"未找到!"<<endl;       }   }   void inputData()//從文件中讀取數據   {       cout<<"正在從文件讀入數據..."<<endl;       ifstream ifile("student.dat");         if(!ifile)         {             cout<<"student.dat cannot be opened!"<<endl;             return;         }       char ch;         int i;       for (i=0;i<MAX_STU;i++)//讀取數目         {             string s_name,s_id,s_grade;           if(!ifile.get(ch))             {               cout<<"文件已經讀完!"<<endl;                 return;             }             while (ch!='#')//讀取姓名            {                 if (ch==' ')//跳過空格                 {                     ifile.get(ch);                     continue;                 }               s_name+=ch;                ifile.get(ch);           }             ifile.get(ch);             while (ch!='#')//讀取學號            {                 if (ch==' ')                 {                     ifile.get(ch);//跳過空格                     continue;                 }                 s_id+=ch;                 ifile.get(ch);             }             ifile.get(ch);             while(ch!='\n')//讀取分數             {                 if (ch==' ')                 {                     ifile.get(ch);                     continue;                 }                 s_grade+=ch;                 if(!ifile.get(ch))                 {                   cout<<"文件已經讀完!"<<endl;                     return;                 }              }           Student temp;           strcpy(temp.name,s_name.c_str());           strcpy(temp.ID,s_id.c_str());           temp.grade=atoi(s_grade.c_str());           lst.push_back(temp);       }         ifile.close();       system("cls");   }   void SaveAsFile()     {         system("cls");       ofstream ofile("student.dat",ios::out);         if (!ofile)       {             cout<<"打開文件失敗!"<<endl;             return;         }         list<Student>::iterator it;       for(it = lst.begin(); it != lst.end(); ++it)       {           ofile<<it->name<<"#"<<it->ID<<"#"<<it->grade<<"\n";       }       cout <<"保存完畢..."<< endl;       ofile.close();         return ;     }   int main()   {       inputData();//從文件中讀入數據       char ch;       screenA();       while (cin>>ch)       {           switch(ch)           {           case '1':               screenB();               while (cin>>ch)               {                   int flag=0;                   switch(ch)                   {                   case '1':                       searchByID();                       break;                   case '2':                       searchByName();                       break;                   case '3':                       searchByGrade();                       break;                   case '4':                       flag=1;                       break;                   default:                       flag=1;                       break;                   }                   if (flag==1)                   {                       break;                   }               }               break;           case '2'://排序               sortByGrade();               break;           case '3'://插入學生               insertStudent();               break;           case '4'://刪除學生               deleteStudent();               break;           case '5'://顯示當前信息               print(lst,"---------當前數據列表如下");               break;           case '6'://將數據保存到文件               SaveAsFile();               break;           case '7'://清屏               system("cls");               break;           default:               return 0;           }           screenA();       }       cout<<"系統退出"<<endl;       return 0;   }         student.dat內容如下: 張山  # B11010101  #  98 李四  # B11010101  #  67 王五  # B11010101  #  88 李華  # B11010101  #  76 李陽  # B11010101  #  55 張偉  # B11010101  #  87 王大為  # B11010101  #  89 李小名  # B11010101  #  92 張山一  # B11010101  #  98 李四一  # B11010101  #  67 王五一  # B11010101  #  88 李華一  # B11010101  #  76 李陽一  # B11010101  #  55 張偉一  # B11010101  #  87 王大二  # B11010101  #  89 李小登  # B11010101  #  92  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved