标题:c语言问题求教,急! 下谢了
只看楼主
请问你好吗
Rank: 2
等 级:论坛游民
帖 子:64
专家分:51
注 册:2011-11-27
结帖率:81.48%
已结贴  问题点数:15 回复次数:6 
c语言问题求教,急! 下谢了
学生成绩系统
要求   每个学生有数学,语文,英语三门成绩,可添加,删除学生信息 ,显示全部学生信息;并按总分排序 计算总分平均值 和按名字查询功能,用switch语句调用
 这是我写的请问哪里有错请高手指教 ,十分感谢,最好有完整代码说明让我更加好理解,谢谢了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void zfpx()            //总分排序函数
void average()         //求平均分函数
void sum()
void save_message()            //总分函数
void delete_message()  //删除信息函数
void display_message()              //显示全部学生函数
void tianjia_message()       //添加学生信息函数
void search_name()         //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
      char name[20];
      int number[20];
      char sex[20];
      float score[2];
      struct student *next
};
typedef struct student stu;
stu *input_message()
{
stu *p1 ,*p2;
int i,n;
printf("输入学生个数\n");
scanf("%d",&n)
p1=head;
for(i=0;i<=n;i++)
{
    p2=(stu*)malloc(sizeof(stu));
  printf("输入姓名");
  scanf("%s",&p2->name);
  printf("输入性别");
  scanf("%s",&p2->sex);
  printf("输入学号");
  scanf("%s",&p2->number);
  printf("输入3门语文:数学:英语:分数(0-100):");
  scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
  p1->next=p2;//*尾插法不断建立链表*//
  p1=p2;
}
p2->next=NULL; //*建表完成*//
return head;
}

void search_name()
{ stu *p2;                     
    char s[20];                                      
   printf("输入要查询的姓名:\n");
   scanf("%s",s);                  
   p2=head;                             
   while(strcmp(p2->name,s)&&p!=NULL)//*判断条件*//
   p2=p2->next;  //指向下一个*//                     
   if(p2==NULL)                    
      printf("\n没有找到该学生的名字 %s\n",s);
   else                             
   {  
      printf("  学号   ||  性别   //   3门分数\n ");
      printf("   %s         %s         %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
          }
  system("cls")
}


void save_message()
{FILE *fp;                                      
   stu *p2;                                 
   char filename[20]; //文件长度                           
   printf("写入文件名:\n");
   scanf("%s",filename);
   if((fp=fopen(filename,"w"))==NULL)    //*测试能否打开*//        
   {
      printf("不能打开文件\n");
      exit(1);
   }
   printf("\n打开文件\n");               
   p2=head;                                          
   while(p2!=NULL)                                 
   {
      fwrite(p2,sizeof(stu),1,fp);          //*写入信息*//   
      p2=p2->next;                                 
   }
   fclose(fp);        //*关闭文件*//                           
   printf("-----打开成功!-----\n");
}




void tianjia_message()
{
        stu *p2;
        char n[10];
        printf("输入要添加学生的学号");
        scanf("%s",n);
        p2=head;
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
   p2=p2->next;//指向下一个*//
if(p==NULL)
    printf("输入添加学生的名字");
        scanf("%s",&p2->name);
    printf("输入添加学生的性别");//修改信息*//
      scanf("%s",&p2->sex);
    printf("添加学生的分数")
        scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
        printf("添加成功");
   system("cls");
}



void display_message()
{
    stu *p2
   p2=head->next;
   while(1)
{
   printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->[1],p2->[2]);
  p2=p2->next;
}



//*删除信息*//
 void delete_message()
   {
     char n[10];
     stu *p1,*p2;
     p1=head;
     if (head==NULL)
     printf("\n列表为空!\n");
     else
     {
        printf("输入要删除的学号");
        scanf("%s",&n);
        p1 = head;
        while (strcmp(p1->number,n)!=0&&t==p1->next!=NULL)//*判断条件*//

     {
       p2=p1;
     p1=p1->next;
      }
        if(strcmp(p1->number,n)==0 )
     {
         if(p1==head) {

       head=head->next;
         free(p1);
        }
         else
     {
      p2->next=p1->next;

     free(p1);
}
}
else printf("\n没有找到信息!\n");
}
printf("删除成功\n");
 }
 system("cls");
}


