| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2251 人关注过本帖
标题:学生成绩系统的程序编写,自己写的,但是一直不能运行,求指出错误,我改正
取消只看楼主 加入收藏
庄子小五
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2016-10-23
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:0 
学生成绩系统的程序编写,自己写的,但是一直不能运行,求指出错误,我改正
程序我是自己写的 ,所以问题有很多。刚开始我写有一百多个Error,现在我的只有七十多个,实在找不到,或者不理解了,希望解惑!!
#include<stdio.h>
#include<malloc.h>
#include<string.h>
    struct student
    {
   char IDNumber[16];/*学号*/
   char FamilyName[16]; /*姓*/
   char GivenName[16]; /*名*/
   int sex; /*性别(0代表"女",1代表"男")*/
   int BirthYear; /*出生年*/
   int BirthMonth; /*出生月*/
   int BirthDay; /*出生日*/
   float score[4]; /*成绩*/
   float sum; /*总分*/
   float average; /*平均分*/
   struct student *next;      //设一个指数,指向下一个数
 };
   struct student *head;      //取开头一个指数,作为起始
   struct student *p,*q,*v;    //设结构体相关的指数,用在后面的函数中
/*****************************************************************************/
 
   
   
   void Enter_list()                        /*信息连续输入            OK*/
 { printf("请输入学号");scanf("%s",p->IDNumber);
   printf("请输入姓");  scanf("%s",p->FamilyName);
   printf("请输入名");  scanf("%s",p->GivenName);
   printf("请输入性别(0代表女,1代表男)");scanf("%d",&p->sex);
   printf("请输入出生年");scanf("%d",&p->BirthYear);
   printf("请输入出生月");scanf("%d",&p->BirthMonth);
   printf("请输入出生日");scanf("%d",&p->BirthDay);
   printf("请输入外语成绩");scanf("%f",&p->score[0]);
   printf("请输入高数成绩");scanf("%f",&p->score[1]);
   printf("请输入C语言成绩");scanf("%f",&p->score[2]);
   printf("请输入马哲成绩");scanf("%f",&p->score[3]);     //输入一系列信息,作为可重复函数
   p->next=(struct student*)malloc(sizeof(struct student));  //规定p->next结构体变量=结构体的相等结构的下一个变量
   p=p->next;                                                //再把p等于下一个结构变量
   p->next=NULL;                                             //最后使得最后的p->等于空值,即不返回值
   void deal();
       deal();                                              //定义一个函数,后面用

 }
   /***************************************************************************/

   void Judge()
   {
        int i=1;
        for(q=head;q->next!=NULL;q=q->next,i++)
        {
            if((q->sex)!=0&&(q->sex)!=1)
            {
                printf("性别输入错误请重新输入!");
        }
   }

   }


/***************************************************************************/
  void Querybyclass()            /* 成绩处理 (排序)     OK*/
   {
     int i,j,m,count=0;
    float f;
    char k[16];
    q=head;               //q成为结构体开头元素变量,相当于起始
    while((q->next)!=NULL) //直到p为空值的时候跳出循环
    {q->sum=(q->score[0]+q->score[1]+q->score[2]+q->score[3]);//总和
    (q->average)=(q->sum)/4;q=q->next;}//平均


    for(q=head;q->next!=NULL;q=q->next) count++; //算有多少个结构体元素变量,即一共多少人
   
    for(i=1;i<count;i++)  //在这些人里讨论
        for(q=head,j=0;j<count-i;q=q->next,j++)   //对这些人相关元素比较count-i次
        {if((q->sum)<(q->next->sum)) {strcpy(k,q->IDNumber);strcpy(q->IDNumber,q->next->IDNumber);strcpy(q->next->IDNumber,k);
                                   strcpy(k,q->FamilyName);strcpy(q->FamilyName,q->next->FamilyName);strcpy(q->next->FamilyName,k);
                                   strcpy(k,q->GivenName);strcpy(q->GivenName,q->next->GivenName);strcpy(q->next->GivenName,k);//数组用STRCPY
                                   m=q->sex;q->sex=q->next->sex;q->next->sex=m;
                                   m=q->BirthYear;q->BirthYear=q->next->BirthYear;q->next->BirthYear=m;
                                   m=q->BirthMonth;q->BirthMonth=q->next->BirthMonth;q->next->BirthMonth=m;
                                   m=q->BirthDay;q->BirthDay=q->next->BirthDay;q->next->BirthDay=m;
                                   f=q->score[0];q->score[0]=q->next->score[0];q->next->score[0]=f;
                                   f=q->score[1];q->score[1]=q->next->score[1];q->next->score[1]=f;
                                   f=q->score[2];q->score[2]=q->next->score[2];q->next->score[2]=f;
                                   f=q->score[3];q->score[3]=q->next->score[3];q->next->score[3]=f;
                                   f=q->sum;q->sum=q->next->sum;q->next->sum=f;
                                   f=q->average;q->average=q->next->average;q->next->average=f;}//排序,将前后两个变量的元素交换
        }
   }

  /**************************************************************************/  
   void SearchbByname ()                   /*查找  OK*/
   {char m,n[16],v[16];
    int flag=0;
     Querybyclass();    //前面的一个函数
  do{printf("a按姓名查找     b 退出");
scanf("%s",&m);//通过if来判断路径
if(m=='a')
     { printf("请输入姓");
       scanf("%s",n);
       printf("请输入名");
       scanf("%s",v);//以姓名查找

         for(q=head;q->next!=NULL;q=q->next)//一直作为一个从开头的总的循环
             {if(strcmp(n,q->FamilyName)==0)
                  if(strcmp(v,q->GivenName)==0)//姓、名查找
            {printf("学号%s姓名%s%s性别%d出生年月日%8d%8d%8d外语成绩%5.1f高数成绩%5.1fC语言成绩%5.1f马哲成绩%5.1f总分%5.1f平均分%5.1f\n",
                       q->IDNumber,q->FamilyName,q->GivenName,q->sex,q->BirthYear,q->BirthMonth,q->BirthDay,q->score[0],
                       q->score[1],q->score[2],q->score[3],q->sum,q->average);flag=1;};}
              if(flag==0) printf("无此学生信息\n");};
      if(m=='b') break;//break,跳出循环
      if(m!='a'&&m!='b' ){printf("请按提示输入\n");m='a';};}while(m=='a'||m=='b');//进行下一个功能

   }
            
/****************************************************************************/
    void Insert_list ()      /*插入记录       OK*/
     { char judge;
       void Enter_list();
         do{Enter_list();    //用了第一个函数,输入那个一系列信息,这就是插入
  printf("\n您想继续输入下一位学生的成绩吗\n想,请按y  不想,请按n\n");
  scanf("%s",&judge);}
    while ((judge=='y')||(judge=='Y'));//用循环判断开启下一个功能
     }

