C语言学生成绩管理系统


#define NULL 0
#define LEN sizeof(struct student)
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
//定义结构体
struct student
 {
  char StuID[20];
  char CourseCode[20];
  char CourseName[20];
  float Credit;
  float UsualResult;
  float ShiyanResult;
  float JuanmianResult;
  float ZongheResult;
  float ShideCredit;
  struct student *next;
 };

struct student *head;
void Menu();

struct student *Create();
void Save();
void Sort();
void Serch();
//void Delete();
struct student *Delete();
void Display();


/************主函数*******************/
 int main()
 {
  system("color 0D");
  int choice;
  char yes_no;  
  do
  { 
   //system("cls");
   Menu();
   printf ("请在0~6中输入你的选择:\n");
   scanf("%d",&choice);
   printf ("\n");
   switch(choice)
   {
    case 1: Create();   break;
    case 2: Sort();     break;
    case 3: Serch();    break;
    case 4: Delete();   break;
    case 5: Save();     break;
    case 6: Display();  break;
    case 0: printf("谢谢你的使用!"); exit(0); break;
    default: printf("输入错误!!请输入0~6之间的数字");
   }
             printf("\n继续输入?Y/N : ");
   do
   {
    scanf("%c",&yes_no);
   }while( (yes_no != 'Y') && (yes_no != 'y') && (yes_no != 'N') && (yes_no!='n'));

  }while((yes_no == 'Y')||(yes_no == 'y'));
  return 0;
 }

 


 /************菜单函数*****************/
 void Menu()
 {
  printf("\n\n       ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
  printf("       |");    printf("\t\t\t欢迎进入学生管理系统");   printf("\t\t\t|");
  printf("\n       ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
  
  printf("       |");       printf("\t\t\t  1.录入学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  2.排序学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  3.查找学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  4.删除学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  5.保存学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  6.显示学生信息");        printf("\t\t\t|\n");
  printf("       |");       printf("\t\t\t  0.退出管理系统");        printf("\t\t\t|\n");
  printf("       ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
 }
 
 /************创建链表并录入数据 **************/
 struct student *Create()
 { 
  struct student *p,*q;
  int i,m;    
  printf("请输入您要建立的结点个数:");
  scanf("%d",&m);
  for(i = 1 ; i <= m ; i ++)
  {
   p=(struct student *)malloc(LEN);
   printf ("请输入第%d个学生的信息:\n",i);

   printf ("\n请输入学号:");
   scanf("%s",p->StuID);

   printf ("\n请输入课程编号:");
   scanf("%s",p->CourseCode);
   printf ("\n请输入课程名称:");
   scanf ("%s",p->CourseName);
   printf ("\n请输入学分:");
   scanf("%f",&p->Credit);
   printf ("\n请输入平时成绩:");
   scanf("%f",&p->UsualResult);
   printf ("\n请输入实验成绩:");
   scanf("%f",&p->ShiyanResult);
   printf ("\n请输入卷面成绩:");
   scanf("%f",&p->JuanmianResult);
   
   

           
   if((p->ShiyanResult) == -1)
   {
    p->ZongheResult = p->UsualResult*30/100 + p->JuanmianResult*70/100;
    printf("综合成绩 = %f\n",p->ZongheResult);
   }
   else
   {
    p->ZongheResult = p->UsualResult*15/100 + p->JuanmianResult*70/100 + p->ShiyanResult*0.15/100;
    printf("综合成绩 = %f\n",p->ZongheResult );
   }

   int ZHResult = (p->ZongheResult)/10;
   switch(ZHResult)
   {
    case 10:
    case 9: p->ShideCredit = p->Credit*100/100;
      printf("实得学分 = %f\n",p->ShideCredit); break;
    case 8: p->ShideCredit = p->Credit*80/100;
      printf("实得学分 = %f\n",p->ShideCredit); break;
    case 7: p->ShideCredit=p->Credit*75/100;
      printf("实得学分 = %f\n",p->ShideCredit); break;
    case 6: p->ShideCredit = p->Credit*60/100;
      printf("实得学分 = %f\n",p->ShideCredit); break;
    default: p->ShideCredit = 0; printf("实得学分 = %f\n",p->ShideCredit);
   }

   p->next = NULL;
   if(head == NULL)
   {
    head = p;
    q = p;
   }
   q->next = p;
   q = p;
  }
  return head;
 }

/***************排序函数*******************/
 void Sort()
 {
  int choice;
  struct student *p1,*p2;
  char stuID[20];
  char couCode[20];
  char couName[20];
  float credit;
  float usualRes;
  float syRes;
  float jmRes;
  float zhRes;
  float sdCre;
  printf("\n");
  printf("1综合成绩降序排列:\n");
  printf("2实得学分升序排列:\n");
  printf("请输入的选择:");
  scanf("%d",&choice);
  printf("\n");
  switch(choice)
  {
   case 1: for(p1 = head ; p1 != NULL ; p1 = p1->next)
     {
      for(p2 = p1->next ; p2 != NULL ; p2 = p2->next)   //选择法排序,每次选出最小的排到表头
      {
       if(p1->ZongheResult<p2->ZongheResult)
       {
        zhRes = p2->ZongheResult;
        p2->ZongheResult = p1->ZongheResult;
        p1->ZongheResult = zhRes;

        credit = p2->Credit;
        p2->Credit = p1->Credit;
        p1->Credit = p2->Credit;

        usualRes = p2->UsualResult;
        p2->UsualResult = p1->UsualResult;
        p1->UsualResult = usualRes;

        syRes = p2->ShiyanResult;
        p2->ShiyanResult = p1->ShiyanResult;
        p1->ShiyanResult = syRes;

        jmRes = p2->JuanmianResult;
        p2->JuanmianResult = p1->JuanmianResult;
        p1->JuanmianResult = jmRes;

        sdCre = p2->ShideCredit;
        p2->ShideCredit = p1->ShideCredit;
        p1->ShideCredit = sdCre;

        strcpy(stuID,p2->StuID);
        strcpy(p2->StuID,p1->StuID);
        strcpy(p1->StuID,stuID);

        strcpy(couCode,p2->CourseCode);
        strcpy(p2->CourseCode,p1->CourseCode);
        strcpy(p1->CourseCode,couCode);

        strcpy(couName,p2->CourseName);
        strcpy(p2->CourseName,p1->CourseName);
        strcpy(p1->CourseName,couName);
       }
      }
     }
    Display();
    break;
   case 2:for(p1 = head ; p1 != NULL ; p1 = p1->next)
     {
      for(p2 = p1->next ; p2 != NULL ; p2 = p2->next)   //选择法排序,每次选出最小的排到表头
      {
       if(p1->ShideCredit<p2->ShideCredit)
       {
        sdCre = p2->ShideCredit;
        p2->ShideCredit = p1->ShideCredit;
        p1->ShideCredit = sdCre;

        zhRes = p2->ZongheResult;
        p2->ZongheResult = p1->ZongheResult;
        p1->ZongheResult = zhRes;

        credit = p2->Credit;
        p2->Credit = p1->Credit;
        p1->Credit = p2->Credit;

        usualRes = p2->UsualResult;
        p2->UsualResult = p1->UsualResult;
        p1->UsualResult = usualRes;

        syRes=  p2->ShiyanResult;
        p2->ShiyanResult = p1->ShiyanResult;
        p1->ShiyanResult = syRes;

        jmRes = p2->JuanmianResult;
        p2->JuanmianResult = p1->JuanmianResult;
        p1->JuanmianResult = jmRes;

        strcpy(stuID,p2->StuID);
        strcpy(p2->StuID,p1->StuID);
        strcpy(p1->StuID,stuID);

        strcpy(couCode,p2->CourseCode);
        strcpy(p2->CourseCode,p1->CourseCode);
        strcpy(p1->CourseCode,couCode);

        strcpy(couName,p2->CourseName);
        strcpy(p2->CourseName,p1->CourseName);
        strcpy(p1->CourseName,couName);
       }
      }
       }
    Display();
    break;

  }
  return;
 }
 /********成绩查询函数**************/
 void Serch()
 {
   struct student *p;
   char stuid[20];
   if(head == NULL)
   {
    printf("\nlist null!\n");
    return;
   }
   printf("请输入你要查询的学号:\n");
   scanf("%s",&stuid);
  
    for(p = head ; p != NULL ; p = p->next)
    {
     if (strcmp(p->StuID,stuid) == 0)
     {
                
      printf("学号: ");
      printf("s%\n",p->StuID);
      printf("课程编号\t课程名称\t综合成绩\t实得成绩\n");
      printf("%4s\t\t%4s\t\t%4.1f\t\t%4.1f",p->CourseCode,p->CourseName,p->ZongheResult,p->ShideCredit);
     }
     else if(p->next == NULL)
      printf("\n no found");
    }
  }
 
/*********删除函数***************/
 
 struct student *Delete()
 {
  struct student *p1,*p2;
  char stuid[20];
  printf("请输入你要删除的学号:");
  scanf("%s",stuid);
  if(head == NULL)
   printf("\n链表为空");
  else
  {
   p1 = p2 = head;
   while((strcmp(p1->StuID,stuid) !=0 ) && (p1->next) != NULL)
   {
    p2 = p1;
    p1 = p1->next;
   }
   if((strcmp(p1->StuID,stuid) == 0))
   {
    if(p1 == head)
     head = p1->next;
    else
     p2->next = p1->next;
    printf("\n该信息已被删除");
    free(p1);
   }
   else
    printf("not been found!!\n");   
  }
  return head;
 }


/*************保存函数****************/
 void Save()
 {
  FILE *fp;
  struct student *p;
  if ((fp = fopen("B.txt","w")) == NULL)
  {
   printf("can't open!\n");
   exit(0);
  }
  for(p = head ; p != NULL ; p = p->next)
   fprintf(fp,"%c %c %c %f %f %f %f %f\n",p->StuID,p->CourseCode,p->CourseName,
    p->StuID,p->UsualResult,p->ShiyanResult,p->JuanmianResult,
    p->ZongheResult,p->ShideCredit);
  fclose(fp);
  printf("信息已保存");
 }

 /*********显示记录***********/
 void Display()
 {
  struct student *p;
  
  if(head == NULL)
  {
   printf("\n list null");
   return;
  }
  printf("学号 课程编号  课程名称  学分 平时成绩  实验成绩  卷面成绩  综合成绩  实得学分\n");
  for(p = head ; p != NULL ; p = p->next)
   printf("%2s %4s %10s %8.1f %6.1f %6.1f %10.1f %10.1f %6.1f\n",p->StuID,p->CourseCode,p->CourseName,
     p->Credit,p->UsualResult,p->ShiyanResult,p->JuanmianResult,p->ZongheResult,p->ShideCredit);
 }
 


    

 


 
 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值