您的位置:首页 > 其它

课程设计--学生信息管理系统

2017-01-01 13:17 609 查看
/***********************************************************    
* 版权所有 (C)2016,test   
*    
* 文件名称: main.cpp    
* 文件标识:main    
* 内容摘要:函数文件    
* 其它说明:主函数    
* 当前版本: V8.0    
* 作 者:陈晓琳  
* 完成日期: 2017.1.1    
*  /*********************************************************
  源文件  :

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#include "ccc.h"

int Initlist(Linklist *L)//初始化线性表

{

 (*L)=(Linklist)malloc(sizeof(LNode));

    if(!(*L))

    return (0);

    (*L)->next=NULL;

    return true;

}

/***************************************************************************************

*功能描述:运用头插法建立单链表

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int Creatlist(Linklist L)//头插法生成单链表

{

     Linklist s,r;

  s=(Linklist )malloc(sizeof(LNode));

  if(!s)

  {

   return 0;

  }

  else

  {

            printf("请输入学生的个人信息\n");

   printf("学号:   \n");

   scanf("      %s",s->data.Num);

            printf("姓名:   \n");

   scanf("      %s",s->data.Name);

      printf("班级:   \n");

   scanf("      %s",s->data.className);

       printf("手机号: \n");

   scanf("      %s",s->data.telNumber);

      printf("邮箱:   \n");

   scanf("      %s",s->data.email);

   printf("专业课程:   \n");

   scanf("      %s",s->data.course);

   printf("成绩:   \n");

   scanf("      %d",&s->data.score);   

  }

     s->next=L->next;

  L->next=s;

     return true;

}

/***************************************************************************************

*功能描述:显示学生的信息

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

void Display(Linklist L)//显示学生信息

{

 Linklist p;

 char flat=0;

 while(p)

 {

  printf("学号\t姓名\t班级\t手机号\t邮箱\t专业课程\t成绩\n");

 for(p=L->next;p;p=p->next)

 {

    printf("%s\t%s\t%s\t%s\t\t%s\t %s\t%d\n",p->data.Num,p->data.Name,p->data.className,p->data.telNumber,p->data.email,p->data.course,p->data.score);

 flat=1;

 }

 }

 if(!flat)

 {

  printf("无法显示学生的信息,请进入其他功能区 \n");

 }

}

/***************************************************************************************

*功能描述:按学号进行查询

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int SearchNum(Linklist L,char Num[20])//学号查询

{

 LNode *p;

 char flat=0;

 p=L;

 while(p)

 {

  if(p!=NULL)

  {

  if(strcmp(p->data.Num,Num)==0)

    {

   printf("学号:     %s\n",p->data.Num);

            printf("姓名:     %s\n",p->data.Name);

      printf("班级:     %s\n",p->data.className);

      printf("手机号:   %s\n",p->data.telNumber);

      printf("邮箱:     %s\n",p->data.email);

   printf("专业课程: %s\n",p->data.course);

   printf("加权成绩: %d\n",p->data.score);

           flat=1;

     }

  }

    p=p->next;

 }

 if(!flat)

  {

   printf("对不起输入学号错误或该同学已被删除,请重新输入进行查询 \n");

  }

 return true;

}

/***************************************************************************************

*功能描述:按姓名进行查询

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int SearchName(Linklist L,char Name[10])//姓名查询

{

   LNode *p;

 char flat=0;

 p=L;

 while(p)

 {

     if(p!=NULL)

  {

    if(strcmp(p->data.Name,Name)==0)

    {

   printf("学号:        %s\n",p->data.Num);

            printf("姓名:        %s\n",p->data.Name);

      printf("班级:        %s\n",p->data.className);

      printf("手机号:      %s\n",p->data.telNumber);

      printf("邮箱:        %s\n",p->data.email);

   printf("专业课程:    %s\n",p->data.course);

   printf("成绩:        %d\n",p->data.score);

   flat=1;

    }

  }

    p=p->next;  

  

 }

 if(!flat)

  {

   printf("输入姓名错误或该同学已被删除,请重新输入进行查询 \n");

  }

 return true;

}

/***************************************************************************************

*功能描述:按学号进行排序

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

void SortNum(Linklist L)//学号排序

{

 Linklist p,q;

 struct STUDENT temp;

 for(p=L->next;p!=NULL;p=p->next)

 {

  for(q=p->next;q!=NULL;q=q->next)

  {

   if(strcmp(p->data.Num,q->data.Num)>0)

   {

    temp=q->data;

    q->data=p->data;

    p->data=temp;

   }

  }

 }

}

/***************************************************************************************

*功能描述:按姓名进行排序

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

void SortName(Linklist L)//姓名排序

{

 Linklist p,q;

 struct STUDENT temp;

 for(p=L->next;p!=NULL;p=p->next)

 {

  for(q=p->next;q!=NULL;q=q->next)

  {

   if(strcmp(p->data.Name,q->data.Name)>0)

   {

    temp=q->data;

    q->data=p->data;

    p->data=temp;

   }

  }

 }

}

/***************************************************************************************

*功能描述:按学生成绩进行排序

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

void SortScore(Linklist L)//成绩排序

{

 Linklist p,q;

 struct STUDENT temp;

 for(p=L->next;p!=NULL;p=p->next)

 {

  for(q=p->next;q!=NULL;q=q->next)

  {

   if((p->data.score,q->data.score)<0)

   {

    temp=q->data;

    q->data=p->data;

    p->data=temp;

   }

  }

 }

}

/***************************************************************************************

*功能描述:实现学生的插入信息

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int Insert(Linklist L, char Num[20])//插入信息

{

 LNode  *p=L,*s;

    char flat=0;

 while (p)

 { 

  if((strcmp(p->data.Num,Num))!=0)

  {

     s=(LNode *)malloc(sizeof(LNode));

              printf("请输入学生的个人信息\n");

     printf("学号:");

     scanf("%s",s->data.Num);

     printf("姓名:");

     scanf("%s",s->data.Name);

     printf("班级:");

     scanf("%s",s->data.className);

     printf("手机号:");

     scanf("%s",s->data.telNumber);

              printf("邮箱:");

     scanf("%s",s->data.email);

     printf("专业课程:");

     scanf("%s",s->data.course);

     printf("成绩:");

     scanf("%d",&s->data.score);

        s->next=p->next;

        p->next=s;

        printf("插入新的学生信息成功\n");

     flat=1;

  }

       p=p->next;

 }

 if(!flat)

 {

  printf("插入新同学失败,请重新输入 \n");

 }

 return  true;

}

/***************************************************************************************

*功能描述:按学生学号进行删除

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int Del(Linklist L, char Num[100])//按学号进行删除

{

 LNode *p;

 LNode *q;

 char flag=0;

 p=L;

 q=L->next;

 while(q)

 {

  if(strcmp(q->data.Num,Num)==0)

  {

   p->next=q->next;

   free(q);

   flag=1;

   break;

  }

  p=p->next;

  q=q->next;

 }

 if(!flag)

 {

  printf("对不起,该学号的学生不存在 \n");

  return true;

 }

 printf("删除成功\n");

}

/***************************************************************************************

*功能描述:修改学生的个人信息

*输入参数:无

*输出参数:无 

*返回值:无

*其他说明:消息字段之间用分号(;)隔离 

***************************************************************************************/ 

