学生信息管理系统实验报告

时间:2024.4.21

西安郵電學院

数据库原理及应用设计报告

题 目: 学生信息管理系统

一. 设计目的

学生管理系统是高校管理工作中一项非常重要的组成部分。用户的需求具体体现在各种信息的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,为后面的设计打下基础。本系统是针对高等院校的学生信息管理,因此学生信息管理系统的用户包括系统管理员、教师和学生。主要涉及学生信息、课程信息以及选课记录和成绩等数据信息。

二. 设计内容

学生管理信息系统的功能总结起来,共需要以下几个方面。

1、管理学生信息

管理所有学生的基本信息,包括添加、修改、删除等;可以根据各种条件查询出需 要的信息。

2、管理课程信息

管理所有学生的基本信息,包括添加、修改、删除等;可以根据各种条件查询出需要的信息。

3、管理选课与成绩

根据学号进行选课,登记所选课程的成绩;可以根据学号查询出选课信息与成绩。

三.概要设计

学生信息管理系统实验报告

管理员负责对学生信息,课程信息,成绩信息的输入。学生可以完成查询和选课的功能。

1.功能模块图;

(1)系统管理模块,进入系统后,可以选择退出系统

学生信息管理系统实验报告

(2)学生管理模块,包括学生信息添加,删除,修改。

学生信息管理系统实验报告

(3)课程管理模块,包括课程信息添加,修改,删除。

学生信息管理系统实验报告

(4)成绩管理模块,包括成绩的添加,修改。

学生信息管理系统实验报告

(5)信息查询模块,包括学生查询,课程查询,成绩查询。

学生信息管理系统实验报告

2.各个模块详细的功能描述。

学生信息管理——系统管理员负责对各种基本信息的录入、修改、删除等操作。 学生成绩管理——系统管理员负责对学生成绩的录入、修改、删除等操作,学生可以查询各科成绩。

信息查询管理——学生可以查询基本信息和各科的考试成绩,系统管理员负责把老师提交的学生成绩进行管理。

课程信息管理——系统管理员可根据具体院系要求开设不同课程。

系统用户管理——系统管理员负责用不同的权限来限制不同用户对系统的使用。

四.数据库设计

针对一般学生管理系统的需求,通过对学生学习过程的内容和数据流程分析,设计如下所示数据项和数据结构。

学生基本信息:包括的数据项有学生学号,姓名,性别,祖籍,家庭住址,入学年份,出生日期,所在学院,专业。

课程基本信息:包括的数据项有课程号,课程名,任课教师,上课地点,上课时间,课程类型。

学生成绩信息:包括学生学号,所选课程的课程号,成绩。

1、ER模型的设计

学生信息管理系统概念结构设计是在系统的需求分析、数据流程图和数据字典基础上的抽象,结合联系ER模型的设计方法,进行如下概要结构设计。为了使ER图表示得更加清晰,将E-R图分成实体属性ER图及实体联系ER图。

(1) 用实体及其属性的部分ER图表示数据库系统的概念模型。

① 学生信息实体ER图,

学生信息管理系统实验报告

② 班级信息实体ER图

学生信息管理系统实验报告

(2) 用实体及其联系的部分ER图表示数据库系统的概念模型,实体之间ER图

学生信息管理系统实验报告

2、各功能函数的数据流程图

学生信息管理系统实验报告

课程表course

学生信息管理系统实验报告

选课表sc

学生信息管理系统实验报告

学生信息管理系统实验报告

五.测试数据及运行结果

功能模块设计

学生信息管理系统实验报告

1. 登陆界面

登陆进去后,学生和管理员分别进入不同的界面,因为可以进行的操作不同。 管理员界面是:

学生信息管理系统实验报告

学生界面是:

学生信息管理系统实验报告

学生信息管理模块测试数据

学生信息管理系统实验报告

学生信息管理系统实验报告

学生信息管理系统实验报告

六. 调试情况,设计技巧及体会

本次课程设计是我第一次系统的、完整的接触软件设计的过程。我做的是学生信息管理系统。在这次课程设计中,我体会很深,也学会了很多东西,懂得很多以前不懂的东西,也明白了一些事情。

通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对数据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,将SQL语言的查询语句用得淋漓尽致,增强了自己在数据库中应用SQL语言的灵活性,其中包括插入、删除、修改、查询,牵涉表和表之间的联系,主建与外键的定义,约束项的设置,使逻辑更严密,在学习过程中,我也上网查了不少资料,也看了一些别人设计的报告,学以致用,自我创新,完成了这份自己的报告,从学到用,从用又到学,不断修改,系统更新。

在本系统的开发过程中,由于我是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的。

七.参考文献

(1)Java 课程设计 案例精编

(2)java语言程序设计教程

(3)数据库项目开发实例

(4)程序设计与应用开发


第二篇:学生信息管理系统实验报告(原版)


面向对象程序设计大作业

                                       ------学生信息管理系统

学 院 名  称    数学与系统科学学院    

专业班级   数学类20##级1班    

学生姓名        邹霖逸              

学    号     201201051242        

指 导 教 师         孙红梅        

完成时间:  2014  年  5 月 3  日

学生信息管理系统

1、编程目的

为方便学生信息的管理,特编写这个程序方便操作学生信息管理系统。实现对学生姓名、学号、性别、成绩等信息的管理,可以实现学生的增加、删、查等多种功能的操作。

2、系统简介

本系统实现学生信息的管理,以动态链表、结构体数据类型来实现数据的存储与加工,利用链表来实现学生信息的插入、删除、查找功能。

主要分7个模块:

  模块一:

结构体的定义,定义struct student{};struct date{};结构体struct student{};数据成员包括:int studentId;  char name[20];  char sex[5];   struct date birthday;  int score; struct student *next; 其中 struct date birthday;又借用struct date{};结构体的成员:int year; int month;  int day;以此来实现学生学号、姓名、性别、出生日期、成绩等信息的存储于处理。

  模块二:

ListCreate函数,函数类型为:struct student 形参:struct student *head struct student *p  返回值:head指针。实现链表的建立功能。

  模块三:

ListInsert函数, 函数类型为:struct student 形参:struct student *head   struct student *p 返回值:head指针。实现链表节点的插入功能。

  模块四:

ListDelete函数, 函数类型为:struct student 形参:struct student *head   struct student *p 返回值:head指针。实现链表节点的删除功能。

模块五:

ListPrint函数, 函数类型为:void 形参:struct student *head   返回值:无

实现链表各节点信息的输出功能。

模块六:

ListFind函数, 函数类型为:void 形参:struct student *head   int id   返回值:无 。遍历链表,查找出符合条件的链表节点,并打印输出。

模块七:void main();主函数,测试数据,测试链表各节点(学生基本信息)的输出、插入、删除、查找功能。

3、编程思路

一:数据类型:

   1.考虑到学生个人信息包含学号、姓名、性别、出生日期、成绩等信息。因此采用结构体类型,定义学生个人信息结构体,并定义学生学号、姓名、性别、出生日期、成绩等数据成员。

2.考虑到要实现多个学生个人信息的管理,可采用结构体数组与链表。但是由于要对多个学生信息进行信息的插入、删除、查找等操作。显然结构体数组很难实现以上操作,因此选用链表。

二:存储结构:

   选用链表之后,考虑其存储结构,由于要实现信息的插入、删除、查找等功能,显然动态链表更适合。相应的以链式存储结构来存储数据。

三:功能的实现

学生信息的插入功能的实现:在动态链表中要实现节点数据的插入,只要灵活的改变头一个节点的next指针使它指向要插入节点的当前指针,并使要插入接点的next指针指向要插入位置的下一个节点的当前指针即可,当然要对插入的位置进行分情况讨论,如是插在表头,表中还是表未。另外还应当注意的是在插入前,要考虑下呆插入链表是否为空。

学生信息的删除功能的实现:动态链表中节点数据的删除操作与插入操作思路大体相同,

主要思路还是改变指针的指向来实现这一功能。删除位置同样要分情况讨论,当然也要提前考虑链表是否为空,若为空应当给出“当前链表为空”的相应应答。另外还要考虑要删除的节点不在链表中的情况,这种情况下,要报错。

   学生信息的查找功能的实现:要查找某个符合一定要求的学生信息,如学号为:1001。

只要遍历链表,打印输出符合条件的学生信息即可。当然也要考虑要查找的信息不在链表中的情况,这是系统要报错。

4、总体设计(附类图)

  系统的总体设计要考虑到界面友好性,程序的时间复杂度、空间复杂度,以及程序的健壮性等性能指标。本系统在设计过程中,充分分析考虑了多种可能发生的情况。并对一些可能会导致系统崩溃的细节问题做了进一步处理。如在删除学生信息时考虑了表为空的情况等。

   总体设计步骤:

1.     数据结构与存储结构的选择。

2.     数据的输入处理。

3.     程序功能的实现,功能函数的声明与定义。

4.     主函数的定义,在编写主函数时,要求主函数要尽可能的考虑到功能函数的各种极端情况,以便能得出合理的测试结果。

5.     程序运行测试。这一过程中,测试案例的选择尤为重要,选择的案例要有带表性,同时要考虑一些极端案例。

6.     程序的调试与进步完善。

5、关键技术说明(动态链表、指针、思想)

  本系统运用的关键技术是动态链表。动态链表在初始时必须分配足够的空间, 也就是空间大小是静态的, 在进行插入和删除时则不需要移动元素, 修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。

  要点包括:

1. 动态链表的建立。

2. 链表节点的插入与删除。

3. 动态链表的遍历。

6、源代码

#include <stdio.h>

#include <string.h>

#include <malloc.h>

struct date

{

int year;

int month;

int day;

};

struct student

{

int studentId;

char name[20];

char sex[5];

struct date birthday;

int score;

struct student *next;

};

struct student *ListCreate(int n)

{

    struct student *head=NULL,*curpt,*prept;

    int i;

    for(i=1;i<=n;i++)

    {

        curpt=(struct student *)malloc(sizeof(struct student));

        printf("请输入第%d个学生的信息:\n",i);

        printf("请输入学生学号:\n");

        scanf("%d",&curpt->studentId);

        printf("请输入学生姓名:\n");

        scanf("%s",curpt->name);getchar();

        printf("请输入学生性别:\n");

        scanf("%s",curpt->sex);getchar();

        printf("请输入学生成绩:\n");

        scanf("%d",&curpt->score);

        curpt->next=NULL;

        if(i==1)

          head=curpt;

        else

          prept->next=curpt;

        prept=curpt;

    }

    return head;

}

struct student *ListInsert(struct student *head,struct student *p)

{

    struct student *curpt,*prept;

    if(head==NULL)

    {

        head=p;

        p->next=NULL;

    }

    else

    {

        curpt=head;

        while(curpt!=NULL&&curpt->studentId<=p->studentId)

        {

            prept=curpt;

            curpt=curpt->next;

        }

        if(curpt!=NULL)

        {

            if(curpt==head)

            {

                p->next=head;

                head=p;

            }

            else

            {

                prept->next=p;

                p->next=curpt;

            }

        }

        else

        {

            prept->next=p;

            p->next=NULL;

        }

    }

    return head;

}

struct student *ListDelete(struct student *head,int id)

{

    struct student *curpt,*prept;

    if(head==NULL)

    {

        printf("原表为空!\n");

        return NULL;

    }

    else

    {

        curpt=head;

        while(curpt!=NULL&&curpt->studentId!=id)

        {

            prept=curpt;

            curpt=curpt->next;

        }

        if(curpt!=NULL)

        {

            if(curpt==head)

            {

                head=curpt->next;

                free(curpt);

            }

            else

            {

                prept->next=curpt->next;

                free(curpt);

            }

            printf("学号为%d的学生已被成功删除\n",id);

        }

        else

          printf("学号为%d的学生不存在\n",id);

         return head;

    }

}

void ListPrint(struct student *head)

{

    struct student *p=head;

    while(p!=NULL)

    {

       /* printf("输出学生学号:\n");

        printf("%d\n",p->studentId);

        printf("输出学生姓名:\n");

        printf("%s\n",p->name);

        printf("输出学生性别:\n");

        printf("%s\n",p->sex);

        printf("输出学生成绩:\n");

        printf("%d\n",p->score);*/

        printf("学号:%d姓名:%s性别:%s分数 %d\n",p->studentId,p->name,p->sex,p->score);

        p=p->next;

    }

}

void ListFind(struct student *head,int id)

{

    struct student *p=head;

    while(p!=NULL)

    {

        if((p->studentId)==id)

      {

            printf("学号:%d姓名:%s性别:%s分数 %d\n",p->studentId,p->name,p->sex,p->score);break;

        }

      p=p->next;

    }

}

int main()

{

    struct student *head,*p;

    int n,v,k,m;

    printf("+----------------------------------------------------------------------------+\n");

printf("|                                                                            |\n");

printf("|                                  学生信息管理系统                          |\n");

printf("|                                                                            |\n");

printf("+----------------------------------------------------------------------------+\n");

    printf("请输入学生人数:\n");

    scanf("%d",&n);

    head=ListCreate(n);

    printf("原链表为:\n");

    ListPrint(head);

    printf("请输入要查找的学号:\n");

    scanf("%d",&v);

    ListFind(head,v);

    p=(struct student *)malloc(sizeof(struct student));

    printf("请输入要插入学生的信息:\n");

    scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);

    head=ListInsert(head,p);

    printf("输出插入节点之后的链表:\n");

    ListPrint(head);

    p=(struct student *)malloc(sizeof(struct student));

    printf("请输入要插入学生的信息:\n");

    scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);

    head=ListInsert(head,p);

    printf("输出插入节点之后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    printf("请输入要删除的学生的学号:\n");

    scanf("%d",&k);

    head=ListDelete(head,k);

    printf("输出删除节点后的链表:\n");

    ListPrint(head);

    p=(struct student *)malloc(sizeof(struct student));

    printf("请输入要插入学生的信息:\n");

    scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);

    head=ListInsert(head,p);

    printf("输出插入节点之后的链表:\n");

    ListPrint(head);

    printf("请输入要查找的学号:\n");

    scanf("%d",&m);

    ListFind(head,m);

}

