基于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所示。
基于C语言实现的学生信息管理系统_第1张图片

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

基于C语言实现的学生信息管理系统_第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 ;  
}  

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

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

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

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

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

5 程序运行
5.1 选择菜单界面
(1)功能描述
菜单函数:通过菜单建立用户与程序之间的交流。
(2)实现截图
基于C语言实现的学生信息管理系统_第3张图片

图5.1 选择菜单界面
5.2 增加学生信息
(1)功能描述
添加学生信息,并保存至文件中。
(2)实现截图
基于C语言实现的学生信息管理系统_第4张图片

图5.2 增加学生信息
5.3 修改学生信息
(1)功能描述
通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(2)实现截图
基于C语言实现的学生信息管理系统_第5张图片

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

图5.4 查找学生信息
5.5 浏览全部学生信息
(1)功能描述
可以输出进行多种操作后的学生信息管理系统中的所有学生信息。
(2)实现截图
基于C语言实现的学生信息管理系统_第7张图片

图5.5 浏览全部学生信息
5.6 按成绩对学生进行排序
(1)功能描述
通过学生们的成绩高低,进行排序的操作。
(2)实现截图
基于C语言实现的学生信息管理系统_第8张图片

图5.6 按成绩排序学生信息

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

图5.7 删除学生信息

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

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

签名:
年 月 日

你可能感兴趣的:(C#,c语言,算法,数据结构)