学生学习成绩管理程序课程设计报告_第1页
学生学习成绩管理程序课程设计报告_第2页
学生学习成绩管理程序课程设计报告_第3页
学生学习成绩管理程序课程设计报告_第4页
学生学习成绩管理程序课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课 程 设 计设计题目 学生学习成绩管理系统学生姓名 邱蜀伟学 号专业班级自动化11-5班指导教师谭奇2013 年 11 月 8 日18 / 18文档可自由编辑打印合肥工业大学课程设计任务书设 计题 目学生学习成绩管理系统成绩主要内容以Visual C+为开发平台,完成综合应用程序的设计,使学生掌握面向对象程序设计的方法。通过课程设计的教学过程,使学生掌握运用Visual C+设计应用程序的方法及步骤、获得软件设计的初步锻炼。为今后实际工作中运用计算机解决实际问题打下良好的基础。以设计一个学生学习成绩管理为题,内容涉及面向对象应用程序设计的各个方面,具体包括:Visual C+开发控制台应用程

2、序的方法;控制台窗口的界面设计方法;以类、类的继承与派生、运算符重载等面向对象的知识解决实际问题的方法以及运用文件流实现数据的保存和提取等。完成用文件和类的方式管理学生成绩数据;能进行数据记录的增加、删除、查找、排序及修改等功能;完成应用程序的调试、编译并运行。按时进行设计的考核验收,打印课程设计报告及设计材料的整理、上交。指导教师意见 签名: 20 年 月 日课程设计报告一. 设计任务 以Visual C+为开发平台,运用Visual C+开发控制台应用程序的方法、控制台窗口的界面设计方法、类及类的继承与派生、运算符重载等面向对象的知识,设计一个学生学习成绩管理程序;用文件和类的方式管理学生

3、成绩数据;能进行成绩数据记录的增加、删除、查找、排序及显示。二. 具体设计1设计思想1)程序结构如下图所示。2)数据结构程序使用一维数组作为数据结构,数组元素是自定义类,类的数据成员包括:char strName20,存储姓名;char strID20,存储学号;float fScore3,存储三门课成绩;float fAve,存储平均成绩。如下图所示。3)主要算法思想(1)ListAllDataRecs()显示所有学生成绩的算法显示表头;将存储学生成绩数据的数组m_stuData的下表标示变量i初始化为0;调用m_stuData的第i个元素的成员函数print()显示该学生的数据记录;如果已

4、经显示满一屏,等待;提示按任意键清屏,重新显示表头;i加1;重复、步,直到i的值与当前学生数m_nStuNum的值相等。等待,提示按任意键返回(2)InputStuRec(CStudentData &stu) 输入学生数据记录的算法显示输入窗口输入学生数据在已有记录中查找刚输入的学号如果不存在,则增加刚输入的新纪录否则,放弃刚输入的数据,不增加记录(3)DeleteStuRec () 删除学生数据记录的算法显示输入学号的窗口输入学号在已有记录中查找刚输入的学号如果不存在,给出提示,终止程序否则,若学号位于m_stuData的第i个元素,则依次将i后的记录替换其前一条记录,直到第m_nS

5、tuNum-1条记录。将学生数m_nStuNum减去1.(4)SortStuRec ()学生数据记录排序的算法将变量i初始化为0;将m_stuData的第i个元素的平均成绩与其后面的所有元素的平均成绩进行比较,遇到较大的就将两个元素的数据互换,最终第i个元素的平均成绩大于或等于其后面的所有元素的平均成绩;将i加1;重复、步,直到i的值与当前学生数m_nStuNum的值相等。(5)FindStuRec () 学生数据记录查找的算法显示输入学号的窗口输入学号在已有记录中查找刚输入的学号如果不存在,给出提示,终止程序否则,显示找到的学生数据记录。2设计表示类名作用数据成员及作用成员函数及功能Cstu

