📄 1.cpp
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
class linkS;
class linkC;
class linkU;
class studentInfo//学生信息类
{
private:
int number;//学号
char name[20];//姓名
char pro[20];//专业
int courseN;//课程号
int goal;//得分
int classN;//班级号
studentInfo* next;//指向下一个的指针
public:
friend class linkS;//将linkS声名为该类的友员
studentInfo()//构造函数
{
next=NULL;
goal=-1;
}
studentInfo(int a,char* b,char* p,int c,int cn,int g=-1)//构造函数 g的默认值是-1
{
number=a;
strcpy(name,b);
strcpy(pro,p);
courseN=c;
next=NULL;
classN=cn;
goal=g;
}
void show()//显示信息
{
cout<<"学号: "<<number<<" 姓名: "<<name<<" 专业: "<<pro<<" 班级:"<<classN<<" 课程号: "<<courseN<<" 成绩"<<goal<<endl;
}
};
class courseInfo//课程信息
{
private:
int courseN;//课程号
char name[20];//名称
int xuefen;//学分
char teacher[20];//老师
courseInfo* next;//指向下一个的指针
public:
friend class linkC;//将linkC声名为该类的友员
courseInfo()//构造函数
{
next=NULL;
}
courseInfo(int c,char* n,int x,char* t)//构造函数
{
courseN=c;
strcpy(name,n);
xuefen=x;
strcpy(teacher,t);
next=NULL;
}
void show()//显示信息
{
cout<<"课程号:"<<courseN<<" 课程名:"<<name<<" 学分:"<<xuefen<<" 任课教师:"<<teacher<<endl;
}
};
class userInfo//用户信息
{
private:
char userName[20];//用户名
char passWord[20];//密码
int privilege;//权限
userInfo* next;//指向下一个的指针
public:
friend class linkU;//将linkU声名为该类的友员
userInfo()//构造函数
{
privilege=0;
next=NULL;
}
userInfo(char* u,char* p,int priv)//构造函数
{
strcpy(userName,u);
strcpy(passWord,p);
privilege=priv;
next=NULL;
}
void show()//显示信息
{
cout<<"用户名:"<<userName<<" 密码:"<<passWord<<" 权限:"<<privilege<<endl;
}
};
class linkS//学生信息链表
{
private:
studentInfo* head;//表头
studentInfo* pcurrent;
studentInfo* end;//表尾
public:
linkS()
{
head=NULL;
pcurrent=NULL;
end=NULL;
}
void add(studentInfo &s)//添加学生信息
{
if(head==NULL)
end=head=pcurrent=&s;
else
{
end->next=&s;
end=end->next;
}
}
void add(int a,char* b,char* p,int c,int cn,int g=-1)//添加学生信息
{
if(head==NULL)
end=head=pcurrent=new studentInfo(a,b,p,c,cn,g);
else
{
end->next=new studentInfo(a,b,p,c,cn,g);
end=end->next;
}
}
void Delete(int a,int c)//删除学生信息
{
studentInfo* pr;
if(head==NULL)
{
cout<<"删除不成功"<<endl;
return;
}
else if(head->number==a&&head->courseN==c)
{
head=head->next;
cout<<"删除成功"<<endl;
return;
}
pr=head;
pcurrent=head->next;
while(pcurrent!=NULL)
{
if(pcurrent->number==a&&pcurrent->courseN==c)
{
pr->next=pcurrent->next;
cout<<"删除成功"<<endl;
return;
}
pr=pcurrent;
pcurrent=pcurrent->next;
}
cout<<"删除不成功 没找到该学号或他未选该课"<<endl;
}
void Delete(int courseN)//删除所有选修了courseN编号课程的学生信息
{
studentInfo* pr;
while(head!=NULL&&head->courseN==courseN)
head=head->next;
if(head==NULL)
return;
pr=head;
pcurrent=head->next;
while(pcurrent!=NULL)
{
if(pcurrent->courseN==courseN)
pr->next=pcurrent->next;
pr=pcurrent;
pcurrent=pcurrent->next;
}
cout<<"删除成功"<<endl;
}
void show()//查看所有学生信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
pcurrent->show();
pcurrent=pcurrent->next;
}
}
void show(int courseN)//查看课程courseN的学生信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->courseN==courseN)
pcurrent->show();
pcurrent=pcurrent->next;
}
}
void show(int classN,int courseN)//查看classN班课程courseN的信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->classN==classN&&pcurrent->courseN==courseN)
pcurrent->show();
pcurrent=pcurrent->next;
}
}
void out(char* file)//将学生信息输出到文件
{
fstream outfile;
outfile.open(file,ios::out |ios::binary);
if(!outfile)
{
cout<<"can't open\n";
exit(0);
}
pcurrent=head;
while(pcurrent!=NULL)
{
outfile.write((char *)&(*pcurrent),sizeof(*pcurrent));
pcurrent=pcurrent->next;
}
outfile.close();
}
void in(char* file)//将学生信息从文件输入
{
fstream infile;
infile.open(file,ios::in |ios::binary);
if(!infile)
{
cout<<"can't open\n";
exit(0);
}
studentInfo student;
while(infile.read((char *)&student,sizeof(student)))
{
add(student.number,student.name,student.pro,student.courseN,student.classN,student.goal);
}
}
bool find(int sNumber,int courseN)//查找学号 sNumber为 课程编号为courseNde的学生 并且pcurrent指向该学生
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->number==sNumber&&head->courseN==courseN)
return true;
pcurrent=pcurrent->next;
}
return false;
}
void findS(int sNumber)//查找学号 sNumber为 的所有信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->number==sNumber)
pcurrent->show();
pcurrent=pcurrent->next;
}
}
bool chang(int sNumber,int courseN,int goal)//查找学号 sNumber为 课程编号为courseNde的 将其成绩改为goal
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->number==sNumber&&pcurrent->courseN==courseN)
{
pcurrent->goal=goal;
return true;
}
pcurrent=pcurrent->next;
}
return false;
}
bool setgoal(int sNumber,int courseN,int goal)// 给学生打分
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->number==sNumber&&pcurrent->courseN==courseN)
{
if(pcurrent->goal!=-1)
{
cout<<"该学生已有成绩 如果需要修改请联系管理员"<<endl;
return false;
}
pcurrent->goal=goal;
return true;
}
pcurrent=pcurrent->next;
}
return false;
}
void pinggu(int classN,int courseN)//classN班的courseN课程评估
{
int bujige=0;//不及格人数
int jige=0;//及格人数
int zhongdeng=0;//中等人数
int lianghao=0;//良好人数
int youxiu=0;//优秀人数
double sum=0;//总人数
double bujigel=0;//不及格率
double jigel=0;//及格率
double zhongdengl=0;//中等率
double lianghaol=0;//良好率
double youxiul=0;//优秀率
double sumgoal=0;//分数之和
double avggoal=0;//平均分
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->classN==classN&&pcurrent->courseN==courseN)
{
if(pcurrent->goal==-1)
{
cout<<"还有未被打分的学生请确保所有学生都有得分后再评估"<<endl;
return ;
}
if(pcurrent->goal<60)
bujige++;
else if(pcurrent->goal<70)
jige++;
else if(pcurrent->goal<80)
zhongdeng++;
else if(pcurrent->goal<90)
lianghao++;
else youxiu++;
sum++;
sumgoal+=pcurrent->goal;
}
pcurrent=pcurrent->next;
}
bujigel=bujige/sum;
jigel=jige/sum;
zhongdengl=zhongdeng/sum;
lianghaol=lianghao/sum;
youxiul=youxiu/sum;
avggoal=sumgoal/sum;
cout<<"################################################"<<endl;
cout<<classN<<"班级的各分段人数和比例如下"<<endl;
cout<<"总人数为:"<<int(sum)<<endl;
cout<<"不及格人数:"<<bujige<<" 不及格率"<<bujigel<<endl;
cout<<"及格人数:"<<jige<<" 及格率"<<jigel<<endl;
cout<<"中等人数"<<zhongdeng<<" 中等率"<<zhongdengl<<endl;
cout<<"良好人数"<<lianghao<<" 良好率"<<lianghaol<<endl;
cout<<"优秀人数"<<youxiu<<" 优秀率"<<youxiul<<endl;
cout<<"平均分:"<<avggoal<<endl;
cout<<"报告........................"<<endl;
if(avggoal<70)
{
cout<<"这个班该课程总体没学好"<<endl;
if(bujigel>0.4)
{
cout<<"这个班该课程不及格人数很多"<<endl;
if(youxiul>0.3)
{
cout<<"这个班该课程优秀人数也很多"<<endl;
cout<<"出现了两极分化"<<endl;
}
cout<<"学的差的同学要努力"<<endl;
}
}
else if(avggoal<85)
{
cout<<"这个班该课程总体还可以"<<endl;
if(youxiul>0.3)
cout<<"这个班该课程优秀人数也很多"<<endl;
else
cout<<"这个班该课程优秀人数不是很多"<<endl;
}
else
{
cout<<"这个班该课程总体很好"<<endl;
if(youxiul>0.3)
cout<<"这个班该课程优秀人数很多"<<endl;
}
cout<<"################################################"<<endl;
}
void pinggu(int courseN)//courseN课程评估
{
int bujige=0;//不及格人数
int jige=0;//及格人数
int zhongdeng=0;//中等人数
int lianghao=0;//良好人数
int youxiu=0;//优秀人数
double sum=0;//总人数
double bujigel=0;//不及格率
double jigel=0;//及格率
double zhongdengl=0;//中等率
double lianghaol=0;//良好率
double youxiul=0;//优秀率
double sumgoal=0;//分数之和
double avggoal=0;//平均分
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->courseN==courseN)
{
if(pcurrent->goal==-1)
{
cout<<"还有未被打分的学生请确保所有学生都有得分后再评估"<<endl;
return ;
}
if(pcurrent->goal<60)
bujige++;
else if(pcurrent->goal<70)
jige++;
else if(pcurrent->goal<80)
zhongdeng++;
else if(pcurrent->goal<90)
lianghao++;
else youxiu++;
sum++;
sumgoal+=pcurrent->goal;
}
pcurrent=pcurrent->next;
}
bujigel=bujige/sum;
jigel=jige/sum;
zhongdengl=zhongdeng/sum;
lianghaol=lianghao/sum;
youxiul=youxiu/sum;
avggoal=sumgoal/sum;
cout<<"################################################"<<endl;
cout<<"各分段人数和比例如下"<<endl;
cout<<"总人数为:"<<int(sum)<<endl;
cout<<"不及格人数:"<<bujige<<" 不及格率"<<bujigel<<endl;
cout<<"及格人数:"<<jige<<" 及格率"<<jigel<<endl;
cout<<"中等人数"<<zhongdeng<<" 中等率"<<zhongdengl<<endl;
cout<<"良好人数"<<lianghao<<" 良好率"<<lianghaol<<endl;
cout<<"优秀人数"<<youxiu<<" 优秀率"<<youxiul<<endl;
cout<<"平均分:"<<avggoal<<endl;
if(avggoal<70)
{
cout<<"这个课程总体没学好"<<endl;
if(bujigel>0.4)
{
cout<<"这个课程不及格人数很多"<<endl;
if(youxiul>0.3)
{
cout<<"这个课程优秀人数也很多"<<endl;
cout<<"出现了两极分化"<<endl;
}
cout<<"学的差的同学要努力"<<endl;
}
}
else if(avggoal<85)
{
cout<<"这个课程总体还可以"<<endl;
if(youxiul>0.3)
cout<<"这个班该课程优秀人数也很多"<<endl;
else
cout<<"这个班该课程优秀人数不是很多"<<endl;
}
else
{
cout<<"这个课程总体很好"<<endl;
if(youxiul>0.3)
cout<<"这个课程优秀人数很多"<<endl;
}
cout<<"################################################"<<endl;
}
};
class linkC//课程信息链表
{
private:
courseInfo* head;
courseInfo* pcurrent;
courseInfo* end;
public:
linkC()
{
head=NULL;
pcurrent=NULL;
end=NULL;
}
void add(courseInfo &c)
{
if(head==NULL)
end=head=pcurrent=&c;
else
{
end->next=&c;
end=end->next;
}
}
void add(int c,char* n,int x,char* t)//添加课程信息
{
if(head==NULL)
end=head=pcurrent=new courseInfo(c,n,x,t);
else
{
end->next=new courseInfo(c,n,x,t);
end=end->next;
}
}
void Delete(int n)//删除课程信息
{
courseInfo* pr;
if(head==NULL)
{
cout<<"删除不成功"<<endl;
return;
}
else if(head->courseN==n)
{
head=head->next;
cout<<"删除成功"<<endl;
return;
}
pr=head;
pcurrent=head->next;
while(pcurrent!=NULL)
{
if(pcurrent->courseN==n)
{
pr->next=pcurrent->next;
cout<<"删除成功"<<endl;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -