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<<"\t\t ********************主菜单********************"<<endl; 40 cout<<"\t\t|| 1-输入学生成绩 ||"<<endl; 41 cout<<endl; 42 cout<<"\t\t|| 2-查询学生成绩 ||"<<endl; 43 cout<<endl; 44 cout<<"\t\t|| 3-修改学生成绩 ||"<<endl; 45 cout<<endl; 46 cout<<"\t\t|| 4-学生成绩分段显示 ||" <<endl; 47 cout<<endl; 48 cout<<"\t\t|| 5-成绩统计信息 ||" <<endl; 49 cout<<endl; 50 cout<<"\t\t|| 0-退出 ||"<<endl; 51 cout<<"\t\t **********************************************" <<endl; 52 cout<<"选择操作(0-5):"; 53 } 54 //总控制函数,在里面将所有的功能选择使用 55 void ManageStu::controlsystem() 56 { 57 cout<<endl; 58 cout<<"===============================================================================\n"<<endl; 59 cout<<"\n\n 欢迎进入2013级计算机系C++学生成绩管理系统 "; 60 cout<<endl; 61 cout<<"\n\n 作者:陈龙\n"; 62 cout<<"===============================================================================\n"<<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<<"\t *************查询方式***************"<<endl; 114 cout<<"\t|| 1-学号查询 ||"<<endl; 115 cout<<endl; 116 cout<<"\t|| 2-姓名查询 ||"<<endl; 117 cout<<endl; 118 cout<<"\t|| 0-返回上一级菜单 ||"<<endl; 119 cout<<"\t ***********************************" <<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<<"\t\t总成绩是:\t\t"<<sum<<endl; 223 cout<<"\t\t平均成绩是:\t\t"<<sum/N<<endl; 224 cout<<endl; 225 cout<<"=============================================="<<endl; 226 cout<<"\t\t最高成绩:\t\t"<<endl; 227 displayone(result) ; 228 cout<<endl; 229 cout<<"=============================================="<<endl; 230 cout<<"\t\t最低成绩:\t\t"<<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 }
What I don't dare to say is I can't!