项目管理数据库课程设计Word文件下载.docx
《项目管理数据库课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《项目管理数据库课程设计Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
(2)权限分配:
超级管理员通过输入密码和帐号可以对数据库的数据进行各种操作,而普通用户仅仅可以进行一部分的操作。
(3)易操作性:
可以快速进行查询操作,进行数据的汇总。
3系统设计
3.1设计思路
(1)系统分成前台和后台相对独立的模块,前台用来构架系统的开发界面并完成功能设计,后台数据库服务器来完成数据库的管理工作;
(2)采用模块化程序设计思想,整个系统采用模块化结构设计,作为应用程序有较强的可操作性和扩展性。
(3)合理的数据流设计,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
3.2系统功能模块图
系统结构模块图如下所示:
图3.1系统功能模块图
3.3模块功能设计
本系统共包括10大模块,分别是用户登录模块,项目档案管理模块,项目组信息管理模块,项目进展管理模块,项目信息添加模块,个人统计模块模块,全局模块统计模块,单科情况统计模块。
每个模块的功能如下:
1用户登录模块:
分为超级管理员和普通用户两种,默认为普通用户,在进入了主界面后,可以在菜单栏中输入管理员密码和帐号,从而切换至管理员身份。
普通用户权限受限,可以进行部分操作(查询,统计),管理员可以对该系统进行任何操作。
2项目信息管理:
可以对项目档案(包括:
项目号,姓名,性别,系别,政治面貌)进行查询,删除,修改操作。
3项目组信息管理:
可以对项目组信息(包括:
项目号,姓名,性别,家庭住址,身份证)进行查询,修改,删除操作。
4功能模块信息管理:
可以对功能模块信息(包括:
项目号,姓名,系别,课程号,课程名,教导人)进行查询,删除,修改操作。
5项目信息添加:
可以对项目的整体情况进行添加操作(包括:
项目号,姓名,性别,系别,政治面貌,课程号,身份证,家庭住址),当然这个操作是对于管理员来说的,普通用户无权进行该项操作。
6项目进展管理:
可以对项目进展(包括:
项目号,课程名,任课教师)进行查询,修改,添加,删除操作,其中修改,添加,删除操作必须是管理员身份,而查询操作任何人均可。
7项目文档管理:
可以对项目文档(包括:
项目号,姓名,系别,课程号,课程名,成绩)进行查询,修改,删除,更新,个人统计,全局统计,排序等操作。
8项目报错模块:
可以对项目报错情况(包括:
项目号,姓名,系别,课程号,课程名,成绩)进行统计,算平均成绩,最高成绩,不及格情况,及格情况,排序操作。
9项目总结统计:
可以对项目总结情况(包括:
项目号,姓名,系别,课程号,课程名,成绩)进行统计,按学号排序,最高成绩,最低成绩,不及格情况,及格情况,单科情况统计操作。
10单科情况统计:
可以对全部项目某部分的情况进行统计算平均进度,最高完成数,及格人数不及格情况以及人数,最低完成数,排序操作。
4系统数据库设计
4.1系统数据库的建立
数据库的设计尽量的实现与应用程序做到最低等级的耦合,按照三层模式两级联系的方式设计数据库,把数据库设计成层次清晰的,高效的,实用数据库。
鉴于系统开发数据的信息量大,容易造成冗余和数据不一致性,因此采用了触发器来帮助完成工作,从而也很好的减少了代码编辑量,达到了程序与后台执行的分离,从而提高了工作效率,大大节省了时间。
4.2系统E-R图
项目管理系统数据库E-R模型,如下图所示:
图4.1项目管理系统E-R模型图
4.3数据表的创建
由数据模型利用Oracle10g进行数据库的详细设计,其基本表的设计如下:
表4.3.1用户信息表
列名
数据类型
长度
允许为空
默认值
字段名
说明
use
VARCHAR2
24
用户名
主键
pwd
密码
id
6
身份标志
表4.3.2项目信息表
sno
项目号
主键,自动增长
sname
姓名
ssex
性别
sdept
系别
表4.3.3项目文档信息表
cno
课程号
grade
分数
表4.3.4项目组信息表
Mianmao
政治面貌
identity
身份证
Address
家庭住址
表4.3.5项目进展信息表
cname
课程名
cteacher
教师名
表4.3.6功能模块信息表
score
4.4触发器设计
创建的触发器如下:
CREATETRIGGERdelete_proj//删除项目表时,实现数据一致性
AFTERDELETEONprojFOREACHROW
DECLARE
snoCHAR(10)
BEGIN
DELETEFROMscWHEREsc.sno=:
OLD.sno
ENDdelete_proj
CREATETRIGGERupdate_proj//更新项目表时,实现数据一致性
AFTERUPDATEONstudentFOREACHROW
UPDATEsc
SETsc.sname=:
NEW.sname,
sc.sdept=:
NEW.sdept
WHEREsc.sno=sno
ENDupdate_student
CREATETRIGGERinsert_student//插入项目表时,实现数据一致性
AFTERINSERTONstudent_allFOREACHROW
INSERTINTOprojVALUES(:
NEW.sno,:
NEW.sname,:
NEW.sdept);
INSERTINTOmianmaoVALUES(:
NEW.sno,:
NEW.mianmao);
ENDinsert_proj
CREATETRIGGERinsert_//插入选课信息时,实现数据一致性
AFTERINSERTONxuankeFOREACHROW
INSERTINTOscVALUES(:
NEW.cno,:
NEW.greade);
ENDinsert_xuanke
5系统实现
5.1系统实现工具与支持平台
(1)用户界面:
本系统采用VisualBasic6.0设计,用户交互界面采用的是基于的窗口界面。
(2)硬件接口:
运行本系统的硬件基本要求如下:
CPU:
IntelP3及以上;
内存:
512MB及以上;
硬盘:
40GB及以上。
(3)软件接口:
VisualBasic6.0开发工具
数据库服务器:
Oracle10g。
5.2系统界面
下面为运行后的界面图:
图5.1系统登录界面
图5.2项目管理信息界面
图5.3工作记录管理界面
图5.4综合信息查询界面
5.3系统主要功能实现
5.3.1前台
分为超级管理员和普通用户两种,默认为普通用户,在进入了主界面后,可以在菜单栏中输入管理员密码和帐号,从而切换至管理员身份。
2项目档案管理:
项目号,姓名,性别,系别,政治面貌)进行查询,删除,修改操作。
项目号,姓名,系别,课程号,课程名,指导人)进行查询,删除,修改操作。
6选课信息管理:
项目号,课程名,任课教师)
进行查询,修改,添加,删除操作,其中修改,添加,删除操作必须是管理员身份,而查询操作任何人均可。
项目号,姓名,系别,课程号,课程名,成绩)进行统计,算平均成绩,最高成绩,不及格情
况,及格情况,排序操作。
项目号,姓名,系别,课程号,课程名,成绩)进行统计,按学号排序,最高成绩,最低成绩,
不及格情况,及格情况,单科情况统计操作。
可以对全体学生某科目的情况进行统计算平均进度,最高完成数,及格人数不及格情况以及人数,最低完成数,排序操作。
5.3.2后台
充分利用数据库的大容量、高效率等特点,为用户提供强大的功能支持,当用户进行插入,删除,修改操作时候,数据库触发器帮助完成功能,大大减少代码的编写量。
5.4系统核心代码
5.4.1主程序
CMyDlg:
:
CMyDlg(CWnd*pParent/*=NULL*/)
CDialog(CMyDlg:
IDD,pParent)
{
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
k=1;
j=1;
}
BOOLCMyDlg:
OnInitDialog()
CDialog:
OnInitDialog();
m_menu.LoadMenu(IDR_MENU2);
SetMenu(&
m_menu);
b=1;
CLogDlgdlg;
b=dlg.b;
dlg.DoModal();
if(b==0)
{
OnOK();
}
if(k==1)
{
m_bnMod.EnableWindow(false);
m_bnDel.EnableWindow(false);
m_bnStudent.EnableWindow(false);
}
m_imagelist.Create(16,16,TRUE,2,2);
m_imagelist.Add(AfxGetApp()->
LoadIcon(IDI_ICON2));
m_listCtrl.SetImageList(&
m_imagelist,LVSIL_SMALL);
m_font.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,
DEFAULT_CHARSET,
OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"
Arial"
);
m_listCtrl.SetFont(&
m_font);
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_listCtrl.SetBkColor(RGB(247,247,255));
m_listCtrl.SetTextColor(RGB(0,0,255));
m_listCtrl.SetTextBkColor(RGB(247,247,255));
Initlist();
DisplayData();
returnTRUE;
voidCMyDlg:
OnPaint()
{if(IsIconic())
{
CPaintDCdc(this);
//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&
rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
dc.DrawIcon(x,y,m_hIcon);
else
CPaintDCdc(this);
CRectrect;
GetClientRect(&
dc.FillSolidRect(rect,RGB(229,232,244));
//229,232,244
OnPaint();
HBRUSHCMyDlg:
OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
{HBRUSHhbr=CDialog:
OnCtlColor(pDC,pWnd,nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{pDC->
SetBkColor(RGB(229,232,244));
pDC->
SetTextColor(RGB(252,63,152));
OnLButtonDown(UINTnFlags,CPointpoint)
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CDialog:
OnLButtonDown(nFlags,point);
Initlist()
DWORDdwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_UNDERLINEHOT;
m_listCtrl.SetExtendedStyle(dwExStyle);
m_listCtrl.InsertColumn(0,"
学号"
LVCFMT_CENTER,70);
m_listCtrl.InsertColumn(1,"
姓名"
m_listCtrl.InsertColumn(2,"
性别"
LVCFMT_CENTER,80);
m_listCtrl.InsertColumn(3,"
系别"
LVCFMT_CENTER,60);
staticintb=1;
OnAboutme()
{CAboutDlgdlg;
dlg.DoModal();
HBRUSHCAboutDlg:
HBRUSHhbr=CDialog:
if(nCtlColor==CTLCOLOR_STATIC)
{pDC->
pDC->
returnhbr;
voidCAboutDlg:
{CPaintDCdc(this);
dc.FillSolidRect(rect,RGB(229,232,244));
OnButtonJiguan()
{CJiguanDlgdlg;
OnButtonDangan()
{CDanganDlgdlg;
DisplayData()
{if(!
m_db.IsOpen())
m_db.Open(_T("
MySQL;
UID=sa;
PWD=yushuai"
)))
{MessageBox("
Cannotaccessthedatabase!
"
"
新书登记"
return;
CStudentRecordset*m_pset=newCStudentRecordset(&
m_db);
CStringstrSQL;
strSQL.Format("
select*fromstudent"
TRY{
m_pset->
Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
CATCH(CDBException,ex)
{AfxMessageBox(ex->
m_strError);
AfxMessageBox(ex->
m_strStateNativeOrigin);
AND_CATCH(CException,e)
{TCHARszError[100];
e->
GetErrorMessage(szError,100);
AfxMessageBox(szError);
END_CATCH
if(m_pset->
GetRecordCount()==0)
{MessageBox("
没有任何学生信息!
学生登记"
m_db.Close();
m_listCtrl.DeleteAllItems();
m_pset->
MoveFirst();
charbuf[50];
CDBVariantvarValue;
inti=0;
CStringsno,sname,sdept,cno,cname,cteacher;
while(!
IsEOF())
{m_listCtrl.InsertItem(i,buf);
GetFieldValue((short)0,sno);
m_listCtrl.SetItemText(i,0,sno);
GetFieldValue(1,sname);
m_listCtrl.SetItemText(i,1,sname);
GetFieldValue(2,sdept);
m_listCtrl.SetItemText(i,2,sdept);
GetFieldValue(3,cno);
m