课程设计 学生管理系统(包括文件操作,最终完整版)

 1、实验目的

综合练习课程的所有知识点,熟练面向对象程序设计的方法和流程,提高分析和解决问题的能力,培养动手能力。

2、实验学时:6学时

3、实验内容

教学管理系统。

学生信息包括学生的学号和姓名等,选课信息包括每个学生该学期所选的课程,成绩包括每个学生所选的课程的考核成绩。

系统功能要求如下:

(1)能输入学生信息和成绩。

(2)能修改学生信息和成绩;

(3)能删除学生信息;

(4)能查询所有学生的信息;

(5)统计功能:

1.输出某门课程不及格的学生信息;

2.能输出某门课程全班前5名的学生信息;

3.能输出按总分递减排序的学生信息。

PS:此txt文本保存在D盘,该程序可以成功运行的前提是用户电脑有D盘!

#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<windows.h>
using namespace std;
//student类 
class student{
private:
    string sno;
	string name;
	string age;
	string sex;
	double math;
	double english;
	double computer;
	double score;
public:
	student()
	{
		//cout<<"构造一个学生类"<<endl;
	}
	student(string sn,string na,int ag,string se,double ma,double co,double en)
	{
		cout<<"构造一个学生类"<<endl;
		sno=sn;name=na;age=ag;sex=se;math=ma;computer=co;english=en;score=math+english+computer;
	}
	~student()
	{
		//cout<<"析构一个学生类"<<endl;
	}
	string GetSno()
	{
		return sno;
	}
	string GetName()
	{
		return name;
	}
        string GetAge()
	{
		return age;
	}
	string GetSex()
	{
		return sex;
	}
	double GetMath()
	{
		return math;
	}
	double GetEnglish()
	{
		return english;
	}
	double GetComputer()
	{
		return computer;
	}
	double GetScore()
	{
		return score;
	}
	void SetSno(string s)
	{
		sno=s;	
	}
	void SetName(string n)
	{
		name=n;
	}
	void SetAge(string a)
	{
		age=a;
	}
	void SetSex(string x)
	{
		sex=x;
	}
	void SetMath(double m)
	{
		math=m;
	}
	void SetEnglish(double e)
	{
		english=e;
	}
	void SetComputer(double c)
	{
		computer=c;
	}
	void SetScore()
	{
		score=math+english+computer;
	}
	void display()
	{
		cout<<setw(10)<<sno<<setw(10)<<name<<setw(10)<<age<<setw(10)<<sex<<setw(10)<<math<<setw(10)<<english<<setw(10)<<computer<<setw(10)<<score<<endl;
	}
};
//db类 
class db
{
private:
	student stu[120];
	static int n;
public:
	void input();//创建模块 
	void display_db();//显示模块 
	void sort_db();//排序模块 
	int search(string s);//搜索模块 
	int deleat(string s);//删除模块 
	int modify(string s);//修改模块 
	int statistics();//统计模块 
	void nopass_math();//输出数学不及格的同学 
	void nopass_english();//输出英语不及格的同学 
	void nopass_computer();//输出计算机不及格的同学 
	void sort_math_five();//输出数学前五的同学 
	void sort_english_five();//输出英语前五的同学 
	void sort_computer_five();//输出计算机前五的同学  
	void sort_decrease();//总分降序排序并输出 
    void save();//新输入的文件保存
	void load();//文件输出
};
int db::n=0;

//删除模块 
int db::deleat(string s)
{
	load();
	int i=0;
	int t=0;
	int r,l,m;
	//二分查找 
	sort_db();
	l=0;
	r=n;
	m=(r+l)/2;
	while(l<=r)
	{
		m=(r+l)/2;
		if(stu[m].GetSno()>s)
		{
			r=m;
			if(stu[m].GetSno()==s)
			{
				t=1;
				i=m;
				break;
			}
			--r;
		}
		else
		{
			l=m;
			if(stu[m].GetSno()==s)
			{
				t=1;
				i=m;
				break;
			}
			++l;
		}
	}
	if(t==1)
	{
		--n;
		for(i=m;i<n;++i)
		{
			stu[i]=stu[i+1];
		}
	}
	else
	{
		cout<<"没有这个学号!"<<endl;
	} 
    save();
	return 0; 
}
 
//查找模块 
int db::search(string s)
{
	load();
	int r,l,m;
	//二分查找 
	sort_db();
	l=0;
	r=n;
	m=(r+l)/2;
	while(l<=r)
	{
		m=(r+l)/2;
		if(stu[m].GetSno()>s)
		{
			r=m;
			if(stu[m].GetSno()==s)
			{
				cout<<"查找到"<<s<<endl;
				stu[m].display();
				break;
			}
			--r;
		}
		else
		{
			l=m;
			if(stu[m].GetSno()==s)
			{
				cout<<"查找到"<<s<<endl;
				stu[m].display();
				break;
			}	
			++l;
		}
	}
    if(l>r)cout<<"没查找到"<<s<<endl;
    return 0; 
}
 
//创建模块 
void db::input()
{
	char tname[20];
	string stu_age;
	string stu_num;
	string stu_sex;
	double stu_math,stu_english,stu_computer;
	do
	{
		cout<<"请输入学生的学号:(键入0表示输入结束!)";
		cin>>stu_num;
		stu[n].SetSno(stu_num);
		if(stu[n].GetSno()=="0")
			break;
		cout<<"请输入学生的姓名:";
		getchar();
		gets(tname);
		stu[n].SetName(tname);
		cout<<"请输入学生的年龄:";
		cin>>stu_age;
		stu[n].SetAge(stu_age);
		cout<<"请输入学生的性别:";
		cin>>stu_sex;
		stu[n].SetSex(stu_sex);
		cout<<"请输入学生的数学成绩:";
		cin>>stu_math;
		stu[n].SetMath(stu_math);
		cout<<"请输入学生的英语成绩:";
		cin>>stu_english;
		stu[n].SetEnglish(stu_english);
		cout<<"请输入学生的计算机成绩:";
		cin>>stu_computer;
		stu[n].SetComputer(stu_computer);
		stu[n].SetScore();
		n++;
        save();
	}while(1);
}
 
//显示模块 
void db::display_db()
{
	load();
	cout<<setiosflags(ios::left)<<endl;
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
	int i;
	for(i=0;i<n;i++)
	{
		stu[i].display();
	}
		
}
 
//排序模块 
void db::sort_db()
{
	load();
	int i,j;
	student t;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(stu[j].GetSno ()>stu[j+1].GetSno ())
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
		}		
	}	
}
 
//修改模块 
int db::modify(string s)
{
	load(); 
	int q; 
	int r,l,m;
	string na,a,se;
	int c,e,ma;
	//二分查找 
	sort_db();
	l=0;
	r=n;
	m=(r+l)/2;
	while(l<=r)
	{
		m=(r+l)/2;
		if(stu[m].GetSno()>s)
		{
			r=m;
			if(stu[m].GetSno()==s)
			{
			
				
				//菜单 
				while(1)
				{
						cout<<"查找到"<<s<<endl;
						cout<<"请输入要进行的操作序号:"<<endl;
						cout<<"1.修改姓名"<<endl;
						cout<<"2.修改年龄"<<endl;
						cout<<"3.修改性别"<<endl;
						cout<<"4.修改计算机成绩"<<endl;
						cout<<"5.修改英语成绩"<<endl;
						cout<<"6.修改数学成绩"<<endl;
						cout<<"0.退出"<<endl;
						cin>>q;
						switch(q)
						{
							case 1:cout<<"请输入学生的姓名:";cin>>na;stu[m].SetName(na);save();break;
							case 2:cout<<"请输入学生的年龄:";cin>>a;stu[m].SetAge(a);save();break;
							case 3:cout<<"请输入学生的性别:";cin>>se;stu[m].SetSex(se);save();break;
							case 4:cout<<"请输入学生的计算机成绩:";cin>>c;stu[m].SetComputer(c);stu[m].SetScore();save();break;
							case 5:cout<<"请输入学生的英语成绩:";cin>>e;stu[m].SetEnglish(e);stu[m].SetScore();save();break;
							case 6:cout<<"请输入学生的数学:";cin>>ma;stu[m].SetMath(ma);stu[m].SetScore();save();break;
							case 0:return 0;
							default:cout<<"输入错误!退出!"<<endl;return 0;
						}
						break;
				}
			}
			--r;
		}
		else
		{
			l=m;
			if(stu[m].GetSno()==s)
			{
				
					//菜单 
					while(1)
					{
						cout<<"查找到"<<s<<endl;
						cout<<"请输入要进行的操作序号:"<<endl;
						cout<<"1.修改姓名"<<endl;
						cout<<"2.修改年龄"<<endl;
						cout<<"3.修改性别"<<endl;
						cout<<"4.修改计算机成绩"<<endl;
						cout<<"5.修改英语成绩"<<endl;
						cout<<"6.修改数学成绩"<<endl;
						cout<<"0.退出"<<endl;
						cin>>q;
							switch(q)
							{
								case 1:cout<<"请输入学生的姓名:";cin>>na;stu[m].SetName(na);save();break;
								case 2:cout<<"请输入学生的年龄:";cin>>a;stu[m].SetAge(a);save();break;
								case 3:cout<<"请输入学生的性别:";cin>>se;stu[m].SetSex(se);save();break;
								case 4:cout<<"请输入学生的计算机成绩:";cin>>c;stu[m].SetComputer(c);stu[m].SetScore();save();break;
								case 5:cout<<"请输入学生的英语成绩:";cin>>e;stu[m].SetEnglish(e);stu[m].SetScore();save();break;
								case 6:cout<<"请输入学生的数学:";cin>>ma;stu[m].SetMath(ma);stu[m].SetScore();save();break;
								case 0:return 0;
								default:cout<<"输入错误!退出!"<<endl;return 0;
							}
					}
					break;
			}	
			++l;
		}
	}
    if(l>r)cout<<"没查找到"<<s<<endl;
    return 0; 
}
 
