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

📄 学生成绩管理系统.cpp

📁 VC实现的简易学生成绩管理系统!对于初学者可以了解VC的使用以及成绩管理系统的架构~
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			p2=p1;
			p1=p1->next;
		}//p2指向原p1指向的结点p1后移一个结点
		if(num==p1->id)//如果输入的学生准考证号是p1所指的学生准考证号//结点找到后删除
		{
			if(p1==head) head=p1->next;//如果head指针和p1指针相等则将下一个结点赋给指针head 
			else 
				p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去
			cout<<" 删除准考证号为"<<num<<"的学生\n";
			n--;//将学生人数减1 
		}
		return(head);//将头指针返回
	}
}
//------------>查找函数
student *Information::find(student *head,long int num) 
//定义一个指向struct student的结构体指针函数*find()用来查找考生信息.
{
	
	if(head==NULL)//若调用次函数以前的头指针head为空
	{
		cout<<" 这是一个空表,请先输入考生成绩.\n";
		return(head); 
	}
	else
	{
		p1=head;//否则将头指针赋给p1
		while(num!=p1->id&&p1->next!=NULL)
			//寻找结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空
		{
			p1=p1->next;
		}//p2指向原p1指向的结点p1后移一个结点
		if(num==p1->id)//如果要查找的学生准考证号是p1所指的学生准考证号
		{
			cout<<"------------------------------------------------------------------------------\n";
			cout<<"准考证号 姓 名 性别 数学 物理 英语 C++ 平均分 总分 \n";
			cout<<"------------------------------------------------------------------------------\n";
			cout<<setw(8)<<p1->id
				<<setw(9)<<p1->name
				<<setw(6)<<p1->sex
				<<setw(7)<<p1->score[0]
				<<setw(7)<<p1->score[1]
				<<setw(7)<<p1->score[2]
				<<setw(7)<<p1->score[3]
				<<setw(10)<<p1->total/4.0
				<<setw(7)<<p1->total<<endl;
			cout<<"------------------------------------------------------------------------------\n";
		}
		else 
			cout<<" 没找到准考证号为"<<num<<"的学生.\n"; //结点没找到
		return(head);
	}
}
//------------定义paixu()函数将考生的总分从大到小排列并输出
void Information::paixu(student *head) 
{
	int i,k,m=0,j;
	student *p[Q];//定义一个指向struct student的结构体指针数组p 
	if(head!=NULL)//如果头指针是空则继续
	{ m=count(head);
	cout<<"------------------------------------------------------------------------------\n";
	cout<<" *学生考试成绩统计表*\n";
	cout<<"------------------------------------------------------------------------------\n";
	cout<<"准考证号 姓 名 性别 数学 物理 英语 C++ 平均分 总分 名次\n";
	cout<<"------------------------------------------------------------------------------\n";
	p1=head;
	for(k=0;k<m;k++)
	{
		p[k]=p1;
		p1=p1->next;
	}
	for(k=0;k<m-1;k++) //选择排序法
		for(j=k+1;j<m;j++)
			if(p[k]->total<p[j]->total)
			{
				p2=p[k];
				p[k]=p[j];
				p[j]=p2;
			} //从大到小排列的指针 
			for(i=0;i<m;i++)
			{
				cout<<setw(8)<<p[i]->id
					<<setw(9)<<p[i]->name
					<<setw(6)<<p[i]->sex
					<<setw(7)<<p[i]->score[0]
					<<setw(7)<<p[i]->score[1]
					<<setw(7)<<p[i]->score[2]
					<<setw(7)<<p[i]->score[3]
					<<setw(8)<<p[i]->total/4.0
					<<setw(7)<<p[i]->total
					<<setw(9)<<i+1<<endl;
				cout<<"------------------------------------------------------------------------------\n"; 
			}
	}
}
//------------>求各科平均分成绩的函数
void Information::average(student *head)
{
	
	int k,m;
	float arg1=0,arg2=0,arg3=0,arg4=0;
	if(head==NULL)//如果头指针是空则继续
	{
		cout<<" 这是一个空表,请先输入考生成绩.\n";
	}
	else
	{
		m=count(head);
		p1=head;
		for(k=0;k<m;k++)
		{
			arg1+=p1->score[0];
			arg2+=p1->score[1];
			arg3+=p1->score[2];
			arg4+=p1->score[3];
			p1=p1->next;
		}
		arg1/=m;arg2/=m;arg3/=m;arg4/=m;
		cout<<" *全班单科成绩平均分*\n";
		cout<<"------------------------------------------------------------------------------\n";
		cout<<" 数学平均分:"<<setw(7)<<arg1
			<<" 物理平均分:"<<setw(7)<<arg2
			<<" 英语平均分:"<<setw(7)<<arg3
			<<" C语言平均分:"<<setw(7)<<arg4<<endl;
		cout<<"------------------------------------------------------------------------------\n";
	}
}

