大一c语言课设——学生信息管理系统链表实现

主程序:

#include <stdio.h>
#include <stdlib.h>
#include "student.h"
int n=0;
int savedtag=0;
int main()
{
    int com;
    sayhello();
    while(1)
    {
        menu();
        fflush(stdin);
        if(scanf("%d",&com)!=1)
        {
            printf("输入的是未知内容呢,请试试输入提示信息吧!\n");
            fflush(stdin);
            continue;
        }
        if(com==0)
        {
        if(savedtag)
        {
        printf("信息被修改了,请问是否保存修改至文件呢?0不保存,1保存。\n");
        int co;
        fflush(stdin);
        scanf("%d",&co);
        if(co==1)
        {
           save_file();
        }
        }
        break;
        }
        switch(com)
        {
          case 1:addhello();
                 break;
          case 2:changehello();//change
                 savedtag=1;
                 break;
          case 3:deletehello();//delete
                 savedtag=1;
                 break;
          case 4:findhello();//find
                 savedtag=1;
                 break;
          case 5:sorthello();//sort
                 savedtag=1;
                 break;
          case 6:outputs();//out
                 savedtag=1;
                 break;
          case 7:
                 system("cls");
                 break;
          case 8:save_file();
                 break;
        }
    }
    bye();
    return 0;
}


头文件定义:

#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED
#define LEN sizeof(struct lb)
#define FN "D:\\stu.dat"
#define DEBUG
typedef struct stu
{
    int no;
    char name[20];
    char sex;
    int age;
    double scores[3];
    double sum;
    double avg;
    int pos;
}student;//学生数据结构体

typedef struct lb
{
    student data;
    struct lb *next;
}node,*lbpointer;//链表结点结构体


extern int savedtag;//判断信息是否发生改动
extern node *pHead;//全局使用同一链表头
extern int n;//记录当前信息个数

//hello.c
void sayhello();//打印欢迎界面
void menu();//打印菜单;
void bye();//打印退出信息

//add.c
void input(node *p);//实现信息接收
lbpointer init();//创建链表头节点
int creatstulb(node *pHead,int n);//创建链表节点
void addform_Key();//从键盘输入信息
void addhello();//选择输入方式
int create_add_file(char *fn);//将文件信息以链表形式储存
void addform_file();//从文件读入信息
void sort_nit();//判断是否根据总成绩维护名次

//output.c
void outputheader();//输出表头
void output(node *p);//输出节点信息
void outputs();//输出链表

//save.c
void save_file_path();//选择文件储存路径
int save(char *fn);//储存信息至文件
void save_file();//输出提示信息

//find.c
lbpointer find_no(int num);//根据学号查询
lbpointer find_name(char namel[]);//根据姓名查询
void findhello();//输出提示信息

//change.c
void changeinf();//修改信息
void changehead();//输出提示信息
void changehello();//输出提示信息
void change_warn(node *p);//提示是否修改

//delete.c
void deletehello();//输出提示信息
void delete_name(char namel[]);//根据姓名删除
void delete_no(int num);//根据学号
void delete_warn(node *p);//提示是否删除

//sort.c
void sort_no_up();//学号升序
int sort_select();//选择排序方法
void sorthello();//输出提示信息
void sort_sum_up();//总分升序
void sort_no_down();//学号降序
void sort_sum_down();//总分降序
void sort_pos_down();//降序排名
void sort_pos_up();//升序排名
void sort_score2_down();//成绩3降序
void sort_score1_down();//成绩2降序
void sort_score0_down();//成绩1降序
void sort_score0_up();//成绩1升序
void sort_score1_up();//成绩2升序
void sort_score2_up();//成绩3升序
#endif // STUDENT_H_INCLUDED

实现添加信息功能:

#include <stdio.h>
#include <stdlib.h>
#include "student.h"
node *pHead=NULL;
char *fn=FN;
void input(node *p)
{
    printf("请按照如下格式输入\n");
    printf("学号\t姓名\t性别\t年龄\t成绩1\t成绩2\t成绩3\n");
    scanf("%d %s %c %d %lf %lf %lf",&p->data.no,p->data.name,&p->data.sex,&p->data.age,&p->data.scores[0],&p->data.scores[1],&p->data.scores[2]);
    p->data.sum=p->data.scores[0]+p->data.scores[1]+p->data.scores[2];
    p->data.avg=p->data.sum/3.0;
    p->data.pos=0;
}

lbpointer init()
{
    node *pHead=(node *)malloc(LEN);
    if(pHead==NULL)
    {
        printf("memory error\n");
        exit(1);
    }
    pHead->next=NULL;
    return pHead;
}

int creatstulb(node *pHead,int n)
{
    int i;
    node *p,*pTail=pHead;
    for(i=0;i<n;i++)
    {
        p=(node *)malloc(LEN);
        if(p==NULL)return i;
        input(p);
        p->next=NULL;
        pTail->next=p;
        pTail=p;
    }
    return i;
}

void addform_Key()
{
   savedtag=1;
   int m;
   printf("请输入学生人数:\n");
   while(scanf("%d",&m)==0)
   {
       fflush(stdin);
       printf("输入指令不正确呢,请重新输入试试吧。\n");
       printf("请输入学生人数:\n");
   }
   //pHead=init();
   //creatstulb(m);
   if(n==0)
   {
      pHead=init();
      creatstulb(pHead,m);
   }
   else
   {
     node *pb=pHead;
     while(pb->next!=NULL)
     {
         pb=pb->next;
     }
     creatstulb(pb,m);
   }
   sort_nit();
   n=n+m;
}
void sort_nit()
{
    int wos;
    printf("系统将自动对数据根据总成绩进行排序,是否进行?\n");
    printf("1执行,0不执行。\n");
    fflush(stdin);
    scanf("%d",&wos);
    if(wos)
    {sort_sum_down();}
}
int create_add_file(char *fn)
{
    FILE *fp;
    node *pb,*p;
    if(n==0)
    {
    pHead=init();
    pb=pHead;
    }
    else
    {
      pb=pHead;
      while(pb->next!=NULL)
      {
          pb=pb->next;
      }
    }
    int m=0;
    if((fp=fopen(fn,"rb"))==NULL)
    {
        printf("fail open!\n");
        return -1;
    }
    p=(node *)malloc(LEN);
    fread(&p->data,sizeof(student),1,fp);
    while(feof(fp)==0)
    {
        m++;
        p->next=NULL;
        pb->next=p;
        pb=p;
        p=(node *)malloc(LEN);
        fread(&p->data,sizeof(student),1,fp);
    }
    sort_nit();
    n+=m;
    return 0;
}
void addform_file()
{
    int com;
    printf("默认文件存储在%s,是否采用默认路径?采用输入0,不采用输入1。\n",fn);
    fflush(stdin);
    scanf("%d",&com);
    if(com==1)
    {
        printf("请输入文件路径:\n");
        scanf("%s",fn);
    }
    if(create_add_file(fn)==0)
    {
        printf("信息添加成功!\n");
    }
    else
    {
        printf("信息添加不成功!\n");
        fn=FN;
    }
}

