顺序表应用-学生学籍管理

来源:互联网 发布:linux java home 编辑:程序博客网 时间:2024/04/29 08:12

学生学籍主要有:

每个学生的学号(唯一),姓名,性别,出生日期,地址等数据项构成数据元素

要完成如下 功能:

1、插入

2、删除

3、修改

4、查询

5、输出

考虑到学生学籍表一般只会在开学毕业会有增加或者删除操作,而平时会进行频繁的查找或者小部分修改,所以采用顺序表比较好。为学籍表设计一个模板类,类中包含存储学生的基本信息的顺序表以及在上面的操作成员函数。为每个学生涉及的数据建立一个结构类型,并用此结构类型对学籍表模板类进行实例化:

const int MAX=200;struct stu{int id;char name[20];char sex;int date;char add[20];};template<typename T>void change(T &x){ int y; cout<<"enter 1,2 3 4 for name,sex,date,add"<<endl; cin>>y; switch(y){ case 1:{cout<<"enter the name ";char name[20];cin>>name;strcpy(x.name,name);break;}case 2:{cout<<"enter the sex ";char sex;cin>>sex;x.sex=sex;break;}case 3:{cout<<"enter the date ";int t;cin>>t;x.date=t;break;} case 4:{cout<<"enter the add ";char add[20];cin>>add;strcpy(x.add,add);break;} default:cout<<"error"<<endl;} }template<typename T> class seqlist{ private: T data[MAX]; int size; public: seqlist(){size=0;}  seqlist(T a[],int n){ if(n>MAX)throw"n error"; for(int i=0;i<n;i++) data[i]=a[i]; size=n;} ~seqlist(){}; int getsize(){return size;} T get(int i){ if(i>size||i<1)throw"i error"; return data[i-1];} void prt(){ if(size<1)cout<<"empty"<<endl;else {for(int i=0;i<size;i++){cout<<setw(5)<<data[i].id<<" "<<setw(5)<<data[i].name<<" "<<setw(5)<<data[i].sex<<" "<<setw(5)<<data[i].date<<" "<<setw(5)<<data[i].add<<" ";cout<<endl;}cout<<endl;}} int loc(T x){ for(int i=0;i<size;i++)   if(data[i]==x)return i+1; return -1;} void insert(int i,T x){ if(size>=MAX)throw"overflow"; if(i>size+1||i<1)throw"i error"; for(int j=size;j>=i;j--)   data[j]=data[j-1]; data[i-1]=x; size++;} T del(int i){ if(size<1)throw"downflow"; if(i>size||i<1)throw"i error"; T x=data[i-1]; for(int j=i;j<size;j++)   data[j-1]=data[j]; size--; return x;} void fun(int ids){ int f=1;  for(int i=0;i<size;i++)  if(data[i].id==ids){f=0;cout<<"you find:"<<endl; cout<<setw(5)<<data[i].id<<" "<<setw(5)<<data[i].name<<" "<<setw(5)<<data[i].sex<<" "<<setw(5)<<data[i].date<<" "<<setw(5)<<data[i].add<<" "; cout<<endl; change(data[i]);break;} if(f==0)cout<<"change done"<<endl; else cout<<"change failed"<<endl;} };

调用:

int main(){stu a[]={{100,"yan",'a',1992,"anhui"},{101,"wu",'a',1993,"jiangxi"},{102,"zhang",'b',1992,"shanghai"}};   seqlist<stu>l(a,3);   l.prt();   stu b={0,"none",'a',1990,"beijing"};   l.insert(2,b);   l.prt();   l.del(1);   l.prt();   l.fun(102);   l.prt();system("pause");return 0;}

结果:


0 0
原创粉丝点击