C++课程设计--学生考试质量分析系统设计(MFC)

本文介绍了一个学生考试质量分析系统的详细设计与实现,包括学生信息管理、成绩查询与排序、课程统计等功能,通过具体代码展示了如何处理学生数据并提供有效的信息检索与分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课设题目

学生考试质量分析系统设计

课设要求

  1. 用户管理
  2. 学生信息的录入、删除、修改
  3. 将当前系统中的信息保存在文件中,并可将保存在文件中的信息读入到当前系统中,供用户进行使用
  4. 根据以下关键字进行查询: 学生学号、姓名、班级、课程名称
  5. 分 别按照学号、单科成绩、总成绩、平均成绩进行排序
  6. 查询每门课程的最高分、 最低分及相应学生学号、姓名和班级
  7. 对某门课以班为单位统计不同分数段的学生数及所占比例

程序运行界面

在这里插入图片描述
在这里插入图片描述

核心代码

void pupil::OnButton4() 
{
	// TODO: Add your control notification handler code here
UpdateData(true);
	int sel = m_pupil.GetSelectionMark();
	if(sel ==-1)
	{
		MessageBox("请选择需要修改的车票!");
	}
	else if(m_id==""&&m_name==""&&m_sex==""&&m_age==""&&m_class==""&&m_chinese==""&&m_math==""&&m_english=="")

	{
		MessageBox("修改信息有误,请重新修改!");
	}
else
{

    stu[sel].student_id = m_id;
    stu[sel].name = m_name;
	stu[sel].sex =m_sex;
    stu[sel].age = m_age;
	stu[sel].class_id= m_class;
	stu[sel].chinese= m_chinese;
	stu[sel].math= m_math;
	stu[sel].english= m_english;

    m_pupil.SetItemText(sel,0,m_id); 
    m_pupil.SetItemText(sel,1,m_name);  
	m_pupil.SetItemText(sel,2,m_sex);  
	m_pupil.SetItemText(sel,3,m_age); 
	m_pupil.SetItemText(sel,4,m_class);
	m_pupil.SetItemText(sel,5,m_chinese);
	m_pupil.SetItemText(sel,6,m_math);
	m_pupil.SetItemText(sel,7,m_english);

    MessageBox("修改信息成功!");
}
	
}

void pupil::OnButton5() 
{
	// TODO: Add your control notification handler code here
		int n = m_pupil.GetSelectionMark();

	if(n<0)
		MessageBox("请选中要删除的信息!");
	else
	{ 

        stu.erase(stu.begin()+n);
		m_pupil.DeleteItem(n);
  //清空编辑框
	m_id="";
	m_name="";
	m_sex="";
	m_age="";
	m_class="";
	m_chinese="";
	m_math="";
	m_english="";
	UpdateData(false);
MessageBox("删除成功!");
	}

}

void pupil::OnButton6() 
{
	// TODO: Add your control notification handler code here
		// TODO: Add your control notification handler code here
    UpdateData(true);
	int flag = 1;
	int i = 0;
	if (stu.size()==0){
		flag = 0;
		MessageBox("当前系统未有学生信息!");
	}
    else if( m_id==""&&
		     m_name==""&&
		     m_class==""
			 )
	{
		flag = 0;
		MessageBox("请输入查询信息!");
	}

	if (flag==1) {

		for( i = 0;i < stu.size();i++)
	{
		if ( stu[i].student_id == m_id||stu[i].name == m_name||stu[i].class_id == m_class)	
		{   
			MessageBox("学生信息成功找到!");
            m_id = stu[i].student_id;
            m_name = stu[i].name;
			m_sex = stu[i].sex;
			m_age = stu[i].age;
			m_class = stu[i].class_id;
			m_chinese = stu[i].chinese;
			m_math = stu[i].math;
            m_english = stu[i].english;
			UpdateData(false);
			break;
		}
	}
	}

	if (i==stu.size()&&flag==1)
	{
      MessageBox("学生信息未找到!");
	}
}