/****************************************************************************/
    void Delete_list ()                /*删除记录    OK*/                                                                                                                                                                                                                                                                                    
{char m,judge,n[16],w[16];
 int flag=0,count,j=0,i;
 void deal();
      deal();
    do{ printf("a按学号删除信息                 b按姓名删除信息         c取消");
    scanf("%s",&m);
       if(m=='a')//以if判断路径选项
       {printf("请输入学号");scanf("%s",n);
              for(q=head;q->next!=NULL;q=q->next,j++)//循环查找
              if(strcmp(n,q->IDNumber)==0) //确认需要进行功能的个体变量
              {printf("学号%s\t姓名%s%s\t性别%d\t出生年月日%8d%8d%8d外语成绩%8.1f高数成绩%8.1fC语言成绩%8.1f马哲成绩%8.1f总分%8.1f平均分%8.1f\n",
                       q->IDNumber,q->FamilyName,q->GivenName,q->sex,q->BirthYear,q->BirthMonth,q->BirthDay,q->score[0],
                       q->score[1],q->score[2],q->score[3],q->sum,q->average);//输出变量给人确认
                       flag=1;count=j;//flag用来确定不成立的改变;count相当于找到他的位置
                       printf("您确定要删除该同学所有信息?\n确认请按1     取消请按2\n");
                       scanf("%s",&judge);
                       if(judge=='1')
                       {if(count==0)   head=head->next;//先讨论第一个元素,如果删除第一个,使得head=下一个数
                        else
                        {for(q=head,i=0;i<count;q=q->next,i++);//如果不是第一个,就开始找第几个
                        for(v=head;v->next!=q;v=v->next);
                        v->next=v->next->next;/*该步实现删除*/};//开始删除
                       };
               };      
                            if(flag==0) printf("无此学生信息");
       };
     if(m=='b')
     {flag=0;
      printf("请输入姓");scanf("%s",n);
      printf("请输入名");scanf("%s",w);

         for(q=head,j=0;q->next!=NULL;q=q->next,j++)
             {if(strcmp(n,q->FamilyName)==0)
                  if(strcmp(w,q->GivenName)==0)
        {printf("学号%s\t姓名%s%s\t性别%d\t出生年月日%8d%8d%8d外语成绩%8.1f高数成绩%8.1fC语言成绩%8.1f马哲成绩%8.1f总分%8.1f平均分%8.1f\n",
                       q->IDNumber,q->FamilyName,q->GivenName,q->sex,q->BirthYear,q->BirthMonth,q->BirthDay,q->score[0],
                       q->score[1],q->score[2],q->score[3],q->sum,q->average);
                flag=1;count=j;
                  printf("您确定要删除该同学所有信息?\n确认请按1     取消请按2\n");
                      scanf("%s",&judge);
                     if(judge=='1')
                    {if(count==0) head=head->next;
                     else
                     {for(q=head,i=0;i<count;q=q->next,i++);
                     for(v=head;v->next!=q;v=v->next);
                     v->next=v->next->next;/*该步实现删除*/
                     count-=1;};//这个什么意思?
                     };           
            };
         }
                    
       if(flag==0) printf("无此学生信息");
    };

     if(m=='c') break;
     if(m!='a'&&m!='b') {printf("请安提示输入\n");m='a';};}while(m=='a'||m=='b');

   }

