数据结构课设

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

typedef struct Student
{
    char name[20];
    char stuNum[20];
    int score1;
    int score2;
    int score3;
    double aver;
}student;
typedef struct _Node
{
    student stu;
    struct _Node* pnext;
}Node;
Node *g_phead=NULL;
void welcome();
void inputstudent();//录入
void outputstudent();//输出
void savestudent();//保存
void readstudent();//导入读取
int countstudent();//统计人数
Node *Findstudent();//按姓名查找
void modifystudent();//按学号修改
void Deletestudent();//按学号删除
void sort();//按平均成绩排序(降序)
void sortbyxuehao();//按学号排序(升序)
void charu();//插入
void sortbyshunxu();//按顺序插入

int main()
{
    char ch;
     while(1)
     {
     welcome();
      ch=getch();
     switch(ch)    
     {
     case '1':{ inputstudent();
         break;}
     case '2':{outputstudent();
         break;}
     case '3':{savestudent();
         break;}
     case '4':{readstudent();
         break;}
     case '5':{
         printf("学生总人数为%d",countstudent());
         system("pause");
         system("cls");
         break;}
     case '6':{
         Node *p=Findstudent();
         if(p!=NULL)
         {
          
            printf("******************************************************************\n");
             printf("*\t\t\t欢迎使用学生成绩管理系统\t\t*\n");
             printf("*****************************************************************\n");
            printf("*\t学号\t*\t姓名\t*\t成绩1\t*\t成绩2\t*\t成绩3\t*\t平均成绩\t*\n");
             printf("*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\t%d\t*\t%.2f\t*\n",p->stu.stuNum,p->stu.name,p->stu.score1,p->stu.score2,p->stu.score3,p->stu.aver); 
             system("pause");
                 system("cls");
         }
         else{ printf("未找到该学员信息");
         system("pause");
         system("cls");}
         break;}
     case '7':modifystudent();
         break;
     case '8':Deletestudent();
         break;
     case '9':sort();
         break;
    case 'j':sortbyxuehao();
         break;
    case 'k':
        sort();
        charu();
         break;
     case '0':printf("byebye!!!\n");
         return 0;
     }
     }
      
     
    
  return 0;
     }
void welcome ()
{
 printf("*****************************************\n");
       printf("*\t欢迎使用学生成绩管理系统\t*\n");
      printf("*****************************************\n");
      printf("*\t\t请选择功能列表\t\t*\n");
      printf("*****************************************\n");
      printf("*\t\t1.录入学生信息\t\t*\n");
      printf("*\t\t2.打印学生信息\t\t*\n");
      printf("*\t\t3.保存学生信息\t\t*\n");
      printf("*\t\t4.读取学生信息\t\t*\n");
      printf("*\t\t5.统计所有学生人数\t*\n");
      printf("*\t\t6.按姓名查找学生信息\t\t*\n");
      printf("*\t\t7.修改学生信息\t\t*\n");
      printf("*\t\t8.删除学生信息\t\t*\n");
      printf("*\t\t9.学生成绩排序\t\t*\n");
      printf("*\t\tj.学生学号排序\t\t*\n");
      printf("*\t\tk.插入学生信息\t\t*\n");
      printf("*\t\t0.退出程序\t\t*\n");
      printf("*****************************************\n");
 
}
void inputstudent ()
{
    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("%s",&pNewNode->stu.stuNum);
  printf("请输入学生成绩\n");
  scanf("%d",&pNewNode->stu.score1);
   printf("请输入学生成绩\n");
  scanf("%d",&pNewNode->stu.score2);
   printf("请输入学生成绩\n");
  scanf("%d",&pNewNode->stu.score3);
  printf("学生信息录入成功|\n");
  pNewNode->stu.aver = (pNewNode->stu.score1 + pNewNode->stu.score2 + pNewNode->stu.score3)/3;
  system("pause");
  system("cls");
}
void outputstudent()
{
    Node* p=g_phead;
   printf("******************************************************************\n");
   printf("*\t\t\t欢迎使用学生成绩管理系统\t\t*\n");
    printf("*****************************************************************\n");
    printf("*\t学号\t*\t姓名\t*\t成绩1\t*\t成绩2\t*\t成绩3\t*\t平均成绩¨\t*\n");
    
    while(p!=NULL)
    {
      printf("*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\t%d\t*\t%.2f\t*\n",p->stu.stuNum,p->stu.name,p->stu.score1,p->stu.score2,p->stu.score3,p->stu.aver);
      p=p->pnext;
    }
    system("pause");
    system("cls");
   
}
void savestudent()
 {
     Node *p=g_phead;
     FILE *fp= fopen("./study.txt","w");
     if(fp==NULL){printf("打开文件失败");}
     
     while(p!=NULL)
     {
       fwrite(&p->stu,1,sizeof(student),fp);
     
     p=p->pnext;
     }
     fclose(fp);

     printf("数据保存成功|");
     system("pause");
     system("cls");
}
void readstudent()
{
     student stu;
 FILE *fp= fopen("./study.txt","r");
 if(fp==NULL)
 {printf("打开文件失败?");return;}

 while(fread(&stu,1,sizeof(student),fp))
 {
        Node *pNewNode=(Node*) malloc(sizeof(Node));
            pNewNode->pnext=NULL;
            memcpy(pNewNode,&stu,sizeof(student));
 if(g_phead==NULL)
        {g_phead=pNewNode;}
    else
    {
    pNewNode->pnext=g_phead;
    g_phead=pNewNode;
    
    }
 }
 fclose(fp);
 printf("加载数据成功|.\n");
 system("pause");
 system("cls");
 
    
}
    int countstudent()
    {
      int ncount=0;
      Node *p=g_phead;
      while(p!=NULL)
      {
          ncount++;
       p=p->pnext;
      
      }
     
    return ncount;
    }