void sum()       //计算总分
{char n[10];
   int score;
        stu *p2;
        p2=head;
        printf("输入你要计算的学号");
    scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
    p2=p1->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
    score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
    printf("总分为:%d",score);

}


void average()   //计算平均分
{char n[10];
   float score;
        stu *p2;
        p2=head;
        printf("输入你要计算的学号");
    scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
    p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
        score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
   printf("平均分为:%f",score);
   system("cls")
}


void zfpx()
{
    int i,j,min;
    struct student n;
    for(i=0;i=<n-1;i++)
    min=i;
    for(j=0;j<n;j++)
{
     if(p1[i].score<p1[min].score
{ 
    min=j;
 }
}
       tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;        
}
}
   system("cls");
}


void main()
{      
         int n;
         printf("请输入你的选择(1~8)\n");
         scanf("%d",&n)
        printf("\n================ 主菜单 =================\n");
        printf("  1 : 保存或打开文件        \n");
        printf("  2 : 新增一个学生            \n");
        printf("  3 : 删除一个学生            \n");
        printf("  4 : 显示所有学信息            \n");
        printf("  5 : 计算总分            \n");
        printf("  6 : 计算平均分            \n");
        printf("  7 : 按成绩排序            \n");
        printf("  8 : 查找信息                \n");
        printf("  9 : 退出                \n");
        printf("===========================================\n");
                system("cls")
   return 0;
}
    switch(1)
{
    case 1: save_message();
    break;
    case 2; tianjia_message();
    break;
    case 3: delete_message();
    break;
    case 4: display_message();
    break;
    case 5: sum();  
    break;
    case 6: average();
    break;
    case 7: zfpx();
    case 8: search_name();
    break;
    case 9: free(p1),exit(0);
    default:
    break;
}
}学生成绩系统
要求   每个学生有数学,语文,英语三门成绩,可添加,删除学生信息 ,显示全部学生信息;并按总分排序 计算总分平均值 和按名字查询功能,用switch语句调用
 这是我写的请问哪里有错请高手指教 ,十分感谢,最好有完整代码说明让我更加好理解,谢谢了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void zfpx()            //总分排序函数
void average()         //求平均分函数
void sum()
void save_message()            //总分函数
void delete_message()  //删除信息函数
void display_message()              //显示全部学生函数
void tianjia_message()       //添加学生信息函数
void search_name()         //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
      char name[20];
      int number[20];
      char sex[20];
      float score[2];
      struct student *next
};
typedef struct student stu;
stu *input_message()
{
stu *p1 ,*p2;
int i,n;
printf("输入学生个数\n");
scanf("%d",&n)
p1=head;
for(i=0;i<=n;i++)
{
    p2=(stu*)malloc(sizeof(stu));
  printf("输入姓名");
  scanf("%s",&p2->name);
  printf("输入性别");
  scanf("%s",&p2->sex);
  printf("输入学号");
  scanf("%s",&p2->number);
  printf("输入3门语文:数学:英语:分数(0-100):");
  scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
  p1->next=p2;//*尾插法不断建立链表*//
  p1=p2;
}
p2->next=NULL; //*建表完成*//
return head;
}

