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