北京信息科技大学 课程设计报告
课程名称 C程序设计课程实践
题 目 学生考试成绩统计分析
指导教师
设计起止日期
设计地点
系 别 信息管理学院
专 业 __信息管理与信息系统_
姓名/学号
1. 课程实践目的: 通过本实践使学生对函数、数组、结构体、指针有更深入的了解,在实际应用中学会使用C语言编写程序解决具体问题。
| 2. 课程实践内容:
编写一程序,能实现对某班学生三门课程考试成绩(高数、英语、体育)的统计与分析,具体功能如下:
a) 能进行学生信息(学号、姓名)和三门课程成绩的录入; b) 能计算出总成绩的最高分、最低分、平均分; c) 能统计总成绩在各分值段的成绩比例及及格率,如下表所示: | | 270~300 | | 240~269 | | | | 210~239 | | 180~209 | | | 150~179 | | 149以下 | 及格率 | 成绩 | | 7 | 人 | | 16 | 人 | | | | 16 | 人 | | 19 | 人 | | | 12 | 人 | | 12 | 人 | 70.73% | 分布 | | 8.54% | 19.51% | 19.51% | 23.17% | 14.63% | 14.63% |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d) 可按总评成绩排序(降序),并在屏幕显示;
e) 能按学号或姓名查询某个学生的成绩信息; 要求:学生个人信息和成绩用结构体数组(学号、姓名、高数、英语、体育、总成绩)表示;每个功能都独立编写一个函数实现。
| 3. 实践步骤:
| 4. 实践总结:
|
-
- #include "conio.h"
- #include "stdio.h"
- #include "string.h"
- struct stu{
- char name[20];
- char xh[20];
- float score[20],zf,pj;}student[60];
- int clen=0;
- char course[10][20];
- FILE *fp;
- FILE *f;
- int len;
- main()
- {int i=0,j;
- textcolor(YELLOW);
- textbackground(10);
- zhuzuo();
- clrscr();
- if((fp=fopen("course.txt","r"))!=NULL)
- {while(!feof(fp))
- fgets(course[clen++],20,fp);
- for(i=0;course[i][0]!='\0';i++)
- {for(j=0;course[i][j]!='\0';j++)
- if(course[i][j]=='\n')course[i][j]='\0';} }
- else {printf(" 文件不存在,请创建course.txt文件!\n");
- printf("注意事项请参看readme.txt\n");
- delay(100000);
- delay(100000);
- exit(0);}
- chushihua();
- clen--;
- if(len>0)len--;
- while(1)
- {clrscr();
- printf(" --------成绩管理系统--------\n");
- printf(" -----1.输入--\n");
- printf(" -----2.输出--\n");
- printf(" -----3.查询--\n");
- printf(" -----4.求平均--\n");
- printf(" -----5.求总成绩--\n");
- printf(" -----6.排序--\n");
- printf(" -----7.删除--\n");
- printf(" -----8.插入--\n");
- printf(" -----9.修改--\n");
- printf(" -----0.退出--\n");
- printf(" -----------------------------\n");
- switch(getche())
- {case '1':shuru();break;
- case '2':shuchu();break;
- case '3':chaxun();break;
- case '4':qiuping();break;
- case '5':qiuzong();break;
- case '6':paixu();break;
- case '7':shanchu();break;
- case '8':charu();break;
- case '9':xiugai();break;
- case '0':chuwen();
- printf("\n\n 正在退出.....");delay(10000);
- exit(0);break;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;
- }
- }
- fcloseall();}
- shuru()
- {
- while(1)
- {clrscr();
- printf("--1.从屏幕输入--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':pinru();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}
-
- }}
- pinru()
- {char yn;
- int i,j;char name1[20],xh1[20];float p[15];
- while(1){
- q:clrscr();
- fflush(stdin);
- printf("请输入姓名:");
- gets(name1);
- printf("请输入学号:");
- gets(xh1);
- fflush(stdin);
- for(i=0;i<clen;i++)
- {printf("请输入%s成绩:",course[i]);
- scanf("%f",&p[i]);fflush(stdin);}
- if(name1[0]=='\0'||name1[0]=='\n'||xh1[0]=='\0'||xh1[0]=='\n')
- {printf("\n\n 输入错误,请按任意键重输!\n");getch();goto q;}
- printf("\n\n 确认要读入这些数据吗(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {strcpy(student[len].name,name1);
- strcpy(student[len].xh,xh1);
- for(i=clen-1;i>=0;i--)
- student[len].score[i]=p[i];
- len++;}
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- shuchu()
- {
- while(1)
- {clrscr();
- printf("--1.输出到屏幕--\n");
- printf("--2.输出到文件--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':chupin();break;
- case '2':chuwen();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}
- }
- }
- chupin()
- {char yn;
- int i,j,k=0,m=1;
- while(1)
- {clrscr();
- if(len==0)
- {printf("\n\n 无记录!\n");
- printf("按任意键返回...\n");
- getch();
- break;}
- a: printf("\nNO. 姓名 学号 ");
- for(i=0;i<clen;i++)
- printf("%s ",course[i]);
- printf("总成绩 平均分 \n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- for(j=0;j<clen;j++)
- printf("%-10.2f",student[k].score[j]);
- printf("%-10.2f%-10.2f",student[k].zf,student[k].pj);
- printf("\n\n");
- if(k%6==0&&k!=0){
- printf("按任意键继续....");
- getch();
- clrscr();
- k++;
- goto a;}}
- printf("\n\n\n 还想在浏览一遍吗(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;
- else {i=k=0;m=1;}
- }
- }
- chuwen()
- {char yn;
- int k;
- f=fopen("chengji.dat","wb+");
- for(k=0;k<len;k++)
- fwrite(&student[k],sizeof(struct stu),1,f);
- printf("\n\n\n 按任意键结束 ......");
- getch();
- fclose(f);}
- chaxun()
- {
- while(1)
- {clrscr();
- printf("--1.按学号查询--\n");
- printf("--2.按姓名查询--\n");
- printf("--3.按成绩查询--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':chaxue();break;
- case '2':chaxing(); break;
- case '3':chacheng(); break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}
- }}
- chaxue()
- {
- while(1){clrscr();
- printf(" ----1.精确查询----\n");
- printf(" ----2.模糊查询----\n");
- printf(" ----0.返回上一级菜单----\n");
- switch(getch())
- {case '1':jingxue();break;
- case '2':moxue();break;
- case '0':return;}}}
- jingxue()
- {int i,p=0;
- char xh1[20],yn;
- while(1)
- {clrscr();
- printf("\n 请输入要查询的学号:");
- gets(xh1);
- fflush(stdin);
- clrscr();
- printf(" 查询结果如下:\n");
- for(i=0;i<len;i++)
- if(strcmp(xh1,student[i].xh)==0)
- {p++; chashu(i,p); }
- if(p==0) printf("\n\n 无此记录!\n");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- moxue()
- {int i,j=0,k,p=0,flag,m=0;
- char xh1[20],yn;
- while(1)
- {clrscr();
- printf("\n 请输入要查询的学号或学号的子串:");
- gets(xh1);
- fflush(stdin);
- clrscr();
- printf(" 查询结果如下:\n");
- for(i=0;i<len;i++)
- {m=0;flag=0;
- while(student[i].xh[m]!='\0')
- {j=m;k=0;
- while(student[i].xh[j]==xh1[k])
- {j++;k++;
- if(xh1[k]=='\0') {flag=1;break;}}
- if(flag) {p++; chashu(i,p);break; }
- m++;}}
- if(p==0) printf("\n\n 无此记录!\n");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chaxing()
- {
- while(1){clrscr();
- printf(" ----1.精确查询----\n");
- printf(" ----2.模糊查询----\n");
- printf(" ----0.返回上一级菜单----\n");
- switch(getch())
- {case '1':jingxing();break;
- case '2':moxing();break;
- case '0':return;}}}
- jingxing()
- {int i,p=0;
- char xm1[20],yn;
- while(1)
- {clrscr();
- printf("\n 请输入要查询的姓名:");
- gets(xm1);
- fflush(stdin);
- clrscr();
- printf(" 查询结果如下:\n");
- for(i=0;i<len;i++)
- if(strcmp(xm1,student[i].name)==0)
- {p++; chashu(i,p); }
- if(p==0) printf("\n\n 无此记录!\n");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- moxing()
- {int i,j=0,k,p=0,flag,m=0;
- char xm1[20],yn;
- while(1)
- {clrscr();
- printf("\n 请输入要查询的姓名或姓名的子串:");
- gets(xm1);
- fflush(stdin);
- clrscr();
- printf(" 查询结果如下:\n");
- for(i=0;i<len;i++)
- {m=0;flag=0;
- while(student[i].name[m]!='\0')
- {j=m;k=0;
- while(student[i].name[j]==xm1[k])
- {j++;k++;
- if(xm1[k]=='\0') {flag=1;break;}}
- if(flag) {p++; chashu(i,p);break; }
- m++;}}
- if(p==0) printf("\n\n 无此记录!\n");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chacheng()
- {
- while(1){clrscr();
- printf(" ----1.查询平均分----\n");
- printf(" ----2.查询总成绩----\n");
- printf(" ---3.查询某门课成绩----\n");
- printf(" ----0.返回上一级菜单----\n");
- switch(getch())
- {case '1':chaping();break;
- case '2':chazong();break;
- case '3':chakecheng();break;
- case '0':return;}}}
- chaping()
- {
- clrscr();
- printf(" 总成绩查询\n");
- printf("\n 请选择以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成绩1,成绩2) \n");
- s: switch(getch())
- {case '1':dayu(-1,1);break;
- case '2':dadeng(-1,1);break;
- case '3':xiaoyu(-1,1);break;
- case '4':xiaodeng(-1,1);break;
- case '5':budeng(-1,1);break;
- case '6':deng(-1,1);break;
- case '7':between(-1,1);break;
- default:printf("按键错误,请按任意键返回重选择功能!");
- getch();goto s;}
- }
- chazong()
- {
- clrscr();
- printf(" 平均分查询\n");
- printf("\n 请选择以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成绩1,成绩2) \n");
- s: switch(getch())
- {case '1':dayu(-1,2);break;
- case '2':dadeng(-1,2);break;
- case '3':xiaoyu(-1,2);break;
- case '4':xiaodeng(-1,2);break;
- case '5':budeng(-1,2);break;
- case '6':deng(-1,2);break;
- case '7':between(-1,2);break;
- default:printf("按键错误,请按任意键返回重选择功能!");
- getch();
- goto s;}}
- chakecheng()
- {int i=0,d,k=1;
- clrscr();
- printf(" 课程如下:\n");
- A: for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意键继续...");getch();i++;goto A;}}
- printf(" 请选择要求平均分的的课程编号");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n\n课程编号错误,请按任意键重输\n\n");
- getch();
- clrscr();
- goto A;}
- S: clrscr();
- printf("\n 请选择以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成绩1,成绩2) \n");
- switch(getch())
- {case '1':dayu(d-1,3);break;
- case '2':dadeng(d-1,3);break;
- case '3':xiaoyu(d-1,3);break;
- case '4':xiaodeng(d-1,3);break;
- case '5':budeng(d-1,3);break;
- case '6':deng(d-1,3);break;
- case '7':between(d-1,3);break;
- default:printf("按键错误,请按任意键返回重选择功能!");
- getch();
- goto S;}}
- dayu(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>cj)
- {p++;chashu(k,p);}}
- if(p==0) printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- dadeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>=cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiaoyu(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]<cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf<cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj<cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiaodeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]<=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf<=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj<=cj)
- {p++;chashu(i,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- budeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]!=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf!=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj!=cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- deng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("请输入要查询的%s成绩:",course[i]);
- else if(flag==2)printf("请输入要查询的总成绩:");
- else if(flag==1)printf("请输入要查询的平均成绩:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]==cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf==cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj==cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- between(int i,int flag)
- {int k,p=0;
- char yn;
- float cj1,cj2;
- while(1)
- {clrscr();p=0;
- printf("输入的 ”成绩1“ 一定要小于 “成绩2“\n");
- printf("请输入要查询的%s成绩1:",course[i]);
- scanf("%f",&cj1);
- printf("请输入要查询的%s成绩2:",course[i]);
- scanf("%f",&cj2);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>=cj1&&student[k].score[i]<=cj1)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>=cj1&&student[k].zf<=cj1)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>=cj1&&student[k].pj<=cj1)
- {p++;chashu(k,p);}}
- if(p==0)printf("无符合条件的记录!");
- printf("\n\n 还继续吗(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chashu(int i,int p)
- {int k;
- if(p%5==0){printf("按任意键继续.....");getch();clrscr();}
- printf("\nNO. 姓名 学号 ");
- for(k=0;k<clen;k++)
- printf("%s ",course[k]);
- printf("总成绩 平均分 \n");
- printf("%-4d%-18s%-18s",i+1,student[i].name,student[i].xh);
- for(k=0;k<clen;k++)
- printf("%-10.2f",student[i].score[k]);
- printf("%-10.2f%-10.2f",student[i].zf,student[i].pj);
- printf("\n\n");
- }
- qiuping()
- {
- while(1)
- {clrscr();
- printf("--1.求个人平均--\n");
- printf("--2.求集体平均--\n");
- printf("--3.某门课的平均--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':pingge();break;
- case '2':pingji();break;
- case '3':pingmen();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- pingmen()
- {int i=0,j,k=1,d;
- char yn;
- double zf1=0;
- while(1){
- clrscr();
- printf(" 课程如下:\n");
- A:for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意键继续...");getch();i++;goto A;}}
- f:printf(" 请选择要求平均分的的课程编号");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n课程编号错误,请按任意键重输\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- zf1+=student[i].score[d-1];
- printf("\n班级的%s平均分为:\n",course[d-1]);
- printf(" %-10.2f",zf1/len);
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}
- printf("\n\n按任意键返回菜单....");
- getch();
- }
-
- pingge()
- {int i,j,k=0,m=1;char yn;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- student[i].pj=student[i].zf/(clen-1);}
- printf("\n\n 计算完毕,输出吗(Y/N)");
- yn=getch();
- a:if(!(yn=='y'||yn=='Y'))
- return;
- else
- {printf("\nNO. 姓名 学号 平均分\n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- printf("%-10.2f",student[k].pj);
- printf("\n\n");
- if(k%8==0&&k!=0){
- printf("按任意键继续....");
- getch();
- clrscr();
- k++;
- goto a;}}
- printf("\n\n\n 还想在浏览一遍吗(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {k=0;m=1;clrscr();goto a;}}}
- pingji()
- {double zf1=0;
- int i,j;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];}
- for(i=0;i<len;i++)
- zf1+=student[i].zf;
- zf1/=(clen-1);
- printf("\n 正在计算,请稍后.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 班级平均分为:\n");
- printf(" %.4f",zf1);
- printf("\n\n按任意键返回菜单....");
- getch();}
-
-
- qiuzong()
- {while(1)
- {clrscr();
- printf("--1.求个人总成绩--\n");
- printf("--2.求集体总成绩--\n");
- printf("--3.某门课的总成绩--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':zongge();break;
- case '2':zongji();break;
- case '3':menzong();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- menzong()
- {int i=0,j,k=1,d;
- char yn;
- double zf1=0;
- while(1){
- clrscr();
- printf(" 课程如下:\n");
- A:for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意键继续...");getch();i++;goto A;}}
- f:printf(" 请选择要汇总的的课程编号");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n课程编号错误,请按任意键重输\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- zf1+=student[i].score[d-1];
- printf("\n班级的%s总成绩为:\n",course[d-1]);
- printf(" %-10.2f",zf1);
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}
- printf("\n\n按任意键返回菜单....");
- getch();
- }
-
-
- zongge()
- {int i,j,k=0,m=1;char yn;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- printf("\n\n 计算完毕,输出吗(Y/N)");
- yn=getch();
- a: if(!(yn=='y'||yn=='Y'))
- return;
- else
- {printf("\nNO. 姓名 学号 总成绩\n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- printf("%-10.2f",student[k].zf);
- printf("\n\n");
- if(k%8==0&&k!=0)
- {
- printf("按任意键继续....");
- getch();
- clrscr();
- k++;
- goto a;}}
-
- printf("\n\n\n 还想在浏览一遍吗(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {k=0;m=1;clrscr();goto a;}}}}
- zongji()
- {int i,j;char yn;
- double zf1=0;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- zf1+=student[i].zf;}
- printf("\n 正在计算,请稍后.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 班级总成绩为:\n");
- printf(" %.4f",zf1);
- printf("\n\n按任意键返回菜单....");
- getch();}
-
- shanchu()
- {
- while(1)
- {clrscr();
- printf("--1.删除整条记录--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':shanquan();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- shanquan()
- {int i,m,j;
- char yn;
- while(1)
- {clrscr();
- if(len==0){printf("\n 无记录! 按任意键结束..");getch();break;}
- printf("请输入要删除的记录号");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("\n\n 记录号错误,请按任意键重输");getch();continue;}
- printf("\n");
- printf("\n\n 确认要删出该记录吗(Y/N)\n");
- yn=getch();
- if(yn=='y'||yn=='Y')
- for(i=m-1;i<len;i++)
- {strcpy(student[i].name,student[i+1].name);
- strcpy(student[i].xh,student[i+1].xh);
- for(j=0;j<clen;j++)
- {student[i].score[j]=student[i+1].score[j];}
- student[i].pj=student[i+1].pj;
- student[i].zf=student[i+1].zf;
- printf("\n 正在删除.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 已删除!\n");
- len--;}
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- charu()
- {
- while(1)
- {clrscr();
- printf("\n-- 1.插入记录--\n");
- printf("-- 0.返回上一级菜单--\n");
- switch(getche())
- {case '1':cha();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- cha()
- {int i,m=0,j,flag;
- char yn;
- while(1)
- {clrscr();flag=0;
- if(len==0){printf("\n 无记录! 只能插在一号记录上\n");
- printf("\n\n 插入吗?(Y/N)\n");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else
- {flag=1;}}
- else{
- A: printf("请输入要插入的记录号位置");
- printf("(1--%d):",len+1);
- scanf("%d",&m);fflush(stdin);
- printf("\n确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- flag=1;}
- if(flag==1)
- if(m==0&&len==0)
- {len=1;
- printf("是否输入数据?(Y/N)");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else charushu(0);}
- else
- {if(m>len+1||m<1)
- {printf("\n\n 记录号错误,请按任意键重输!");getch();continue;}
- yidong(m-1);
- printf("是否输入数据?(Y/N)");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else charushu(m-1);}
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;
- }}
- yidong(int i)
- {int j,k;
- for(j=len;j>i;j--)
- {strcpy(student[j].name,student[j-1].name);
- strcpy(student[j].xh,student[j-1].xh);
- for(k=0;k<clen;k++)
- student[j].score[k]=student[j-1].score[k];
- student[j].zf=student[j-1].zf;
- student[j].pj=student[j].pj;}
- {strcpy(student[i].name,"");
- strcpy(student[i].xh,"");
- for(k=0;k<clen;k++)
- student[i].score[k]=0;
- student[i].zf=0;
- student[i].pj=0;}
- }
- charushu(int j)
- {int i;
- char name[20],xh[20];
- float score[20];
- char yn;
- while(1){clrscr();
- printf(" 请输入姓名:");
- gets(name);
- printf(" 请输入学号:");
- gets(xh);
- for(i=0;i<clen;i++)
- {printf(" 请输入%s成绩:",course[i]);
- scanf("%f",&score[i]);}
- printf("\n对输入的数据确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- {strcpy(student[j].name,name);
- strcpy(student[j].xh,xh);
- for(i=0;i<clen;i++)
- student[j].score[i]=score[i];
- break;}
- else
- {printf("\n 重新输入?(Y/N)\n");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}
- }}
- paixu()
- {while(1)
- {clrscr();
- printf("--1.按学号排序--\n");
- printf("--2.按姓名排序--\n");
- printf("--3.按成绩排序--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':xuepai();break;
- case '2':nmpai(); break;
- case '3':cjpai();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- xuepai()
- {int i,j,flag;
- char yn;
- a: clrscr();
- printf("-------按学号排序--------\n");
- printf("--1.按学号升序--\n");
- printf("--2.按学号降序--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按键错误,请按任意键返回重选功能.");
- getch();goto a;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(flag==1)
- { if(strcmp(student[j-1].name,student[j].name)>0)
- jiaohuan(j);}
- else
- if(strcmp(student[j-1].name,student[j].name)<0)
- jiaohuan(j);
- printf("\n\n 想看一下排序结果吗(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- nmpai()
- {int i,j,flag;char yn;
- a: clrscr();
- printf("-------按姓名排序--------\n");
- printf("--1.按姓名升序--\n");
- printf("--2.按姓名降序--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按键错误,请按任意键返回重选功能.");
- getch();goto a;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(flag==1)
- {if(strcmp(student[j-1].name,student[j].name)>0)
- jiaohuan(j);}
- else
- if(strcmp(student[j-1].name,student[j].name)<0)
- jiaohuan(j);
- printf("\n\n 想看一下排序结果吗(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- cjpai()
- {int k=1,d,i,m=0,j,flag;
- char yn;
- a: clrscr();
- printf("-------按成绩排序--------\n");
- printf("--1.按成绩升序--\n");
- printf("--2.按成绩降序--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按键错误,请按任意键返回重选功能.");
- getch();goto a;}
- printf("\n 课程如下:\n");
- A:for(;m<clen;m++)
- {printf("%d. %s\n",k++,course[m]);
- if((m+1)%10==0)
- {printf("\n 按任意键继续...");getch();m++;goto A;}}
- if((m+2)%10==0)
- {printf("\n 按任意键继续...");getch();goto A;}
- printf("%d. 平均分\n%d 总成绩\n",m+1,m+2);
- f:printf("\n\n 请选择要排序的的课程编号");
- printf("(1--%d):",clen+2);
- scanf("%d",&d);
- if(d>clen+2||d<1)
- {printf("\n课程编号错误,请按任意键重输\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(d==(clen+1))
- {if(flag==1)
- {if(student[j-1].pj>student[j].pj)
- jiaohuan(j);}
- else
- if(student[j-1].pj<student[j].pj)
- jiaohuan(j);}
- else if(d==(clen+2))
- {if(flag==1)
- {if(student[j-1].zf>student[j].zf)
- jiaohuan(j);}
- else
- if(student[j-1].zf<student[j].zf)
- jiaohuan(j);}
- else
- { if(flag==1)
- {if(student[j-1].score[d]>student[j].score[d])
- jiaohuan(j);}
- else
- if(student[j-1].score[d]<student[j].score[d])
- jiaohuan(j);}
- printf("\n\n 想看一下排序结果吗(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- jiaohuan(int j)
- {char p[20];
- int i;
- float f;
- strcpy(p,student[j].name);
- strcpy(student[j].name,student[j-1].name);
- strcpy(student[j-1].name,p);
- strcpy(p,student[j].xh);
- strcpy(student[j].xh,student[j-1].xh);
- strcpy(student[j-1].xh,p);
- for(i=0;i<clen;i++)
- {f=student[j].score[i];
- student[j].score[i]=student[j-1].score[i];
- student[j-1].score[i]=f;}
- f=student[j].pj;
- student[j].pj=student[j-1].pj;
- student[j-1].pj=f;
- f=student[j].zf;
- student[j].zf=student[j-1].zf;
- student[j-1].zf=f;
- }
- chushihua()
- {if((f=fopen("chengji.dat","rb"))!=NULL)
- {while(!feof(f))
- fread(&student[len++],sizeof(struct stu),1,f);
- fclose(f);
- }
- else {printf(" 文件不存在,请创建chengji.dat文件!\n");
- printf("注意事项请参看readme.txt\n");
- delay(100000);
- delay(100000);
- exit(0);}
- }
- xiugai()
- {while(1)
- {clrscr();
- printf("--1.修改学号--\n");
- printf("--2.修改姓名--\n");
- printf("--3.修改成绩--\n");
- printf("--4.全部修改--\n");
- printf("--0.返回上一级菜单--\n");
- switch(getche())
- {case '1':xiuxue();break;
- case '2':xiuxing(); break;
- case '3':xiucheng();break;
- case '4':xiuquan();break;
- case '0':return;
- default:printf("输入错误!\n");
- printf("请重选按键选择菜单.\n按任意键返回!\n");
- getche();
- continue;}}}
- xiuquan()
- {int i,m;
- char name[20],xh[20];
- float score[20];
- char yn;
- while(1){
- if(len==0){printf("无记录! 按任意键结束..");getch();break;}
- printf("请输入要修改的记录号");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("记录号错误,请按任意键重输");getch();continue;}
- printf("\n");
- printf("\n 姓名现有值为: %s\n",student[m-1].name);
- printf(" 请输入修改值:");
- gets(name);
- printf("\n 学号现有值为: %s\n",student[m-1].name);
- printf(" 请输入修改值:");
- gets(xh);
- for(i=0;i<clen;i++)
- {printf("\n %s现有值为: %f\n",course[i],student[m-1].score[i]);
- printf(" 请输入修改值:");
- scanf("%f",&score[i]);}
- printf("\n对输入的数据确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- {strcpy(student[m-1].name,name);
- strcpy(student[m-1].xh,xh);
- for(i=0;i<clen;i++)
- student[m-1].score[i]=score[i];}
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiucheng()
- {int i,m,d,k=1;
- float f;char yn;
- while(1)
- {clrscr();
- if(len==0){printf("无记录! 按任意键结束..");getch();break;}
- printf("请输入要修改的记录号");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("记录号错误,请按任意键重输");getch();continue;}
- printf("\n");
- A:for(i=0;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意键继续...");getch();k++;goto A;}}
- printf(" 请选择要修改的课程编号");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1){printf("课程编号错误,请按任意键重输");getch();continue;}
- printf("\n 现有值为:%.2f\n\n",student[m-1].score[d-1]);
- printf(" 请输入修改值:");
- scanf("%f",&f);
- printf("\n确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- student[m-1].score[d-1]=f;
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiuxue()
- {int i,m,d;
- char xue[20];char yn;
- while(1)
- {clrscr();
- if(len==0){printf("无记录! 按任意键结束..");getch();break;}
- printf("请输入要修改的记录号");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("记录号错误,请按任意键重输");getch();continue;}
- printf("\n");
- printf("\n 学号现有值为:%s\n\n",student[m-1].xh);
- printf(" 请输入修改值:");
- gets(xue);
- printf("\n确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- strcpy(student[m-1].xh,xue);
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiuxing()
- {int i,m,d;
- char nm[20];char yn;
- while(1)
- {clrscr();
- if(len==0){printf("无记录! 按任意键结束..");getch();break;}
- if(len==0){printf("无记录! 按任意键结束..");getch();break;}
- printf("请输入要修改的记录号");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("记录号错误,请按任意键重输");getch();continue;}
- printf("\n");
- printf("\n 姓名现有值为:%s\n\n",student[m-1].name);
- printf(" 请输入修改值:");
- gets(nm);
- printf("\n确定吗(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- strcpy(student[m-1].name,nm);
- printf("\n\n 还继续吗?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- zhuzuo()
- {clrscr();
- printf("\n\n\n\n\n ------------------------------------------\n");
- printf(" -----欢迎使用学生成绩管理系统-----\n");
- printf(" 版本:v1.0\n");
- printf(" 著作时间:2006.11.20\n");
- printf(" 作者:马万里\n");
- printf(" 地址:算计科学与工程学院\n");
- printf(" ------------------------------------------\n");
- printf(" 按任意键继续.....\n");
- getche();
- }
-
复制代码
完整的Word格式文档51黑下载地址:
C程序设计课程实践.doc
(43 KB, 下载次数: 13)
|