void addhello()
{
    //printf("\n");
    printf("----------------------------------------------\n");
    printf("1从键盘输入信息\n");
    printf("2从文件输入信息\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    int cm;
    scanf("%d",&cm);
    if(cm==0){return;}
        switch(cm)
        {
          case 1:addform_Key();//键盘
                   #ifdef DEBUG
                   printf("添加成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 2:addform_file();//文件
                  #ifdef DEBUG
                   printf("添加成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
              break;
        }
    return;
}

打印欢迎界面:

#include <stdio.h>
#include <stdlib.h>
#include "student.h"

void sayhello()
{
    printf("**********************************************\n");
    printf("**********你好!欢迎登录学生管理系统***********\n");
    printf("*************技术支持:xxx***************\n");
    printf("**********************************************\n");
}
void menu()
{
    printf("\n+-----------------主菜单---------------------+\n");
    printf("+-----------请输入您想进行的操作-------------+\n");
    printf("+--------------------------------------------+\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("|               输入0退出                    |\n");
    printf("+--------------------------------------------+\n\n");
}
void bye()
{
    printf("~~~~~~~~~~~~~~~~~~~byebye!~~~~~~~~~~~~~~~~~~~~\n");
}

输出功能:

#include <stdio.h>
#include <stdlib.h>
#include "student.h"

void outputheader()
{
    printf("当前储存的学生信息有:\n");
    //printf("-----------------------------------------------------------------------------\n");
    printf("学号\t姓名\t\t性别\t年龄\t成绩1\t成绩2\t成绩3\t平均成绩 总成绩\t名次\n");
}

void output(node *p)
{
    int i;
    printf("%d\t%s\t\t%c\t%d\t",p->data.no,p->data.name,p->data.sex,p->data.age);
    for(i=0;i<3;i++)
    {
        printf("%.1lf\t",p->data.scores[i]);
    }
    printf("%.1lf\t %.1lf\t%d\n",p->data.avg,p->data.sum,p->data.pos);
}
void outputs()
{
    if(n==0){printf("这里什么都没有呢,请试试添加信息吧!\n");return;}
    //int i;
    outputheader();
    node *pb;
    pb=pHead->next;
    while(pb!=NULL)
    {
        output(pb);
        pb=pb->next;
    }
    //printf("-----------------------------------------------------------------------------\n");
}

实现信息存储至文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
char filename[100]=FN;

void save_file_path()
{
    int com;
    printf("默认文件保存到%s,是否采用默认路径?采用输入0,不采用输入1。\n",filename);
    fflush(stdin);
    scanf("%d",&com);
    if(com==1)
    {
        printf("请输入您要保存的路径:\n");
        scanf("%s",filename);
    }
}

int save(char *fn)
{
    FILE *fp;
    node *pb;
    pb=pHead->next;
    if((fp=fopen(fn,"wb"))==NULL)
    {
        printf("fail open!\n");
        return -1;
    }
    while(pb!=NULL)
    {
        fwrite(&pb->data,sizeof(student),1,fp);
        pb=pb->next;
    }
    fclose(fp);
    return 0;
}

void save_file()
{
    if(n==0)
    {
    printf("这里没有信息呢,请先输入信息试试吧!\n");
    return ;
    }
    save_file_path();
    if(save(filename)==0)
    {
        printf("信息保存成功!\n");
        savedtag=0;
    }
    else
    {
        printf("信息保存不成功!\n");
    }
}


实现信息修改:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
int co;
node *p;
int po;
void change_warn(node *p)
{
    printf("要修改的信息如下,确认修改此信息?确认输入1,取消输入0.\n");
    outputheader();
    output(p);
    fflush(stdin);
    scanf("%d",&po);
}


void changeinf()
{
    int nl;
    double num;
    char rename[20],resex;
    printf("请输入要修改的内容:\n");
    if(po)
    {if(co==1)
    {
      fflush(stdin);
      scanf("%s",rename);
      strcpy(p->data.name,rename);
    }
    if(co==2)
    {
        fflush(stdin);
        scanf("%c",&resex);
        p->data.sex=resex;
    }
    if(co==3)
    {
      fflush(stdin);
      scanf("%d",&nl);
      p->data.age=nl;
    }
    if(co==4)
    {
      fflush(stdin);
      scanf("%lf",&num);
      p->data.scores[0]=num;
      p->data.sum=p->data.scores[0]+p->data.scores[1]+p->data.scores[2];
      p->data.avg=p->data.sum/3.0;
      sort_sum_down();
    }
    if(co==5)
    {
      fflush(stdin);
      scanf("%lf",&num);
      p->data.scores[1]=num;
      p->data.sum=p->data.scores[0]+p->data.scores[1]+p->data.scores[2];
      p->data.avg=p->data.sum/3.0;
      sort_sum_down();
    }
    if(co==6)
    {
       fflush(stdin);
       scanf("%lf",&num);
       p->data.scores[2]=num;
       p->data.sum=p->data.scores[0]+p->data.scores[1]+p->data.scores[2];
       p->data.avg=p->data.sum/3.0;
       sort_sum_down();
    }
    if(co==7)
    {
      fflush(stdin);
      scanf("%d",&nl);
      p->data.no=nl;
    }
    }
}
void changehead()
{
    printf("请输入你想要改变的学生信息:\n");
    printf("1修改姓名\n");
    printf("2修改性别\n");
    printf("3修改年龄\n");
    printf("4修改成绩1\n");
    printf("5修改成绩2\n");
    printf("6修改成绩3\n");
    printf("7修改学号\n");
    printf("0返回上一级\n");
    scanf("%d",&co);
    if(co==0)
    {
        return;
    }
}

void changehello()
{
    if(n==0)
    {
    printf("这里没有信息呢,请先输入信息试试吧!\n");
    return ;
    }
    printf("----------------------------------------------\n");
    printf("1根据学号查找需要修改的学生信息\n");
    printf("2根据姓名查找需要修改的学生信息\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    int cm,num;
    char naml[20];
    scanf("%d",&cm);
    if(cm==0){return;}
        switch(cm)
        {
          case 1:  printf("请输入TA的学号:\n");
                   scanf("%d",&num);
                   p=find_no(num);
                   #ifdef DEBUG
                   printf("找到啦!\n");
                   #endif // DEBUG
                   change_warn(p);
                   changehead();
                   changeinf();//学号
                   #ifdef DEBUG
                   printf("修改成功!\n");
                   outputs();
                   #endif // DEBUG
                   break;
          case 2:
                   printf("请输入TA的姓名:\n");
                   scanf("%s",naml);
                   p=find_name(naml);
                   #ifdef DEBUG
                   printf("找到啦!\n");
                   #endif // DEBUG
                   change_warn(p);
                   changehead();
                   changeinf();//姓名
                   #ifdef DEBUG
                   printf("修改成功!\n");
                   outputs();
                   #endif // DEBUG
                   break;
        }
    return;
}
/*
201 qiaoen f 15 92.5 85.6 78.5
200 liming  m 16 85 90 92
*/


实现查找功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"


lbpointer find_no(int num)
{
     int f=0;
     node *pb=pHead->next;
     while(pb!=NULL)
     {
        if(pb->data.no==num)
        {
        printf("找到啦!\n");
        f=1;
        outputheader();
        output(pb);
        return pb;
        }
         pb=pb->next;
     }
    if(f==0)
    {
    printf("没有找到这名同学~\n");
    return 0;
    }
    return 0;
}

lbpointer find_name(char namel[])
{
    int f=0;
    node *pb=pHead->next;
    while(pb!=NULL)
     {
        if(strcmp(namel,pb->data.name)==0)
        {
        printf("找到啦!\n");
        f=1;
        outputheader();
        output(pb);
        return pb;
        }
         pb=pb->next;
     }
    if(f==0)
    {
    printf("没有找到这名同学~\n");
    return 0;
    }
    return 0;
}

void findhello()
{
    if(n==0)
    {
    printf("这里没有信息呢,请先输入信息试试吧!\n");
    return ;
    }
    //printf("\n");
    printf("----------------------------------------------\n");
    printf("1根据学号查找\n");
    printf("2根据姓名查找\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    int cm,num;
    char naml[20];
    scanf("%d",&cm);
    if(cm==0){return;}
        switch(cm)
        {
          case 1:  printf("请输入TA的学号:\n");
                   scanf("%d",&num);
                   find_no(num);//学号
                   #ifdef DEBUG
                   printf("找到啦!当前有%d个人\n",n);
                   #endif // DEBUG
                   break;
          case 2:
              printf("请输入TA的姓名:\n");
              scanf("%s",naml);
              find_name(naml);//姓名
                   #ifdef DEBUG
                   printf("找到啦!当前有%d个人\n",n);
                   #endif // DEBUG
              break;
        }
    return;
}

实现删除操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
int pox;
void delete_warn(node *p)
{
    printf("要删除的信息如下,确认删除?确认输入1,取消输入0.\n");
    outputheader();
    output(p);
    fflush(stdin);
    scanf("%d",&pox);
}

void delete_no(int num)
{
    int f=0;
    node *pb=pHead,*plast,*tmp;
    while(pb->next!=NULL&&pb->next->data.no!=num)
     {
         pb=pb->next;
     }
     if(pb->next->data.no==num)
    {
        printf("找到啦!\n");
        f=1;
        delete_warn(pb->next);
        if(pox==1)
        {
            plast=pb->next->next;
            tmp=pb->next;
            pb->next=plast;
            free(tmp);
            n--;
            sort_sum_down();
        }
        else
        {
         return;
        }
    }
    if(f==0)
    {
    printf("没有找到这名同学~\n");
    return ;
    }
    return ;
}

void delete_name(char namel[])
{
    int f=0;
    node *pb=pHead,*plast,*tmp;
    while(pb->next!=NULL&&strcmp(namel,pb->next->data.name)!=0)
     {
         pb=pb->next;
     }
    if(strcmp(namel,pb->next->data.name)==0)
    {
        printf("找到啦!\n");
        f=1;
        delete_warn(pb->next);
        if(pox==1)
        {
            plast=pb->next->next;
            tmp=pb->next;
            pb->next=plast;
            free(tmp);
            n--;
            sort_sum_down();
        }
        else
        {
         return;
        }
    }
    if(f==0)
    {
    printf("没有找到这名同学~\n");
    return ;
    }
    return ;
}

void deletehello()
{
    if(n==0)
    {
    printf("这里没有信息呢,请先输入信息试试吧!\n");
    return ;
    }
    printf("----------------------------------------------\n");
    printf("1根据学号查找需要删除的学生信息\n");
    printf("2根据姓名查找需要删除的学生信息\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    int cm,num;
    char naml[20];
    fflush(stdin);
    scanf("%d",&cm);
    if(cm==0){return;}
        switch(cm)
        {
          case 1:   printf("请输入TA的学号:\n");
                   scanf("%d",&num);
                   delete_no(num);//学号
                   #ifdef DEBUG
                   printf("删除成功!当前有%d个人\n",n);
                   #endif // DEBUG
                   break;
          case 2:
                   printf("请输入TA的姓名:\n");
                   scanf("%s",naml);
                   delete_name(naml);//姓名
                   #ifdef DEBUG
                   //if(f==1)
                   printf("删除成功!当前有%d个人\n",n);
                   #endif // DEBUG
                   break;
        }
    return;
}

实现排序功能

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"

void sort_pos_down()
{
    node *pb;
    int o=1;
    pb=pHead->next;
    while(pb!=NULL)
    {
        pb->data.pos=o++;
        pb=pb->next;
    }
}
void sort_pos_up()
{
    node *pb;
    int o=n;
    pb=pHead->next;
    while(pb!=NULL)
    {
        pb->data.pos=o--;
        pb=pb->next;
    }
}

void sort_score0_up()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[0] > pn->data.scores[0])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}

void sort_score1_up()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[1] > pn->data.scores[1])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}
void sort_score2_up()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[2] > pn->data.scores[2])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}
void sort_score0_down()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[0] < pn->data.scores[0])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}
void sort_score1_down()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[1] < pn->data.scores[1])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}
void sort_score2_down()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.scores[2] < pn->data.scores[2])
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}
void sort_age_up()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.age > pn->data.age)
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}

