学生信息管理系统实验报告
更新时间:2023-08-29 02:36:01 阅读量: 教育文库 文档下载
- 学生信息管理系统推荐度:
- 相关推荐
学生信息管理系统实验报告
班 级:10网工三班 学生姓名:谢昊天 学号:1215134046
实验目的和要求:
实验目的:
1、加深理解Windows程序设计的基本概念;
2、基于单文档的应用程序的创建;
3、学会对话框及相关控件的创建;
4、熟悉基本的Windows消息映射机制和消息相应过程。
实验内容:
1.创建一个基于对话框的应用程序,用于处理学生成绩,并能够处理相关数据。
2.进一步完善实验二中的系统;
3.在学生信息管理系统中添加一个信息查询对话框,并做好相应的界面设计;
4.根据功能要求完成相应的界面设计;
实验内容与分析设计:
1.使用单文档或基于对话框应用程序框架;
2.设计信息查询对话框,增加信息检索功能;
3.信息存储可以借助于数据库,也可以借助于文件,检索记录可以直接在记录文件中进行;
4.通过界面的设计,增加成绩处理的功能;
实验步骤与调试过程:
1.打开Visual c++ 6.0编程环境;
2.点击文件->新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“学生信息管理系统”的一个空工程;
3.继续点击文件->新建、选择建立新的文件;选择C++ Source File选项建立在“学生信息管理系统”工程下的名为“学生信息管理系统”的文件;(或者使用试验一中的文件); 整个系统的功能在菜单内完成,分别是在学生信息管理下的学生信息录入
4.创建学生信息的录入。
void Add::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) {
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.可视化的窗口五个,分别实现用户的登录,学生信息的录入,修改,删除,查找。
9.通过窗口的各个按键对学生信息进行操作。
10.在组建选项中点击执行【学生信息管理系统.exe】(或者Ctrl+F5)执行程序.
11.程序没有错误,正常执行学生信息管理系统.exe,显示学生信息管理系统。
实验结果:
调试无误,正常运行学生信息管理系统.exe,显示学生信息管理系统操作页面。可以实现一下操作:1. 实现简单地使用用户名和密码来进入登陆界面。2.实现任意添加学生的信息,包括添加学生的个人学号,姓名,性别,专业,年级出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为空则提示输入相关的信息。3.实现删除学生的信息,包括删除学生的个人学号,姓名,性别,专业,年出生日期。根据编号进行用户权限检查,在数据库中进行查找相符和的记录,如果编号在数据库中不存在相应记录,则提示不能删除,否则可以删除该记录。输入不允许为空,并且有提示功能,如果输入的时候为空则提示输入相关的信息。4.实现编辑学生的信息,包括编辑学生的个人学号,姓名,性别,专业,年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为空则提示输入相关的
信息。5. 实现查询学生的信息,包括编辑查询学生的个学号,姓名,性别,专业,年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候为空则提示输入相关的信息。
6. 实现保存学生的信息,包括保存学生的个人学号,姓名,性别,专业,年级,出生日期。
疑难小结:
通过本次综合试验,了解了C语言、C++,Windows网络编程的一些基础知识,学习到了用C语言、C++,Windows网络编程的特点。学习到了如何如何建立一个学生类实现基本地操作;如何定义所需的学生类及实现基本地操作。如何定义指向结构体的指针设置服务器CSocket地址,实现了数据的存储,以及了实现查询学生的信息同,在实验过程中,回顾书本上的理论知识,巩固了Windows网络编程的知识。
主要算法和程序清单:
1.录入学生信息
void Add::OnOK()
{
UpdateData();
if(m_sNum == "" || m_sName == "" || m_sMajor == "" || m_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();
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.SetCheck(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) << stu->m_strID;
ou << setw(20) << stu->m_strName;
if(m_cMale.GetCheck())
temp = "男";
else
temp = "女";
ou << setw(20) << temp;
ou << setw(20) << stu->m_strMajor;
ou << setw(20) << stu->m_strGrade;
ou << setw(20) << stu->m_strDate;
ou << endl;
ou.close();
}
2.查询信息代码
void Delete::OnOK()
{
if(!searched) {
MessageBox("请先查询!", "注意");
return;
}
if(!find) {
MessageBox("该学生信息不存在,无法删除!", "错误");
return;
}
int mbr = MessageBox("确定要删除该学生的所有信息吗?", "注意",
MB_YESNO|MB_ICONQUESTION);
if(mbr == IDNO)
return;
int k;
ifstream in("record.txt");
for(int i = 1; i <= index; i++) {
string a;
in >> a;
k = a.size(); //为了得到文件指针的偏移量
if(i == index) // 说明文件指针到达要删除那行了,但偏移了k字节
break;
in.ignore(1024, '\n');
}
in.seekg(-k, ios::cur); // 让指针跳到要删除那行的行首
int offset = in.tellg(); // 记下指针位置,便于写新的记录
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 << " "; // 用空格代替删除行
MessageBox("该学生信息已删除!", "成功");
m_sNum = "";
clean();
searched = false; // 在表格是空的情况下要求先查询
// TODO: Add extra validation here
// CDialog::OnOK();
}
void Delete::OnButton1()
{
find = false; // 该变量表示是否找到
searched = true; // 该变量表示是否进行过查询
UpdateData(); clean(); // 清空上次查询结果,仅保留现在输入的学号 if(m_sNum == "") { MessageBox("学号为空,无法查询!", "错误"); searched = false; return; } index = 0; // 表示要查找的学生信息在哪一行,作为删除的索引 ifstream in("record.txt"); string temp, str; while(in >> temp) { index++; str = m_sNum; if(str == temp) { find = true; // 找到了 in >> temp; m_sName = temp.c_str(); in >> temp; if(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); searched = 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");
int 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 < 6; col++) {
in >> temp;
switch(col) {
case 0:
if(m_sNum != temp.c_str())
flag = 1;
break;
case 1:
if(m_sName != temp.c_str())
flag = 1;
break;
case 2:
if(m_cMale.GetCheck())
str = "男";
MB_ICONWARNING);
show(m_nRecord);
return;
}
infile.ignore(1024, '\n');
}
infile.close(); 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(flag) 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("该学号已存在, 请重新输入!", "注意",
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())
stu->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.iSubItem = 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 <= 0)
return;
} if(r > index) return; ifstream in("record.txt"); int k = 0; for(int i = 1; i <= r; i++) { string a; in >> 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.SetCheck(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_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.InsertColumn(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 < index; r++) {
lvi.mask = LVIF_TEXT;
lvi.iItem = r;
int c = 0;
while(in >> str) {
lvi.iSubItem = c;
lvi.pszText = (LPTSTR)(str.c_str());
if(c == 0)
m_cList.InsertItem(&lvi);
else
m_cList.SetItem(&lvi);
c++;
break; } } in.close();
DWORD dwStyleEx; // 网格风格
dwStyleEx = LVS_EX_FULLROWSELECT | LVS_REPORT |
LVS_EX_ONECLICKACTIVATE;
m_cList.SetExtendedStyle(dwStyleEx);
m_cSpin.SetRange(0, index);
return TRUE;
FALSE
}
void Modify::OnDeltaposSpin2(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
int r = m_cSpin.GetPos();
if(pNMUpDown->iDelta == 1) // 说明点击了Spin的往上箭头
show(r+1);
else if(pNMUpDown->iDelta == -1) // 说明点击了Spin的往下箭头
show(r-1);
*pResult = 0;
}
void Modify::OnClickList3(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos = m_cList.GetFirstSelectedItemPosition();
int r = m_cList.GetNextSelectedItem(pos);
show(r+1);
*pResult = 0;
}
void Modify::OnKeydownList3(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
POSITION pos = m_cList.GetFirstSelectedItemPosition();
int r = m_cList.GetNextSelectedItem(pos);
if(GetKeyState(38) < 0) // up
show(r);
if(GetKeyState(40) < 0) // down
show(r+2);
*pResult = 0;
4.查询信息代码
void Search::OnOK()
{
// TODO: Add extra validation here
UpdateData();
m_sName = "";
m_sMajor = "";
m_sGrade = "";
m_sBirthday = "";
m_cMale.SetCheck(0);
m_cFemale.SetCheck(0);
UpdateData(false); // 清空上次查找记录,只保留现在输入的学号
if(m_sNum == "") {
MessageBox("学号为空,无法查询!", "错误");
return;
}
ifstream in("record.txt");
string temp, str;
int flag = 0;
while(in >> temp) {
str = m_sNum;
if(temp == str) {
flag = 1; // 说明找到了
in >> temp;
m_sName = temp.c_str(); // 类型转换
in >> temp;
if(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();
}
5.登录信息代码
BOOL CStuinforApp::InitInstance()
{
AfxEnableControlContainer();
int nCount=0;
while(nCount<3)
{
Password passdlg;
if(passdlg.DoModal()==IDOK)
if((strcmp(passdlg.m_strusername,"hanxvhui")!=0)||(strcmp(passdlg.m_strpassword,"0524")!=0))
{
MessageBox(NULL,"用户名或口令错误,请重试","错误信息",MB_OK|MB_ICONERROR);
nCount++;
}
else
break;
else
{
return FALSE;
}
}
if(nCount>=3)
{
MessageBox(NULL,"口令输入已超过三次,请退出!","错误信息",MB_OK|MB_ICONERROR);
return FALSE;
}
6.写入学生基本信息
write::write()
{
CStudent *stu;
stu->m_strName = m_sName;
stu->m_strMajor = m_sMajor; if(!flag) { MessageBox("该学生信息不存在!", "注意"); m_sNum = ""; UpdateData(false); } //CDialog::OnOK();
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) << stu->m_strID;
ou << setw(20) << stu->m_strName;
if(m_cMale.GetCheck())
temp = "男";
else
temp = "女";
ou << setw(20) << temp;
ou << setw(20) << stu->m_strMajor;
ou << setw(20) << stu->m_strGrade;
ou << setw(20) << stu->m_strDate;
ou << endl;
ou.close();
}
write::~write()
{
}
正在阅读:
学生信息管理系统实验报告08-29
票据法参考文献07-12
中班音乐活动反思共计4篇02-21
小学英语英语1-6年级05-06
中班幼儿自主性建构游戏的开展与实践04-25
四年级《幸福是什么》教学设计06-12
会计制度设计课程设计11-02
中西餐中英文菜单05-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 管理系统
- 实验
- 报告
- 学生
- 信息
- 学校体育工作实施方案
- 一笔画解析--谢谢-经典——一块由两个正三角形拼成的菱形土地ABCD周长为800米
- 中国地质大学北京 地球科学概论 考研资料
- 创客空间管理制度
- 向量组的线性相关性习题课
- 最新外研版小学英语五年级上册he was in the kitchen公开课教学设计 (1)
- 五年级上册解方程练习题
- 2013国家公务员考试行测备考:语句排序题之关联词语突破
- 成功议论文写法教案 (5)
- 绥化市违反兽药管理行为行政处罚制度
- HITACHI 7180操作流程
- 初中奥数讲义_因式分解的应用附答案
- 2016年清华大学风景园林学考研复习计划
- 金属切削刀具
- 电力系统分析——习题
- 剑南春硬汉酒商业计划书
- 六年级上册1-16课课内阅读专题训练题
- 陕西师范大学出版社2014八年级数学上册C版答案
- 土人景观设计-秦皇岛滨海公园
- 2007-01-25广东省海域使用管理条例121033