7、测试(主界面及各功能模块的运行图及说明)

(1)输入的主界面:

(2)输出学生的信息:

(3)查找功能的实现:

(4)增加功能的实现:

(5)排序功能的实现:

(6)删除功能的实现:

8、系统评价及展望

因学生信息管理系统需要构造出增加功能,所以本系统给出以链表的形式进行解决问题,避免了数组对数据的局限性,采用结构体、链表等知识解决了关于学生信息如:姓名、学号、性别、成绩等信息的管理,实现了增、删、减、查等基本操作。若能更好的利用库的输入输出等知识该程序将会进展地更好。

更多相关推荐:
学生信息管理系统课程设计报告

数据库课程设计报告指导老师贺亚茹组名组长组员完成日期成绩数据库课程设计报告一项目名称学生信息管理系统二项目需求分析1项目需求分析简介本数据库的用户主要是学生通过对用户需求的收集和分析获得用户对数据库的如下要求1...

学生信息管理系统实验报告

学生信息管理系统实验报告班级10网工三班学生姓名谢昊天学号1215134046实验目的和要求实验目的1加深理解Windows程序设计的基本概念2基于单文档的应用程序的创建3学会对话框及相关控件的创建4熟悉基本的...

C语言 学生信息管理系统实验报告

学生管理系统实验报告一实验目的上学期学习了C语言的内容学生信息管理系统有助于对C语言的学习的进一步巩固在本系统可以增强对指针数组文件函数等基本知识的进一步理解另外学生管理系统也是学校常用的基本系统之一它有助于学...

UML学生的信息管理系统__实验报告

面向对象分析与设计期末实验设计题目学生信息管理系统姓名学院电子信息工程学院系别计算机科学与技术班级网络工程1班A部分需求分析一实验目的利用所学的UML建模知识设计学生信息管理系统由于信息技术的急剧发展和配合管理...

学生管理系统实验报告

学生成绩管理系统实验报告目录一开发目的2二项目描述2三系统目标2四系统结构图3五负责模块3六实验过程41系统界面设计42成绩信息管理模块5七实验总结6一开发目的21世纪以来人类经济高速发展人们发生了日新月异的变...

C语言学生信息管理系统实训报告

实训报告题目学生信息管理系统院系信息科技学院专业电子信息工程姓名殷浩学号1152100135指导教师杨呈永日期20xx年6月26日桂林电子科技大学信息科技学院学生信息管理系统本题目设计目的是训练学生的基本编程能...

学生信息管理系统设计报告

学生信息管理系统设计报告一设计目的作为C课程结课设计验证自身的学习效果同时希望利用所学的基本知识和技能进行简单数据库应用程序设计希望通过项目实践熟悉巩固所学知识以使自身达到熟练掌握NET基本结构以及C语言的基本...

学生成绩管理系统C++编程实验报告

C程序设计课程设计报告设计题目学生成绩管理系统专业计算机科学与技术网络工程班级学号姓名指导老师日期20xx0531目录一设计任务与要求31设计内容32课程设计的要求3二系统分析需求分析31需求分析32系统性能要...

学生成绩管理系统C++编程实验报告

C程序设计课程设计报告设计题目学生成绩管理系统专业计算机科学与技术网络工程班级学号姓名指导老师日期20xx0531目录一设计任务与要求31设计内容32课程设计的要求3二系统分析需求分析31需求分析32系统性能要...

C#学生成绩管理系统课程设计报告

C程序设计课程设计报告2020学年第学期题目学生成绩信息管理系统专业班级姓名学号指导教师成绩年月日目录摘要1第一章绪论211设计目的212开发工具选择213开发环境214本报告的主要内容2第二章需求分析321系...

学生信息管理系统实训报告

学生信息管理系统项目小组任务分配表学生信息管理系统前言随着科学技术的不断提高计算机科学日渐成熟其强大的功能已为人们深刻认识它已进入人类社会的各个领域并发挥着越来越重要的作用作为计算机应用的一部分使用计算机对学生...

基于java的学生信息管理系统设计报告

南华大学计算机科学与技术学院课程设计报告20xx20xx学年度第1学期课程名称网络编程技术题目基于java的学生信息管理系统姓名刘亮学号20xx4440437专业计算机科学与技术班级03级04班地点专业实验室教...

学生信息管理系统实验报告(27篇)