课程设计报告学生信息查询系统.doc

上传人:文库蛋蛋多 文档编号:3993344 上传时间:2023-03-30 格式:DOC 页数:25 大小:314KB
返回 下载 相关 举报
课程设计报告学生信息查询系统.doc_第1页
第1页 / 共25页
课程设计报告学生信息查询系统.doc_第2页
第2页 / 共25页
课程设计报告学生信息查询系统.doc_第3页
第3页 / 共25页
课程设计报告学生信息查询系统.doc_第4页
第4页 / 共25页
课程设计报告学生信息查询系统.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《课程设计报告学生信息查询系统.doc》由会员分享,可在线阅读,更多相关《课程设计报告学生信息查询系统.doc(25页珍藏版)》请在三一办公上搜索。

1、C+语言程序设计课题设计报告课题名称: 学生信息查询系统 一、 课程序设计目的(根据情况写)(1)了解数据的处理,了解基本的程序控制语句,了解表达式和运算符的使用;(2)了解函数的定义及其调用(如传值、引用、嵌套、递归的调用),了解函数变量作用域与其存储类型;(3)学会构造数据类型(如结构体、共用体类型)及预编处理,熟练掌握指针的使用,理清指针与指针变量的区别,了解指针与数组及指针与函数的内在联系,熟练掌握指向结构体指针的使用。(4)以学生信息管理为应用背景,建立学生信息管理程序。程序实现对学生信息的增加、查询、删除、排序、显示、修改几项功能。用函数分别实现动态链表的创建,节点的查找、删除、修

2、改,节点的排序,动态链表输出功能。并且学会使用文件的保存,使用指针作函数形参,主函数分别调用各函数。二、 开发环境(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函数n函数首部函数体局部变量声明执行语句输入:用来在程序执行期间给变量输入数据;一般格式cin变量名1变量名2变量名n; “”称为提取运算符输出:实现将数据输出

3、到显示器的操作;一般格式:cout表达式1表达式2表达式n;“”称为插入运算符。数据类型:对数据类型定义是非常重要的,它可以为数据在内存中分配适合的存储区域、确定数据范围,并且可以规定数据所能进行的有效操作;1:对数据类型的分类有:类 型名 称占用字节取值范围float实型4-1038 1038double双精度型8-10308 10308long double长双精度型8-10308 10308void无值型0 2:常量和变量:变量(variable):取值在程序的执行过程中可改变值的量;常量(constant):取值在程序的执行过程中始终保持不变的量。又分为文字常量(literal con

4、stant)常变量(也称为符号常量)3:运算符和表达式:包括C+运算符、优先级和结合性 ;基本运算符及其表达式(即算术运算符及算符表达式;赋值运算符与赋值表达式;自增、自减运算;逻辑运算、逻辑表达式及其求值优化;位运算;逗号运算符与逗号表达式;sizeof( )运算符) ; 语句(包括表达式语句;表达式; 空语句;复合语句若干语句 流程控制语句:用来控制或改变程序的执行方向);算术类型转换和赋值类型转换 ;求值次序与副作用 等知识。4:链表:链表是一种常见的重要的数据结构。利用它可以实现动态地进行存储分配。 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包

5、括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 组成结构及特点程序主体:一般由一个或多个函数组成,但只有一个函数是程序入口,即代码执行的起点。如本例由max()和main()两个函数组成,函数main()是所有控制台(console) 程序的入口,称为主函数。程序流程控制复合语句:将多个语句组合在一起,用一对花括号将这些语句组合在一起,称为复合语句分支流程If 语句语法:If (条件表达式) 语句1 else 语句2 If (ab) couta; else coutq.nump,q数据交换whileeeeeeewhileq的平均p的平均p,q数据交换p,q数据不交

6、换pnumq.num完成两个数据排序实现全部数据的排序q的平均p的平均和完成两个数据排序实现全部数据的排序数据的排序f:显示所有学生信息(print(struct stu *top)):先判断系统中的学生信息库中是否为空,如果没有学生信息则应先存入数据,不为空则输出所有数据显示所有学生信息系统中是否存在信息储存输出全部信息进行数据输入,在输出全部信息判断否是(2) 程序的详细设计 a:增加学生信息(STU *add)STU *add()/链表的创建struct stu temp; 构建临时变量struct stu *top=NULL,*p=NULL;int a;cout请输入你要输入的学生数a

7、;for(int i=1;i=a;i+)cout请输入第i位学生信息:endl;cout请输入你的学号 temp.num;if(temp.num=0)cout对不起,输入有误!temp.cj.yingyu;if(p=NULL) 判断系统中是否存在数据p=top= (struct stu*)malloc(sizeof(struct stu); 分配内存空间*top=temp; 直接给地址elsep-next=(struct stu*)malloc(sizeof(struct stu); 增加链表*p-next=temp;p=p-next;p-next=NULL;cout输入完成!endl;ret

8、urn top;b:查询学生信息(struct stu *find(struct stu *top,int numToFind))void print(struct stu *top)struct stu *p;p=top;if(p=NULL) 判断系统中是否有信息存储 cout现在没有学生信息,请先输入学生信息endl; return; while(p!=NULL) 完成数据输出c:删除学生信息(STU *del(STU*top))STU *del(STU*top) int num; STU *p,*q; int flag=0; cout请输入要删除的学生学号:num; p=top; q=t

9、op-next; if (p -num = num) 对应学号free(p); 直接释放指针pcout成功删除num=num) p-next=q-next; 满足要删除的条件就删除free(q); cout成功删除next; q=q-next; 函数保存 if(!flag) cout不存在该学号的学生endl; return top; d:修改学生信息(void ChangeByNumber(STU*top))void ChangeByNumber(STU*top) STU *p;int num;char name10;int age;int classid;int flag=0; int y

10、ingyu,shuxue,yuwen; p=top;cout请输入学生学号:num; while(p) if(p-num=num) 完成数据重新输入 flag=1;cout修改成功!你的信息为:next; if(!flag) cout对不起,不存在学生信息endl; e:排序学生信息(void Compositor(STU *top))void Compositor(STU *top) cout 1、按学号排序;endl;cout 2、按平均成绩排序; endl;cout请选择: endl;STU exchange,*r,*p,*q; int xx;r=top;if(r=NULL) cout现

11、在还没学生信息,请先输入学生信息xx;if(xx!=1&xx!=2)cout对不起,请重新输入!next; while(q) 实现p,q在满足条件时数据交换 if(q-numnum) 完成数据交换 q=q-next; r=r-next; cout按学号排序后为:next; while(q) 实现p,q在满足条件时数据交换 if(q-cj.yuwen+q-cj.shuxue+q-cj.yingyu)/3(p-cj.yuwen+p-cj.shuxue+p-cj.yingyu)/3) 比较平均分大小 完成数据交换 q=q-next; r=r-next; cout按平均成绩排序后为:num=numTo

12、Find)return p;p=p-next;return NULL;(4)测试用例(针对每个功能设计测试方案,包括输入数据、输出数据)针对每个功能设计一组(最少一个)测试用例,用来验证程序的正确性。1: 增加学生信息(STU *add)2:查询学生信息(struct stu *find(struct stu *top,int numToFind))查询1号数据:查询2号数据:查询3号数据:查询4号数据:查询5号数据:3:删除学生信息(STU *del(STU*top))删除1号学生数据:删除1号学生后所有数据:4:修改学生信息(void ChangeByNumber(STU*top))修改1