void sort_age_down()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.age < pn->data.age)
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}

void sort_no_up()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.no > pn->data.no)
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}

void sort_no_down()
{
    int i,j;
    node *p,*pn;
    student tmp;
    for(i=0;i<n-1;i++)
    {
        p=pHead->next;
        pn=p->next;
        for(j=0;j<n-i-1;j++)
        {
            if(p->data.no < pn->data.no)
            {
                tmp=p->data;
                p->data=pn->data;
                pn->data=tmp;
            }
            p=p->next;
            pn=pn->next;
        }
    }
}

void sort_sum_up()
{
    node *p,*pmin,*q;
    student tmp;
    p=pHead->next;
    while(p->next!=NULL)
    {
        pmin=p;
        q=p->next;
        while(q!=NULL)
        {
            if(pmin->data.sum > q->data.sum)
                pmin=q;
            q=q->next;
        }
            if(pmin!=p)
            {
                tmp=pmin->data;
                pmin->data=p->data;
                p->data=tmp;
            }
            p=p->next;
    }
    sort_pos_up();
}

void sort_sum_down()
{
    node *p,*pmax,*q;
    student tmp;
    p=pHead->next;
    while(p->next!=NULL)
    {
        pmax=p;
        q=p->next;
        while(q!=NULL)
        {
            if(pmax->data.sum < q->data.sum)
                pmax=q;
            q=q->next;
        }
            if(pmax!=p)
            {
                tmp=pmax->data;
                pmax->data=p->data;
                p->data=tmp;
            }
            p=p->next;
    }
    sort_pos_down();
}

int sort_select()
{
    int mark;
    printf("----------------------------------------------\n");
    printf("1对学生信息进行升序排序\n");
    printf("2对学生信息进行降序排序\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    fflush(stdin);
    scanf("%d",&mark);
    return mark;
}

void sorthello()
{
    if(n==0)
    {
    printf("这里没有信息呢,请先输入信息试试吧!\n");
    return ;
    }
    printf("----------------------------------------------\n");
    printf("1根据学号对学生信息进行排序\n");
    printf("2根据总成绩对学生信息进行排序\n");
    printf("3根据年龄对学生信息进行排序\n");
    printf("4根据成绩1对学生信息进行排序\n");
    printf("5根据成绩2对学生信息进行排序\n");
    printf("6根据成绩3对学生信息进行排序\n");
    printf("0返回上一页\n");
    printf("----------------------------------------------\n");
    int cm,sel;
    fflush(stdin);
    scanf("%d",&cm);
    if(cm==0){return;}
        switch(cm)
        {
          case 1:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_no_up();}
                   if(sel==2){sort_no_down();}//学号
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 2:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_sum_up();}
                   if(sel==2){sort_sum_down();}//名次
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 3:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_age_up();}
                   if(sel==2){sort_age_down();}//年龄
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 4:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_score0_up();}
                   if(sel==2){sort_score0_down();}//成绩1
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 5:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_score1_up();}
                   if(sel==2){sort_score1_down();}//成绩2
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
          case 6:  sel=sort_select();
                   if(sel==0){sorthello();}
                   if(sel==1){sort_score2_up();}
                   if(sel==2){sort_score2_down();}//成绩3
                   #ifdef DEBUG
                   printf("排序成功!当前有%d个人\n",n);
                   outputs();
                   #endif // DEBUG
                   break;
        }
    return;
}

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值