📄 1.cpp
字号:
}
pr=pcurrent;
pcurrent=pcurrent->next;
}
cout<<"删除不成功 没找到该编号课程"<<endl;
}
void show()//显示链表信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
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);
}
courseInfo course;
while(infile.read((char *)&course,sizeof(course)))
{
add(course.courseN,course.name,course.xuefen,course.teacher);
}
}
bool find(int courseN)//查找编号为courseNde的课程 并且pcurrent指向该课程
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(pcurrent->courseN==courseN)
return true;
pcurrent=pcurrent->next;
}
return false;
}
char* getPcurrentName()//获取当前pcurrent指向的课程名称
{
return pcurrent->name;
}
};
class linkU//用户信息链表
{
private:
userInfo* head;
userInfo* pcurrent;
userInfo* end;
public:
linkU()
{
head=NULL;
pcurrent=NULL;
end=NULL;
}
void add(userInfo &u)
{
if(head==NULL)
end=head=pcurrent=&u;
else
{
end->next=&u;
end=end->next;
}
}
void add(char* u,char* p,int priv)//添加用户
{
if(head==NULL)
end=head=pcurrent=new userInfo(u,p,priv);
else
{
end->next=new userInfo(u,p,priv);
end=end->next;
}
}
bool check(char* strN,char* strP)//核对用户名与密码
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(strcmp(pcurrent->userName,strN)==0&&strcmp(pcurrent->passWord,strP)==0)
return true;
pcurrent=pcurrent->next;
}
cout<<"没有该用户或密码不正确"<<endl;
return false;
}
int getpriv(char* str)//获取该用户的权限
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(strcmp(pcurrent->userName,str)==0)
return pcurrent->privilege;
pcurrent=pcurrent->next;
}
return 0;//没什么用
}
void Delete(char* str)//删除该用户
{
if(strcmp(str,"manager")==0)
{
cout<<"不能删除manager超级用户"<<endl;
return ;
}
userInfo* pr;
if(head==NULL)
{
cout<<"删除不成功"<<endl;
return;
}
else if(strcmp(head->userName,str)==0)
{
head=head->next;
cout<<"删除成功"<<endl;
return;
}
pr=head;
pcurrent=head->next;
while(pcurrent!=NULL)
{
if(strcmp(pcurrent->userName,str)==0)
{
pr->next=pcurrent->next;
cout<<"删除成功"<<endl;
return;
}
pr=pcurrent;
pcurrent=pcurrent->next;
}
cout<<"删除不成功 没找该帐号"<<endl;
}
void show()//显示用户信息
{
pcurrent=head;
while(pcurrent!=NULL)
{
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);
}
userInfo user;
while(infile.read((char *)&user,sizeof(user)))
{
add(user.userName,user.passWord,user.privilege);
}
}
bool find(char* userN)//查找帐号为userN的用户 并且pcurrent指向该课程
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(strcmp(pcurrent->userName,userN)==0)
return true;
pcurrent=pcurrent->next;
}
return false;
}
bool change(const char*userN,char* newpassWord)//修改密码
{
pcurrent=head;
while(pcurrent!=NULL)
{
if(strcmp(pcurrent->userName,userN)==0)
{
strcpy(pcurrent->passWord,newpassWord);
return true;
}
pcurrent=pcurrent->next;
}
return false;
}
};
//全局变量
linkS l1;
linkU l3;
linkC l2;
void managerOp(char* userN);//超级用户的操作
void teacherOp(char* userN);//教务人员操作
void opStudent(int courseN);//操作编号为courseN课程信息
void main()
{
char u[20];//用户名
char pa[20];//密码
l1.in("students.dat");
l2.in("courses.dat");
l3.in("users.dat");
cout<<" ********************欢迎使用********************"<<endl;
cout<<"----------------------------------登录----------------------------------"<<endl;
cout<<"用户名:";
cin>>u;
cout<<"密码:";
cin>>pa;
if(l3.check(u,pa))
{
switch(l3.getpriv(u))
{
case 1:
cout<<"--------------------------------教务人员--------------------------------"<<endl;
teacherOp(u);
break;
case 2:
cout<<"--------------------------------超级用户--------------------------------"<<endl;
managerOp(u);
break;
}
char key;
cout<<"按y键保存修改";
cin>>key;
if(key=='y')
{
l1.out("students.dat");
l2.out("courses.dat");
l3.out("users.dat");
}
}
cout<<" **********************再见**********************"<<endl;
}
void managerOp(char* userN)//超级用户的操作
{
int op;//操作编号
char u[20];
char pa[20];
int p;
cout<<"_______________________操作及其编号_________________________"<<endl;
cout<<"1.用户信息 2.创建用户 3.删除用户 4.修改成绩 5.学生信息"<<endl;
cout<<"6课程信息 7.删除课程 8.修改密码 0.退出:"<<endl;
cout<<"——————————————————————————————"<<endl;
cout<<"请输入操作编号:";
cin>>op;
while(op!=0)
{
switch(op)
{
case 1:
l3.show();
break;
case 2:
cout<<"用户名:";
cin>>u;
if(l3.find(u))
{
cout<<"该用户名已被占用"<<endl;
break ;
}
cout<<"密码:";
cin>>pa;
cout<<"权限:";
cin>>p;
l3.add(u,pa,p);
break;
case 3:
cout<<"用户名:";
cin>>u;
l3.Delete(u);
break;
case 4:
int snum;
int cnum;
int goal;
cout<<"学号:";
cin>>snum;
cout<<"课程号:";
cin>>cnum;
cout<<"成绩:";
cin>>goal;
if(goal>100)
{
cout<<"输入不合理应在0到100之间"<<endl;
break;
}
if(l1.chang(snum,cnum,goal))
cout<<"修改成功"<<endl;
else
cout<<"修改不成功"<<endl;
break;
case 5:
l1.show();
break;
case 6:
l2.show();
break;
case 7:
int cnum1;
cout<<"课程号:";
cin>>cnum1;
l2.Delete(cnum1);
l1.Delete(cnum1);
break;
case 8:
char passw1[20];
char passw2[20];
cout<<"请输入新密码:";
cin>>passw1;
cout<<"请再次输入新密码:";
cin>>passw2;
if(strcmp(passw1,passw2)!=0)
{
cout<<"两次输入不同"<<endl;
break;
}
l3.change(userN,passw1);
break;
default:
cout<<"编号不正确"<<endl;
}
cout<<"请输入操作编号:";
cin>>op;
}
cout<<"___________________________end______________________________"<<endl;
}
void teacherOp(char* userN)//教务人员操作
{
int op;//操作编号
int courseN;//课程编号
char courseName[20];//课程名称
int xuefen;//学分
char teacher[20];//老师
cout<<"_______________________操作及其编号_________________________"<<endl;
cout<<"1.查看课程信息 2.添加课程3.操作特定课程 4.查看学生信息 5.修改密码0.退出"<<endl;
cout<<"——————————————————————————————"<<endl;
cout<<"请输入操作编号:";
cin>>op;
while(op!=0)
{
switch(op)
{
case 1:
l2.show();
break;
case 2:
cout<<"课程号:";
cin>>courseN;
if(l2.find(courseN))
{
cout<<"该编号已被占用"<<endl;
break ;
}
cout<<"课程名:";
cin>>courseName;
cout<<"学分:";
cin>>xuefen;
cout<<"任课教师:";
cin>>teacher;
l2.add(courseN,courseName,xuefen,teacher);
break;
case 3:
cout<<"请输入要操作的课程编号";
cin>>courseN;
if(!l2.find(courseN))
{
cout<<"没有该课程"<<endl;
break;
}
cout<<" ____________________"<<l2.getPcurrentName()<<"___________________"<<endl;
opStudent(courseN);
break;
case 4:
int n;
cout<<"学号:";
cin>>n;
l1.findS(n);
break;
case 5:
char passw1[20];
char passw2[20];
cout<<"请输入新密码:";
cin>>passw1;
cout<<"请再次输入新密码:";
cin>>passw2;
if(strcmp(passw1,passw2)!=0)
{
cout<<"两次输入不同"<<endl;
break;
}
l3.change(userN,passw1);
break;
default:
cout<<"编号不正确"<<endl;
}
cout<<"请输入操作编号:";
cin>>op;
}
cout<<"____________________________end_____________________________"<<endl;
}
void opStudent(int courseN)//操作编号为courseN课程信息
{
int op;//操作编号
int sNumber;//学号
char sName[20];//姓名
char sPro[20];//专业
int classN;//班级号
cout<<"1.查看学生信息 2.添加学生 3.删除 4.给学生打分"<<endl;
cout<<"5.各班情况 6.各班评估 7.总体情况 8.总体评估 0.退出"<<endl;
cout<<" ———————————————————————"<<endl;
cout<<"请输入操作编号:";
cin>>op;
while(op!=0)
{
switch(op)
{
case 1:
l1.show(courseN);
break ;
case 2:
cout<<"学号:";
cin>>sNumber;
cout<<"姓名:";
cin>>sName;
cout<<"专业:";
cin>>sPro;
cout<<"班级号:";
cin>>classN;
if(l1.find(sNumber,courseN))
{
cout<<"该记录已经有了"<<endl;
break ;
}
l1.add(sNumber,sName,sPro,courseN,classN);
break;
case 3:
cout<<"学号:";
cin>>sNumber;
l1.Delete(sNumber,courseN);
break;
case 4:
int goal1;
int goal2;
cout<<"学号:";
cin>>sNumber;
cout<<"分数:";
cin>>goal1;
cout<<"再次分数:";
cin>>goal2;
if(goal1!=goal2)
{
cout<<"两次输入不同"<<endl;
break;
}
if(goal1>100)
{
cout<<"输入不合理应在0到100之间"<<endl;
break;
}
l1.setgoal(sNumber,courseN,goal1);
cout<<"打分成功"<<endl;
break;
case 5:
cout<<"请输入要查看的班级:";;
cin>>classN;
l1.show(classN,courseN);
break;
case 6:
cout<<"请输入要查看的班级:";;
cin>>classN;
l1.pinggu(classN,courseN);
break;
case 7:
l1.show(courseN);
break ;
case 8:
l1.pinggu(courseN);
break ;
default:
cout<<"编号不正确"<<endl;
}
cout<<"请输入操作编号:";
cin>>op;
}
cout<<" _____________________end_______________________"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -