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

  1. /***********************************************************    
  2. * 版权所有 (C)2016,test   
  3. *    
  4. * 文件名称: main.cpp    
  5. * 文件标识:main    
  6. * 内容摘要:函数文件    
  7. * 其它说明:主函数    
  8. * 当前版本: V8.0    
  9. * 作 者:陈晓琳  
  10. * 完成日期: 2017.1.1    
  11. *  /*********************************************************
  源文件  :
#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]);//更改信息


运算截图:

主界面:

录入信息:
按姓名查询:
按学号查询:
排序:
插入:
管理员浏览:

学生浏览:
修改信息:
删除信息:


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值