c语言问题100积分奖励
//学生信息管理系统。cpp:定义控制台应用程序的入口点。
//
#包含" stdafx.h "
# include & ltiostream & gt
# include & ltfstream & gt
# include & lt字符串& gt
# include & ltsstream & gt
# include & ltiomanip & gt
# include & ltvector & gt
# include & lt算法& gt
使用命名空间std
////////////////////////////////////////////////////////////////////////
班级学生{
string _ ID
字符串SequenceNumber
字符串名称;
int math_score,phys_score,math1_score,comp_score,engl _ score
公共:
弦与弦。ID();
弦与弦。SN();
弦与弦。name();
int & amp运算符[](int index);//运算符[]重载
};
//********************************
弦与弦。CStudent::ID(){
return _ ID
}
弦与弦。CStudent::SN(){
返回序列号;
}
弦与弦。CStudent::Name(){
返回名称;
}
int & ampc student::operator[](int index){
开关(索引)
{
案例0:
返回math _ score
打破;
案例1:
返回phys _ score
打破;
案例二:
return math 1 _ score;
打破;
案例三:
返回comp _ score
打破;
案例4:
返回engl _ score
打破;
默认值:
抛出“你必须给出不大于4且不小于0的指数!”;
打破;
}
}
/////////////////////////////////////////////////////////////////////////////
类别CCredit{
double math,phys,math1,comp,engl
公共:
CCredit();
双& amp运算符[](int index);//运算符[]重载
};
//**************************************************
CCredit::CCredit():math(7.0),phys(4.0),comp(4.0),math1(4.0),engl(6.0){}
双& ampCCredit::operator[](int index){
开关(索引)
{
案例0:
返回数学;
打破;
案例1:
返回phys
打破;
案例二:
return math 1;
打破;
案例三:
退货补偿;
打破;
案例4:
返回英语;
打破;
默认值:
抛出“你必须给出不大于4且不小于0的指数!”;
打破;
}
}
/////////////////////////////////////////////////////////////////////////////
班级管理学生{
受保护:
静态向量& lt学生& gt数据;//存储学生原始成绩。
void on brower();//浏览数据
void OnFind();//查找数据
void on invalidateinput(char *);//输入错误提示
void OnAddData();//添加数据
bool on save();//保存
cmanagementstudent * parent;
公共:
静态字符串标题[8];//课程名称
静态int wid[8];//打印宽度
cmanagementstudent(cmanagementstudent * p = 0):parent(p){ }
bool initial data();//将数据读入内存
虚拟void ShowMenu();//显示菜单
虚拟void do event(int ID);//响应用户输入
};
cmanagementstudent * pBase;
牡蛎&;操作员& lt& lt(ostream & ampos,const CStudent & ampst)
{
CStudent obj = st
os & lt& ltsetw(cmanagementstudent::wid[0])& lt;& ltobj。ID();
os & lt& ltsetw(cmanagementstudent::wid[1])& lt;& ltobj。SN();
os & lt& ltsetw(cmanagementstudent::wid[2])& lt;& ltobj。name();
os & lt& ltsetw(cmanagementstudent::wid[3])& lt;& ltobj[0];
os & lt& ltsetw(cmanagementstudent::wid[4])& lt;& ltobj[1];
os & lt& ltsetw(cmanagementstudent::wid[5])& lt;& ltobj[2];
os & lt& ltsetw(cmanagementstudent::wid[6])& lt;& ltobj[3];
os & lt& ltsetw(cmanagementstudent::wid[7])& lt;& ltobj[4];
返回OS;
}
///////////////////////////////////////////////////////////
向量& lt学生& gtcmanagement student::data;
string cmanagement student::title[8]= { "学号"、"序号"、"姓名"、"高等数学"、"普通物理"、"离散数学"、"计算机"、"英语" };
int cmanagement student::wid[8]= { 12,6,8,10,10,10,8,6 };
void cmanagementstudent::ShowMenu(){
cout & lt& ltendl
cout & lt& lt“* * * * * * * * * * * * * * * * * * * *学生成绩管理系统* * * * * * * * * * * * * * \ n”;
cout & lt& lt”1预览\t2查找\t3添加\t4保存\t0退出\ n”;
cout & lt& lt“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”;
}
void cmanagementstudent::OnInvalidateInput(char * str){
cout & lt& ltstr & lt& ltendl
}
boolcmanagestudent::initial data()//用于初始化的变量数据。
{
ifstream fin(" score . txt ");
if(fin.fail()){
cout & lt& lt"找不到数据文件"
返回false
}
字符串s;//定义一个读取文件每一行的string对象。
getline(fin,s);//看标题行,没必要。
while(getline(fin,s)){
istringstream istr
学生街;
istr & gt& gtST . ID();
istr & gt& gtST . SN();
istr & gt& gt圣名();
for(int I = 0;我& lt5;i++)
istr & gt& gtST[I];
data . push _ back(ST);
}
fin . close();
返回true
}
void cmanagementstudent::OnAddData()
{
char ch
if(data.size () == 0)
{
做
{
学生街;
cout & lt& lt"请输入学生姓名:";
CIN & gt;& gt圣名()
cout & lt& lt"请输入学号:";
CIN & gt;& gtST . ID();
ST . SN()= 1;
for(int I = 0;我& lt5;i++)
{
cout & lt& lt"请输入"
CIN & gt;& gtST[I];
}
cout & lt& lt“输入是否正确?y表示肯定;r表示重新输入;n表示放弃\ n ";
CIN & gt;& gtch;
if(ch=='y ')
data . push _ back(ST);
} while(ch = = ' r ');
}
其他
{
做{
学生街;
ST . ID()= data[data . size()-1]。ID();
st.ID()[st.ID()。size()-1]++;
ST . SN()= data[data . size()-1]。SN();
st.SN()[st.SN()。size()-1]++;
cout & lt& lt"请输入学生姓名:";
CIN & gt;& gt圣名();
for(int I = 0;我& lt5;i++)
{
cout & lt& lt"请输入"
CIN & gt;& gtST[I];
}
cout & lt& lt“输入是否正确?y表示肯定;r表示重新输入;n表示放弃\ n ";
CIN & gt;& gtch;
if(ch=='y ')
data . push _ back(ST);
} while(ch = = ' r ');
}
}
bool cmanagementstudent::on save()
{
of stream fout(" score . txt ");
if(fout.fail()){
cout & lt& lt"无法保存"
返回false
}
for(int I = 0;我& lt8;i++)
fout & lt& lttitle[I]& lt;& lt" ";
fout & lt& ltendl
向量& lt学生& gt*迭代器it = data . begin();
而(它!=data.end()){
CStudent st = * it
fout & lt& ltST . ID();
fout & lt& lt" " " & lt& ltST . SN();
fout & lt& lt" " " & lt& lt圣名();
for(int I = 0;我& lt5;i++)
fout & lt& lt" " " & lt& ltST[I];
fout & lt& ltendl
it++;
}
fout . close();
返回true
}
void cmanagementstudent::do event(int ID){
开关(ID)
{
案例1:
on brower();
打破;
案例二:
OnFind();
打破;
案例三:
OnAddData();
打破;
案例4:
on save();
打破;
案例0:
cout & lt& lt”再见\ n”;
退出(0);
默认值:
OnInvalidateInput(" input 1,2,3,4,0 ");
打破;
}
}
/////////////////////////////////////////////////////////////
类CFind:public cmanagement student {
void on find name();
void onfindhhighscore();
void OnFindLowScore();
公共:
CFind(cmanagementstudent * p = 0):cmanagementstudent(p){ }
void ShowMenu();//显示菜单
void do event(int ID);//响应用户输入
};
//////////////////////////////////////////////////////////
void CFind::ShowMenu(){
cout & lt& ltendl
cout & lt& lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *";
cout & lt& lt”1按名称查找\t2查找高分\t3查找低分\t0退出\ n”;
cout & lt& lt“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”;
}
void CFind::DoEvent(int ID)
{
开关(ID)
{
案例1:
on find name();
打破;
案例二:
onfindhhighscore();
打破;
案例三:
OnFindLowScore();
打破;
案例0:
cout & lt& lt”退出查找菜单\ n”;
pBase = parent
删除这个;
打破;
默认值:
OnInvalidateInput(" input 1,2,3,0 ");
打破;
}
}
void CFind::OnFindName(){
字符串名称;
cout & lt& lt"输入您要查找的学生的姓名:";
CIN & gt;& gt姓名;
向量& lt学生& gt*迭代器it = data . begin();
字符串tmp
bool first = true
而(它!=data.end()){
如果((*它)。Name()==name)
{
如果(第一)
{
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& ltendl
first = false
}
cout & lt& lt(*it)。name()& lt;& ltendl
}
it++;
}
}
void CFind::onfindhhighscore(){
字符串score _ name
cout & lt& lt”输入课程名称:“;
CIN & gt;& gtscore _ name
int num=0,index = 3;
while(index & lt;8)//计算用户进入了哪门课程。
{
if(标题[索引]= =分数_名称)
打破;
index++;
}
向量& lt学生& gt*迭代器it = data . begin();
if(index & gt;=8){
cout & lt& lt”课程名称不正确\ n”;
返回;
}
int分数;
cout & lt& lt"输入分数:";
CIN & gt;& gt分数;
bool first = true
而(它!=data.end()){
if((* it)[index-3]& gt;=分数){
如果(第一个){
first = false
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& ltendl
}
cout & lt& lt* it & lt& ltendl
num++;
}
it++;
}
cout & lt& lt" \n***已经"
}
void CFind::OnFindLowScore()
{
字符串score _ name
cout & lt& lt”输入课程名称:“;
CIN & gt;& gtscore _ name
int num=0,index = 3;
while(index & lt;8)//计算用户进入了哪门课程。
{
if(标题[索引]= =分数_名称)
打破;
index++;
}
向量& lt学生& gt*迭代器it = data . begin();
if(index & gt;=8){
cout & lt& lt”课程名称不正确\ n”;
返回;
}
int分数;
cout & lt& lt"输入分数:";
CIN & gt;& gt分数;
bool first = true
而(它!=data.end())
{
if((* it)[index-3]& lt;=分数)
{
如果(第一个){
first = false
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];//输出每个符合条件的学生的信息。
cout & lt& ltendl
}
cout & lt& lt* it & lt& ltendl
num++;
}
it++;
}
cout & lt& lt" \n***已经"
}
/////////////////////////////////////////////
class c brower:public cmanagement student {
void OnOrigin();
void on average();
void OnScoreAnasys();
void on credit();
公共:
CB rower(cmanagementstudent * p = 0):cmanagementstudent(p){ }
void ShowMenu();//显示菜单
void do event(int ID);//响应用户输入
};
//////////////////////////////////////////////////////////////
void CBrower::ShowMenu(){
cout & lt& ltendl
cout & lt& lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cout & lt& lt”1原始成绩\t2平均成绩\t3成绩分析\t4学分\t0退出\ n”;
cout & lt& lt“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”;
}
void CBrower::DoEvent(int ID){
开关(ID){
案例1:
OnOrigin();
打破;
案例二:
on average();
打破;
案例三:
OnScoreAnasys();
打破;
案例4:
OnCredit();
打破;
案例0:
cout & lt& lt”退出预览菜单\ n”;
pBase = parent
删除这个;
打破;
默认值:
OnInvalidateInput ("input、、、");
打破;
}
}
void CBrower::OnOrigin(){
向量& lt学生& gt*迭代器it = data . begin();
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& ltendl
而(它!=data.end()){
cout & lt& lt* it & lt& ltendl
it++;
}
}
void CBrower::OnAverage()
{
向量& lt学生& gt*迭代器it = data . begin();
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& lt”平均分”;
而(它!= data.end())
{
double sum = 0;
for(int I = 3;我& lt8;i++)
{
sum+=(* it)[I-3];
}
cout & lt& lt* it & lt& lt" " " & lt& ltsum/5 & lt;& ltendl
it++;
}
cout & lt& ltendl
}
void CBrower::OnScoreAnasys()
{
向量& lt学生& gt*迭代器it = data . begin();
cout & lt& lt“* * * * * * * * * * * * * *个人成绩分析* * * * * * * * * * * * \ n”;
for(int I = 0;我& lt3;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& ltendl
而(它!= data.end())
{
cout & lt& lt(*it)。ID()& lt;& lt" ";
cout & lt& lt(*it)。SN()& lt;& lt" ";
cout & lt& lt(*it)。name()& lt;& lt" " " & lt& ltendl
int count _ good = 0;
int count _ bad = 0;
cout & lt& lt“优异的成绩”:
for(int I = 3;我& lt8;i++)
{
if((* it)[I-3]& gt;= 90)
{
cout & lt& lttitle[I]& lt;& lt":" & lt& lt(* it)[I-3]& lt;& lt" ";
count _ good++;
}
}
cout & lt& lt" \n一个* * * "
cout & lt& lt“不及格”:
for(int I = 3;我& lt8;i++)
{
if((* it)[I-3]& lt;= 60)
{
cout & lt& lttitle[I]& lt;& lt":" & lt& lt(* it)[I-3]& lt;& lt" ";
count _ bad++;
}
}
cout & lt& lt" \n一个* * * "
it++;
cout & lt& lt“-”& lt;& ltendl
}
}
void CBrower::OnCredit()
{
向量& lt学生& gt*迭代器it = data . begin();
for(int I = 0;我& lt8;i++)
cout & lt& ltsetw(wid[I])& lt;& lt标题[I];
cout & lt& ltendl
而(它!=data.end())
{
CCredit信用;
cout & lt& ltsetw(wid[0])& lt;& lt(*it)。ID()& lt;& ltsetw(wid[1]);
cout & lt& lt(*it)。SN()& lt;& lt" ";
cout & lt& ltsetw(wid[1])& lt;& lt(*it)。name()& lt;& ltsetw(wid[1]);
for(int I = 0;我& lt5;i++)
{
if((* it)[I]& gt;= 60)
cout & lt& ltcredit[I]& lt;& ltsetw(wid[I+4]);
其他
cout & lt& lt" 0 " & lt& ltsetw(wid[I+4]);
}
it++;
cout & lt& ltendl
}
}
void cmanagementstudent::on brower(){
pBase = new c brower(pBase);
}
void cmanagementstudent::OnFind()
{
pBase = new CFind(pBase);
}
//////////////////////////////////////////////
int main()
{
pBase = new cmanagementstudent;
if(pBase->;InitialData()){
int ID
while(1){
pBase->;ShowMenu();
CIN & gt;& gtID;
pBase->;do event(ID);
}
}
删除pBase
返回0;
}
你需要设置一个socre.txt来初步存储学生信息。
让我给你看一个例子。
学号姓名高等数学普通物理离散数学计算机英语
200611002陈小宝
200611003 3陈大龙81 83 97 85 73
200611004 4陈文83 49 79 82 80
200611005 5程正兴79 80 91 77 76
不懂可以问我。