//------------------->保存函数.
void Information::save(student *head)
{ 
	ofstream out("data.txt",ios::out);
	out<<count(head)<<endl;
	while(head!=NULL)
	{ out<<head->name<<"\t"
	<<head->id<<"\t"<<"\t"
	<<head->sex<<"\t"
	<<head->score[0]<<"\t"
	<<head->score[1]<<"\t"
	<<head->score[2]<<"\t"
	<<head->score[3]<<"\t"
	<<head->total<<endl; 
	head=head->next;
	}
	
}
//———————————>读取函数的实现
student *Information::Read()
{ int i=0;
p1=p2=( student *)malloc(LEN);
head=NULL; 
ifstream in("data.txt",ios::out);
in>>i;
if(i==0){cout<<" data.txt 文件中的数据为空,请先输入数据。"<<endl; return 0;} 
else {
	cout<<" …………………………………………………………………………………………"<<endl;
	for(;i>0;i--)
	{ p1=(student *)malloc(LEN);
	in>>st.name>>st.id>>st.sex
		>>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3]
		>>st.total;
	strcpy(p1->name,st.name);
	p1->id=st.id;
	strcpy(p1->sex,st.sex);
	p1->score[0]=st.score[0];
	p1->score[1]=st.score[1];
	p1->score[2]=st.score[2];
	p1->score[3]=st.score[3];
	p1->total=st.total;
	if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head
	else p2->next=p1;//否则将p1赋给p2所指结构体的next指针
	p2=p1;//将指针p1赋给指针p2
	n++; //将n的值加1
	//显示读入数据
	cout<<" "<<p1->name<<"\t"
		<<p1->id<<"\t"<<"\t"
		<<p1->sex<<"\t"
		<<p1->score[0]<<"\t"
		<<p1->score[1]<<"\t"
		<<p1->score[2]<<"\t"
		<<p1->score[3]<<"\t"
		<<p1->total<<endl;
	cout<<" …………………………………………………………………………………………"<<endl;
	//
	}
	cout<<" 数据已经成功读取完毕。"<<endl; 
	p2->next=NULL;
	return (head);
}

}
//------------------------------>主函数.
int main(void)
{ 
	Information person;
	student *head=NULL; 
	int choice;
	long int i; 
	do{ 
		cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
		cout<<"┃★ ★ ★ 学生成绩管理系统主菜单界面 ★ ★ ★┃";
		cout<<"┃★ ★ ★ ♀读取数据请输入数字零♂ ★ ★ ★┃";
		cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
		cout<<"┃ ★ ★ ★ ★ ★ ★ ①.输入学生成绩 ★ ★ ★ ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ②.显示学生成绩 ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ③.排序统计成绩 ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ④.查找学生成绩 ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ⑤.增加学生成绩 ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ⑥.删除学生成绩 ★ ★ ★ ┃";
		cout<<"┃ ★ ★ ★ ★ ★ ★ ⑦.安全退出系统 ★ ★ ★ ★ ★ ★ ┃"; 
		cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
		cout<<" 请输入您的选择(0--7):";
		cin>>choice;
		while(cin.fail())
		{
			cout<<" 对不起您的输入错误,请输入您的选择(0--7): ";
			cin.clear();
			cin.sync();
			cin>>choice;
		} 
		switch(choice)
		{
		case 0:head=person.Read();break;
		case 1:
			head=person.creat(); 
			break;
		case 2: 
			person.output(head); 
			break;
		case 3: 
			person.paixu(head); person.average(head); 
			cout<<" 参加考试的学生人数为:"<<person.count(head)<<"人\n";
			break;
		case 4: 
			cout<<" 请输入要查找的准考证号(8位):";
			cin>>i;
			while(cin.fail())
			{
				cout<<" 对不起您的输入错误,请输入一个正整数: ";
				cin.clear();
				cin.sync();
				cin>>i;
			} 
			person.find(head,i); 
			break;
		case 5: 
			head=person.insert(head);
			person.output(head);
			break;
		case 6:
			cout<<" 请输入要删除的准考证号(8位):";
			cin>>i;
			while(cin.fail())
			{
				cout<<" 对不起您的输入错误,请输入一个正整数: ";
				cin.clear();
				cin.sync();
				cin>>i;
			} 
			head=person.cancel(head,i);
			person.output(head);
			break;
		case 7:
			person.save(head); 
			break;
		default :cout<<" 对不起,您的输入有误,请重新输入。\n";
			break;
		}
	}while(choice!=7);
	return 0;
}
//**************************************************************************************

⌨️ 快捷键说明

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