标题:c语言问题求教,急! 下谢了
取消只看楼主
请问你好吗
Rank: 2
等 级:论坛游民
帖 子:64
专家分:51
注 册:2011-11-27
结帖率:81.48%
已结贴  问题点数:15 回复次数:1 
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
请问你好吗
Rank: 2
等 级:论坛游民
帖 子:64
专家分:51
注 册:2011-11-27
得分:0 
回复 2楼 hellovfp
谢过 会的都改好了
2011-12-28 16:23



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




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

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