数据库课程设计报告修改稿第二组.docx
《数据库课程设计报告修改稿第二组.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告修改稿第二组.docx(18页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告修改稿第二组
哈密广播电视大学计算机信息管理专业
数据库应用课程设计报告
学生通讯录管理系统
学号1165001450580
姓名温轩
指导教师涂皆成
设计完成日期2012年5月30日
一、系统需求及功能说明
现要求设计一个“学生通讯录管理系统”,用于管理一个班级、专业系或学校的学生基本信息及其通讯录信息。
每个进入系统的用户必须经过登录才能访问,为安全起见,系统不设游客这种权限,必须拥有用户名(学生用学号作为用户名)和密码才能进入。
在系统中只有两种权限,即系统管理员和一般学生用户。
一般的学生用户只能查询其他同学的通讯信息,不能对其他同学的记录信息进行修改和删除,也可以修改自己的登录信息(主要是密码)和自己的通讯信息;而系统管理员拥有几乎所有的操作权力,即可以插入、修改、查询所有学生的信息和删除其他学生的记录等功能,但不能删除自己的登录信息。
学生或管理员登录时采用无差别登录,然后在数据库中设置权限,在操作时先从数据库中读取用户的权限,然后根据权限赋予相应的操作权力。
二、数据库设计说明
对于比较复杂的系统,其数据库由比较多的表所组成,每个表可能会涉及到比较多的数据项,而各个表之间又可能存在较复杂的关系。
我们所设计的“学生通讯录管理系统”是比较简单的演示系统,只有两个表,一个是用户的“密码表”,另一个是“学生通讯信息表”,两个表之间通过学号进行关联。
二、1登录密码表
“密码表”中保存有用户的登录名、密码和权限。
我们用admin”表管理员权限,用“Student”表示一般学生装的权限。
学生的用户名固定为学号,其初始密码与用户名相同,正确登录后,学生装可修改其默认的密码。
管理员用户是特殊设立的用户,可以是学生班长,也可以是学生装之一外的管理员,如教员、辅导员或班主任老师等担当。
二、2学生通讯信息表
“学生通讯信息表”中记录了学生的基本信息及其通讯信息,包括的数据项有学号、姓名、性别、出生日期、所学专业、联系电话、QQ号和Email等。
下面我们进入数据库设计中的概念设计、逻辑设计阶段和实现阶段。
1、概念设计
(图1)
(图2)
附(图1、图2)学生通讯管理系统E-R图
2、逻辑设计
根据ER图转换成基本表的思想,即每个实体转换成基本表,多对多的联系转换成基本表,而1对多的联系根据实际需要可以转换或不转换为基本表,按照附(图1、图2)所示的ER图,该系统的基本表应为2个,分别为:
密码表(用户名、密码、权限)
学生通讯信息表(学号、姓名、性别、出生日期、所学专业、联系电话、QQ号、Email)
3、建立数据库和基本表
在SQL中建立空的数据库“学生通讯管理系统”,然后建立如上所述的基本表,各个基本表的设计视图如附(图3、图4)所示。
(图3)密码表设计视图
(图4)学生表设计视图
三、系统的功能模块设计
1、用户登录
所有用户必须经过登录验证才能进入系统。
前面讲到,学生的用户名固定为学号,其初始密码与用户名(学号)相同,正确登录后,可修改其默认密码。
管理员用户是建表时特殊设计的用户,由设计人员告诉其用户名和密码。
2、用户密码修改
正确登录后的用户可以修改自己的登录密码,为安全起见,需要用户给出正确的原始密码,并确认新密码才能修改成功。
管理员用户可以修改所有用户的登录密码信息。
3、用户信息查询
正确登录后的管理员或学生用户可根据学号、姓名、和所在专业对学生有通讯信息表
进行查询,通过结果窗口得到查询的结果信息。
4、插入用户记录
管理员用户可插入学生基本信息,每个学生至少要有学号和姓名等基本信息,每插入一个学生基本信息记录,需要由系统同时在用户登录表中插入一条登录信息,并给定初始的登录用户名、密码和权限。
学生记录中的其信息可由学生自己登录系统后进行添加或修改。
5、5、删除用户记录
对于少数由于特殊原因退学,转学或开除的学生记录,可由管理员将其记录进行删除,同时也要删除其登录用的登录记录。
6、修改用户记录
学生用户可以修改本人的基本通讯信息,而管理员用户可以修改所有学生的基本信息数据,修改完成后存入数据表。
(图5)系统模块功能图
四、构建用户登录模块
在正式进入管理系统之前,需要一个登录验证模块,用户通过在编辑框中输入用户名和密码,按“登录”按钮,经程序验证(数据库的登录密码表中有这样的用户名和密码)后,进入系统的主模块,完成相应的功能。
1、构建登录对话框界面
在前面建立的“学生通讯录管理系统”工程中,系统已经生成了一个对话框,这个对话框是程序运行时首先启动的,我们改造它来作为用户登录对话框。
用于提示用户输入“用户名”和“密码”,再加上两个编辑框和两个按钮控件,调整其大小,如图6所示。
(图6用户登录对话框)
2、设计主窗口模块
从方便实的角度来考虑,我们将主窗口设计成如图7所示的对话框。
(图7“学生通讯录管理系统”主窗体)
按钮的ID属性分别设置为:
“修改密码”按钮的ID为:
IDC_editpassword
“修改学生记录”按钮的ID为:
IDC_editrecord
“插入学生记录”按钮的ID为:
IDC_insertrecord
“查询学生记录”按钮的ID为:
IDC_pueryrecord
“删除学生记录”按钮的ID为:
IDC_deleerecord
“重新登录”按钮的ID为:
IDC_cancel
五、实现系统各功能模块
1、修改密码模块
建立修改密码窗口,如图8所示
(图8修改密码窗体)
1)、对窗体本身的属性进行修改,将窗体的ID设置为”IDD-EditPassword”,标题设置为“修改用户密码”。
2)、对三个文本输入框的ID属性进行设置。
将原密码文本框ID属性设置为”IDC-oldpassword”,新密码文本框ID属性设置为”IDC-newpassword1”,新密码确认文本框ID属性设置为”IDC-newpassword2”。
3)、“确定”按钮的ID设置为,”IDC-editpassok”,“退出”按钮的ID设置为”IDC-editpassexit”。
#include“editpasswordDlg.h”
CeditpasswordDlg*EditpassDlg;
EditpassDlg=newCeditpasswordDlg;
if(EditpassDlg->GetSafeHwnd()==0)
EditpassDlg->Creat(IDD_EditPassword);
#include”passwordSet.h”;
externCmaindlg*MainDlg;//主窗体
externCStringusername,userpower;//用户名和密码
externCDatabasem_database;//数据库对象
CpasswordSetupwset;
CStringstr;
if(upwset.IsOpen())upwset.Close();
UpdateDATA(true);//将用户的输入反映到变量中
Str.Format(“select*from密码表where用户名=’%s’and
密码=’%s’”,username,m_oldpassword);//构造查询语句
Upwset.Open(AFX_DB_USE_DEFAULT_TYPE,str);//建立记录集
if(upwset.IsBOF()){//记录集为空
MessageBox(“用户密码不正确!
或用户名与密码不相对应,请重输!
”);
}
else{//准准备备修改密码
If(strcmp(m_newpasswordl,m_newpassword2)!
=0{
MessageBox(“用户输入的两次密码不一致!
请重新输入!
”);
}
else{//修改
Ste.Format(“update密码表set密码=’%s’
Where用户名=’%s’,m_newpassword1,username);
Try{
m_database.ExecuteSQL(str);//更新密码
}
Catch(CDBExceptionel){
AfxMessageBox(“数据库操作失败!
”);
}
Catch(CMemoryExceptione2){
AfxMessageBox(“内存出错!
”);
}
MessageBox(“密码修改成功!
”);
}
}
If(upwset.IsOpen())
{upwset.Close();}//关闭记录集
m_oldpassword=””;//清空文本框内容
m_newpassword1=””;
m_newpassword2=””;
UpdateData(false);//将变量值返回到编辑框,即编辑框清空!
MainDlg_>ShowWindow(SW_SHOW);//返回主窗口
Showwindow(SO_HIDE);//隐藏自身
2、重新登录模块
单击“重新登录”按钮,退出当前窗体,返回登录窗体。
ShowWindow(SW_HIDE);//隐藏自身
CMyDlgmdl;//定义主对话框类变量
mdl.DoModal();//以有模式方式打开对话框
3、插入学生记录模块
在工作区窗口的资源视图下,插入一个新的对话框。
对话框的相关属性设置为:
ID:
IDD_INSERT_DIALOG
标题:
插入和修改记录
在其中添加控件,得到如图8所示窗体
(图8插入和修改学生记录窗体)
对应文本输入框或下拉框的ID号分别为:
学号:
IDC_SNO_EDIT
姓号:
IDC_SNAME_EDIT
姓别:
IDC_SEX_COMBO
出生年、月、日:
IDC_YY_EDIT,IDC_MM_EDIT,IDX_DD_EDIT
所在专业系:
IDC_DEPT_EDIT
联系电话:
IDC_PHONE_EDIT
Email:
IDC_EMAIL_EDIT
QQ号:
IDC_QQ_EDIT
其余控件ID取默认值。
#inslude“InsertDlg.h”
CInsertDlg*InsDlg;
InsDlg=newCInsertDlg;
If(InDlg->GetSareHwnd()==0)
InsDlg->Create(IDD_INSERT_DIALOG);
4、删除和修改学生记录模块
为方便管理员删除和修改学生记录,用列表的方式将学生用户的有关信息显示出来。
管理员首先选中要删除或修改的记录,然后单击对应的删除或修改按钮,再进行相应的操作。
添加如下代码:
M_list.InsertColumn(0,”学号”);
M_list.InsertColumn(1,”姓名”);
M_list.InsertColumn(2,”性别”);
M_list.InsertColumn(3,”出生日期”);
M_list.InsertColumn(4,”所在专业系”);
CRectr;
M_list.GetWindowRect(&r);
Intwid=r,Width();//取得Listcontrol控件宽度;
For(inti=0;i<5;i++){
M_list.SetColumn.Width(I,wid/5);//每个属性分配五分之一的宽度;
}
M_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//设置ListControl控件属性,使其具有类似Excel的网格样式;如图9所示
(图9“删除或修改学生记录”对话框)
5、查询学生记录模块
可以根据学生的姓名、所在专业系和出生年份中的一个或多个项目进行查询,通过复选按钮进行选择,将查询的结果显示在ListControl中。
1)、设计其窗体查询窗体
我们设计查询窗体如图10所示,并建立对话框类(CQueryDlg)。
(图10设计查询窗体)
要使用新建立的类,将其头文件加入到文件中,并设立指向此窗体的全局变量,然后对指针变量进行初始化。
2)、初始化列表控件,在类向导中,选择对象ID为CqueryDlg,在其消息对话框中选择WM_INITDIALOG,双击它,建立初始化函数;在其中插入如下所示代码:
m_querylist.DeleteAllItems();
m_querylist.InsertColumn(0,”学号”);
m_querylist.InsertColumn(1,”姓名”);
m_querylist.InsertColumn(2,”性别”);
m_querylist.InsertColumn(3,”出生日期”);
m_querylist.InsertColumn(4,”所在专业”);
m_querylist.InsertColumn(5,”联系电话”);
m_querylist.InsertColumn(6,”Email”);
m_querylist.InsertColumn(7,”QQ号”);
CRectr;
M_quetylist.GetWindowRect(&r);
Intwid=r.Width();//取得Listcontrol控件宽度;
For(inti=0;i<8;i++){
M_querylist.SteColumnWidth(I,wid8);
}
M_querylist.SetExtendedStyle(LVS_EX_FULLROWSELECT
LVS_EX_GRIDLINES);
3)、主窗口转到查询窗体,在主窗体中单击“查询学生记录”时,转入刚建立的查询窗体,建立对应的函数,添加如下所示代码:
Cstringspl:
Spl=″select*from学生通讯信息表″;
QuyDlg->OnRfreshData(spl)
QuyDlg->ShowWindow(SW_SHOW)
Showwindow(SW_HIDE)
ViodCqueryDlg:
:
OnRefreshData(Cstringspl)
|
Cstringstr,temp;
m_querylist.DeleteAllItens()
CstudentInfom_stuinfoset;
If(m_stuinfoset.IsOpen()){m_suinfosetClose();}
m_stuinfoset.m_pDatabase=&m_database
m_stuinfoset,Open(AFX_DB_USE_DEFAULT_TYPE,spl);
inti=0;
while(!
m_stuinfoset,l\IsEOF()){
while(m_stuinfoset,IsDeteted()){
m_stuinfoset,MoveNext();
}
str=m_stinfoset.m_columnl;
str.TrimLeft();str.TrimRight();
m_querylist.InsertItem(I,str);//学号
str=m_stuinfoset.m_column2;
str.TrimRight();
m_queryist.SrtItemText(I,l,str);//姓名
str=m_stuinfoset.m_column3;
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,2,str);//性别
str=m_stuinfoset.m_column4;
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,3,str);//出生日期
str=m_stuinfoset.m_column5;//所在专业系
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,4,str);
str=m_stuinfoset.m_column6;//联系电话
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,5,str);
str=m_stuinfoset.m_Email;//Email
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,6,str);
str=m_stuinfoset.m_QQ;//QQ
str.TrimLeft();str.TrimRight();
m_queryist.SrtItemText(I,7,str);
m_stuinfoset.MoveNext();
4)、完成查询操作,双击查询窗体中的“查询”命令按钮,建立函数,在其中加入以下语句完成查询操作。
Cstringsql;
Cstringtemp1,temp;
Updatedata(true);
Sql.Format(“select*from学生通讯通讯信息表where学号isnotNULL”);
If(m_checkname.GetCheck()){
Temp.Format(“and姓名=’%s’”,m_qname);
Sql=sql+temp;
}
If(m_checkdate.GetCheck()){
Sql=sql+”and所在专业like‘%”+m_qdept+”%’”;
If(m_checkdate.GetCheck()){
Temp.Format(“%d”,m_year);temp.TrimLeft();temp.TrimRight();
Temp1.Format(“%d”,m_year2);temp.TrimLeft();temp.TrimRight();
Sql=sql+”and出生日期between’”+temp+”-01-01’and’”+temmp1+”-01-01’”;
}
This->OnRefreshData(aql);//数据刷新
5)、从查询窗体返回主窗体,双击查询窗体中的“返回”命令按钮,建立函数,在其中加入以下语句可。
MainDlg->ShowWindow(SW_SHOW);//返回主窗体
Showwindow(SW_HIDE);//隐藏自身
至此,通讯录管理系统的设计工作全部完成,通过测试后,可以投入使用。
六、总结(感想与收获)
刚开始做课程设计时,总认为用sql做系统简单,不用做说明准备,另外,我的选题来自己熟悉高校,以为很快就能很好的完成,其实不然。
在设计中,碰到了许多问题,例如,登录成绩时怎样方便教务员操作,成绩查询时如何实现等问题,对这些问题都反复修改了许多次,直到基本满意为止。
另外,我的设计尽量通过向导完成,但向导的局限性太大,无法实现一些复杂的功能,因此在其中一些部分只能通过宏和模块来实现。
系统也存在一些小问题,例如,录入成绩时到了最后无法自然提示,删除数据时提示也是系统本身提供,不是很适合使用者等。
通过此次课程设计,能够真正做出一个小系统,将所学的知识应用到实际中去,心中特别高兴,尽管上课时我们也有做实验,但比较单一,缺少联系性,不能从整体上和实际需要上去考虑为题,有被牵着走的感觉。
通过设计还锻炼了我们自己思考、深入学习和解决为题的能力。
七、致谢
感谢同组同学的共同讨论和帮助,感谢指导老师的建议和精心指导。
八、参考资料
1刘世峰,数据库基本与应用,北京:
中央广播电视大学出版社,2003
2刘世峰,徐孝凯,SQLSERVER上机操作指导,北京:
中央广播电视大学出版社2003
3耿文兰,SQLServer2000数据库管理与开发,北京:
电子工业出版社,2003
4启明工作室,VisualC+++SQLServer数据库应用系统开发与实例,北京:
人民邮电出版社,2004-
5王育坚,VisualC++面向对象编程教程,北京:
清华大学出版社,2003
6刘刀桂,孟繁晶,VisualC++实践与提高——数据库篇,北京:
中国铁道出版社,2001
7廖望,等,SQLServer2000案例教程,北京:
冶金工业出版社,2004-