学生学籍主要有:
每个学生的学号(唯一),姓名,性别,出生日期,地址等数据项构成数据元素
要完成如下 功能:
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;}