《课程设计文档》由会员分享,可在线阅读,更多相关《课程设计文档(30页珍藏版)》请在金锄头文库上搜索。
1、课程设计报告一. 功能需求分析:(一).实现简单地使用用户名和密码来进入登陆界面,以加强DOS运行窗口的可 视化效果。如果输入的用户名和密码有一项为空或者是输入的用户名和密码是错 误的,则不能进入系统。(二).实现任意添加学生的信息,包括添加学生的个人学号,姓名,性别,专业, 年级出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为空 则提示输入相关的信息。(三).实现删除学生的信息,包括删除学生的个人学号,姓名,性别,专业, 年出生日期。根据编号进行用户权限检查,在数据库中进行查找相符和的记录, 如果编号在数据库中不存在相应记录,则提示不能删除,否则可以删除该记录。 输入不允许为
2、空,并且有提示功能,如果输入的时候为空则提示输入相关的信息。(四).实现编辑学生的信息,包括编辑学生的个人学号,姓名,性别,专业, 年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候有一项为 空则提示输入相关的信息。(五).实现查询学生的信息,包括编辑查询学生的个学号,姓名,性别,专业, 年级,出生日期。输入不允许为空,并且有提示功能,如果输入的时候为空则提 示输入相关的信息。(六).实现保存学生的信息,包括保存学生的个人学号,姓名,性别,专业, 年级,出生日期。二. 系统分析:(一).该实验在Visual C+的MFC中完成,通过可视化编程实现实验的要求。用工程MFC AppWi
3、zard(exe)建一个工程文件Stuinfor。(二).该系统的MFC的实验共分为四个类:Add实现学生信息的添加Delete实现学生信息的删除Modify实现学生信息的修改Search实现学生信息的查找(三).由系统的功能分析,可把系统分成若十个对话框窗口的形式,分别实现 系统的输入,修改,删除,查询功能。每一个对话框定义一个类分别用来完成各 个功能的实现。整个系统的功能在菜单内完成,分别是在学生信息管理下的学生 信息录入,学生信息的删除,学生信息的修改,学生信息的查询。可视化的窗口 五个,分别实现用户的登录,学生信息的录入,修改,删除,查找。通过窗口的 各个按键对学生信息进行操作。(四)
4、.由于整个系统的功能比较简单,所以实现所需的控件和代码不会太多, 各个控件的变量以及控件的点击映射函数都是比较简洁的,整体来说,该系统是 一个比较简洁的系统,他通过简明易懂的方式实现了实验的目的,对初步接触 MFC的学生来说是一个非常好的实验教程。三. 功能模块详细设计和流程图(一).功能模块详细设计1. 首先完成系统的登录窗口的设计,按ctrl+r键,弹出插入资源对话框,选择 dialog新建,在该对话框的属性里将标题改为登录。然后在新建的窗口中分别 加入图中的各个控件,其中包括两个静态文本,两个编辑框。其中静态文本分别 定为用户和密码,其相对应的编辑框的ID分别按默认的IDC_EDIT1,
5、IDC_EDIT2 不需要更改。在窗口中的确认键的属性里将标题改为登录,取消不变,其ID分 别为IDOK,IDCANCEL不变。调整各个控件的位置,如图。2. 完成学生信息的输入窗口,将窗口标题改为输入。同理,创建一个对话框, 加入静态文本,学生信息录入,学号,姓名,性别,专业,年级,出生日期,ID 取默认的,其中与学号,姓名,性别(男,女),专业,年级,出生日期,录入, 取消相对应的编辑框或是按钮的ID分别是IDC_EDIT2, IDC_EDIT3, IDC_RADIO1, IDC_RADIO2,IDC_EDIT4,IDC_EDIT5,IDC_EDIT6,IDOK,IDCANCEL 如图所示
6、加 入个控件并设置相应的ID,调整个控件的位置。3. 同上,完成学生信息管理系统的删除窗口,将窗口属性里的标题改为删除, 加入静态文本,编辑框,按钮,组框,如下图所示,其中静态文本的ID取其默 认值,将确认键的标题改为删除,其余控件的ID也保持默认值不变。调整控件 位置如图。组框的属性里的标题改为查询结果,用于显示查寻结果的,为下面信 息的删除做好铺垫。如果没有查到要找的信息,系统也会给出提示,同时,查询 结果里没有任何信息。同时为查询按钮映射一个成员函数OnButton1(),用于完 成查询按钮的功能的实现。4. 查询窗口的设计也是一样,在窗口属性里将标题改为查询,如下图加入各个 静态文本和
7、控件,同上,各个控件的ID取其默认值,删除取消键,将确认键属 性里的标题改为查询,用于执行数据的查询,同上,此对话框里也有一个查询结 果的组框用于信息的输出,按键ctrl+w键,在MFC ClassWizard里为查询键加 入函数映射OnOK(),此函数的功能是查询记录中的数据。5. 创建一个对话框如图,图中加入的控件有静态文本,编辑框,旋转按钮,单 选按钮,列表控件,删除原图中的确认,取消键,ID取其默认值。6. 在ResourceView的Menu的工具栏里添加按键如下,按钮学生信息管理属性 里的选择弹出,在学生信息管理下分别加入按键学生信息录入,学生信息的删除, 学生信息的修改,学生信息
8、的查询,ID分别为ID_MAdd, ID_MDelete,ID_MModify, ID_MModify。文件旧 箱旧 WG0帮助凹 学生信息管理学生信息录入 学生信息雌 学生信息修改 学生信7. 在MFC ClassWizard 的Member Variables 中分别为类Search,Delete,Modify, Password控件添加变量如下图8. 在主窗口的类CMainFrame为成员函数添加点击映射,如下图所示,代码在后 面。(二)流程图四. 设计代码(一)录入学生信息void Add:OnOK()UpdateData();if(m_sNum = II m_sName = II m
9、_sMajor = II m_sGrade = IIm_sBirthday = II (!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(该学号已存在!,注意
10、);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_cFemal
11、e.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 =男”;elsetemp =女”;ofstream ou;ou.open(record.txt, ios:app); / 选择附加模式 ou left;ou setw(20) m_strID;o
12、u setw(20) m_strName;if(m_cMale.GetCheck()temp =男”;elsetemp =女”;ou setw(20) temp;ou setw(20) m_strMajor;ou setw(20) m_strGrade;ou setw(20) m_strDate;ou endl;ou.close();(二)查询信息代码void Delete:OnOK()if(!searched) MessageBox(请先查询!,注意); return;if(!find) MessageBox(该学生信息不存在,无法删除!”,错误”); return;int mbr = Me
13、ssageBox(确定要删除该学生的所有信息吗?,注意, MB_YESNOIMB_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.tellg(); /记下指针位置,便于写新的记录fstream
14、 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(学号为空,无法查询!,错误);