1、学生信息管理系统实验报告学生信息管理系统实验报告班 级:10网工三班 学生姓名:谢昊天 学号:*实验目的和要求:实验目的:1、加深理解Windows程序设计的基本概念;2、基于单文档的应用程序的创建;3、学会对话框及相关控件的创建;4、熟悉基本的Windows消息映射机制和消息相应过程。实验内容:1.创建一个基于对话框的应用程序,用于处理学生成绩,并能够处理相关数据。2.进一步完善实验二中的系统;3.在学生信息管理系统中添加一个信息查询对话框,并做好相应的界面设计;4.根据功能要求完成相应的界面设计;实验内容与分析设计:1.使用单文档或基于对话框应用程序框架;2.设计信息查询对话框,增加信息检
2、索功能;3.信息存储可以借助于数据库,也可以借助于文件,检索记录可以直接在记录文件中进行;4.通过界面的设计,增加成绩处理的功能;实验步骤与调试过程:1打开Visual c+ 6.0编程环境;2点击文件-新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“学生信息管理系统”的一个空工程;3继续点击文件-新建、选择建立新的文件;选择C+ Source File选项建立在“学生信息管理系统”工程下的名为“学生信息管理系统”的文件;(或者使用试验一中的文件);整个系统的功能在菜单内完成,分别是在学生信息管理下的学生信息录入4创建学生信息的录入。void A
3、dd:OnOK() UpdateData(); if(m_sNum = | m_sName = | m_sMajor = | m_sGrade = | m_sBirthday = | (!m_cMale.GetCheck() & !m_cFemale.GetCheck() MessageBox(学生信息不完整,无法录入!, 错误); return; 5创建学生信息的删除。6创建学生信息的修改。void Modify:OnOK() UpdateData(); ifstream in(record.txt); int r = 0, k; string a; while(r != m_nRecord
4、) in a; k = a.size(); r+; if(r = m_nRecord) break; in.ignore(1024, n); 7创建学生信息的查询。void Search:OnOK() UpdateData(); m_sName = ; m_sMajor = ; m_sGrade = ; m_sBirthday = ; m_cMale.SetCheck(0); m_cFemale.SetCheck(0); UpdateData(false); if(m_sNum = ) MessageBox(学号为空,无法查询!, 错误); return; 8可视化的窗口五个,分别实现用户的登
5、录,学生信息的录入,修改,删除,查找。9通过窗口的各个按键对学生信息进行操作。10在组建选项中点击执行【学生信息管理系统.exe】(或者Ctrl+F5)执行程序.11程序没有错误,正常执行学生信息管理系统.exe,显示学生信息管理系统。实验结果:调试无误,正常运行学生信息管理系统.exe,显示学生信息管理系统操作页面。可以实现一下操作:1. 实现简单地使用用户名和密码来进入登陆界面。2.实现任意添加学生的信息,包括添加学生的个人学号,姓名,性别,专业,年级出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为空则提示输入相关的信息。3.实现删除学生的信息,包括删除学生的个人学号,姓名
6、,性别,专业,年出生日期。根据编号进行用户权限检查,在数据库中进行查找相符和的记录,如果编号在数据库中不存在相应记录,则提示不能删除,否则可以删除该记录。输入不允许为空,并且有提示功能,如果输入的时候为空则提示输入相关的信息。4.实现编辑学生的信息,包括编辑学生的个人学号,姓名,性别,专业,年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为空则提示输入相关的信息。5. 实现查询学生的信息,包括编辑查询学生的个学号,姓名,性别,专业,年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候为空则提示输入相关的信息。6. 实现保存学生的信息,包括保存学生的个人学号,姓名,
7、性别,专业,年级,出生日期。疑难小结:通过本次综合试验,了解了C语言、C+,Windows网络编程的一些基础知识,学习到了用C语言、C+,Windows网络编程的特点。学习到了如何如何建立一个学生类实现基本地操作;如何定义所需的学生类及实现基本地操作。如何定义指向结构体的指针设置服务器CSocket地址,实现了数据的存储,以及了实现查询学生的信息同,在实验过程中,回顾书本上的理论知识,巩固了Windows网络编程的知识。主要算法和程序清单:1.录入学生信息void Add:OnOK() UpdateData(); if(m_sNum = | m_sName = | m_sMajor = | m
8、_sGrade = | m_sBirthday = | (!m_cMale.GetCheck() & !m_cFemale.GetCheck() MessageBox(学生信息不完整,无法录入!, 错误); return; int flag = 0; CStudent *stu = new CStudent; stu-m_strID = m_sNum; string temp; ifstream in(record.txt); while(in temp) if(temp = stu-m_strID) flag = 1; MessageBox(该学号已存在!, 注意); in.close();
9、 m_sNum = ; UpdateData(false); / 只将学号清空,其余信息保留 return; in.close(); write(stu); delete stu; MessageBox(录入完毕!, 成功); clean(); / 清空表格 / TODO: Add extra validation here / CDialog:OnOK();void Add:clean() m_sNum = ; m_sName = ; m_sMajor = ; m_sGrade = ; m_sBirthday = ; m_cMale.SetCheck(0); m_cFemale.SetChe
10、ck(0); UpdateData(false);void Add:write(CStudent* stu) stu-m_strName = m_sName; stu-m_strMajor = m_sMajor; stu-m_strGrade = m_sGrade; stu-m_strDate = m_sBirthday; string temp; if(m_cMale.GetCheck() temp = 男; else temp = 女; ofstream ou; ou.open(record.txt, ios:app); / 选择附加模式 ou left; ou setw(20) m_st
11、rID; ou setw(20) m_strName; if(m_cMale.GetCheck() temp = 男; else temp = 女; ou setw(20) temp; ou setw(20) m_strMajor; ou setw(20) m_strGrade; ou setw(20) m_strDate; ou endl; ou.close();2.查询信息代码void Delete:OnOK() if(!searched) MessageBox(请先查询!, 注意); return; if(!find) MessageBox(该学生信息不存在,无法删除!, 错误); re
12、turn; int mbr = MessageBox(确定要删除该学生的所有信息吗?, 注意, MB_YESNO|MB_ICONQUESTION); if(mbr = IDNO) return;int k; ifstream in(record.txt); for(int i = 1; i a; k = a.size(); /为了得到文件指针的偏移量 if(i = index) / 说明文件指针到达要删除那行了,但偏移了k字节 break; in.ignore(1024, n); in.seekg(-k, ios:cur); / 让指针跳到要删除那行的行首 int offset = in.te
13、llg(); / 记下指针位置,便于写新的记录fstream ou; / 这是文件流,不是输出流! ou.open(record.txt); ou.seekp(offset, ios:beg); /跳到删除行string str; getline(in, str); int size = str.size(); / 得到删除行的大小 for(i = 0; i size; i+) ou temp) index+; str = m_sNum; if(str = temp) find = true; / 找到了 in temp; m_sName = temp.c_str(); in temp; if
14、(temp = 男) m_cMale.SetCheck(1); else m_cFemale.SetCheck(1);in temp; m_sMajor = temp.c_str();in temp; m_sGrade = temp.c_str();in temp; m_sBirthday = temp.c_str(); UpdateData(false); in.close(); break; in.ignore(1024, n); in.close();if(!find) MessageBox(该学生信息不存在!, 注意); m_sNum = ; UpdateData(false); se
15、arched = false; / TODO: Add your control notification handler code here void Delete:clean() m_sMajor = ; m_sGrade = ; m_sBirthday = ; m_cMale.SetCheck(0); m_cFemale.SetCheck(0); UpdateData(false);3.修改学生信息代码void Modify:OnOK() / TODO: Add extra validation here UpdateData(); ifstream in(record.txt); in
16、t r = 0, k; string a; while(r != m_nRecord) in a; k = a.size(); r+; if(r = m_nRecord) break; in.ignore(1024, n); in.seekg(-k, ios:cur); int offset = in.tellg();string temp, str; int flag = 0; / 用来判断信息是否改动 for(int col = 0; col temp; switch(col) case 0: if(m_sNum != temp.c_str() flag = 1; break; case
17、1: if(m_sName != temp.c_str() flag = 1; break; case 2: if(m_cMale.GetCheck() str = 男; else str = 女; if(temp != str) flag = 1; break; case 3: if(m_sMajor != temp.c_str() flag = 1; break; case 4: if(m_sGrade != temp.c_str() flag = 1; break; case 5: if(m_sBirthday != temp.c_str() flag = 1; break; if(fl
18、ag) break; if(flag = 0) MessageBox(该学生信息没有改动!, 注意); return; if(m_nRecord = 0 | index = 0) MessageBox(没有学生信息!, 错误); return; / 查看新改的学号是否已存在 ifstream infile(record.txt); int rd = 0; / 因为要排除原来那行,是与其它行比较看是否重号 while(infile temp) rd+; if(temp.c_str() = m_sNum & rd != m_nRecord) MessageBox(该学号已存在, 请重新输入!, 注
19、意, MB_ICONWARNING); show(m_nRecord); return; infile.ignore(1024, n); infile.close();int mbr = MessageBox(确定要修改该学生的信息吗, 注意, MB_YESNO|MB_ICONQUESTION); if(mbr = IDNO) show(m_nRecord); / 显示原来信息 return; CStudent *stu = new CStudent; stu-m_strID = m_sNum; stu-m_strName = m_sName; if(m_cMale.GetCheck() st
20、u-m_strSex = 男; else stu-m_strSex = 女; stu-m_strMajor = m_sMajor; stu-m_strGrade = m_sGrade; stu-m_strDate = m_sBirthday; / 将信息存入变量,便于比较 stu-savetofile(offset); delete stu;LVITEM lvi; lvi.mask = LVIF_IMAGE | LVIF_TEXT; lvi.iItem = m_nRecord; in.seekg(offset, ios:beg); int c = 0; while(in str) lvi.iS
21、ubItem = c; lvi.pszText = (LPTSTR)(str.c_str(); if(c = 0) m_cList.InsertItem(&lvi); else m_cList.SetItem(&lvi); c+; if(c = 6) break; m_cList.DeleteItem(m_nRecord-1); MessageBox(修改完毕!, 成功); /CDialog:OnOK();void Modify:show(int r) clean(); if(r index) return;ifstream in(record.txt); int k = 0; for(int
22、 i = 1; i a; k = a.size(); if(i = r) break; in.ignore(1024, n); /同样,也是为了得到要显示那行 in.seekg(-k, ios:cur); /退回到行头m_nRecord = r; string temp; for(int col = 0; col != 6; col+) in temp; switch(col) case 0: m_sNum = temp.c_str(); break; case 1: m_sName = temp.c_str(); break; case 2: if(temp = 男) m_cMale.Set
23、Check(1); else m_cFemale.SetCheck(1); break; case 3: m_sMajor = temp.c_str(); break; case 4: m_sGrade = temp.c_str(); break; case 5: m_sBirthday = temp.c_str(); break; UpdateData(false); in.close(); void Modify:clean() m_nRecord = 0; m_sNum = ; m_sName = ; m_sGrade = ; m_sMajor = ; m_sBirthday = ; m
24、_cMale.SetCheck(0); m_cFemale.SetCheck(0); UpdateData(false);BOOL Modify:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here index = 0; / 行数 ifstream infile(record.txt); string str; while(infile str) / 为了得到总共的记录数(行数) index+; infile.ignore(1024, n); infile.close();m_cList.Ins
25、ertColumn(0, 学号, LVCFMT_LEFT, 130); m_cList.InsertColumn(1, 姓名, LVCFMT_LEFT, 100); m_cList.InsertColumn(2, 性别, LVCFMT_LEFT, 70); m_cList.InsertColumn(3, 专业, LVCFMT_LEFT, 120); m_cList.InsertColumn(4, 年级, LVCFMT_LEFT, 80); m_cList.InsertColumn(5, 出生日期, LVCFMT_LEFT, 100);ifstream in(record.txt); LVITEM lvi; for(int r = 0; r str) lvi.iSubItem = c; lvi.pszText = (LPTSTR
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1