学生管理系统

学生管理系统包括信息管理和成绩管理,代码还不完完善,欢迎

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//宏定义
#define length 10
#define MES (struct studentMessage*)malloc(sizeof(struct studentMessage))
#define MAR (struct studentMark*)malloc(sizeof(struct studentMark))
char subname[][10]={"高数","线代","C语言","英语","专概","心理","思修","体育","日语","韩语"};
//定义学生基本信息
typedef struct studentMessage
{
 char name [15];//姓名
 int number;//学号
 int age;//年龄
 char sex[20];//性别
 char collage[20];//学院
 char major[20];//专业
 int Class;//班级
 char ID[50];//身份证号
 struct studentMessage *next;
}MESSAGE;//定义链表
//定义学生成绩信息
typedef struct studentMark
{
   int number;
   char name[15];
   struct subject
   {
    int subnum;
    char subname[20];
    float score;
   }
   sub[length];//保存学生各科成绩
   double total;//总分
   struct studentMark *next;//定义链表
}MARK;
   //定义函数
   int Password();
   int menu(void);
   void mainmenu(MESSAGE *,MARK *);
   void searchmenu(MESSAGE *);
   void searchstuone(MESSAGE *);
   void scanstuAll(MESSAGE *);
   void searchstuclass(MESSAGE *);
   void scanstuMarkAll(MARK *);
   void searchMarkmenu(MARK *);
   void searchstuMarkone(MARK *);
   void savefilestuMark(MARK *);
   void savefilestu(MESSAGE *);
   MESSAGE *addstudent(MESSAGE *);//信息管理部分函数
   MESSAGE *changestu(MESSAGE *);
   MESSAGE *change(MESSAGE *);
   MESSAGE *deletestuone(MESSAGE *);
   MESSAGE *deletemenu(MESSAGE *);
   MESSAGE *deletestuclass(MESSAGE *);
   MESSAGE *deletestuall(MESSAGE *);
   MESSAGE *readfilestu(MESSAGE *);
   MARK *addstudentMark(MARK *);//成绩管理部分函数
   MARK *deletestuMarkall(MARK *);
   MARK *deletestuMarkone(MARK *);
   MARK *deleteMarkmenu(MARK *);
   MARK *changeMark(MARK *);
   MARK *changestuMark(MARK *);
   MARK *readfilestuMark(MARK *);
   //主函数
   main()
   {
       if(Password())
       {
       MESSAGE *head=NULL;
       MARK *top=NULL;
       mainmenu(head,top);
   }
   else
    printf("无法进入系统\n");
   }
//密码验证
int Password()
{
    char PASSWORD[6]="123456";
    int i,j,k;
    char password[6];
        for(i=0;i<=3;i++)
    {
        printf("\t\t|****************************************************|\n");
        printf("\t\t|                                                    |\n");
        printf("\t\t|                                                    |\n");
        printf("\t\t|         欢迎使用学生信息管理系统                   |\n");
        printf("\t\t|                                                    |\n");
        printf("\t\t|                                                    |\n");
        printf("\t\t|********************************制作人:黄蕾********|\n");
        printf("\t\t|**************请输入密码****************************|\n");
        for(j=0;j<6;j++)
        {
            getch();
        printf("*");}
        if(strcmp(password,PASSWORD))
        {
            printf("  \t| **************登陆成功***************|\n");
            return 1;
        }
        else
        {
            printf("  \t| *************登陆失败*****************|\n");
        }
    }
        if(i>3)
            printf("输入次数过多,不能登录\n");
            return 0;
    }
//主菜单//
int menu(void)
{
    int choose;
    do{
            system("cls");
        printf("    *************************************\n"     );
        printf("    *          学生管理系统             *\n"     );
        printf("    *          1.添加信息               *\n"     );
        printf("    *          2.查找信息               *\n"     );
        printf("    *          3.修改信息               *\n"     );
        printf("    *          4.删除信息               *\n"     );
        printf("    *          5.文件操作               *\n"     );
        printf("    *          6.退出                   *\n"     );
        printf("    *************************************\n"     );
        fflush(stdin);
        printf("请选择功能\n");
        scanf("%d",&choose);
        if(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6)
            printf("输入错误,请重新输入\n");
 }
        while(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6) ;
  return choose;
}
//选择菜单//
void mainmenu(MESSAGE *head,MARK *top)
{
    int getchoose,choose,choose1;
    while(1){
        getchoose=menu();
        switch(getchoose)
    {
         case 1:
        printf("     *************添加信息**********\n "       );
        printf("       1.添加学生基本信息\n"                   );
        printf("        2.添加学生成绩信息\n "                  );
        printf("       3.返回\n"                               );
        printf("     ********************************\n"       );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose);
        if(choose==1)
        head=addstudent(head);
        if(choose==2)
        top=addstudentMark(top);
        if(choose==3)
        {
   printf("请按任意键返回\n");
            getch();
  }
           else
            printf("输入错误,请重新输入\n");
            break;
 case 2:
        printf("     *************查找信息**********\n "       );
        printf("        1.查找学生基本信息\n"                  );
        printf("        2.查找学生成绩信息\n "                 );
        printf("        3.返回\n"                              );
        printf("     ********************************\n"       );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose);
        if(choose==1)
        searchmenu(head);
        if(choose==2)
        searchMarkmenu(top);
        if(choose==3)
        {
   printf("请按任意键返回\n");
            getch();
  }
           else
            printf("输入错误,请重新输入\n");
            break;
 case 3:
        printf("     *************修改信息**********\n "       );
        printf("         1.修改学生基本信息\n"                 );
        printf("         2.修改学生成绩信息\n "                );
        printf("         3.返回\n"                             );
        printf("     ********************************\n"       );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose);
        if(choose==1)
        head=changestu(head);
        if(choose==2)
        top=changestuMark(top);
        if(choose==3)
        {
   printf("请按任意键返回\n");
            getch();
  }
           else
            printf("输入错误,请重新输入\n");
            break;
 case 4:
        printf("     *************删除信息**********\n "       );
        printf("         1.删除学生基本信息\n"                 );
        printf("         2.删除学生成绩信息\n "                );
        printf("         3.返回\n"                             );
        printf("     ********************************\n"       );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose);
        if(choose==1)
        head=deletemenu(head);
        if(choose==2)
        top=deleteMarkmenu(top);
        if(choose==3)
        {
   printf("请按任意键返回\n");
            getch();
  }
           else
            printf("输入错误,请重新输入\n");
            break;
 case 5:
        printf("  ************文件管理***********\n" );
        printf("  *       1.读取信息          ***\n" );
        printf("  *       2.保存信息         ***\n" );
        printf("  *       3.返回            ***\n  );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose);
        if(choose==1)
        {
        printf("  ******读取信息选择**********\n");
        printf("  * 1.读取学生基本信息  ***\n"   );
        printf("  * 2.读取学生成绩信息  ***\n"   );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose1);
        if(choose1==1)
            head=readfilestu(head);
        if(choose1==2)
            top=readfilestuMark(top);
        else
        {
        printf("输入错误\n");
        printf("按任意键返回\n");
        getch();
            }
  }
        if(choose==2)
        {
        printf("  ********* 保存信息选择**********\n ");
        printf("  *   1.保存学生基本信息  **\n"    );
        printf("  *   2.保存学生成绩信息 **\n"    );
        fflush(stdin);
        printf("请选择\n");
        scanf("%d",&choose1);
        if(choose1==1)
            savefilestu(head);
        if(choose1==2)
            savefilestuMark(top);
        else
        {
           printf("输入错误\n");
           printf("按任意键返回\n");
           getch();
                }
            }
        if(choose==3)
        {
           printf("按任意键返回\n");
           getch();
  }
        break;
  case 6:
        exit(0);
        break;
        }
    }
}
//添加学生信息
MESSAGE *addstudent(MESSAGE *head)
{
    int number;
 MESSAGE *p1,*p2;
  do
     {
         fflush(stdin);
         printf("请输入一个学生学号:(以输入0结束)\n");
         scanf("%d",&number);
     }while(number<0);
     while(number!=0)
     {
 //输入信息
    p1=MES;
    fflush(stdin);
    printf("请输入:姓名\t学号\t\t年龄\t性别\t班级\t学院\t专业\t身份证号\n");
 scanf("%s\t%d\t%d\t%s\t%d\t%s\t%s\t%s\n",
       p1->name,&p1->number,&p1->age,p1->sex,&p1->Class,p1->collage,p1->major,p1->ID);
 if(head!=NULL)
 {
  p2=head;
     p1->next=p2;
     head=p1;
 }
 else
  head=p1;
  do
        {
            fflush(stdin);
            printf("请输入一个学生的学号(以输入0结束)\n");
            scanf("%d",&number);
        }
        while(number<0);
 }return head;
}
//浏览学生信息
void scanstuAll(MESSAGE *head)
{
    int count=0;
    MESSAGE *p=head;
    while(p!=NULL)
    {
        printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
              p=p->next;
              count++;
    }
    printf("总共有%d条学生信息\n",count);
    printf("请按任意键返回菜单\n");
    getch();
}
//添加学生成绩信息
 MARK *addstudentMark(MARK *top)
 {
     int num,i,j,Number,gole;
     MARK *p1=top,*p2=top,*p;
     do
     {
         fflush(stdin);
         printf("请输入一个学生学号:(以输入0结束)\n");
         scanf("%d",&num);
     }while(num<0);
     while(num!=0)
     {
         //输入信息
         gole=0;
         p1=top;
         p2=top;
         p=MAR;
         p->total=0;
         fflush(stdin);
         printf("请输入该学生姓名\n");
         scanf("%s",p->name);
         for(i=0;i<length;i++)
         {
            printf("%d%s",i+1,subname[i]);}
            printf("\n");
            fflush(stdin);
            printf("请选择你所选修的课程(输入-1结束选择)\n");
            for(i=0;i<length;i++)
          {
            scanf("%d",&Number);
            p->sub[i].subnum=Number;
            if(Number==-1)
                break;
            gole++;
     }
     for(i=0;i<gole;i++)
     {
         j=p->sub[i].subnum;
         if(j!=-1)
         {
             fflush(stdin);
             printf("请输入该学生%s的成绩\n",subname[j-1]);
             scanf("%f",&p->sub[j-1].score);
             p->total+=((double)(p->sub[j-1].score)/gole);
         }
         else
            break;
     }
        p->number=num;
        p->next=NULL;
        if(!top)
        {
            top=p;
        }
        else
        {
            while(p1)
            {
                if(p1->total>=p->total)
                {
                    p2=p1;
                    p1=p1->next;
                }
                else
                    break;
            }
            p->next=p1;
            p2->next=p;
        }
        do
        {
            fflush(stdin);
            printf("请输入一个学生的学号(以输入0结束)\n");
            scanf("%d",&num);
        }while(num<0);
     }
     printf("输入成功,按任意键返回\n");
     getch();
     return top;
     }
 //浏览学生成绩信息
 void scanstuMarkAll(MARK *top)
 {
     int count=0,i,j;
     MARK *p=top;
     while(p!=NULL)
     {
         printf("姓名\t学号\n");
         printf("%s\t%d\n",p->name,p->number);
         for(i=0;i<length;i++)
         {
             j=p->sub[i].subnum;
             if(j==-1)
                break;
             printf("%s\t",subname[j-1]);
             printf("%.2f\n",p->sub[j-1].score);
         }
         printf("总分\n");
         printf("%.2lf\n",p->total);
         p=p->next;
         count++;
     }
  printf("总共有%d条学生信息\n",count);
    printf("请按任意键返回菜单\n");
    getch();
}
//查找信息菜单
void searchmenu(MESSAGE *head)
{
    int choose;
    printf("查找信息\n");
    printf("1.查找个人信息\n");
    printf("2.查找班级信息\n");
    printf("3.查找全部信息\n");
    printf("请选择\n");
    fflush(stdin);
    scanf("%d",&choose);
    switch(choose)
    {
    case 1:searchstuone(head);break;
    case 2:searchstuclass(head);break;
    case 3:scanstuAll(head);break;
    default:printf("输入错误\n");break;
    }
}
//查找学生个人信息
void searchstuone(MESSAGE *head)
{
    char name[20];
    int number;
    int gole=0;
    int choose;
    do
    {
        fflush(stdin);
        printf("请选择查找方式\n1.姓名查找\n2.学号查找\n3.返回\n");
        scanf("%d",&choose);
        switch(choose)
        {
        case 1:
            fflush(stdin);
            printf("请输入查找的姓名\n");
            gets(name);
            while(head!=NULL)
        {
            if(!strcmp(name,head->name))
            {
            printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
              gole++;
            }
            printf("\n");
            head=head->next;
        }
        if(gole==0)
            printf("没有您要查找的信息");
        break;
        case 2:
            fflush(stdin);
            printf("请输入要查找的学号\n");
            scanf("%d",&number);
        while(head!=NULL)
        {
            if((number=head->number))
            {
            printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
              gole++;
            }
            printf("\n");
            head=head->next;
        }
        if(gole==0)
            printf("没有您要查找的信息\n");
             break;
        case 3:
            printf("请按任意键返回\n");
            getch();
            break;
            default:
            printf("输入错误,重新选择\n");
            break;
        }
     }
     while(choose!=1&&choose!=2&&choose!=3);
     getch();
    }
    //查找班级信息
    void searchstuclass(MESSAGE *head)
    {
        int Class;
        int gole=0;
        fflush(stdin);
        printf("请输入查找的班级\n");
        scanf("%d",&Class);
        while(head!=NULL)
        {
        if((Class=head->Class))
        {
            printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
              gole++;
        }printf("\n");
            head=head->next;
        }
        if(gole==0)
            printf("没有您要查找的信息");
      else
    printf("该班共有%d名学生",gole);
     getch();
    }
     //查找成绩菜单
    void searchMarkmenu(MARK *top)
    {
        int choose;
        printf("1 个人成绩\n");
        printf("2 全部学生成绩\n");
        printf("请选择");
        fflush(stdin);
        scanf("%d",&choose);
       switch(choose)
        {
            case 1:searchstuMarkone(top);break;
            case 2:scanstuMarkAll(top);break;
            default:printf("输入错误\n");break;
        }
    }
    //查找学生成绩信息
 void searchstuMarkone(MARK *top)
{
    char name[20];
    int number,i,j;
    int gole=0;
    int choose;
    do
    {
        fflush(stdin);
        printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
        scanf("%d",&choose);
        switch(choose)
        {
        case 1:
            fflush(stdin);
            printf("请输入查找的姓名\n");
            gets(name);
            while(top!=NULL)
        {
            if(strcmp(name,top->name))
            {
            printf("姓名\t学号\n");
            printf("%s\t%d\n",top->name,top->number);
        for(i=0;i<length;i++)
         {
             j=top->sub[i].subnum;
             if(j==-1)
                break;
             printf("%s\t",subname[j-1]);
             printf("%.2f\n",top->sub[j-1].score);
             printf("\n");
         }
             printf("总分\n");
             printf("%.2lf\n",top->total);
              gole++;
            }
            printf("\n");
            top=top->next;
        }
        if(gole==0)
            printf("没有您要查找的信息");
        break;
        case 2:
            fflush(stdin);
            printf("请输入要查找的学号\n");
            scanf("%d",&number);
        while(top!=NULL)
        {
            if((number=top->number))
            {
            printf("姓名\t学号\n");
            printf("%s\t%d\n",top->name,top->number);
        for(i=0;i<length;i++)
         {
             j=top->sub[i].subnum;
             if(j==-1)
                break;
             printf("%s\t",subname[j-1]);
             printf("%.2f\n",top->sub[j-1].score);
         }
         printf("总分\n");
         printf("%.2lf\n",top->total);
         gole++;
            }
            printf("\n");
            top=top->next;
        }
        if(gole==0)
            printf("没有您要查找的信息\n");
             break;
        case 3:
            printf("请按任意键返回\n");
            getch();
            break;
            default:
            printf("输入错误,重新选择\n");
            break;
        }
     }
     while(choose!=1&&choose!=2&&choose!=3);
     printf("请按任意键返回\n");
     getch();
    }