6、dentData学生成绩数据的存储、显示、平均成绩计算、赋值。char strName20存储姓名Print()显示成绩数据char strID20存储学号CalAverage()计算平均值float fScore3存储三门课成绩CStudentData& operator = (CStudentData &stu)赋值运算符重载float fAve存储平均成绩CStudent学生数据的存储,当前学生数的存储,学生成绩的输入、删除、显示、查找。CStudentData m_stuData100;存储100名学生数据InputStuRec(CStudentData &st

7、u)输入学生成绩数据DeleteStuRec()删除学生成绩数据SortStuRec()对学生成绩排序int m_nStuNum存储当前学生数DispListHead(int nRow = 0)显示学生成绩表头ListAllDataRecs()显示所有学生成绩FindStuRec()查找并显示学生成绩3实现注释按照任务要求,以Visual C+为开发平台,运用Visual C+开发控制台应用程序的方法、控制台窗口的界面设计方法、类及类的继承与派生、运算符重载等面向对象的知识,开发了学生学习成绩管理程序,用类的方式管理学生成绩数据;能进行数据记录的增加、删除、查找、排序及显示。设计后期,不断对程

8、序进行优化,对各项操作的成功与失败都以窗口形式显示了提示信息,使操作界面更加友好遗憾的是,由于文件操作知识的欠缺,没能实现用文件的方式管理学生成绩数据。4详细设计主要算法的框架及实现此算法的成员函数接口如下图所示。学生成绩管理算法添加删除排序显示查找InputStuRec( )SortStuRec( )FindStuRec( )ListAllDataRecs( )DeleteStuRec( )三. 调试及测试1. 调试过程中遇到的问题及解决办法在增加学生数据记录时,能正确打开输入窗口,输入数据后,通过测试,也执行了向数组m_stuData的第m_nStuNum个元素,拷贝数据的程序,但执行显示

9、所有记录的功能时,却看不到刚刚添加的记录。起初挺疑惑,明明添加了3条记录,为什么只显示两条呢,单独编程显示第三条记录,数据确实正确。又对显示记录的循环控制变量进行追踪,发现第三条记录没显示就退出了循环,再看循环条件i<m_nStuNum,恍然大悟,原来添加记录时,疏忽了对当前学生数m_nStuNum加1。有了这个教训,在编写删除记录程序时,就对当前学生数做了正确处理。2. 设计和编码分析及改进设想课程设计上交后,又对以下的记录添加代码作了仔细分析。bool CStudent:InputStuRec(CStudentData &stu)bool bRes = false;char

10、*str5 = "Name:", "Student ID:", "Score 1:", "Score 2:", "Score 3:"bRes = _InputMultiBox(str, 0, 0, 20, str, 5);if(strcmp(str1,"")=0)_MessageBox("Warning", "Student ID is empty,failed to add!", 2);bRes = false;if (bRes)fo

11、r (int i=0; i<m_nStuNum; i+)if (strcmp(str1,m_stuDatai.strID)=0)break;if(i=m_nStuNum)strncpy(stu.strName, str0, 20);strncpy(stu.strID, str1, 20);for (int i=0; i<3; i+)stu.fScorei = (float)atof(stri+2);lAverage();_MessageBox("prompt", "Record added successfully!", 0);else_Me

12、ssageBox("Warning", "Student ID already exists,failed to add!", 2);bRes = false;return bRes;应该说,对于输入界面的设计还是比较满意,对学号这个关键字也作了非空和不允许重复的限制。但在细节上,还有很多地方需要优化,比如,姓名应限制非空,三个成绩输入框中输入的内容应进行检测,不能包含除小数点外的非数字字符,成绩应限制在某个范围内等等。3. 测试数据集NamestudentIDScore 1Score 2Score 311111222232422223144444aaa

13、aaa5523aaa44bbb334. 经验和体会面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象使编程与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富有人性化。封装将对象有关的数据和行为封装成整体来处理,使得对象外部不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。面向对象编程代码重用率高,容易扩展,在大框架不变的情况下很容易就开发出适合自己的功能,实现简单,可有效地减少程序的维护工作量,软件开发效率高。四. 使用说明1.启动程序在Visual C

