⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 编写了一个小的学生选课管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}
			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 + -