数据结构课程设计

更新时间:2023-11-01 01:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分类号 编 号

华北水利水电大学

North China Institute of Water Conservancy and Hydroelectric Power

课 程 设 计

题目 宿舍管理查询系统

院 系 信息工程学院 专 业 计算机科学与技术

姓 名 林广镇 学 号 201215320 指 导 教 师 某某某

2015年1月9日

宿舍管理查询系统

一.题目的内容及要求

1) 任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:

A. 采用交互工作方式

B. 建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、

选择、插入排序等任选两种方法实现)

2) 查询菜单: (用二分查找实现以下操作)

A. 按姓名查询 B. 按学号查询 C. 按房号查询

3) 打印任一查询结果(可以连续操作)

二.小组成员分工及本人任务

王中亚(组长):负责建立数据文件,并且按照数据文件关键字把数据按照一定的排序方式(冒泡和选择)录入文件。并进行最后的模块整合。

陈兴中(组员):主要负责查询数据模块。完成使用二分查找完成分别按照姓名、学号、房号检索出数据信息。

林广镇(组员):主要负责最后的打印查询结果模块。并根据具体的工作量情况,对陈兴中同

三.需求分析(简要说明总体情况,详细介绍本人任务

学的查询模块进行适当的任务分担。

部分)

根据题目要求,我们需要为宿舍管理人员编写一个宿舍管理查询软件,该软件需

要采用交互式的工作方式。并且需要将数据信息存入数据文件中,以长久保留数据(避免程序关闭,内存中数据丢失,下次使用需要重新录入数据)。并且在将数据存入数据文件时需要将数据按照不同的排序方式(如:冒泡排序法,直接插入排序等)和依照不同的关键字(如:姓名,学号,房间号等)排序后,再将数据写入到数据文件中。 然后该程序还需要具有依据不同的关键字进行查找(使用折半查找)相应学生信息的功能。此功能需要在进行对学生信息排序后再进行折半查找实现。

四.概要设计(包括选择什么数据结构?数据结构采用哪种存储方式?选择的原因?设计哪些操作?这些操作之间的调用关系等等)

1.本程序的整体思路是以队列作为房间,在添加学生信息时,需要判断队列数组中某一队列(即某一房间)是否满,如果已满就无法加入,否则能添加成功添加学生信息进该队列。然后在将数据加入顺序表,最后将顺序表同步到数据文件。 2.本程序采用的数据结构为:结构体。

3.本程序采用的储存方式为:顺序表,队列,结构体数组。

1

4.选择结构体的原因是方便存储学生的详细信息,选择队列作为宿舍的房间来存储相应人数的人员信息。选择顺序表将所有人员信息进行存储方便对人员的排序,查找,以及增删改。选择结构体数组是为了将人员信息录入到结构体数组中,然后再写入文件进行保存。

5.本程序根据题目需求对数据设计了排序,查找,增加,删除,修改的功能。 6.在查找功能中,由于使用的是折半查找,所以需要先对顺序表中的人员信息进行排序,然后再进行查找函数的调用。

7. 并且,该程序在将数据添加到数据文件时采用二进制读写的方法读取和写入,因为在数据写入文件时采用结构体是将结构体整体的写入和读取,相对格式化的读取和写入会更加稳定,不易出错!

五.详细设计(包括数据结构的类型定义,每个操作的算法描述)

一.根据需求分析,本程序的定义的顺序表,队列,以及学生信息结构体格式为:

typedef struct people { char name[20]; int num; int room; }people;

typedef struct { int snum; struct people people[4]; int front; int rear; }SqQueue;

typedef struct { struct people people[MAXSTU]; int length; }SqList;

二.根据需要的操作,程序分为数据的添加,数据的删除,数据的排序,数据的查找

这四个大的模块。然后其中数据的排序又分为:根据学号排序(采用冒泡法排序),根据姓名排序(采用冒泡法排序),根据房间号排序三个子模块。数据的查找分为:根据学号查找,根据姓名查找,根据房间号查找三个子模块(使用折半查找)。对应的算法分别为: 1.添加功能:

void tianjia(SqList *&L,SqQueue * sqq[])

2