14、+开发平台上打开源程序student.cpp,编译并运行,打开如下图所示的程序菜单。2.菜单选择在程序菜单窗口中,按上下箭头键,移动黑色光条至要选择的功能,按回车键运行该功能。3.添加记录在程序菜单窗口中,按上下箭头键,移动黑色光条至“Add a student data record”,按回车键打开如下所示的输入界面。向name框中输入姓名,不超过20字符;向Student ID框中输入学号,不超过20字符;分别向Score 1、Score 2、Score 3框中输入三门课的成绩,可以是整数或小数,不要超过100,不能输入负数。如果记录添加成功,则显示如下的提示框。如果输入的学号已经存在,则

15、显示如下的警告框。4.删除记录在程序菜单窗口中选择“Delete a student data record”功能,按回车键打开如下所示的学号输入界面。输入要删除的学号,按回车键,如果学号存在,则显示如下图所示的成功删除提示窗口。如果学号不存在,则显示如下图所示的学号不存在提示窗口。5.记录排序在程序菜单窗口中选择“Sort all data records”功能,按回车键开始按平均成绩由大到小排序,排序完成后,显示如下提示。6.显示所有记录在程序菜单窗口中选择“List all data records”功能,按回车键显示所有学生的成绩,如下图所示。7.查询记录在程序菜单窗口中选择“Find

16、 a student data record”功能,按回车键打开如下所示的学号输入界面。输入要查询的学号,按回车键,如果学号存在,则显示找到的学生成绩,如下图所示。如果学号不存在,则显示如下图所示的学号不存在提示窗口。8.退出程序在程序菜单窗口中选择“Exit”功能,按回车键,退出程序。五运行实例图1 程序菜单图2 学生数据输入窗口图3 学号重复警告窗口图4 删除、查询功能的学号输入窗口图5 记录排序完成提示窗口图6 学生成绩显示列表六设计小结经过几天的努力,终于将学生学习成绩管理程序设计完成,通过课程设计,巩固了所学知识,锻炼了动手能力,并有些许感悟,感觉学习编程最好的方法之一就是阅读大量的

17、源代码,针对问题学知识;要把课本上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码,不断实践会使自己熟能生巧;要把在课本中看到的有意义的例子进行扩充,在扩充过程中会促使自己不断应用新知识,积累新的工作经验;要经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;决不要因为程序“很小”就不遵循某些你不熟练的规则好习惯是培养出来的,而不是一次记住的;每学到一个难点的时候,尝试对别人讲解这个知识点并让他理解,如果你能讲清楚说明你真的理解了;我认为学习编程的秘诀是:编程,编程,再编程。课程设计基本完成了要求的功能,但在细节上,还有很多地方需要优化,比如,在数据输入模块,姓名应限制非

18、空,三个成绩输入框中输入的内容应进行检测,不能包含除小数点外的非数字字符,成绩应限制在某个范围内等等。另外,由于对文件操作编程不熟,没能实现用文件管理学生成绩数据,目前设计的程序还不能永久保留输入的数据。以后,打算进一步学习相关编程知识,对程序进行改进、完善,使其更加符合实际需要。附录 主要源程序清单:#include <iostream.h>#include <iomanip.h>#include <string.h>#include <stdlib.h>#include <conio.h>#include "consol

19、e.h"class CStudentDatapublic:char strName20;/ 姓名char strID20;/ 学号float fScore3;/ 三门课成绩float fAve;/ 平均分void Print(void)/ 输出cout.setf(ios:left);cout<<setw(20)<<strName<<setw(20)<<strID;cout.precision(5);for (int i=0; i<3; i+)cout<<setw(10)<<fScorei;cout<&

20、lt;fAve<<endl;cout.flush();void CalAverage(void)float sum = 0.0;for (int i=0; i<3; i+)sum += fScorei;fAve = (float)(sum/3.0);CStudentData& operator = (CStudentData &stu)/ 赋值运算符重载strncpy(strName, stu.strName, 20);strncpy(strID, stu.strID, 20);for (int i=0; i<3; i+)fScorei = stu.fS

21、corei;fAve = stu.fAve;return *this;class CStudent: public CConUI public:bool InputStuRec(CStudentData &stu);bool DeleteStuRec(void);void SortStuRec(void);void DispListHead(int nRow = 0);void ListAllDataRecs(void);void FindStuRec(void);CStudent();CStudentData m_stuData100;int m_nStuNum;void DoAdd