int Alter(Linklist L,char Num[100])//修改学生的个人信息

{

 LNode *p;

 p=L;

 int s;

 while(p)

 {

  if(strcmp(p->data.Num,Num)==0)

  {

     printf("请输入你要修改的学生的信息:1.修改学号 2.修改姓名 3.修改手机号 4.修改邮箱 5.修改班级 6.修改专业课程 7.修改成绩\n");

     printf("请选择操作序号:");

        scanf("%d",&s);

     switch(s)

    {

      case 1:

    {

       printf("请输入要修改的学生的学号: ",p->data.Num);

       scanf("%s",p->data.Num);

       printf("该学生的信息修改成功\n");

    break;

    }

   case 2:

    {

    printf("请输入要修改的学生的姓名: ",p->data.Name);

       scanf("%s",p->data.Name);

       printf("该学生的信息修改成功\n");

    break;

    }

   case 3:

    {

    printf("请输入要修改的学生的手机号: ",p->data.telNumber);

       scanf("%s",p->data.telNumber);

       printf("该学生的信息修改成功\n");

    break;

    }

  case 4:

    {

    printf("请输入要修改的学生的邮箱号: ",p->data.email);

       scanf("%s",p->data.email);

       printf("该学生的信息修改成功\n");

    break;

    }

  case 5:

   {

    printf("请输入要修改的学生的班级: ",p->data.className);

       scanf("%s",p->data.className);

       printf("该学生的信息修改成功\n");

    break;

    }

  case 6:

   {

    printf("请输入要修改的学生的专业课程: ",p->data.course);

       scanf("%s",p->data.course);

       printf("该学生的信息修改成功\n");

    break;

   }

  case 7:

   {

    printf("请输入要修改的学生的成绩: ",p->data.score);

       scanf("%d",&p->data.score);

       printf("该学生的信息修改成功\n");

    break;

  default:

   break;

   }

  }

 }

  p=p->next;

 }

 return true;

}

main函数:
#include <stdio.h>

#include <stdlib.h>//清屏头文件

#include "ccc.h"

int main()

