1、VBNet程序设计概要VB.Net程序设计实训指导书 班 级:06级计算机网络技术 指导教师:丁巨澜一、实训目的目的是通过本综合实训,使学生加强对系统功能设计、系统模块设计、数据库设计和系统详细设计等方面的了解和运用。二、实训内容1. 制作图书管理信息系统1) 首先设计数据库必须包含学生的基本信息(字段可根据需要自己设计)2) 程序运行必须有用户登录界面用户名和密码正确才能进入系统3) 图书管理模块包含图书基本信息添加、查询和修改功能2. 制作员工信息管理系统3. 制作学生成绩管理系统三、评分标准序号实训报告内容分值1用户登录介绍20分2信息添加功能介绍20分3信息查询功能介绍20分4信息修改
2、功能介绍20分5实训总结20分四、成绩评定总成绩=实训报告*50%+上机测试*50%五、时间安排计划时间内容12-29选题、需求分析12-30设计数据库、界面、流程图1-5程序代码编写1-6调试1-7总结报告六、案例设计(学生成绩管理)描述(一)程序功能:1基本功能:1) 根据教务处分配的教师ID和密码进行身份验证登录。2) 根据课程参数文件、学生名册文件输入成绩。3) 设定平时成绩、期中成绩、期末成绩等比例分配,计算出学期成绩。4) 生成成绩统计文件,其中包括各分数段的人数统计。5) 显示成绩统计文件内容。2扩展功能:1) 打印成绩统计文件内容。2) 能根据根据设定的分数段,计算等级,学分绩
3、点。3) 能根据选定字段进行排序。4) 生成成绩统计文件具有一定的容错和防止篡改的功能。(二)操作说明:a) 将Grade.exe可执行程序和Access数据库bolide.mdb放在同一工作路径下.b) 选择一个教师ID,输入教务处分配的密码,进行身份验证和登录(注:所有的教师ID所对应的密码均为:99001166)。c) 如密码正确则进入界面,在班级下拉列表框中选择您所教的班级,在课程下拉列表框中选择你所教的课程。之后会在表格中出现这个班的学生的相关信息。d) 点击相表格的字段表头,可以对表格的内容进行按相应字段进行排序,方便了查看与设置。e) 在查看控制的控件中有四个按钮:首项按钮,前一
4、项按钮,下一项按钮,末项按钮。点击首项按钮可以查看第一项记录,点击前一项按钮可以查看当前选择记录的前一项记录(pre),点击下一项按钮可以查看当前记录的下一项记录(next)。点击末项按钮可以查看表格中的最一项记录。操作小技巧:当要读取下一个记录时,按快捷键:Alt +D,当要读取前一个记录时,按快捷键Alt +A或者按键进行选择f) 在查看控件的下面是一些编辑控件:如姓名,学号,平时成绩,期中成绩,期末成绩,备注,学期成绩。其中姓名,学号,学期成绩是不可编辑的因为这些信息是教务处给定的,不可更改。而其中的平时成绩,期中成绩,期末成绩是可更改的。是给老师用于输入学生成绩的。g) 当要对学生成绩
5、信息进行录入和修改的时候,直接在这四个编辑框中输入信息,便按回车键。h) 当到了学期结束的时候,可以选择平时成绩比例下拉列表里的比例,和期中成绩比例列表框里的比例后,点击“统计学期成绩”对学期成绩进行成绩统计。i) 当统计完学期成绩,可以单击“打印按钮”。其打印结果与显示一致。(三)程序结构描述:此软件是用visual 2003 .net 平台,结合微软Access数据库开发的。用Access 新建一个数据库bolide.mdb,在数据库中新建三个基本表:Tec、T_C、Student。其结构如下:数据库 Bolide.mdb(Tec、T_C、Student)基本表Tec(Num、Tec_ID
6、、Tec_Passwor、d)T_C(ClassID、Tec_ID、Course)Student(班级、课程、学号、姓名、平时成绩、期中成绩、期末成绩、学期成绩、备注)(四)主要算法和源程序说明:教师登录: void CGradeDlg:OnBnClickedLogin()/ TODO: 在此添加控件通知处理程序代码UpdateData();CString sPath;CDaoRecordset RecSet(&db);/读取数据库的记录集CString strName; COleVariant var;CString teacher;long Tec_num;long i=List_Tec.
7、GetCurSel();GetCurrentDirectory(MAX_PATH,sPath.GetBuffer(MAX_PATH);/得到当前路径sPath.ReleaseBuffer ();CString lpszFile = sPath bolide.mdb;/得到文件的精确路径CFileFind fFind;BOOL bSuccess;bSuccess=fFind.FindFile(lpszFile);/判断是否找到数据库的文件fFind.Close ();if(bSuccess)/db.Open(lpszFile);/*db.Open(lpszFile,0,0,;PWD=990011
8、66);/数据库密码/*RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,SELECT * FROM Tec,NULL);/打开记录集while(!RecSet.IsEOF() / 有没有到表结尾RecSet.GetFieldValue(Tec_Password,var);strName = (LPCSTR)var.pbstrVal;RecSet.GetFieldValue(num,var);Tec_num= (long)var.plVal;if(strName=Tec_Password & i=Tec_num)List_Tec.GetLBText( i,teacher
9、);InfoDlg modlg;modlg.ChildTeacher=teacher;EndDialog(FALSE);/关闭登登录对话框modlg.DoModal();/显示编辑对话框break;RecSet.MoveNext();/记录下移if(RecSet.IsEOF()/如果找到记录尾,也没有找到符合条件的记录,则弹出对话框,提示用户ID或密码不正确。AfxMessageBox(用户ID或密码不正确,无法登录.);/关闭记录集及库RecSet.Close();/关闭记录集db.Close();/关闭数据库 点击列标对相关字段进行排序: void InfoDlg:OnColumnclic
10、kList1(NMHDR *pNMHDR, LRESULT *pResult) if(Stu_ListCtrl.GetItemCount() iSubItem ) case 0:RecSet-GetFieldInfo(0, m_fieldinfo);LoadSortList( CString ( m_fieldinfo.m_strName ) );/得到第一个标头的字段名break;case 1:RecSet-GetFieldInfo(1, m_fieldinfo);LoadSortList( CString ( m_fieldinfo.m_strName ) ); /得到第二个标头的字段名b
11、reak;case 2:RecSet-GetFieldInfo(2, m_fieldinfo);LoadSortList( CString ( m_fieldinfo.m_strName ) ); /得到第三个标头的字段名break;case 3:RecSet-GetFieldInfo(3, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第四个标头的字段名break;case 4:RecSet-GetFieldInfo(4, m_fieldinfo);LoadSortList ( CString (m_fi
12、eldinfo.m_strName ) ); /得到第五个标头的字段名break;case 5:RecSet-GetFieldInfo(5, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第六个标头的字段名break;case 6:RecSet-GetFieldInfo(6, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第七个标头的字段名break;default:LoadSortList ( CString ( )
13、); / default: no sort.break;/*pResult = 0; 对CListCtrl控件中的内容进行打印:void InfoDlg:OnPrint() / TODO: 在此添加控件通知处理程序代码if(Stu_ListCtrl.GetItemCount()m_hWnd;/设置打印句柄PrnInfo.IsPrint = FALSE;/是否打印PrnInfo.nCurPage = 1;/当前页PrnInfo.nMaxLine = Stu_ListCtrl.GetItemCount();/最大行数CPreParent DlgPreView;/定义一个CpreParent 对象D
14、lgPreView.SetCallBackFun(DrawInfo, PrnInfo);/设置打印视图的信息DlgPreView.DoModal();/执行打印对话框void InfoDlg:DrawInfo(CDC &memDC, PRNINFO PrnInfo)if(memDC.m_hDC = NULL)return;int nCurPage = PrnInfo.nCurPage; /当前页BOOL IsPrint = PrnInfo.IsPrint; /是否打印int nMaxPage = PrnInfo.nCountPage; /最大页码HWND hWnd = PrnInfo.hWnd
15、;HWND hList = PrnInfo.hListView;CString csLFinality, csRFinality;CTime time;time=CTime:GetCurrentTime();/获得当前的日期csLFinality = time.Format(报表日期:%Y-%m-%d);csRFinality.Format(第 %i 页/共 %i 页, nCurPage, nMaxPage);CString szTitle=str_class;/设置打印的标题,即打印的第一页的最上面的标题CRect rc, rt1, rt2, rt3, rt4, rt5, rt6,rt7;/
16、为打印的七列设置矩形区域CPen *hPenOld;/定义画笔CPen cPen; /定义画笔CFont TitleFont, DetailFont, *oldfont;/定义字体/标题字体TitleFont.CreateFont(-MulDiv(14,memDC.GetDeviceCaps(LOGPIXELSY),72),0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,VARIABLE_PITCH|FF_SWISS,_T(黑体);/细节字体DetailFont.Cr
17、eateFont(-MulDiv(10,memDC.GetDeviceCaps(LOGPIXELSY),72),0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,VARIABLE_PITCH|FF_SWISS,_T(宋体);/粗笔cPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0);int xP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSX); /x方向每英寸像素点数int yP = GetDeviceCap
18、s(memDC.m_hDC, LOGPIXELSY); /y方向每英寸像素点数DOUBLE xPix = (DOUBLE)xP*10/254; /每 mm 宽度的像素DOUBLE yPix = (DOUBLE)yP*10/254; /每 mm 高度的像素DOUBLE fAdd = 7*yPix; /每格递增量DOUBLE nTop = 25*yPix; /第一页最上线int iStart = 0; /从第几行开始读取DOUBLE nBottom = nTop B5_ONELINE*fAdd;if(nCurPage != 1)nTop = 25*yPix-fAdd; /非第一页最上线if(nCu
19、rPage = 2)iStart = B5_ONELINE;if(nCurPage2)iStart = B5_ONELINE (nCurPage - 2)*B5_OTHERLINE;DOUBLE nLeft = 15*xPix; /最左线DOUBLE nRight = xPix*(B5_W-15); /最右线DOUBLE nTextAdd = 1.5*xPix;if(IsPrint)/真正打印部分static DOCINFO di = sizeof (DOCINFO), szTitle ;/设置文档的信息/开始文档打印if(memDC.StartDoc(&di)0):MessageBox(hW
20、nd, 连接到打印机化败!, 错误, MB_ICONSTOP);elseiStart = 0;nTop = 25*yPix; /第一页最上线for(int iTotalPages = 1; iTotalPages2)iStart = B5_ONELINE (nCurPage - 2)*B5_OTHERLINE;/开始页if(memDC.StartPage() 0):MessageBox(hWnd, _T(打印失败!), 错误, MB_ICONSTOP);memDC.AbortDoc();return;else/打印/标题oldfont = memDC.SelectObject(&TitleFo
21、nt);int nItem = B5_OTHERLINE;if(nCurPage = 1)nItem = B5_ONELINE;rc.SetRect(0, yPix*8, B5_W*xPix, yPix*17);memDC.DrawText(szTitle, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);memDC.SelectObject(&DetailFont);rc.SetRect(15*xPix, yPix*19, B5_W*xPix, yPix*22);memDC.DrawText(课程名称: str_course 教师姓名: str_te
22、acher csLFinality, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);/细节memDC.SelectObject(&DetailFont);rc.SetRect(nLeft, nTop, nRight, nTop fAdd);/上横线memDC.MoveTo(rc.left, rc.top);memDC.LineTo(rc.right, rc.top);rt1.SetRect(nLeft, nTop, nLeft 25*xPix, nTop fAdd); /学号rt2.SetRect(rt1.right, rt1.top, rt1.ri
23、ght 21*xPix, rt1.bottom); /姓名rt3.SetRect(rt2.right, rt1.top, rt2.right 21*xPix, rt1.bottom); /平时成绩rt4.SetRect(rt3.right, rt1.top, rt3.right 21*xPix, rt1.bottom); /期中成绩rt5.SetRect(rt4.right, rt1.top, rt4.right 21*xPix, rt1.bottom); /期末成绩rt6.SetRect(rt5.right, rt1.top, rt5.right 21*xPix, rt1.bottom);
24、/学期成绩rt7.SetRect(rt6.right, rt1.top, rc.right, rt1.bottom); /学分memDC.DrawText(学 号, &rt1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);/打印字段学号memDC.DrawText(姓 名, &rt2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段姓名memDC.DrawText(平时成绩, &rt3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段平时成绩memDC.DrawText(期中
25、成绩, &rt4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段期中成绩memDC.DrawText(期末成绩, &rt5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段期末成绩memDC.DrawText(学期成绩, &rt6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段学期成绩memDC.DrawText(备 注, &rt7, DT_CENTER | DT_VCENTER | DT_SINGLELINE);打印字段备注memDC.MoveTo(rt1.rig
26、ht, rt1.top);/画线memDC.LineTo(rt1.right, rt1.bottom); /画线memDC.MoveTo(rt2.right, rt1.top); /画线memDC.LineTo(rt2.right, rt1.bottom); /画线memDC.MoveTo(rt3.right, rt1.top); /画线memDC.LineTo(rt3.right, rt1.bottom); /画线memDC.MoveTo(rt4.right, rt1.top); /画线memDC.LineTo(rt4.right, rt1.bottom); /画线memDC.MoveTo(
27、rt5.right, rt1.top); /画线memDC.LineTo(rt5.right, rt1.bottom); /画线memDC.MoveTo(rt6.right, rt1.top); /画线memDC.LineTo(rt6.right, rt1.bottom); /画线memDC.MoveTo(rc.left, rt1.bottom); /画线memDC.LineTo(rc.right, rt1.bottom); /画线TCHAR szID32=0, szName32=0, score_normal32=0, score_middle32=0, score_final32=0, s
28、core_term32=0,score_credit32=0;/为要打印的各字段设置变量rc.SetRect(nLeft, nTop fAdd, nRight, nTop 2*fAdd);rt1.SetRect(nLeft nTextAdd, rc.top, nLeft 25*xPix, rc.bottom); /学号rt2.SetRect(rt1.right nTextAdd, rt1.top, rt1.right 21*xPix, rt1.bottom); /姓名rt3.SetRect(rt2.right nTextAdd, rt1.top, rt2.right 21*xPix, rt1.bottom); /平时成绩rt4.SetRect(rt3.right nTextAdd, rt1.top, rt3.right
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1