C语言学生管理系统源码分享
1 大家好 2 我就是如假包换的...陈玲 3 自从运营了C语言程序设计微信公众号 4 很多粉丝都给我备注 5 ...奇葩 6 实在是不敢当 7 也被人开始叫玲玲姐 8 我知道 9 很多人都想看我出境 10 我本人也有 1 年多的舞台演讲训练 11 实话告诉大家 —— 我喜欢出境 12 13 不过,既然我们做编程语言公众号的,就要去掉其他因素,我们挖掘文字本身所蕴含的力量。所以,这次分享的表达方式就是 —— 纯文字。 14 15 今天的分享,只有一个目的 16 就是上代码 17 那么,准备好了 18 #include<stdio.h> 19 #include<stdlib.h> 20 //结构体可以存放的学生信息最大个数,不可变变量 21 int const MAX_LENGTH=100; 22 //学生信息结构体数组,最多可以存放100个学生信息 23 struct student{ 24 int id; //学号 25 char *name; //姓名 26 int age; //年龄 27 float c_score; //C语言成绩 28 float english_score; //英语成绩 29 float database_score; //数据库成绩 30 float total_score; //总分 31 }student_array[MAX_LENGTH]; 32 33 //学生信息数量 34 int student_count=0; 35 36 //函数声明 37 void print_all_students(); 38 void input_info(); 39 void query_info(); 40 void modify_info(); 41 void delete_info(); 42 void compute_total_score(); 43 void sort_info(); 44 int search_one_student(); 45 void print_one_student(struct student one); 46 void delete_one_student(int student_index); 47 char * get_item_name(int item_index); 48 void modify_one_student(int student_index); 49 void sort_by_id(); 50 void sort_by_c_score(); 51 void sort_by_english_score(); 52 void sort_by_database_score(); 53 54 //主函数 55 int main() 56 { 57 while(1) 58 { 59 printf("请选择要使用的功能:\n"); 60 printf("录入信息,请输入1,然后回车!\n"); 61 printf("查询信息,请输入2,然后回车!\n"); 62 printf("修改信息,请输入3,然后回车!\n"); 63 printf("删除信息,请输入4,然后回车!\n"); 64 printf("计算总分,请输入5,然后回车!\n"); 65 printf("排序信息,请输入6,然后回车!\n"); 66 printf("输出全部,请输入0,然后回车!\n"); 67 printf("退出程序,请输入-1,然后回车!\n"); 68 //函数选择变量 69 int function=0; 70 //输入选择的函数编号值 71 scanf("%d",&function); 72 //根据输入的函数编号,执行对应的功能 73 switch(function){ 74 case -1: 75 exit(1); 76 case 0: 77 print_all_students(); 78 break; 79 case 1: 80 input_info(); 81 break; 82 case 2: 83 query_info(); 84 break; 85 case 3: 86 modify_info(); 87 break; 88 case 4: 89 delete_info(); 90 break; 91 case 5: 92 compute_total_score(); 93 break; 94 case 6: 95 sort_info(); 96 break; 97 default: 98 printf("请输入正确的功能编号!!!\n\n"); 99 break; 100 } 101 } 102 return 0; 103 } 104 105 //录入信息函数 106 void input_info() 107 { 108 printf("当前功能————录入信息!\n"); 109 //判断是否还有空间 110 if(student_count<MAX_LENGTH) 111 { 112 //声明一些临时变量 113 int id=0; char *name=(char *)malloc(100); 114 int age=0; float c_score=0; 115 float english_score=0; 116 float database_score=0; 117 printf("请输入学生信息,格式为:学号,姓名,年龄,C语言成绩,英语成绩,数据库成绩\n"); 118 scanf("%d %s %d %f %f %f",&id,name,&age,&c_score,&english_score,&database_score); 119 printf("学生信息校对:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",id,name,age,c_score,english_score,database_score); 120 //学生信息加入结构体数组 121 student_array[student_count].id=id; 122 student_array[student_count].name=name; 123 student_array[student_count].age=age; 124 student_array[student_count].c_score=c_score; 125 student_array[student_count].english_score=english_score; 126 student_array[student_count].database_score=database_score; 127 student_count++; 128 //是否继续录入信息 129 printf("是否继续录入信息?继续请输入y,返回主菜单输入n\n"); 130 char go_on; 131 scanf("%s",&go_on); 132 if(go_on=='y') 133 { 134 input_info(); 135 } 136 } 137 else 138 { 139 printf("学生结构体数据已满,可以删除一部分学生信息!\n"); 140 } 141 } 142 143 144 //查询信息函数 145 void query_info() 146 { 147 printf("当前功能————查询信息!\n"); 148 printf("请输入学生的学号\n"); 149 int id=0; 150 scanf("%d",&id); 151 //查找输入id学生的序号 152 int student_index=search_one_student(id); 153 if(student_index!=-1) 154 { 155 print_one_student(student_array[student_index]); 156 } 157 else 158 { 159 printf("没有该学号的学生!\n"); 160 } 161 //是否继续查询信息 162 printf("是否继续查询信息?继续请输入y,返回主菜单输入n\n"); 163 char go_on; 164 scanf("%s",&go_on); 165 if(go_on=='y') 166 query_info(); 167 } 168 169 170 //修改信息函数 171 void modify_info() 172 { 173 printf("当前功能————修改信息!\n"); 174 printf("请输入学生的学号\n"); 175 int id=0; 176 scanf("%d",&id); 177 //查找输入id学生的序号 178 int student_index=search_one_student(id); 179 if(student_index!=-1) 180 { 181 modify_one_student(student_index); 182 } 183 else 184 { 185 printf("没有该学号的学生!\n"); 186 } 187 } 188 189 190 //删除信息函数 191 void delete_info() 192 { 193 printf("当前功能————删除信息!\n"); 194 printf("请输入学生的学号\n"); 195 int id=0; 196 scanf("%d",&id); 197 //查找输入id学生的序号 198 int student_index=search_one_student(id); 199 if(student_index!=-1) 200 { 201 //防止student_index被改变,传入temp_index计算 202 int temp_index=student_index; 203 print_one_student(student_array[temp_index]); 204 //删除前进行确认 205 printf("确定删除学号 %d 同学的信息?继续请输入y\n",id); 206 char be_true; 207 scanf("%s",&be_true); 208 if(be_true=='y') 209 { 210 printf("%d\n", student_index); 211 //执行删除动作 212 delete_one_student(student_index); 213 } 214 } 215 else 216 { 217 printf("没有该学号的学生!\n"); 218 } 219 //是否继续删除信息 220 printf("是否继续删除信息?继续请输入y,返回主菜单输入n\n"); 221 char go_on; 222 scanf("%s",&go_on); 223 if(go_on=='y') 224 delete_info(); 225 } 226 227 228 //计算总分函数 229 void compute_total_score() 230 { 231 printf("当前功能————计算总分!\n"); 232 for (int i = 0; i < student_count; ++i) 233 { 234 student_array[i].total_score=student_array[i].c_score+student_array[i].english_score+student_array[i].database_score; 235 print_one_student(student_array[i]); 236 printf("总成绩:%f\n", student_array[i].total_score); 237 } 238 printf("总分计算完成!!!\n"); 239 } 240 241 242 //成绩排序函数 243 void sort_info() 244 { 245 printf("当前功能————成绩排序!\n"); 246 printf("排序前所有学生信息如下:\n"); 247 print_all_students(); 248 int sort_type; 249 while(1) 250 { 251 printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4\n"); 252 scanf("%d",&sort_type); 253 if(sort_type>=1&&sort_type<=4) 254 break; 255 } 256 switch(sort_type) 257 { 258 case 1: 259 sort_by_id(); 260 break; 261 case 2: 262 sort_by_c_score(); 263 break; 264 case 3: 265 sort_by_english_score(); 266 break; 267 case 4: 268 sort_by_database_score(); 269 break; 270 } 271 printf("排序后所有学生信息如下:\n"); 272 print_all_students(); 273 //是否继续删除信息 274 printf("是否继续排序信息?继续请输入y,返回主菜单输入n\n"); 275 char go_on; 276 scanf("%s",&go_on); 277 if(go_on=='y') 278 sort_info(); 279 } 280 281 282 //根据输入的学号,遍历结构体数组,若存在该学生,返回数组下标,不存在返回-1 283 int search_one_student(int id) 284 { 285 for (int i = 0; i < student_count; ++i) 286 { 287 if(student_array[i].id==id) 288 { 289 return i; 290 } 291 } 292 return -1; 293 } 294 295 296 //输出某个学生的信息 297 void print_one_student(struct student one) 298 { 299 printf("学生信息:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",one.id,one.name,one.age,one.c_score,one.english_score,one.database_score); 300 } 301 302 303 //输出所有学生的信息 304 void print_all_students() 305 { 306 if(student_count==0) 307 { 308 printf("暂无学生信息\n\n\n"); 309 } 310 for (int i = 0; i < student_count; ++i) 311 { 312 print_one_student(student_array[i]); 313 } 314 } 315 316 317 void modify_one_student(int student_index) 318 { 319 //修改前,输出学生信息 320 print_one_student(student_array[student_index]); 321 //字段序号初始值 322 int item_index=0; 323 //不允许修改学号字段 324 while(1) 325 { 326 printf("请输入要修改的字段序号,姓名:1,年龄:2,C语言成绩:3,英语成绩:4,数据库成绩:5\n"); 327 scanf("%d",&item_index); 328 if(item_index>=1&&item_index<=5) 329 break; 330 } 331 switch(item_index) 332 { 333 case 1: 334 printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 335 char* item_value_1=(char *)malloc(100); 336 ; 337 scanf("%s",item_value_1); 338 student_array[student_index].name=item_value_1; 339 break; 340 case 2: 341 printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 342 int item_value_2; 343 scanf("%d",&item_value_2); 344 student_array[student_index].age=item_value_2; 345 break; 346 case 3: 347 printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 348 float item_value_3; 349 scanf("%f",&item_value_3); 350 student_array[student_index].c_score=item_value_3; 351 break; 352 case 4: 353 printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 354 float item_value_4; 355 scanf("%f",&item_value_4); 356 student_array[student_index].english_score=item_value_4; 357 break; 358 case 5: 359 printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 360 float item_value_5; 361 scanf("%f",&item_value_5); 362 student_array[student_index].database_score=item_value_5; 363 break; 364 } 365 printf("修改成功!新的学生信息如下:\n"); 366 //修改后输出学生信息 367 print_one_student(student_array[student_index]); 368 //是否继续删除信息 369 printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n\n"); 370 char go_on; 371 scanf("%s",&go_on); 372 if(go_on=='y') 373 modify_one_student(student_index); 374 } 375 376 377 //删除数组对应序号的学生信息,把i位置后面的数据组元素向前移动覆盖i,student_count计数器减1 378 void delete_one_student(int student_index) 379 { 380 for (int i = student_index; i < student_count-1; ++i) 381 { 382 student_array[i]=student_array[i+1]; 383 } 384 student_count--; 385 printf("删除完成\n\n\n"); 386 } 387 388 389 //根据输入的字段序号,返回字段名称 390 char * get_item_name(int item_index) 391 { 392 switch(item_index) 393 { 394 case 0: 395 return "学号"; 396 case 1: 397 return "姓名"; 398 case 2: 399 return "年龄"; 400 case 3: 401 return "C语言成绩"; 402 case 4: 403 return "英语成绩"; 404 case 5: 405 return "数据库成绩"; 406 default: 407 return ""; 408 } 409 } 410 411 412 //按照id排序,使用最简单的冒泡排序法 413 void sort_by_id() 414 { 415 for (int i = 0; i < student_count; ++i) 416 { 417 for (int j = i; j < student_count; ++j) 418 { 419 if(student_array[i].id>student_array[j].id) 420 { 421 struct student temp=student_array[i]; 422 student_array[i]=student_array[j]; 423 student_array[j]=temp; 424 } 425 } 426 } 427 printf("按照 学号 排序完成\n"); 428 } 429 430 431 //按照C语言成绩排序,使用最简单的冒泡排序法 432 void sort_by_c_score() 433 { 434 for (int i = 0; i < student_count; ++i) 435 { 436 for (int j = i; j < student_count; ++j) 437 { 438 if(student_array[i].c_score>student_array[j].c_score) 439 { 440 struct student temp=student_array[i]; 441 student_array[i]=student_array[j]; 442 student_array[j]=temp; 443 } 444 } 445 } 446 printf("按照 C语言成绩 排序完成\n"); 447 } 448 449 450 //按照英语成绩排序,使用最简单的冒泡排序法 451 void sort_by_english_score() 452 { 453 for (int i = 0; i < student_count; ++i) 454 { 455 for (int j = i; j < student_count; ++j) 456 { 457 if(student_array[i].english_score>student_array[j].english_score) 458 { 459 struct student temp=student_array[i]; 460 student_array[i]=student_array[j]; 461 student_array[j]=temp; 462 } 463 } 464 } 465 printf("按照 英语成绩 排序完成\n"); 466 } 467 468 469 //按照数据库成绩排序,使用最简单的冒泡排序法 470 void sort_by_database_score() 471 { 472 for (int i = 0; i < student_count; ++i) 473 { 474 for (int j = i; j < student_count; ++j) 475 { 476 if(student_array[i].database_score>student_array[j].database_score) 477 { 478 struct student temp=student_array[i]; 479 student_array[i]=student_array[j]; 480 student_array[j]=temp; 481 } 482 } 483 } 484 printf("按照 数据库成绩 排序完成\n"); 485 } 486 487 转发自:微信公众号 xs-cyy