版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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)就可以打印出是否删除和修改信息的情况。2:有何收获a.熟悉掌握了链表的增加,查找,删除,以及排序。b.纠正对break用法的错误理解,break只用在两个地方,一个是case,一个是循环的跳出。c.熟悉循环在程序中的应用,在增加,查找,排序以及界面的显示等都用到了循环。d.学会应用函数的调用,以及主函数中用switch函数做多分支选择,使程序简洁,改动方便。e存在的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年特种用途钢丝及钢丝绳项目立项申请报告
- 2024-2030年中国汽车转向油缸行业市场运营模式及未来发展动向预测报告
- 2024-2030年中国汽车尾气净化三效催化剂行业投资风险及控制策略分析报告
- 2024-2030年中国永磁式直流电机产业未来发展趋势及投资策略分析报告
- 2019-2020学年高中英语-大题精做01-Friendship含解析新人教版必修1
- 承插式盘扣脚手架优化设计方案
- 养老院三角形天窗舒适环境方案
- 农村学校食堂建设与管理方案
- 2024年窗帘门帘项目综合评估报告
- 新材料采购质量保障方案
- 昆虫分类表汇总
- GB_T 28581-2021 通用仓库及库区规划设计参数(高清版)
- 天然气管道增加快速切断装置改造施工方案
- 炒股(盈亏、补仓成本、减仓成本)快速计算表格
- 《企业文化与变革》PPT课件.ppt
- 城市轨道交通线路选线设计-徐振廷
- 工程委外维保流程ppt课件
- 中建股份公司合同管理手册
- 超高层建筑电气设计要点分析
- 精神堡垒报价单
- 德国支持中小企业科技创新的政策资料
评论
0/150
提交评论