因为同学没学链表,结构体,只能简单并且麻烦的做了一个课程设计。内容为存储学生信息和考试成绩,对成绩单进行编辑,排序,删除,显示等功能。
代码如下:
1 #include <stdio.h> 2 #include <conio.h> 3 #include <string.h> 4 #define NUMSTU 5000 /*最大学生人数*/ 5 #define NUMSCORE 4 /*成绩个数*/ 6 #define NAMELEN 100 /*姓名的最大长度<10*/ 7 void main() 8 { 9 char menuItem,subItem; /*用户输入的菜单项*/ 10 int i,j,l; 11 unsigned long tempNo; //用于排序对调内存的中间变量 12 char tempName[NAMELEN]; 13 float sum,k; 14 15 /*主要数据结构*/ 16 unsigned long no[NUMSTU]={0}; /*学号*/ 17 char name[NUMSTU][NAMELEN]={""}; /*姓名*/ 18 float score[NUMSTU][NUMSCORE]={0}; /*数学、语文、英语、平均成绩*/ 19 int excellentNum[3]={0}; /*每科成绩为优秀(>=90)的人数*/ 20 char subject[NUMSCORE][NAMELEN]={"数学","语文","英语","平均"}; 21 int currentNumStu; /*当前表中的学生人数*/ 22 23 currentNumStu=0; 24 do 25 { 26 printf("|-------------------------------------------------------| "); 27 printf("| | "); 28 printf("| 请输入选项编号(0 ~~ 7): | "); 29 printf("| | "); 30 printf("|-------------------------------------------------------| "); 31 printf("| | "); 32 printf("| 1——创建成绩单 | "); 33 printf("| 2——添加学生 | "); 34 printf("| 3——编辑学生 | "); 35 printf("| 4——删除学生 | "); 36 printf("| 5——统计成绩 | "); 37 printf("| 6——排序成绩单 | "); 38 printf("| 7——显示成绩 | "); 39 printf("| 0——退出 | "); 40 printf("|-------------------------------------------------------| "); 41 42 printf("请输入选项编号(0 ~ 7): "); 43 /*清除键盘缓冲区*/ 44 fflush(stdin); 45 scanf("%c",&menuItem); 46 47 switch(menuItem) 48 { 49 case '1':/*创建成绩单*/ 50 if(currentNumStu>0) 51 { 52 printf(" 不能重新创建学生成绩单 "); 53 } 54 else 55 { 56 printf("注意:输入的结束标志为学号为0! "); 57 i=0; 58 printf("请输入学号:"); 59 scanf("%lu",&no[i]); 60 61 /*清除键盘缓冲区*/ 62 fflush(stdin); 63 while(no[i]!=0&¤tNumStu<NUMSTU) 64 { 65 printf("请输入姓名:"); 66 gets(name[i]); 67 for(j=0; j<NUMSCORE-1; j++) 68 { 69 printf("请输入%s成绩:",subject[j]); 70 scanf("%f",&score[i][j]); 71 } 72 73 /*计算平均成绩*/ 74 sum=0; 75 for(j=0; j<NUMSCORE-1; j++) 76 sum = sum+score[i][j]; 77 score[i][3] = sum/3; 78 79 currentNumStu++; 80 if(currentNumStu==NUMSTU) 81 { printf("成绩单已满!结束创建!! "); 82 break; 83 } 84 i++; 85 86 printf("请输入学号:"); 87 scanf("%lu",&no[i]); 88 /*清楚键盘缓冲区*/ 89 fflush(stdin); 90 } 91 } 92 break; 93 case '2': 94 /*添加学生*/ 95 if(currentNumStu>=NUMSTU) 96 { 97 printf("成绩单已满!不可再加学生信息!! "); 98 } 99 else 100 { 101 i=currentNumStu; 102 printf("请输入学号:"); 103 scanf("%lu",&no[i]); 104 fflush(stdin); 105 printf("请输入姓名:"); 106 gets(name[i]); 107 for(j=0; j<NUMSCORE-1; j++) 108 { 109 printf("请输入%s成绩:",subject[j]); 110 scanf("%f",&score[i][j]); 111 } 112 113 /*计算平均成绩*/ 114 sum=0; 115 for(j=0; j<NUMSCORE-1; j++) 116 sum = sum+score[i][j]; 117 score[i][3] =sum/3; 118 currentNumStu++; 119 printf("添加成功!"); 120 } 121 break; 122 case '3':/*编辑学生信息*/ 123 scanf("%lu",&tempNo); 124 for(i=0;i<currentNumStu;i++) 125 if(no[i]==tempNo) 126 break; 127 if(i!=currentNumStu) 128 { 129 for(j=0; j<NUMSCORE-1; j++) 130 { 131 printf("请输入%s成绩:",subject[j]); 132 scanf("%f",&score[i][j]); 133 } 134 135 /*计算平均成绩*/ 136 sum=0; 137 for(j=0; j<NUMSCORE-1; j++) 138 sum = sum+score[i][j]; 139 score[i][3] =sum/3; 140 printf("编辑成功!"); 141 } 142 else 143 printf("不存在该学生! "); 144 break; 145 case '4':/*删除指定学号的学生信息*/ 146 printf("请输入学号:"); 147 scanf("%lu",&tempNo); 148 for(i=0;i<currentNumStu;i++) 149 if(no[i]==tempNo) 150 break; 151 if(i!=currentNumStu) 152 { 153 for(;i<currentNumStu-1;i++) 154 { 155 no[i]=no[i+1]; 156 strcpy(name[i],name[i+1]); 157 for(j=0; j<NUMSCORE; j++) 158 { 159 score[i][j]=score[i+1][j]; 160 } 161 } 162 currentNumStu--; 163 printf("删除成功!"); 164 } 165 else 166 printf("不存在该学生! "); 167 break; 168 case '5':/*统计每科成绩>=90分以上的学生人数*/ 169 if(currentNumStu==0) 170 printf("目前无记录,请添加成绩单信息! "); 171 else 172 { 173 for(i=0;i<currentNumStu;i++) 174 for(j=0; j<NUMSCORE-1; j++) 175 { 176 if(score[i][j]>=90) 177 excellentNum[j]++; 178 } 179 printf("%10s%10s%10s ","数学成绩","语文成绩","英语成绩"); 180 for(j=0; j<NUMSCORE-1; j++) 181 printf("%10d", excellentNum[j]); 182 printf(" "); 183 } 184 break; 185 case '6':/*按学号升序或降序排列实现*/ 186 printf("|---------------------------------------| "); 187 printf("| | "); 188 printf("| 排序菜单 | "); 189 printf("| | "); 190 printf("|---------------------------------------| "); 191 printf("| | "); 192 printf("| 1——按学号升序排列 | "); 193 printf("| 2——按学号降序排列 | "); 194 printf("|---------------------------------------| "); 195 196 printf("请输入选项编号(1 ~2): "); 197 fflush(stdin); 198 scanf("%c",&subItem); 199 200 switch(subItem) 201 { 202 case '1': 203 if(currentNumStu<2) 204 { 205 printf("成绩表中少于2人则不做排序! "); 206 } 207 else 208 { 209 /*按学号升序排列*/ 210 for(i=0;i<currentNumStu-1;i++) 211 for(j=i+1; j<currentNumStu; j++) 212 { 213 if(no[i]>no[j]) 214 { 215 tempNo=no[i]; 216 no[i]=no[j]; 217 no[j]=tempNo; 218 strcpy(tempName,name[i]); 219 strcpy(name[i],name[j]); 220 strcpy(name[j],tempName); 221 for(l=0; l<NUMSCORE; l++) 222 { 223 k=score[i][l]; 224 score[i][l]=score[j][l]; 225 score[j][l]=k; 226 } 227 } 228 } 229 printf("排序结束,请选择菜单项显示信息! "); 230 } 231 break; 232 case '2': 233 if(currentNumStu<2) 234 { 235 printf("成绩表中少于2人则不做排序! "); 236 } 237 else 238 { 239 /*按学号降序排列*/ 240 for(i=0;i<currentNumStu-1;i++) 241 for(j=i+1; j<currentNumStu; j++) 242 { 243 if(no[i]<no[j]) 244 { 245 tempNo=no[i]; 246 no[i]=no[j]; 247 no[j]=tempNo; 248 strcpy(tempName,name[i]); 249 strcpy(name[i],name[j]); 250 strcpy(name[j],tempName); 251 for(l=0; l<NUMSCORE; l++) 252 { 253 k=score[i][l]; 254 score[i][l]=score[j][l]; 255 score[j][l]=k; 256 } 257 } 258 } 259 printf("排序结束,请选择菜单项显示信息! "); 260 } 261 break; 262 default:printf("非法输入 "); 263 } 264 break; 265 case '7':/*显示学生信息*/ 266 if(currentNumStu==0) 267 { 268 printf("无学生记录,请创建成绩单! "); 269 } 270 else 271 { 272 printf("学生信息如下: "); 273 printf("%15s%15s%10s%10s%10s%10s ","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩"); 274 for(i=0; i<currentNumStu; i++) 275 { 276 printf("%15lu",no[i]); 277 printf("%15s",name[i]); 278 for(j=0; j<NUMSCORE; j++) 279 printf("%10.1f", score[i][j]); 280 printf(" "); 281 } 282 } 283 break; 284 case '0':printf("您选择了“0——退出” ");break; 285 default:printf("非法输入 "); 286 } 287 288 }while(menuItem!='0'); 289 }