高校实验室任务安排设计.doc_第1页
高校实验室任务安排设计.doc_第2页
高校实验室任务安排设计.doc_第3页
高校实验室任务安排设计.doc_第4页
高校实验室任务安排设计.doc_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

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

文档简介

课程设计报告(论文)课程名称: 数据结构课程设计 设计题目: 高校实验室任务安排 院 系: 班 级: 设 计 者: 学 号: 指导教师: 设计时间: 2007.12.1-2007.12.14 二零零七年十二月IV哈尔滨工业大学(威海)计算机学院数据结构课程设计验收及成绩评定表(项目组)班号项目名称高校实验室任务安排设计职责学 号姓 名主 要 分 工组长插入部分和删除部分以及后期的调试成员程序的查询部分功能成员收集资料选题,程序界面设计,最后修改调试指导教师设计地点设计开始日期2007.12.1项目完成日期2007.12.14文 档 评 审 成 绩 (共35分)评审项目评审内容成绩标准评审成绩文档格式文档格式是否规范;文字是否规范;图表是否规范;术语是否准确10分文档质量程序设计思想与整体框架是否清晰20分文档一致性文档与程序是否一致5 分文档总体评价总成绩界 面 友 好 和 美 观 性 评 价 (共 10 分)评审项目评 审 内 容成绩标准评审成绩实现方法图形界面或命令行界面,美观程度5分实现语言面向过程或面向对象5分界面总体评价总成绩程 序 功 能 完 备 性 评 审 成 绩 (共 40 分)评审项目评 审 内 容成绩标准评审成绩程序运行状况程序是否能正常运行;是否出现死锁;是否遇到错误而中止运行10分程序正确性对于给定的输入数据,是否能得到正确的输出结果15分程序与文档的一致性程序与各种文档的内容是否一致5 分程序的代码量程序代码量的大小10分程序总体评价总成绩 数据结构课程设计验收及成绩评定表(项目组)实 现 技 术 难 易 程 度 (共 15 分)评审项目评 审 内 容成绩标准评审成绩难易性评价采用的关键技术,实现方法5分实用性评价采用的方法是否适合5分程序实现语言采用何种语言实现5分总体评价总成绩项目综合评价项目组总成绩 评审日期年 月 日评审人签字备注 课程设计任务书 姓 名: 学 号:院(系): 专 业: 任务起止日期: 2007 年 12月 1 日 至2007 年 12 月 14 日 课程设计题目:高校实验室安排设计 设计题目背景:我们学校物理实验室实行全天开放,学生可以根据自己的学习进度自行安排实验时间,但是每个实验有一个限定的时间,假设近期将要做的实验可以有周一下午,周三下午,周五下午三个时间(可以根据实际情况进行调整),每个时间段做实验的学生的人数不能超过一定数目,学生可以预约实验。老师可查询全部的实验愉悦情况,也可以删除某一实验安排。 要解决的问题:按做实验的时间分别设计队列,考虑到每个时间队列中做实验的学生人数不应超过一定数目,所以,时间队列不妨用循环队列来实现,设计一个结构类型包括学生姓名,学号,班级等成员,并用此结构类型实例化时间队列类。主函数主要提供操作菜单并响应用户的各种操作,并将操作结果及时输出。 工作量:插入:将预约做实验的学生的信息(学号,姓名,班级)插入到合适的时间 队列中删除:教师可以删除全部队列。查询:教师可以随时查询某个时间队列中学生的预约情况界面设计: 界面的美化 工作计划安排:两周课程设计第一周第一天我们一起选定函数名称,变量名称等问题。在接下来一周中我们每人根据负责的程序模块来编程实现。第二周第一到三天调试程序,四到五天写论文报告,准备回答问题。 同组设计者及分工:数据结构课程设计报告 软硬件运行环境Windows Xp sp2,Visual C+ 6.0 sp6 问题及难点所在对于该实验问题,考虑到实验中的队列要三个,并且涉及到了队列的操作,所以没有用C,用结构体和函数综合解决这个问题。而采用了C+中类的特性。充分体现了类的封装性和安全性。对问题的抽象,决定要采取的数据结构,按做实验的时间分别设计队列,考虑到每个时间队列中做实验的学生人数不应超过一定数目,所以,时间队列不妨用循环队列来实现.因为有三个队列。所以创建了模板类。实际上用类也是可以实现的。对于变成过程中出现的错误,采用了C+中的异常。对于学生信息,用结构体来储存学生信息。整个实验过程中用到了队列的为空,为满判断,队列查找,删除,插入等操作。 算法设计的思想对实验室的学生名单采用队列的数据结构进行存储。每一个队列有一个类生成。队列中存储由结构体表示的学生的信息。预约,查询,删除,取消预约分别对应队列操作:插入,查找,删除。 算法的流程图/图一:将学生信息入队图二:取得队列的首部信息图三:删除队列图四:程序总流程图 算法的设计与分析为队列建立CirQueue,其类定义如下: class CirQueuepublic: CirQueue() front=rear=0; CirQueue() void EnQueue(elemtp x); struct student DeQueue(); struct student GetQueue(); front=rear? return 1: return 0; int Length(); void PrintQueue( ); int Enquire(string num); void Delete(int i); private: elemtp dataQueueSize; int front, rear; ;在CirQueue类中,提供了如下成员函数(1) 函数声明 void EnQueue(elemtp x) 完成的功能 将元素x入队 (2) 函数声明 struct student DeQueue()完成的功能 将队头元素出队 (3) 函数声明 struct student GetQueue()完成的功能 读取队头元素算法(4) 函数声明 int Length(); 完成的功能 取队列长度(5) 函数声明 void PrintQueue( );完成的功能 遍历队列,按序号依次输出各元素 (6) 函数声明 void Delete(int i); 完成的功能 删除队列的第i个元素 (7) 函数声明 int Enquire(string num); 完成的功能 查询队列中是否存在指定的元素 运行结果与分析(测试)图五:插入操作图六:删除操作:(删除郭晓华同学)图七:按学号查询图八:按姓名查询图十:全部显示功能综合上面的实验情况看,软件运行正常,无异常情况 总结(收获与体会)通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。 附:源代码 CirQueue.h#ifndef CIRQUEUE_H#define CIRQUEUE_H#include #include SkinPlusPlus.h#include using namespace std;const int QueueSize=100; /100只是示例性的数据,可以根据实际问题具体定义const string number,name,grade;struct student /结构体 string num; /学生学号 string name; /学生姓名 string grade; /学生班级;class CirQueuepublic: CirQueue() front=rear=0; /构造函数,置空队 CirQueue() /析构函数,释放队列中各结点的存储空间 void EnQueue(struct student x); /将元素x入队 student DeQueue(); /将队头元素出队 student GetQueue(); /取队头元素(并不删除) bool Empty()if(front=rear)return true;elsereturn false; /判断队列是否为空 int Length(); void PrintQueue( ); /遍历队列,按序号依次输出各元素 int Enquire(string num); /查询队列中是否存在输入的学号 void Delete(); /删除队列的元素public: student dataQueueSize; /存放队列元素的数组 int front, rear; /队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置;#endif/-/* * 前置条件:队列已存在 * 输 入:元素值x * 功 能:在队尾插入一个元素 * 输 出:如果插入不成功,抛出异常 * 后置条件:如果插入成功,队尾增加了一个元素 */void CirQueue:EnQueue(struct student x) if (rear+1)%QueueSize =front) throw 上溢;rear=(rear+1)%QueueSize; /队尾指针在循环意义下加1datarear=x; /在队尾处插入元素/* * 前置条件:队列已存在 * 输 入:无 * 功 能:删除队头元素 * 输 出:如果删除成功,返回被删元素值,否则,抛出删除异常 * 后置条件:如果删除成功,队头减少了一个元素 */ struct student CirQueue:DeQueue() if (rear=front) throw 下溢; front=(front+1)%QueueSize; /队头指针在循环意义下加1 return datafront; /读取并返回出队前的队头元素,注意队头指针 /指向队头元素的前一个位置/* * 前置条件:队列已存在 * 输 入:无 * 功 能:读取队头元素 * 输 出:若队列不空,返回队头元素 * 后置条件:队列不变 */struct student CirQueue:GetQueue() int i; if (rear=front) throw 下溢; i=(front+1)%QueueSize; /注意不要给队头指针赋值 return datai;/* * 前置条件:队列已存在 * 输 入:无 * 功 能:读取队列长度 * 输 出:若队列不空,返回队列长度 * 后置条件:队列不变 */ int CirQueue:Length() int length =(rear-front+QueueSize) % QueueSize; return length;/* *前置条件:队列已存在 *输 入:无 *功 能:遍历队列元素 *输 出:若队列不空,返回队列元素 *后置条件:队列不变 */void CirQueue:PrintQueue() int i=front; while (i!=rear) cout 学号: datai+1.num n; cout 姓名: datai+1.name n; cout 班级: datai+1.grade n; i=(i+1)%QueueSize; /* *前置条件:队列已存在 *输 入:某一元素 *功 能:查询队列中是否存在某元素 *输 出:若存在,返回该元素所在位置,否则返回零 *后置条件:队列不变 */ int CirQueue:Enquire(string num) int i; for(i=front+1; iLoadIcon(IDR_MAINFRAME);/全部显示按钮代码void CSchExamDlg:OnButtonshow() / TODO: Add your control notification handler code herem_showall.ResetContent( );int i=0;using namespace std;std:string str;m_showall.AddString( 日期: 姓名: 学号: 班级:);i=monday.front;while(i!=monday.rear)str=monday +monday.datai+1.name+ +monday.datai+1.num+ +monday.datai+1.grade;m_showall.AddString(str.c_str();i=i+;i=wednesday.front;while(i!=wednesday.rear)str=wednesday +wednesday.datai+1.name+ +wednesday.datai+1.num+ +wednesday.datai+1.grade;m_showall.AddString(str.c_str();i=i+;i=friday.front;while(i!=friday.rear)str=friday +friday.datai+1.name+ +friday.datai+1.num+ +friday.datai+1.grade;m_showall.AddString(str.c_str();i=i+;/插入按钮代码void CSchExamDlg:OnButtonadd() / TODO: Add your control notification handler code hereif(!IsValidte()return;m_showall.ResetContent( );student stuTemp;UpdateData();strname=m_name;strnum=m_num;strgrade=m_grade;stuTemp.grade=strgrade;stuT=strname;stuTemp.num=strnum;if(m_listweek.GetCurSel()=1)monday.EnQueue(stuTemp);if(m_listweek.GetCurSel()=2)wednesday.EnQueue(stuTemp);if(m_listweek.GetCurSel()=0)friday.EnQueue(stuTemp);GetDlgItem(IDC_EDITNAME)-SetWindowText();GetDlgItem(IDC_EDITNUM)-SetWindowText();GetDlgItem(IDC_EDITGRADE)-SetWindowText();/删除按钮代码void CSchExamDlg:OnButtondel() / TODO: Add your control notification handler code hereif(m_listweek.GetCurSel()=1)if(monday.Empty()MessageBox(星期一没有选的同学,删除失败!);elsemonday.Delete();if(m_listweek.GetCurSel()=2)if(wednesday.Empty()MessageBox(星期三没有选的同学,删除失败!);elsewednesday.Delete();if(m_listweek.GetCurSel()=0)if(friday.Empty()MessageBox(星期五没有选的同学,删除失败!);elsefriday.Delete(); OnButtonshow();/按姓名查询void CSchExamDlg:OnButtonnameser() / TODO: Add your control notification handler code hereUpdateData();if(m_nameser.IsEmpty()MessageBox(输入要查询的姓名);return;m_showall.ResetContent( );/清空显示区域std:string str;CString strdata;GetDlgItemText(IDC_EDITNAMESER,strdata);/获得编辑框数据char* strdatachar = (LPTSTR)(LPCTSTR)strdata;/转换成char*(LPTSTR类型一样)m_showall.AddString( 日期: 姓名: 学号: 班级:);/在三个队列中查找数据int i=0;i=monday.front;while(i!=monday.rear

温馨提示

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

评论

0/150

提交评论