学海荡舟手机网

主页 > 实用文摘 > 教育文摘_23 > > 详细内容

数据库原理_毕业设计

    当前位置:主页>计算机毕业>文章内容
    数据库原理 
    1. 设计要求
    设计要求:
    (1) 要求
    本系统全称为基本管理系统,主要是说的成绩管理。根据开发要求,它主要应用于系统,完成对日常的教学、教务、以及的计算机化的管理。
    (2) 功能要求
    开发成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。目前,学校工作繁杂、资料重多。目前,管理系统已进入高校,但还未普及,而对于成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。
    2. 系统设计
    (1) 需求分析
    ●基本
    教学组织机构主要是由:管理,成绩管理,成绩打印等组成。图2-1为组织机构图。
    图2-1组织机构图
    职责:
    学生管理:管理一些学生的档案,具体是的学号、姓名、家庭地址、家庭电话等。
    成绩管理:管理的成绩核算、录入、删除、排序、查询、检索等。
    成绩打印:管理的成绩报表的打印以及打印报表的整理、维护、保存等。
    三、表设计:              
    1、表结构:
    表3.1
    编号 字段名称 字段类型 字段宽度
    1 学号 char 15
    2 姓名 char 10
    3 性别 char 2
    4 出生日期 date 8
    5 电话 char 10
    6 家庭住址 char 50
    7 班级 char 20
    8 原毕业学校 char 50
    9 是否住宿 char 4
    10 政治面貌 char 6
    11 入学总分 long 4
    12 专业 char 20
    2、课程表结构:
    表3.2
    编号 字段名称 字段类型 字段宽度
    1 课程名称 char 15
    2 年级 char 10
    3 专业 char 20
    3、成绩表结构:
    表3.3
    编号 字段名称 字段类型 字段宽度
    1 学号 char 15
    2 课程名称 char 15
    3 期中成绩 long 4
    4 期末成绩 long 4
    5 总评成绩 long 4
    6 班级 char 20
    4、总分表结构:
    表3.4
    编号 字段名称 字段类型 字段宽度
    1 学号 char 15
    2 期中总分 long 4
    3 期末总分 long 4
    4 期中名次 long 4
    5 期末名次 long 4
    6 班级 char 20
    5、数据表:
    本系统中使用到的数据表主要有班级表、成绩表、缴费表、课程表、档案、用户资料,由这六个表,组成了名为的数据库(如图一)。其中档案是本系统主要的
    (图一)
    一张表,所有都是根据这张档案进行有关的操作,主要的字段有:学号、姓名、年级、专业、性别、出生年月、民族、籍贯、政治面貌、家庭地址、邮政编码、联系电话、入学时间、备注。其中日期的数据类型为日期/时间天型,其它的数据类型为文本型;成绩表中字段为:学号、姓名、年级、专业、学期、考试时间、考试科目、考试地点、课程性质、科目分数、违纪类型、备注;课程表中字段为:专业、年级、学期、课程名称、教材、任课、课时、上课地点、课程性质、考试性质;用户资料中的字段包括:用户名、密码、身份。
    本系统的主要任务是实现对学校教导处的管理、成绩管理、课程管理及相关查询。其主要功能包括:
    1、管理功能
    班级管理。提供给进行本班的更新、删除。
    添加学生。以班级为单位,进行学生入库。其中分为单个添加和成批添加。单个添加学生供数量较少的学生信息入库;成批添加可以从现存的excel文件中成批录入到数据库中。
    删除学生。当学生毕业后,学生信息转移备份数据库中,系统的基本数据库中需要删除学生信息。该功能主要进行成批地删除学生信息,如连续学号区段的多位学生信息删除,整个班级的删除,所有的删除。
    新生管理。本部分的功能主要有新生导入、分班、及设置学号。新生导入实现从现存的excel新生名单中录入。分班功能实现按新生的报考专业、成绩及性别进行分班。设置学号实现自动为各班编发学号。
    学生信息备份。在删除前,将其按班级为单位保存到备份数据库。
    2.成绩管理功能
    分数录入。以班级为单位,录入各科目的期中、期末、总评成绩。
    总分及名次。计算指定班级的总分及名次。
    补考成绩录入。修改总评成绩,以决定最终补考人数。
    成绩备份。为指定班级及指定的学期数的成绩保存到备份数据库中。
    3、课程管理功能
    课程管理。提供本学期各年级各专业所开课程名称的录入、修改、删除。它是成绩管理的基础。用以保证数据库中一致性原则。
    4、查询功能
    学生信息查询。根据用户的要求,查询数据库的所有可能的,其中包括成绩查询。
    备份成绩查询。按班级为单位查询备份数据库的,补考情况。
    系统流程图
    课程设置(如:界面如图二)
    1)  (
    2) 删除表或视图→用数据库设计器按钮或数据库菜单
    ㈡本程序中用到的visual foxpro6.0中的控制
    ㈢.1visual foxpro6.0属性窗口性质如表
    3-1表
    ㈣vfp数据库包括的内容:
    表
    本地视图
    远程视图
    连接
    存储过程
    自由表
    查询
    ㈤建立表
    在建立vfp数据库用程序时,最好先建立一个项目,再在项目中建立数据库,在数据库中建立表,便于程序的管理和编译。
    项目包括数据库、表单、报表、菜单、程序等建立vfp管理系统需的所有程序文件。
    步骤(菜单式)新建→项目→数据库→创建→创建表结构
    也可以直接建立表:新建→表→创建
    建立表时要注意几个问题
    字段名不能超过5个汉字
    选好字段数据类型
    估计好字段宽度、小数位数(含小数据点)
    确定主索引字段
    字段顺序可调整
    在命令窗输入:createtable<文件名>也可建立表。本设计中采用可视化操作,在此不予敖述。
    ㈥打开/头闭表
    打开表的操作有两种方式,一样的结果。
    菜单式步骤
    打开→项目→数据→数据库→表→浏览
    2.命令式步骤
    useaa.dbf *打开名为aa.dbf的表
    browse *浏览当前表
    use *关闭当前表
    专用的关闭命令
    close table/index *关闭表文件或索引文件
    close all *关闭表及辅助文件
    clear all *关闭所有文件
    ㈦修改表结构
    已经建立的表,要个性其结构、步骤如下:
    打开表所在的数据库→表→修改
    在命令窗口键入两个命令:
    use aa *打开aa.dbf表
    modi stru *修改当前表的结构
    5.2 用户界面的实现
    5.2.1 登录界面
    使用本系统的用户可以分为教务管理人员和学生两类。如果用户选择的是管理员身份或是的身份,则系统对数据库中的人员表进行查询,确定是否存在相应的用户名和口令。如果用户在选择身份后输入的用户名和密码吻合,则用户登陆成功,此后系统自动进入到登陆窗体;如果不吻合,和登陆失败,用户需要重新输入用户名和口令,如果用户名和密码正确则自动进入登录窗体,如果用户登陆超过3次,则系统在提示后自动退出系统。
    登录流程图:
    5.2.2 主界面
    密码无误,正确登录后会看到如下主界面。用户可以根据需要进入各个管理系统。如图5-2-2
    图5-2-2主界面
    5.2.3 系统管理界面
    若点击系统管理后看到的界面如图5-2-3(1)
    图5-2-3(1)
    若是超级用户(管理员)则可以使用添加用户功能,在此可以添加用户的同时给用户赋予权限。超级用户是权限最高的用户,他可以享有系统的所有功能。只读用户权限最低,只可以浏览系统的某些内容,而不能参与修改。普通用户可以根据超级用户赋予的权限进行权限栏中的任意一项或多项功能。普通用户和只读用户都没有添加用户功能。作为普通用户在进行未赋予权限的功能和只读用户在进行“写”操作时,会弹出对话框“对不起,你没有管理本功能的权限,请与管理员联系!”
    图5-2-3(2)
    图5-2-3(3)
    学生信息管理部分包括班级管理、学生档案管理、交费管理、课程管理、成绩管理。而每一部分都包括对该部分的添加、浏览、查询、修改、删除。其实现过程是相似的。我们以档案管理为例,介绍其实现过程。
    5.2.4 档案管理界面
    点击后出现如图5-2-4(1)界面。
    图5-2-4(1)
    在管理的添加界面中,我们先通过变量传递得到输入的学号,然后进行判断。
    首先程序先对输入的学号进行判断,若已存在,则给出提示信息,若不存在,则显示所要添加的内容。输入信息后,我们将加入到数据库中,如图5-2-4(2)。而对于记录删除,可以使用下面程序完成:
    dim mrc as adodb.recordset
    txtsql1 = "select * from xj where 学号='" & trim(text1(0).text) & "'"
    set mrc = executesql(txtsql1)
    if modi = false then
    if mrc.eof = false then
    sss = msgbox("已经存在该学号的记录,学号不能重复!", vbexclamation + vbokonly, "警告")
    text1(0).setfocus
    text1(0).selstart = 0
    text1(0).sellength = len(text1(0).text)
    mrc.close
    exit sub
    ㈢浏览表的设计
    学生信息管理软件就要知道的基本,年龄,性别,班级等再建一个表单,类型如下:
    我们可以很清楚的看到的基本信息,姓名,学号,性别,生日,班级,宿舍等。怎样进行信息的浏览,我们看到6个按钮,这些按钮是控制浏览的,我们看发下“最上一条记录”里面的代码如下:
    go top
    this.enabled=.f.
    thisform.command4.enabled=.f.
    thisform.command5.enabled=.t.
    thisform.command6.enabled=.t.
    thisform.refresh
    在这些代码中 go top 是控制信息到第一个记录,endabled是控制按钮是否可用,refresh是刷新表单,让跳转的记录登能更新到当前表单中
    按钮的“上一条记录”的代码如下:
    skip -1
    if bof()
    messagebox("已是首记录!",48,"窗口")
    thisform.command3.enabled=.f.
    this.enabled=.f.
    else
    thisform.command5.enabled=.t.
    thisform.command6.enabled=.t.
    endif
    thisform.refresh
    代码skip -1的意思是向上翻转记录,bof()意思是是否到记录的首个下一条记录的代码如下:
    skip
    thisform.refresh
    thisform.command3.enabled=.t.
    thisform.command4.enabled=.t.
    if eof()
    messagebox(“已是尾记录!”,48,“窗口“)
    thisform.command3.enabled=.t.
    thisform.command4.enabled=.t.
    thisform.enabled=.f.
    thisform.command6.enabled=.f.
    endif
    功能和上面的按钮类似,eof()判断是否到达记录的末尾
    最后一个是末行的按钮,代码如下:
    go bottom
    this.enabled=.f.
    thisform.command4.enabled=.t.
    thisform.command5.enabled=.f.
    thisform.command6.enabled=.f.
    thisform.refresh
    代码go bttom是把记录跳转到最后一条
    到此,的浏览已经完成。
    ㈣成绩查询
    这其中涉及到了多表之间的数据的运算。这个目的用select语句来实现。
    选择按钮的代码如下
    //清除list1和list2中的数据项
    thisform.pageframe1.page1.list1.clear
    thisform.pageframe1.page1.list2.clear
    thisform.pageframe2.page1.command2.enabled=.f.
    thisform.pageframe1.page2.enabled=.f.
    //使用查询为list1准备数据
    select distinct grade.course1_id;
    from mima!student inner join mima!grade on student1.student_id=grade.student_id;
    where student.classes=ctod(thisform.pageframe1.page1.combo3.value);
    order by grade.course1_id into cursor cursortable2
    select cursortable2
    //将查询结果转换后作为数据项添加到list1中
    scan
    select courses1
    locate for courses.course1_id=cursortable2.course_id
    if found()
    thisform.pageframe1.page1.list1.additem(courses.course1_name)
    endif
    select cursortable2
    endscan
    //设置list1的索引数据项和按钮状态
    if thisform.pageframe1.page1.list1.listcount>0
    thisform.pageframe1.page1.list.listindex=1
    endif
    thisfrom.buttonstatus
    //功能:将grade表中符合条件的记录取出后进行格式变换
    //创建一个临时表
    cstr=”student_id c(10),name c(8)”
    for ii=1 to thisform.pageframe1.page1.list2.listcount
    cstr=cstr+”,”+thisfrom.pageframe1.page1.list2.list(ii)+space(1)+”n(5,1)”
    endfor
    cstr=”mima(“+cstr+”)”//为创建临时表生成一个可供宏代换的字符表达式
    create cursor &cstr
    //通过查询对grade表数据格式进行转换
    select distinct student1.student1_id,courses1.course_name,grade.testgrade;
    from mima!studnet1 inner join mima!grade inner join mima!courses1;
    on grade.course1_id=courses1.course1_id on student1.student_id=grade.student1_id;
    where student1.classes=thisform.pageframe1.page1.combo2.value;
    and grade.testype=thisform.pageframe1.page1.combo2.value;
    and grade.testype=ctod(thisform.pageframe1.page1.combo3.value);
    group by student1.student1_id ,courses1.courses1_name;
    order by student1.student1_id ,course1.course1_name;
    into cursor sys(2015)
    do (_genxtab) with ‘grage1’
    curname=dbf()
    select form &curname
    scan
    select student
    locate for alltrim(student.student_id)=alltrim(mima.student1_id)
    if found()
    replace mima.name with student1.name
    else
    messagebox(“student1表中的学号”+alltrim(mima.student1._id);+”已被删除!”,48,“管理系统一成绩查询打印”)
    endif
    select mima
    endscan
    thisform.pageframe1.page1.command2.enabled=.f.
    &&messagebox(“haha!”)
    thisform.pageframe1.page1.command3.enabled=.t.
    thisform.pageframe1.page1.command4.enabled=.t.
    thisform.pageframe1.page2.enabled=.t.
    reporttitl=left(thisfrom.pageframe1.page1.combo1.value,2)+”级”
    +alltrim(substr(thisfrom.pageframe1.page1.combo1.value,3))+;
    “专业”+alltrim(thisfrom.pageframe1.page1.combo3.value)+;
    “考试(”+alltrim(thisfrom.pageframe1.page1.combo2.value+”)成绩册“