{ int i,x=0; char cc='o'; while(cc != 'n') { printf(\可供选择的宿舍号有:\\n\ for(i=0;i<5;i++) { if(QueueFull(sqq[i])) { printf(\ } } printf(\ printf(\请输入学生的房号(按回车键结束):\\n\ scanf(\ printf(\请输入学生的姓名(按回车键结束):\\n\ scanf(\ printf(\请输入学生的学号(按回车键结束):\\n\ scanf(\ i=0; while(x<5)//添加学生信息进队列 { if(sqq[x]->snum == peo[j].room) { if(enQueue(sqq[x],peo[j])) break; } x++; } if(x >= 5) { printf(\输入的房间号不存在或者已经住满(每间最多4人)!按任意键返回主菜单!!\ //cc='y'; //tianjia(L,sqq); getchar(); return; } ListInsert(L,peo[j]); //添加学生信息进入顺序链表 if((fp=fopen(\添加学生信息进入数据文件 {printf(\无法打开文件\\n\ exit(0);} if(fwrite(&peo[j],sizeof(people),1,fp) != 1)

3

printf(\ fclose(fp); j++; liulan(); printf(\是否继续添加学生信息?\判断是否继续 getchar(); cc=getchar(); system(\ } }

2.删除功能

void shanchu(SqList *&L,SqQueue * sqq[]) { int i,x=0,y=0,z=0; char cc='o'; while(cc != 'n') { printf(\请输入学生的姓名(按回车键结束):\\n\ scanf(\ i=0; /* while(x<5)//添加学生信息进队列 { for(z=0;zrear;z++) { if(sqq[x]->people[z].name== peo[j].name) { if(deQueue(sqq,peo[j])) return; } } x++; }*/ if(!deQueue(sqq,peo[j])) { printf(\输入的姓名不存在(队列)!\\n\ cc='y'; shanchu(L,sqq); } if(!ListDelete(L,peo[j]))//添加学生信息进入顺序链表 { printf(\输入的姓名不存在(链表)!\\n\ cc='y'; shanchu(L,sqq); }

4

2.删除学生功能

3.按姓名排序

20

4.按学号排序

6.按房间号排序

21

7.按姓名查找

8.按学号查找

22

9.按房间号查找

10.该程序需要改进的地方是,在直接从数据读入数据文件时,而不是从程序直接添加数据时,队列的一些添加功能会偶尔出现bug,还需要继续添加来保证程序的稳定性。

八.课程设计总结: 包括课程设计的收获、遇到的问题及解决问题过程的思考、程序调试能力的思考、对学

23

习数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。要求字数不少于600字。

在这次实验过程中,首先我碰到的第一个问题是团队分组做后再整合的问题。以前在写程序的时候都是自己一个人写,整体思路都是按照自己规划好的方案写,不会出现整个时数据格式不统一的现象。本次实验要求团队进行写,所以在整合时出现了很多数据格式一样、很多函数报错、很多函数的数据逻辑设计无法实施、无法很多处提示变量未定义的现象。经过我和队员的一块协商和改正,对一些标准重新统一才使程序最终正确运行。 然后一个比较重要的问题就是文件的读写问题。文件的读写问题对同学们来说应该是一个普遍的问题,经过我这次重新的对c语言文件的学习,我发现大家碰到的一些问题主要是对文件的打开方式没有搞清楚。比如,使用“r”,“w”方式打开文件只能读或者写,并且“r”要求文件必须已经存在,“w”方式打开时文件不存在会重新建立新文件。用“r+”、“w+”、“a+”方式打开的文件既可以用来输入数据,也可以用来输出数据。另外,我觉得在对数据文件的写入和读出时,使用二进制(即“wb”、“rb”)打开比使用格式化写入读出更加稳定,不易出错。 最后通过本次实验,我掌握了数据结构中一些存储和操作数据的方法。比如队列存储数据的一些特点,只能从尾部加入从头部删除数据。还学会一些对数据的排序算法,如冒泡排序,直接选择排序等和对数据的查找算法,如折半查找,顺序查找等算法。并且我学会了使用顺序表或者链表对数据的储存相比较原来的数组而言更加方便对数据的操作。比如对数据的增加、删除、查找、修改等操作。

24

本文来源:https://www.bwwdw.com/article/n2f2.html

Top