学生成绩管理系统

GFDFGYFG 2016-12-18 11:20:23
#include "stdio.h"
#include "string.h"
#define N 100 /*学生数量*/
struct student
{
char num[6];
char name[8];
int score[4];
int CourseCredit[4];
double zhscore;
}stu[N];
save(int n) /*保存文件函数*/
{ FILE *fp;
int i;
fp=fopen("achievement,txt","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
}
count() /*统计记录个数*/
{ FILE *fp;
int i;
fp=fopen("stud","rb");
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
return(i-1);
}
void zhscore(int n) /*计算每个学生的综合成绩*/
{
int i,j,s,zxf,sum;
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<4;j++)
s=stu[i].score[j]*stu[i].CourseCredit[j];
zxf+=stu[i].CourseCredit[j];
sum+=s;
stu[i].zhscore=sum/zxf;
}
}
void creat() /*录入学生原始数据并写入磁盘文件*/
{
int i,j,n;
printf("请输入首次输入记录的数量:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n请输入第%d个学生数据:\n",i+1);
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%S",stu[i].name);
for(j=0;j<4;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&stu[i].score[j]);
printf("学分%d:",j+1);
scanf("%d",&stu[i].CourseCredit[j]);
}
}
zhscore(n);
save(n);
}
void show() /*显示学生数据*/
{
int i,j,n;
n=count();
printf("\n\n--------------------学生信息表----------------------\n\n");
printf("学号\t姓名\t成绩1\t学分1\t成绩2\t学分2\t成绩3\t学分3\t成绩4\t学分4\t综合成绩\n");
for(i=0;i<n;i++)
{ printf("%s\t%s\t",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("%d\t%d\t",stu[i].score[j],stu[i].CourseCredit[j]);
printf("%.2If",stu[i].zhscore);
printf("\n");
}
}
void search() /*查找学生数据并显示*/
{
int i,j,n,k=-1;
struct student s;
n=count();
printf("请输入要查找的学生的学号:\n");
scanf("%s",&s.num);
for(i=0;i<n;i++)
if(strcmp(s.num,stu[i].num)==0)
{k=i;break;}
if (k==-1)printf("数据不存在\n");
else
{
printf("学号\t姓名\t成绩1\t学分1\t成绩2\t学分2\t成绩3\t学分3\t成绩4\t学分4\t综合成绩\n");
printf("%s\t%s\t",stu[k].num,stu[k].name);
for(j=0;j<4;j++)
printf("%d\t%d\t",stu[i].score[j],stu[i].CourseCredit[j]);
printf("%.2If",stu[i].zhscore);
printf("\n");
}
}
void sort() /*按个人综合成绩降序排序*/
{
int i,j,n;
struct student temp;
n=count();
for(i=0;i<n-1;i++) /*排序*/
for(j=i+1;j<n;j++)
if(stu[i].zhscore<stu[j].zhscore)
{ temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
printf("---------------学生信息表--------------\n");
printf("学号\t姓名\t成绩1\t学分1\t成绩2\t学分2\t成绩3\t学分3\t成绩4\t学分4\t综合成绩\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("%d\t%d\t",stu[i].score[j],stu[i].CourseCredit[j]);
printf("%.2If",stu[i].zhscore);
}
printf("\n\n");
}
void showmenu() /*显示菜单*/
{
printf("\n 学生成绩管理系统 \n");
printf("\n==========================================\n");
printf(" 1.录入学生数据 \n");
printf(" 2.显示学生数据 \n");
printf(" 3.查找学生数据 \n");
printf(" 4.排序学生数据 \n");
printf(" 0.退出系统 \n");
printf("============================================\n");
printf("\n请输入您的选择(0-4):");
}
main() /*主控函数*/
{
int choice;
showmenu();
scanf("%d",&choice);
while(choice!=0) /*选择0退出*/
{
switch(choice)
{
case 1:creat();break;
case 2:show();break;
case 3:search();break;
case 4:sort();break;
}
showmenu();
scanf("%d",&choice);
}
}
————————————————————————————————————————————————————————
一个学生成绩管理系统,报错0错误可以运行,但是录入成绩后到第二步就会出行退出程序,可以帮我看看那里有问题吗
...全文
248 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-12-19
  • 打赏
  • 举报
回复
帮你调试了下发现,你应该是count函数有问题
你打开文件失败了,fp = fopen("stud", "rb");这句,应该是stud.txt什么的吧?
PS:注意细节,你save函数里fp = fopen("achievement,txt", "wb");的achievement,txt应该是achievement.txt
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2016-12-18
  • 打赏
  • 举报
回复
void zhscore(int n) /*计算每个学生的综合成绩*/ { int i,j,s,zxf,sum; for(i=0;i<n;i++) { sum=0; for(j=0;j<4;j++) s=stu[i].score[j]*stu[i].CourseCredit[j]; zxf+=stu[i].CourseCredit[j]; sum+=s; stu[i].zhscore=sum/zxf; } } 你的这个函数,第一次执行zxf+=stu[i].CourseCredit[j]; 这句时,zxf还没有初始化就使用了
GFDFGYFG 2016-12-18
  • 打赏
  • 举报
回复
初始化了咋还是这状况啊

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