课程设计

#include<iostream>


#include<iomanip>


#include<fstream>


#include<string>


using namespace std;


#define MaxSize 100


struct student


{


int num;


char nam[20];


float chinese;


float math;


float english;


};


class SeqList


{


private:


student stu[MaxSize];


int size;


public:


SeqList(){size=0;}


~SeqList(){}


    


void load(void);  


void add();    //增加学生信息


student del(int number); //删除指定学号的学生信息


void changeInfo(int number);   //修改指定学号的学生信息


     void search(int number)const;    //按学号查找学生信息


     void search(char name[20])const;    //按姓名查找学生信息


void tj(string subj,float low,float high)const;    //按指定范围进行成绩统计


void sort(string subj);   //按指定学科成绩排序(从高到低)


void displayall();   //显示所有学生的信息


     void save();   //将学生信息保存到myList.dat文件中


};


void SeqList::load(void)


{


size=0;


ifstream infile;


infile.open("myList.dat",ios::binary);


if(infile)


{


   infile.read((char*)&size,sizeof(int));


   infile.seekg(sizeof(int));


   for(int i=0;i<size;i++)


   {


    infile.read((char*)&stu[i],sizeof(student));


   }


   infile.close();


}


else


{


        cout<<endl<<"   !! ERROR:Cannot open file 'myList.dat'. "<<endl;


} 


}


void SeqList::add()


{


cout<<"请依次输入该学生的学号,姓名以及语文、数学、英语三科成绩:"<<endl;


cin>>stu[size].num;


cin>>stu[size].nam;


cin>>stu[size].chinese;


cin>>stu[size].math;


cin>>stu[size].english;


size++;


}


student SeqList::del(int number)


{


student temp;


for(int i=0;i<size;i++)


{


   if(stu[i].num==number)


   {


    temp=stu[i];


    for(int j=i;j<size-1;j++)


     stu[j]=stu[j+1];


    size--;


    break;


   }


}


return temp;


}


void SeqList::changeInfo(int number)


{


for(int i=0;i<size;i++)


{


   if(stu[i].num==number)


   {


    cout<<"请选择要修改的选项:1-学号,2-姓名,3-语文成绩,4-数学成绩,5-英语成绩"<<endl;


    int input;cin>>input;


    switch(input)


    {


    case 1:cin>>stu[i].num;break;


    case 2:cin>>stu[i].nam;break;


    case 3:cin>>stu[i].chinese;break;


    case 4:cin>>stu[i].math;break;


    case 5:cin>>stu[i].english;break;


    }


    break;


   }


}


}


void SeqList::search(int number)const


{


for(int i=0;i<size;i++)


{


         if(stu[i].num==number)


   {


    cout<<stu[i].num<<"   ";


          cout<<stu[i].nam<<"   ";


          cout<<stu[i].chinese<<"   ";


          cout<<stu[i].math<<"   ";


          cout<<stu[i].english<<endl;


    break;


   }


}


if(i>=size) cout<<"无此学生信息!"<<endl;


}


void SeqList::search(char name[20])const


{


int f=0;


for(int i=0;i<size;i++)


{


         if(strcmp(stu[i].nam,name)==0)


   {


    f=1;


    cout<<stu[i].num<<"   ";


          cout<<stu[i].nam<<"   ";


          cout<<stu[i].chinese<<"   ";


          cout<<stu[i].math<<"   ";


          cout<<stu[i].english<<endl;


    break;


   }


}


if(f==0) cout<<"无此学生信息!"<<endl;


}


void SeqList::tj(string subj,float low,float high)const


{


int count=0;


if(subj=="chinese")


{


   for(int i=0;i<size;i++)


    if(stu[i].chinese>low&&stu[i].chinese<high) count++;


}


else if(subj=="math")


{


   for(int i=0;i<size;i++)


    if(stu[i].math>low&&stu[i].math<high) count++;


}


else if(subj=="english")


{


   for(int i=0;i<size;i++)


    if(stu[i].english>low&&stu[i].english<high) count++;


}


cout<<subj<<low<<"-"<<high<<"分的共有"<<count<<"人"<<endl;


}


void SeqList::sort(string subj)