//修改学生信息
MESSAGE *changestu(MESSAGE *head)
{
    char name[20];
    int number;
    int gole=0;
    int choose;
    MESSAGE *p;
    p=MES;
    if(p==NULL)
    {
        printf("分配内存失败\n");
        exit(1);
    }
    if(head!=NULL)
    {
    do
    {
        fflush(stdin);
        printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
        scanf("%d",&choose);
        p=head;
        if(choose==1)
        {
            fflush(stdin);
            printf("请输入修改的姓名\n");
            gets(name);
            while(p!=NULL)
        {
            if(!strcmp(name,p->name))
            {
            p=change(p);
            gole++;
            }
            p=p->next;
        }
        if(gole==0)
            printf("没有您要修改的信息");
        }
    else if(choose==2)
     {
            fflush(stdin);
            printf("请输入要修改的学号\n");
            scanf("%d",&number);
        while(p!=NULL)
        {
            if(number==p->number)
            {
           p=change(p);
            }
            p=p->next;
        }
        if(gole==0)
            printf("没有您要修改的信息\n");}
        if(choose==3)
        {
            printf("请按任意键返回\n");getch();break;
        }
      else{
            printf("输入错误,重新选择\n");
     }
    }
     while(choose!=1&&choose!=2&&choose!=3);
}
else {
        printf("没有信息,请存入信息");}
        printf("请按任意键返回\n");
        getch();
        return head;
}
//分别修改学生信息
MESSAGE *change(MESSAGE *p)
{
    int choose1;
     printf("姓名\t性别\t学号\t年龄\t\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
    do
    {
        fflush(stdin);
         printf("请选择\n");
    printf("1.姓名\t2.性别\t3.学号\t4.年龄\t5.学院\t6.班级\t7.专业\t8.身份证号\t9.返回\t\n");
    //选择修改的信息
    scanf("%d",&choose1);
    switch(choose1)
    {
case 1:
    fflush(stdin);
    printf("请输入要修改的名字\n");
    gets(p->name);
    printf("已经修改成功\n");
    break;
    case 2:
    fflush(stdin);
    printf("请输入要修改的性别\n");
    gets(p->sex);
    printf("已经修改成功\n");
    break;
    case 3:
    fflush(stdin);
    printf("请输入要修改的学号\n");
    scanf("%d",&p->number);
    printf("已经修改成功\n");
    break;
    case 4:
    fflush(stdin);
    printf("请输入要修改的年龄\n");
    scanf("%d",&p->age);
    printf("已经修改成功\n");
    break;
    case 5:
    fflush(stdin);
    printf("请输入要修改的学院\n");
    gets(p->collage);
    printf("已经修改成功\n");
    break;
    case 6:
    fflush(stdin);
    printf("请输入要修改的班级\n");
    scanf("%d",&p->Class);
    printf("已经修改成功\n");
    break;
    case 7:
    fflush(stdin);
    printf("请输入要修改的专业\n");
    gets(p->major);
    printf("已经修改成功\n");
    break;
    case 8:
    fflush(stdin);
    printf("请输入要修改的身份证号\n");
    gets(p->ID);
    printf("已经修改成功\n");
    break;
    case 9:
    break;
    default:
        printf("您输入的错误,请重新选择\n");
        break;
    }
     }  while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&
             choose1!=5&&choose1!=6&&choose1!=7&&choose1!=8&&choose1!=9);
                    getch();
                return p;
}
//修改学生成绩信息
  MARK *changestuMark(MARK *top)
  {
      char name[20];
      int number;
      int gole=0;
      int choose;
      MARK *p;
      p=MAR;
      if(p==NULL)
      {
          printf("分配内存失败\n");
          exit(1);
      }
      if(top!=NULL)
      {
          do{
            fflush(stdin);
          printf("请选择\n1.姓名\n2.学号\n3.返回");
          scanf("%d",&choose);
          p=top;
          if(choose==1)
          {
              fflush(stdin);
              printf("请输入要修改的信息的名字\n");
              gets(name);
              while(p!=NULL)
              {
                  if(strcmp(name,p->name))
                  {
                      p=changeMark(p);
                      gole++;
                  }
                  p=p->next;
              }
              if(gole==0)
                printf("没有您要修改的信息\n");
          }
      if(choose==2)
      {
          fflush(stdin);
          printf("请输入您要修改信息的学号\n");
          scanf("%d",&number);
          while(p!=NULL)
          {
              if((number=p->number))
              {
                  p=changeMark(p);
                  gole++;
              }
             p=p->next;
          }
          if(gole==0)
            printf("没有您要修改的信息\n");
  }
  else if(choose==3)
 {
     printf("请按任意键返回主菜单\n");
    getch();
    break;
    }
    else
        printf("输入错误,请重新输入\n");
    }while(choose!=1&&choose!=2&&choose!=3);
    }
    else
        printf("没有信息,请先存入信息\n");
    printf("请按任意键返回\n");
    getch();
    return top;
    }
    //分别修改学生成绩信息
    MARK *changeMark(MARK *p)
    {
        int choose1,i,j,k=3,m,gole=0;
        float change=0;
        printf("姓名\t学号\n");
        printf("%s\t%d\n",p->name,p->number);
        for(i=0;i<length;i++)
        {
            j=p->sub[i].subnum;
            if(j==-1)
                break;
            gole++;
            printf("%s\n",subname[j-1]);
            printf("%.2f\n",p->sub[j-1].score);
            printf("\n");
        }
        printf("总分\n");
        printf("%.2lf\n",p->total);
        do
        {
            fflush(stdin);
            printf("请选择(1 姓名 2 学号");
            for(i=0;i<length;i++)
            {
                j=p->sub[i].subnum;
                if(j==-1)
                    break;
                printf("%d %s",i+3,subname[j-1]);
            }
            printf("\n");
            scanf("%d",&choose1);
            if(choose1==1)
            {
                fflush(stdin);
                printf("请输入要修改的名字\n");
                gets(p->name);
                printf("已经修改\n");
            }
            if(choose1==2)
            {
                fflush(stdin);
                printf("请输入要修改的学号");
                scanf("%d",&p->number);
                printf("已经修改成功");
            }
            while(1)
            {
                if(choose1==k)
                {
                    fflush(stdin);
                    m=p->sub[k-3].subnum;
                    printf("输入要修改的%s分数\n",subname[m-1]);
                    change=p->sub[m-1].score;
                    scanf("%.3f",&p->sub[m-1].score);
                    p->total+=(int)(p->sub[m-1].score-change)/gole;
                    printf("已经修改成功\n");
                    break;
                }
                k++;
            }
           }while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&choose1!=5&&choose1!=6);
           getch();
           return p;
        }
//删除信息菜单
MESSAGE *deletemenu(MESSAGE *head)
{
    int choose;
    printf("删除信息\n");
    printf("1.删除个人信息\n");
    printf("2.删除班级信息\n");
    printf("3.删除全部信息\n");
    fflush(stdin);
    printf("请选择\n");
    scanf("%d",&choose);
    if(choose==1)
        head=deletestuone(head);
    if(choose==2)
       head=deletestuclass(head);
    if(choose==3)
        head=deletestuall(head);
    else
        printf("输入错误\n");
        return head;
}
//删除班级
MESSAGE *deletestuclass(MESSAGE *head)
{
    int Class;
    int gole=0;
    MESSAGE *p1,*p2,*p3=head;
    MESSAGE *p=head;
    fflush(stdin);
    printf("请输入删除的班级");
    scanf("%d",&Class);
    while(p3!=NULL)
    {
        p1=head;
        p2=head;
        while((p1->next!=NULL)&&(p2->Class!=Class))
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1->Class==Class)
        {
           printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
              if(p1==head)
                head=p1->next;
              else
                p2->next=p1->next;
              free(p1);
              gole++;
        }else
        printf("该班级没有信息\n");
        p3=p3->next;
    }
    if(gole!=0)
        printf("共删除该班级%d条信息",gole);
    getch();
    return head;
}
//删除全部信息
MESSAGE *deletestuall(MESSAGE *head)
{
    int count=0;
    while(head!=NULL)
    {
        count++;
        head=head->next;
    }
    printf("共删除%d条信息",count);
    return head;
}
//删除学生个人信息
MESSAGE *deletestuone(MESSAGE *head)
{
    char name[20];
    int number;
    int gole=0;
    int choose;
    char m;
    MESSAGE*p1,*p2,*find;
    MESSAGE*p=head;
    p1=MES;
    p2=MES;
    find=MES;
    if(p1==NULL)//分配内存
    {
        printf("分配内存失败");
        exit(1);
    }
    if(p2==NULL)
    {
        printf("分配内存失败");
        exit(1);
    }
    if(find==NULL)
    {
        printf("分配内存失败");
        exit(1);
    }
    if(head!=NULL)
    {
      p1=head;
      p2=head;
      do
      {
          fflush(stdin);
          printf("请选择\n1.姓名\n2.学号\n3.返回\n");
          scanf("%d",&choose);
          switch(choose)
          {
          case 1:
            find=head;
            fflush(stdin);
            printf("请输入要删除的信息名字\n");
            gets(name);
            while(find!=NULL)
            {
               if(strcmp(name,find->name))
               {
                   printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
              gole++;
               }
               printf("\n");
               find=find->next;
            }
            if(gole==0)
                printf("没有您要删除的信息\n");
            else
            {
                fflush(stdin);
                printf("是否要删除以上的信息(y/n)\n");
                m=getchar();
                if(m=='y')
                {
                    while((p1->next=NULL)&&(strcmp(name,p1->name)!=0))
                    {
                        p2=p1;p1=p1->next;
                    }
                    if(strcmp(name,p1->name)==0)
                    {
                        if(p1==head)
                            head=p1->next;
                        else
                            p2->next=p1->next;
                        free(p1);
                    }
                    printf("成功删除以上信息\n");
                }
            }
            printf("请按任意键返回\n");
            getch();
            break;
            case 2:
            fflush(stdin);
            printf("请输入要删除的信息学号\n");
            scanf("%d",&number);
            find=head;
            while(find!=NULL)
            {
               if(number==find->number)
               {
                   printf("姓名\t性别\t学号\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
              gole++;
               }
               printf("\n");
               find=find->next;
            }
            if(gole==0)
                printf("没有您要删除的信息\n");
            else
            {
                fflush(stdin);
                printf("是否要删除以上的信息(y/n)\n");
                m=getchar();
                if(m=='y')
                {
                    while((p1->next=NULL)&&(number!=p1->number))
                    {
                        p2=p1;p1=p1->next;
                    }
                    if(number==p1->number)
                    {
                        if(p1==head)
                            head=p1->next;
                        else
                            p2->next=p1->next;
                        free(p1);
                    }
                    printf("成功删除以上信息\n");
                }
            }
            printf("请按任意键返回\n");
            getch();
            break;
            case 3:
             printf("请按任意键返回\n");
            getch();
            break;
            default:
                printf("您输入错误,请重新选择\n");
                break;
          }
      }while(choose!=1&&choose!=2&&choose!=3);
}
   else {
        printf("没有信息,请存入信息");
}
        printf("请按任意键返回\n");
        getch();
        return head;
}
 //删除成绩菜单
 MARK *deleteMarkmenu(MARK *top)
{
    int choose;
    printf("删除信息\n");;
    printf("1.删除个人信息\n");
    printf("2.删除全部信息");
    fflush(stdin);
    printf("请选择\n");
    scanf("%d",&choose);
    if(choose==1)
        top=deletestuMarkone(top);
    if(choose==2)
     top=deletestuMarkall(top);
    else
        printf("输入错误\n");
        return top;
}
//删除学生个人成绩信息
MARK *deletestuMarkone(MARK *top)
{
    char name[20];
    int number,i,j;
    int gole=0;
    int choose;
    char m;
    MARK *p1,*p2,*find;
    p1=MAR;
    p2=MAR;
    find=MAR;
    if((p1=NULL))
    {
        printf("分配内存失败");
        exit(1);
    }
        if((p2=NULL))
    {
        printf("分配内存失败");
        exit(1);
    }if((find=NULL))
    {
        printf("分配内存失败");
        exit(1);
    }
    if(top!=NULL)
    {
    p1=top;
    p2=top;
    do
    {
        fflush(stdin);
        printf("请选择\n1.姓名\n 2.学号\n 3.返回\n");
        scanf("%d",&choose);
        switch(choose)
        {
        case 1:
            find=top;
            fflush(stdin);
            printf("输入要删除的名字\n");
            gets(name);
            while(find!=NULL)
            {
                if(!strcmp(name,find->name))
                {
                   printf("姓名\t学号\n");
                   printf("%s\t%d\n",find->name,find->number);
                   for(i=0;i<length;i++)
                   {
                       j=find->sub[i].subnum;
                       if(j==-1)
                        break;
                       printf("%s\n",subname[j-1]);
                       printf("%.2f\n",find->sub[j-1].score);
                       printf("\n");
                      }
                      printf("总分\n");
                      printf("%.2lf\n",find->total);
                       gole++;
                   }
                   printf("\n");
                   find=find->next;
               }
               if(gole==0)
               {
                printf("没有您要删除的信息\n");
            }
            else
            {
                fflush(stdin);
                printf("是否要删除以上的信息\n");
                m=getchar();
                if(m=='y'||m=='Y')
                {
                    while(p1->next!=NULL&&(strcmp(name,p1->name)!=0))
                    {
                        p2=p1;
                        p1=p1->next;
                    }
                    if(strcmp(name,p1->name)==0)
                    {
                        if(p1==top)
                            top=p1->next;
                        else
                            p2->next=p1->next;
                        free(p1);
                    }
                    printf("成功删除以上信息");
                }
          }
       printf("请按任意键返回\n");
       getch();
       break;
          case 2:
            fflush(stdin);
        printf("请输入要删除的信息学号\n");
            scanf("%d",&number);
            find=top;
            while(find!=NULL)
            {
               if(number==find->number)
               {
                   printf("姓名\t学号\n");
                   printf("%s\t%d\n",find->name,find->number);
                   for(i=0;i<length;i++)
                   {
                       j=find->sub[i].subnum;
                       if(j==1)
                        break;
                       printf("%s\n",subname[j-1]);
                       printf("%.2f\n",find->sub[j-1].score);
                       printf("\n");
                   }
                   printf("总分\n");
                   printf("%.2lf\n",find->total);
                   gole++;
               }
               printf("\n");
               find=find->next;
            }
               if(gole==0)
                printf("没有您要删除的信息\n");
            else
        {
                fflush(stdin);
                printf("是否要删除以上的信息(y/n)\n");
                m=getchar();
                if(m=='y'||m=='Y')
                {
                    while(p1->next!=NULL&&(number!=p1->number))
                    {
                        p2=p1;
                        p1=p1->next;
                    }
                    if(number==p1->number)
                    {
                        if(p1==top)
                            top=p1->next;
                        else
                            p2->next=p1->next;
                        free(p1);
                    }
                    printf("成功删除以上信息");
                }
          }
       printf("请按任意键返回\n");
       getch();
       break;
   case 3:
   printf("请按任意键返回\n");
       getch();
       break;
       default:
           printf("输入错误,重新输入\n");
           break;
    }
}while(choose!=1&&choose!=2&&choose!=3);
}
   else {
        printf("没有信息,请存入信息");
        printf("请按任意键返回\n");
        getch();
   }
        return top;
}
   //删除全部成绩
       MARK *deletestuMarkall(MARK *top)
       {
           int count=0;
           while(top!=NULL)
           {
               count++;
               top=top->next;
           }
           printf("总共删除%d条信息\n",count);
           return top;
       }
    //浏览学生信息文件
MESSAGE *readfilestu(MESSAGE *head)
   {
       char *filename;
       MESSAGE *add;
       FILE *stu;
       filename=(char *)malloc(sizeof(char));
       fflush(stdin);
       printf("请输入要读取的文件");
       gets(filename);
       filename=strcat(filename,".txt");
       stu=fopen(filename,"r");
       if(stu==NULL)
       {
           printf("文件中没有任何文件,请存入\n");
       }
       else{
        while(!feof(stu))
        {
            add=MES;
            if(add==NULL)
            {
                printf("申请内存失败\n");
                exit(1);
            }
       printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
       fscanf(stu,"%s%s%d%d%s%s%d%s%s",
              add->name,add->sex,&add->number,&add->age,add->collage,&add->Class,add->major,add->ID);
        printf("%s\t%s\t%d\t%d\t%s\t%s\t%s\t%s\t\n",
              add->name,add->sex,add->number,add->age,add->collage,add->Class,add->major,add->ID);
            add->next=head;
            head=add;
     add=add->next;
       }
       fclose(stu);
       printf("读取信息成功\n");
   }
   printf("请按任意键返回\n");
   getch();
   return head;
   }
  //浏览成绩文件
   MARK *readfilestuMark(MARK *top)
   {
       int i,k=0;
       char *filename;
       FILE *stu;
       MARK *add,*p1=top,*p2=top;
       filename=(char *)malloc(sizeof(char));
       fflush(stdin);
       printf("请输入要读取的文件");
       gets(filename);
       filename=strcat(filename,".txt");
       stu=fopen(filename,"r");
       if(stu==NULL)
       {
           printf("文件中没有任何文件,请存入\n");
       }
       else{
        while(!feof(stu))
        {
            add=MAR;
            if(add==NULL)
            {
                printf("申请内存失败\n");
                exit(1);
            }
            printf("姓名\t学号\n");
            fscanf(stu,"%s%d",&add->name,&add->number);
            printf("%s\t%d\n",add->name,add->number);
            for(i=0;i<length;i++)
            {
                printf("%s\t",subname[i]);
            }
            printf("\n");
            for(i=0;i<length;i++)
            {
            fscanf(stu,"%f",&add->sub[i].score);
            printf("%.3f\t",add->sub[i].score);
            if(add->sub[i].score!=0)
            {
                add->sub[k].subnum=i+1;
                k++;
            }
        }
        add->sub[k].subnum=-1;
        printf("总分\n");
        fscanf(stu,"%lf\n",&add->total);
        printf("%.4lf\n",add->total);
        add->next=NULL;
        if(!top)
        {
            top=add;
        }
        else
        {
            //找到插入的位置
            while(p1)
            {
                if(p1->total>=add->total)
                {
                    p2=p1;
                    p1=p1->next;
                }
                else
                    break;
            }
            add->next=p1;
            p2->next=add;
        }
        add=add->next;
       }
       fclose(stu);
       printf("读取信息成功\n");
   }
   printf("请按任意键返回\n");
   getch();
   return top;
   }
      //储存学生信息文件
      void savefilestu(MESSAGE *head)
      {
          char *filename;
          FILE *stu;
          MESSAGE *p;
          if(head==NULL)
          {
              printf("没有任何信息,请先存入信息\n");
              printf("请按任意键返回\n");
              getch();
          }
          else
        {
            p=head;
            filename=(char*)malloc(sizeof(char));
            fflush(stdin);
             printf("请输入要保存的文件\n");
            gets(filename);
             filename=strcat(filename,".txt");
            stu=fopen(filename,"a+");
            do
            {
              printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
        printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
              p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
              p=p->next;
            }
            while(p!=NULL);
            fclose(stu);
            printf("已经将信息保存入%s中\n",filename);
           }
            printf("请按任意键返回\n");
            getch();
      }
       //储存学生成绩文件
       void savefilestuMark(MARK *top)
            {
            int i,j,k=0;
            char *filename;
            FILE*stu;
            MARK*p;
            p=MAR;
            if(top==NULL)
            {
              printf("没有任何信息,请先存入信息\n");
              printf("请按任意键返回\n");
              getch();
          }
          else
          {
              p=top;
              filename=(char *)malloc(sizeof(char));
              fflush(stdin);
              printf("请输入你要保存文件的名字\n");
              gets(filename);
              filename=strcat(filename,".txt");
              stu=fopen(filename,"a+");
             while(p!=NULL)
            {
            printf("姓名\t学号\n");
            fprintf(stu,"%s\t%d\t",p->name,p->number);
            printf("%s\t%d\n",p->name,p->number);
            for(i=0;i<length;i++)
           {
            printf("%s\t",subname[i]);
            }
            printf("\n");
            for(i=0;i<length;i++)
            {
                j=p->sub[i].subnum;
                if(j==-1)
                {
                    while(k<length)
                    {
                        fprintf(stu,"0\t");
                        printf("0\t");
                        k++;
                    }
                    break;}
                else{
                while(k<length)
                {
                    if(j==k)
                    {
                        k++;
                       fprintf(stu,"%.3f\t",p->sub[k-1].score);
                       printf("%.3f\t",p->sub[k-1].score);
                        break;
                    }
                    else{
                        fprintf(stu,"0\t");
                    printf("0\t");
                }
            }
        }}
              printf("\n");
              printf("总分\n");
              fprintf(stu,"%.4lf\n",p->total);
              printf("%.4lf\n",p->total);
              p=p->next;
          }
          fclose(stu);
          printf("已经将信息保存到%s中\n",filename);
         }
            printf("按任意键返回\n");
            getch();
            }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值