学生成绩管理系统
本程序可实现记录的输入,输出,查找,修改,文件存储,文件打开的功能。
1
1 #include<stdio.h> 2 #include<string.h> 3 #include<stack> 4 #include<string.h> 5 #include<queue> 6 #include<algorithm> 7 #include<stdlib.h> 8 #include<map> 9 #include<vector> 10 #define PI acos(-1.0) 11 using namespace std; 12 typedef long long ll; 13 map<ll,ll>::iterator it; 14 void file_save(); 15 void student_insert(); 16 FILE *fp; 17 struct student 18 { 19 int num; 20 char name[15]; 21 int score[3]; 22 double avr; 23 struct student *next; 24 struct student *before; 25 }; 26 struct student *p; 27 int num_stu=0; 28 void student_input()//学生信息输入 29 { 30 int i,j; 31 char ch; 32 puts("请逐个输入学生的基本信息"); 33 struct student *head,*tail,*q; 34 head=(struct student*)malloc(sizeof(struct student)); 35 head->next=NULL; 36 head->before=NULL; 37 tail=head; 38 while(1) 39 { 40 p=(struct student*)malloc(sizeof(struct student)); 41 scanf("%d %s %d %d %d",&p->num,&p->name,&p->score[0],&p->score[1],&p->score[2]); 42 p->avr=(p->score[0]+p->score[1]+p->score[2])/3.0; 43 p->next=NULL; 44 p->before=NULL; 45 tail->next=p; 46 p->before=tail; 47 tail=p; 48 puts("若继续请输入\'y\',否则输入‘n\'"); 49 num_stu++; 50 scanf(" %c",&ch); 51 if(ch==\'n\'||ch==\'N\') 52 break; 53 } 54 55 p=head; 56 file_save(); 57 } 58 void student_output()//学生信息输出 59 { 60 int i,j; 61 struct student *q; 62 q=p->next; 63 while(q) 64 { 65 printf("%d %s %d %d %d %lf\n",q->num,q->name,q->score[0],q->score[1],q->score[2],q->avr); 66 q=q->next; 67 } 68 } 69 void student_order()//按成绩排序 70 { 71 int i,j; 72 struct student *q,*t,*tail,*head,*ppq; 73 head=p; 74 ppq=p; 75 q=head; 76 for(i=0; i<num_stu-1; i++) 77 { 78 q=head->next; 79 while(q->next!=NULL) 80 { 81 t=q->next; 82 printf(" %d\n",t->num); 83 if(q->avr<t->avr) 84 { 85 86 tail=q->before; 87 tail->next=t; 88 q->next=t->next; 89 t->next=q; 90 } 91 else 92 q=q->next; 93 } 94 head=head->next; 95 } 96 97 while(ppq->next!=NULL) 98 { 99 t=ppq->next; 100 t->before=ppq; 101 ppq=ppq->next; 102 103 } 104 puts(""); 105 student_output(); 106 } 107 108 void file_save()//存储信息 109 { 110 char str[123]; 111 struct student *head,*q; 112 fp=fopen("c:\\111\\富哥.txt","w"); 113 head=p->next; 114 while(head) 115 { 116 fprintf(fp,"%d %s %d %d %d %lf\n",head->num,head->name,head->score[0],head->score[1],head->score[2],head->avr); 117 head=head->next; 118 } 119 fclose(fp); 120 } 121 void file_open(int ppq)//打开文件,读取学生信息 122 { 123 struct student *head,*q,*tail,*qq; 124 char str[123]; 125 p=(struct student*)malloc(sizeof(struct student)); 126 p->next=NULL; 127 tail=p; 128 fp=fopen("c:\\111\\富哥.txt","r"); 129 while(1) 130 { 131 qq=(struct student*)malloc(sizeof(struct student)); 132 fscanf(fp,"%d %s%d %d %d %lf",&qq->num,&qq->name,&qq->score[0],&qq->score[1],&qq->score[2],&qq->avr); 133 if(feof(fp)) 134 break; 135 qq->next=NULL; 136 tail->next=qq; 137 tail=qq; 138 } 139 if(ppq) 140 return; 141 q=p->next; 142 while(q) 143 { 144 printf("%d %s %d %d %d %lf\n",q->num,q->name,q->score[0],q->score[1],q->score[2],q->avr); 145 q=q->next; 146 } 147 fclose(fp); 148 } 149 void stuednt_insert()//学生信息插入 150 { 151 int i,j,m; 152 char ch; 153 file_open(1); 154 puts("如果你要添加的学生的基本信息请按1,否则按任意键结束"); 155 scanf("%d",&m); 156 if(m!=1) 157 return ; 158 while(1) 159 { 160 struct student *t,*s,*q,*head; 161 t=(struct student*)malloc(sizeof(struct student)); 162 scanf("%d %s %d %d %d",&t->num,&t->name,&t->score[0],&t->score[1],&t->score[2]); 163 t->avr=(t->score[0]+t->score[1]+t->score[2])/3.0; 164 t->next=NULL; 165 int flag=0,num=0; 166 q=p->next; 167 while(q) 168 { 169 num++; 170 if(t->avr>=q->avr) 171 { 172 head=q->next; 173 s=q->before; 174 s->next=t; 175 t->next=q; 176 q->before=t; 177 t->before=s; 178 q->next=head; 179 break; 180 } 181 if(num==num_stu) 182 { 183 q->next=t; 184 t->before=q; 185 break; 186 187 } 188 q=q->next; 189 } 190 num_stu++; 191 puts("若继续请输入\'y\',否则输入‘n\'"); 192 scanf(" %c",&ch); 193 q=p->next; 194 if(ch==\'n\'||ch==\'N\') 195 break; 196 } 197 puts(""); 198 student_output(); 199 file_save(); 200 } 201 void student_Delete()//记录删除 202 { 203 int i,j,m; 204 file_open(1); 205 char ch; 206 puts("请输入你要删除的学生的学号"); 207 int num,flag=0; 208 struct student *t,*s,*q,*tail; 209 while(1) 210 { 211 int l=0; 212 scanf("%d",&num); 213 q=p->next; 214 while(q->next!=NULL) 215 { 216 tail=q->next; 217 if(q->num==num) 218 { 219 flag=1; 220 t=q->before; 221 t->next=tail; 222 tail->before=t; 223 break; 224 } 225 struct student *t,*s,*q,*tail; 226 q=p->next; 227 q=q->next; 228 } 229 num_stu--; 230 if(!flag) 231 { 232 t=q->before; 233 t->next=NULL; 234 } 235 puts("若继续请输入\'y\',否则输入‘n\'"); 236 scanf(" %c",&ch); 237 if(ch==\'n\'||ch==\'N\') 238 break; 239 } 240 student_output(); 241 file_save(); 242 } 243 void student_search()//记录搜索 244 { 245 struct student *q; 246 file_open(1); 247 q=p; 248 while(1) 249 { 250 int stu_num,flag=0,m,n; 251 char stu_name[123]; 252 puts("如果你想用学号查询请按1,用姓名查询请按任意数字键"); 253 scanf(" %d",&m); 254 puts("请输入"); 255 if(m==1) 256 { 257 scanf("%d",&stu_num); 258 while(q) 259 { 260 if(q->num==stu_num) 261 { 262 printf("%d %s %d %d %d %lf\n",q->num,q->name,q->score[0],q->score[1],q->score[2],q->avr); 263 flag=1; 264 break; 265 } 266 q=q->next; 267 } 268 } 269 else 270 { 271 scanf("%s",&stu_name); 272 while(q) 273 { 274 if(strcmp(q->name,stu_name)==0) 275 { 276 printf("%d %s %d %d %d %lf\n",q->num,q->name,q->score[0],q->score[1],q->score[2],q->avr); 277 flag=1; 278 break; 279 } 280 q=q->next; 281 } 282 } 283 284 if(!flag) 285 puts("对不起,您查早的人不存在"); 286 puts("如果您想继续查询请按1,否则按任意键退出"); 287 scanf("%d",&n); 288 if(n!=1) 289 return; 290 } 291 } 292 void student_revise()//记录修订 293 { 294 char stu_name[123]; 295 struct student *q,*t,*pp; 296 file_open(1); 297 puts("请输入您要修改的学生姓名"); 298 scanf(" %s",&stu_name); 299 while(1) 300 { 301 int flag=0,n; 302 q=p->next; 303 puts("请重新输入该学生的所有信息"); 304 t=(struct student*)malloc(sizeof(struct student)); 305 scanf("%d %s %d %d %d",&t->num,&t->name,&t->score[0],&t->score[1],&t->score[2]); 306 while(q) 307 { 308 if(strcmp(q->name,stu_name)==0) 309 { 310 311 q->avr=t->avr; 312 strcpy(q->name,t->name),q->num=t->num,q->score[0]=t->score[0],q->score[1]=t->score[1],q->score[2]=t->score[2]; 313 student_order(); 314 flag=1; 315 break; 316 } 317 q=q->next; 318 } 319 if(!flag) 320 puts("对不起,您要修改的人的信息不存在"); 321 puts("如果您想继续查询请按1,否则按任意键退出"); 322 scanf("%d",&n); 323 if(n!=1) 324 break; 325 } 326 file_save(); 327 } 328 void func_choice()//功能介绍 329 { 330 printf("\t\t╭═════════■□■□═══╮\n"); 331 printf("\t\t│ 学生信息管理系统 │\n"); 332 printf("\t\t╰═══■□■□══════════╯\n"); 333 printf("\t\t ┌─────────────-┐\n"); 334 printf("\t\t │ 1. 输入记录 2. 显示记录 │\n"); 335 printf("\t\t │ │\n"); 336 printf("\t\t │ 3. 信息查询 4. 插入记录 │\n"); 337 printf("\t\t │ │\n"); 338 printf("\t\t │ 5. 修改记录 6. 删除记录 │\n"); 339 printf("\t\t │ │\n"); 340 printf("\t\t │ 0. 退出程序 │\n"); 341 printf("\t\t └─────────────-┘\n"); 342 printf("\t\t请您选择(0-6):"); 343 while(1) 344 { 345 int m; 346 scanf("%d",&m); 347 switch(m) 348 { 349 case 0: 350 exit(0); 351 break; 352 case 1: 353 student_input(); 354 break; 355 case 2: 356 file_open(0); 357 break; 358 case 3: 359 student_search(); 360 break; 361 case 4: 362 //student_insert(); 363 break; 364 case 5: 365 student_revise(); 366 break; 367 case 6: 368 student_Delete(); 369 break; 370 } 371 puts("本次查询结束"); 372 } 373 } 374 int main() 375 { 376 func_choice(); 377 }