/***************************************************************************/   
   
  void Print_list ()      /*显示链表中所有记录              OK*/
  {int i=1;
   printf("名次\t学号\t姓名\t性别\t出生年月日\t外语成绩\t高数成绩\tC语言成绩\t马哲成绩\t总成绩\t平均成绩\t\n");
   for(q=head;q->next!=NULL;q=q->next,i++)
   printf("%d\t%s\t%s%s\t%d\t%4d%4d%4d\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%5.1f\t%3.1f\t\n",
           i,q->IDNumber,q->FamilyName,q->GivenName,q->sex,q->BirthYear,q->BirthMonth,q->BirthDay,
           q->score[0],q->score[1],q->score[2],q->score[3],q->sum,q->average);//显示列表结构体元素
  }
  /***************************************************************************/

  void Compute_score ()         /*统计         OK*/
  {char n;
   int count=0;
   float sum,m=0;
   void print();
   printf("1 按名次显示所有学生信息\n2 显示分数段情况\n3 各门功课平均成绩和总平均成绩");
   scanf("%s",&n);
   switch(n)//以选择机构,switch来分类输出
   {case '1':print();break;//print就是输出,显示
    case '2':printf("注意!如果分数段后无成绩输出,则说明无该分数段成绩\n");
             printf("外语90分以上\t");//外语
             for(q=head;q->next!=NULL;q=q->next)//每一个成绩都在这个大循环中判断
                 if(q->score[0]>=90)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[0]);
             printf("高数90分以上\t");//高数
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[1]>=90)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[1]);
             printf("C语言90分以上\t");//C语言
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[2]>=90)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[2]);
             printf("马哲90分以上\t");//马哲
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[3]>=90)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[3]);//90的
                 
                 printf("外语80分以上\t");  
                 for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[0]>=80)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[0]);
             printf("高数80分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[1]>=80)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[1]);
             printf("C语言80分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[2]>=80)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[2]);
             printf("马哲80分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[3]>=80)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[3]);//80的


            printf("外语70分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[0]>=70)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[0]);
             printf("高数70分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[1]>=70)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[1]);
             printf("C语言70分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[2]>=70)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[2]);
             printf("马哲70分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[3]>=70)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[3]);//70的


            
               
             printf("外语60分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[0]>=60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[0]);
             printf("高数60分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[1]>=60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[1]);
             printf("C语言60分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[2]>=60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[2]);
             printf("马哲60分以上\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[3]>=60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[3]);//60的



            printf("外语不及格\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[0]<60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[0]);
             printf("高数不及格\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[1]<60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[1]);
             printf("C语言不及格\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[2]<60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[2]);
             printf("马哲不及格\t");
             for(q=head;q->next!=NULL;q=q->next)
                 if(q->score[3]<60)  
                     printf("%s\t%s%s\t%3.1f\t\n",q->IDNumber,q->FamilyName,q->GivenName,q->score[3]);
                 break;//不及格的
    case '3':for(sum=0,q=head;q->next!=NULL;q=q->next,count++)
                 sum+=q->score[0];m+=sum;
             printf("外语平均成绩%3.1f\n",sum/count);
             for(sum=0,q=head;q->next!=NULL;q=q->next)
                 sum+=q->score[1];m+=sum;
             printf("高数平均成绩%3.1f\n",sum/count);
             for(sum=0,q=head;q->next!=NULL;q=q->next)
                 sum+=q->score[2];m+=sum;
             printf("C语言平均成绩%3.1f\n",sum/count);
             for(sum=0,q=head;q->next!=NULL;q=q->next)
                 sum+=q->score[3];m+=sum;
             printf("马哲平均成绩%3.1f\n",sum/count);
             printf("总平均成绩%5.1f\n",m/(4*count));break;//单科平均成绩和总平均成绩
             }
}
   




   void Save_file ()
   {
       FILF *fp;
       char ch,filename[10];
       printf("输入所用的文件夹名字:");
       scanf("%s",filename);
       if((fp=fopen(filename,"w"))==NULL)
       {
           printf("无法打开此文件\n");
           break;
       }
       ch=getchar();
       printf("请输入准备储存到磁盘的字符串:(以#结束)\n");
       ch==getchar();
           while (ch!='#')
           {
               fputs(ch,fp);
               putchar(ch);
               ch=getchar();

           }
           fclose(fp);
           putchar(10);

   }


   /***************************************************************************/


      void Load_file ()
     {
         FILF *fp;
       char ch,filename[10];
       printf("输入所用的文件夹名字:");
       scanf("%s",filename);
       if((fp=fopen("filename","r"))==NULL)
       {
           printf("无法打开此文件\n");
           exit(0);

       }

     }









 /************************************************************************/
   void  main()                   /*主函数*/
   {char judge,t;
    START:printf("                   欢迎进入成绩管理系统\n1输入记录 \t2删除记录\t3显示链表中所有记录\t4按照姓名查找记录 \t5将链表中记录保存到文件中\t6从文件中读入记录
    \t7计算所有学生的总分和均分\t8按班级查询显示学生总分\t9插入记录到表中\t10退出\n");
   scanf("%s",&t);
switch(t)
   {case'1': p=head=(struct student*)malloc(sizeof(struct student));
              do{Enter_list();
              printf("\n您想继续输入下一位学生的成绩吗\n想,请按y  不想,请按n\n");
              scanf("%s",&judge);}while ((judge=='y')||(judge=='Y'));goto START;
   case'2': Delete_list();goto START;
   case'3': Print_list();goto START;
   case'4': SearchByname ();goto START;
   case'5': Save_file();goto START;
case'6': Load_file();goto START;
case'7': Compute_score();goto START;
case'8': Querybyclass();goto START;
case'9': Insert_list();goto START;
   case'10':break;}//主函数以switch确定自己选项
 }

/*****************************结束*******************************/
 
         



      
搜索更多相关主题的帖子: 程序编写 include 出生月 生日 
2017-03-19 15:37
快速回复:学生成绩系统的程序编写,自己写的,但是一直不能运行,求指出错误,我 ...
数据加载中...
 
   



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

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