bool sort_id(Student &a,Student &b)
{

return _ttoi(a.student_id)>_ttoi(b.student_id);
}
void pupil::OnButton9() 
{
			int index = m_x.GetCurSel();
			CString choice;
  m_x.GetLBText(index,choice); 
  if(choice=="平均成绩")
  {
	  std::sort(stu.begin(),stu.end(),Student::sort_ave_nums);
  }
  else if(choice=="语文")
  {
  	  	std::sort(stu.begin(),stu.end(),Student::sort_chinese);

  }
  else if(choice=="数学")
  {
  	  	std::sort(stu.begin(),stu.end(),Student::sort_math);

  }
  else if(choice=="英语")
  {
  	  	std::sort(stu.begin(),stu.end(),Student::sort_english);

  }
  else if(choice=="学号")
  {
	  	std::sort(stu.begin(),stu.end(),Student::sort_id);

  }
  else  // 总成绩排序
  {	  	std::sort(stu.begin(),stu.end(),Student::sort_nums);

  }
 	m_pupil.DeleteAllItems(); // 全部清空 
for (int i=0;i<stu.size();i++)
{
 		m_pupil.InsertItem(i,stu[i].student_id);
		m_pupil.SetItemText(i,1,stu[i].name);
		m_pupil.SetItemText(i,2,stu[i].sex);
		m_pupil.SetItemText(i,3,stu[i].age);
		m_pupil.SetItemText(i,4,stu[i].class_id);
		m_pupil.SetItemText(i,5,stu[i].chinese);
		m_pupil.SetItemText(i,6,stu[i].math);
		m_pupil.SetItemText(i,7,stu[i].english);
		m_pupil.SetItemText(i,8,stu[i].nums);
		m_pupil.SetItemText(i,9,stu[i].ave_nums);

}
}


void pupil::OnButton11() 
{
	// TODO: Add your control notification handler code here
	
			int index = m_y.GetCurSel();
			CString choice;
  m_y.GetLBText(index,choice); 
  if(choice=="英语")
  {
	  std::sort(stu.begin(),stu.end(),Student::sort_english);
  }
  else if(choice=="语文")
  {
  	  	std::sort(stu.begin(),stu.end(),Student::sort_chinese);

  }
  else  // 数学
  {
  	  	std::sort(stu.begin(),stu.end(),Student::sort_math);

  }
  
  m_pupil.DeleteAllItems(); // 全部清空 

 		m_pupil.InsertItem(0,stu[0].student_id);
		m_pupil.SetItemText(0,1,stu[0].name);
		m_pupil.SetItemText(0,2,stu[0].sex);
		m_pupil.SetItemText(0,3,stu[0].age);
		m_pupil.SetItemText(0,4,stu[0].class_id);
		m_pupil.SetItemText(0,5,stu[0].chinese);
		m_pupil.SetItemText(0,6,stu[0].math);
		m_pupil.SetItemText(0,7,stu[0].english);
		m_pupil.SetItemText(0,8,stu[0].nums);
		m_pupil.SetItemText(0,9,stu[0].ave_nums);

}

项目源码

https://haihong.blog.csdn.net/article/details/127818222
源代码: #include #include #include #include #define Smax 200 using namespace std; struct student { string num; string name; float eng; float math; float clang;//定义c++ float gete(){return eng;} float getm(){return math;} float getcl(){return clang;} string getn(){return num;} string getna(){return name;} int rank[3]; int row;//排名 int sinto(string,string,float,float,float);//输入数据 void sshow();//输出数据 float sall();// 求和 float save();//求平均 void objrank();//成绩分类 }; void shows()//普通函数 { cout<<setw(6)<<"排名"<<setw(6)<<"学号"<<setw(10)<<"姓名" <<setw(6)<<"英语"<<setw(6)<<"数学"<<setw(6)<<"c++" <<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl; } int student::sinto(string a1,string a2,float b1,float b2,float b3 ) { num=a1;name=a2; eng=b1;math=b2;clang=b3; return 0; } void student::sshow()//输出 { cout<<setw(6)<<row<<setw(6)<<num<<setw(10)<<name<<setw(6) <<eng<<setw(6)<<math<<setw(6)<<clang<<setw(6)<<sall() <<setw(10)<<setiosflags(ios::fixed)<<setprecision(1)<<save()<<endl; cout<<setiosflags(ios::fixed)<<setprecision(0); } float student::sall()//求总分 { return eng+math+clang; } float student::save()//求平均分 {return sall()/3;} void student::objrank() { int n; rank[0]=(int)eng; rank[1]=(int)math; rank[2]=(int)clang; for(int i=0;i<3;i++) { n=rank[i]/10; switch(n) { case 9:n=1;break; case 8:n=2;break; case 7:n=3;break; case 6:n=4;break; default:n=5;} rank[i]=n; } } //类student结束 //类leo开始 class leo {private: student item[Smax]; int size; public: leo(); void lsize(int);//设置数组大小 void linit();//清空 void linsert();//添加 void ldelet(string);//删除 void lsearch(string);//查找 void lchan(string);//修改 void lpcent();//成绩分类 void lrow();//排序 void obave();//求平均 void lview();//显示全部数据 void lcin();//从磁盘输出 void lcout();//储存到磁盘 }; leo::leo() { student item[Smax]; lsize(0); } void leo::lsize(int i) {size=i; } void leo::linit() { lsize(0); cout<<"学生数据清除成功"<<endl; cout<<"当前无学生数据。请添加...."<<endl; } void leo::ldelet(string a) { int k=0;string c; for(int i=0;i<size;i++) if(item[i].getn()==a) { cout<<"你将要删除的数据如下:"<<endl; shows(); item[i].sshow(); cout<>c; if(c=="y"||c=="Y") {item[i]=item[--size];k=1;} } if(k!=1)cout<<"\n删除失败!"<<endl; else cout<<"\n删除成功!"<Smax)cout<<"超出范围,不能再添加!"<<endl; else { cout<<"\n请输入学号,姓名,英语,数学,c++成绩:"<>a1>>a2>>b1>>b2>>b3; for(int i=0;i<size;i++) if(item[i].getn()==a1) { mn++; cout<<"输入学号与下面的数据重复!"<<endl; shows();//输出重复的学号,姓名,英语,数学,c++成绩 item[i].sshow();} if(!mn) {item[size++].sinto(a1,a2,b1,b2,b3); cout<<"\n添加成功!";} } cout<>a; } } void leo::lsearch(string a)//查找 {int N=0; for(int i=0;i<size;i++) if(item[i].getn()==a) { N++; shows();//输出学号,姓名,英语,数学,c++ item[i].sshow(); } if(!N)cout<<"输入有误或该学生数据不存在"<<endl; } void leo::lchan(string a)//修改 { if(size==0){cout<<"当前学生数据为空,请添加...."<<endl;} else{ int N=0; for(int i=0;i<size;i++) if(item[i].getn()==a) { N++; cout<<"你将要修改的数据如下:"<<endl; shows();item[i].sshow(); cout<<"请输入要修改学生的学号,姓名,英语,数学,c++成绩"<>a1>>a2>>b1>>b2>>b3; item[i].sinto(a1,a2,b1,b2,b3); cout<<"修改成功!"<<endl; } if(!N)cout<<"输入的学号有误!"<1) { for(int i=0;i<size-1;i++) { temb=item[i]; for(int j=i+1;j<size;j++) if(item[i].sall()<item[j].sall()) { item[i]=item[j]; item[j]=temb; } item[0].row=1; for(int i=0;iitem[i+1].sall()) item[i+1].row=i+2; else item[i+1].row=i+1;//并列排名 }} else if(size==1) item[0].row=1; } void leo::lview()//显示 { if(size==0){cout<<"当前学生数据为空,请添加...."<<endl;} else { cout<<"共有学生数据"<<size<<"条"<<endl<<endl; shows(); for(int i=0;i<size;i++) { item[i].sshow(); } } } void leo::obave()//统计科目 { if(size!=0) { float sum[3]={0}; for(int i=0;i<size;i++) { sum[0]+=item[i].gete(); sum[1]+=item[i].getm(); sum[2]+=item[i].getcl();} cout<<"英语平均的成绩为:" <<setiosflags(ios::fixed)<<setprecision(1)<<sum[0]/size<<'\n'; cout<<"数学平均的成绩为:"<<sum[1]/size<<'\n'; cout<<"c++的平均成绩是:"<<sum[2]/size<<'\n'; cout<<setiosflags(ios::fixed)<<setprecision(0)<<endl; } else cout<<"当前无学生数据,请添加......"; } void leo::lpcent() //成绩分类 { int p[3][200]; float tem=100.0/size; string a[3]={"英语","数学","c++"}; if(size!=0) { for(int i=0;i<size;i++) { item[i].objrank(); p[0][i]=item[i].rank[0]; p[1][i]=item[i].rank[1]; p[2][i]=item[i].rank[2]; } for(int k=0;k<3;k++) { int b[5]={0}; for(int i=0;i<size;i++) { switch(p[k][i]) { case 1: b[0]++;break; case 2: b[1]++;break; case 3: b[2]++;break; case 4: b[3]++;break; case 5: b[4]++;break; default:break; } } cout<<a[k]<<"成绩分类人数: 优"<<b[0]<<"人 良"<<b[1] <<"人 中"<<b[2]<<"人 及"<<b[3]<<"人 不及"<<b[4]<<"人"<<endl; cout<<setiosflags(ios::fixed)<<setprecision(1) <<a[k]<<"成绩分类比例: 优"<<(float)b[0]*tem<<"% 良" <<(float)b[1]*tem<<"% 中"<<(float)b[2]*tem<<"% 及" <<(float)b[3]*tem<<"% 不及"<<(float)b[4]*tem<<"%"<<endl<<endl; cout<<setiosflags(ios::fixed)<<setprecision(0)<<endl; } } } void leo::lcin() { string a[200],b[200];float c[200],d[200],e[200]; int f[200]; ifstream infile("ok.txt",ios::in); if(! infile) cerr<<"文件打开失败。"<<endl; for(int i=0;i>a[i]>>b[i]>>c[i]>>d[i]>>e[i]>>f[i]; item[size].sinto(a[i],b[i],c[i],d[i],e[i]);size++; if(f[i]==1) break; } infile.close(); } void leo::lcout() {ofstream outfile("ok.txt",ios::out); if(! outfile) cerr<<"文件打开失败。"<<endl; for(int i=0;i<size;i++) outfile<<item[i].num<<" "<<item[i].name<<" "<<item[i].eng<<" "<<item[i].math<<" "<<item[i].clang<<" "<<size-i<<endl; outfile.close(); } void showmenu() { cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; cout<<" "; cout<<"|----------学生成绩统计管理系统--------------------------|"<<endl; cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; cout<<" "; cout<<"| 1.显示:显示所有学生数据(按总分排序)|"<<endl; cout<<" "; cout<<"| 2.查看:查看所有统计结果 |"<<endl; cout<<" "; cout<<"| 3.添加:插入一个学生数据 |"<<endl; cout<<" "; cout<<"| 4.删除:删除一个学生数据 |"<<endl; cout<<" "; cout<<"| 5.查找: 查找指定学生数据 |"<<endl; cout<<" "; cout<<"| 6.修改:修改指定学生数据 |"<<endl; cout<<" "; cout<<"| 7.清空:清除所有学生数据 |"<<endl; cout<<" "; cout<<"| 8.帮助:查看系统注意事项 |"<<endl; cout<<" "; cout<<"| 0.退出:将数据保存到磁盘 |"<<endl; cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; } void showtip() { cout<<"\n\t\t----------------操作完成!-----------------"<<endl; cout<<"\t\t----------------选择0-8继续------------------"<<endl; } int main() { leo leo1; string c="s",a; system("cls");//清屛 showmenu(); cout<<"正在打开文件,请稍后..."<<endl; leo1.lcin(); cout<>c; while(c!="0") { system("cls"); showmenu(); if(c=="1") { cout<<"你选择了1,学生数据显示如下:"<<endl<<endl; leo1.lrow();//排序 leo1.lview(); } if(c=="2") { cout<<"你选择了2,统计结果如下:"<<endl; leo1.obave();//各科平均成绩, leo1.lpcent();//各科分类情况 } if(c=="3") { cout<<"你选择了3,"; leo1.linsert(); } if(c=="4") { cout<<"你选择了4,请输出要删除的学号:"<>a; leo1.ldelet(a); } if(c=="5") { cout<<"你选择了5,请输出要查找的学号:"<>a; leo1.lsearch(a); } if(c=="6") { cout<<"你选择了6,请输出要修改的学号:"<>a; leo1.lchan(a); } if(c=="7") { cout<<"你选择了7,全部数据将要清空"<<endl; cout<<"你确定清空吗?输入y确定,n退出"<>a; if(a=="y"||a=="Y") leo1.linit(); } if(c=="8") { cout<<"1.本系统最多可以容纳200个学生数据."<<endl; cout<<"2.选择相应的数字输入,不同数据间留空隔, 输完后按回车键 ."<<endl; cout<<"3.注意操作完后将数据保存."<>c; system("cls");leo1.lcout(); } cout<<"谢谢您的使用!"<<endl; return 0;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海轰Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值