简易教学管理系统的设计与实现------半年学习的果子
简易教学管理系统的设计与实现------半年学习的果子用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();
}
----------------解决方案--------------------------------------------------------
两个数据文件的内容
(1)两个数据文件 /* Wl0114.txt文件内容 */
学号 姓名 英语 C语言 线性代数 离散数学 高等数学 密码学
1 刘** 91 92 93 94 95 96
2 *** 85 92 67 75 93 86
3 *** 88 76 91 92 93 77
4 杨新 65 94 54 91 88 66
5 拓拔野 93 85 33 54 94 90
6 梁萧 90 94 89 90 92 91
7 程冬 69 98 92 59 58 90
8 周风 92 89 86 94 59 92
9 田小玉 89 78 92 88 70 74
10 秦羽 89 69 77 74 68 90
11 花小霜 90 92 93 91 89 78
12 柳莺莺 91 85 59 88 65 92
13 公羊羽 89 68 91 89 87 88
14 项少龙 88 77 66 55 87 94
15 董帅民 89 92 77 91 65 67
16 高进 88 56 88 78 69 89
17 花清啸 89 65 82 94 84 89
18 王小宝 69 58 44 24 33 55
19 谷慎 92 91 90 93 94 91
20 陆见 85 89 84 81 83 92
21 余敏津 59 91 80 85 85 84
22 梁文靖 85 84 94 92 93 94
23 万归藏 91 94 85 83 81 61
24 鸣人 85 57 93 94 58 68
25 武大 85 81 87 86 80 72
/* WL01LC.txt文件内容 */
编号 课程名称 课程学分
1 英语 6.0
2 C语言 4.0
3 线性代数 5.0
4 离散数学 4.5
5 高等数学 3.0
6 密码学 2.0
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
编译错误
----------------解决方案--------------------------------------------------------
编译错误?
你用的什么程序。要支持显示中文的
还有要在D盘放两个数据文件,第二个帖子里的
----------------解决方案--------------------------------------------------------