//线性表的顺序存储结构 //记录学生信息 #include<iostream> #include<string> #include<iomanip> using namespace std; struct Stu { string name; int age; }; class Student { private: Stu stu[100]; int num; public: Student(); bool Find(); bool Delete(int k); bool Insert(int k); void Output(); }; //构造函数 Student::Student() { num=0; } //查找元素 bool Student::Find() { int k,i,m=0; string str; cout<<"根据位置查找请输入0,根据姓名查找请输入1:"<<endl; cin>>k; if(k==0){ cout<<"请输入要查找的元素的位置:"<<endl; cin>>k; if(k<0 || k>num){ cout<<"您给的位置超出范围!"<<endl; return false; }else{ cout<<"name="<<stu[k-1].name<<"/n"<<"age="<<stu[k-1].age<<endl; return true; } }else if(k==1){ cout<<"请输入要查找的人的姓名:"<<endl; cin>>str; for(i=0;i<num;i++) { if(stu[i].name==str){ cout<<"name="<<stu[k-1].name<<" "<<"age="<<stu[k-1].age<<endl; m++; } } if(m==0){ cout<<"没有找到姓名为"<<str<<"的人!"<<endl; return false; }else{ cout<<"找到姓名为"<<str<<"的人"<<m<<"个!"<<endl; return true; } }else{ cout<<"输入错误!!!"<<endl; return false; } } //删除第k个位置上的元素 bool Student::Delete(int k) { int i; if(k<0 || k>num){ cout<<"不存在第"<<k<<"个元素!"<<endl; return false; }else{ for(i=k-1;i<num-1;i++) stu[i]=stu[i+1]; num--; return true; } } //在第k个位置上插入元素 bool Student::Insert(int k) { int i; if(num==100){ cout<<"已满"<<endl; return false; }else if(k<0 || k>num+1){ cout<<"k值不正确"<<endl; return false; }else{ Stu stu1,that; cout<<"请输入该人的姓名:"<<endl; cin>>stu1.name; cout<<"请输入年龄:"<<endl; cin>>stu1.age; for(i=num-1;i>k-1;i--) { stu[i]=stu[i-1]; } stu[k-1]=stu1; num++; return true; } } //输出所有数据 void Student::Output() { int i; cout<<setiosflags(ios::left)<<setw(20)<<"name"<<"age"<<endl; for(i=0;i<num;i++) { cout<<setiosflags(ios::left)<<setw(20)<<stu[i].name<<stu[i].age<<endl; } cout<<"共有"<<num<<"个人的信息"<<endl; } int main() { int n=0,k; Student nStu; while(true) { cout<<"显示所有请输入1,查找2,插入3,删除4:"<<endl; cin>>n; switch(n) { case 1: nStu.Output(); break; case 2: nStu.Find(); break; case 3: cout<<"请输入位置:"<<endl; cin>>k; nStu.Insert(k); break; case 4: cout<<"请输入位置:"<<endl; cin>>k; nStu.Delete(k); break; default: return 0; } } return 0; }