当时写这个程序的时候是一个通信学院的同学让我帮忙做课程设计,要求用C语言编写.所以本程序全部是用C语言写的.
主界面:
1.成绩录入
2.成绩查询
3.成绩统计
4.退 出
a.结构体的建立:
1 //定义一个学生成绩的结构体,解决多个变量问题 2 struct Student 3 { 4 int num; //学号 5 char name[50];//姓名 6 float chinese;//语文 7 float math;//数学 8 float english;//英语 9 float ave;//平均成绩 10 float all;//总成绩 11 }stu[50];
b.单科排名的实现:就是用了一个冒泡排序法.
当然这里面的 count 是用来统计学生的个数的,我声明了一个全局的静态变量 static count;
1 //对语文单科成绩统计 2 for (i = 0; i < count - 1; i++) 3 { 4 for (j = 0; j < count - i; j++) 5 { 6 if (stu[j].chinese < stu[j+1].chinese) 7 { 8 temp = stu[j].chinese; 9 stu[j].chinese = stu[j+1].chinese; 10 stu[j+1].chinese = temp; 11 } 12 } 13 }
c.成绩查询:
其中查询方式有两种:
1.学号查询
2.姓名查询
这里主要讲一下姓名查询:
姓名查询:if (0 == strcmp(nam,stu[i].name)) 用这行代码来判断输入的汉字姓名是否一样.
1 printf(" 请输入姓名:"); 2 scanf("%s",nam); 3 4 system("cls"); 5 printf("\n\n\n"); 6 for (i = 0; i < count; i++) 7 { 8 if (0 == strcmp(nam,stu[i].name)) 9 { 10 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断 11 printf(" 姓 名: %s\n",stu[i].name); 12 printf(" 学 号: %d\n",stu[i].num); 13 printf(" 语 文: %.2f\n",stu[i].chinese); 14 printf(" 数 学: %.2f\n",stu[i].math); 15 printf(" 英 语: %.2f\n\n\n",stu[i].english); 16 } 17 }
下面就是程序的所有源代码:
1 //学生管理系统1.0版.cpp 2 3 #include <stdio.h> 4 #include <string.h> 5 #include <stdlib.h>//exit(1);的头文件 6 7 //定义一个学生成绩的结构体,解决多个变量问题 8 struct Student 9 { 10 int num; //学号 11 char name[50];//姓名 12 float chinese;//语文 13 float math;//数学 14 float english;//英语 15 float ave;//平均成绩 16 float all;//总成绩 17 }stu[50]; 18 19 static count;//定义一个静态变量,记录录入成绩的学生个数。 20 21 void input() 22 { 23 system("cls");//清屏 24 25 int i = 0; 26 27 printf("\n※当前目录:成绩录入\n"); 28 printf("\n注:当前版本只支持一次录入,第二次录入时直接覆盖上次录入的学生成绩.\n"); 29 printf("学生成绩录入中......(提示:学号为0,表示录入成绩结束.)\n\n"); 30 31 //学生成绩的录入 32 while(1) 33 { 34 printf("\n你正在录入第%d个学生的成绩:\n",i+1); 35 printf(" 学号:"); 36 scanf("%d",&stu[i].num); 37 38 if (0 != stu[i].num) 39 { 40 printf(" 姓名:"); 41 scanf("%s",stu[i].name); 42 printf(" 语文:"); 43 scanf("%f",&stu[i].chinese); 44 printf(" 数学:"); 45 scanf("%f",&stu[i].math); 46 printf(" 英语:"); 47 scanf("%f",&stu[i].english); 48 49 ++i; 50 } 51 else 52 { 53 if (0 == stu[0].num) 54 { 55 system("cls"); 56 printf("提示:你没有录入学生成绩.\n"); 57 } 58 else 59 { 60 system("cls"); 61 printf("提示:学生成绩录入成功.\n"); 62 } 63 64 count = i; 65 66 printf("\n 按'enter'进入导航页面..."); 67 68 getchar();//吸收前面的回车键 69 getchar();//暂停效果(表示从键盘接受一个字符) 70 system("cls"); 71 72 break; 73 } 74 } 75 } 76 77 void tongji() 78 { 79 system("cls"); 80 81 int pai; 82 int i; 83 int j; 84 float temp; 85 86 printf("\n※当前目录:成绩统计\n"); 87 printf("\n学生单科成绩排名:\n\n\n"); 88 89 //判断是否录入了学生成绩 90 if (0 == count) 91 { 92 printf("\n\n\n\n 提示:当前没有学生成绩记录,先去录入学生成绩\n\n\n"); 93 } 94 else 95 { 96 printf(" 选择要排序的单科:\n\n\n"); 97 printf(" 1.语 文\n\n"); 98 printf(" 2.数 学\n\n"); 99 printf(" 3.英 语\n\n"); 100 printf(" 4.平均成绩\n\n"); 101 printf(" 5.总体成绩\n\n"); 102 printf(" 我选择:[_]\b\b"); 103 104 //对总成绩和平均成绩进行统计 105 for (i = 0; i < count; i++) 106 { 107 stu[i].all = stu[i].chinese + stu[i].math + stu[i].english; 108 stu[i].ave = stu[i].all / 3; 109 } 110 111 do 112 { 113 scanf("%d",&pai); 114 115 switch(pai) 116 { 117 case 1: 118 { 119 //对语文单科成绩统计 120 for (i = 0; i < count - 1; i++) 121 { 122 for (j = 0; j < count - i; j++) 123 { 124 if (stu[j].chinese < stu[j+1].chinese) 125 { 126 temp = stu[j].chinese; 127 stu[j].chinese = stu[j+1].chinese; 128 stu[j+1].chinese = temp; 129 } 130 } 131 } 132 133 system("cls"); 134 printf("\n\n语文成绩单科排名:\n\n"); 135 //排序后输出成绩 136 for (i = 0; i < count; i++) 137 { 138 printf("\n第%d名: 姓名:%s , 语文成绩: %.2f\t\n",i+1,stu[i].name,stu[i].chinese); 139 } 140 }; 141 break; 142 143 case 2: 144 { 145 //对数学单科成绩统计 146 for (i = 0; i < count - 1; i++) 147 { 148 for (j = 0; j < count - i; j++) 149 { 150 if (stu[j].math < stu[j+1].math) 151 { 152 temp = stu[j].math; 153 stu[j].math = stu[j+1].math; 154 stu[j+1].math = temp; 155 } 156 } 157 } 158 159 system("cls"); 160 printf("\n\n数学成绩单科排名:\n\n"); 161 //排序后输出成绩 162 for (i = 0; i < count; i++) 163 { 164 printf("\n第%d名: 姓名:%s , 数学成绩: %.2f\t\n",i+1,stu[i].name,stu[i].math); 165 } 166 }; 167 break; 168 169 case 3: 170 { 171 //对英语单科成绩统计 172 for (i = 0; i < count - 1; i++) 173 { 174 for (j = 0; j < count - i; j++) 175 { 176 if (stu[j].english < stu[j+1].english) 177 { 178 temp = stu[j].english; 179 stu[j].english = stu[j+1].english; 180 stu[j+1].english = temp; 181 } 182 } 183 } 184 185 system("cls"); 186 printf("\n\n英语成绩单科排名:\n\n"); 187 //排序后输出成绩 188 for (i = 0; i < count; i++) 189 { 190 printf("\n第%d名: 姓名:%s , 英语成绩: %.2f\t\n",i+1,stu[i].name,stu[i].english); 191 } 192 }; 193 break; 194 case 4: 195 { 196 //对平均成绩统计 197 for (i = 0; i < count - 1; i++) 198 { 199 for (j = 0; j < count - i; j++) 200 { 201 if (stu[j].ave < stu[j+1].ave) 202 { 203 temp = stu[j].ave; 204 stu[j].ave = stu[j+1].ave; 205 stu[j+1].ave = temp; 206 } 207 } 208 } 209 210 system("cls"); 211 printf("\n\n平均成绩排名:\n\n"); 212 //排序后输出成绩 213 for (i = 0; i < count; i++) 214 { 215 printf("\n第%d名: 姓名:%s , 平均成绩: %.2f\t\n",i+1,stu[i].name,stu[i].ave); 216 } 217 }; 218 break; 219 case 5: 220 { 221 //对总成绩统计 222 for (i = 0; i < count - 1; i++) 223 { 224 for (j = 0; j < count - i; j++) 225 { 226 if (stu[j].all < stu[j+1].all) 227 { 228 temp = stu[j].all; 229 stu[j].all = stu[j+1].all; 230 stu[j+1].all = temp; 231 } 232 } 233 } 234 235 system("cls"); 236 printf("\n\n总成绩排名:\n\n"); 237 //排序后输出成绩 238 for (i = 0; i < count; i++) 239 { 240 printf("\n第%d名: 姓名:%s , 总成绩: %.2f\t\n",i+1,stu[i].name,stu[i].all); 241 } 242 }; 243 break; 244 default : printf("输入有误!请重新输入:"); 245 break; 246 } 247 }while((1 != pai) && (2 != pai) && (3 != pai) && (4 != pai) && (5 != pai)); 248 } 249 250 printf("\n 按'enter'进入导航页面..."); 251 252 getchar(); 253 getchar(); 254 system("cls"); 255 } 256 257 void display() 258 { 259 system("cls"); 260 261 char nam[50]; 262 int xuan; 263 int i; 264 int m; 265 int flag = 0; 266 267 printf("\n※当前目录:成绩查询\n\n"); 268 printf("注:当前版本支持学号,姓名两种查询方式,先选择查询方式:\n"); 269 printf("\n 1.学号查询\n"); 270 printf("\n 2.姓名查询\n"); 271 printf(" 我选择:[_]\b\b"); 272 273 do 274 { 275 scanf("%d",&xuan); 276 277 if ((1 != xuan) && (2 != xuan)) 278 { 279 printf("输入错误!请重新输入:"); 280 } 281 }while((1 != xuan) && (2 != xuan)); 282 283 printf("\n\n"); 284 if (1 == xuan) 285 { 286 printf(" 请输入学号:"); 287 scanf("%d",&m); 288 289 system("cls"); 290 printf("\n\n\n"); 291 for (i = 0; i < count; i++) 292 { 293 if (m == stu[i].num) 294 { 295 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断 296 printf(" 姓 名: %s\n",stu[i].name); 297 printf(" 学 号: %d\n",stu[i].num); 298 printf(" 语 文: %.2f\n",stu[i].chinese); 299 printf(" 数 学: %.2f\n",stu[i].math); 300 printf(" 英 语: %.2f\n\n\n",stu[i].english); 301 } 302 } 303 304 if (0 == flag) 305 { 306 printf("\n\n\n\n 提示:很遗憾,没找到你要找的学生.\n\n\n\n"); 307 } 308 } 309 else 310 { 311 printf(" 请输入姓名:"); 312 scanf("%s",nam); 313 314 system("cls"); 315 printf("\n\n\n"); 316 for (i = 0; i < count; i++) 317 { 318 if (0 == strcmp(nam,stu[i].name)) 319 { 320 flag = 1;//这个用来标记存在这个学号的学生么? 用于下面的if()判断 321 printf(" 姓 名: %s\n",stu[i].name); 322 printf(" 学 号: %d\n",stu[i].num); 323 printf(" 语 文: %.2f\n",stu[i].chinese); 324 printf(" 数 学: %.2f\n",stu[i].math); 325 printf(" 英 语: %.2f\n\n\n",stu[i].english); 326 } 327 } 328 329 if (0 == flag) 330 { 331 printf("\n\n\n\n 提示:很遗憾,没找到你要找的学生.\n\n\n\n"); 332 } 333 } 334 335 printf("\n 按'enter'进入导航页面..."); 336 337 getchar(); 338 getchar(); 339 system("cls"); 340 } 341 342 int main() 343 { 344 int n; 345 346 loop: 347 printf("\n※欢迎进入学生成绩管理系统1.0版.\n\n\n\n\n"); 348 printf(" 1.成绩录入\n\n"); 349 printf(" 2.成绩查询\n\n"); 350 printf(" 3.成绩统计\n\n"); 351 printf(" 4.退 出\n\n"); 352 printf("\n 我选择:[_]\b\b"); 353 354 //循环判断选择是是否正确 355 do 356 { 357 scanf("%d",&n); 358 359 switch(n) 360 { 361 case 1: input(); goto loop; break; //成绩录入 362 case 2: display(); goto loop; break; //成绩查询. 363 case 3: tongji(); goto loop; break; //成绩统计 364 case 4: printf("\n\n 已安全退出系统,感谢你的使用^@^...\n\n\n\n\n"); exit(1); break; //退出系统. 365 default: printf("输入有误!请重新输入:"); break; 366 } 367 }while((n != 1) && (n != 2) && (n != 3)); 368 369 return 0; 370 }
by: null 2013年7月10日22:08:08
浙公网安备 33010602011771号