下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl

张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl.doc

张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl

wangxiaodi0822
2018-09-09 0人阅读 举报 0 0 暂无简介

简介:本文档为《张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxldoc》,可适用于IT/计算机领域

中北大学数据结构课程设计说明书   学生姓名:张旭亮学号:学院:电子与计算机科学技术学院专业:软件工程 题目:宿舍管理查询系统成绩 指导教师周海英靳雁霞  年月日设计目的数据结构课程设计的目的是通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构并采用恰当的设计方法和算法解决问题同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。…………………………设计内容和要求设计内容:为宿舍管理人员编写一个宿舍管理查询软件。要求:)建立数据文件数据文件按关键字(姓名学号房号)进行排序(冒泡选择插入排序等任意一种))查询菜单(用二分法实现以下操作)A.按姓名查询B.按学号查询C.按房号查询基本要求:)系统功能的完善)代码中有必要的注释。、………………………….概要设计>)需要定义一个结构体:typedefstructpnode结构体定义用于存放学生信息的节点{charname姓名charxh学号charfh房号}personnode用来存储学生的信息。)create() 初始条件:必须保证原有记录是空时方可建立操作结果:建立一个新的数据文件)readfile()初始条件:数据文件已经建立操作结果:获取次文件的信息)serch()按姓名查找serch()按学号查找serch()按宿舍号查找初始条件:数据文件中含有纪录操作结果:不支持模糊查询必须查询项和关键字吻合情况下才可查询。调用按不同关键字查询的子函数若存在相应的查询结果则显示在屏幕上若查找的纪录不存在则提示该纪录不存在请建立相应的数据纪)insert()添加数据纪录的函数初始条件:必须已经建立了数据文件操作结果:在数据文件中添加新的纪录若没有建立数据文件则添加失败。)delete()删除数据纪录的函数初始条件:必须建立了数据库并且数据文件中含有数据纪录操作结果:删除输入学号的学生的一切相关纪录)updata()修改数据纪录的函数初始条件:必须建立了数据库并且数据文件中含有数据纪录操作结果:修改输入的学号相对应的学生的一切信息。如不存在相应的纪录则提示不存在)output()输出函数初始条件:数据文件已经建立操作结果:起泡法排序按学号顺序输出记录>本程序包含个函数:主函数main()新建数据文件create()查询函数serch()查询函数serch()查询函数serch()加数据纪录函数insert()删除数据纪录函数delete()修改数据纪录函数updata()数据文件读取函数readfile()查询当前所有纪录冰按学号升序输出的函数output()<>各函数间关系:利用主函数调用其他的各个函数新建数据文件函数create()是其它各个函数的基础有了它其它函数才能够使用。查询函数insert()添加数据纪录函数insert()删除数据纪录函数delete()修改数据纪录函数updata()这些函数都是在同一等级上的函数是平行关系。查询当前所有纪录的函数output()以学号为关键字查询函数serch()以姓名为关键字查询函数serch()以床号为关键字查询函数serch()以宿舍号)这些函数都是查询函数中的子函数他们之间是平行的关系。.功能模块详细设计主函数main()通过swich分支构建图形用户界面一次调用其他模块完成总体功能新建数据文件create()为节点分配内存创建二进制文件用于存储学生信息通过一个循环一次录入学生信息关闭文件查询函数serch()打开文件遍历整个文件找到与指定姓名匹配的信息输出查询到的信息关闭文件查询函数serch()打开文件遍历整个文件找到与制定学号匹配的信息输出查询到的信息关闭文件查询函数serch()打开文件遍历整个文件找到与制定床号匹配的信息输出查询到的信息关闭文件加数据纪录函数insert()打开文件将制定记录插入到文件的末尾关闭文件删除数据纪录函数delete()打开文件遍历文件找到与制定姓名匹配的记录并删除关闭文件修改数据纪录函数updata()打开文件遍历整个文件找到与制定姓名匹配的记录并修改关闭文件数据文件读取函数readfile()打开文件读取文件关闭文件查询当前所有纪录冰按学号升序输出的函数output()打开文件遍历文件(嵌套遍历)依次比较学号大小用起泡法进行排序遍历文件依次输出文件中的记录详细设计思想采用模块化编程思想将程序划分为个模块在逐个模块细化编程最后再将个个模块组装成软件。………………………源代码#include<stdioh>#include<stdlibh>#include<stringh>typedefstructpnode结构体定义用于存放学生信息的节点{charname姓名charxh学号charfh房号}personnodecharfilename文件名FILE*fp指向文件的指针voidcreat()创建新数据文件的函数创建一个二进制文件用于存放学生数据{personnode*personperson=(personnode*)malloc(sizeof(personnode))为节点分配内存printf("npleaseenterthefilename:n")scanf("s",filename)if((fp=fopen(filename,"w"))==){printf("nyouhavenoenterthefilename,cannotfontthefile")exit()}printf("npleaseenterthename,studentnumbeer(thesamelength)androomnumber,sparewithspace,endwith#n")scanf("s",person>name)while(strcmp(person>name,"#"))该循环用于控制学生信息的录入当输入#时学生信息录入完毕{scanf("ss",person>xh,person>fh)fprintf(fp,"sssn",person>name,person>xh,person>fh)scanf("s",person>name)}fclose(fp)}voidreadfile()文件读取函数用于打开已有的二进制数据文件{printf("npleaseenterthefileroad:n")scanf("s",filename)此处输入为文件的路径如c:zhangif((fp=fopen(filename,"r"))==){printf("ncan'topenthefile:n")exit()}fclose(fp)}voidoutput()输出函数用于输出文件的全部信息{personnode*personlongoffset,offsetcharname,name,namecharxh,xh,xhcharfh,fh,fhperson=(personnode*)malloc(sizeof(personnode))if((fp=fopen(filename,"r"))==){printf("ncan'topenthefile")exit()}while(!feof(fp))此循环用于对文件数据中关键字学号进行从小到大冒泡排序{inta,b,c,da为循环结束判定变量bcd用于起泡排序时学号交换的替换if((fp=fopen(filename,"r"))==){printf("ncan'topenthefile")exit()}while(!feof(fp))从文件头开始遍历{while(!feof(fp))对两组数据进行排序{offset=ftell(fp)获取文件内部当前指针位置fscanf(fp,"sssn",person>name,person>xh,person>fh)strcpy(name,person>name)strcpy(xh,person>xh)strcpy(fh,person>fh)if(feof(fp))break文件结束跳出循环offset=ftell(fp)获取文件内部下一指针位置fscanf(fp,"sssn",person>name,person>xh,person>fh)strcpy(name,person>name)strcpy(xh,person>xh)strcpy(fh,person>fh)b=strlen(xh)c=strlen(xh)d=strcmp(xh,xh)if(b==cd>)如果学号大于等于学号怎交换全部数据{strcpy(name,name)strcpy(name,name)strcpy(name,name)strcpy(xh,xh)strcpy(xh,xh)strcpy(xh,xh)strcpy(fh,fh)strcpy(fh,fh)strcpy(fh,fh)fseek(fp,offset,SEEKSET)将文件指针移动offset个字节strcpy(person>name,name)strcpy(person>xh,xh)strcpy(person>fh,fh)fprintf(fp,"sssn",person>name,person>xh,person>fh)排序后写入文件strcpy(person>name,name)strcpy(person>xh,xh)strcpy(person>fh,fh)fprintf(fp,"sssn",person>name,person>xh,person>fh)排序后写入文件}fseek(fp,offset,SEEKSET)将文件位置指针从文件头向前移动offset个字节}rewind(fp)指向头文件while(!feof(fp))此循环用于判断学号是否有序{offset=ftell(fp)fscanf(fp,"sssn",person>name,person>xh,person>fh)strcpy(xh,person>xh)if(feof(fp)){a=break}offset=ftell(fp)fscanf(fp,"sssn",person>name,person>xh,person>fh)strcpy(xh,person>xh)b=strlen(xh)c=strlen(xh)d=strcmp(xh,xh)if(b==cd<=)a=若a为则有序else{a=a为怎无序break}fseek(fp,offset,SEEKSET)}if(a)breaka为说明学号已经有序跳出循环rewind(fp)}if(a)break若a为则学号已有序排列跳出总循环输出文件}rewind(fp)printf("n******************************************************************n")printf("sn","thefile(thefilehavaprintfasstudentnumber)")printf("sssn","name","studentnumber","roomnumber")while(!feof(fp))次循环用于输出文件{fscanf(fp,"sssn",person>name,person>xh,person>fh)printf("sssn",person>name,person>xh,person>fh)}fclose(fp)printf("*******************************************************************nn")}voidsearch()按姓名搜索函数{intk=charnamekeypersonnode*personperson=(personnode*)malloc(sizeof(personnode))printf("npleaseenterthenameheadyouneed:")scanf("s",namekey)if((fp=fopen(filename,"rb"))==){printf("ncan'topenthefile")exit()}while(!feof(fp)){fscanf(fp,"sssn",person>name,person>xh,person>fh)if(!strcmp(namekey,person>name))比较是否相同相同则输出结果否则输出未找到记录{printf("nnhaveserched,thecourrentis:")printf("sssn",person>name,person>xh,person>fh)k=}}if(!k)printf("nnsorry,thereisnotthecurrentofthisspeoplen")fclose(fp)}voidsearch()按学号搜索函数{intk=charxhkeypersonnode*personperson=(personnode*)malloc(sizeof(personnode))printf("npleaseentertheroomnumberyouwanttoserch:")scanf("s",xhkey)if((fp=fopen(filename,"rb"))==){printf("ncan'topenthefile")exit()}while(!feof(fp)){fscanf(fp,"sssn",person>name,person>xh,person>fh)if(!strcmp(xhkey,person>xh))比较是否相同相同则输出结果否则输出未找到记录{printf("nnhavegotit,thecurrentis:")printf("sssn",person>name,person>xh,person>fh)k=}}if(!k)printf("nnsorry,thereisnotthecurrentofthisspeoplen")fclose(fp)}voidsearch()按房号搜索函数{intk=charfhkeypersonnode*personperson=(personnode*)malloc(sizeof(personnode))printf("npleaseentertheroomnumberyouwanttoserch:")scanf("s",fhkey)if((fp=fopen(filename,"rb"))==){printf("ncan'topenthefile")exit()}while(!feof(fp)){fscanf(fp,"sssn",person>name,person>xh,person>fh)if(!strcmp(fhkey,person>fh))比较是否相同相同则输出结果否则输出未找到记录{printf("nnhavegotit,thecurrentis:")printf("sssn",person>name,person>xh,person>fh)k=}}if(!k)printf("nnsorry,thereisnotthecurrentofthisspeoplen")fclose(fp)}voidappend()插入函数用于像已有文件插入一条新的学生信息记录{personnode*personperson=(personnode*)malloc(sizeof(personnode))if((fp=fopen(filename,"a"))==){printf("ncan'topenthefile")exit()}printf("npleaseenterthename,studentnumberandroomnumbern")scanf("sss",person>name,person>xh,person>fh)fprintf(fp,"sssn",person>name,person>xh,person>fh)fclose(fp)}voidmodify()更新函数用于修改指定学生姓名的记录{intk=longoffsetcharnamekeypersonnode*personperson=(personnode*)malloc(sizeof(personnode))printf("npleaseenterthestudentnameyouwanttoupdata:")scanf("s",namekey)if((fp=fopen(filename,"r"))==){printf("ncan'topenthefile")exit()}while(!feof(fp)){offset=ftell(fp)fscanf(fp,"sssn",person>name,person>xh,person>fh)if(!strcmp(namekey,person>name))比较是否相同如{k=break}}if(k)相同输出记录并进行修改{printf("nhavagotit,thecurrentis:")printf("sssn",person>name,person>xh,person>fh)printf("npleaseenterthenewstudentname,studentnumberandroomnumber:")scanf("sss",person>name,person>xh,person>fh)fseek(fp,offset,SEEKSET)fprintf(fp,"sssn",person>name,person>xh,person>fh)}elseprintf("nsorrythereisnotthecurrentofthispeoplen")fclose(fp)}voiddeleted()删除函数用于删除指定学生姓名的记录{intk=charmlongoffsetcharnamekeypersonnode*personperson=(personnode*)malloc(sizeof(personnode))printf("npleaseenterthenameyouwanttodelete:")scanf("s",namekey)if((fp=fopen(filename,"r"))==){printf("ncan'topenthefile")exit()}while(!feof(fp))此循环遍历整个文件查找需要删除的记录{offset=ftell(fp)fscanf(fp,"sssn",person>name,person>xh,person>fh)if(!strcmp(namekey,person>name)){k=break}}if(k){printf("nhavagotit,thecurrentis:")printf("sssn",person>name,person>xh,person>fh)printf("nareyousuretodeleteityn")scanf("s",m)if(m=='y')删除确认按钮{fseek(fp,offset,SEEKSET)删除记录fprintf(fp,"sssn","","","")}elserewind(fp)}elseprintf("nsorry,thereisnotthecurrentofthispeoplen")fclose(fp)}voidmain()主函数{intm,flag=m用于控制菜单的选择项flag用于控制菜单弹出while(flag){printf("sn","thefile")printf("n")printf("ttcreatanewdatafilen")printf("ttreadtheoldfilen")printf("ttserchasnamen")printf("ttserchasstudentnumbern")printf("ttserchasroomnumbern")printf("ttupdatan")printf("ttdeleten")printf("ttinsertn")printf("ttprintfn")printf("ttexitn")printf("n")printf("tpleasechoice()n")scanf("d",m)switch(m){case:creat()breakcase:readfile()breakcase:search()breakcase:search()breakcase:search()breakcase:modify()breakcase:deleted()breakcase:append()breakcase:output()breakcase:exit()}}}调试分析测试数据文件名zhang姓名学号床号zhangsunzhang排序输出zhangzhangsun删除zhangSun插入zhangzhang排序输出zhangSun修改zhangzhang按姓名查询zhangzhang按学号查询zhang按房号查询sun退出重新打开文件重复上述过程测试无误心得体会对我们这一学期实际学到的内容的检验在课程设计的同时不仅巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的只有理论知识是远远不够的只有把所学的理论知识与实践相结合起来从理论中得出结论才能真正的掌握从而提高自己的实际动手能力和独立思考的能力。要学好数据结构这门课程不仅要认真的阅读课本知识更重要的是要通过上机实践才能增强和巩固对课本知识的理解。首先通过实践我发现了自己许多的不足尤其是露出了对C语言知识基础的掌握不好许多简单的东西都不知道。在课本上看到各种算法感觉很简单但是真正的让自己去写一个算法感觉很困难。即使是课本上的原程序算法自己写起来都感觉有点生疏。在调试过程中经常出现的错误也不是很熟悉。通过实践使我在这几个方面的认识有所提高。通过实践的学习我认到学好计算机要重视实践操作不仅仅是学习数据结构还是其它的课程以及其它的计算机方面的知识都要重在实践所以后在学习过程中我会更加注视实践操作使自己更好地学好计算机。回顾起此次数据结构课程设计至今我仍感慨颇多的确从选题到定稿从理论到实践

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/20

张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利