当前位置:   article > 正文

基于C语言实现的学生信息管理系统_基于c语言的学生信息管理系统

基于c语言的学生信息管理系统

点击获取源码链接
摘要 I
目录 II
1 概述 1
1.1 课程设计目的 1
1.2 预备知识 1
1.3 实训的内容和要求 1
2 需求分析 2
2.1 系统目标 2
2.2 功能分析 2
2.3 开发环境 2
3 总体设计 3
3.1 系统功能模块图 3
3.2 系统总流程图 3
3.3 功能详细分析 4
4 详细设计 5
4.1 选择菜单界面 5
4.2 增加学生信息 6
4.3 删除学生信息 8
4.4 修改学生信息 9
4.5 查找学生信息 11
4.6 浏览学生信息 13
4.7 学生信息按成绩排序 13
5 程序运行 16
5.1 选择菜单界面 16
5.2 增加学生信息 16
5.3 修改学生信息 17
5.4 查找学生信息 17
5.5 浏览全部学生信息 18
5.6 按成绩对学生进行排序 18
5.7 删除学生信息 18
心得体会 19
参考文献 20

1 概述
1.1 课程设计目的
(1)掌握各种数据存储结构与算法思想。
(2)掌握各种常用查找,排序,汇总等算法的实现,以及增删改查等。
(3)掌握各种学生表,课程表的设计,以及学生管理,课程管理等模块操作。
1.2 预备知识
C语言
1.3 实训的内容和要求
本系统完成的主要内容和要求有:
输入学生的基本信息、所在班级信息、所学课程和成绩。
学生信息的输入、修改与查询。
班级信息的输入、修改与查询。
班级课程的输入、修改与查询。
学生成绩的输入、修改与查询。
学生成绩的排序。

2 需求分析
2.1 系统目标
该系统设计的目标主要是为了能够有效的管理学生信息,能够减轻教师负担,通过学生信息管理系统对学生信息统一管理,既能够减少教师的工作量,也能更好的去管理学生的信息。
2.2 功能分析
该系统的主要功能是:能够输入学生的基本信息、所在班级信息、所学课程和成绩,并且,可以对学生信息、班级信息、课程信息、成绩信息进行输入、修改与查询和对学生成绩进行排序。
2.3 开发环境
(1)运行装有Windows 10操作系统的计算机
(2)Visual C++ 6.0旗舰版

3 总体设计
3.1 系统功能模块图
系统功能模块图,如图3.1所示。
在这里插入图片描述

3.1 系统功能模块图
3.2系统总流程图

在这里插入图片描述

图3.2 总流程图
3.3 功能详细分析
(1)菜单函数:通过菜单建立用户与程序之间的交流
(2)查询学生信息函数
功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在
查询方式:
1)按照学号查询
2)按照姓名查询
(3)修改学生信息
功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;
(4)增加学生信息函数
功能:添加学生信息,并保存至文件中
(5)删除学生信息函数
功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;
(6)输出当前学生信息
功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;
(7)保存学生信息
功能:将进行某些操作后的学生信息保存到指定文件中

4 详细设计
4.1 选择菜单界面
(1)功能描述
菜单函数:通过菜单建立用户与程序之间的交流。
(2)实现代码

void welocome()//登陆界面  
{  
    system("color b1");  
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");  
    printf("\n");  
    printf("\n");  
    printf("\n");  
    printf("  ☆☆☆☆☆☆☆☆☆☆☆☆  欢迎登录学生信息管理平台 ☆☆☆☆☆☆☆☆☆☆☆☆  \n");  
    printf("\n");  
    printf("\n");  
    printf("\n");  
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");  
}  

void menu()//功能菜单  
{  
    system("color e3");  
	printf(" \n\n                    \n\n");
	printf("  ★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
	printf("  ★                学生信息管理系统                  ★\n \n");
	printf("  ★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
	printf("  ★★★★★★★★★★系统功能菜单★★★★★★★★★★★       \n");
	printf("     ☆☆☆☆☆☆☆☆☆☆☆   ☆☆☆☆☆☆☆☆☆☆☆   \n");
	printf("     ★★★★★★★★★★★★★★★★★★★★★★★★     \n");
	printf("     * 1.退出学生系统       *&*  2.增加学生信息   *     \n");
	printf("     ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆     \n");
	printf("     * 3.删除学生信息       *&*  4.修改学生信息   *     \n");
	printf("     ★★★★★★★★★★★★★★★★★★★★★★★     \n");
	printf("     * 5.查找学生信息       *&*  6.学生信息排序   *     \n");
	printf("     ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆     \n");
	printf("     * 7.输出学生信息       *&*  8.保存学生信息   *     \n");
	printf("     ★★★★★★★★★★★   ★★★★★★★★★★★     \n");
	printf("     ----------------------   ----------------------                           \n");
	printf("请选择菜单编号:");
    return ;  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

4.2 增加学生信息
(1)功能描述
添加学生信息,并保存至文件中。
(2)实现代码

void addstu(LinkList *&L)  
{  
    system("color f2");  
    printf("请输入学生的信息:\n");  
    printf("学号:");  
    scanf("%s",nu);  
    LinkList *q=L->next;  
    while(q!=NULL )  
    {  
        if(strcmp(q->data.num,nu)==0)  
        {  
            printf("该生已存在\n");  
            break;  
        }  
        q=q->next;  
    }  
    if(q==NULL)  
    {  
        LinkList *p;  
        InitList(p);  
        strcpy(p->data.num,nu);  
        printf("姓名:") ;  
        scanf("%s",nam) ;  
        strcpy(p->data.name,nam);  
        printf("性别:(w为男 m为女)");  
        scanf(" %c",&s);  
        p->data.sex=s;  
        printf("年龄:");  
        scanf("%d",&ag);  
        p->data.age=ag;  
		printf("班级:");
		scanf("%s",cg);
		strcpy(p->data.grade,cg);
		printf("课程:");
		scanf("%s",c);
		strcpy(p->data.course,c);
        printf("总成绩:");   
        scanf("%d",&sc);  
        while(sc>100||sc<0){
            printf("输入有误,请重新输入\n");
            scanf("%d",&sc);  
        }
        p->data.score=sc;  
        ListInsert(L,p);  
    }  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

4.3 删除学生信息
(1)功能描述
通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息。
(2)实现代码

void deletestu(LinkList *L) 
{  
    system("color f4");  
    printf("请输入您要删除的学生的学号:");  
    scanf("%s",nu);  
    //判断  
    LinkList *p,*pre;  
    if(L->next==NULL)  
    {  
        printf("还没有学生信息,请增加学生信息\n");  
        return;  
    }  
    pre=L;  
    p=pre->next;  
    int judge=0;  
    while(p)  
    {  
         if(strcmp(p->data.num,nu)==0)  
         {  
                 judge=1;  
                 pre->next =p->next;  
                 free(p);  
                 printf("删除学生成功\n");  
                 break;  
         }  
         pre=p;  
         p=p->next;  
    }  
    if(judge==0)  
       printf("该生不存在\n");  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

4.4 修改学生信息
(1)功能描述
通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(2)实现代码

void changestu(LinkList *L)  
{  
    int judge=1;  
    system("color e4");  
    printf("请输入您要修改学生的学号:\n");  
    scanf("%s",nu);  
    LinkList *q=L->next;  
    while(q!=NULL )  
    {  
        if(strcmp(q->data.num,nu)==0)  
        {  
            judge=1;  
            printf("请输入您要修改的信息选项:1.姓名 2. 总成绩  3.年龄  4.班级  5.课程  \n");  
            int n;  
            scanf("%d",&n);  
            switch(n)  
            {  
            case 1:  
                printf("请输入您要修改的名字:");  
                scanf("%s",nam);  
                printf("修改的名字为:%s\n",nam);  
                strcpy(q->data.name,nam);
                printf("修改名字成功!\n");  
                break;  
            case 2:  
                printf("请输入您要修改的总成绩");  
                scanf("%d",&sc);  
                printf("修改的总成绩为:%d\n",sc);  
                q->data.score=sc;  
                printf("修改总成绩成功!\n");  

                break;  
            case 3:  
                printf("请输入您要修改的年龄:");  
                scanf("%d",&ag);  
                printf("修改的年龄为:%d\n",ag);  
                q->data.age=ag;  
                printf("修改年龄成功!\n");  
                break;  
            case 4:
				printf("请输入您要修改的班级:");
				scanf("%s",cg);
				printf("修改的班级为:%s\n",cg);
				strcpy(q->data.grade,cg);
            case 5:
				printf("请输入您要修改的课程:");
				scanf("%s",c);
				printf("修改的课程为:%s\n",c);
				strcpy(q->data.course,c);
            default :  
                printf("请输入正确的选项\n");  
                break;  
            }  
        }  
        q=q->next;  
    }  
   if(judge==0)  
   {  
     printf("该生不存在\n");  
   }  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

4.5 查找学生信息
(1)功能描述
通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在。
(2)实现代码

void findstu(LinkList *L)  
{  
    int flag;
    system("color b1");  
    printf("1.按学号查询:\n");
    printf("2.按姓名查询:\n");
    printf("请输入查询方式:");
    scanf("%d",&flag); 
    if(flag==1){
        printf("请输入该生学号:"); 
        scanf("%s",nu);  
        //判断  
        LinkList *q=L->next;  
        while(q!=NULL )  
        {  
            if(strcmp(q->data.num,nu)==0)  
            {  
                printf("姓名:%s\n",q->data.name);  
                printf("学号:%s\n",q->data.num);  
                printf("性别:%c\n",q->data.sex);  
                printf("年龄:%d\n",q->data.age); 
				printf("班级:%s\n",q->data.grade);
				printf("课程:%s\n",q->data.course);
                printf("总成绩:%d\n",q->data.score);  
                break;  
            }  
             q=q->next;  
        }  
        if(q==NULL)  
            printf("该生不存在\n");  
    }else{
        printf("请输入该生姓名:");
        scanf("%s",nam);  
        LinkList *q=L->next;  
        while(q!=NULL )  
        {  
            if(strcmp(q->data.name,nam)==0)  
            {  
                printf("姓名:%s\n",q->data.name);  
                printf("学号:%s\n",q->data.num);  
                printf("性别:%c\n",q->data.sex);  
                printf("年龄:%d\n",q->data.age);
				printf("班级:%s\n",q->data.grade);
				printf("课程:%s\n",q->data.course);
                printf("总成绩:%d\n",q->data.score);  
                break;  
            }  
             q=q->next;  
        }  
        if(q==NULL)  
            printf("该生不存在\n");  
    }
} 
4.6 浏览学生信息
(1)功能描述
可以输出进行多种操作后的学生信息管理系统中的所有学生信息。
(2)实现代码
void display(LinkList *&L)  
{  
    LinkList *q=L->next;  
    if(q==NULL)  
    {  
        printf("还没有学生信息,请增加学生信息\n");  
        return;  
    }  
    while(q)  
    {  
        system("color c0");  
        printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 班级:%s 课程:%s 总成绩:%d \n",q->data.num,q->data.name,q->data.age,q->data.sex, q->data.grade, 
      q->data.course,q->data.score);  
        q=q->next;  
    }  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

4.7 学生信息按成绩排序
(1)功能描述
通过学生们的成绩高低,进行排序的操作。
(2)实现代码

void paixu(LinkList *L)  
{  
    system("color f9");  
    LinkList *q,*p,*r=L->next;  
    //判断  
    if(r==NULL)  
    {  
        printf("还没有学生信息,请增加学生信息\n");  
        return;  
    }  
    while(r) //两层循环完成排序  
    {  
         p=r;  
         q=r->next;  
         LinkList *tmp;//用于排序时暂存节点  
         InitList(tmp);  
         while(q)  
         {  
             if(q->data.score > p->data.score)  
             {  
                /*先复制q结点信息到tmp*/  
                strcpy(tmp->data.num,q->data.num);  
                strcpy(tmp->data.name,q->data.name);  
                tmp->data.sex=q->data.sex;  
                tmp->data.age=q->data.age;  
                strcpy(tmp->data.grade,q->data.grade);  
                strcpy(tmp->data.course,q->data.course);  
                tmp->data.score=q->data.score;  
                /*再复制p结点信息到q*/  
                strcpy(q->data.num,p->data.num);  
                strcpy(q->data.name,p->data.name);  
                q->data.sex=p->data.sex;  
                q->data.age=p->data.age;  
                strcpy(q->data.grade,p->data.grade);  
                strcpy(q->data.course,p->data.course);  
                q->data.score=p->data.score;  
                /*最后复制exchange结点信息到p*/  
                strcpy(p->data.num,tmp->data.num);  
                strcpy(p->data.name,tmp->data.name);  
                p->data.sex=tmp->data.sex;  
                p->data.age=tmp->data.age;  
                strcpy(p->data.grade,tmp->data.grade);  
                strcpy(p->data.course,tmp->data.course);  
                p->data.score=tmp->data.score;  
             }  
             q=q->next;  
         }  
         r=r->next;  
    }  

    printf("排序后的学生信息是:\n");  
    display(L);  
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

5 程序运行
5.1 选择菜单界面
(1)功能描述
菜单函数:通过菜单建立用户与程序之间的交流。
(2)实现截图

图5.1 选择菜单界面
5.2 增加学生信息
(1)功能描述
添加学生信息,并保存至文件中。
(2)实现截图
在这里插入图片描述

图5.2 增加学生信息
5.3 修改学生信息
(1)功能描述
通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(2)实现截图
在这里插入图片描述

图5.3 修改学生信息
5.4 查找学生信息
(1)功能描述
通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在。
(2)实现截图
在这里插入图片描述

图5.4 查找学生信息
5.5 浏览全部学生信息
(1)功能描述
可以输出进行多种操作后的学生信息管理系统中的所有学生信息。
(2)实现截图
在这里插入图片描述

图5.5 浏览全部学生信息
5.6 按成绩对学生进行排序
(1)功能描述
通过学生们的成绩高低,进行排序的操作。
(2)实现截图
在这里插入图片描述

图5.6 按成绩排序学生信息

5.7 删除学生信息
(1)功能描述
通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息。
(2)实现截图
在这里插入图片描述
在这里插入图片描述

图5.7 删除学生信息

心得体会
该程序是学生信息管理系统。编写代码的过程中,利用了学习过的链表等知识,将学生信息管理系统通过链表进行了重写。复习了链表的知识和C语言的文件操作。编写一个功能齐全的、方便用户操作的学生管理系统,需要长期的实践与积累。实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。文件的操作的程序编写应用对我来说,是一个没有经过多次实践的问题,所以我在写这部分程序时,还是有些难度。

参考文献
[1] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005
[2] 唐宁九.数据结构与算法实验和课程设计教程.北京:清华大学出版社,2008
[3] 刘光然.数据结构实践训练教程.天津:南开大学出版社,2009
[4] 苏仕华.数据结构课程设计.北京:机械工业出版社,2005
[5] 苏小红.C语言程序设计.北京:高等教育出版社,2011
[6] 严蔚敏.数据结构C语言版[M].清华大学出版社,2007
课程设计成绩评定表
评定项目 内 容 满分 评分 总分
学习态度 学习认真,态度端正,遵守纪律。 10
设计情况 认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。 40
说明书质量 设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。 40
回答问题情况 回答问题准确,基本概念清楚,有理有据,有一定深度。 10
总成绩 采用五级分制:优、良、中、及格、不及格
指导教师评语:

签名:
年 月 日

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/449952
推荐阅读
相关标签
  

闽ICP备14008679号