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

📄 stuman.cpp

📁 专家系统是研究用解决某专门问题的专家知识来建立人机系统的方法和技术。
💻 CPP
字号:
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
//#include<conio.h>
#include"text1.h"
department allDepartment[]={{1,"计算机工程系","计算机科学与技术",194,4,3},
					{2,"交通工程系","运输管理",198,4,2},
					{3,"机械工程系","机电一体化",199,4,2},
					{4,"经济管理系","工商管理",198,4,2},
{5,"经济管理系","外贸英语",197,6,2},
{6,"生化系","生物工程",199,4,2}};
student allStudent[]={{10031301,"黎明",246,1,'f',4,3,2},
					{10031302,"未来",253,1,'m',6,4,0},
					{10031303,"海洋",223,2,'m',4,3,0},
					{10031304,"宇宙",243,2,'m',4,3,0},
					{10031305,"长城",241,1,'f',4,3,0},
{10031306,"长江",190,5,'f',0,3,0},
{10031307,"黄河",200,6,'m',4,0,0},
{10031308,"珠珠",200,3,'m',4,3,0},
{10031309,"太平",190,4,'f',6,3,0},
{10031310,"黑暗",190,3,'f',0,0,0}};
encourage_punish  EncouragePunish[]={
	{10031301,{{1,"2001年获一等奖学金"},{1,"2002年获二等奖学金"},{1,"2003年获一等奖学金"}},3},
	{10031302,{{1,"2001年获三等奖学金"},{0,"2002年获记过处分一次"},{0,"2004年获留校察看处分一次"}},3},
	{10031303,{{1,"2001年获二等奖学金"},{1,"2002年获三等奖学金"},{1,"2003年获一等奖学金"}},3},
	{10031304,{{1,"2001年获一等奖学金、三好学生"},{1,"2002年获一等奖学金、优干"},{1,"2003获特等奖学金、三好学生"},{1,"2004年获一等奖学金"}},4},
	{10031305,{{1,"2001年获三等奖学金"},{0,"2001记过处分一次"},{1,"2002年获三等奖学金"}},3}};

int searchStudent(student [],int,int,student&);
int searchDepartment(department [],int,int,department&);
int searchEncourage_punish(encourage_punish [],int,int,encourage_punish&);
char *finddep(int );

bool  graduation(department,student,char *explanation[],int&);
bool degree(department,student,char *explanation[],int&);
void print(student);
void print(department);


void main()
{
	int n1,n2,n3;
	n1=sizeof(allDepartment)/sizeof(department);
	n2=sizeof(allStudent)/sizeof(student);
	n3=sizeof(EncouragePunish)/sizeof(encourage_punish);

	cout<<"\n\n\t\t欢迎使用淮阴工学院学生学籍管理专家系统\n\n\n\n";
	do
	{
		cout<<"\t要求系统解答的问题:\n";
		cout<<"\t\t1————能否毕业问题?\n";
		cout<<"\t\t2————能否获得学位问题?\n";
		cout<<"\t\t3————奖惩问题?\n";
		cout<<"\t\t.........\n";

		cout<<"\t\t0————退出系统\n";
		cout<<"\t请输入您的选择:";
		int select,num;
		cin>>select;
		if(select==0)
			break;
		if(select>3)
		{cout<<"\t输入错误,请重新输入:";cin>>select;}
		cout<<"\t请输入您的学号:";
		cin>>num;
		student stu;
		department dep;
		encourage_punish currentEncouragePunish;
		if(!searchStudent(allStudent,n2,num,stu))//查询学生信息
		{
			cout<<"无此学号的学生!\n请重新选择\n\n\n";
			continue;
		}
		print(stu);
		if(!searchDepartment(allDepartment,n1,stu.departmentID,dep))//查询系部信息
		{
			cout<<"本校无此系!\n请重新选择\n";
			continue;
		}
		print(dep);
		int numEncourage_punish;
		numEncourage_punish=searchEncourage_punish(EncouragePunish,n3,num,currentEncouragePunish);
		//int 
		char *explanation[20] ;
		int  k;
		switch(select)
		{
		case 1:
			bool cangraduation;
			if(cangraduation=graduation(dep,stu,explanation,k))
				cout<<"你已获得毕业资格!\n";
			else
			{
				cout<<"对不起,你暂时还未获得毕业资格!\n因为";
				for(int i=0;i<k;i++)
					cout<<explanation[i]<<endl;
				cout<<endl;
			}
			break;
		case 2:
			bool getdegree;
			if(getdegree=degree(dep,stu,explanation,k))
				cout<<"你已符合获得学位的条件!\n";
			else
			{
				cout<<"对不起,你暂时还不符合获得学位的条件!\n因为";
				for(int i=0;i<k;i++)
					cout<<explanation[i]<<endl;
				cout<<endl;
			}
			break;
		case 3:
			if(numEncourage_punish==0)
				cout<<"该学生无奖惩记录!\n";
			else
			{
				int k=1;
				cout<<"该学生奖励记录为:\n";
				for(int i=0;i<currentEncouragePunish.num;i++)
					if(currentEncouragePunish.instance[i].type==1)
						cout<<'\t'<<k++<<'.'<<currentEncouragePunish.instance[i].content<<endl;
				if(k<=1)
					cout<<"\t无奖励记录!\n";
				k=1;
				cout<<"该学生处罚记录为:\n";
				for( i=0;i<currentEncouragePunish.num;i++)
					if(currentEncouragePunish.instance[i].type==0)
						cout<<'\t'<<k++<<'.'<<currentEncouragePunish.instance[i].content<<endl;
				if(k<=1)
					cout<<"\t无处罚记录!\n";
			}
			break;
		}
		char Continue;
		cout<<"是否继续(y/n):";
		cin>>Continue;
		if(Continue=='n'||Continue=='N')
			break;
		cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
		//clrscr();
	}while(1);
	cout<<"谢谢您的使用,再见!\n";
}
int searchStudent(student allStudent[],int n,int stu_id,student& stu)
{   //在学生库s中查找学号为stu_id的学生放入stu中,并返回1,否则返回0
	for(int i=0;i<n;i++)
		if(allStudent[i].number==stu_id)   //学号匹配
		{
			stu=allStudent[i];
			return 1;
		}
	return 0;
}

int searchDepartment(department allDepartment[],int n,int id,department &dep)
{   //在系部信息库allDepartment中查找id的系部信息放入dep中,并返回1,否则返回0
	for(int i=0;i<n;i++)
		if(allDepartment[i].departmentID==id)
		{
			dep=allDepartment[i];
			return 1;
		}
	return 0;
}
int searchEncourage_punish(encourage_punish EncouragePunish[],int n,int num,encourage_punish &currentEncouragePunish)
{   //在奖惩信息库EncouragePunish中查找学号为num的学生信息放入currentEncouragePunish中,并返回1,否则返回0
	for(int i=0;i<n;i++)
		if(EncouragePunish[i].number==num)
		{
			currentEncouragePunish=EncouragePunish[i];
			return 1;
		}
	return 0;
}

bool graduation(department dep,student stu,char *explanation[],int&k)
{	//对学生能否毕业的推理机
	k=0;
	bool cangraduation=true;
	if(stu.totalScores>=dep.totalScores)
	{
		explanation[k]=new char[14];
		strcpy(explanation[k],"1.学分已修满");
		k++;
	}
	else
	{
		explanation[k]=new char[14];
		strcpy(explanation[k],"1.学分未修满");
		k++;
		cangraduation=false;
	}
	return  cangraduation;
	
}
bool degree(department dep,student stu,char *explanation[],int&k)
{
	bool canObtainDegree=true;
	char temp[20];
	canObtainDegree=graduation(dep,stu,explanation,k);
	//cout<<"k="<<k;
	if(stu.gradeOfEnglish>=dep.gradeOfEnglish)//英语等级的匹配
	{
		
		explanation[k]=new char[30];
		strcpy(explanation[k],strcat(itoa(k+1,temp,10),".英语等级已达到要求"));
		k++;
	}
	else
	{
		explanation[k]=new char[30];
		strcpy(explanation[k],strcat(itoa(k+1,temp,10),".英语等级未达到要求"));
		k++;
		canObtainDegree=false;
	}
	if(stu.gradeOfComputer>=dep.gradeOfComputer)//计算机等级的匹配
	{
		explanation[k]=new char[30];
		strcpy(explanation[k],strcat(itoa(k+1,temp,10),".计算机等级已达到要求"));
		k++;
	}
	else
	{
		explanation[k]=new char[30];
		strcpy(explanation[k],strcat(itoa(k+1,temp,10),".计算机等级未达到要求"));
		k++;
		canObtainDegree=false;
	}

	return 	canObtainDegree;
}

void print(student stu)
{
	cout<<"学生信息:\n";
	cout<<setw(8)<<"学号"<<setw(7)<<"姓名"<<setw(7)<<"总学分"<<setw(15)<<"所在系"
		<<setw(5)<<"性别"<<setw(9)<<"英语等级"<<setw(11)<<"计算机等级"<<endl;
	cout<<setw(8)<<stu.number<<setw(7)<<stu.name<<setw(7)<<stu.totalScores
	<<setw(15)<<finddep(stu.departmentID)
		<<setw(5)<<stu.sex<<setw(9)<<stu.gradeOfEnglish<<setw(11)<<stu.gradeOfComputer<<endl;
	cout<<endl;
}
void print(department dep)
{
	cout<<"学生所在系信息:\n";
	cout<<setw(9)<<"部门编号"<<setw(15)<<"部门名称"<<setw(20)<<"专业名称"<<setw(11)<<"要求总学分"
		<<setw(9)<<"英语等级"<<setw(11)<<"计算机等级"<<endl;
	cout<<setw(9)<<dep.departmentID<<setw(15)<<dep.name<<setw(20)<<dep.subjectName<<setw(11)<<dep.totalScores
		<<setw(9)<<dep.gradeOfEnglish<<setw(9)<<dep.gradeOfComputer<<endl;
	cout<<endl;
}

char *finddep(int departmentID)
{
	for(int i=0;;i++)
		if(allDepartment[i].departmentID==departmentID)
			return allDepartment[i].name;
	return "";
}
	



		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -