求c++大神帮忙解决这道期末考试题 10

学分管理总体需求假设每位学生必须完成基础课50学分,专业课50学分,选修课24学分,人文类课程8学分,实践性课程20学分才能够毕业。因此,在管理学分时,要考虑每个学分所属... 学分管理

总体需求

假设每位学生必须完成基础课50学分,专业课50学分,选修课24学分,人文类课程8学分,实践性课程20学分才能够毕业。因此,在管理学分时,要考虑每个学分所属于的课程类别

功能需求

1) 能够通过键盘输入某位学生的学分

2) 给定学号,显示某位学生的学分完成情况

3) 给定某个班级的班号,按学分降序显示该班所有学生学分完成情况

4) 给定某位学生的学号,修改该学生的学分信息

5) 按照某类课程的学分高低进行排序

用户界面

输入: 程序正常运行后,屏幕上显示一个文字菜单(根据序号选定相应的操作项目),当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。

输出: 1) 应用程序正常运行后,要在屏幕上显示一个文字菜单

2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等

提示与参考

1)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。

2)设计一个结构类型和一维数组,用来保存学分信息。

3)采用文件保存数据, 关于文件的读写方法请参见教材的“文件”章节。
展开
 我来答
weixyc
2012-12-16 · TA获得超过1129个赞
知道小有建树答主
回答量:763
采纳率:100%
帮助的人:491万
展开全部
闲着无聊帮你写写
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<cstdlib>
#include<conio.h>
#include<algorithm>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::ifstream;
using std::ofstream;
int menu();//菜单函数
int enter();//录入学生学分
int printWithID();//根据学号打印学分
int printWithCls();//根据班级打印学分
int reviseWithID();//根据学号修改学分
void sortWithCourse();//根据课程分类排序
void import();//程序运行时将数据导入容器
void export();//程序结束时将数据导回文件
class Student{
public:
//重载输入操作符
friend ifstream& operator>>(ifstream& in,Student& stu)
{
string id;
string a_cls;
int a_basicSbj,a_major,a_optionCourse,a_humanCourse,a_PracCourse;
in>>id>>a_cls>>a_basicSbj
>>a_major>>a_optionCourse
>>a_humanCourse
>>a_PracCourse;
stu.ID=id;
stu.cls=a_cls;
stu.basicSbj=a_basicSbj;
stu.major=a_major;
stu.optionCourse=a_optionCourse;
stu.humanCourse=a_humanCourse;
stu.PracCourse=a_PracCourse;
return in;
}
//重载输出操作符
friend ofstream& operator<<(ofstream& out,Student& stu)
{
out<<stu.ID<<" "<<stu.cls<<" "<<stu.basicSbj<<" "<<stu.major<<" "
<<stu.optionCourse<<" "
<<stu.humanCourse<<" "<<stu.PracCourse<<" ";
return out;
}
//默认构造函数
Student():
ID(" "),cls(" "),basicSbj(0),major(0),optionCourse(0),humanCourse(0),PracCourse(0)
{}
//带参数构造函数
Student(string& id,string& a_cls,int a_basicSbj,int a_major,
int a_optionCourse,int a_humanCourse,int a_PracCourse):
ID(id),cls(a_cls),basicSbj(a_basicSbj),major(a_major),
optionCourse(a_optionCourse),humanCourse(a_humanCourse),
PracCourse(a_PracCourse),total(basicSbj+major+optionCourse+humanCourse+PracCourse)
{}
/*
*获取学生学分信息
*/
string getID()
{
return ID;
}
string getCls()
{
return cls;
}
int getBasicSbj()
{
return basicSbj;
}
int getMajor()
{
return major;
}
int getOptionCourse()
{
return optionCourse;
}
int getHumanCourse()
{
return humanCourse;
}
int getPracCourse()
{
return PracCourse;
}
int getTotal()
{
return total;
}
/*
*设置学生学分信息
*/
void setBasicSbj(int a_basicSbj)
{
basicSbj=a_basicSbj;
}
void setMajor(int a_major)
{
major=a_major;
}
void setOptionCourse(int a_optionCourse)
{
optionCourse=a_optionCourse;
}
void setHumanCourse(int a_humanCourse)
{
humanCourse=a_humanCourse;
}
void setPracCourse(int a_PracCourse)
{
PracCourse=a_PracCourse;
}
private:
string ID;//学号
string cls;//班级
int basicSbj;//基础课
int major;//专业课
int optionCourse;//选修课
int humanCourse;//人文课
int PracCourse;//实践性课
int total;
};
std::vector<Student>vec;//全局容器用于存放从文件读入的数据
/*
*基于学生不同课程的谓词函数
*/
bool cmp_total(Student& , Student&);
bool cmp_basicSbj(Student& , Student&);
bool cmp_major(Student& , Student&);
bool cmp_optionCourse(Student&,Student&);
bool cmp_humanCourse(Student& , Student&);
bool cmp_PracCourse(Student& , Student&);
//主程序
int main()
{
import();
while(menu());//如果menu返回1则表明用户希望回到主菜单
export();
return 0;
}
int menu()
{
char select;
system("cls");//清屏
cout<<"请选择相应的操作号!\n";
cout<<"======================================="<<endl;
cout<<"|学分管理系统 |"<<endl;
cout<<"======================================="<<endl;
cout<<"|1. 录入学分 |"<<endl;
cout<<"|2. 根据学号显示学分 |"<<endl;
cout<<"|3. 根据班级显示学分 |"<<endl;
cout<<"|4. 根据学号修改学分 |"<<endl;
cout<<"|5. 根据课程分类排序 |"<<endl;
cout<<"======================================="<<endl;
cout<<"可按任意其他键退出系统!"<<endl;
select=getch();
switch(select)
{
case '1':
return enter();
case '2':
return printWithID();
case '3':
return printWithCls();
case '4':
return reviseWithID();
case '5':
sortWithCourse();
break;
default:
return 0;
}
return 0;
}
int enter()
{
int a_basicSbj,a_major,a_optionCourse,a_humCourse,a_PracCourse;
string id;
string a_cls;
char select;
system("cls");//清屏
cout<<"请输入学生一下信息..."<<endl;
cout<<"================================================================"<<endl;
cout<<"| 学号 | 班级 | 基础课 | 专业课 | 选修课 | 人文课 | 实践性课 |"<<endl;
cout<<"================================================================"<<endl;
cout<<"以0结束输入..."<<endl;
while(1)
{
cin>>id;
if(id=="0")//若学号为0则结束输入
break;
cin>>a_cls>>a_basicSbj
>>a_major>>a_optionCourse
>>a_humCourse
>>a_PracCourse;
Student stu(id,a_cls,a_basicSbj,a_major,a_optionCourse,a_humCourse,a_PracCourse);
vec.push_back(stu);
}
cout<<"返回主菜单请按y 退出程序请按其他任意键..."<<endl;
if((select=getch())=='y')
return 1;
else
return 0;
}
int printWithID()
{
string id;
char select;
std::vector<Student>::iterator it;
system("cls");
cout<<"请输入要显示的学生学号<以0结束操作>"<<endl;
while(1)
{
cin>>id;
if(id=="0")
break;
for(it=vec.begin();it!=vec.end();++it)
{
if((it->getID())==id)
{
cout<<"学号:"<<it->getID()<<endl;
cout<<"班级:"<<it->getCls()<<endl;
cout<<"基础课:"<<it->getBasicSbj()<<endl;
cout<<"专业课:"<<it->getMajor()<<endl;
cout<<"选修课:"<<it->getOptionCourse()<<endl;
cout<<"人文课:"<<it->getHumanCourse()<<'\n'<<endl;
break;
}
}
}
cout<<"\n返回主菜单请按y 退出程序请按其他任意键..."<<endl;
if((select=getch())=='y')
return 1;
else
return 0;
}
int printWithCls()
{
string a_cls;
char select;
std::vector<Student>::iterator it;
std::vector<Student>vec_temp;
system("cls");
cout<<"请输入要显示的班级<以0结束操作>"<<endl;
cin>>a_cls;
if(a_cls=="0")
return 1;
cout<<a_cls+"班学生学分情况如下:"<<endl;
cout<<"========================================================="<<endl;
cout<<"| 学号 | 基础课 | 专业课 | 选修课 | 人文课 | 实践性课 |"<<endl;
cout<<"========================================================="<<endl;
while(1)
{
vec_temp.clear();//清空容器
//将待显示的班级学生分离出来
for(it=vec.begin();it!=vec.end();++it)
{
if((it->getCls())==a_cls)
{
vec_temp.push_back(*it);
}
}
//对待显示的班级学生学分按降序排序
std::sort(vec_temp.begin(),vec_temp.end(),cmp_total);
//显示该班级学生学分情况
for(it=vec_temp.begin();it!=vec_temp.end();++it)
{
cout<<it->getID()<<"";
cout<<it->getBasicSbj()<<"";
cout<<it->getMajor()<<"";
cout<<it->getOptionCourse()<<"";
cout<<it->getHumanCourse()<<"";
cout<<it->getPracCourse()<<endl;
}
cin>>a_cls;
if(a_cls=="0")
break;
}
cout<<"\n返回主菜单请按y 退出程序请按其他任意键..."<<endl;
if((select=getch())=='y')
return 1;
else
return 0;
}
int reviseWithID()
{
string id;
char select;
int a_basicSbj,a_major,a_optionCourse,a_humanCourse,a_PracCourse;
std::vector<Student>::iterator it;
system("cls");
cout<<"请输入需要修改的学生学号<以0结束操作>"<<endl;
cin>>id;
if(id=="0")
return 1;
while(1)
{
for(it=vec.begin();it!=vec.end();++it)
{
if((it->getID())==id)
{
cout<<"请输入修改的学分情况(基础课 专业课 选修课 人文类课程 实践性课程)..."<<endl;
cin>>a_basicSbj
>>a_major>>a_optionCourse
>>a_humanCourse
>>a_PracCourse;
it->setBasicSbj(a_basicSbj);
it->setMajor(a_major);
it->setOptionCourse(a_optionCourse);
it->setHumanCourse(a_humanCourse);
it->setPracCourse(a_PracCourse);
break;
}
}
if(it==vec.end())
cout<<"查无此人 请检查您的输入..."<<endl;
cin>>id;
if(id=="0")
break;
}
cout<<"\n返回主菜单请按y 退出程序请按其他任意键..."<<endl;
if((select=getch())=='y')
return 1;
else
return 0;
}
void sortWithCourse()
{
char select;
std::vector<Student>::iterator it;
system("cls");
cout<<"请选择按哪个课程进行排序输出!"<<endl;
cout<<"============================"<<endl;
cout<<"|1. 基础课 |"<<endl;
cout<<"|2. 专业课 |"<<endl;
cout<<"|3. 选修课 |"<<endl;
cout<<"|4. 人文类课程 |"<<endl;
cout<<"|5. 实践性课 |"<<endl;
cout<<"============================"<<endl;
select=getch();
switch(select)
{
case '1':
std::sort(vec.begin(),vec.end(),cmp_basicSbj);
break;
case '2':
std::sort(vec.begin(),vec.end(),cmp_major);
break;
case '3':
std::sort(vec.begin(),vec.end(),cmp_optionCourse);
break;
case '4':
std::sort(vec.begin(),vec.end(),cmp_humanCourse);
break;
case '5':
std::sort(vec.begin(),vec.end(),cmp_PracCourse);
break;
}
cout<<"================================================================"<<endl;
cout<<"| 学号 | 班级 | 基础课 | 专业课 | 选修课 | 人文课 | 实践性课 |"<<endl;
cout<<"================================================================"<<endl;
for(it=vec.begin();it!=vec.end();++it)
{
cout<<it->getID()<<"";
cout<<it->getCls()<<"";
cout<<it->getBasicSbj()<<"";
cout<<it->getMajor()<<"";
cout<<it->getOptionCourse()<<"";
cout<<it->getHumanCourse()<<"";
cout<<it->getPracCourse()<<endl;
}
}
void import()
{
ifstream in_file("E:\\dat.txt",ifstream::in);
Student stu;
while(in_file>>stu)
{
vec.push_back(stu);
}
in_file.close();
}
void export()
{
ofstream out_file("E:\\dat.txt",ofstream::out);
std::vector<Student>::iterator it;
for(it=vec.begin();it!=vec.end();++it)
{
out_file<<*it<<'\n';
}
out_file.close();
}
bool cmp_total(Student& stu1,Student& stu2)
{
return stu1.getTotal()>stu2.getTotal();
}
bool cmp_basicSbj(Student& stu1,Student& stu2)
{
return stu1.getBasicSbj()>stu2.getBasicSbj();
}
bool cmp_major(Student& stu1,Student& stu2)
{
return stu1.getMajor()>stu2.getMajor();
}
bool cmp_optionCourse(Student& stu1,Student& stu2)
{
return stu1.getOptionCourse()>stu2.getOptionCourse();
}
bool cmp_humanCourse(Student& stu1,Student& stu2)
{
return stu1.getHumanCourse()>stu2.getHumanCourse();
}
bool cmp_PracCourse(Student& stu1,Student& stu2)
{
return stu1.getPracCourse()>stu2.getPracCourse();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式