您的位置:首页 > 理论基础 > 数据结构算法

[置顶] 数据结构课设--学生信息管理系统

2017-12-22 11:06 344 查看
/*************************************** 

*版权所有 (C)2017,renzexi

*文件名称:action.h 

*文件标识:无 

*内容摘要:定义数据和函数声明 

*其他说明:无 

*当前版本:V1.0 

*作者:任泽西 

*完成时间:20171222 

*修改记录:修改了重定义的错误

*修改时间:20171222 

*版本号:V1.0 

*修改人:renzexi

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

#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

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

*版权所有 (C)2016,renzexi

*文件名称:main.cpp 

*文件标识:无 

*内容摘要:每个函数的实现以及主函数 

*其他说明:无 

*当前版本:V1.0 

*作者:任泽西

*完成时间:20171222 

*修改记录:修改了浏览信息不显示的bug 

*修改时间:20171222 

*版本号:V1.0 

*修改人:renzexi 

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

#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

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

*版权所有 (C)2016,renzexi

*文件名称:allf.cpp 

*文件标识:无 

*内容摘要:每个函数功能的具体实现 

*其他说明:无 

*当前版本:V1.0 

*作者:任泽西 

*完成时间:20171222 

*修改记录:修改了成绩显示错误的bug

*修改时间:20171222 

*版本号:V1.0 

*修改人:renzexi

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

#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浏览信息,查看修改和删除操作是否实现

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