{

   int s;

   int n;

   char m;

   char Name[100];

   char Num[100];

   Linklist L;

   Initlist(&L);//初始化单链表

   int x=1;

   while(x)

   {

                  printf("******************************************************\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("                 【0】退出个人信息管理系统            \n");

                  printf("******************************************************\n");

                  printf("          请选择操作序号:");

     scanf("%d",&s);

    switch(s)

    {

     case 1:

      {

         Creatlist(L);//头插法生成单链表

               do

      {

       system("cls");

       printf("是否继续输入?(Y/N):");

                   getchar();

                   scanf("%s",&m);

       if(m=='Y')

       {

        Creatlist(L);//显示学生信息

       }

      }

                   while(m!='N');

        break;

     }

     case 2:

      {

       system("cls");

       printf("**************欢迎进入到学生信息查询系统******\n");

                   printf("1:按姓名查询\n");

       printf("2:按学号查询\n");

       scanf("%d",&n);

       if(n==1)

       {

        printf("请输入要查找人的姓名: \n");

        scanf("%s",&Name);

        SearchName(L,Name);//查询姓名

       }

       if(n==2)

       {

                      printf("请输入要查找人的学号: \n");

       scanf("%s",&Num);

       SearchNum(L, Num);//学号查询

       }

       printf("*************欢迎下次进入*******************\n");

       break;

      }

     case 3:

      {

       system("cls");

                   printf("**************欢迎进入到学生信息显示系统******\n");

       printf("显示班级中所有学生的信息\n");

       printf("*********************************\n");

       printf("\n\t\t 1.按姓名显示");

       printf("\n\t\t 2.按学号大小显示");

       printf("\n\t\t 3.按成绩显示\n");

       scanf("%d",&n);

       if(n==1)

       {

        printf("系统中所有学生的信息如下: \n");

        SortName(L);//按姓名进行排序

        Display(L);

       }

       if(n==2)

       {

        printf("系统中所有学生的信息如下: \n");

        SortNum(L);//按学号进行排序

        Display(L);

       }

       if(n==3)

       {

        printf("系统中所有学生的信息如下: \n");

        SortScore(L);//按成绩进行排序

        Display(L);

       }

        printf("*************欢迎下次进入*******************\n");

       break;

      }

     case 4:

      {

       system("cls");

       printf("**************欢迎进入到学生信息查询系统******\n");

       printf("请输入你所要插入的学生的学号: \n");

       getchar();

       scanf("%s",&Num);

       Insert(L, Num);

       printf("*************欢迎下次进入*******************\n");

       break;

      }

     case 5:

      {

       system("cls");

       printf("**************欢迎进入到学生信息查看功能区******\n");

                   printf("1:管理员\n");

       printf("2:学生\n");

       scanf("%d",&m);

       if(m==1)

       {

         printf("查看本系统所有学生信息 \n");

         Display(L);

       }

       if(m==2)

       {

        printf("1:按姓名查询\n");

           printf("2:按学号查询\n");

        int x;

        scanf("%d",&x);

       if(x==1)

       {

        printf("请输入要查找人的姓名: \n");

        scanf("%s",&Name);

        SearchName(L,Name);//查询姓名

       }

       if(n==x)

       {

        printf("请输入要查找人的学号: \n");

        scanf("%s",&Num);

        SearchNum(L, Num);//学号查询

       }

       printf("*************欢迎下次进入*******************\n");

       }

       break;

      

      }

     case 6:

      {   system("cls");

          printf("**************欢迎进入到班级信息修改功能区******\n");

       printf("请输入要修改该学生信息的学号: \n");

       getchar();

       scanf("%s",&Num);

       Alter(L,Num);

       printf("*************欢迎下次进入*******************\n");

       break;

      }

     case 7:

      {

       system("cls");

       printf("**************欢迎进入到学生信息的删除功能区******\n");

       printf("请输入所要删除的学生的学号: \n");

       getchar();

       scanf("%s",&Num);

       printf("是否确定删除该同学:(Y/N)");

       scanf("%s",&m);

       if(m=='Y')

       {

        Del(L, Num);

       }

       else

       {

        printf("输入错误,请重新输入Y/N");

       }

                   printf("*************欢迎下次进入*******************\n");

       break;

      }

     case 0:

      {

       x=0;

       printf("欢迎你下次进入学生管理系统 \n");

       break;

     default:

      break;

      }

    }

   }

 return 0;

}

头文件:
#include <stdio.h>

struct STUDENT

{

    char Num[30];/*学生学号*/

    char Name[30];/*学生姓名*/

    char className[30];/*班级名称*/

    char telNumber[30];/*学生手机号*/

 char email[30];/*学生邮箱*/

 char course[30];/*课程信息*/

 int score;/*成绩*/

};

typedef struct LNode

{

 struct STUDENT data;

 struct LNode* next;

}LNode,*Linklist;

int  Initlist(Linklist *L);//初始化单链表

int  Creatlist(Linklist L);//头插法生成单链表

void Display(Linklist L);//显示学生信息

int  SearchNum(Linklist L,char Num[30]);//学号查询

int  SearchName(Linklist L,char Name[30]);//姓名查询

void SortNum(Linklist L);//编号排序

void SortName(Linklist L);//姓名排序

void SortScore(Linklist L);//成绩排序

int  Insert(Linklist L,char Num[30]);//插入信息

int Del(Linklist L,char Num[30]);//按学号删除

int Alter(Linklist L,char Num[30]);//更改信息

运算截图:

主界面:



录入信息:



按姓名查询:



按学号查询:



排序:



插入:



管理员浏览:



学生浏览:



修改信息:



删除信息:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: