#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
# define SIZE1 33
# define SIZE2 7
# define PI 3.14159
struct student_grade //学生成绩
{
intnum; //学号
charname[10]; //姓名
floatgrd[7]; //成绩
floatave; //加权平均分
intmc; //名次
}gd[SIZE1],k; //结构体数组长度为全班人数
struct student_info //学生信息
{
intnum; //学号
charname[10]; //姓名
charsex[4]; //性别
intage; //年龄
charduty[10]; //职务
}info[SIZE1],l;
struct credits //课程学分
{
intnum; //编号
charsbj[10]; //课程名称
floatpnt; //学分
}pts[SIZE2];
int main()
{
intsection1();
intsection3();
char ch1;
do{
printf("\n\n\n\n\n\n\n\n\n");
printf(" ************** C语言程序设计上机实习****************\n");
printf(" ---------------------------------------------------------------------------\n\n");
printf(" 1 学生成绩管理\n\n");
printf(" 2 破译密码\n\n");
printf(" 3 显示心形\n\n");
printf(" 4 退 出\n\n");
printf(" 输入选择序号\n");
while((ch1=getchar(),ch1!='1'&&ch1!='2'&&ch1!='3'&&ch1!='4'));
switch(ch1)
{
case'1':section1(); break;
case'3':section3(); break;
case'4':return(0);
}
}while(1);
}
int section1()
{
void function1_1();
void function1_2();
void function1_3();
void function1_4();
void function1_5();
void function1_6();
void function1_7(); /*第1个2级菜单*/
char ch21;
do{
system("cls"); /*清屏*/
printf("\n\n\n\n\n\n\n\n\n\n");
printf(" *********************学 生 成 绩 管 理 系 统**********************\n");
printf(" ------------------------------------------------------------------------\n\n");
printf(" 1. 读入原始数据并显示 2. 计算平均分及名次\n\n");
printf(" 3. 输出课程平均分和各分数段人数 4 输出男生和女生课程平均成绩\n\n");
printf(" 5. 统计不及格情况 6. 输出优秀学生\n\n");
printf(" 7. 输出优秀学生干部 8. 返回上级菜单\n\n");
FILE*fp1,*fp2,*fp3;
int i,j;char str[100];
if((fp1=fopen("E:\\grade.txt","r"))==NULL)
{printf("cannot open file\n");
exit(0);}
fgets(str,100,fp1);
for(i=0;i<SIZE1;i++)
{
fscanf(fp1,"%d%s",&gd[i].num,gd[i].name);
for(j=0;j<SIZE2;j++)
fscanf(fp1,"%f",&gd[i].grd[j]);
}
fclose(fp1);
if((fp2=fopen("E:\\info.txt","r"))==NULL)
{printf("cannot open file\n");
exit(0);}
fgets(str,100,fp2);
for(i=0;i<SIZE1;i++)
fscanf(fp2,"%d%s%s%d%s",&info[i].num,info[i].name,info[i].sex,&info[i].age,info[i].duty);
fclose(fp2);
if((fp3=fopen("E:\\credits.txt","r"))==NULL)
{printf("cannot open file\n");
exit(0);}
fgets(str,100,fp3);
for(i=0;i<SIZE2;i++)
fscanf(fp3,"%d%s%f",&pts[i].num,pts[i].sbj,&pts[i].pnt);
fclose(fp3);
printf(" 输入选择序号\n");
while((ch21=getchar(),ch21!='1'&&ch21!='2'&&ch21!='3'&&ch21!='4'&&ch21!='5'&&ch21!='6'&&ch21!='7'&&ch21!='8'));
switch(ch21)
{
case'1' : function1_1(); break;
case'2' : function1_2(); break;
case'3' : function1_3(); break;
case'4' : function1_4(); break;
case'5' : function1_5(); break;
case'6' : function1_6(); break;
case'7' : function1_7(); break;
case'8' : return(0);
}
}while(1);
}
int section3() /*第3个2级菜单*/
{
voidfunction3_1();
char ch23;
do{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n");
printf(" *****************显示心形****************\n");
printf(" ---------------------------------------------------------\n");
printf(" 1. 运行\n\n");
printf(" 2. 返回上级菜单\n\n");
printf(" 输入选择序号\n");
while((ch23=getchar(),ch23!='1'&& ch23!='2'));
switch(ch23)
{
case'1' : function3_1(); break;
case'2' : return(0);
}
}while(1);
}
void function1_1() // 读入原始数据并显示
{
printf("加入读入原始数据并显示的程序内容\n");
int i,j;
printf(" 学号 姓名 高数 听力 英语 毛概 近代 体育 形式\n");
for(i=0;i<SIZE1;i++)
{
printf("%10d %12s",gd[i].num,gd[i].name);
for(j=0;j<SIZE2;j++)
printf("%6.2f ",gd[i].grd[j]);
printf("\n");
}
printf("\n\n");
printf(" 学号 姓名 性别 年龄 职务\n");
for(i=0;i<SIZE1;i++)
printf("%10d %12s %s %4d%12s\n",info[i].num,info[i].name,info[i].sex,info[i].age,info[i].duty);
printf("\n\n");
printf("编号 课程 学分\n");
for(i=0;i<SIZE2;i++)
printf("%d %s %f\n",pts[i].num,pts[i].sbj,pts[i].pnt);
printf(" *********按Enter键继续**********\n");
getchar();getchar();
}
void function1_2() //计算平均分及名次
{
printf("加入计算平均分及名次的程序内容\n");
int i,j;FILE *fp;
for(i=0;i<SIZE1;i++)
{
floatsum=0,n=0;
for(j=0;j<SIZE2;j++)
{
sum=sum+gd[i].grd[j]*pts[j].pnt;
n=n+pts[j].pnt;
}
gd[i].ave=sum/n;
}
for(j=0;j<SIZE1;j++)
for(i=0;i<SIZE1-j;i++)
if(gd[i].ave<gd[i+1].ave)
{
k=gd[i];
gd[i]=gd[i+1];
gd[i+1]=k;}
for(i=0;i<SIZE1;i++)
gd[i].mc=i+1;
if((fp=fopen("E:\\mc.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fprintf(fp,"学号 姓名 高数 听力 英语 毛概 近代 体育 形式 平均分名次\n");
for(i=0;i<SIZE1;i++)
{
fprintf(fp,"%10d %6s",gd[i].num,gd[i].name);
for(j=0;j<SIZE2;j++)
fprintf(fp,"%6.2f ",gd[i].grd[j]);
fprintf(fp,"%6.2f %d\n",gd[i].ave,gd[i].mc);
}
fclose(fp);
printf("学号 姓名 高数 听力 英语 毛概 近代 体育 形式 平均分 名次\n");
for(i=0;i<SIZE1;i++)
{
printf("%10d %6s",gd[i].num,gd[i].name);
for(j=0;j<SIZE2;j++)
printf("%6.2f ",gd[i].grd[j]);
printf("%6.2f %d\n",gd[i].ave,gd[i].mc);
}
printf(" *********按Enter键继续**********\n");
getchar(); getchar();
}
void function1_3()
{
printf("加入计算课程平均分和分数段人数程序内容\n");
inti,j,k=0,rs[SIZE2][5]={0};
floatve[SIZE2]={0};
FILE*fp;
for(i=0;i<SIZE2;i++)
for(j=0;j<SIZE1;j++)
if(gd[j].grd[i]>=90)
rs[i][0]++;
else if(gd[j].grd[i]>=80)
rs[i][1]++;
else if(gd[j].grd[i]>=70)
rs[i][2]++;
else if(gd[j].grd[i]>=60)
rs[i][3]++;
else
rs[i][4]++;
for(i=0;i<SIZE2;i++)
{
{
for(j=0;j<SIZE1;j++)
ve[k]+=gd[j].grd[i];
}
ve[k]/=SIZE1;k++;
}
if((fp=fopen("E:\\chengji.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fprintf(fp,"分数段 高数 听力 英语 毛概 近代 体育 形式\n");
fprintf(fp,">=90 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%8d",rs[i][0]);
fprintf(fp,"\n");
fprintf(fp,"80~90 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%8d",rs[i][1]);
fprintf(fp,"\n");
fprintf(fp,"70~80 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%8d",rs[i][2]);
fprintf(fp,"\n");
fprintf(fp,"60~70 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%8d",rs[i][3]);
fprintf(fp,"\n");
fprintf(fp,"<60 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%8d",rs[i][4]);
fprintf(fp,"\n");
fprintf(fp,"课程平均分 ");
for(i=0;i<SIZE2;i++)
fprintf(fp,"%.2f ",ve[i]);
fclose(fp);
printf("分数段 高数 听力 英语 毛概 近代 体育 形式\n");
printf(">=90 ");
for(i=0;i<SIZE2;i++)
printf("%8d",rs[i][0]);
printf("\n");
printf("80~90 ");
for(i=0;i<SIZE2;i++)
printf("%8d",rs[i][1]);
printf("\n");
printf("70~80 ");
for(i=0;i<SIZE2;i++)
printf("%8d",rs[i][2]);
printf("\n");
printf("60~70 ");
for(i=0;i<SIZE2;i++)
printf("%8d",rs[i][3]);
printf("\n");
printf("<60 ");
for(i=0;i<SIZE2;i++)
printf("%8d",rs[i][4]);
printf("\n");
printf("课程平均分 ");
for(i=0;i<SIZE2;i++)
printf("%.1f ",ve[i]);
printf("\n *********按Enter键继续**********\n");
getchar();getchar();
}
void function1_4()
{
printf("加入计算男生和女生课程平均成绩程序内容\n ");
inti,j,k=0,l=0;
double m,sum;
double v1[7]={0},v2[7]={0};
FILE *fp3;
for(i=0;i<SIZE2;i++)
{
m=0;sum=0;
for(j=0;j<SIZE1;j++)
if(strcmp (info[j].sex,"男")==0)
{
sum+=gd[j].grd[i];
m++;
}
sum/=m;
v1[k]=sum;
k++;
}
for(i=0;i<SIZE2;i++)
{
m=0,sum=0;
for(j=0;j<SIZE1;j++)
if(strcmp(info[j].sex,"男")!=0)
{
sum+=gd[j].grd[i];
m++;
}
sum/=m;
v2[l]=sum;
l++;
}
if((fp3=fopen("E:\\nannv.txt","w"))==NULL)
{
printf("cannotopen file\n");
exit(0);
}
fprintf(fp3,"性别 高数 听力 英语 毛概 近代 体育 形式\n");
fprintf(fp3,"男 ");
for(i=0;i<SIZE2;i++)
fprintf(fp3,"%.2f ",v1[i]);
fprintf(fp3,"\n");
fprintf(fp3,"女 ");
for(i=0;i<SIZE2;i++)
fprintf(fp3,"%.2f ",v2[i]);
fprintf(fp3,"\n");
fclose(fp3);
printf("性别 高数 听力 英语 毛概 近代 体育 形式\n");
printf("男 ");
for(i=0;i<SIZE2;i++)
printf("%.2f ",v1[i]);
printf("\n");
printf("女 ");
for(i=0;i<SIZE2;i++)
printf("%.2f ",v2[i]);
printf("\n");
printf(" *********按Enter键继续**********\n");
getchar();getchar();
}
void function1_5()
{
printf("加入统计不及格情况程序内容\n");
inti,j;
FILE *lp;
for(i=0;i<SIZE1;i++)
if((lp=fopen("E:\\bujige.txt","w"))==NULL)
{
printf("can not open file\n");
exit(0);
}
fprintf(lp,"不及格科目 学号 姓名 分数\n");
for(j=0;j<SIZE2;j++)
for(i=0;i<SIZE1;i++)
if(gd[i].grd[j]<60)
fprintf(lp," %4s %8d%10s%6.2f\n",pts[j].sbj,gd[i].num,gd[i].name,gd[i].grd[j]);
fclose(lp);
printf("不及格科目 学号 姓名 分数\n");
for(j=0;j<SIZE2;j++)
for(i=0;i<SIZE1;i++)
if(gd[i].grd[j]<60)
printf(" %4s %8d%10s%6.2f\n",pts[j].sbj,gd[i].num,gd[i].name,gd[i].grd[j]);
printf(" *********按Enter键继续**********\n");
getchar();getchar();
}
void function1_6()
{
printf("加入输出优秀学生程序内容\n");
inti,j,m=0;
inta[]={0},b[]={0};
floatnum;
FILE*fp4;
if((fp4=fopen("E:\\yxxs.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<SIZE1;i++)
{
num=0;
for(j=0;j<SIZE2;j++)
num+=gd[i].grd[j];
gd[i].ave=num/SIZE2;
}
for(j=0;j<SIZE1;j++)
for(i=0;i<SIZE1-j;i++)
if(gd[i].ave<gd[i+1].ave)
{
k=gd[i];
gd[i]=gd[i+1];
gd[i+1]=k;
l=info[i];
info[i]=info[i+1];
info[i+1]=l;
}
for(i=0;i<SIZE1;i++)
gd[i].mc=i+1;
fprintf(fp4,"学号 姓名性别 职务 高数 听力 英语 毛概 近代 体育 形式 平均名次\n");
for(i=0;i<SIZE1;i++)
{
inta=0,b=0;
for(j=0;j<SIZE2;j++)
{
if(gd[i].grd[j]>=95)a++;
if(gd[i].grd[j]>=90) b++;
}
if(gd[i].ave>=90||gd[i].mc<=3||(gd[i].ave>=85&&(a>=0||b>=0)))
{
fprintf(fp4,"%10d%6s%4s%6s",gd[i].num,gd[i].name,info[i].sex,info[i].duty);
for(j=0;j<SIZE2;j++)
fprintf(fp4,"%6.2f",gd[i].grd[j]);
fprintf(fp4,"%6.2f%4d\n",gd[i].ave,gd[i].mc);
}
}
fclose(fp4);
printf("学号 姓名性别 职务 高数 听力 英语 毛概 近代 体育 形式 平均名次\n");
for(i=0;i<SIZE1;i++)
{
inta=0,b=0;
for(j=0;j<SIZE2;j++)
{
if(gd[i].grd[j]>=95)a++;
if(gd[i].grd[j]>=90) b++;
}
if(gd[i].ave>=90||gd[i].mc<=3||(gd[i].ave>=85&&(a>=1||b>=2)))
{
printf("%10d%6s%4s%6s",gd[i].num,gd[i].name,info[i].sex,info[i].duty);
for(j=0;j<SIZE2;j++)
printf("%6.2f",gd[i].grd[j]);
printf("%6.2f%4d\n",gd[i].ave,gd[i].mc);
}
}
printf("*********按Enter键继续**********\n");
getchar();getchar();
}
void function1_7()
{
printf("加入输出优秀学生干部程序内容\n");
int i,j,m=0;
floatnum;
char str[100];
FILE *fp4;
if((fp4=fopen("E:\\yxgb.txt","w"))==NULL)
{printf("cannot open file\n");
exit(0);}
for(i=0;i<SIZE1;i++)
{num=0;
for(j=0;j<SIZE2;j++)
num+=gd[i].grd[j];
gd[i].ave=num/7.0;
}
for(j=0;j<SIZE1;j++)
for(i=0;i<SIZE1-j;i++)
if(gd[i].ave<gd[i+1].ave)
{
k=gd[i];
gd[i]=gd[i+1];
gd[i+1]=k;
l=info[i];
info[i]=info[i+1];
info[i+1]=l;
}
for(i=0;i<SIZE1;i++)
gd[i].mc=i+1;
fprintf(fp4," 优秀学生干部名单 \n");
fprintf(fp4,"学号 姓名 性别 职务 高数 听力 英语 毛概 近代 体育 形式 平均名次\n");
for(i=0;i<SIZE1;i++)
{
inta=0,b=0;
for(j=0;j<SIZE2;j++)
{
if(gd[i].grd[j]>=95)a++;
if(gd[i].grd[j]>=90) b++;
}
if(((strcmp(info[i].duty,"无")!=0)&&(gd[i].ave>=85||gd[i].mc<=SIZE1*0.2||(gd[i].ave>=80&&(a>=1||b>=2)))))
{
fprintf(fp4,"%9d%7s%3s%9s",gd[i].num,gd[i].name,info[i].sex,info[i].duty);
for(j=0;j<SIZE2;j++)
fprintf(fp4,"%6.2f",gd[i].grd[j]);
fprintf(fp4,"%6.2f%3d\n",gd[i].ave,gd[i].mc);
}
}
fclose(fp4);
printf(" 优秀学生干部名单 \n");
printf("学号 姓名 性别 职务 高数 听力 英语 毛概 近代 体育 形式 平均名次\n");
for(i=0;i<SIZE1;i++)
{
inta=0,b=0;
for(j=0;j<SIZE2;j++)
{
if(gd[i].grd[j]>=95)a++;
if(gd[i].grd[j]>=90) b++;
}
if(((strcmp(info[i].duty,"无")!=0)&&(gd[i].ave>=85||gd[i].mc<=SIZE1*0.2||(gd[i].ave>=80&&(a>=1||b>=2)))))
{
printf("%9d%7s%3s%9s",gd[i].num,gd[i].name,info[i].sex,info[i].duty);
for(j=0;j<SIZE2;j++)
printf("%6.2f",gd[i].grd[j]);
printf("%6.2f%3d\n",gd[i].ave,gd[i].mc);
}
}
printf("*********按Enter键继续**********\n");
getchar();getchar();
}
void function3_1()
{
printf("加入显示心形的程序内容\n");
inti,j,q,x,y;
doubles,r;
char cs[52][50];
for(i=0;i<50;i++)
for(j=0;j<50;j++)
cs[i][j]=' ';
for(q=0;q<=360;q++)
{
s=q*PI/180;
r=20*(1-sin(s));
y=r*cos(s)+26;
x=5-r*sin(s);
cs[x][y]='\H';
}
for(i=0;i<50;i++)
{
for(j=0;j<52;j++)
printf("%c",cs[i][j]);
printf("\n");
}
printf(" *********按Enter键继续**********\n");
getchar();getchar();
}