void search_name()
{ stu *p2;                     
    char s[20];                                      
   printf("输入要查询的姓名:\n");
   scanf("%s",s);                  
   p2=head;                             
   while(strcmp(p2->name,s)&&p!=NULL)//*判断条件*//
   p2=p2->next;  //指向下一个*//                     
   if(p2==NULL)                    
      printf("\n没有找到该学生的名字 %s\n",s);
   else                             
   {  
      printf("  学号   ||  性别   //   3门分数\n ");
      printf("   %s         %s         %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
          }
  system("cls")
}


void save_message()
{FILE *fp;                                      
   stu *p2;                                 
   char filename[20]; //文件长度                           
   printf("写入文件名:\n");
   scanf("%s",filename);
   if((fp=fopen(filename,"w"))==NULL)    //*测试能否打开*//        
   {
      printf("不能打开文件\n");
      exit(1);
   }
   printf("\n打开文件\n");               
   p2=head;                                          
   while(p2!=NULL)                                 
   {
      fwrite(p2,sizeof(stu),1,fp);          //*写入信息*//   
      p2=p2->next;                                 
   }
   fclose(fp);        //*关闭文件*//                           
   printf("-----打开成功!-----\n");
}




void tianjia_message()
{
        stu *p2;
        char n[10];
        printf("输入要添加学生的学号");
        scanf("%s",n);
        p2=head;
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
   p2=p2->next;//指向下一个*//
if(p==NULL)
    printf("输入添加学生的名字");
        scanf("%s",&p2->name);
    printf("输入添加学生的性别");//修改信息*//
      scanf("%s",&p2->sex);
    printf("添加学生的分数")
        scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
        printf("添加成功");
   system("cls");
}



void display_message()
{
    stu *p2
   p2=head->next;
   while(1)
{
   printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->[1],p2->[2]);
  p2=p2->next;
}



//*删除信息*//
 void delete_message()
   {
     char n[10];
     stu *p1,*p2;
     p1=head;
     if (head==NULL)
     printf("\n列表为空!\n");
     else
     {
        printf("输入要删除的学号");
        scanf("%s",&n);
        p1 = head;
        while (strcmp(p1->number,n)!=0&&t==p1->next!=NULL)//*判断条件*//

     {
       p2=p1;
     p1=p1->next;
      }
        if(strcmp(p1->number,n)==0 )
     {
         if(p1==head) {

       head=head->next;
         free(p1);
        }
         else
     {
      p2->next=p1->next;

     free(p1);
}
}
else printf("\n没有找到信息!\n");
}
printf("删除成功\n");
 }
 system("cls");
}


void sum()       //计算总分
{char n[10];
   int score;
        stu *p2;
        p2=head;
        printf("输入你要计算的学号");
    scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
    p2=p1->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
    score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
    printf("总分为:%d",score);

}


void average()   //计算平均分
{char n[10];
   float score;
        stu *p2;
        p2=head;
        printf("输入你要计算的学号");
    scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
    p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
        score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
   printf("平均分为:%f",score);
   system("cls")
}


void zfpx()
{
    int i,j,min;
    struct student n;
    for(i=0;i=<n-1;i++)
    min=i;
    for(j=0;j<n;j++)
{
     if(p1[i].score<p1[min].score
{ 
    min=j;
 }
}
       tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;        
}
}
   system("cls");
}


void main()
{      
         int n;
         printf("请输入你的选择(1~8)\n");
         scanf("%d",&n)
        printf("\n================ 主菜单 =================\n");
        printf("  1 : 保存或打开文件        \n");
        printf("  2 : 新增一个学生            \n");
        printf("  3 : 删除一个学生            \n");
        printf("  4 : 显示所有学信息            \n");
        printf("  5 : 计算总分            \n");
        printf("  6 : 计算平均分            \n");
        printf("  7 : 按成绩排序            \n");
        printf("  8 : 查找信息                \n");
        printf("  9 : 退出                \n");
        printf("===========================================\n");
                system("cls")
   return 0;
}
    switch(1)
{
    case 1: save_message();
    break;
    case 2; tianjia_message();
    break;
    case 3: delete_message();
    break;
    case 4: display_message();
    break;
    case 5: sum();  
    break;
    case 6: average();
    break;
    case 7: zfpx();
    case 8: search_name();
    break;
    case 9: free(p1),exit(0);
    default:
    break;
}
}

[ 本帖最后由 请问你好吗 于 2011-12-28 18:08 编辑 ]
搜索更多相关主题的帖子: 信息 c语言 average include 平均值 
2011-12-28 12:52
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:4 
太多的错误了。。。你函数声明不打分号就结束了?
typedef关键字也打错了。结构里面的指针没有分号结束。
stu *p1 *p2; p1,p2之间不打逗号。head在哪里定义的?
case 1:void save_file() 函数调用是这么写的么?然后又不打分号?
void main()  还有中文的括号。。。。
printf("请输入你的选择(1~8)\n");中文的括号,中文的分号。。。
偶崩溃了。。。。自己把这些问题先改正再看。

[ 本帖最后由 hellovfp 于 2011-12-28 13:34 编辑 ]

我们都在路上。。。。。
2011-12-28 13:29
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
得分:4 
呵呵,楼主估计是在哪抄的,能使用链表的人不可能有这么多语法错误吧
2011-12-28 14:34
请问你好吗
Rank: 2
等 级:论坛游民
帖 子:64
专家分:51
注 册:2011-11-27
得分:0 
回复 2楼 hellovfp
谢过 会的都改好了
2011-12-28 16:23
燃高
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:140
注 册:2011-12-13
得分:4 
我改了一下!!我发现错误太多了!!
2011-12-28 19:03
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
//函数定义不打分号,你哪里改了?

void zfpx();            //总分排序函数
void average();         //求平均分函数
void sum();
void save_message();            //总分函数
void delete_message();  //删除信息函数
void display_message();              //显示全部学生函数
void tianjia_message();       //添加学生信息函数
void search_name();         //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
    char name[20];
    int number[20];
    char sex[20];
    float score[2];
    struct student *next;    //你哪里改了这里?
};
typedef struct student stu;
stu *input_message()
{
    stu *p1 ,*p2;
    int i,n;
    printf("输入学生个数\n");
    scanf("%d",&n); //这里的分号又不打?
    p1=head;
    for(i=0;i<=n;i++)
    {
        p2=(stu*)malloc(sizeof(stu));
        printf("输入姓名");
        scanf("%s",&p2->name);
        printf("输入性别");
        scanf("%s",&p2->sex);
        printf("输入学号");
        scanf("%s",&p2->number);
        printf("输入3门语文:数学:英语:分数(0-100):");
        scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
        p1->next=p2;//*尾插法不断建立链表*//
        p1=p2;
    }
    p2->next=NULL; //*建表完成*//
    return head;
}

void search_name()
{
    stu *p2;                     
    char s[20];                                      
    printf("输入要查询的姓名:\n");
    scanf("%s",s);                  
    p2=head;                             
    while(strcmp(p2->name, s)&& p!=NULL) //中文逗号, p哪里定义的?
        p2=p2->next;  //指向下一个*//                     
    if(p2==NULL)                    
        printf("\n没有找到该学生的名字 %s\n",s);
    else                             
    {  
        printf("  学号   ||  性别   //   3门分数\n ");
        printf("   %s         %s         %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
    }
    system("cls"); //这里又不打分号?
}


void save_message()
{
    FILE *fp;                                      
    stu *p2;                                 
    char filename[20]; //文件长度                           
    printf("写入文件名:\n");
    scanf("%s",filename);
    if((fp=fopen(filename,"w"))==NULL)    //*测试能否打开*//        
    {
        printf("不能打开文件\n");
        exit(1);
    }
    printf("\n打开文件\n");               
    p2=head;                                          
    while(p2!=NULL)                                 
    {
        fwrite(p2,sizeof(stu),1,fp);          //*写入信息*//   
        p2=p2->next;                                 
    }
    fclose(fp);        //*关闭文件*//                           
    printf("-----打开成功!-----\n");
}




void tianjia_message()
{
    stu *p2;
    char n[10];
    printf("输入要添加学生的学号");
    scanf("%s",n);
    p2=head;
    while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*// number是int型,怎么和n比较?
        p2=p2->next;//指向下一个*//
    if(p==NULL)
        printf("输入添加学生的名字");
    scanf("%s",&p2->name);
    printf("输入添加学生的性别");//修改信息*//
    scanf("%s",&p2->sex);
    printf("添加学生的分数")
        scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
    printf("添加成功");
    system("cls"); //又是中文的括号
}



void display_message()
{
    stu *p2;//又不打分号。
    p2=head->next;
    while(1)
    {
        printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->[1],p2->[2]);
        p2=p2->next;
    }
   
   
    //*删除信息*//
    void delete_message()
    {
        char n[10];
        stu *p1,*p2;
        p1=head;
        if (head==NULL)
            printf("\n列表为空!\n");
        else
        {
            printf("输入要删除的学号");
            scanf("%s",&n);
            p1 = head;
            while (strcmp(p1->number,n)!=0&&t==p1->next!=NULL)//*判断条件*//
               
            {
                p2=p1;
                p1=p1->next;
            }
            if(strcmp(p1->number,n)==0 )
            {
                if(p1==head) {
                    
                    head=head->next;
                    free(p1);
                }
                else
                {
                    p2->next=p1->next;
                    
                    free(p1);
                }
            }
            else printf("\n没有找到信息!\n");
        }
        printf("删除成功\n");
    }
    system("cls");
}


void sum()       //计算总分
{
    char n[10];
    int score;
    stu *p2;
    p2=head;
    printf("输入你要计算的学号");
    scanf("%s",&n);
    while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
        p2=p1->next;//指向下一个*//
    if(p2==NULL)
        printf("没有发现信息");
    else
    {
        score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
        printf("总分为:%d",score);
        
    }
   

    void average()   //计算平均分
    {
        char n[10];
        float score;
        stu *p2;
        p2=head;
        printf("输入你要计算的学号");
        scanf("%s",&n);
        while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
            p2=p2->next;//指向下一个*//
        if(p2==NULL)
            printf("没有发现信息");
        else
        {
            score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
            printf("平均分为:%f",score);
            system("cls");//又没有分号
        }
        
        
        void zfpx()
        {
            int i,j,min;
            struct student n;
            for(i=0;i=<n-1;i++)
                min=i;
            for(j=0;j<n;j++)
            {
                if(p1[i].score<p1[min].score
                { 
                    min=j;
                }
            }
            tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;        
        }
    }
    system("cls");
}


void main()  //中文括号你还没有改。
{      
    int n;
    printf("请输入你的选择(1~8)\n");
    scanf("%d",&n)
        printf("\n================ 主菜单 =================\n");
    printf("  1 : 保存或打开文件        \n");
    printf("  2 : 新增一个学生            \n");
    printf("  3 : 删除一个学生            \n");
    printf("  4 : 显示所有学信息            \n");
    printf("  5 : 计算总分            \n");
    printf("  6 : 计算平均分            \n");
    printf("  7 : 按成绩排序            \n");
    printf("  8 : 查找信息                \n");
    printf("  9 : 退出                \n");
    printf("===========================================\n");
    system("cls");//中文括号,又不打分号。
    return 0;
}
//请问下面这一段代码是干什么用的?
switch(1)
{
case 1: save_message();
    break;
    case 2; tianjia_message();
        break;
case 3: delete_message();
    break;
case 4: display_message();
    break;
case 5: sum();  
    break;
case 6: average();
    break;
case 7: zfpx();
case 8: search_name();
    break;
case 9: free(p1),exit(0);
default:
    break;
}
}
整个代码就象是哪里抄的,东拼西凑。楼上有人说对了。

我们都在路上。。。。。
2011-12-29 11:58
upsate
Rank: 2
等 级:论坛游民
帖 子:14
专家分:21
注 册:2011-12-26
得分:4 
这么多错误,让老衲很纠结。。。
2011-12-29 13:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-358788-1-1.html




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

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