22、(void);void DoDelete(void);void DoSort(void);void DoList(void);void DoFind(void);CStudent theStu;void main()char *strItem11 = "Load Data from the file","Write to the file","-","Add a student data record", "Delete a student data record","Sort all

23、 data records", "-", "List all data records", "Find a student data record","-","Exit" theStu._SetOptionsTitle(" Main Menu ");int nIndex;for (;)theStu._ClearWindow();nIndex = theStu._GetOptions(strItem,0,0,11);switch(nIndex)case 0:/ Loa

24、d Data from the filebreak;case 1:/ Write to the filebreak;case 2:/ Add a student data recordDoAdd();break;case 3:/ Delete a student data recordDoDelete();break;case 4:/ Sort all data recordsDoSort();break;case 5:/ List all data recordsDoList();break;case 6:/ Find a student data recordDoFind();break;

25、case 7:/ Exitreturn;void DoAdd(void)CStudentData stu;if (theStu.InputStuRec(stu) theStu.m_stuDatatheStu.m_nStuNum = stu;theStu.m_nStuNum+;void DoDelete(void)if (theStu.DeleteStuRec()theStu.m_nStuNum-;void DoSort(void)theStu.SortStuRec();void DoList(void)theStu.ListAllDataRecs();void DoFind(void)theS

26、tu.FindStuRec();/ 类CStudent的实现代码CStudent:CStudent(): m_nStuNum(0)void CStudent:ListAllDataRecs()int nSizeX, nSizeY;_GetConwinSize(&nSizeX, &nSizeY);/ 获得控制台窗口的大小_ClearWindow();/ 清屏int posX = 0, posY = 1, temp;DispListHead();/ 显示列表头_SetCursorPos(posX, posY);for (int i=0; i<m_nStuNum; i+)m_s

27、tuDatai.Print();_GetCursorPos(&temp, &posY);if (posY>(nSizeY - 2)cout<<"tPress any key to continue. "cout.flush();_getch();_ClearWindow();DispListHead();posY = 1;_SetCursorPos(posX, posY);cout<<"Total Records is : "<<m_nStuNum<<endl;cout<<

28、"Press any key to continue. "<<endl;cout.flush();_getch();void CStudent:DispListHead(int nRow)int nSizeX, nSizeY;_GetConwinSize(&nSizeX, &nSizeY);/ 获得控制台窗口的大小_SaveSettings();/ 保存当前的设置_SetBackColor(3);/ 背景色为青色_SetForeColor(15);/ 文本色为白色_FillBox(0, nRow, nSizeX, 1, false);/ 画背景水

29、平条_SetCursorPos(0, nRow);cout.setf(ios:left);cout<<setw(20)<<"Student Name"<<setw(20)<<"Student ID"cout<<setw(10)<<"Score 1"<<setw(10)<<"Score 2"<<setw(10)<<"Score 3"cout<<"Averag

30、e"<<endl;cout.flush();_LoadSettings();/ 恢复bool CStudent:InputStuRec(CStudentData &stu)bool bRes = false;char *str5 = "Name:", "Student ID:", "Score 1:", "Score 2:", "Score 3:"bRes = _InputMultiBox(str, 0, 0, 20, str, 5);if(strcmp(str1,

31、"")=0)_MessageBox("Warning", "Student ID is empty,failed to add!", 2);bRes = false;if (bRes)for (int i=0; i<m_nStuNum; i+)if (strcmp(str1,m_stuDatai.strID)=0)break;if(i=m_nStuNum)strncpy(stu.strName, str0, 20);strncpy(stu.strID, str1, 20);for (int i=0; i<3; i+)stu

32、.fScorei = (float)atof(stri+2);lAverage();_MessageBox("prompt", "Record added successfully!", 0);else_MessageBox("Warning", "Student ID already exists,failed to add!", 2);bRes = false;return bRes;bool CStudent:DeleteStuRec()bool bRes = false;char *str1 = "Student ID:"bRes = _InputMultiBox(str, 0, 0, 20, str, 1); if (bRes)for (int i=0; i<m_nStuNum; i+)if (strcmp(str0,m_stuDatai.strID)=0)break;if(i<m_n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论