基于VC++的数据库开发案例Word格式.docx
- 文档编号:19667105
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:18
- 大小:248.85KB
基于VC++的数据库开发案例Word格式.docx
《基于VC++的数据库开发案例Word格式.docx》由会员分享,可在线阅读,更多相关《基于VC++的数据库开发案例Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
M
学号
性别
姓名
年龄
课程号
课程名称
分数
学生
课程
成绩
(2)逻辑结构设计
详细描述将E-R图转换成关系模型的过程以及对关系模式的规范化,至少达到3NF)(3)(3)物理结构设计
以表格形式详细描述系统需要的基本表及属性、视图和索引,对基本表的主键、候选键、外键及被参照表进行说明,对基本表中数据的约束条件进行说明。
用户密码表(Userinfo)
课程表(C)
学生表(S)
选课表(SC)
在根据以上实体的关系,形成表与表之间的逻辑关系
3.系统功能设计
(阐述系统的每个功能。
系统应具有身份验证、对数据库数据的增加、删除、修改、查询、浏览、输出等基本功能。
)
4.系统实现
(1)系统的开发环境(软、硬件配置情况)
本系统在装有SQLserver2000数据库管理系统及VC++6.0开发工具的计算机上完成。
(2)数据库创建过程(简要一些)及其连接(说明数据库连接方法写出关键代码或步骤)
1》、创建数据库
2》、在Student数据库中设计用户密码表(Userinfo)、课程表(C)、学生表(S)、选课表(SC)。
3》、打开上述数据库中各表的所有行逐一添加数据。
(3)创建工程文件及窗体,添加所需的控件,为相应控件的事件编写代码,以实现目标功能。
(在此包括:
关键代码、运行后的界面)
1.配置数据源
利用系统自带的ODBC数据库管理器来建立一个名为student的用户DSN。
配置SQLserverODBC数据源;
首先要保证SQLServer服务开启,打开我的电脑->
控制面板->
管理工具->
ODBC数据源->
系统DSN,然后单击添加按钮,在弹出对话框中寻找SQLServer,进入“创建到SQLserver新数据源”对话框:
输入信息如下:
名称:
student;
服务器:
(local)
单击下一步;
选择“使用用户登录ID和密码的SQLserver验证”同时将“连接SQLserver以获取其他默认配置选项的默认配置”选中,输入本机SQL的用户名(sa)和密码(123)。
选中“更改默认数据库为”,并选择Student;
并选中“使用ANSI引用的标识符”和“使用ANSI的空值、填充及警告
单击完成;
单击测试数据源,如果成功,弹出图所示对话框,说明SQLServer数据源配置成功选择这个条目,单击完成。
2.建立工程
使用VisualC++的应用程序向导建立起应用程序的框架,本系统采用单文档作为主窗口,建立工程的过程步骤如下:
(1)启动MicrosoftVisualC++新建一个“MFCAPPWizerd(exe)”工程,输入工程名,我们在这里使用“student”,选择工程所在的文件夹。
然后单击OK。
(2)在“MFCAPPWizerd-step1”对话框中选择“SingleDocument”,单击“Next”按钮。
(3)单击“Finish”按钮,结束项目的创建,至此,基于单文档的应用程序就创建成功。
3.登陆窗口的创建
启动时需要先进入登录窗口,所以先建立一个登陆窗口和一个名为CloginDlg的类,操作步骤如下:
(1)先建立名为“Dialog”的对话框资源。
(2)在对话框资源添加控件,填完后的登陆框口如下:
(3)创建为该对话框负责事件响应的名为“CloginDlg”类,并未各控件关联变量。
(4)添加数据库对象m_database和记录集对象m_recordset。
(5)由于当向导创建应用程序时,系统默认是启动调用主窗口,而我们需要系统启动后先创建登录窗口,登陆系统后在进入主界面,在CtudentApp这个类中InitInstance()方法中做修改:
CLoginDlglogin;
//在启动主窗口之前先创建一个登录窗口对象
if(login.DoModal()==IDOK)
{
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,RUNTIME_CLASS(CStudentDoc),
RUNTIME_CLASS(CMainFrame),//mainSDIframewindow
RUNTIME_CLASS(CStudentView));
AddDocTemplate(pDocTemplate);
CCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
if(!
ProcessShellCommand(cmdInfo))
returnFALSE;
CMenu*pMenu=m_pMainWnd->
GetActiveWindow()->
GetMenu();
returnTRUE;
}
Else
{
returnfalse;
(6)为“确定”和“取消”按钮添加事件,在确定上双击,添加CloginDlg:
:
OnOK()方法。
在取消上双击,添加CloginDlg:
OnCancel()代码如下:
voidCLoginDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
CStringusername,password;
m_strUserName.GetWindowText(username);
m_strPassword.GetWindowText(password);
if(!
m_database.IsOpen())
if(m_database.Open(_T("
DB"
)))
{
m_recordSet.m_pDatabase=&
m_database;
CStringstrSQL;
strSQL.Format("
select*fromUserinfowhereUsername='
%s'
andUserpwd='
"
username,password);
m_recordSet.Open(CRecordset:
forwardOnly,strSQL);
if(m_recordSet.GetRecordCount()==0)
{
MessageBox("
usernameorpassworderror!
"
error!
MB_OK|MB_ICONWARNING);
m_strPassword.SetWindowText("
"
);
m_strPassword.SetFocus();
}
else
CDialog:
OnOK();
}
m_recordSet.Close();
m_database.Close();
}
else
MessageBox("
can'
topenthedatabase!
//CDialog:
OnOK();
OnCancel()
Addextracleanuphere
if(MessageBox("
areyousuretoexit?
MB_OK|MB_ICONQUESTION)==IDOK)
CDialog:
OnCancel();
4.系统主窗口
建立好登录窗口,下面设计主窗口中的菜单项,并未每个菜单添加事件。
(1)在资源视图下,打开菜单,设计结果:
(2)为各菜单项添加控件,并设置属性。
(3)在添加完控件后,分别为各个控件添加事件:
(4)添加代码处理事件
voidCMainFrame:
OnStudent()
Addyourcommandhandlercodehere
CStudentDlgStudent;
if(Student.DoModal()==IDOK)
(5)删除系统生成的工具栏
intCMainFrame:
OnCreate(LPCREATESTRUCTlpCreateStruct)
if(CFrameWnd:
OnCreate(lpCreateStruct)==-1)
return-1;
return0;
5.学生管理窗口
新建一个学生管理窗口,一个名为CStudentDlg的类和一个从CRecordset继承过来的数据库记录集CStudent。
(1)添加窗口资源。
在学生管理窗口上控件,添加事件后的学生管理窗口如图:
(2)添加数据库记录集操作类CStudentSet.这里需要创建一个名为CstudentSet的类,该类从Crecordset中继承。
这样就利用VisualC++的向导新建了与S表表项关联的记录集。
(3)定义全局CStudentSet的类对象。
需要添加一个全局的Cstudentset类的对象来控制整个窗口的数据库操作。
(4)添加RefreshList()和ResetButton()方法。
代码如下:
voidCStudentDlg:
RefreshList()
m_list.DeleteAllItems();
m_studentSet.Open();
m_studentSet.m_strFilter="
;
m_studentSet.Requery();
for(inti=0;
i<
m_studentSet.GetRecordCount();
i++)
CStringtemp;
m_studentSet.GetFieldValue("
Sno"
temp);
m_list.InsertItem(i,temp);
chara[10],s[3];
itoa(m_studentSet.m_Sno,a,10);
m_list.SetItemText(i,0,a);
m_list.SetItemText(i,1,m_studentSet.m_Sname);
m_list.SetItemText(i,2,m_studentSet.m_Ssex);
itoa(m_studentSet.m_Sage,s,10);
m_list.SetItemText(i,3,s);
m_studentSet.MoveNext();
m_studentSet.Close();
//添加一个使按钮恢复到初始状态的方法ResetButton();
ResetButton()
m_strNo.EnableWindow(false);
m_strName.EnableWindow(false);
m_strAge.EnableWindow(false);
femaleRadio->
EnableWindow(false);
maleRadio->
m_btnConfirm.EnableWindow(false);
m_btnAdd.EnableWindow(true);
m_btnDel.EnableWindow(true);
m_btnEdit.EnableWindow(true);
//添加初始化对话框OnInitDialog()方法。
BOOLCStudentDlg:
OnInitDialog()
OnInitDialog();
m_list.InsertColumn(0,"
学号"
m_list.InsertColumn(1,"
姓名"
m_list.InsertColumn(2,"
性别"
m_list.InsertColumn(3,"
年龄"
RECTrectList;
m_list.GetWindowRect(&
rectList);
intwid=rectList.right-rectList.left;
4;
m_list.SetColumnWidth(i,wid/4);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RefreshList();
for(intj=1;
j<
100;
j++)
CStrings;
s.Format("
%d"
j);
m_strAge.AddString(s);
femaleRadio=(CButton*)this->
GetDlgItem(IDC_RADIO_FEMALE);
maleRadio=(CButton*)this->
GetDlgItem(IDC_RADIO_MALE);
ResetButton();
returntrue;
//6)为CListCtrl控件添加事件。
OnClickStudentList(NMHDR*pNMHDR,LRESULT*pResult)
Addyourcontrolnotificationhandlercodehere
introw=m_list.GetSelectionMark();
CStrings;
s=m_list.GetItemText(row,0);
m_strNo.SetWindowText(s);
s=m_list.GetItemText(row,1);
m_strName.SetWindowText(s);
s=m_list.GetItemText(row,2);
if(s=="
女"
femaleRadio->
SetCheck(true);
maleRadio->
SetCheck(false);
s=m_list.GetItemText(row,3);
inti=m_strAge.FindString(0,s);
m_strAge.SelectString(i,s);
*pResult=0;
//7)添加按钮事件。
这几个按钮分别对应的事件方法为OnStudentAdd(),OnStudentEdit(),
//OnStudentDel(),OnOK()和OnCancel().代码如下:
OnStudentAdd()
m_strNo.EnableWindow(true);
m_strNo.SetWindowText("
m_strName.EnableWindow(true);
m_strName.SetWindowText("
m_strAge.EnableWindow(true);
m_strAge.SelectString(0,"
20"
EnableWindow(true);
m_studentSet.AddNew();
m_btnConfirm.EnableWindow(true);
m_btnAdd.EnableWindow(false);
m_btnEdit.EnableWindow(false);
m_btnDel.EnableWindow(false);
OnStudentDel()
CStrings,strSQL;
请选择一行!
if(MessageBox("
确定要删除记录吗?
"
删除询问"
MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
{
strSQL.Format("
sno=%s"
s);
m_studentSet.Open();
m_studentSet.m_strFilter=strSQL;
m_studentSet.Requery();
m_studentSet.Delete();
m_studentSet.Close();
RefreshList();
}
OnStudentEdit()
strSQL.Format("
m_studentSet.Open();
m_studentSet.m_strFilter==strSQL;
m_studentSet.Edit();
m_btnConfirm.EnableWindow(true);
m_btnAdd.EnableWindow(false);
m_btnEdit.EnableWindow(false);
m_btnDel.EnableWindow(false);
m_strName.EnableWindow(true);
m_strNo.EnableWindow(true);
m_strAge.EnableWindow(true);
OnOk()
CStringname,strSex;
intage,no;
CStringa,n;
m_strNo.GetWindowText(n);
no=atoi(n);
m_strName.GetWindowText(name);
intsex=this->
GetCheckedRadioButton(IDC_RADIO_MALE,IDC_RADIO_FEMALE);
if(sex==IDC_RADIO_FEMALE)
strSex="
男"
m_strAge.GetWindowText(a);
age=atoi(a);
if(name=="
请输入学号姓名"
m_studentSet.m_Sno=no;
m_studentSet.m_Sname=name;
m_studentSet.m_Ssex=strSex;
m_studentSet.m_Sage=age;
m_studentSet.Update();
m_studentSet.Close();
RefreshList();
ResetButton();
点击“系统界面”的“信息管理”的下拉菜单“学生管理”,则弹出一下界面:
在点击添加添加按钮时右边窗口可进行编写:
点击确定后在左边列表处可点击显示:
同时数据库S表中也会新增一条记录:
点击删除时弹出问询框:
是否确认删除,确认后则删除记录。
点击修改按钮则可对已有记录在右边编辑框进行修改。
数据库中的S表都会有相应更改。
五、实验总结
通过本次课程设计我确实收获不少,从一开始按照课本按部就班的做、敲代码,不了解其本质,结果出了一堆的错误,请教了不少同学和老师,都没有解决根本问题,我终于下定决心把它的每个过程和前因后果全部掌握。
终于可以自己找到错误原因,自己可以调试。
在进入本科这一学期的学习生活中,我压力特别大,每门课的课
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VC 数据库 开发 案例
![提示](https://static.bdocx.com/images/bang_tan.gif)