C++学生管理系统的程序。
1、建立一个CPerson类,作为基类,成员变量为 IDNo(身份张号码)、Name(姓名)、Addr(住址)和Tel(电话号码)。其中,IDNo(身份张号码)、Name(姓名)要求在创建对象时输入,并且对象创建之后不能修改;其他两个可以在创建时输入,可以创建后输入,并作修改;2、建立一个CStudent类,继承自CPerson类。成员变量为 StudNo(学号),Math(数学成绩),English(英语成绩),和Average(评价成绩)。其中,StudNo要求在创建对象时输入,并且对象创建之后不能修改;Math(数学成绩),English(英语成绩),可以在创建时输入,可以创建后输入,并作修改;在输入或者修改Math(数学成绩),English(英语成绩)时计算出Average(评价成绩)。
3、建立一个CClass类。成员变量为ClassName(班级名称)和CStudent指针数组,数组大小限定为50。其中,ClassName(班级名称)要求在创建对象时输入,并且对象创建之后不能修改;CStudent指针数组初始化时,每个指针值均为NULL;CClass类的析构函数要完成每个CStudent的释放动作。
4、要求以提示加数字选择的方式来实现一级菜单和二级菜单。如:一级菜单为:
请选择操作: 1、创建班级; 2、添加学生信息; 3、修改学生信息; 4、删除学生信息; 5、打印学生信息; 6、退出; |
邮箱:
追问:你怎么不按上面的要求来的呀!
答案:#include<iomanip> #include<fstream> #include<string> #include <iostream>
using namespace std;
#define max 100;
class student { public: student *next; public: string name;//姓名 long num;//学号 int x,y,z;//数学,语文,英语 int AA;//总分 void play(){cout<<name<<"学生的学号是"<<num<<",数学:"<<x<<",语文:"<<y<<",英语:"<<z<<",总分:"<<AA<<endl;}; student(string sname,long snum,int sx,int sy,int sz) { name=sname; num=snum; x=sx; y=sy; z=sz; }
};
class cla { public: cla()//构造函数 { stu=0; sload(); } ~cla()//析构函数 { student *p; p=stu; while(p) { p=p->next; delete stu; stu=p; } stu=0; } void sadd(); //添加 void sremove(); //删除 void samend(); //修改 void ssearch(); //查询 void staxis(); //排序 void ssave(); //保存 void sload(); //读取
//排序函数 void pxh(); void psx(); void pyw(); void pyy(); void pAA(); private: student *stu; //头接点 };
void cla::sadd()//添加 { student *q; string name1; long num1; int x1,y1,z1;
system("cls"); cout<<"\n **增加的学生** \n"<<endl; cout<<"请输入学生的(中间用空格间隔) "<<endl; cout<<"姓名 学号 数学成绩 语文成绩 英语成绩:"<<endl; cin>>name1>>num1>>x1>>y1>>z1;
q=new student(name1,num1,x1,y1,z1); q->next=0; q->AA=x1+y1+z1;
if(stu) { student *t; t=stu; if(t->num==num1) { cout<<"学号已存在,请重新输入"<<endl; return; } while(t->next) { if(t->num==num1) { cout<<"学号已存在,请重新输入"<<endl; return; } t=t->next; } t->next=q; } else { stu=q; } cout<<"输入完毕"<<endl; }
void cla::sremove()//删除 { system("cls"); int num1; cout<<"\n** 删除学生信息 **\n"; cout<<"请输入想要删除学生的学号:"; cin>>num1;
//查找要删除的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } }
//删除结点 if(p1!=NULL)//若找到结点,则删除 { p1->play(); cout<<"确定删除吗?[Y/N]"<<endl; char c;cin>>c; if(toupper(c)!='Y') return;
if(p1==stu) //若要删除的结点是第一个结点 { stu=p1->next; delete p1; } else //若要删除的结点是后续结点 { p2->next=p1->next; delete p1; } cout<<"找到学号为"<<num1<<"的学生,并删除\n"; } else //未找到结点 cout<<"未找到想要删除的学生!\n"; }
void cla::samend()//修改 { system("cls"); long num1; cout<<"\n** 修改学生信息 **\n"; cout<<"输入要修改学生的学号"; cin>>num1;
//查找要修改的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } if(p1!=NULL) { cout<<"学号是"<<num1<<"的学生的信息"<<endl; cout<<"姓名 "<<p1->name<<"数学"<<p1->x<<"语文"<<p1->y<<"英语"<<p1->z<<endl; cout<<"请输入修改后的信息:姓名 数学成绩 语文成绩 英语成绩"<<endl; cin>>p1->name>>p1->x>>p1->y>>p1->z; p1->AA=p1->x+p1->y+p1->z; cout<<"修改成功"<<endl; } else //未找到接点 cout<<"未找到!\n"; }
void cla::ssearch()//查询 { system("cls"); cout<<"\n** 查询学生信息 **\n"<<endl; cout<<"请输入查询方式:"<<endl; cout<<"1.按学号查询"<<endl; cout<<"2.按姓名查询"<<endl; cout<<"3.返回"<<endl; char c; cin>>c; switch (c) { case '1': { long num1; cout<<"要查询的学号"<<endl; cin>>num1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } }
if(p1!=NULL) { cout<<"学号是"<<num1<<"的学生的信息"<<endl; cout<<"姓名:"<<p1->name<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl; cout<<"查询完毕..."; } else //未找到接点 cout<<"未找到!\n"; break; } case '2': { string name1; cout<<"要查询的学生姓名"<<endl; cin>>name1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } }
if(p1!=NULL) { cout<<name1<<"的学生的信息"<<endl; cout<<"学号:"<<p1->num<<" 数学:"<<p1->x<<" 语文:"<<p1->y<<" 英语:"<<p1->z<<endl; cout<<"查询完毕..."; } else //未找到接点 cout<<"未找到!\n"; break; } case '3': return; }
}
void cla::pxh() //按学号排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<"共有"<<n<<"条信息..."<<endl; int i; p1=stu; for(i=1;i<n;i++) { p1=stu; if (p1->num>p1->next->num) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->num>p1->next->num) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } }
p1=stu; do { p1->play(); p1=p1->next; }while(p1); }
void cla::psx()//按数学成绩排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<"共有"<<n<<"条信息..."<<endl; int i; p1=stu; for(i=1;i<n;i++) { p1=stu; if (p1->x>p1->next->x) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->x>p1->next->x) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do { p1->play(); p1=p1->next; }while(p1); }
void cla::pyw()//按语文成绩排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<"共有"<<n<<"条信息..."<<endl; int i; p1=stu; for(i=1;i<n;i++) { p1=stu; if (p1->y>p1->next->y) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->ne
上一个:C++语言能做什么事情
下一个:C++课程设计:哈夫曼编码器