功能:成绩管理系统包含了学生的全部信息,每个学生是一个记录,包括学号,姓名,性别,班级,各科成绩(语数外)。
系统功能:
1.信息录入——录入学生信息;
2.信息输出——显示所有信息;
3.信息查询——查询单个学生信息(按学号或按姓名),按性别,班级查询;
4.信息排序——分别按各科成绩,平均成绩,学号,姓名,总分排名;
5.信息插入——插入一学生信息(中间插入和最后插入);
6.信息删除——删除一学生信息;(先打出学生信息然后确认删除);
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define MAXSIZE 1000 5 typedef struct 6 { 7 int no; 8 char name[11]; 9 char sex[9]; 10 char cla[11]; 11 int Chinese,math,Eng,sum,average; 12 }Datatype; 13 14 typedef struct 15 { 16 Datatype data[MAXSIZE]; 17 int len; 18 }SeqList; 19 20 /*录入学生信息*/ 21 void input(SeqList *L) 22 { 23 int i; 24 printf("请输入学生的人数:"); 25 scanf("%d",&L->len); 26 printf("请输入学生的学号、姓名、性别、班级、语数英成绩:\n"); 27 printf("(之间用Tab键隔开)\n\n"); 28 printf("学号 姓名 性别 班级 语文 数学 英语\n"); 29 for(i=1;i<=L->len;i++) 30 { 31 scanf("%d%s%s%s%d%d%d",&L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,&L->data[i].Chinese,&L->data[i].math,&L->data[i].Eng); 32 L->data[i].sum=L->data[i].Chinese+L->data[i].math+L->data[i].Eng; 33 L->data[i].average=(int)L->data[i].sum/3; 34 } 35 } 36 37 /*浏览学生信息*/ 38 void display(SeqList *L) 39 { 40 int i; 41 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 42 for(i=1;i<=L->len;i++) 43 { 44 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 45 } 46 } 47 48 /*按学号查找学生信息*/ 49 int search_no(SeqList *L,Datatype x) 50 { 51 int i=1; 52 while(i<=L->len&&L->data[i].no!=x.no) 53 { 54 i++; 55 } 56 if(i>L->len) 57 { 58 return 0; 59 } 60 else 61 { 62 return i; 63 } 64 65 } 66 67 /*按姓名查找学生信息*/ 68 int search_name(SeqList *L,Datatype x) 69 { 70 int i=1; 71 while(i<=L->len&&strcmp(L->data[i].name,x.name)!=0) 72 { 73 i++; 74 } 75 if(i>L->len) 76 { 77 return 0; 78 } 79 else 80 { 81 return i; 82 } 83 } 84 85 /*按性别查找学生信息*/ 86 void search_sex(SeqList *L,Datatype x) 87 { 88 int i; 89 for(i=1;i<=L->len;i++) 90 { 91 if(i<=L->len&&strcmp(L->data[i].sex,x.sex)==0) 92 { 93 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 94 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 95 } 96 } 97 } 98 99 /*按班级查找学生信息*/ 100 void search_cla(SeqList *L,Datatype x) 101 { 102 int i; 103 for(i=1;i<=L->len;i++) 104 { 105 if(i<=L->len&&strcmp(L->data[i].cla,x.cla)==0) 106 { 107 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 108 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 109 } 110 } 111 } 112 113 /*按语文成绩排序*/ 114 void sort_Chinese(SeqList *L) 115 { 116 Datatype hold; 117 int pass,i; 118 for(pass=0;pass<((L->len)-1);pass++) 119 { 120 for(i=1;i<L->len;i++) 121 { 122 if(L->data[i].Chinese<L->data[i+1].Chinese) 123 { 124 hold=L->data[i]; 125 L->data[i]=L->data[i+1]; 126 L->data[i+1]=hold; 127 } 128 } 129 } 130 } 131 132 /*按数学成绩排序*/ 133 void sort_math(SeqList *L) 134 { 135 Datatype hold; 136 int pass,i; 137 for(pass=0;pass<((L->len)-1);pass++) 138 { 139 for(i=1;i<L->len;i++) 140 { 141 if(L->data[i].math<L->data[i+1].math) 142 { 143 hold=L->data[i]; 144 L->data[i]=L->data[i+1]; 145 L->data[i+1]=hold; 146 } 147 } 148 } 149 } 150 151 /*按英语成绩排序*/ 152 void sort_Eng(SeqList *L) 153 { 154 Datatype hold; 155 int pass,i; 156 for(pass=0;pass<((L->len)-1);pass++) 157 { 158 for(i=1;i<L->len;i++) 159 { 160 if(L->data[i].Eng<L->data[i+1].Eng) 161 { 162 hold=L->data[i]; 163 L->data[i]=L->data[i+1]; 164 L->data[i+1]=hold; 165 } 166 } 167 } 168 } 169 170 /*按平均分成绩排序*/ 171 void sort_average(SeqList *L) 172 { 173 Datatype hold; 174 int pass,i; 175 for(pass=0;pass<((L->len)-1);pass++) 176 { 177 for(i=1;i<L->len;i++) 178 { 179 if(L->data[i].average<L->data[i+1].average) 180 { 181 hold=L->data[i]; 182 L->data[i]=L->data[i+1]; 183 L->data[i+1]=hold; 184 } 185 } 186 } 187 } 188 189 /*按学号排序*/ 190 void sort_no(SeqList *L) 191 { 192 Datatype hold; 193 int pass,i; 194 for(pass=0;pass<((L->len)-1);pass++) 195 { 196 for(i=1;i<L->len;i++) 197 { 198 if(L->data[i].no>L->data[i+1].no) 199 { 200 hold=L->data[i]; 201 L->data[i]=L->data[i+1]; 202 L->data[i+1]=hold; 203 } 204 } 205 } 206 } 207 208 /*按姓名排序*/ 209 void sort_name(SeqList *L) 210 { 211 Datatype hold; 212 int pass,i; 213 for(pass=0;pass<((L->len)-1);pass++) 214 { 215 for(i=1;i<L->len;i++) 216 { 217 if(strcmp(L->data[i].name,L->data[i+1].name)>0) 218 { 219 hold=L->data[i]; 220 L->data[i]=L->data[i+1]; 221 L->data[i+1]=hold; 222 } 223 } 224 } 225 } 226 227 /*按总分排序*/ 228 void sort_sum(SeqList *L) 229 { 230 Datatype hold; 231 int pass,i; 232 for(pass=0;pass<((L->len)-1);pass++) 233 { 234 for(i=1;i<L->len;i++) 235 { 236 if(L->data[i].sum<L->data[i+1].sum) 237 { 238 hold=L->data[i]; 239 L->data[i]=L->data[i+1]; 240 L->data[i+1]=hold; 241 } 242 } 243 } 244 } 245 246 /*插入学生信息*/ 247 void insert(SeqList *L,Datatype x) 248 { 249 int i=1,j; 250 while(i<=L->len&&(L->data[i].no<x.no)) 251 { 252 i++; 253 } 254 if(L->len==MAXSIZE-1) 255 { 256 printf("系统存储空间已满,无法增加学生信息!!"); 257 } 258 else 259 { 260 for(j=L->len;j>=i;j--) 261 { 262 L->data[j+1]=L->data[j]; 263 } 264 L->data[i]=x; 265 L->len++; 266 } 267 } 268 269 /*删除学生信息*/ 270 void del(SeqList *L,Datatype x) 271 { 272 int i,j; 273 i=search_no(L,x); 274 if(i==0) 275 { 276 printf("学号有误!!\n"); 277 } 278 else 279 { 280 for(j=i+1;j<=(L->len);j++) 281 { 282 L->data[j-1]=L->data[j]; 283 } 284 L->len--; 285 } 286 } 287 void menu() 288 { 289 printf("*************************************\n"); 290 printf("* 大学生成绩管理系统 *\n"); 291 printf("*1----------------------录入学生信息*\n"); 292 printf("*2----------------------浏览学生信息*\n"); 293 printf("*3----------------------查找学生信息*\n"); 294 printf("*4------------------------------排序*\n"); 295 printf("*5----------------------插入学生信息*\n"); 296 printf("*6----------------------删除学生信息*\n"); 297 printf("*0----------------------退出管理系统*\n"); 298 printf("*************************************\n"); 299 } 300 301 int main() 302 { 303 Datatype x; 304 SeqList *L; 305 int sel,k,s,i; 306 L=(SeqList *)malloc(sizeof(SeqList)); 307 L->len=0; 308 printf(" 欢迎使用大学生成绩管理系统 \n"); 309 do 310 { 311 menu(); 312 printf("\n请输入你的选择:"); 313 scanf("%d",&sel); 314 switch(sel) 315 { 316 case 1:printf("\n你选择了录入学生信息:\n\n"); 317 input(L); 318 break; 319 case 2:printf("\n你选择了浏览学生信息:\n\n"); 320 display(L); 321 break; 322 case 3:printf("\n你选择了查找学生信息:\n\n"); 323 printf("**************************************\n"); 324 printf("*按<学号>查找请按1,按<姓名>查找请按2*\n"); 325 printf("*按<性别>查找请按3,按<班级>查找请按4*\n"); 326 printf("**************************************\n"); 327 scanf("%d",&s); 328 if(s==1) 329 { 330 printf("请输入要查找的学生的学号:"); 331 scanf("%d",&x.no); 332 k=search_no(L,x); 333 if(k==0) 334 { 335 printf("学号有误!!\n"); 336 } 337 else 338 { 339 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 340 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average); 341 } 342 } 343 else if(s==2) 344 { 345 printf("请输入要查找的学生的姓名:"); 346 scanf("%s",x.name); 347 k=search_name(L,x); 348 if(k==0) 349 { 350 printf("姓名有误!!\n"); 351 } 352 else 353 { 354 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 355 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average); 356 } 357 } 358 else if(s==3) 359 { 360 printf("请输入性别(男或女):\n"); 361 scanf("%s",x.sex); 362 search_sex(L,x); 363 } 364 else 365 { 366 printf("请输入班级:\n"); 367 scanf("%s",x.cla); 368 search_cla(L,x); 369 } 370 break; 371 case 4:printf("\n你选择了排序:\n\n"); 372 printf("*********************************************\n"); 373 printf("*按<语文成绩>排序请按1,按<数学成绩>排序请按2*\n"); 374 printf("*按<英语成绩>排序请按3,按<平均成绩>排序请按4*\n"); 375 printf("* 按<学号>排序请按5,按<姓名>排序请按6 *\n"); 376 printf("* 按<总分>排序请按7 *\n"); 377 printf("*********************************************\n"); 378 scanf("%d",&s); 379 if(s==1) 380 { 381 sort_Chinese(L); 382 printf("按语文成绩排序:\n"); 383 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 384 for(i=1;i<=L->len;i++) 385 { 386 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 387 } 388 } 389 if(s==2) 390 { 391 sort_math(L); 392 printf("按数学成绩排序:\n"); 393 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 394 for(i=1;i<=L->len;i++) 395 { 396 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 397 } 398 } 399 if(s==3) 400 { 401 sort_Eng(L); 402 printf("按英语成绩排序:\n"); 403 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 404 for(i=1;i<=L->len;i++) 405 { 406 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 407 } 408 } 409 if(s==4) 410 { 411 sort_average(L); 412 printf("按平均分排序:\n"); 413 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 414 for(i=1;i<=L->len;i++) 415 { 416 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 417 } 418 } 419 if(s==5) 420 { 421 sort_no(L); 422 printf("按学号排序:\n"); 423 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 424 for(i=1;i<=L->len;i++) 425 { 426 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 427 } 428 } 429 if(s==6) 430 { 431 sort_name(L); 432 printf("按姓名排序:\n"); 433 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 434 for(i=1;i<=L->len;i++) 435 { 436 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 437 } 438 } 439 if(s==7) 440 { 441 sort_sum(L); 442 printf("按总分排序:\n"); 443 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 444 for(i=1;i<=L->len;i++) 445 { 446 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[i].no,L->data[i].name,L->data[i].sex,L->data[i].cla,L->data[i].Chinese,L->data[i].math,L->data[i].Eng,L->data[i].sum,L->data[i].average); 447 } 448 } 449 break; 450 case 5:printf("\n你选择了插入学生信息:\n\n"); 451 printf("请输入要插入的学生的学号、姓名、性别、班级、语数英成绩:\n"); 452 printf("学号 姓名 性别 班级 语文 数学 英语\n"); 453 scanf("%d%s%s%s%d%d%d",&x.no,x.name,x.sex,x.cla,&x.Chinese,&x.math,&x.Eng); 454 x.sum=x.Chinese+x.math+x.Eng; 455 x.average=(int)x.sum/3; 456 insert(L,x); 457 break; 458 case 6:printf("\n你选择了删除学生信息:\n\n"); 459 printf("请输入要删除的学生的学号:"); 460 scanf("%d",&x.no); 461 k=search_no(L,x); 462 if(k==0) 463 { 464 printf("学号有误!!\n"); 465 } 466 else 467 { 468 printf("学号 姓名 性别 班级 语文 数学 英语 总分 平均分\n"); 469 printf("%3d%7s%7s%9s%8d%8d%8d%8d%8d\n",L->data[k].no,L->data[k].name,L->data[k].sex,L->data[k].cla,L->data[k].Chinese,L->data[k].math,L->data[k].Eng,L->data[k].sum,L->data[k].average); 470 printf("\n是否要删除此学生的信息?\n"); 471 printf("(是请按1,否请按0)\n"); 472 printf("你的选择是:"); 473 scanf("%d",&s); 474 if(s==1) 475 { 476 del(L,x); 477 } 478 } 479 break; 480 } 481 }while(sel!=0); 482 printf("谢谢使用此系统!!"); 483 return 0; 484 }