学生成绩管理系统
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct stu
{
int id;
char name[10];
int subnum;
char subname[10];
int score;
float credit;
}f[10000];
int x=0,n,choose,s=0,score=0,c;
long int id,subnum;
char name[10],subname[10];
void add() \\定义"添加"函数
{
printf("你要添加几个学生的成绩");
scanf("%d",&n); \\对添加的几个学生n赋值
printf("学号 姓名 课程编号 课程名称 成绩 学分\n");
n=n+s; \\计算共有几个学生
for (x=0;x<n;x++) \\在0~n之间循环
{
scanf ("%ld%s%ld%s%d%f",&f[x].id,&f[x].name,&f[x].subnum,&f[x].subname,&f[x].score,&f[x].credit);
\\对结构体中学生信息赋值
s++; \\循环一次学生人数增加一
}
for (x=0;x<s;x++) \\在0~s之间循环
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit); \\输出学生信息
}
FILE *fp;
fp=fopen("my.txt","wb");
for(x=0;x<s;x++)
fwrite(&f[x],sizeof(f[x]),1,fp);
fclose(fp);
}
void cut() \\定义"删除"函数
{
int y=0;
printf("1.按学号查找;2.按姓名查找\n");
scanf ("%d",&choose); \\为选择函数赋值
switch(choose)
{
case 1:
printf("输入学号:\n");
scanf ("%ld",&id); \\输入要查找的学号
for (x=0;x<s;x++)
{
if (f[x].id==id) \\判断数据里的学号与要查询的是否一致
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
}
printf("\n\n");
y++;
}
for (y=0;y<s;y++)
{
strcpy(f[y].name,f[y+1].name);
f[y].id=f[y+1].id;
f[y].subnum=f[y+1].subnum;
strcpy(f[y].subname,f[y+1].subname);
f[y].score=f[y+1].score;
f[y].credit=f[y+1].credit;
}s--;
for (x=0;x<s;x++)
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit); \\输出删除后的数据
}
printf("删除成功\n");break;
case 2:
printf ("输入姓名:");
scanf ("%s",&name); \\输入要查询的姓名
for (x=0;x<s;x++)
{
if (strcmp(f[x].name,name)==0) \\判断数据里的姓名与要查询的是否一致
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n"); printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
printf("\n\n");
}
y++;
}
for (y=0;y<s;y++)
{
strcpy(f[y].name,f[y+1].name);
f[y].id=f[y+1].id;
f[y].subnum=f[y+1].subnum;
strcpy(f[y].subname,f[y+1].subname);
f[y].score=f[y+1].score;
f[y].credit=f[y+1].credit;
}s--;
for (x=0;x<s;x++)
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit);
}
printf("删除成功\n");break;
}
FILE *fp;
fp=fopen("my.txt","wb");
for(x=0;x<s;x++)
fwrite(&f[x],sizeof(f[x]),1,fp);
fclose(fp);
}
void student()
{
printf ("1.按学号查找。2.按姓名查找。");
scanf ("%d",&choose); \\给查找条件赋值
switch(choose)
{
case 1:
printf("输入学号:\n");
scanf ("%ld",&id); \\输入学号
for (x=0;x<s;x++)
{
if (f[x].id==id) \\判断数据里的学号与要查询的是否一致
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n"); printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit); \\输出查询结果
}
}break;
case 2:
printf ("输入姓名:");
scanf ("%s",&name); \\输入姓名
for (x=0;x<s;x++)
{
if (strcmp(f[x].name,name)==0) \\判断数据里的学号与要查询的是否一致
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n");
printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit); \\输出查询结果
}
break;
}
}
}
void classes()
{
int sum=0,b=0;
float ave,c;
printf ("输入课程序号:\n");
scanf ("%ld",&subnum); \\输入课程序号
for (x=0;x<s;x++)
{
if(f[x].subnum==subnum) \\判断数据里课程序号和与查询序号是否一致
{
printf("学号\t姓名\t课程编号\t课程名称\t成绩\t学分\n"); printf("%ld\t%s\t%ld\t\t%s\t\t%d\t%.0f\n",f[x].id,f[x].name,f[x].subnum,f[x].subname,f[x].score,f[x].credit); \\输出查询结果
sum+=f[x].score; \\计算总成绩
}
ave=(float)sum/s; \\计算平均成绩
}
printf ("平均分:%.3f\n",ave);
for (x=0;x<s;x++)
{
if(f[x].score>=60) \\判断成绩是否超过60
b++; \\成绩超过60,人数加一
}
c=(float)b/s; \\计算及格率
printf("及格率:%.3f",c);
}
int main() \\主函数
{
unsigned a;
FILE *fp;
fp=fopen("my.txt","rb");
fread(&f[s],sizeof(f[s]),1,fp);
while(!feof(fp))
{
s++;
fread(&f[s],sizeof(f[s]),1,fp);
}
fclose(fp);
while(1)
{
printf("\n\n\n");
printf(" 成绩记录簿\n");
printf(" 1: 添 加\n");
printf(" 2: 删 除\n");
printf(" 3: 查学生成绩\n");
printf(" 4: 查班成绩表\n");
printf(" 0: 退 出\n");
printf(" 请输入数字选择: ");
scanf("%d",&a);
switch(a)
{
case 1: add(); break;
case 2: cut();break;
case 3:student();break;
case 4:classes(); break;
case 0:exit(0);
default: ;
}
}
}
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17635013.html