Node *Findstudent()
    {
        Node *p=g_phead;
        char szName[20];
      printf("请输入需要查找学生的姓名:\n");
      scanf("%s",szName);
      while(p!=NULL)
       {
         if(0==strcmp(p->stu.name,szName))
         {return p;}
         p=p->pnext;
      }
    return p;
    }
    
    void modifystudent()
    {
        Node *p=g_phead;
        char nStuNum[20];
        printf("请输入需要查找学生的学号:\n");
      scanf("%s",&nStuNum);
      while(p!=NULL)
       {
        if(0==strcmp(p->stu.stuNum,nStuNum))
        {
          printf("请输入要修改的学生姓名3门成绩:\n");
          scanf("%s %d %d %d",p->stu.name,&p->stu.score1,&p->stu.score2,&p->stu.score3);
          p->stu.aver = (p->stu.score1 + p->stu.score2 + p->stu.score3)/3;
        printf("修改成功");
        break;
        }
         p=p->pnext;
      }
    if(p==NULL)
    {
    
     printf("没有找到该学生信息:\n");
    }
    }
    
    void Deletestudent()
    {
    
        Node *p1=NULL,*p2=NULL,*p=g_phead;
        char nStuNum[20];
        printf("请输入需要删除学生的学号:\n");
        scanf("%s",nStuNum);
      if(0==strcmp(g_phead->stu.stuNum,nStuNum))
      {
       p1=g_phead;
       
      g_phead=g_phead->pnext;
      free(p1);
      printf("删除成功");
      }
      else
      {
        p2=g_phead;
        while(p->pnext!=NULL)
        {
           if(0==strcmp(p->pnext->stu.stuNum,nStuNum))
           {
               p2=p->pnext;
               p->pnext=p->pnext->pnext;
               free(p2);printf("删除成功"); 
               system("pause");
                 system("cls");
               return;
           }
           p=p->pnext;
        }
         if(p->pnext==NULL)
        {
          printf("不存在这个学生");
         }
      }
      system("pause");
      system("cls");
     }
    void sort()
    {
        int b=0,i;
        student a;
      Node *p=g_phead;

      while(p!=NULL)
      {b++;p=p->pnext;}printf("成功");
      p=g_phead;
 for(i=0;i<b-1;i++)

      {
          p=g_phead;
      while(p->pnext!=NULL)
      {
          if(p->stu.aver < p->pnext->stu.aver)
          {
              a=p->stu;
          p->stu=p->pnext->stu;
          p->pnext->stu=a;
          }
          p=p->pnext;
      }
    
    
    }
    printf("排序成功\n");
    system("pause");
    system("cls");
    }


    void sortbyxuehao()
    {
        int b=0,i;
        student a;
      Node *p=g_phead;

      while(p!=NULL)
      {b++;p=p->pnext;}printf("成功");
      p=g_phead;
 for(i=0;i<b-1;i++)

      {
          p=g_phead;
      while(p->pnext!=NULL)
      {
          int result = strcmp(p->stu.stuNum,p->pnext->stu.stuNum);
          if(result > 0)
          {
              a=p->stu;
             p->stu=p->pnext->stu;
             p->pnext->stu=a;
          }
          p=p->pnext;
      }
    
    
    }
    printf("排序成功\n");
    system("pause");
    system("cls");
    }

    void charu(){
        
        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("%s",&pNewNode->stu.stuNum);
         printf("请输入学生成绩\n");
         scanf("%d",&pNewNode->stu.score1);
          printf("请输入学生成绩\n");
         scanf("%d",&pNewNode->stu.score2);
          printf("请输入学生成绩\n");
         scanf("%d",&pNewNode->stu.score3);
         printf("学生信息录入成功|\n");
        pNewNode->stu.aver = (pNewNode->stu.score1 + pNewNode->stu.score2 + pNewNode->stu.score3)/3;
        system("pause");
         system("cls");
        sortbyshunxu();//排序
     
    }


    void sortbyshunxu()
    {
        
        
        student a;
      Node *p=g_phead;

      
          p=g_phead;
      while(p->pnext!=NULL)
      {
          if(p->stu.aver < p->pnext->stu.aver)
          {
              a=p->stu;
          p->stu=p->pnext->stu;
          p->pnext->stu=a;
          }else if(p->stu.aver >= p->pnext->stu.aver) break;
          p=p->pnext;
          
      }
    
    
    
    printf("插入成功\n");
    system("pause");
    system("cls");

    }


 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值