• C++实现成绩管理模拟系统


    C++实现基本的成绩管理系统

    需求:

    1-学生姓名等基本字段

    2-学生成绩字段

    3-实现成绩修改和基本统计输出

      1 #include<iostream>
      2 #include<windows.h>
      3 #include<fstream> 
      4 #include<cstring> 
      5 using namespace std;
      6 const int MAX=100;
      7 const char* savefile="info.dat"; //文件保存地址 
      8 class student//先定义一个学生信息类,内部的成员变量是公有的。
      9 {public:
     10     char name[30];//学生姓名 
     11     int stu_no;//学号,只能输入数字 
     12     double c_score;//分数,双浮点类型 
     13 };
     14 class ManageStu
     15 {public:
     16     ManageStu();//初始化 
     17     ~ManageStu();
     18     void controlsystem();
     19 private:
     20         void menu();//菜单 
     21         void input();//输入学生成绩 
     22         void displayone(int i,int style=0);
     23         void search();//按照学号和姓名查询成绩 
     24         void ModifyScore() ;//修改学生成绩 
     25         void waitkey();//等待输入按键函数 
     26         void statistics();//统计,最低成绩,最高成绩,总成绩和平均成绩 
     27         void Initial();//从数据记录中下载数据 
     28         void Save();//将数据上传到数据库中 
     29         void displayarea(int low,int high);
     30         void print();//显示输出
     31         student stu[MAX];//最多放MAX的个学生
     32         int N;//目前学生人数 
     33 };
     34 //主菜单 
     35 void ManageStu::menu()
     36 {
     37     system("cls");   
     38    cout<<endl;
     39     cout<<"		 ********************主菜单********************"<<endl;
     40     cout<<"		||              1-输入学生成绩                ||"<<endl;
     41     cout<<endl;
     42     cout<<"		||              2-查询学生成绩                ||"<<endl;
     43     cout<<endl;
     44     cout<<"		||              3-修改学生成绩                ||"<<endl;
     45     cout<<endl;
     46     cout<<"		||              4-学生成绩分段显示            ||" <<endl;
     47     cout<<endl;
     48     cout<<"		||              5-成绩统计信息                ||" <<endl;
     49     cout<<endl;
     50     cout<<"		||               0-退出                       ||"<<endl;
     51     cout<<"		 **********************************************" <<endl;
     52     cout<<"选择操作(0-5):"; 
     53 }
     54 //总控制函数,在里面将所有的功能选择使用 
     55 void ManageStu::controlsystem()
     56 {
     57     cout<<endl;
     58     cout<<"===============================================================================
    "<<endl; 
     59     cout<<"
    
                欢迎进入2013级计算机系C++学生成绩管理系统         ";
     60     cout<<endl;
     61     cout<<"
    
                                                                  作者:陈龙
    ";
     62     cout<<"===============================================================================
    "<<endl; 
     63     Sleep(3000) ;
     64     OPEN://本段程序的标签,可以方便循环操作 
     65     menu();//调用菜单 
     66     int cho;//输入调用菜单中的选项 
     67     cin>>cho;
     68     system("cls");//选择相应的操作后,清除屏幕上的其他信息,只显示要操作的信息 
     69     switch(cho)//选择结构,灵活进入各个功能 
     70     {
     71         case 1:input();break;
     72         case 2:search();break;
     73         case 3:ModifyScore();break;
     74         case 4:print();break;
     75         case 5:statistics();break;
     76         case 0:return;//程序结束的地方 
     77         default: goto  OPEN; //输入错误,默认重新开始 
     78     }
     79     goto OPEN;
     80 }
     81 void ManageStu::input()//输入函数实现代码 
     82 {//输入相应的信息 
     83     char conti='Y'; 
     84      do{
     85     cout<<"根据提示输入信息"<<endl;//提示信息 
     86     cout<<"学号:";cin>>stu[N].stu_no;
     87     cout<<"姓名:";cin>>stu[N].name;
     88     cout<<"C++成绩: ";cin>>stu[N].c_score;
     89     cout<<"是否继续输出(y/n): ";cin>>conti; 
     90     N++;
     91     }while(conti=='Y'||conti=='y');//判断是否继续输入     
     92 }
     93 void ManageStu::displayone(int i,int style) 
     94 { 
     95     if(style==0)
     96     {
     97         cout<<"学号:"<<stu[i].stu_no<<endl;
     98         cout<<"姓名:"<<stu[i].name<<endl;
     99         cout<<"C++成绩:" <<stu[i].c_score<<endl;
    100     }
    101     else
    102     {
    103         cout<<"学号:"<<stu[i].stu_no<<"  ";
    104         cout<<"姓名:"<<stu[i].name<<"  ";
    105     cout<<"C++成绩:" <<stu[i].c_score<<endl;
    106     }
    107 }
    108 void ManageStu::search() 
    109 {//查询代码实现 
    110     int choice;
    111     SEAR:{
    112     system("cls");
    113     cout<<"	 *************查询方式***************"<<endl; 
    114     cout<<"	||           1-学号查询             ||"<<endl;
    115     cout<<endl;
    116     cout<<"	||           2-姓名查询             ||"<<endl;
    117     cout<<endl;
    118     cout<<"	||          0-返回上一级菜单        ||"<<endl; 
    119     cout<<"	 ***********************************" <<endl;}
    120     cout<<"选择查询方式(1,2):";cin>>choice;
    121     int result=-1;//保存查找到的信息 
    122     switch(choice)
    123     {
    124         case 1:{
    125             int stuno;
    126             cout<<"输入学号:";cin>>stuno;
    127             for(int i=0;i<N;i++)//遍历查询相符合的信息 
    128             {
    129                 if(stu[i].stu_no==stuno)    
    130                 {
    131                     result=i;//保存到result 
    132                     break;//退出查询 
    133                 }
    134             }
    135             break;}
    136         case 2:{
    137             char name[30];
    138             cout<<"输入姓名:";cin>>name;
    139             for(int i=0;i<N;i++) //遍历查询 
    140             {
    141                 if(!strcmp(stu[i].name,name))
    142                 {
    143                     result=i;
    144                     break;
    145                 }
    146             }
    147             break;
    148         }
    149         case 0: return;
    150         default: goto  SEAR;//选择错误默认返回初始菜单状态 
    151     }
    152     if(result==-1)//如果result的值没有改变说明没有找到 
    153     { 
    154     cout<<"没有符合条件的学生!";
    155     }
    156     else{
    157     cout<<"查询结果:"<<endl;
    158     displayone(result);
    159     }
    160     char ch;
    161     cout<<"是否继续查询(y/n):";cin>> ch;
    162     if(ch=='y'||ch=='Y')goto SEAR;//如果继续查询则返回初始菜单状态 
    163     //否则默认退出本函数 
    164 }
    165 void ManageStu::ModifyScore()
    166 {//修改分数代码实现 
    167     MODI:
    168     int result=-1;//保存查找的结果 
    169     char name[30];
    170     cout<<"输入学生姓名:";cin>>name;
    171     for(int i=0;i<N;i++) 
    172     {
    173         if(!strcmp(stu[i].name,name))
    174         {
    175             result=i;
    176             break;
    177         }
    178     }
    179     if(result==-1)
    180     {
    181         cout<<"没有符合条件的学生"<<endl;
    182     }
    183     else
    184     {
    185         cout<<"查询结果:"<<endl;
    186         displayone(result);
    187         cout<<endl;
    188         cout<<"输入"<<stu[result].name<<"的新成绩";cin>>stu[result].c_score;
    189         cout<<"修改后的信息如下"<<endl; 
    190         displayone(result);
    191         cout<<endl;
    192     }
    193     char ch;
    194     cout<<"是否继续查询修改(y/n):";cin>> ch;
    195     if(ch=='y'||ch=='Y')goto MODI;
    196 }
    197 void ManageStu::waitkey()//等待按键的函数实现代码 
    198 {
    199     cout<<endl<<"按ENTER键退出"<<endl;
    200     getchar();//等待按键,以留在所操作的节面上, 
    201     getchar();//按键后就可以返回主界面 
    202 }
    203 void ManageStu::statistics()//统计学生信息实现代码
    204 { 
    205     if(N==0)
    206     {
    207         cout<<"没有学生信息"<<endl;
    208         waitkey();return;
    209     }
    210     double sum=stu[0].c_score;//保存总分 
    211     int result=0;//保存分数最高者的编号 
    212     int lows=0;//保存分数最低者的编号 
    213     
    214     for(int i=1;i<N;i++)
    215     {
    216         if(stu[i].c_score>stu[result].c_score)
    217         result=i;
    218         else if(stu[i].c_score<stu[result].c_score)
    219         lows=i;
    220         sum+=stu[i].c_score;
    221     }
    222     cout<<"		总成绩是:		"<<sum<<endl;
    223     cout<<"		平均成绩是:		"<<sum/N<<endl;
    224     cout<<endl;
    225     cout<<"=============================================="<<endl;
    226     cout<<"		最高成绩:		"<<endl;
    227     displayone(result) ;
    228     cout<<endl;
    229     cout<<"=============================================="<<endl;
    230     cout<<"		最低成绩:		"<<endl;
    231     displayone(lows);
    232     cout<<endl;
    233     waitkey();//代码作用同上 
    234 }
    235 ManageStu::ManageStu()
    236 {
    237     N=0;//初始化0个学生 
    238     Initial();//调用初始化代码,从文件中下载学生信息 
    239 } 
    240 ManageStu::~ManageStu()
    241 {
    242     Save();//当退出时自动保存到 文件中 
    243 }
    244 void ManageStu::Initial()
    245 {
    246     ifstream in(savefile,ios::in);//打开文件,输入模式 
    247     while(in>>stu[N].stu_no)//直到将文件中的信息全部加载完为止 
    248     {
    249         in>>stu[N].name>>stu[N].c_score;
    250         N++;//自动使记录加一 
    251     }
    252     in.close();//关闭文件句柄 
    253 }
    254 void ManageStu::Save()//保存文件 
    255 {
    256     ofstream out(savefile,ios::out);//打开文件,输出模式 
    257     for(int i=0;i<N;i++)//将所有的信息保存到文件中 
    258     {
    259         out<<stu[i].stu_no<<" "<<stu[i].name<<" "<<stu[i].c_score<<endl;
    260     }
    261     out.close();//关闭文件句柄 
    262 }
    263 //按照最低分最高分查询相应分数段信息 
    264 void ManageStu::displayarea(int low,int high)
    265 {
    266     cout<<low<<"<=成绩 <"<<high<<" :"<<endl;
    267     for(int i=0;i<N;i++)
    268     {
    269         if(stu[i].c_score>=low&&stu[i].c_score<high)
    270         {
    271          displayone(i,1);//调用输出单个信息的函数,指定style参数为1
    272          //即按照第二种格式输出 
    273     }
    274         
    275     }
    276 }
    277 void ManageStu::print()
    278 {//调用按照最低分和最高分查询信息的函数输出相应分数段的信息 
    279     if(N==0){
    280     cout<<"没有学生成绩" <<endl;
    281     waitkey();return;
    282     }
    283     //>=90
    284     displayarea(90,101);
    285     //80-89
    286     displayarea(80,90);
    287     //70-79
    288     displayarea(70,80);
    289     //60-70
    290     displayarea(60,70);
    291     //0-60
    292     displayarea(0,60);
    293     waitkey();//在此等待按键,若不按键就会留在这个输出界面上
    294     //否则无法留在输出界面,直接返回菜单,导致无法看到输出结果 
    295 }
    296 int main()
    297 {
    298     ManageStu command;
    299     command.controlsystem();//调用控制函数实现代码 
    300     return 0;
    301 }
  • 相关阅读:
    https authorization basic
    第二十一章 单例模式
    第十九章 组合模式
    第十八章 备忘录模式
    第十七章 适配器模式
    第十六章 状态模式
    新博客~
    CF922D Robot Vacuum Cleaner
    BZOJ1767 [CEOI2009]harbingers
    树的直径学习笔记
  • 原文地址:https://www.cnblogs.com/sytu/p/4250274.html
Copyright © 2020-2023  润新知