《数据库课程设计.doc》由会员分享,可在线阅读,更多相关《数据库课程设计.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 1 页 共 18 页数据库课程设计数据库课程设计 数据库课程设计是在学生系统学习了数据库原理课程以及数据库设计与应用课程之后, 按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型 的数据库管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,学 会如何把书本上学到的知识用于解决实际问题;另一方面,能深入理解和灵活掌握教学内 容。 一.设计题目:C/S 模式下的学籍管理系统开发“学生信息管理”模块 二.课程设计环境:基于 Windows 操作系统环境的 C/S 模式的 Delphi7 开发工具, MS SQL Server2000 数据库, 截图软件
2、,ODBC 数据源管理器。 注意:注意:Delphi7 和和 MS SQL Server2000 数据库采用数据库采用 ODBC 建立连接建立连接三.需求分析1. 问题的提出:为了高效率的完成学生信息的管理,决定开发学生信息管理 系统。2.需完成的功能:对学生基本信息的录入,删除,修改等操作。 四. 设计内容 1.主窗体设计和窗体初始化以及数据库连接。 2.主要的数据表 学生信息牵涉到 3 个表,分别是 student, studclass, department。 3.主要功能模块1)实现修改学生信息功能。 2)删除学生资料。3)关闭学生管理窗体。 五建表和数据表(包括 student, s
3、tudclass, department 三个表的内容)创建新数据源到 MS SQL Server2000 数据库中,命名数据源(stu) ,指定数据库服务 器;指定连接数据库服务器的验证方式,更改默认数据库为 student;指定要访问的数据库; 完成数据源的创建后还要测试所创建的数据源;完成以上设计前的准备工作,然后在创建 的数据库中建表 student, studclass, department,建表如下(表的具体内容根据数据库导 入可以得到): 院系院系设设置置create table 院系设置( 院系号 char(6) primary key, 院系名 char(10) not n
4、ull, 负责人 char(10), 联系电话 char(15),) 班班级级管理管理create table 班级管理( 班级编号 char(6) primary key, 班级名称 char(30) not null, 所属院系 char(40), 入学日期 datetime not null,第 2 页 共 18 页班主任 char(10), 联系电话 char(15),) 学生管理学生管理 create table 学生管理( 学号 char(10) primary key, 姓名 char(20) not null, 性别 char(4) not null, 出生日期 datetim
5、e not null, 籍贯 char(30), 所属班级 char(15), constraint sex check(性别 in(男,女),) DepatmentColumn Name Date Type Width空值情况DIDChar 6主关键字Dname Char 10不为空DheadChar 10可为空DtelephoneChar15可为空StudclassColumn Name Date Type Width空值情况SCIDChar6主关键字SCnameChar30不为空SCdepartChar 40可为空BegindateChar 10不为空MasterChar 10可为空SC
6、telephoneChar 15可为空StudentColumn Name Date Type Width 空值情况SIDChar 10主关键字SnameChar 20不为空CnameChar15可为空BirthNumber20不为空NativeChar30可为空SexChar 4不为空六程序代码以及相关描述1)“学生信息管理”模块第一部分是院系设置和本窗口的“退出”键,该部分包括了院系 号,系名,负责人,联系电话等几小部分。具有删除,修改的功能,例如对院系以 及所管班级编号,名称的修改和删除,并且说明了在哪些情况下不能执行这两个功 能。要求对信息录入完全,已存在的信息将不再承认,需确认后重新
7、输入。第 3 页 共 18 页在 Delphi 软件中的运行代码如下:(程序包括窗体的设计和其中内容的填写) unit department; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, DBCtrls, DB, DBTables, Grids, DBGrids, Buttons,ExtCtrls, Mask; typeTfrmdepartment = class(TForm)Label1: TLabel;Label2: TL
8、abel;Label3: TLabel;Label4: TLabel;dbedepartmentID: TDBEdit;dbedepartmentName: TDBEdit;dbehead: TDBEdit;dbetelephone: TDBEdit;GroupBox1: TGroupBox;dbndepartment: TDBNavigator;btnquit: TBitBtn;dbgdepartment: TDBGrid;tbldepartment: TTable;tblvalid: TTable;dsdepartment: TDataSource;dbmDesc: TDBMemo;pro
9、cedure btnquitClick(Sender: TObject);procedure dbndepartmentClick(Sender: TObject; Button: TNavigateBtn);procedure tbldepartmentAfterScroll(DataSet: TDataSet);procedure FormShow(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure tbldepartmentBeforePost(DataSet:
10、 TDataSet);procedure tbldepartmentBeforeDelete(DataSet: TDataSet);private第 4 页 共 18 页procedure ToggleMode;function Hasclass(var str:string):boolean; Private declarations public Public declarations end; varfrmdepartment: Tfrmdepartment; implementation $R *.dfm procedure Tfrmdepartment.btnquitClick(Se
11、nder: TObject); begin close; end; procedure Tfrmdepartment.ToggleMode; var strmsg:string;procedure enableinput(enabled:boolean);begindbgdepartment.Enabled:=not enabled;dbedepartmentID.Enabled:=enabled;dbedepartmentname.Enabled:=enabled;dbehead.Enabled:=enabled;dbetelephone.Enabled:=enabled;dbmDesc.E
12、nabled:=enabled;end;begincase tbldepartment.State ofdsinsert,dsedit:beginenableinput(true);dbndepartment.VisibleButtons:=nbpost,nbcancel;dbedepartmentId.SetFocus;end;elseenableinput(false);dbndepartment.VisibleButtons:=nbfirst,nbprior,nbnext,nblast,nbinsert,nbdelete,nbedit,nbpost,nbcancel,nbrefresh;
13、end;if (tbldepartment.State=dsedit) and hasclass(strmsg) thenbeginshowmessage(strmsg);dbedepartmentId.Enabled:=false;end;end;第 5 页 共 18 页function Tfrmdepartment.Hasclass(var str :string):boolean;beginresult:=false;tblvalid.Active:=false;tblvalid.TableName:=class;tblvalid.Filter:=departID=+tbldepartm
14、entdepartID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstr:=format(不能修改院系“%S“的编号下面的班级:#13,tbldepartmentdepartname) ;repeatstr:=str+format(%10S-%s#13,tblvalidclassID,tblvalidclassname);tblvalid.Next;until tblvalid.Eof;str:=str+隶属于该院系;result:=true;end;tblvalid.Active:=
15、false;end; procedure Tfrmdepartment.dbndepartmentClick(Sender: TObject;Button: TNavigateBtn); beginToggleMode; end; procedure Tfrmdepartment.tbldepartmentAfterScroll(DataSet: TDataSet); beginToggleMode; end; procedure Tfrmdepartment.FormShow(Sender: TObject); begin tbldepartment.Active:=true; end; p
16、rocedure Tfrmdepartment.FormClose(Sender: TObject;var Action: TCloseAction); begin tbldepartment.Active:=false; action:=cafree; end; procedure Tfrmdepartment.tbldepartmentBeforePost(DataSet: TDataSet);procedure checkfield(fieldname,fieldDesc:string ;dbtext:tcustomedit;notempty:boolean);begindbtext.T
17、ext:=trim(dbtext.Text); /除去指定字符串中不可见的字符dbtext.Text:=stringreplace(dbtext.Text,rfreplaceall); /返回替换后的字符串第 6 页 共 18 页dbtext.Text:=stringreplace(dbtext.Text,rfreplaceall);if notempty and (dbtext.Text=) thenbeginshowmessagefmt(“%S“不能为空,请从新输入足够的信息,fieldDesc);dbtext.SetFocus ;abort;endelsetbldepartment.Fi
18、eldByName(fieldname).AsString:=dbtext.Text;end;function validID :boolean;var strmsg1 :string;beginresult:=true;tblvalid.Active:=false;tblvalid.TableName:=department;tblvalid.Filter:=departID=+tbldepartmentdepartID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstrmsg1:=f
19、ormat(院系编号“%S“已经存在,请从新输入!#13,tbldepartmentdepartID);strmsg1:=strmsg1+format(院系编号:%S#13,tbldepartmentdepartId);strmsg1:=strmsg1+format(院系名称:%S#13,tbldepartmentdepartname);strmsg1:=strmsg1+format(院系领导:%S#13,tbldepartmentdeparthead);showmessage(strmsg1);dbedepartmentID.SetFocus;result:=false;end;tblval
20、id.Active:=false;end; begincheckfield(departID,院系编号,dbedepartmentID,true);checkfield(departname,院系名称,dbedepartmentName,true);checkfield(departhead,负责人,dbehead,true);checkfield(telephone,联系电话,dbetelephone,true);checkfield(description,说明,dbmDesc,false);if dbedepartmentID.Modified and not validID thena
21、bort; end; procedure Tfrmdepartment.tbldepartmentBeforeDelete(DataSet: TDataSet);var strmsg :string; begin第 7 页 共 18 页if hasclass(strmsg) thenbeginshowmessage(strmsg);abort;end;strmsg:=format(确定要删除院系“%S“吗?该院系相关信息如下: #13,tbldepartmentdepartID);strmsg:=strmsg+format(院系编号:%S#13,tbldepartmentdepartId);s
22、trmsg:=strmsg+format(院系名称:%S#13,tbldepartmentdepartname);strmsg:=strmsg+format(院系领导:%S#13,tbldepartmentdeparthead);if messageDlg(strmsg,mtconfirmation,mbyes,mbno,0)mryes thenabort; end; procedure Tfrmclass.tblclassBeforePost(DataSet: TDataSet);procedure checkInput(fieldname,fieldDesc:string;dbtext:t
23、customedit;notempty:boolean);begindbtext.Text:=trim(dbtext.Text);dbtext.Text:=stringreplace(dbtext.Text,rfreplaceall);dbtext.Text:=stringreplace(dbtext.Text,rfreplaceall);if notempty and (dbtext.Text=) thenbeginshowmessagefmt(“%S”不能为空,请输入足够的信息!,fieldDesc);dbtext.SetFocus;abort;end第 11 页 共 18 页elsetb
24、lclass.FieldByName(fieldname).AsString:=dbtext.Text;end;function validID :boolean;var strmsg:string;beginresult:=true;tblvalid.Active:=false;tblvalid.TableName:=student;tblvalid.Filter:=classID=+tblclassclassID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstrmsg:=forma
25、t(班级编号“%S”已经存在,请从新输入!#13,tblclassclassID);strmsg:=strmsg+format(班级编号:%S#13,tblclassclassID);strmsg:=strmsg+format(班级名称:%S#13,tblclassclassname);strmsg:=strmsg+format(所属院系:%S#13,tbldepartmentdepartname);strmsg:=strmsg+format(入学日期:%S#13,tblclassbegindate);strmsg:=strmsg+format(班主任:%S#13,tblclassmaster
26、);strmsg:=strmsg+format(联系电话:%S#13,tblclasstelephone);showmessage(strmsg);dbeclassID.SetFocus;result:=false;end;tblvalid.Active:=false;end;begincheckinput(classID,班级编号,dbeclassID,true);checkinput(classname,班级名称,dbeclassname,true);checkinput(begindate,入学日期,dbebegindate,true);checkinput(master,班主任,dbe
27、master,true);checkinput(telephone,联系电话,dbetelephone,true);checkinput(description,说明,dbmDesc,false);if dblcbdepart.Text= thenbeginshowmessage(所属院系不能为空,请输入足够的信息);dblcbdepart.SetFocus;abort;end;if dbeclassId.Modified and not validID thenabort;end; procedure Tfrmclass.FormClose(Sender: TObject; var Acti
28、on: TCloseAction);第 12 页 共 18 页begintblclass.Active:=false;tbldepartment.Active:=false; end; procedure Tfrmclass.FormShow(Sender: TObject); begin tblclass.Active:=true; tbldepartment.Active:=true; end; end. 3) “学生信息管理”模块第三部分是学生基本信息录入和本窗口的“退出”键,该程序的 学生资料删除功能,在学生有奖学金记录,有处罚记录,有转系记录这三种情况下 不能删除学生资料。另外要求性
29、别,所属班级不能为空;基本资料足够齐全。在 Delphi7 软件中的程序代码如下:(程序包括窗体的设计和其中内容的填写) unit student; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,0000000000DBCtrls, Mask; typeTfrmstudent = class(TForm)Label1: TLabel;
30、Label2: TLabel;Label3: TLabel;Label4: TLabel;Label5: TLabel;Label6: TLabel;dbestudentID: TDBEdit;dbename: TDBEdit;dbebirthday: TDBEdit;dbenative: TDBEdit;dblcclassname: TDBLookupComboBox;dbrgsex: TDBRadioGroup;第 13 页 共 18 页dbnstudent: TDBNavigator;BitBtn1: TBitBtn;dbgstudent: TDBGrid;tblstudent: TTa
31、ble;tblclass: TTable;tblvalid: TTable;dsstudent: TDataSource;dsclass: TDataSource;procedure BitBtn1Click(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure FormShow(Sender: TObject);procedure dbnstudentClick(Sender: TObject; Button: TNavigateBtn);procedure tbls
32、tudentAfterScroll(DataSet: TDataSet);procedure tblstudentBeforePost(DataSet: TDataSet);procedure tblstudentBeforeDelete(DataSet: TDataSet);procedure FormCreate(Sender: TObject);privateprocedure ToggleMode;function HasChange(var str:string):boolean;function HasReward(var str:string):boolean;function
33、Haspunish(var str:string):boolean; Private declarations public Public declarations end; varfrmstudent: Tfrmstudent; implementation $R *.dfm procedure Tfrmstudent.BitBtn1Click(Sender: TObject); begin close; end; procedure Tfrmstudent.FormClose(Sender: TObject; var Action: TCloseAction); begin tblstud
34、ent.Active:=false; tblclass.Active:=false; end; procedure Tfrmstudent.FormCreate(Sender: TObject); begin end; procedure Tfrmstudent.FormShow(Sender: TObject); begin tblstudent.Active:=true;第 14 页 共 18 页tblclass.Active:=true; end; procedure Tfrmstudent.ToggleMode;procedure EnableInput(enabled:boolean
35、);begindbgstudent.Enabled:=not enabled;dbestudentID.Enabled:=enabled;dbename.Enabled:=enabled;dbrgsex.Enabled:=enabled;dblcclassname.Enabled:=enabled;dbebirthday.Enabled:=enabled;dbenative.Enabled:=enabled;end ;begincase tblstudent.State ofdsinsert,dsedit:beginEnableInput(true);dbnstudent.VisibleBut
36、tons:=nbpost,nbcancel;dbestudentID.SetFocus;end;elseEnableInput(false);dbnstudent.VisibleButtons:=nbfirst,nbprior,nbnext,nblast,nbinsert,nbdelete,nbedit,nbpost,nbcancel,nbrefresh;end;end; procedure Tfrmstudent.dbnstudentClick(Sender: TObject;Button: TNavigateBtn); beginToggleMode; end; procedure Tfr
37、mstudent.tblstudentAfterScroll(DataSet: TDataSet); begin ToggleMode; end; procedure Tfrmstudent.tblstudentBeforePost(DataSet: TDataSet);procedure checkfield(fieldname,fieldDesc:string;dbtext:TcustomEdit;notempty:boolean);begindbtext.Text:=trim(dbtext.Text);dbtext.Text:=stringreplace(dbtext.Text,rfre
38、placeall);dbtext.Text:=stringreplace(dbtext.Text,rfreplaceall);if notempty and (dbtext.Text=) thenbegin第 15 页 共 18 页showmessagefmt(“%S“不能为空,请从新输入足够的信息!,fieldDesc);dbtext.SetFocus;abort;endelsetblstudent.FieldByName(fieldname).AsString:=dbtext.Text;end;function validID:boolean;varstrmsg:string;beginr
39、esult:=true;tblvalid.Active:=false;tblvalid.TableName:=student;tblvalid.Filter:=studentID=+tblstudentstudentID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstrmsg:=format(学生编号“%s”已经存在,请从新输入!#13,tblstudentstudentID);strmsg:=strmsg+format(学生编号:%S#13,tblstudentstudentID);
40、strmsg:=strmsg+format(学生姓名:%S#13,tblstudentstudentname);strmsg:=strmsg+format(出生日期:%S#13,tblstudentbirthday);strmsg:=strmsg+format(籍贯:%S#13,tblstudentnative);showmessage(strmsg);dbestudentID.SetFocus;result:=trueend;tblvalid.Active:=false;end;begincheckfield(studentID,学号,dbestudentId,true);checkfiel
41、d(name,姓名,dbename,true);checkfield(birthday,出生日期,dbebirthday,true);checkfield(native,籍贯,dbenative,true);if dbrgsex.Value= thenbeginshowmessage(性别不能为空,请从新输入足够的信息);dbrgsex.SetFocus;abort;end;if dblcclassname.Text= thenbegin第 16 页 共 18 页showmessage(所属班级不能为空,请输入足够的信息);dblcclassname.SetFocus;abort;end;if
42、 dbestudentID.Modified and not validID thenabort;end;function Tfrmstudent.HasChange(var str:string):boolean;beginresult:=false;tblvalid.Active:=false;tblvalid.TableName:=change;tblvalid.Filter:=studentID=+tblstudentstudentID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if tblvalid.Eof thenbeginstr
43、:=format(不能删除“%S”学生的资料吗?#13,tblstudentstudentID);str:=str+此学生有转系记录;result:=true;end;tblvalid.Active:=false;end;function Tfrmstudent.HasReward(var str:string ) :boolean;beginresult:=false;tblvalid.Active:=false;tblvalid.TableName:=reward;tblvalid.Filter:=studentID=+tblstudentstudentID+;tblvalid.Filte
44、red:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstr:=format(不能删除“%S”学生的资料,此学生有奖学金记录,tblstudentstudentID) ;result:=true;end;tblvalid.Active:=false;end;function Tfrmstudent.Haspunish(var str:string):boolean;beginresult:=false;tblvalid.Active:=false;tblvalid.TableName:=punish;第 17 页 共 18 页
45、tblvalid.Filter:=studentID=+tblstudentstudentID+;tblvalid.Filtered:=true;tblvalid.Active:=true;if not tblvalid.Eof thenbeginstr:=format(不能删除“%S”学生的资料,此学生有处罚记录,tblstudentstudentID);result:=true;end;tblvalid.Active:=false;end;procedure Tfrmstudent.tblstudentBeforeDelete(DataSet: TDataSet);var strmsg:s
46、tring;beginif Haschange(strmsg) thenbeginshowmessage(strmsg);abort;endelse if HasReward(strmsg) thenbeginshowmessage(strmsg);abort;endelse if HasPunish(strmsg) thenbeginshowmessage(strmsg);abort;end;strmsg:=format(确定要删除“%S”的信息吗?该学生的相关信息如下: #13,tblstudentname);strmsg:=strmsg+format(学号:%S#13,tblstuden
47、tstudentID);strmsg:=strmsg+format(姓名:%S#13,tblstudentname);strmsg:=strmsg+format(性别:%S#13,tblstudentsex);strmsg:=strmsg+format(所属班级:%S#13,tblclassclassname);strmsg:=strmsg+format(班长:%S#13,tblclassmaster);strmsg:=strmsg+format(电话:%S#13,tblclasstelephone);if messagedlg(strmsg,mtconfirmation,mbyes,mbno
48、,0)mryes thenabort;end; end. 七部分重要功能的操作方式及其操作语句 1)建立数据库连接: 学生信息牵涉到 3 个表(student, studclass, department) 。因而,需要建立 3 个对应的 Tquery 控件,分别为:StuQry, ClassQry 和 DepartQry.其中 StuQry 是可编辑的,其他为只第 18 页 共 18 页读的。另外还要建立 3 个数据源,分别为 StuSrc, ClassSrc, DepartSrc,这些数据源的 DataSet 属性分别为 StuQry, ClassQry 和 DepartQry.在 StuQry 的 SQL 属性中,输入 SELECT*