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

📄 1.cpp

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