数据库课程设计系统

关键词: 学籍 应用型 课程设计 数据库

第一篇:数据库课程设计系统

数据库课程设计学籍管理系统

学籍管理系统

本次数据库课程设计是以Access数据库作为后台以VB作为前台的应用型设计课程。

综合我们所学的两大课程创建应用型的数据库系统,大大的提高了我们学生的动手能力,作到了理论与实践相结合。 一.题目说明:

学生学藉管理系统是典型的学藉管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

本系统主要完成对学生情况和学生成绩的管理,包括数据库中表的添加、删除等。系统还可以完成对各类信息的浏览、添加、删除、等功能。

系统的核心是数据库中各个表联系,每一个表的修改都将联动的影响其它的表,当完成对数据的操作时系统会自动地完成数据库的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。 关键字:窗体、数据库、vb6.0、access2000。

学生学籍管理系统被广泛应用于各类学校的学生学籍管理工作中,要求其具有实用性强、使用方便、效率高和安全可靠等特点。本管理系统正是围绕以上几个方面进行开发的,在开发过程中充分考虑到本系统的应用特点,并进行了大量的检验,证明其的确达到了设计的要求,是一个已具备了实际应用能力的软件。本文主要论述学生学籍管理系统的开发过程,在涉及到VB及Access中的部分知识以举例的方式进行讲解 二. 总体设计:

我的总体设计如下:

(1).利用Access建立数据库,并在该数据库下创建五张表格,分别是学生表、课程表、选课表、学生选课表以及口令表。

(2)利用VB来建立界面并对它进行设计和修改,大体框架如下: FORM1 用于首界面

FORM2 用于登陆此系统的登录界面

FORM3 是主窗体,在这上面建立相应的菜单 如:文件——退出、添加用户(FORM4) 数据信息——管理使用(FORM5)

基本操作——学生操作、选课操作、课程操作 (FORM

6、FORM

7、FORM8) (3)对以上的界面进行设计以及对所要操作的部件进行编程。

三.常用控件的说明: 所有的Windows应用程序窗口或对话框,都是由诸如文本框、列表框、命令按扭、滚动条、命令菜单等组成的。VB通过控件工具箱提供了它们与用户进行交

互的可视化部件,即控件。程序开发人员只需要通过简单的操作,在窗体上安排所需要的控件,完成应用程序的用户界面设计即可。 序号

名称

功能

1 Label标签

用于说明

2 Textbox文本框

用于文本输入或显示 3 Frame框架

用于组合控件

4 Commandbutton命令按扭

单击执行命令 5 Timer计时期

用于定时

6 Data数据控件

用于访问数据库

三.详细说明:

1.数据库的建立与设计:

数据库是有结构的数据集合,它与一般的数据文件不同,(其中的数据是无结构的)是一串文字或数字流。数据库中的数据可以是文字、图象、声音等。

Access数据库由六种对象组成,它们是表、查询、窗体、报表、宏和模块。

(1).表(Table) ——表是数据库的基本对象,是创建其他5种对象的基础。表由记录组成,记录由字段组成,表用来存贮数据库的数据,故又称数据表。

(2).查询(Query)——查询可以按索引快速查找到需要的记录,按要求筛选记录并能连接若干个表的字段组成新表。

(3).窗体(Form)——窗体提供了一种方便的浏览、输入及更改数据的窗口。还可以创建子窗体显示相关联的表的内容。窗体也称表单。

(4).报表(Report)——报表的功能是将数据库中的数据分类汇总,然后打印出来,以便分析。

(5).宏(Macro)——宏相当于DOS中的批处理,用来自动执行一系列操作。Access列出了一些常用的操作供用户选择,使用起来十分方便。

(6).模块(Module)——模块的功能与宏类似,但它定义的操作比宏更精细和复杂,用户可以根据自己的需要编写程序。模块使用Visual Basic编程。

我们利用Access来建立数据库,我们的库中有五张表格,其分别是学生表、课程表、选课表、学生选课表以及口令表。

我们就以学生表为例做一个简单的说明:

我们使用设计器来创建表的,我的这张表有七个字段,每个字段的名称分别是:学号、班级、姓名、性别、出生年月、民族、地址、电话号码,每个字段有七个数据。我并对其字段的属性进行了重新的修改,以做到不浪费其空间。

我具体的实施步骤是:启动数据库管理器——建立数据库——建立数据表结构——输入记录。

最终产生了这样的一个数据库:(如下)

2.VB界面的建立设计以及程序的编写说明:

VB 是在Windows操作平台下,用于开发和创建具有图形用户界面的应用程序的强有力工具之一。VB为开发Windows应用程序不仅提供了全新的相对简单的方式,而且也引进了新的程序设计方法——面向对象的设计方法(00P)。从传统的面向过程的程序设计,转移到更先进的面向对象的程序设计,无论是对老的程序员,还是初学者,都是一个挑战。而学习VB,则是掌握这一新的程序设计方法的一条捷径。

(1).界面的设计和程序的编写:

设计一个像这样的友好的界面,我考虑到它的颜色的配制,界面的大小,界面所载的内容的多少等,在后台我用定时器给其限定时间让它在一定的时间后自动跳到下一个界面。

这个界面是系统的主界面,用户可以在通过系统登录后直接到我们的主界面上来进行相应的操作,我的主界面采用的是一张苏州市职业大学的图片,在这个图片的上面有三个菜单,分别是文件、数据信息和基本操作。在各自的下面还有与之相对应的子菜单,文件下有退出和添加用户,数据信息下有管理使用,基本操作下有学生操作、选课操作和课程操作。我利用FORMn.SHOW命令连接到相对应的界面上。

我们的界面有好几张我就对其中的一张进行详细的分析:

这是一张学生选课浏览表的界面,这也是对应我的主界面菜单中的数据信息下的管理使用子菜单的一张界面,在这张界面中包含了8个LABEL标签控件、7个 TEXTBOX文本框控件、6个COMMANDBUTTON命令按扭控件、1个FRAME框架控件和1个DATA部件。我利用DATA部件将界面与 ACCESS数据库相连接,具体的操作是利用DATABASENAME与数据库连接,在RECORDSOURCE中找到与之对应的表,再用 DATASOURCE、DATAFIELD与个文本框内容对应,从而实现界面与数据库的连接。 下面是程序的编写过程:

显示前一个数据: COMMAND1:

Private Sub Command1_Click() If Data1.Recordset.RecordCount = 0 Then MsgBox "没有记录" Else If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst MsgBox "这是第一条记录!" Else Data1.Recordset.MovePrevious If Data1.Recordset.BOF = True Then

Data1.Recordset.MoveFirst MsgBox "这是第一条记录!" End If End If End If End Sub 显示第一个数据: COMMAND2:

Private Sub Command2_Click() If Data1.Recordset.RecordCount = 0 Then MsgBox "没有记录" Else Data1.Recordset.MoveFirst End If End Sub 显示最后一个数据: COMMAND4:

Private Sub Command4_Click() If Data1.Recordset.RecordCount = 0 Then MsgBox "没有记录" Else Data1.Recordset.MoveLast End If End Sub 显示后一个数据: COMMAND3:

Private Sub Command3_Click() If Data1.Recordset.RecordCount = 0 Then MsgBox "没有记录" Else If Data1.Recordset.EOF Then Data1.Recordset.MoveLast MsgBox "这是最后一条记录!" Else Data1.Recordset.MoveNext If Data1.Recordset.EOF = True Then Data1.Recordset.MoveLast MsgBox "这是最后一条记录!" End If End If End If End Sub 添加一个数据:COMMAND6 Private Sub command6_Click() If Command6.Caption = "添加" Then

Command1.Enabled = 0 Command2.Enabled = 0 Command3.Enabled = 0 Command4.Enabled = 0 Command6.Caption = "确定" Command5.Caption = "放弃" If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveLast End If Data1.Recordset.AddNew Text1.SetFocus Else Command1.Enabled = -1 Command2.Enabled = -1 Command3.Enabled = -1 Command4.Enabled = -1 Command6.Caption = "添加" Command5.Caption = "删除" Text2.Enabled = 0 Text5.Enabled = 0 Text3.Enabled = 0 Text4.Enabled = 0 Text6.Enabled = 0 Text7.Enabled = 0 Data1.Recordset.Update Command1.SetFocus End If End Sub 删除一个记录:COMMAND5 Private Sub Command5_Click() If Command5.Caption = "放弃" Then Command4.Enabled = -1 Command5.Enabled = -1 Command6.Enabled = -1 Command3.Enabled = -1 Command1.Caption = "添加" Command2.Caption = "删除" Text2.Enabled = 0 Text5.Enabled = 0 Text6.Enabled = 0 Text7.Enabled = 0 Text1.Enabled = 0

Else If Data1.Recordset.RecordCount = 0 Then MsgBox "没有记录", 32, "注意" Exit Sub Else str1 = MsgBox("删除该记录吗?", 17, "删除") If str1 = 1 Then Data1.Recordset.Delete Data1.Refresh If Data1.Recordset.RecordCount = 0 Then MsgBox "记录数为零" Data1.Recordset.AddNew End If End If End If End If End Sub

四、在此过程中遇到的问题以及解决方法: 在开始编写程序的时候总是有一些出错,在查找有关书籍和向老师询问后得出了结果。在将界面与数据库相连接的时候,不知道用哪种方法,在老师的帮助下我学会了两种方法:1.DATA、2.ADODC。我最终使用DATA这种方法。

五、心得体会:

在这次的设计过程中,我学到的不仅是知识,我还认识到许多事情。这次设计使我的编程水平提高了一大步,使我充分的认识到合作的可贵。由于这次设计涉及到数据库,我的学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。所以今后我的学习道路还是很漫长的。最后,在这里我要衷心的感谢我们的指导老师牛丽、程渊,谢谢她的悉心指导和热心帮助。由于我水平有限,加之时间短暂,故学籍管理系统中还有许多不足之处,请老师批评指正,我会在以后的制作中不断改进,不断完善。

