| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 417 人关注过本帖
标题:我也编写了一个学生成绩管理系统,可是怎么都有错,求高手帮忙看一下,谢谢
只看楼主 加入收藏
stig3
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-25
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
我也编写了一个学生成绩管理系统,可是怎么都有错,求高手帮忙看一下,谢谢
#include<stdio.h>
#include<string.h>
#define SIZE 30
#define FORMAT "%7d %-20s %4d  %4d  %4d  %4d\n"
struct student
{int num;
 char name[20];
 float score[4];
 float average;
 int rank;
 }
struct student stu[SIZE],sort[SIZE],fail[SIZE],good[SIZE];       /*结构体*/
void save()
 {FILE*fp;
  fp=fopen("stu_dat","wb");                               /*为读写建立一个新的二进制文件*/
  int i;
  for(i=0;i<SIZE;i++)                                      /*判断写入格式是否正确*/
    if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
        printf("file write error\n");
  fclose(fp);
  }  
void main()
{int i,j,t,n;
 float *zaver;
 printf("请输入每位同学的成绩\n");
 printf("No.     Name                 数电  模电  信号  英语\n");
 for(i=0;i<SIZE;i++)
   {
    scanf(FORMAT,&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
    stu[i].rank=i+1;
    }
save();
 void averon(struct student*);
 averon(&stu);                                        /*计算每位同学的总平均分*/
 for(n=0;n<SIZE;n++)  
   for(j=0;j<SIZE-1;j++)
     for(i=0;i<SIZE-j;i++)
       if(p->(stu[n].average)<p->(stu[n+1].average))
         {
          t=p->(stu[n].rank);
          p->(stu[n].rank)=p->(stu[n+1].average);
          p->(stu[n+1].average)=t;
          }
    for(t=0;t<SIZE;t++)
   for(n=0;n<SIZE;n++)
      if(strcmp(p->(stu[n].rank),t+1)==0)
         {
           p->(sort[t].num)=p->(stu[n].num);
           p->(sort[t].name)=p->(stu[n].name);
           p->(sort[t].score[1])=p->(stu[n].score[1]);
           p->(sort[t].score[2])=p->(stu[n].score[2]);
           p->(sort[t].score[3])=p->(stu[n].score[3]);
           p->(sort[t].score[4])=p->(stu[n].score[4]);
           p->(sort[t].average)=p->(stu[n].average);
           p->(sort[t].rank)=p->(stu[n].rank);

 printf("classification of data:")
 for(t=0;t<SIZE;t++)
    printf(FORMAT,&sort[t].num,sort[t].name,&sort[t].score[0],&sort[t].score[1],&sort[t].score[2],&sort[t].score[3]);
          }
 for(t=0;t<SIZE;t++)
    for(i=0;i<SIZE;i++)
       if(p->(sort[t].score[i])<60)
         {
           p->(fail[t].num)=p->(sort[t].num);
           p->(fail[t].name)=p->(sort[t].name);
           p->(fail[t].score[1])=p->(sort[t].score[1]);
           p->(fail[t].score[2])=p->(sort[t].score[2]);
           p->(fail[t].score[3])=p->(sort[t].score[3]);
           p->(fail[t].score[4])=p->(sort[t].score[4]);
           p->(fail[t].average)=p->(sort[t].average);
           p->(fail[t].rank)=p->(sort[t].rank);
           break;
          }
 for(t=0;t<SIZE;t++)
    if(p->(sort[t].rank)<SIZE*0.4)
      {
        p->(good[t].num)=p->(sort[t].num);
        p->(good[t].name)=p->(sort[t].name);
        p->(good[t].score[1])=p->(sort[t].score[1]);
        p->(good[t].score[2])=p->(sort[t].score[2]);
        p->(good[t].score[3])=p->(sort[t].score[3]);
        p->(good[t].score[4])=p->(sort[t].score[4]);
        p->(good[t].average)=p->(sort[t].average);
        p->(good[t].rank)=p->(sort[t].rank);
       }
 printf("students that can apply for scholarships are:")
 for(t=0;t<SIZE*0.4;t++)
    printf(FORMAT,&good[t].num,good[t].name,&stu[t].score[0],&stu[t].score[1],&stu[t].score[2],&stu[t].score[3]);
}
void averon(stuct student*p)
  {float sum=0,aver,AVER;
   for(p=stu;p<stu+30;p++)
      {
       sum=sum+(p->score[1])+(p->score[2])+(p->score[3])+(p->score[4]);
       aver=sum/4;
       (*p).average=aver;
   for(p=stu;p<stu+30;p++)
      sum=sum+(p->score[1])+(p->score[2])+(p->score[3])+(p->score[4])   
   AVER=sum/30;   
   *zaver=AVER;                                              /*计算全班成绩的总平均分*/
   }
搜索更多相关主题的帖子: 系统 学生 编写 
2010-05-28 17:13
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:10 
#include<stdio.h>
#include<string.h>
#define SIZE 30
#define FORMAT "%7d %-20s %4d  %4d  %4d  %4d\n"
typedef struct student
{int num;
char name[20];
float score[4];
float average;
int rank;
}student_list;
student_list stu[SIZE],sort[SIZE],fail[SIZE],good[SIZE];   
void save()
{FILE*fp;
  fp=fopen("stu_dat","wb");                        
  int i;
  for(i=0;i<SIZE;i++)                                    
    if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
        printf("file write error\n");
  fclose(fp);
  }  
void main()
{int i,j,t,n;
float *zaver;
printf("请输入每位同学的成绩\n");
printf("No.     Name                 数电  模电  信号  英语\n");
for(i=0;i<SIZE;i++)
   {
    scanf(FORMAT,&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
    stu[i].rank=i+1;
    }
save();
void averon(struct student*);
averon(&stu);                //  你不觉得stu是数组地址么?
for(n=0;n<SIZE;n++)  
   for(j=0;j<SIZE-1;j++)
     for(i=0;i<SIZE-j;i++)
       if(p->(stu[n].average)<p->(stu[n+1].average))   从哪弄出个p来?,main里没定义,也不是全局的,stu是一个结构体的元素啊?p->(stu[n].average)什么意思啊?才疏学浅,第一次见到,不想再看来,太乱了,几乎没有逻辑
         {
          t=p->(stu[n].rank);
          p->(stu[n].rank)=p->(stu[n+1].average);
          p->(stu[n+1].average)=t;
          }
    for(t=0;t<SIZE;t++)
   for(n=0;n<SIZE;n++)
      if(strcmp(p->(stu[n].rank),t+1)==0)
         {
           p->(sort[t].num)=p->(stu[n].num);
           p->(sort[t].name)=p->(stu[n].name);
           p->(sort[t].score[1])=p->(stu[n].score[1]);
           p->(sort[t].score[2])=p->(stu[n].score[2]);
           p->(sort[t].score[3])=p->(stu[n].score[3]);
           p->(sort[t].score[4])=p->(stu[n].score[4]);
           p->(sort[t].average)=p->(stu[n].average);
           p->(sort[t].rank)=p->(stu[n].rank);

printf("classification of data:")
for(t=0;t<SIZE;t++)
    printf(FORMAT,&sort[t].num,sort[t].name,&sort[t].score[0],&sort[t].score[1],&sort[t].score[2],&sort[t].score[3]);
          }
for(t=0;t<SIZE;t++)
    for(i=0;i<SIZE;i++)
       if(p->(sort[t].score[i])<60)
         {
           p->(fail[t].num)=p->(sort[t].num);
           p->(fail[t].name)=p->(sort[t].name);
           p->(fail[t].score[1])=p->(sort[t].score[1]);
           p->(fail[t].score[2])=p->(sort[t].score[2]);
           p->(fail[t].score[3])=p->(sort[t].score[3]);
           p->(fail[t].score[4])=p->(sort[t].score[4]);
           p->(fail[t].average)=p->(sort[t].average);
           p->(fail[t].rank)=p->(sort[t].rank);
           break;
          }
for(t=0;t<SIZE;t++)
    if(p->(sort[t].rank)<SIZE*0.4)
      {
        p->(good[t].num)=p->(sort[t].num);
        p->(good[t].name)=p->(sort[t].name);
        p->(good[t].score[1])=p->(sort[t].score[1]);
        p->(good[t].score[2])=p->(sort[t].score[2]);
        p->(good[t].score[3])=p->(sort[t].score[3]);
        p->(good[t].score[4])=p->(sort[t].score[4]);
        p->(good[t].average)=p->(sort[t].average);
        p->(good[t].rank)=p->(sort[t].rank);
       }
printf("students that can apply for scholarships are:")
for(t=0;t<SIZE*0.4;t++)
    printf(FORMAT,&good[t].num,good[t].name,&stu[t].score[0],&stu[t].score[1],&stu[t].score[2],&stu[t].score[3]);
}
void averon(stuct student*p)
  {float sum=0,aver,AVER;
   for(p=stu;p<stu+30;p++)  //你把stu的地址传给了p,那么p就已经指向stu了,再说你的stu是全局变量,还用参数传递干什么?
      {
       sum=sum+(p->score[1])+(p->score[2])+(p->score[3])+(p->score[4]); 怎么变成1234了,你赋值时不是0123么?
       aver=sum/4;
       (*p).average=aver;
   for(p=stu;p<stu+30;p++)       全班的平均分你想计算30次么?
      sum=sum+(p->score[1])+(p->score[2])+(p->score[3])+(p->score[4])   
   AVER=sum/30;   
   *zaver=AVER;     zaver 在那定义的?                                       
   } 大括号怎么还少一个,
2010-05-28 17:55
stig3
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-25
收藏
得分:0 
不管怎么说,谢谢谢谢..我重新写一个...太感激了~~~
2010-05-28 18:19
快速回复:我也编写了一个学生成绩管理系统,可是怎么都有错,求高手帮忙看一下,谢 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013691 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved