XHXD. 2023-03-09 08:28 采纳率: 100%
浏览 51
已结题

c语言学生成绩管理系统

请问输出平均成绩的时候有成员的成绩是乱的该怎么改代码

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

//定义一个学生
typedef struct _Student
{
  char name[20];//姓名
  int stuNum;//学号
  int grade;//班级
  int Chinesescore;//语文成绩
  int Mathematicsscore;//数学成绩
  int Englishscore;//英语成绩
  int score1;
  int score2;
  float Allscore; //总分 
  float Average;//平均成绩

}Student;
typedef struct _Node//节点
{
  _Student stu;   //学生
  struct _Node* pNext;      //指向下一个节点的指针
}Node;
 Node *g_pHead = NULL;  //头节点




//欢迎
void Welcome();
void InputStudent();//录入学生成绩 
Node* Findstudent();//查找学生
void ModifyStudent();//修改学生信息
void DeleteStudent();//删除学生信息
Node* FindstudentGrande();//按班级查找学生
Node* Countstudent();
Node* Findstudent1();
int main()
{
 while(1)
 {
 Welcome();//欢迎

 char ch=getch();//从键盘接受一个字符

 switch(ch)
 {
 case'1'://输入学生成绩
  InputStudent();
  break;
    case'2'://修改学生成绩
  ModifyStudent();
  break;
    case'3'://删除学生成绩
  DeleteStudent();
  break;
 case'4'://计算每位学生的总分
  break;
 case'5'://计算每位学生的平均分 
        {
  Node* p = Findstudent1();
  if(p !=NULL)
  {
  printf ("平均分:%d\t",p->stu.Average);
  }
  else
   printf("没有找到该学员.\n");
  system("pause");
        system("cls");    //清屏
  break;
  }
  
  
 case'6'://按学号或姓名查询学生成绩
  {
  Node* p = Findstudent();
  if(p !=NULL)
  {
  printf ("姓名:%s\t班级:%d\t学号:%d\t语文成绩:%d\t数学成绩:%d\t英语成绩:%d\t成绩1:%d\t成绩2:%d\t总成绩:%d\t平均分:%d\t",
   p->stu.name,p->stu.grade,p->stu.stuNum,p->stu.Chinesescore,p->stu.Mathematicsscore,p->stu.score1,
   p->stu.score2,p->stu.Allscore,p->stu.Average);
  }
  else
   printf("没有找到该学员.\n");
  system("pause");
        system("cls");    //清屏
  break;
  }
 case'7'://按班级查询学生成绩
  
  {
  Node* p = FindstudentGrande();
  if(p !=NULL)
  {
  printf ("姓名:%s\t班级:%d\t学号:%d\t语文成绩:%d\t数学成绩:%d\t英语成绩:%d\t成绩1:%d\t成绩2:%d\t总成绩:%d\t平均分:%d\t",
   p->stu.name,p->stu.grade,p->stu.stuNum,p->stu.Chinesescore,p->stu.Mathematicsscore,p->stu.score1,
   p->stu.score2,p->stu.Allscore,p->stu.Average);
  }
  else
  printf("没有找到该学员.\n");
  system("pause");
        system("cls");    //清屏
  break;
  } 
 case'8'://成绩排序
  break;
    case'9'://按班级统计学科总分、平均分等
  break;
 case'0'://退出
  printf("退出系统\n");
  return 0;
 default:
  printf("您的输入有误,请重新输入.\n");
        system("pause");
        system("cls");    //清屏
  break;
 }
 }
 
 system("pause");
    return 0;
}
//欢迎
void Welcome()
{
 printf("*************************************************\t*\n");
 printf("*\t\t成绩管理\t\t\t *\n");
 printf("*************************************************\t*\n");
 printf("*\t\t1.输入学生成绩\t\t\t*\n");
 printf("*\t\t2.修改学生成绩\t\t\t*\n");
 printf("*\t\t3.删除学生成绩\t\t\t*\n");
 printf("*\t\t4.计算每位学生的总分\t\t*\n");
 printf("*\t\t5.计算每位学生的平均分\t\t*\n");
 printf("*\t\t6.按学号或姓名查询学生成绩\t*\n");
 printf("*\t\t7.按班级查询学生成绩\t\t*\n");
 printf("*\t\t8.成绩排序\t\t\t*\n");
 printf("*\t\t9.按班级统计学科总分、平均分等\t*\n");
 printf("*\t\t0.退出\t\t\t\t*\n");
    printf("*************************************************\n");
}
void InputStudent()//录入学生成绩
{   int Allscore;
    int  Average;
 //创建一个新节点
 Node* pNewNode = (Node*)malloc(sizeof(Node));
 pNewNode->pNext = NULL;
 //头插法
 if (g_pHead == NULL)
 {
 g_pHead = pNewNode;
 }
 else
 {
 pNewNode->pNext = g_pHead;
 g_pHead = pNewNode;
 }

printf("请输入学生姓名:\n");
scanf("%s", pNewNode->stu.name);
printf("请输入学生班级:\n");
scanf("%d", &pNewNode->stu.grade);//&取地址运算符
printf("请输入学生学号:\n");
scanf("%d", &pNewNode->stu.stuNum);
printf("请输入学生语文成绩:\n");
scanf("%d", &pNewNode->stu.Chinesescore);
printf("请输入学生数学成绩:\n");
scanf("%d", &pNewNode->stu.Mathematicsscore);
printf("请输入学生英语成绩:\n");
scanf("%d", &pNewNode->stu.Englishscore);
printf("请输入学生成绩1:\n");
scanf("%d", &pNewNode->stu.score1);
printf("请输入学生成绩2:\n");
scanf("%d", &pNewNode->stu.score2);
Allscore=pNewNode->stu.Chinesescore+pNewNode->stu.Mathematicsscore+pNewNode->stu.Englishscore+pNewNode->stu.score1+pNewNode->stu.score2;
printf("总分%d\n",Allscore);
Average=(pNewNode->stu.Chinesescore+pNewNode->stu.Mathematicsscore+pNewNode->stu.English
Average=(pNewNode->stu.Chinesescore+pNewNode->stu.Mathematicsscore+pNewNode->stu.Englishscore+pNewNode->stu.score1+pNewNode->stu.score2)/5.0;
printf("平均分%d\n",Average);
printf("学生信息录入完成.\n");
system("pause");
system("cls");    //清屏
}
 
Node* Findstudent()//查找学生
{
 int nStuNum;
 char szName[20];
  
  printf("请输入要查找学生的学号:\n");
  scanf("%d",&nStuNum);
   printf("请输入要查找学生的姓名:\n");
  scanf("%s",szName);
  Node* p = g_pHead;
  while (p != NULL)
  {
  if (p->stu.stuNum == nStuNum ||0==strcmp(p->stu.name,szName))
  {
  return p;
  }
  p = p->pNext;
  }
  system("pause");
  system("cls");    //清屏
return NULL;
}
void ModifyStudent()//修改学生信息
{
 int nStuNum;
 printf("请输入需要修改的学生信息的学号:\n");
 scanf("%d",&nStuNum);
 Node* p = g_pHead;
  while (p != NULL)
  {
  if (p->stu.stuNum == nStuNum )
  {
   printf("请输入要修改的学生姓名 班级 语文成绩 数学成绩 英语成绩 成绩1 成绩2:\n");
   scanf("%s %d %d %d %d %d %d",p->stu.name,&p->stu.grade,&p->stu.Chinesescore,&p->stu.Mathematicsscore,&p->stu.Englishscore,&p->stu.score1,&p->stu.score2);
   printf("修改成功.\n");
   system("pause");
   system("cls");    //清屏
   break;
  }
  p = p->pNext;
  }
  if (p == NULL)
  {
    printf("没有找到该学生信息.\n");
 system("pause");
    system("cls");    //清屏
  }
}
void DeleteStudent()//删除学生信息
{
   int nStuNum;
   printf("请输入要删除的学生信息的学号:\n");
   scanf("%d",&nStuNum);
   Node* p1, *p2;
   //判断是否为头节点
   //是
   if(g_pHead->stu.stuNum == nStuNum)
   {
   p1 = g_pHead;
   g_pHead = g_pHead->pNext;
   free(p1);
   system("pause");
   system("cls");    //清屏
   return;
   }
   //不是
   Node* p = g_pHead;
   while(p->pNext != NULL)
   {
     if(p->pNext->stu.stuNum == nStuNum)
  {
  p2 = p->pNext;
     p->pNext = p->pNext->pNext;
     free(p2);
  system("pause");
     system("cls");    //清屏
  return;
  }
  p = p->pNext;
  if (p->pNext == NULL)
  {
    break;
  }
   }
   if(p->pNext = NULL)
   {
   printf("没有找到该学员");
   }
   system("pause");
    system("cls");    //清屏
}
Node* FindstudentGrande()//按班级查找学生
{
 int nGrandeNum;
    printf("请输入要查找的班级:\n");
    scanf("%d",&nGrandeNum);
    Node* p = g_pHead;
  while (p != NULL)
  {
  if (p->stu.grade == nGrandeNum)
  {
  return p;
  }
  p = p->pNext;
  }
  system("pause");
  system("cls");    //清屏
return NULL;
}
 
  Node* Findstudent1()//就算平均分
{
 int nStuNum;
 char szName[20];
  
  printf("请输入要计算的学生的学号:\n");
  scanf("%d",&nStuNum);
   printf("请输入要计算的学生的姓名:\n");
  scanf("%s",szName);
  Node* p = g_pHead;
  while (p != NULL)
  {
  if (p->stu.stuNum == nStuNum ||0==strcmp(p->stu.name,szName))
  {
  return p;
  }
  p = p->pNext;
  }
  system("pause");
  system("cls");    //清屏
return NULL;
}
  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-09 08:44
    关注

    271行 if(p->pNext = NULL) ,是==,不是=

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失