13、号数据:修改1号学生后数据:5:排序学生信息(void Compositor(STU *top))按学号由小到大排序:按平均分由大到小排序:6:显示所有学生信息(print(struct stu *top)) 所有数据未经修改时:数据经修改后:四、 课题总结1陈述遇到的问题及解决办法:a. 问题:学生信息的增加需要创建链表,在创建链表时链表多了一个域,输入的时候如果学号不满足条件,不是会跳出函数而是会多保存一条乱码信息;解决办法:先构建一个临时变量,并进行初始化操作,数据存入在临时变量中,再分配内存空间。b.问题;增加的时候要以学号小于0结束增加,很不优化。解决方法:把while(1)死循环改

14、为for(i=1;i=a;i+)的循环可以通过限定输入学生数来控制。c.问题:进行删除和修改后,保存首地址,发现删除和修改的信息只是追加在原来的信息的后面。而之前的信息还存在。解决方法:写一个resaveLink()函数,把saveLink()函数中的(PATH, ios:app|ios:binary)改为(PATH, ofstream:out);明白ios:app|ios:binary的意思是:1、在文件末尾追加记录;2、以2进制保存文件。ofstream:out的意思是:1、如果文件不存在就创建个文件;2、如果文件存在,则先清空文件内容再保存文件。改的主要原因就是要清空文件后保存,以致于满

15、足每次保存的时候保存首地址就可以使文件中的学生信息不重复。d.问题:删除学生信息时,删除不掉,而且如果删除的是第一个节点,就会使返回为空。解决方法:如果是第一个节点,由于没有表头,不能直接删除第一个节点,如果删除了表头就丢失了链表,所以要先判断是第一个节点的情况。再判断后面的指针。而且保存的时候应该保存的是新的链表。e.问题:修改信息和排序时字符型数组的赋值错误。解决方法:用strcpy()进行赋值。f.问题:在删除和修改的时候,未打印出不存在要修改和删除的学生。解决方法;用int flag=0做跟踪,未执行操作flag的值不变,执行操作flag=1;那么if(!flag)就可以打印出是否删除

16、和修改信息的情况。2:有何收获a.熟悉掌握了链表的增加,查找,删除,以及排序。b.纠正对break用法的错误理解,break只用在两个地方,一个是case,一个是循环的跳出。c.熟悉循环在程序中的应用,在增加,查找,排序以及界面的显示等都用到了循环。d.学会应用函数的调用,以及主函数中用switch函数做多分支选择,使程序简洁,改动方便。e存在的不足之处: 查找和排序都采用遍历的方式(缺点:耗时长,时间复杂度高达n的平方)而且在排序的时候采用了两层while循环,耗时及复杂度高。可以采用快速排序或堆排序。五、 使用说明书1、 用Microsoft Visual Studio 2005 打开该程序文件;2、 编译运行程序;3、 根据页面提示及查询需要对应选择操作类型,进入子程序操作;注意:如果第一次运行程序,应先进行程序存储否则程序会报错;对不需要的数据应先进行删除处理,否则在下面的数据处理中原数据还会存在系统中。六、 教师评阅

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号