




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VB.Net程序设计实训指导书班 级:06级计算机网络技术指导教师:丁巨澜一、实训目的目的是通过本综合实训,使学生加强对系统功能设计、系统模块设计、数据库设计和系统详细设计等方面的了解和运用。二、实训内容1. 制作图书管理信息系统1) 首先设计数据库必须包含学生的基本信息(字段可根据需要自己设计)2) 程序运行必须有用户登录界面用户名和密码正确才能进入系统3) 图书管理模块包含图书基本信息添加、查询和修改功能2. 制作员工信息管理系统3. 制作学生成绩管理系统三、评分标准序号实训报告内容分值1用户登录介绍20分2信息添加功能介绍20分3信息查询功能介绍20分4信息修改功能介绍20分5实训总结2
2、0分四、成绩评定总成绩=实训报告*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) 生成成绩统计文件具有一定的容错和防止篡改的功能。(二)操作说明:b) 选择一个教师ID,输入教务处分配的密码,进行身份验证和登录(注:所有的教师ID所对应的密码均为:99001166)。c) 如密码正确则进入界面,在班级下拉列表框中选择您所教的班级,在课程下拉列表框中选择你所教的课程。之后会在表格中出现这个班的学生的相关信息。d) 点击相表格的字段表头,可以对表格的内容进行按相应字段进行排序,方便了查看与设置。e) 在查看控制的控件中有四个按钮:首项按钮,前一项按钮,下一项按钮,末项按钮。点击首项按钮可以查看第一项记录,点击前一项按钮可以查看当前选择记录的前一项记录(pre),点
4、击下一项按钮可以查看当前记录的下一项记录(next)。点击末项按钮可以查看表格中的最一项记录。操作小技巧:当要读取下一个记录时,按快捷键:Alt +D,当要读取前一个记录时,按快捷键Alt +A或者按键进行选择f) 在查看控件的下面是一些编辑控件:如姓名,学号,平时成绩,期中成绩,期末成绩,备注,学期成绩。其中姓名,学号,学期成绩是不可编辑的因为这些信息是教务处给定的,不可更改。而其中的平时成绩,期中成绩,期末成绩是可更改的。是给老师用于输入学生成绩的。g) 当要对学生成绩信息进行录入和修改的时候,直接在这四个编辑框中输入信息,便按回车键。h) 当到了学期结束的时候,可以选择平时成绩比例下拉列
5、表里的比例,和期中成绩比例列表框里的比例后,点击“统计学期成绩”对学期成绩进行成绩统计。i) 当统计完学期成绩,可以单击“打印按钮”。其打印结果与显示一致。(三)程序结构描述:此软件是用visual 2003 .net 平台,结合微软Access数据库开发的。用Access 新建一个数据库bolide.mdb,在数据库中新建三个基本表:Tec、T_C、Student。其结构如下:数据库 Bolide.mdb(Tec、T_C、Student)基本表Tec(Num、Tec_ID、Tec_Passwor、d)T_C(ClassID、Tec_ID、Course)Student(班级、课程、学号、姓名、
6、平时成绩、期中成绩、期末成绩、学期成绩、备注)(四)主要算法和源程序说明:教师登录: void CGradeDlg:OnBnClickedLogin()/ TODO: 在此添加控件通知处理程序代码UpdateData();CString sPath;CDaoRecordset RecSet(&db);/读取数据库的记录集CString strName; COleVariant var;CString teacher;long Tec_num;long i=List_Tec.GetCurSel();GetCurrentDirectory(MAX_PATH,sPath.GetBuffer(
7、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=99001166");/数据库密码/*RecSet.Open(AFX_DAO_USE
8、_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(
9、 i,teacher);InfoDlg modlg;modlg.ChildTeacher=teacher;EndDialog(FALSE);/关闭登登录对话框modlg.DoModal();/显示编辑对话框break;RecSet.MoveNext();/记录下移if(RecSet.IsEOF()/如果找到记录尾,也没有找到符合条件的记录,则弹出对话框,提示用户ID或密码不正确。AfxMessageBox("用户ID或密码不正确,无法登录.");/关闭记录集及库RecSet.Close();/关闭记录集db.Close();/关闭数据库Ø 点击列标对相关字段进行排
10、序: void InfoDlg:OnColumnclickList1(NMHDR *pNMHDR, LRESULT *pResult) if(Stu_ListCtrl.GetItemCount()<= 0)return;NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;CDaoFieldInfo m_fieldinfo;switch ( pNMListView -> iSubItem ) case 0:RecSet->GetFieldInfo(0, m_fieldinfo);LoadSortList( CString ( m_fi
11、eldinfo.m_strName ) );/得到第一个标头的字段名break;case 1:RecSet->GetFieldInfo(1, m_fieldinfo);LoadSortList( CString ( m_fieldinfo.m_strName ) ); /得到第二个标头的字段名break;case 2:RecSet->GetFieldInfo(2, m_fieldinfo);LoadSortList( CString ( m_fieldinfo.m_strName ) ); /得到第三个标头的字段名break;case 3:RecSet->GetFieldIn
12、fo(3, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第四个标头的字段名break;case 4:RecSet->GetFieldInfo(4, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第五个标头的字段名break;case 5:RecSet->GetFieldInfo(5, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) )
13、; /得到第六个标头的字段名break;case 6:RecSet->GetFieldInfo(6, m_fieldinfo);LoadSortList ( CString (m_fieldinfo.m_strName ) ); /得到第七个标头的字段名break;default:LoadSortList ( CString ( "" ) ); / default: no sort.break;/*pResult = 0;Ø 对CListCtrl控件中的内容进行打印:void InfoDlg:OnPrint() / TODO: 在此添加控件通知处理程序代码i
14、f(Stu_ListCtrl.GetItemCount()<= 0)/如果CListCtrl控件中的行为空则返加,什么都不做return;PRNINFO PrnInfo = 0;/设置打印信息PrnInfo.hListView = Stu_ListCtrl.m_hWnd;/设置打印视图句柄PrnInfo.hWnd = this->m_hWnd;/设置打印句柄PrnInfo.IsPrint = FALSE;/是否打印PrnInfo.nCurPage = 1;/当前页PrnInfo.nMaxLine = Stu_ListCtrl.GetItemCount();/最大行数CPrePare
15、nt DlgPreView;/定义一个CpreParent 对象DlgPreView.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.nCou
16、ntPage; /最大页码HWND hWnd = PrnInfo.hWnd;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;/设置打印的
17、标题,即打印的第一页的最上面的标题CRect rc, rt1, rt2, rt3, rt4, rt5, rt6,rt7;/为打印的七列设置矩形区域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,DR
18、AFT_QUALITY,VARIABLE_PITCH|FF_SWISS,_T("黑体");/细节字体DetailFont.CreateFont(-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,
19、 0);int xP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSX); /x方向每英寸像素点数int yP = GetDeviceCaps(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; /从第几行开始读取DOUBL
20、E nBottom = nTop B5_ONELINE*fAdd;if(nCurPage != 1)nTop = 25*yPix-fAdd; /非第一页最上线if(nCurPage = 2)iStart = B5_ONELINE;if(nCurPage>2)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 DOCI
21、NFO di = sizeof (DOCINFO), szTitle ;/设置文档的信息/开始文档打印if(memDC.StartDoc(&di)<0):MessageBox(hWnd, "连接到打印机化败!", "错误", MB_ICONSTOP);elseiStart = 0;nTop = 25*yPix; /第一页最上线for(int iTotalPages = 1; iTotalPages<=nMaxPage; iTotalPages )int nCurPage = iTotalPages;csRFinality.Format
22、("第 %i 页/共 %i 页", nCurPage, nMaxPage);time=CTime:GetCurrentTime();csLFinality = time.Format("报表日期:%Y-%m-%d");if(nCurPage != 1)nTop = 25*yPix-fAdd; /非第一页最上线if(nCurPage = 2)iStart = B5_ONELINE;if(nCurPage>2)iStart = B5_ONELINE (nCurPage - 2)*B5_OTHERLINE;/开始页if(memDC.StartPage()
23、 < 0):MessageBox(hWnd, _T("打印失败!"), "错误", MB_ICONSTOP);memDC.AbortDoc();return;else/打印/标题oldfont = memDC.SelectObject(&TitleFont);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_CENTE
24、R | DT_VCENTER | DT_SINGLELINE);memDC.SelectObject(&DetailFont);rc.SetRect(15*xPix, yPix*19, B5_W*xPix, yPix*22);memDC.DrawText("课程名称:" str_course " 教师姓名:" str_teacher " " csLFinality, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);/细节memDC.SelectObject(&Detai
25、lFont);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.right 21*xPix, rt1.bottom); /姓名rt3.SetRect(rt2.right, rt1.top, rt2.right 21*xPix, rt1.bottom);
26、 /平时成绩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); /学期成绩rt7.SetRect(rt6.right, rt1.top, rc.right, rt1.bottom); /学分memDC.DrawText("学 号"
27、;, &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("期中成绩", &rt4, DT_CENTER | DT_VCE
28、NTER | 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);打印字段备注
29、memDC.MoveTo(rt1.right, 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.botto
30、m); /画线memDC.MoveTo(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
31、, score_final32=0, score_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
32、.right 21*xPix, rt1.bottom); /平时成绩rt4.SetRect(rt3.right nTextAdd, rt1.top, rt3.right 21*xPix, rt1.bottom); /期中成绩rt5.SetRect(rt4.right nTextAdd, rt1.top, rt4.right 21*xPix, rt1.bottom); /期末成绩rt6.SetRect(rt5.right nTextAdd, rt1.top, rt5.right 21*xPix, rt1.bottom);/学期成绩rt7.SetRect(rt6.right nTextAdd, r
33、t1.top, rc.right, rt1.bottom); /学分int nCountItem = ListView_GetItemCount(hList);/得到要印的行数for(int i=0;i<nItem; i )/nItem为各页的行数ListView_GetItemText(hList, i iStart, 0, szID, 32);/ 得到学号字段的值ListView_GetItemText(hList, i iStart, 1, szName, 32); /得到姓名字段的值ListView_GetItemText(hList, i iStart, 2, score_no
34、rmal, 32); /得到平时成绩字段的值ListView_GetItemText(hList, i iStart, 3, score_middle, 32);/ 得到期中成绩字段的值ListView_GetItemText(hList, i iStart, 4, score_final, 32);/ 得到期末成绩字段的值ListView_GetItemText(hList, i iStart, 5, score_term, 32); /得到学期成绩字段的值ListView_GetItemText(hList, i iStart, 6, score_credit, 32); /得到备注字段的
35、值memDC.DrawText(szID, &rt1, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印学号字段的值memDC.DrawText(szName, &rt2, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印姓名字段的值memDC.DrawText(score_normal, &rt3, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印平时成绩字段的值memDC.DrawText(score_middle, &rt4, DT_LEFT | D
36、T_VCENTER | DT_SINGLELINE); /打印期中成绩字段的值memDC.DrawText(score_final, &rt5, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印期末成绩字段的值memDC.DrawText(score_term, &rt6, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印学期成绩字段的值memDC.DrawText(score_credit, &rt7, DT_LEFT | DT_VCENTER | DT_SINGLELINE); /打印备注字段的
37、值/下横线memDC.MoveTo(rc.left, rc.bottom);/画线memDC.LineTo(rc.right, rc.bottom); /画线memDC.MoveTo(rt1.right, 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.bo
38、ttom); /画线memDC.MoveTo(rt4.right, rt1.top); /画线memDC.LineTo(rt4.right, rt1.bottom); /画线memDC.MoveTo(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
39、, rt1.bottom); /画线rc.top = fAdd;/重新设置矩形区域rc.bottom = fAdd; /重新设置矩形区域rt1.top = rc.top; /重新设置矩形区域rt1.bottom = rc.bottom; /重新设置矩形区域rt2.top = rt1.top; /重新设置矩形区域rt2.bottom = rt1.bottom; /重新设置矩形区域rt3.top = rt1.top; /重新设置矩形区域rt3.bottom = rt1.bottom; /重新设置矩形区域rt4.top = rt1.top; /重新设置矩形区域rt4.bottom = rt1.bot
40、tom; /重新设置矩形区域rt5.top = rt1.top; /重新设置矩形区域rt5.bottom = rt1.bottom; /重新设置矩形区域rt6.top = rt1.top; /重新设置矩形区域rt6.bottom = rt1.bottom; /重新设置矩形区域rt7.top = rt1.top; /重新设置矩形区域rt7.bottom = rt1.bottom; /重新设置矩形区域if(i iStart 1)>=nCountItem)break;/结尾memDC.MoveTo(rc.left, nTop);memDC.LineTo(rc.left, rc.top);mem
41、DC.MoveTo(rc.right, nTop);memDC.LineTo(rc.right, rc.top);memDC.DrawText(csLFinality, &rc, DT_LEFT| DT_VCENTER | DT_SINGLELINE);memDC.DrawText(csRFinality, &rc, DT_RIGHT| DT_VCENTER | DT_SINGLELINE);if(nCurPage =nMaxPage)/如果是最后一页则打印关于成绩统计的信息CString temp_people;temp_people.Format("%d"
42、;,m_people);/人数CString temp_avg;temp_avg.Format("%.2f",m_term0);/平均成绩CString temp_max;temp_max.Format("%.2f",m_term1);/最高成绩CString temp_min;temp_min.Format("%.2f",m_term2);/最低成绩CString nine_ten;nine_ten.Format("%d",count0);/分到的人数CString eight_nine;eight_nine.F
43、ormat("%d",count1);/分到的人数CString seven_eight;seven_eight.Format("%d",count2);/分到分的人数CString six_seven;six_seven.Format("%d",count3);/60分到分的人数CString under_six;under_six.Format("%d",count4);/不及格的人数rc.top = fAdd;rc.bottom = fAdd;memDC.DrawText("人数:" temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车零部件行业市场分析与对策
- 大象洗澡儿童画课件
- 中科大资源经济学课件第9章 自然资源开发的环境问题
- 邢台市环境监测与预警系统的建设
- 网络系统架构设计与实施
- 探矿权采矿权转让管理办法
- 提升区域绩效管理办法
- 揭阳酒店会员管理办法
- 收费运营公路管理办法
- 放射设备安全管理办法
- 湖北省职称评审专业目录表(工程系列)
- GB 27954-2020 黏膜消毒剂通用要求
- 中考《红星照耀中国》各篇章练习题及答案(1-12)
- (完整版)ECRS培训课件
- 外轮理货工作英语
- 华中师范大学辅导员队伍建设实施办法
- kr法脱硫工艺介绍
- 新生儿沐浴室医院感染管理制度
- 学会拼读单词音标
- 现金流量表(自动生成)模板免费下载
- 初中记叙文阅读训练十五篇含答案
评论
0/150
提交评论