《《C++语言程序设计》课程设计报告学生信息查询系统.doc》由会员分享,可在线阅读,更多相关《《C++语言程序设计》课程设计报告学生信息查询系统.doc(17页珍藏版)》请在三一办公上搜索。
1、C+语言程序设计课题设计报告课题名称: 学生信息查询系统 专业: 电子信息工程 班级: 2班 姓名: 学号: 指导老师: 日期: 2011-05-06 仰恩大学计算机系一、 课程序设计目的(根据情况写)(1) 了解面向对象程序设计与结构化程序设计的内在差别;(2) 了解类和对象的概念,学会对数据进行封装处理,灵活应用类的继承关系,学会用构造函数来进行对象的初始化工作,通过重载构造函数来对对象进行更为深入的数据初始化,用析构函数来清理和释放对象所占用的系统资源;(3) 通过对象指针来访问对象,从而完成对对象数据的调用与返还;(4) 利用动态内存分配在程序的运行中根据实际需要申请内存空间,使用结束
2、后释放所占用的内存空间;(5) 通过继承与派生来简化程序代码简化程序设计,有效利用已有的类模块资源。(6)以学生信息管理为应用背景,用面向对象程序设计建立学生信息管理程序,实现创建班级、添加学生信息、修改学生信息、删除学生信息、打印学生信息、退出六个程序 功能。开发环境(1)系统环境:Windows XP,Windows 7(2)编程环境:Visual C+.NET,Visual C+ 6.x,Visual Studio 2005,Visual Studio 2010.等。二、 实现过程(1) C+编程基础知识介绍C+程序源程序文件1源程序文件2源程序文件3编译预处理命令全局变量声明函数1函数
3、n函数首部函数体局部变量声明执行语句数据类型:对数据类型定义是非常重要的,它可以为数据在内存中分配适合的存储区域、确定数据范围,并且可以规定数据所能进行的有效操作;1:对数据类型的分类有: 2:常量和变量:变量(variable):取值在程序的执行过程中可改变值的量;常量(constant):取值在程序的执行过程中始终保持不变的量。又分为文字常量(literal constant)常变量(也称为符号常量)3:运算符和表达式:包括C+运算符、优先级和结合性 ;基本运算符及其表达式(即算术运算符及算符表达式;赋值运算符与赋值表达式;自增、自减运算;逻辑运算、逻辑表达式及其求值优化;位运算;逗号运算
4、符与逗号表达式;sizeof( )运算符) ; 语句(包括表达式语句;表达式; 空语句;复合语句若干语句 流程控制语句:用来控制或改变程序的执行方向);算术类型转换和赋值类型转换 ;求值次序与副作用 等知识。程序流程控制a:复合语句:将多个语句组合在一起,用一对花括号将这些语句组合在一起,称为复合语句(主要用到if、for、while、switch)分支流程If 语句 If (条件表达式) 语句1 else 语句2循环流程While语句 While(条件表达式1) 语句1; if(条件表达式2) break; 语句2; 语句3;循环流程for语句 for(初始化表达式;条件表达式;循环表达式)
5、 循环体语句 循环流程switch语句 switch(条件表达式) case 1: 语句1;break; case n: 语句1;break;*【break语句使用:用在while,dowhile,for和switch语句中,在循环语句中,break用来从最近的封闭循环体内跳出,在switch语句中,break用来跳出switch语句。】 b:函数的调用:调用一个函数就是暂时中断现有程序的运行,转去执行被调用函数,当被调用函数执行结束以后,再返回到中断处继续执行的过程,如下表: main() 调用fun()或者其他自定义函数结束保存:返回地址当前现场恢复:主调程序现场返回地址fun()返回43
6、52617c:函数的嵌套:执行过程如下表:main()调fun1()或自定义其他函数结束fun1()调fun2()返回fun2()返回367812495(2)程序的概要设计(流程图)1:总体(主函数):设计学生信息管理系统界面,定义程序功能选择的方式,用switch循环进行程序选择(即程序功能选择);通过构造函数的调用来实现不同函数功能,从而进行程序的使用。1:设计学生管理系统界面2:定义选择功能选项switch循环语句实现功能选择case 2case 3case 1case 4case 5case 6 不同的case调用不同的构造函数,实现相应的功能2:主构造函数:包括创建班级【Addcla
7、ss()】、添加学生信息【Addstud ()】、修改学生信息【Changestu()】、删除学生信息【Delstu】、打印学生信息【Disstu】 五个构造函数 。a:创建班级【Addclass()】 创建班级首先用new先给班级开辟一个动态内存n来计数创建班级数后 超过未超过ClassNamen数组存入创建的班级信息,n自加1,完成班级创建跳出班级创建定义数据类型输入班级信息b:添加加学生信息【Addstu()】:退出添加模块学号不存在是信息储存否判断是否创建班级 学号存在,返回重新输入While循环输入学号进行判断未超数提示创建班级,跳出添加学生信息用find(studno)构造函数以学
8、号为线索查找学生超数用count计数添加信息数添加失败输入所需添加信息分别调用Cstudent(*)setMath(*)setEnglish(*)完成数据输入,存在studentcount数组中,count自加d:修改学生信息【Changestu()】:是信息储存否判断是否创建班级While循环输入学号进行判断提示创建班级,跳出添加学生信息打印出该学生信息,及所需修改数据输入所需修改信息分别调用srtAddr(*)setTel(*)setAverage(*)setMath(*)setEnglish(*)存储修改后数据学号存在用find(studno)构造函数以学号为线索查找学生退出数据修改模块
9、c:删除学生信息【Delstu()】:不存在学号n是否判断是否创建班级While循环输入学号进行判断提示创建班级,跳出添加学生信息Studentn+1及后所有指针都向前移动一位,最后一位置1学号n存在用find(studno)构造函数以学号为线索查找学生退出数据删除模块f:打印学生信息【Dispstu()】是否判断是否创建班级for循环调用getClassname(*)打印班级名称提示创建班级,跳出添加学生信息分别调用getStudno()getName()getIdno()getAddr()getTel()getMath()getEnglish()getAverage()获得所有数据,完成数
10、据的获取和打印退出数据打印模块用studenti数组,从第0个到studenti为空,打印出所有学生信息(2) 程序的详细设计a:创建班级void CClass:Addclass(char *ClassName,int *CStudent) int n=0; int ClaccName;if(n!=10)cout输入班级名称ClassName;clas=new Class(ClassName);n+;cout添加成功endl;return true;else cout班级数超额endl;b:添加学生信息void CClass:Addstu ()if(clas=NULL) 未创建班级else 已
11、创建班级定义数据类型coutstudno;while(clas-find(studno)!=-1) 查找该学号学生 存在该学号学生 重新输入学号; 完成数据定义if(clas-countstudentclas-sum=new CStudent(studno,idno,name,addr,tel); 开辟内存clas-studentclas-sum-setMath(math);clas-studentclas-sum-setEnglish(english); 完成数据添加存储this-clas-count+; 计数添加学生数else 超数情况 c:修改学生信息void Cclass:Change
12、stu ()if(cc=NULL) 未创建班级 else 已创建班级 数据定义coutstudno;if(clas-find(studno)!=-1) 找到该学生 打印该学生信息 输入修改信息cc-studentm-setAddr(addr);cc-studentm-setTel(tel);cc-studentm-setMath(math);cc-studentm-setEnglish(english);cc-studentm-setAverage(math,english); 储存修改后数据else 未找到该学生d:删除学生信息void Cclass:Delstu ()if(this-cla
13、s=NULL) 班级未创建else 班级已创建int Studno;coutStudno;int i= clasfind(Studno);if(clasfind(Studno)=-1) 未找到该学生 else for(int j=i; i 50;i+) studenti后指针向前移动一位,且最后一位数组内容置空,学生数减1cout学生删除成功!endl;e:打印学生信息void Cclass: Dispstu()if(cc=NULL) 未创建班级 else 已创建班级 cout班级名称:getClassname()endl;for(int i=0; istudenti != NULL) stu
14、dent数组不为空 打印学生信息(4)测试用例(针对每个功能设计测试方案,包括输入数据、输出数据)针对每个功能设计一组(最少一个)测试用例,用来验证程序的正确性。1: 创建班级2:添加学生信息3:删除学生信息删除123号学生数据:删除123号学生后所有数据:4:修改学生信息修改123号数据:修改123号学生后数据;5:打印学生信息 三、 课题总结1陈述遇到的问题及解决办法: a:问题:没办法对对象内数据进行获取及处理解决方法:构建一个get*()构造函数来获取对象内数据,用set*()构造函数来处理对象内数据,以便进行数据的输入及修改; b:问题:对类的指针数组使用比较生疏 解决方法:深入了解
15、面向对象数据与结构数据的区别,用-运算符来移动指针实现数据的存入与调用 c:问题:在添加、修改、删除都要进行学生查找在程序中出现代码重复利用,代码复杂 解决方法:构建构造函数find(studeno)来完成查找工作,这样只需在需要时调用构造函数,无需重复输入查找功能代码,从而大大简化代码2:有何收获 a:熟悉掌握了类得创建及对象的处理调用;b.熟悉掌握了面向对象数据的添加,修改,删除,打印;c.纠正对break用法的错误理解,break只用在两个地方,一个是case,一个是循环的跳出,对于最后程序的退出应使用exit(0);d.熟悉循环在程序中的应用,在添加,修改,删除,打印以及界面的显示等都用到了循环。e.学会应用面向对象构造函数的调用,以及主函数中用switch函数做多分支选择,先进行类得封装,再对具体对象进行处理及应用类与类之间的继承关系,充分利用面向对象数据处理优势大大简化程序代码;f不足之处:没有对数据进行存盘处理,没有异常处理导致输入错误代码就会出现死循环,程序不能正常运行。 四、 使用说明书1、 用Microsoft Visual Studio 2005 打开该程序文件;2、 编译运行程序;3、 根据页面提示及查询需要对应选择操作类型,进入子程序操作;五、 教师评阅