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://www.cnblogs.com/sytu/p/4250274.html