西安郵電學院
数据库原理及应用设计报告
题 目: 学生信息管理系统
一. 设计目的
学生管理系统是高校管理工作中一项非常重要的组成部分。用户的需求具体体现在各种信息的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,为后面的设计打下基础。本系统是针对高等院校的学生信息管理,因此学生信息管理系统的用户包括系统管理员、教师和学生。主要涉及学生信息、课程信息以及选课记录和成绩等数据信息。
二. 设计内容
学生管理信息系统的功能总结起来,共需要以下几个方面。
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 日
学生信息管理系统
为方便学生信息的管理,特编写这个程序方便操作学生信息管理系统。实现对学生姓名、学号、性别、成绩等信息的管理,可以实现学生的增加、删、查等多种功能的操作。
本系统实现学生信息的管理,以动态链表、结构体数据类型来实现数据的存储与加工,利用链表来实现学生信息的插入、删除、查找功能。
主要分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();主函数,测试数据,测试链表各节点(学生基本信息)的输出、插入、删除、查找功能。
1.考虑到学生个人信息包含学号、姓名、性别、出生日期、成绩等信息。因此采用结构体类型,定义学生个人信息结构体,并定义学生学号、姓名、性别、出生日期、成绩等数据成员。
2.考虑到要实现多个学生个人信息的管理,可采用结构体数组与链表。但是由于要对多个学生信息进行信息的插入、删除、查找等操作。显然结构体数组很难实现以上操作,因此选用链表。
选用链表之后,考虑其存储结构,由于要实现信息的插入、删除、查找等功能,显然动态链表更适合。相应的以链式存储结构来存储数据。
学生信息的插入功能的实现:在动态链表中要实现节点数据的插入,只要灵活的改变头一个节点的next指针使它指向要插入节点的当前指针,并使要插入接点的next指针指向要插入位置的下一个节点的当前指针即可,当然要对插入的位置进行分情况讨论,如是插在表头,表中还是表未。另外还应当注意的是在插入前,要考虑下呆插入链表是否为空。
学生信息的删除功能的实现:动态链表中节点数据的删除操作与插入操作思路大体相同,
主要思路还是改变指针的指向来实现这一功能。删除位置同样要分情况讨论,当然也要提前考虑链表是否为空,若为空应当给出“当前链表为空”的相应应答。另外还要考虑要删除的节点不在链表中的情况,这种情况下,要报错。
学生信息的查找功能的实现:要查找某个符合一定要求的学生信息,如学号为:1001。
只要遍历链表,打印输出符合条件的学生信息即可。当然也要考虑要查找的信息不在链表中的情况,这是系统要报错。
系统的总体设计要考虑到界面友好性,程序的时间复杂度、空间复杂度,以及程序的健壮性等性能指标。本系统在设计过程中,充分分析考虑了多种可能发生的情况。并对一些可能会导致系统崩溃的细节问题做了进一步处理。如在删除学生信息时考虑了表为空的情况等。
总体设计步骤:
1. 数据结构与存储结构的选择。
2. 数据的输入处理。
3. 程序功能的实现,功能函数的声明与定义。
4. 主函数的定义,在编写主函数时,要求主函数要尽可能的考虑到功能函数的各种极端情况,以便能得出合理的测试结果。
5. 程序运行测试。这一过程中,测试案例的选择尤为重要,选择的案例要有带表性,同时要考虑一些极端案例。
6. 程序的调试与进步完善。
本系统运用的关键技术是动态链表。动态链表在初始时必须分配足够的空间, 也就是空间大小是静态的, 在进行插入和删除时则不需要移动元素, 修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。
要点包括:
1. 动态链表的建立。
2. 链表节点的插入与删除。
3. 动态链表的遍历。
#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);
}
因学生信息管理系统需要构造出增加功能,所以本系统给出以链表的形式进行解决问题,避免了数组对数据的局限性,采用结构体、链表等知识解决了关于学生信息如:姓名、学号、性别、成绩等信息的管理,实现了增、删、减、查等基本操作。若能更好的利用库的输入输出等知识该程序将会进展地更好。
西安郵電學院数据库原理及应用设计报告题目:学生信息管理系统一.设计目的学生管理系统是高校管理工作中一项非常重要的组成部分。用户的需…
数据库课程设计报告指导老师贺亚茹组名组长组员完成日期成绩数据库课程设计报告一项目名称学生信息管理系统二项目需求分析1项目需求分析简…
学生信息管理系统实验报告班级10网工三班学生姓名谢昊天学号1215134046实验目的和要求实验目的1加深理解Windows程序设…
学生管理系统实验报告一实验目的上学期学习了C语言的内容学生信息管理系统有助于对C语言的学习的进一步巩固在本系统可以增强对指针数组文…
面向对象分析与设计期末实验设计题目学生信息管理系统姓名学院电子信息工程学院系别计算机科学与技术班级网络工程1班A部分需求分析一实验…
学生信息管理系统HUNANUNIVERSITY程序设计训练报告学生姓名学生学号专业班级指导老师院长系主任20xx年5月25日第1页…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
C可视化课程设计学生信息管理系统设计C基于MFC类可视化程序设计报告小组成员赵文琪倪涛学号31307042333130704234…
一实验题目学生证管理系统数据库的设计与实现描述设计一个学生证管理系统实现下列功能1录入某位学生的学生证信息2给定学号查询某位学生的…
C语言课程设计报告之学生基本信息管理系统一需求分析学生成绩管理问题描述每个学生的信息包括学号姓名性别年龄电话成绩系统能够完成学生信…
软件测试课程设计报告题目学生成绩管理系统院系计算机科学学院班级软件一班成员田欣1学生成绩管理系统测试报告正文1测试概述11测试目的…