学生成绩与奖学金评定系统代码
- 格式:doc
- 大小:66.00 KB
- 文档页数:9
#include<iostream>#include<iomanip>#include<fstream>#include<string>using namespace std;#define max 100;class student{public:student *next;public:string name; //姓名long num; //学号string JB; //级别string BJ; //班级int x,y,z; //高数,C++,英语int AA; //总分float BB; //平均分int PM; //排名void play(){cout<<name<<"学生的学号是:"<<num<<"级别:"<<JB<<"班级:"<<BJ <<",高数:"<<x<<",C++:"<<y<<",英语:"<<z<<",总分:"<<AA<<",平均分"<<BB<<",排名"<<PM<<endl;};student(string sname,long snum,string sJB,string sBJ,int sx,int sy,int sz,int sPM){name=sname;num=snum;JB=sJB;BJ=sBJ;x=sx;y=sy;z=sz;PM=sPM;}};class cla{public:cla() //构造函数{stu=0; //空地址sload(); //调用读取函数}~cla() //析构函数{student *p; //定义指针变量p指向student类p=stu; //把stu的地址赋给pwhile(p){p=p->next; //p指向下一结点delete stu; //撤销空间stu=p; //把p的地址赋给stu}stu=0;}void sadd(); //添加void sremove(); //删除void samend(); //修改void ssearch(); //查询void ssave(); //保存void sload(); //读取void sscholar(); //奖学金评定private:student *stu; //头接点};void cla::sadd() //添加{student *q;string name1;long num1;string JB1;string BJ1;int x1,y1,z1;int PM1;system("cls");cout<<"\n **增加的学生** \n"<<endl;cout<<"请输入学生的(中间用空格间隔) "<<endl;cout<<"姓名学号级别班级高数成绩C++成绩英语成绩班级成绩排名"<<endl;cin>>name1>>num1>>JB1>>BJ1>>x1>>y1>>z1>>PM1;q=new student(name1,num1,JB1,BJ1,x1,y1,z1,PM1); //开辟一个存放类成员数据的空间q->next=0; //q的next是空表q->AA=x1+y1+z1; //计算学生总分q->BB=(x1+y1+z1)/3; //计算学生平均分if(stu){student *t; //定义对象指针t=stu; //把stu地址赋给tif(t->num==num1) //输入重复{cout<<"学号已存在,请重新输入"<<endl;return; //返回}while(t->next) //指向下一结点{if(t->num==num1) //已存在{cout<<"学号已存在,请重新输入"<<endl;return; //返回}t=t->next; //指向下一结点}t->next=q; //把新开辟的空间赋给t所指向的下一结点}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<<" C++"<<p1->y<<" 英语"<<p1->z<<endl;cout<<"请输入修改后的信息:姓名高数成绩C++" ;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::sscholar(){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;if(p1->x>=75&&p1->y>=75&&p1->z&&p1->PM==1){cout<<"奖学金评定结果为:"<<"学习标兵";}else if(p1->x>=75&&p1->y>=75&&p1->z&&p1->PM<=0.05*50&&p1->PM!=1) {cout<<"奖学金评定结果为:"<<"三好学生";}else{ 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<<" C++:"<<p1->y<<" 英语:"<<p1->z <<"总分:"<<p1->AA<<"平均分:"<<p1->BB<<"排名:"<<p1->PM<<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->name<<" 高数:"<<p1->x<<" C++:"<<p1->y<<" 英语:"<<p1->z <<"总分:"<<p1->AA<<"平均分:"<<p1->BB<<"排名:"<<p1->PM<<endl;cout<<"查询完毕...";}else //未找到接点cout<<"未找到!\n";break;}case '3': return;}}void cla::ssave() //保存到文件{system("cls");char c;cout<<"\n保存学生奖学金结果(将覆盖原文件),是否继续?[Y/N]:"; cin>>c;if(toupper(c)!='Y') return;ofstream tfile("date.txt",ios::binary);student *p=stu;while(p) // 写入文件{tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;tfile<<endl;p=p->next;}tfile.close(); //关闭cout<<"保存完毕..."<<endl;}void cla::sload() //读取{student *p;p=stu;while(p){stu=p->next;delete p;p=stu;}ifstream tfile("date.txt",ios::binary);string name1;long num1;string JB1;string BJ1;int x1,y1,z1;int PM1;tfile>>name1>>num1>>JB1>>BJ1>>x1>>y1>>z1>>PM1;while(tfile.good()){ //创建学生接点student *s;s=stu;s=new student(name1,num1,JB1,BJ1,x1,y1,z1,PM1);s->next=0;s->AA=x1+y1+z1;if(stu) //若已经存在结点{student *p2;p2=stu;while(p2->next) //查找尾结点{p2=p2->next;}p2->next=s; //连接}else //若不存在结点(表空){stu=s; //连接}tfile>>name1>>num1>>JB1>>BJ1>>x1>>y1>>z1;}tfile.close();cout<<"\n欢迎使用学生成绩和奖学金评定系统\n";}void main(){char c;cla a;do{cout<<"*********欢迎使用学生成绩和奖学金评定系*********************\n";cout<<" 作者:10级计算机科学与技术1班巫文杰\n";cout<<" 1……增加学生\n";cout<<" 2……删除学生\n";cout<<" 3……修改学生\n";cout<<" 4……学生奖学金评定\n";cout<<" 5……查询学生信息\n";cout<<" 6……保存信息\n";cout<<" 7……读取信息\n";cout<<" 8……退出\n";cout<<"*************************************\n";cout<<"请选择(1-8):";cin>>c;switch(c){case '1': a.sadd();break;case '2': a.sremove();break;case '3': a.samend();break;case '4': a.sscholar();break;case '5': a.ssearch();break;case '6': a.ssave();break;case '7': a.sload();break;}}while(c!='8');}。