数据结构课设--学生信息管理系统

  1. /*************************************** 
  2. *版权所有 (C)2017,renzexi
  3. *文件名称:action.h 
  4. *文件标识:无 
  5. *内容摘要:定义数据和函数声明 
  6. *其他说明:无 
  7. *当前版本:V1.0 
  8. *作者:任泽西 
  9. *完成时间:20171222 
  10. *修改记录:修改了重定义的错误
  11. *修改时间:20171222 
  12. *版本号:V1.0 
  13. *修改人:renzexi
  14. ****************************************/
  15. #include <stdio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    #ifndef _COMMOM
    #define _COMMOM


    typedef struct Student
    {
       char Num[30];/*学生学号*/
            char Name[30];/*学生姓名*/
       char className[30];/*班级名称*/
            char telNumber[30];/*学生手机号*/
       char email[30];/*学生邮箱*/
            char course[30];/*课程信息*/
       int score;/*成绩*/
    }stu;


    typedef struct LNode
    {
         stu data;
    struct LNode* next;
    }Linklist;
    #endif // _COMMOM
    #ifndef TEST_H
    #define TEST_H


    void  Initlist(Linklist *&L);//初始化单链表
    void  Creatlist(Linklist *&L);//头插法生成单链表
    void  SearchNum(Linklist *L,char Num[30]);//学号查询
    void  SearchName(Linklist *L,char Name[30]);//姓名查询
    void  Insert(Linklist *&L,char Num[30]);//插入信息
    void Del(Linklist *&L,char Num[30]);//按学号删除
    void Alter(Linklist *L,char Num[30]);//更改信息
    void Display(Linklist *&L);//显示学生信息
    void SortNum(Linklist *L);//学号排序
    void SortScore(Linklist *L);//成绩排序
    #endif // _TEST_H


源文件main.cpp
[cpp]  view plain  copy
  1. /*************************************** 
  2. *版权所有 (C)2016,renzexi
  3. *文件名称:main.cpp 
  4. *文件标识:无 
  5. *内容摘要:每个函数的实现以及主函数 
  6. *其他说明:无 
  7. *当前版本:V1.0 
  8. *作者:任泽西
  9. *完成时间:20171222 
  10. *修改记录:修改了浏览信息不显示的bug 
  11. *修改时间:20171222 
  12. *版本号:V1.0 
  13. *修改人:renzexi 
  14. ****************************************/ 
  15. #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    #include "action.h"
    Linklist *L;
    int  main()
    {
         system("color 7e");
           static int s;
      static int n;
           static char m;
      static char Name[100];
      static char Num[100];


      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("**************请输入1or2******\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:
                {
                       printf("**************欢迎进入到班级信息的显示功能******\n");
                       printf("按需求显示班级中所有学生的信息\n");
                       printf("*********************************\n");
                       printf("\n\t\t 1.按学号大小显示");
                       printf("\n\t\t 2.按成绩高低显示\n");
                      scanf("%d",&n);
                      if(n==1)
                           {
                                printf("班级中所有学生的信息如下: \n");
                                 SortNum(L);
                                 Display(L);
                           }
                           if(n==2)
                           {
                                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("管理员进入系统\n");
                     printf("**************请输入1查看已录入的信息******\n");


                      scanf("%d",&n);
                      if(n==1)
                      {
                        Display(L);
                      }


                        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;
    }




源文件allf.cpp

[cpp]  view plain  copy
  1. /*************************************** 
  2. *版权所有 (C)2016,renzexi
  3. *文件名称:allf.cpp 
  4. *文件标识:无 
  5. *内容摘要:每个函数功能的具体实现 
  6. *其他说明:无 
  7. *当前版本:V1.0 
  8. *作者:任泽西 
  9. *完成时间:20171222 
  10. *修改记录:修改了成绩显示错误的bug
  11. *修改时间:20171222 
  12. *版本号:V1.0 
  13. *修改人:renzexi
  14. ****************************************/  
  15. #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    #include "action.h"


    /***************************************************************************************  
    *功能描述:修改学生的个人信息
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    


    void Alter(Linklist *L,char Num[100])//修改学生的个人信息
    {
        Linklist *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;
        }


    }




    /***************************************************************************************  
    *功能描述:运用头插法建立单链表 
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    




    void Creatlist(Linklist *&L)//头插法生成单链表
    {
            Linklist *s;
           s=(Linklist *)malloc(sizeof(Linklist));
          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;


    }


    /***************************************************************************************  
    *功能描述:按学号进行删除
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    






    void Del(Linklist *&L, char Num[100])//按学号进行删除
    {
        Linklist *p,*q;
        p=L;
        q=L->next;
        char flag=0;
        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");
        }
        printf("删除成功\n");
    }




    /***************************************************************************************  
    *功能描述:显示学生的信息 
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
        ***************************************************************************************/    






    void Display(Linklist *&L)//显示学生信息
    {
        Linklist *p;
        p=L->next;
        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%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");
        }
    }








    /***************************************************************************************  
    *功能描述:初始化线性表
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    




    void Initlist(Linklist *&L)//初始化线性表
    {
        L=(Linklist *)malloc(sizeof(Linklist));


        L->next=NULL;


    }




    /***************************************************************************************  
    *功能描述:实现学生信息的插入
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    








    void Insert(Linklist *&L, char Num[100])//插入信息
    {
        Linklist *p,*s;
        p=L->next;
        while(p)
        {
            if(strcmp(p->data.Num,Num)!=0)
            {
                s=(Linklist *)malloc(sizeof(Linklist));
                      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");
            }
               if(strcmp(p->data.Num,Num)==0)
        {
            printf("该同学已存在,插入失败,请重新输入 \n");
        }




            break;
        }


    }








    /***************************************************************************************  
    *功能描述:按姓名进行查询 
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    






    void SearchName(Linklist *L,char Name[100])//姓名查询
    {
       Linklist *p;
       p=L;
       char flat=0;
       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");
            }


    }




    /***************************************************************************************  
    *功能描述:按学号进行查询 
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    






    void SearchNum(Linklist *L,char Num[100])//学号查询
    {
       Linklist *p;
       p=L;
       char flat=0;
       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");
            }


    }








    /***************************************************************************************  
    *功能描述:按学号进行排序 
    *输入参数:无 
    *输出参数:无   
    *返回值:无 
    *其他说明:消息字段之间用分号(;)隔离   
    ***************************************************************************************/    






    void SortNum(Linklist *L)//按学号排序
    {
        Linklist *p,*q;
        stu 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 SortScore(Linklist *L)//按成绩排序
    {
       Linklist *p,*q;
       stu 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;
               }
           }
       }
    }






 项目实现结果

(1)        已录入多个学生信息

(2)        进行2查询中的1按姓名查询

 

(3)        进行3排序中的1按学号排序

 

(4)        进行4插入信息

 

(5)        进行5浏览信息

 

 

(6)        进行6修改信息


(7)进行7删除信息


(8)        再次进行5浏览信息,查看修改和删除操作是否实现

 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值