通过看资料码一些代码,是关于学生成绩统计的 请给点意见,谢谢!
请问一下如果我要把学生成绩保存在一个表格(或者数据库中)中,之后就对表格(或者数据库中)进行增删查功能就可以了 ,这样的话我需要怎么做,大家可以给点意见吗?# include <stdio.h>
# include <malloc.h>
# include <Windows.h>
# include <string.h>
struct person //定义结构体 包含姓名和各科成绩
{
char name[50];
float yuwen;
float shuxue;
float yingyu;
float huaxue;
float wuli;
float stu; //平均成绩
};
void input_stu(struct person *,int); //信息输入
void output_stu(struct person *,int); //信息输出
float avr_stu(struct person *,int,char name [50] ); //根据名字查询平均成绩
void paixu_stu(struct person *,int); //平均成绩进行学生成绩排序
void chaxun_stu(struct person *,int,char name [50] ); //根据名字查询成绩
int main(void)
{
int len;
int i,g;
// struct person *p ;
printf(" 欢迎使用学生管理系统: \n");
printf("请输入需要管理的学生个数 len=");
scanf("%d",&len);
printf("学生管理系统初始化中,请稍后!!!!\n");
struct person *p = (struct person *)malloc(sizeof(struct person )*len);
Sleep( 1000); //系统等待。其中Sleep中S需要大写 ,要不系统不认。
printf("学生管理系统已经完成,请使用!!!!\n");
F1: printf("请按照功能编号选择系统功能。\n");
printf("1学生信息输入 2学生信息输出 3 学生成绩查询 4按照平均成绩进行学生成绩排序 5 退出 \n");
printf("请选择系统功能(1-5):\n");
scanf("%d",&i);
switch (i)
{
case 1:
{
ff1: input_stu(p,len); // 学生信息输入
printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
scanf("%d",&g);
if(g == 0) goto ff1;
else goto F1;
break;
}
case 2:
{
ff2: output_stu(p,len); // 学生信息输出
printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
scanf("%d",&g);
if(g == 0) goto ff2;
else goto F1;
break;
}
case 3: // 成绩查询
{
char name[50];
ff3: printf("请输入需要查询成绩的学生名字\n");
scanf("%s",&name);
chaxun_stu(p,len,name);
printf("如果要查询该生平均成绩请按1,按其他数字则返回上级菜单\n");
scanf("%d",&g);
if(g == 1)
{
// pj = avr_stu(p,len,name);
printf("该学生的平均成绩是%f\n",avr_stu(p,len,name));
}
else goto fff1;
fff1: printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
scanf("%d",&g);
if(g == 0) goto ff3;
else goto F1;
break;
}
case 4:
{
ff4: paixu_stu(p,len); // 平均成绩进行学生成绩排序
printf("如果需要继续服务请按0,按其他数字则返回主菜单\n");
scanf("%d",&g);
if(g == 0) goto ff4;
else goto F1;
break;
}
case 5:
{
goto F2;
break;
}
}
// input_stu(p,len); // 程序调用
// output_stu(p,len);
F2: free(p);
return 0;
}
// 学生 信息输入
void input_stu(struct person *q,int i)
{
int j = 0;
// float stu[5] = {0};
// float k;
for (j = 0; j < i; ++j)
{
printf("请输入第%d学生姓名:",j+1);
scanf("%s", &q[j].name);
printf("请输入语文成绩:");
scanf("%f",&q[j].yuwen);
// stu[0] = q[j].yuwen;
printf("请输入数学成绩:");
scanf("%f",&q[j].shuxue);
// stu[1] = q[j].shuxue;
printf("请输入英语成绩:");
scanf("%f",&q[j].yingyu);
// stu[2] = q[j].yingyu;
printf("请输入化学成绩:");
scanf("%f",&q[j].huaxue);
// stu[3] = q[j].huaxue;
printf("请输入物理成绩:");
scanf("%f",&q[j].wuli);
// stu[4] = q[j].wuli;
// k = avr_stu(stu,4);
// q[j].stu = k ;
// avr_stu(stu,4);
// printf("各科平均成绩是%f:",k);
}
}
//学生信息输出
void output_stu(struct person *q,int i)
{
int j;
for (j = 0; j < i; ++j)
{
printf("第%d学生姓名是%s:\n",j+1,q[j].name);
printf("语文成绩%f:\n",q[j].yuwen);
printf("数学成绩%f:\n",q[j].shuxue);
printf("英语成绩%f:\n",q[j].yingyu);
printf("化学成绩%f:\n",q[j].huaxue);
printf("物理成绩%f:\n",q[j].wuli);
// printf("成绩%f:\n",q[j].stu);
}
}
float avr_stu(struct person *q,int i,char name [50])
{
float t;
int j;
for (j = 0; j < i; j++)
{
if(! strcmp(name,q[j].name)) //用字符串比较函数 查找相同的名字后输出
{
t = (q[j].huaxue + q[j].shuxue + q[j].wuli + q[j].yingyu + q[j].yuwen)/5;
// printf("该学生的平均成绩是%f",t);
}
}
return t;
}
void chaxun_stu(struct person *q,int i,char name [50])
{
int j;
for (j = 0; j < i; j++)
{
if(! strcmp(name,q[j].name)) //用字符串比较函数 查找相同的名字后输出
{
printf("该学生姓名是%s:\n",q[j].name);
printf("语文成绩%f:\n",q[j].yuwen);
printf("数学成绩%f:\n",q[j].shuxue);
printf("英语成绩%f:\n",q[j].yingyu);
printf("化学成绩%f:\n",q[j].huaxue);
printf("物理成绩%f:\n",q[j].wuli);
}
}
}
void paixu_stu(struct person * q, int i)
{
int j,k;
int d = 1;
float m;
// float paixu[i] = {0};
float *paixu = (float *)malloc(sizeof(float )*i); // 定义一个数组存放每个学生的平均成绩
struct person p ;
for (j = 0 ; j < i ; ++j)
{
paixu[j] = (q[j].huaxue + q[j].shuxue + q[j].wuli + q[j].yingyu + q[j].yuwen)/5;
}
// 通过冒泡排序方法 对平均成绩数组排序 ,同时也对学生成绩进行排序。
for (j = 0 ; j < i ; ++j )
{
for (k = 0 ; k < i-j-1 ; ++k )
{
if (paixu[k] < paixu[k+1])
{
m = paixu[k];
paixu[k] = paixu[k+1];
paixu[k+1] = m;
p = q[k];
q[k] = q[k+1];
q[k+1] = p;
}
}
}
for (j = 0 ; j < i ; ++j)
{
// printf("第%d名是%s\n",j+1,q[j].name);
printf("第%d名是%s,平均成绩是%f\n",j+1,q[j].name,avr_stu(q,i,q[j].name));
}
free(paixu);
}