简易教学管理系统的设计与实现------半年学习的果子
简易教学管理系统的设计与实现------半年学习的果子用C-FREE写的。在论坛看了看,好像好多人都没学多少章节 ,但是学过的都比我们从课本上学的深呐,
哎,学校开的C只有半年的课就完了,以后怎么搞噢~~~~!!
#define M 25
#define N 6
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct student
{
int num;
char name[20];
int score[N];
float ave;
}st[M];
struct kecheng
{
int num;
char kcname[20];
float xuefen;
float ave;
double bzc;
}course[N];
struct tongji
{
int exc;
int good;
int mid;
int pass;
int nopass;
}tongji[N];
/* 读取数据文件 WL0114.txt */
void read_dat1()
{
int i,j;
char str1[100];
FILE *fp;
fp=fopen("D:\\WL0114.txt","r");
if(fp==0)
{
printf("cannot open");
exit(0);}
fgets(str1,10000,fp);
for(i=0;i<M;i++)
{
fscanf(fp,"%d%s",&st[i].num,st[i].name);
for(j=0;j<N;j++)
fscanf(fp,"%d",&st[i].score[j]);
}
fclose(fp);
}
/* 读取数据文件 WL01kc.txt */
void read_dat2()
{
FILE *fp;
int k;
char str2[100];
fp=fopen("D:\\WL01kc.txt","r");
if(fp==0)
{
printf("cannot open");
exit(0);
}
fgets(str2,100,fp);
for(k=0;k<N;k++)
fscanf(fp,"%d%s%f",&course[k].num,course[k].kcname,&course[k].xuefen);
fclose(fp);
}
/* 计算每名学生N门课的加权平均分*/
void jqave()
{ FILE *fp; /* ******自动创建CTJ0114.txt文件********/
fp=fopen("D:\\CTJ0114.txt","w");
fprintf(fp,"名次 学号 姓名 英语 C语言 线性代数 离散数学 高等数学 密码学 平均成绩\n");
fclose(fp);
int i,j;
float s=0,sum;
for(i=0;i<N;i++)
s+=course[i].xuefen;
for(i=0;i<M;i++)
{
sum=0;
for(j=0;j<N;j++)
sum+=st[i].score[j]*course[j].xuefen;
st[i].ave=(int)(sum*10.0/s+0.5)/10.0;
}
}
/* 计算每门课的平均分和标准差 */
void course_ave()
{
int i,j;
float sum;
for(i=0;i<N;i++)
{ sum=0;
for(j=0;j<M;j++)
sum+=st[j].score[i];
course[i].ave=sum/M; }
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<M;j++)
sum+=(st[j].score[i]-course[i].ave)*(st[j].score[i]-course[i].ave);
course[i].bzc=sqrt(sum/M);
}
}
/* 统计每门课的优 良 中 及格与不及格的情况 */
void course_tongji()
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(st[i].score[j]>=90) tongji[j].exc+=1;
else if(st[i].score[j]>=80)tongji[j].good+=1;
else if(st[i].score[j]>=70)tongji[j].mid+=1;
else if(st[i].score[j]>60)tongji[j].pass+=1;
else tongji[j].nopass+=1;
}
}
}
/* 利用函数course_tongji()的统计结果得到以下各课程成绩分布示意图 */
void course_tjpic()
{
int i,j;
printf("\n*******************************************************************************\n");
printf("\n 各课程成绩分布示意图\n");
printf("\n 0.返回主菜单 1.英语 2.C语言 3.线性代数 4.离散数学 5.高等数学 6.密码学.\n");
printf("\n*******************************************************************************\n");
while(1){
printf("输入课程编号(1-6):");
scanf("%d",&j);
switch(j){
case 1:case 2:case 3:case 4:case 5:case 6:{
printf("\t\t%10s 成绩分布示意图\n",course[j-1].kcname);
printf("优秀 :\t");for(i=0;i<M;i++)if(i<tongji[j-1].exc)printf("=");printf("\n");
printf("良好 :\t");for(i=0;i<M;i++)if(i<tongji[j-1].good)printf("=");printf("\n");
printf("中等 :\t");for(i=0;i<M;i++)if(i<tongji[j-1].mid)printf("=");printf("\n");
printf("及格 :\t");for(i=0;i<M;i++)if(i<tongji[j-1].pass)printf("=");printf("\n");
printf("不及格 :\t");for(i=0;i<M;i++)if(i<tongji[j-1].nopass)printf("=");printf("\n"); }break;
case 0: return;
default:printf(" 输入有误!\n");break;
}
}}
/* 统计不及格的学生并输出其信息 */
void st_tongji()
{
int i,j;
printf("\n学号 姓名 课程名称 学分 成绩\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(st[i].score[j]<60)
printf("\n%2d%10s%15s%10.1f%10d\n",st[i].num,st[i].name,course[j].kcname,course[j].xuefen,st[i].score[j]);
else continue;
}
}
}
/* 利用函数jqave()的结果对学生进行排名 */
int paim(float t)
{
int i,n=0;
for(i=0;i<M;i++)
{
if(t<st[i].ave) n++;
else continue;
} return n+1;
}
/* 统计优秀学生,并显示其信息 */
void st_tongji2()
{
int i,j;
printf("\n学号 姓名 英语 C语言 线性 离散 高数 密码学 平均分 名次\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(st[i].ave>=92||paim(st[i].ave)<=5||(st[i].ave>=88&&st[i].score[j]>=99))
{
printf("\n%2d%9s",st[i].num,st[i].name);
for(j=0;j<N;j++)
printf("%8d",st[i].score[j]);
printf("%10.1f%4d\n",st[i].ave,paim(st[i].ave));
}
else continue;
}
}
}
/* 将排名后的班级成绩单写入到 MC0114.txt */
void Write_cjd()
{
FILE *fp;
int i,j;
fp=fopen("D:\\MC0114.txt","w");
if(fp==0)
{
printf("Faile to build a new file !\n");
exit(0);
}
fprintf(fp,"名次 学号 姓名 英语 C语言 线性代数 离散数学 高等数学 密码学 平均成绩\n");
for(i=0;i<M;i++)
{
fprintf(fp,"%3d%4d%10s",paim(st[i].ave),st[i].num,st[i].name);
for(j=0;j<N;j++)
fprintf(fp,"%10d",st[i].score[j]);
fprintf(fp,"%10.1f\n",st[i].ave);
} printf("文件创建成功,完整路径:D:\\MC0114.txt\n\n");
fclose(fp);
}
/* 将统计每门课的优 良 中 及格与不及格的情况写入到 MC0114.txt */
void Write_course()
{
FILE *fp;
int i,j; float t;
fp=fopen("D:\\KC0114.txt","w");
if(fp==0)
{
printf("Faile to build a new file !\n");
exit(0);
}
fprintf(fp,"编号 课程名 平均分 标准差 优秀 良好 中等 及格 不及格\n");
for(i=0;i<N;i++)
fprintf(fp,"%d%10s%10.1f%10.1f%10d%10d%10d%10d%10d\n",course[i].num,course[i].kcname,course[i].ave,course[i].bzc,tongji[i].exc,tongji[i].good,tongji[i].mid,tongji[i].pass,tongji[i].nopass);
printf("文件创建成功,完整路径:D:\\KC0114.txt\n\n");
fclose(fp);
}
/*显示每名学生的成绩*/
void st_cjd()
{
FILE *fp;
int i,j;
fp=fopen("D:\\CTJ0114.txt","a");
printf("输入学生的学号:");
scanf("%d",&i);
if(i>=0&&i<=M)
{printf("名次 学号 姓名 英语 C语言 线性代数 离散数学 高等数学 密码学 平均成绩\n");
fprintf(fp,"%2d%4d%10s",paim(st[i-1].ave),st[i-1].num,st[i-1].name);
printf("%3d%4d%10s",paim(st[i-1].ave),st[i-1].num,st[i-1].name);
for(j=0;j<N;j++){fprintf(fp,"%8d",st[i-1].score[j]);
printf("%8d",st[i-1].score[j]);}
fprintf(fp,"%10.1f\n",st[i-1].ave);
printf("%10.1f\n",st[i-1].ave); fclose(fp);
printf("\n此学生成绩已经保存到了:D:\\CTJ0114.txt \n\n");
}
else {printf("无效学号 !\n");st_cjd();}
}
void main_chaxun()
{
int n;
printf("\n*******************************************************************************\n");
printf("\n 学生详细成绩查询系统\n");
printf("\n 1.输出指定学生的成绩 2.显示不及格名单 3.显示优秀生名单 4.返回主菜单.\n");
printf("\n*******************************************************************************\n");
while(1){ printf("执行查询命令:");
scanf("%d",&n);
switch(n)
{ case 1:st_cjd();break;
case 2:st_tongji();break;
case 3:st_tongji2();break;
case 4:return;
default:printf(" 输入有误!\n");break;
}}}
void main_menu()
{ int n;
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("\n 简易教学管理系统\n");
printf("\n1.创建班级成绩单 2.创建各课程成绩统计 3.学生成绩查询 4.课程成绩分布查询 5.退出.\n");
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
while(1){ printf(" 执行命令:");
scanf("%d",&n);
switch(n)
{ case 1:Write_cjd();break;
case 2:Write_course();break;
case 3:main_chaxun();main_menu();
case 4:course_tjpic();main_menu();
case 5:exit(0);
default:printf(" 输入有误!\n");break;
}}}
main()
{
read_dat1();
read_dat2();
jqave();
course_ave();
course_tongji();
main_menu();
}