//数学课程不及格的学生信息
void db::nopass_math()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		if(stu[i].GetMath()<60)
		{
			cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
			stu[i].display();
		}
	}
}
 
//英语课程不及格的学生信息
void db::nopass_english()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		if(stu[i].GetEnglish()<60)
		{
			cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
			stu[i].display();
		}
		
	}
}
 
//计算机课程不及格的学生信息
void db::nopass_computer()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		if(stu[i].GetComputer()<60)
		{
			cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
			stu[i].display();
		}
	}
}
 
//数学课程全班前5名的学生信息
void db::sort_math_five()
{
	int i,j;
	student t;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(stu[j].GetMath()>stu[j+1].GetMath())
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
		}	
	}
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
	if(n>=5)
	{
		for(i=0;i<5;i++)
		{
			stu[i].display();
		}
	} 
	else
	{
		for(i=0;i<n;i++)
		{
			stu[i].display();
		}
	}
}
 
//英语课程全班前5名的学生信息
void db::sort_english_five()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(stu[j].GetEnglish()>stu[j+1].GetEnglish())
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
		}
	}
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
	if(n>=5)
	{
		for(i=0;i<5;i++)
		{
			stu[i].display();
		}
	} 
	else
	{
		for(i=0;i<n;i++)
		{
			stu[i].display();
		}
	}
}
 
//计算机课程全班前5名的学生信息
void db::sort_computer_five()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(stu[j].GetComputer()>stu[j+1].GetComputer())
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
		}
	}
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
	if(n>=5)
	{
		for(i=0;i<5;i++)
		{
			stu[i].display();
		}
	} 
	else
	{
		for(i=0;i<n;i++)
		{
			stu[i].display();
		}
	}
}
 
//总分递减排序的学生信息
void db::sort_decrease()
{
	int i,j;
	student t;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-1-i;j++)
		{
			if(stu[j].GetScore()<stu[j+1].GetScore())
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
		}
	}
	cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"年龄"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<setw(10)<<"总成绩"<<endl;
	for(i=0;i<n;i++)
	{
		stu[i].display();
	}
}
 
//统计模块 
int db::statistics()
{
	load();
	int x;
 	while(1)
 	{
 		cout<<"1.输出数学课程不及格的学生信息"<<endl;	
		cout<<"2.输出英语课程不及格的学生信息"<<endl;
		cout<<"3.输出计算机课程不及格的学生信息"<<endl;
	 	cout<<"4.能输出数学课程全班前5名的学生信息"<<endl;
	 	cout<<"5.能输出英语课程全班前5名的学生信息"<<endl;
	 	cout<<"6.能输出计算机课程全班前5名的学生信息"<<endl;
	 	cout<<"7.能输出按总分递减排序的学生信息"<<endl;
	 	cout<<"8.清屏"<<endl; 
	 	cout<<"9.退出"<<endl; 
 		cin>>x;
 		switch(x)
	 	{
	 		case 1:nopass_math();system("pause");break;
	 		case 2:nopass_english();system("pause");break;
	 		case 3:nopass_computer();system("pause");break;
	 		case 4:sort_math_five();system("pause");break;
	 		case 5:sort_english_five();system("pause");break;
	 		case 6:sort_computer_five();system("pause");break;
	 		case 7:sort_decrease();system("pause");break;
	 		case 8:system("cls");statistics();//清屏 
	 		case 9:return 0;system("pause");break;
	 		default:cout<<"输入有误,请重新输入!"<<endl; 
		}
	}
}
 