第二篇:数据库课程设计报告 工资管理系统

组员:廖翔, 刘小芳, 强江波, 张晶晶,冯兆强,夏冲 组长 :刘小芳 需求分析员 :张晶晶

程序员 :廖翔 , 刘小芳 , 强将波 测试员 :冯兆强 界面设计员 :夏冲 目录

一 绪论 ··········································3 二 课程设计说明····································3 三 需求分析·········································4 四 物理结结构设计···································5 五 数据字典·········································5 六 数据库设计·······································10 七 功能实现截图·····································11 八,小结············································21 附录 1.(组员及学号

廖翔 (,刘小芳 (41009040127,冯兆强 (, 张晶晶 (41009040130,夏冲 (,强将波 ( 2. 开发环境说明

使用 C#进行客户端应用程序的开发,数据库管理系统采用 SQL SERVER

一、绪论

随着计算机技术的飞速发展和经济体制改革的不断深入, 传统企业管理方法、 手段以及 工作效率已不能适应新的发展需要, 无法很好地完成员工工资管理工作。 提高公司企业管理 水平的主要途径是更新管理者的思想,增强对管理活动的科学认识。基于 C#与 SQL server 数据库技术建立一个通用工资管理系统,该系统为提供了查询、增加记录、删除等 功能, 功能比较的齐全, 并对工资进行了统计如津贴管理、报表统计等。基本上能满足管理 员和公司的要求。

此次数据库课程设计的主要设计如下: 原理分析、程序设计过程、程序实现和程序调试以及数据库的设计。 需求分析、概要结构设计、逻辑结构设计、物理结构设计和数据库的实施和维护。 二 . 课程设计说明

1. 设计题目:工资管理系统 2. 设计任务与要求: 2.1实验任务

1. 掌握数据库设计和实现的基本过程 2. 掌握数据库模式设计、分析和实现的方法 3. 了解数据库应用系统软件开发的一般过程。 2.2 实验基本要求 (1学习相关的预备知识

(2按照数据库设计与实现过程完成数据库的设计,应用程序的开发,上机调试、运 行

(3写出课程设计报 3. 目的

本说明书目的在于明确说明系统需求,界定系统实现功能的范围, 指导系统设计以 及编码。本文档作为人力资源管理系统的需求说明文档,用于与用户确定最终的目标, 并成为协议文本的一部分,同时也是本系统设计人员的基础文档。

4. 背景 工资管理系统

工资管理部门希望建立一个数据库来管理员工的工资。 要计算员工的工资, 就需要考虑 不在休假日期以内的假期、 工作期间的病假时间、 奖金和扣除的部分。 必须指明给每个员工 发薪水的方式, 随着时间的推移, 方式可能会有些改变。 大多数的员工是通过银行卡来结算 工资的, 但是也有一部分人使用现金或支票。 如果是通过银行卡, 就需要知道账号和卡的类 型。付款方式只可能是一种方式。有几种原因可以扣除工资:例如,个人所得税、国家税、 医疗保险、退休保险或者预付款。

5. 主要包括三大功能模块: 1. 登录界面选择 [员工登录 ]即可进入 [员工登陆界面 ], 选择 [管理员登陆 ]即可进入 [管理员 登录界面 ]。

2. 管理员功能模块。 3. 员工功能模块 . 6. 操作说明

6.1 无论是管理员还是员工,操作都以员工编号来进行。

6.2 管理员可以对员工基本信息增、 删、 查、 改, 员工只能对本人基本信息和工资信息查询。 三.需求分析

1. 功能需求分析: 该通用工资管理系统具备下列功能:登录界面选择 [员工登录 ]即可进入 [员工登陆界面 ], 选 择 [管理员登陆 ]即可进入 [管理员登录界面 ]. 管理员通过输入用户名和密码进下该系统后, 可以进行一些基本查询 (员工个人信息查 询 , 员工工资信息查询 , 修改 (修改员工基本信息 , 修改工资信息 , 删除 (员工个人资料删除 , 员工工资信息删除 , 录入 (员工资料录入 , 员工工资资料录入 ; ;通过输入密码,可以进行 查询员工的数据(工资,奖金津贴,加班情况 。

员工通过输入用户名和密码即可进入系统 , 可以进行查询 (查询个人基本信息和工资信 息 . 2. 数据流需求分析:

数据库 数据库需求分析——数据流图 四 . 物理结构设计 1. 系统模块划分

五 . 数据字典 2.1表字典

2.2表字段字典

六 . 数据库设计 1. 建表 : EmpInfoTable(Id[主键 ],Name,Position,Status; SalaryInfoTable(Id主键 ],Name,Prize,Pasepay,RetirementInsurance,Income,Stute,Medical, Dayleave,Deduced,Paytpe,CardNumber,Cardtype,GrossSalary,NetSalary,Date ; (1 员工基本信息表 : (2员工工资表 :

七 . 功能实现截图 1. 登录界面

2. 管理员部分 : (1管理员登陆界面

(2管理员功能选择界面

(3 .录入员工基本信息界面 (4录入员工工资信息

(5.修改功能选择界面

A. 修改员工基本信息

B. 修改工资信息

(6.管理员查询界面 A. 查询功能选择界面

B. 查询员工基本信息

C. 查询工资信息

(7.管理员查询界面 A. 功能选择界面

B. 管理员修改员工个人信息

C. 管理员修改员工工资界面界面

(8.管理员删除界面 A. 功能选择界面

B. 删除员工个人信息及工资信息界面

C. 删除员工工资信息界面

3. 员工功能界面 (1.员工登录界面

(2.员工功能选择界面

(3.员工查询本人基本信息 (4.员工查询本人工资信息 4.测试分析 4.1 更改员工资料不可以更改身份。 4.2 修改员工工资信息一旦失败 就会把原有信息删除。 4.3 管理员固定,且只有一个。 八.小结 该工资管理系统总体说来功能比较齐全,管理

员和员工的一些基本的功能 都已经具备; 数据库的设计方面, 建有员工表、 工资表。 数据库中存在一些问题, 如数据冗余,不够完善。 但在做课程设计的过程中也遇到很多问题,一开始时其中最大的问题是数 据库的连接部分,该部分直接影响到数据库与应用程序接口实现,而且必须注意 数据库数据库的名称与连接数据库的取名以致.后来经过大家的合作努力解决了 这个问题.在编写程序时,确实也遇到了很多困难,后来经过调试后终于把自已想 到实现的功能一步步实现了,通过这次课程设计使我收获了好多,熟悉了 C#的 运用,还复习了数据库相关语句的编写。 此次课程设计让我感受颇多:做一个数据库其实是一件很有趣的事情。想到

自己可以创建一个小型的数据库系统,有点学习后的满足感。数据库的建立并非 难事,难点在于数据库的连接和编程语言的选择。C#的功能很强大,这也是我以 后需要学习的课程,于是我毅然选择了它。再就是建立数据库系统的步骤,我的 经验就是要先总体规划,再局部整理。先做好总的界面,再通过该界面的布置一 步一步实现其功能! 同时我体会到: 熟练的编程能力,对知识运用的强烈渴望及其创新和团队的合作 精神设做好一个大型数据库的基础。 因此通过此次课程设计我明显感觉到自身的 不足,并希望以后能更加用心地运用所学知识和学习新的知识。

第三篇:数据结构课程设计—西文图书管理系统

数据结构课程设计报告

课程名称:数据结构课程设计

课设题目: 西文图书管理系统 教师姓名:

本科生姓名:

王瑞林

本科生学号:

20121002932

号:

191124

期:2014年6月20日

题号:十

题目:西文图书管理

1. 需求分析

图书管理系统对象有两个,包括读者和管理员。

读者的需求:借书,还书,续借,查询当前所借书籍还书截至日期,查询借阅历史,修改登陆密码。其中借书可以根据书号和书名两种方式查询借阅。

管理员的需求:采编入库,清除库存,注册读者,删除读者,根据书号查询书籍,修改管理员用户名和密码。

2. 设计

2.1设计思想

(1)数据与操作特性:

有搜索,插入,删除操作。而数据有:读者信息,书籍信息,读者借阅书籍历史信息,书籍读者借阅历史信息,读者当前所借书籍信息。 (2)数据结构设计:

数据的逻辑结构有线性结构和树形结构。

根据书号和书名建立两个B-树,便于读者查询借阅,其中关键字设置为书籍指针,便于找到书籍 后直接进行修改书籍信息。

读者和书籍的信息从文件中读取,由于会不断注册和删除读者以及新增删除书籍,因此书籍和读者的信息采用单链表存储。

读者的借阅历史和书籍的读者历史,都采用数组的形式存储,为了节省存储空间,每个借阅历史数组最大空间为15。超过15个借阅历史,则删除最早的借阅历史。 2.2设计表示 (1)数据类型定义

typedef struct //日期结构体类型 { int year;//记录年

int month;//记录月

int day;//记录日 }Date; //记录借阅者所借书籍的信息结构体 typedef struct {

char bookID[15];//书号 char name[15];//书名 char writer[15];//作者 Date bordate;//借阅时间 Date backdate;//还书时间

int flag;//是否续借,续借为1.否则为0

}BookHistory; //记录借阅者当前所借书籍的信息结构体 typedef struct {

char bookID[15];//书号 char name[15];//书名 char writer[15];//作者 Date bordate;//借阅时间 Date lastdate;//最后还书期限

int flag;//是否续借,续借为1.否则为0

}BookRec; //记录书籍被借阅的读者记录 typedef struct { char readerID[15];//记录读者的借阅证号 char readername[15];//读者的名字

Date bor;//记录读者的借书日期

Date back;//记录读者的还书日期 int flag;//借阅者是否有续借迹象(flag取值0或者1) }ReaderHistory; //记录读者信息的结构体类型(允许读者同时借阅五本书,每本书支持续借一次) typedef struct { char readerID[12];//记录读者的借书证号,一般是学号

//记录书的信息的结构体类型 typedef struct { char bookID[15];//书号 char title[15];//记录书名

char writer[15];//记录著者

int currentnum;//书现存量

int totalnum;//书总存量

int bortimes;//被借的历史总次数 //B_LQueue *B_LQH;

ReaderHistory RH[15];//借书者记录,规定链式队列的最大节点个数为15,来节省空间 char name[15];//读者的名字 char password[16];//读者登陆密码 BookRec rec[5];//读者现在所借书籍 int hn;//总借阅数量 //R_LQueue *R_LQH;

BookHistory bh[15];//记录读者的借阅记录,规定链式队列的最大节点个数为15,来节省空间 int bn;//读者现在所借书籍数量,最大数量为5本

}Reader; }Book; //根据 书名为关键字的B-树的结构体类型

typedef struct Namenode //根据书名为关键字建立的B树 {

typedef struct///根据书名建立的B树的搜索结果 {

//根据书号为关键字的B-树的结构体类型

typedef struct IDnode //根据书号为关键字建立的B树 {

typedef struct///根据书号建立的B树的搜索结果 {

//从文件中读取书籍数据后存储在单链表里 typedef struct BookNode {

//从文件中读取学生数据后存储在单链表里 typedef struct ReaderNode { Book SLbook; struct BookNode *next; BTIDnode *pt;////指向找到的节点指针 int i;//所找关键字在节点里的位置 int tag;//查找成功值为1,查找失败值为0 int n;//记录结点中的关键字(即书号)个数

Book *key[MAXM];//key[0...n-1],Maxsize个关键字(即书号)域 struct IDnode *chd[MAXM];//ptr[0...n],MAXM个指向子结点的指针域 BTNamenode *pt;////指向找到的节点指针 int i;//所找关键字在节点里的位置 int tag;//查找成功值为1,查找失败值为0 int n;//记录结点中的关键字(即书号)个数

Book *key[MAXM];//key[0...n-1],Maxsize个关键字(即书名)域

struct Namenode *chd[MAXM];//ptr[0...n],MAXM个指向子结点的指针域

struct Namenode *par;//指向父结点的指针域

}BTNamenode; }NameResult; struct IDnode *par;//指向父结点的指针域

}BTIDnode; }IDResult; }BookSLNode; Reader SLreader; struct ReaderNode *next; }ReaderSLNode; 2.3详细设计

(1)登陆界面login():有管理员和读者登陆,都必须输入密码和用户名。

(2)管理员登陆adminer_login():管理员需输入登录名和密码,为了安全登录,将输入密码错误次数限制在5次。其中管理员密码和用户名以及初始用户名和密码从管理员文件里读出赋值给全局变量。当输入正确时,管理员功能界面函数admin_menu();当密码输入错误达6次以上,将调用锁定系统函数lock_admin_menu(),将系统锁定,下次进入系统时将不再显示登陆界面,而是初始管理员登陆。

(3)管理员采编入库insert_stock():输入新书的信息,调用SearchBTree_ID()按照书号在B-树搜索书籍,如果没有找到,返回书籍插入的位置,然后调用插入函数InsertBTree_Name(),InsertBTree_ID(),分别将书籍按书名和书号插入到相应的树中,同时将书籍信息插入到书籍链表里调用ListInsert_Book();同时将全局变量书籍总数booknum加1。

(4)管理员清除库存deletestock():根据书号书名搜索到书籍,在B-树中删除书籍,同时在书籍信息链表里删除。并将书籍总数booknum减1。

(5)管理员读者模块adminer_reader():有删除读者和注册读者两个功能,删除读者,按读者的ID查找到,在读者信息链表里删除读者,读者总数readernum减1;注册读者,初始密码为读者ID后6位,同时读者总数readernum加1。

(6)管理员修改用户名和密码adminer_change_password():连续两次输入新密码,两次结果一样,修改成功。

(7)学生登陆student_login():输入密码成功,调用 stu_menu()功能界面。 (8)学生借书borrow():有两种搜索所借书籍的方式,按书名搜索,按书号搜索,使用相应的B-树搜索功能。借书成功后,将书籍信息写到读者当前所借书籍里面。并将书籍当前存量减1. (9)学生还书back():进入还书界面,将显示出读者当前所借书籍,让读者选择归还书籍。归还后将书籍从读者当前所借书籍里删除,此书当前存量加1,并将书籍信息写到读者借阅历史里面。

(10)学生续借renew():显示当前所借书籍信息,读者选择续借书目,当书籍信息的续借标志为0时可以续借,否则 不能续借,续借成功,将对应的读者当前所借书籍的续借标志置为1. (11)学生查询最后还书期限deadline():进入之后显示当前所借书籍信息,里面包含最后还书期限。

(12)学生查询借阅历史history():显示读者信息里面的借阅历史。

(13)学生修改密码change_reader_password():两次新密码输入一致,修改成功。 (14)锁定系统admin_lock(),锁定系统后登陆lock_admin_menu():全局变量m_lock,当其值为1时解锁,值为0时锁定。

(15)建立读者书籍链表readreader(),readbook():首先从文件中读取读者总数,采用for循环,将每个读者信息写到链表里,在循环中,读取读者的ID、姓名、密码,然后读取读者当前所借书籍,采用for循环,将所借书籍信息写到数组里面,依次读取所借书籍信息。之后读取读者历史所借书籍数量,当数量大于15时,使用for循环,循环15次,依次读取书籍信息;如果 数量小于等于 15,采用for循环,循环当前借阅历史书籍数量次,将书籍信息写道数组中。然后将每个读者插入到链表里。 书籍链表类似读者链表的建立。

(16)B-树的搜索插入删除功能(以按书名建立的B-树为例); 搜索,SearchBTree_ID(),搜索成功返回搜索到的位置,搜索失败,返回插入的位置。Search_Name()函数将在当前节点搜索到关键字的位置。

插入,InsertBTree_Name(),如果为空,调用NewRoot_name()函数,建立根节点。如果不为空,将调用Insert_Name()将插入到节点里,判断是否大于最大关键字个数,如果大于,调用Split_Name()进行分裂。 删除,并非自己完成,参考网上代码。

(16)建立B-树newBT():按书名建立,使用B树搜索功能,没有找到,将根据返回的位置进行插入。按书号的类似。

(17)打印文件printftxt():分别将书籍和读者 信息写到文件里,同时将管理员信息也写道文件中。在每个退出系统的接口中都进行调用此函数,保证文件不丢失,同时更新文件信息。

3. 调试分析

在进行调试时,有很多内存读写错误,问题的根本原因是在进行结构体赋值前,没有将结构体里面包含的结构体或者数组链表进行初始化,导致问题十分严重普遍。

4. 用户手册

首先登陆时有两种登陆:读者和管理员。然后管理员登陆功能有采编入库,清除库存,读者模块,书籍查询,修改密码和用户名。读者登陆有借书,还书,续借,修改密码,查询借阅历史,查询截至日期。

管理员登陆用户名:123456,密码:123456 管理员初始用户名:20121002932,初始密码:167350 读者的ID和密码请到reader.txt文件中查询,文件格式见下面说明。 文件的格式: 1. reader.txt:

其中第一行的数字“4”为当前读者总数,第二行为: ID 名字 密码 第三行的数字”0“为当前所借书籍数量,之后为所借书籍信息: 书号 名称 作者 借阅时间年 月 日 最后还书日期年 月 日 是否续借 第三行数字 “0”为历史所借书籍数量,之后为所借书籍信息: 书号 名称 作者 借阅时间年 月 日 还书日期年 月 日 是否续借 2. book.txt:

第一行数字”4“为当前书籍总数 第二行为书籍信息:

书号 书名 作者 现存量 总存量

第三行数字”0“为读者借阅历史,以《飞鸟集》为例:

ID

姓名

借阅时间年 月 日

还书时间年 月 日 是否续借 20121002932 王瑞林

114

5 17

114 5 17 1 3.adminer.txt:

第一行:管理员名称;

第二行:管理员登陆密码; 第三行:管理员初始用户名; 第四行:管理员初始密码;

第五行:锁定系统标志,此时为未锁定状态。

5. 测试数据及测试结果

初始登陆界面:

管理员登陆界面:

采编入库:

清除库存: 读者模块:

删除读者:

此时删除读者后,读者文件中应该不存在该读者。 书籍查询:

修改用户名和密码:

修改用户名:

修改密码:

修改用户名和密码后,退出系统后,查看adminer.txt文件,第一行和第二行为用户名和密码,将改变为4567890。 读者登陆:

读者借书:

当读者借书成功之后退出系统,在reader.txt文件中对应读者的ID信息的缩进的第二级为读者当前所借书籍数量和所借书籍信息,在此之后可以看到读者现在所借书籍信息 读者还书:

读者还书后,在reader.txt文件中,缩进的第三级为读者历史借阅书籍数量和书籍信息,此时应该看到刚才还书的信息。

读者续借:

当读者还书成功后,对应的当前所借书籍的flag值为1. 查询借阅历史:

查询截至日期: 修改登录密码:

当修改成功之后,reader.txt文件中对应读者的信息密码修改为当前密码。

6. 致谢

感谢郭老师的指导,让我们在实践中提高了合理设计数据结构的能力,巩固了课堂所学。同时感谢王鑫学姐,帮助我们调试程序,并传输经验。

7. 参考文献

《数据结构—使用C语言》第四版 朱站立编著 《C程序设计》第四版 谭浩强编著

第四篇:数据库课程设计

1 需求分析

在银行业务模拟中用随机函数产生随机数,求客户在银行的平均时间,客户来到银行后加入两个队列,客户办理的业务有两种,一是取款和贷款,二是存款和还款。

2 概要设计

typedef struct service { int num; //客户号 string type; //到达或离开 int beginTime; int endTime; int money; //正数为存款,负数为取款 struct service* next; }service; typedef struct //队列 { service* head; service* rear; }queue; int total; //初始时银行现存资金总额 int closeTime; //营业结束时间

int arriveTime; //两个到达事件之间的间隔上限 int dealTime; //客户交易的时间上限 int dealMoney=5000; //交易额上限 int currentTime=0; //当前时间 int totalTime=0; //客户逗留总时间 int counter=0; //客户总数 int number=1; //初始客户序列号 int currentTimeOfDeal=0;

1 int theArriveTime=0; queue eq; //事件队列 queue fq; //队列一

queue sq; //对列二 //初始化三个队列 service* temped; int Time; void push(queue &q,int a)// 插入元素a为Q的新的队尾元素 void pop(queue &q)// 若队列不空,出对列函数 service* front(queue &q)//返回队首元素 service* back(queue &q)//返回队尾元素

service* searchAndDel(queue &q,int m)//在对列中寻找可处理元素 bool state=1; //用于判断是否有窗口在处理

void arrive()//"到达"函数 随机产生顾客,进入队列一产生到达事件 进入事件队列

void putMoney()//存款函数 void getMoney()//取款函数

void findAndDeal()//在对列中寻找可处理元素,对其进行处理

3 运行环境

Window XP Visual C++

4 开发工具和编程语言

Visual C++ C++

5 详细设计

1.队列的链式表示和实现 typedef struct service { int num; //客户号

2 string type; //到达或离开 int beginTime; int endTime; int money; //正数为存款,负数为取款 struct service* next; }service; typedef struct //队列 { service* head; service* rear; }queue; 2.插入一个元素为队尾元素 void push(queue &q,int a) { service* p=new service; p->money=a; p->next=NULL; if(q.head==NULL)//列队为空,初始化 { q.head=p; q.rear=p; } else //队列不为空,插入元素a { q.rear->next=p; q.rear=q.rear->next; } } 3. 返回函数

3 service* front(queue &q)//返回队首元素 { return q.head; } service* back(queue &q)//返回队尾元素 { return q.rear; } 4. 在对列中寻找可处理元素

service* searchAndDel(queue &q,int m) { service* sign=q.head; //标记头节点 service* p; while(q.head!=NULL) { if((-(q.head->money))

{ p=q.head; q.head=q.head->next; //首节点后移一位,返回原首节点 return p; }

4 } if((-(q.head->money))>m) //队首元素不能被处理 {

if(q.head==q.rear) { } return NULL; else //首节点移到队列尾部 { q.rear->next=q.head; q.rear=q.rear->next; q.head=q.head->next; q.rear->next=NULL; } } if(q.head==sign) //队列循环一周时停止 return NULL; } return NULL; } 5.到达函数

void arrive()//到达"函数 随机产生顾客,进入队列一产生到达事件 进入事件队列 { push(fq,(rand()%(2*dealMoney)-dealMoney)); //随机产生顾客加入第一队列

back(fq)->beginTime=currentTime; back(fq)->num=number; push(eq,(back(fq)->money)); //将产生事件加入事件队列

5 back(eq)->beginTime=currentTime; back(eq)->type="到达"; back(eq)->num=number; ++number; } 6存款函数 void putMoney() { total+=front(fq)->money; //更新资金总额 push(eq,front(fq)->money); //加入事件队列 离开 back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); ++counter; //更新客户总数

totalTime+=(back(eq)->endTime-front(fq)->beginTime); //更新逗留时间

pop(fq); //删除第一队列第一个业务 currentTimeOfDeal=back(eq)->endTime; state=0; } 7取款函数

void getMoney() //取款函数 { if((-fq.head->money)>total) //资金短缺 加入第二队列 { push(sq,front(fq)->money); back(sq)->beginTime=front(fq)->beginTime; back(sq)->num=front(fq)->num; pop(fq); 6 } else { total=total+back(fq)->money; push(eq,front(fq)->money); //加入事件队列离开 back(eq)->type="离开"; back(eq)->num=front(fq)->num; back(eq)->endTime=(front(fq)->beginTime+rand()%dealTime+1); back(eq)->beginTime=0; currentTimeOfDeal=back(eq)->endTime; ++counter; //更新客户总数

totalTime+=(back(eq)->endTime-back(fq)->beginTime); //更新逗留时间

pop(fq); //删除第一队列第一个业务 state=0; } } 8. 在对列中寻找可处理元素,对其进行处理 void findAndDeal() { while((temped=searchAndDel(sq,total))&&NULL!=temped) //查找可处理取款 { total+=temped->money;

totail=total+temped->money; push(eq,temped->money); //加入事件队列训 离开 back(eq)->type="离开"; back(eq)->num=temped->num; randomTemp=rand()%dealTime+1;

//更

新资

金总额 7 back(eq)->endTime=currentTime+randomTemp; currentTimeOfDeal+=randomTemp; ++counter; //更新客户总数

totalTime+=(back(eq)->endTime-temped->beginTime); //更新逗留时间

delete temped; //删除节点 temped=NULL; } state=0; } 9 主函数 int main() { int m; cin>>m; if(m=111111) { cout<<”欢迎进入系统<>n; while(n==1) {

srand(time(NULL)); //初始化随机函数 cout<<"输入银行的初始存款: "; cin>>total; cout<<"输入银行的营业时间: "; cin>>closeTime; 8

cout<<"输入最大到达时间间隔: "; cin>>arriveTime; cout<<"输入最大的处理时间: "; cin>>dealTime; theArriveTime+=rand()%arriveTime+1; //首次到达时间 while(currentTime

} cout<

} if(state==1&&fq.head!=NULL) {

} if(fq.head->money>=0) {

} else getMoney(); putMoney(); findAndDeal(); arrive(); theArriveTime+=rand()%arriveTime+1; 9

<<"事件类型"<<" " <<" 时间"<<" " <<" 处理金额"<

} cout<<"未处理客户:"<<""type=="离开") cout

cout

}

} cout<<"银行当前余额:"<

在用随即函数rand产生随机数的时候,对其初始化用srand(time(NULL),为了使得产生的随机数是整数要在后面加一

7 测试结果

如图一所示为输入密码进入系统后

图一输入密码进入系统后

如图二为输入银行的初始存款,营业时间,两个到达事件的最大间隔,客户交易的最大时间

图二输入各项信息后

如图三所示产生的客户信息

图三 客户的信息(到达时间和离开时间,平均在的时间)

参考文献

[1] 吴文虎,程序设计基础(第二版),北京,清华大学出版社 [2] 谭浩强,C语言程序设计,北京 ,清华大学出版社 [3] 边肇祺,模式识别(第二版),北京:清华大学出版社

[4] 李永忠,几种小波变换的图像处理技术,西北民族学院学报,自然科学版 [5] 严蔚敏,吴伟民,米宁,数据结构题集(c语言版),清华大学出版社

心得体会

转眼之间,来到大学已经一年半的时间了,对程序的学习也有了初步的认识,在大一的时候学习了程序设计,大二紧接着又学了数据结构,在这次的课程设计中,遇到了一些问题,通过老师和同学的帮助得到了解决,并且对程序设计的认识又提高了一个层次,在以后的学习中,对经常出现的问题会更加注意。

这次的课程设计给了我很大的帮助,在过程中学到了很多的知识,对程序的规范性以及有效性更加的重视。在以后编程序的过程中会更加注意程序的完善性,使程序的功能更加的齐全,而这也是作为一个程序设计师必须要具备的。认识到只有多多的练习才能更好的运用所学习的知识。在大学里要充分的利用各种资源,提高自己的水平。

第五篇:数据库课程设计要求

2007-2008学年第一学期

第一阶段:指导教师按班级填写《数据库系统课程设计任务书》,组织学生选题,并汇总选题及分组清单。

第二阶段:组织学生撰写需求分析报告,并组织学生自述。

第三阶段:指导学生编写代码,并调试、试运行。

第四阶段:指导学生填写《课程设计总结报告》

第五阶段:组织学生演示系统。

第六阶段:收集本学期课程设计资料,以班级为单位填写《课程设计总结与成绩统计分析报告》。

收集的资料要求包括:

1、《数据库系统课程设计任务书》,每个班级一份

2、学生选题分组一览表,每个班级一份

3、学生的需求分析报告、程序代码(提交源代码到教师指定的文件夹)、课程设计总结报告。在期末以班级为单位、按学号排序,将相关资料刻成光盘。

4、《课程设计总结及成绩统计分析报告》,每个班级一份

注:⑴《数据库系统课程设计任务书》、《课程设计总结报告》、《课程设计总结及成绩统计分析报告》均采用统一的标准表格填写,用A4纸打印。

⑵《数据库系统课程设计任务书》、《课程设计总结及成绩统计分析报告》由教师填写;《课程设计总结报告》由参加课程设计的学生每人填写一份。

⑶打印文档规范:1)统一用A4纸打印;

2)正文字体:宋体小四号;

3)若文档或表格多于1页,请标注页码。

附表1:《数据库系统课程设计任务书》

附表2:《课程设计总结及成绩统计分析报告》

附表3:《课程设计总结报告》

附表4:《数据库课程设计选题与分组一览表》

附表5:07-08上数据库课程设计指导教师一览表

附表6:《数据库系统课程设计任务书》样例

附表7:《数据库课程设计选题与分组一览表》样例

本文来自 古文书网(www.gwbook.cn),转载请保留网址和出处

相关文章:

危险预控01-12

数据库系统设计01-12

数据库管理系统01-12

应用酵素01-12

光伏与LED01-12

数据库系统期末01-12

学生系统数据库设计01-12

数据库系统恢复01-12

数据库管理信息系统01-12

赏识教育01-12

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:危险预控 下一篇:数据库系统期末