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