//菜单模块 
void menu()
{
	system("cls");//清屏 
	cout<<"欢迎使用学生信息管理系统"<<endl;
	cout<<"1.创建模块"<<endl;
	cout<<"2.显示模块"<<endl;
	cout<<"3.排序模块"<<endl;
	cout<<"4.查找模块"<<endl;
	cout<<"5.修改模块"<<endl; 
	cout<<"6.删除模块"<<endl; 
	cout<<"7.统计模块"<<endl; 	
	cout<<"0.退出"<<endl;
	cout<<"请输入你的选择(序号):";
}
void db::save()
{
	ofstream out("D://student.txt",ios::out);
	if(!out)      
	    { cout<<"cannot open student.txt.\n"; exit(0) ; }
	out<<n<<endl;
	for(int i=0;i<n;i++)
		out<<stu[i].GetSno()<<' '<<stu[i].GetName()<<' '<<stu[i].GetAge()<<' '<<stu[i].GetSex()<<' '<<stu[i].GetMath()<<' '<<stu[i].GetEnglish()<<' '<<stu[i].GetComputer()<<' '<<stu[i].GetScore()<<endl;
	out.close();

}
void db::load()
{
    string stu_age;
	int i=0;
	double stu_math,stu_english,stu_computer,stu_score;
	string stu_num,stu_name,stu_sex;
	fstream in("D://student.txt",ios::in);

	if(!in)      
	    { cout<<"cannot open student.txt.\n"; exit(0) ; }
	in>>n;
	for(i=0;i<n;i++)
	{
		in>>stu_num>>stu_name>>stu_age>>stu_sex>>stu_math>>stu_english>>stu_computer>>stu_score;
		stu[i].SetSno(stu_num);
		stu[i].SetName(stu_name);
		stu[i].SetAge(stu_age);
		stu[i].SetSex(stu_sex); 
		stu[i].SetMath(stu_math);
		stu[i].SetEnglish(stu_english);
		stu[i].SetComputer(stu_computer);
		stu[i].SetScore();
	
	}

	in.close();

}
int main()
{
	db jike;
	string s;
	int x;
	while (1)
	{
		menu();
		cin>>x;
		switch(x)
		{
		case 1:jike.input();break;
		case 2:jike.display_db();system("pause");break;
		case 3:jike.sort_db();system("pause");break;
		case 4:cout<<"输入查找的学号:";cin>>s;jike.search(s);system("pause");break;
		case 5:cout<<"输入修改的学号:";cin>>s;jike.modify(s);system("pause");break;
		case 6:cout<<"输入要删除的学号:";cin>>s;jike.deleat(s);system("pause");break;
		case 7:jike.statistics();system("pause");break;
		case 0:cout<<"谢谢使用!"<<endl;return 0;
		default:cout<<"输入有误,请重新输入!"<<system("pause")<<endl; 
		}
	}
	return 0;
}

 推荐几款学习编程的网站

免费在线开发平台(https://docs.ltpp.vip/LTPP/

        探索编程世界的新天地,为学生和开发者精心打造的编程平台,现已盛大开启!这个平台汇集了近4000道精心设计的编程题目,覆盖了C、C++、JavaScript、TypeScript、Go、Rust、PHP、Java、Ruby、Python3以及C#等众多编程语言,为您的编程学习之旅提供了一个全面而丰富的实践环境。

        在这里,您不仅可以查看自己的代码记录,还能轻松地在云端保存和运行代码,让编程变得更加便捷。平台还提供了私聊和群聊功能,让您可以与同行们无障碍交流,分享文件,共同进步。不仅如此,您还可以通过阅读文章、参与问答板块和在线商店,进一步拓展您的知识边界。

        为了提升您的编程技能,平台还设有每日一题、精选题单以及激动人心的编程竞赛,这些都是备考编程考试的绝佳资源。更令人兴奋的是,您还可以自定义系统UI,选择视频或图片作为背景,打造一个完全个性化的编码环境,让您的编程之旅既有趣又充满挑战。

免费公益服务器(https://docs.ltpp.vip/LTPP-SHARE/linux.html

        作为开发者或学生,您是否为搭建和维护编程环境而困扰?现在,有一款免费的公共服务器,内置多种编程语言的编程环境,并且配备了在线版VS Code。让您可以随时随地在线写代码,无需复杂配置,专注于开发和学习。(PS:毕竟是免费公共的服务器,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)

免费公益MYSQL(https://docs.ltpp.vip/LTPP-SHARE/mysql.html

        作为一名开发者或学生,您是否常常为数据库环境的搭建而烦恼?是否因为预算有限而无法使用高性能的数据库服务?现在,有一款免费的MySQL服务器,专为开发者和学生量身打造,让你轻松无忧地进行开发和学习!内置在线phpmyadmin管理面板,方便用户查看数据。(PS:毕竟是免费公共的MYSQL,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)

免费在线WEB代码编辑器(https://docs.ltpp.vip/LTPP-WEB-IDE/

        无论你是开发者还是学生,编程环境的搭建和管理可能会占用你宝贵的时间和精力。现在,有一款强大的免费在线代码编辑器,支持多种编程语言,让您可以随时随地编写、调试和运行代码,提升编程效率,专注于创意和开发。

免费二维码生成器(https://docs.ltpp.vip/LTPP-QRCODE/

        无论是企业宣传、活动推广,还是个人信息分享,二维码都是一种快速、高效的信息传递方式。现在,有一款功能强大的二维码生成器,不仅易于使用,还具备多种便捷功能,帮助您更轻松地生成和管理二维码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WA-自动机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值