{


student temp;


if(subj=="chinese")


{


   for(int i=1;i<size;i++)


    for(int j=0;j<size-i;j++)


    {


     if(stu[j].chinese<stu[j+1].chinese)


     {


      temp=stu[j];


      stu[j]=stu[j+1];


      stu[j+1]=temp;


     }


    }


   cout<<"按语文成绩排名如下:"<<endl;


}


else if(subj=="math")


{


   for(int i=1;i<size;i++)


    for(int j=0;j<size-i;j++)


    {


     if(stu[j].math<stu[j+1].math)


     {


      temp=stu[j];


      stu[j]=stu[j+1];


      stu[j+1]=temp;


     }


    }


   cout<<"按数学成绩排名如下:"<<endl;


}


else if(subj=="english")


{


   for(int i=1;i<size;i++)


    for(int j=0;j<size-i;j++)


    {


     if(stu[j].english<stu[j+1].english)


     {


      temp=stu[j];


      stu[j]=stu[j+1];


      stu[j+1]=temp;


     }


    }


   cout<<"按英语成绩排名如下:"<<endl;


}


cout<<setw(8)<<setiosflags(ios::left)<<"学号";


cout<<setw(15)<<setiosflags(ios::left)<<"姓名";


cout<<setw(8)<<setiosflags(ios::left)<<"语文";


cout<<setw(8)<<setiosflags(ios::left)<<"数学";


cout<<setw(8)<<setiosflags(ios::left)<<"英语"<<endl;


for(int i=0;i<size;i++)


{


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].num;


   cout<<setw(15)<<setiosflags(ios::left)<<stu[i].nam;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].chinese;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].math;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].english<<endl;


}


}


void SeqList::displayall()


{


cout<<setw(8)<<setiosflags(ios::left)<<"学号";


cout<<setw(15)<<setiosflags(ios::left)<<"姓名";


cout<<setw(8)<<setiosflags(ios::left)<<"语文";


cout<<setw(8)<<setiosflags(ios::left)<<"数学";


cout<<setw(8)<<setiosflags(ios::left)<<"英语"<<endl;


for(int i=0;i<size;i++)


{


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].num;


   cout<<setw(15)<<setiosflags(ios::left)<<stu[i].nam;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].chinese;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].math;


   cout<<setw(8)<<setiosflags(ios::left)<<stu[i].english<<endl;


}


}


void SeqList::save()


{


ofstream myoutfile;    //定义输出文件


myoutfile.open("myList.dat",ios::trunc|ios::binary);


if(myoutfile)


{


   myoutfile.write((char *)&size,sizeof(int));


   myoutfile.seekp(sizeof(int));


   for(int i=0;i<size;i++) 


    myoutfile.write((char *)&stu[i],sizeof(student));


   myoutfile.close();


}


else


{


   cout<<endl<<"   !! ERROR: create file 'myList.dat' error. "<<endl;


   exit(0);


}    


}


void main()


{


SeqList List;


List.load();


List.displayall();


cout<<"*********************学生成绩查询系统*****************"<<endl;


cout<<"操作提示: \n\t\t\t1-添加学生信息;\n\t\t\t2-删除学生信息;\n\t\t\t3-修改学生信息;\n\t\t\t4-查询学生信息;\n\t\t\t5-成绩统计;\n\t\t\t6-单科成绩排序;\n\t\t\t7-显示所有学生信息;\n\t\t\t8-退出"<<endl;


float low,high;


int enter,number;


string subj;


char name[20];


cin>>enter;


for(;;)


{


   switch (enter)


   {


   case 1:List.add();break;


   case 2:cout<<"请输入学生学号:"<<endl;cin>>number;List.del(number);break;


   case 3:cout<<"请输入学生学号:"<<endl;cin>>number;List.changeInfo(number);break;


   case 4:cout<<"1-按学号查询;2-按姓名查询"<<endl;cin>>enter;


    if(enter==1)


    {


     cout<<"请输入学生学号:"<<endl;cin>>number;List.search(number);


    }


    else if(enter==2)


    {


     cout<<"请输入学生姓名:"<<endl;cin>>name;List.search(name);


    }


    break;


   case 5:cout<<"请输入统计科目及分数范围:"<<endl;cin>>subj>>low>>high;


    List.tj(subj,low,high);break;


   case 6:cout<<"请输入学科名称:"<<endl;cin>>subj;List.sort(subj);break;


   case 7:List.displayall();break;


   case 8:List.save();


    exit(0);


   }


   cout<<"请继续选择所需操作!"<<endl;


   cin>>enter;


}


}













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值