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

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

举报
开通vip

张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl中北大学 数据结构 课 程 设 计 说 明 书       学生姓名: 张旭亮 学 号: 0706054232 学 院: 电子与计算机科学技术学院 专 业: 软件工程  题 目: 宿舍管理查询系统 成绩   指导教师 周海英 靳雁霞     2009 年 6 月 24 日 1.设计目的 数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数...

张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl
中北大学 数据结构 课 程 设 计 说 明 书       学生姓名: 张旭亮 学 号: 0706054232 学 院: 电子与计算机科学技术学院 专 业: 软件工程  题 目: 宿舍管理查询系统 成绩   指导教师 周海英 靳雁霞     2009 年 6 月 24 日 1. 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 目的 数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。 ………………………….. 2.设计内容和要求 2.1设计内容: 为宿舍管理人员编写一个宿舍管理查询软件。 要求: 1)建立数据文件,数据文件按关键字(姓名,学号,房号)进行排序(冒泡,选择,插入排序等任意一种) 2)查询菜单(用二分法实现以下操作) A.按姓名查询 B.按学号查询 C.按房号查询 2.2基本要求: 1)系统功能的完善; 2)代码中有必要的注释。、 ………………………… 3.概要设计 1> 1)需要定义一个结构体: typedef struct pnode //结构体定义 用于存放学生信息的节点 { char name [8]; //姓名 char xh[16]; //学号 char fh[30]; //房号 }personnode; 用来存储学生的信息。 2)create()   //初始条件:必须保证原有 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 是空时方可建立 操作结果:建立一个新的数据文件 3) readfile() // 初始条件:数据文件已经建立 操作结果:获取次文件的信息 4)serch1()按姓名查找 serch2()按学号查找 serch3()按宿舍号查找 初始条件:数据文件中含有纪录 操作结果:不支持模糊查询必须查询项和关键字吻合情况下才可查询。调用按不同关键字查询的子函数 若存在相应的查询结果则显示在屏幕上,若查找的纪录不存在则提示该纪录不存在,请建立相应的数据纪 5)insert() //添加数据纪录的函数 初始条件:必须已经建立了数据文件 操作结果:在数据文件中添加新的纪录 若没有建立数据文件则添加失败。 6) delete() //删除数据纪录的函数 初始条件:必须建立了数据库并且数据文件中含有数据纪录 操作结果:删除输入学号的学生的一切相关纪录 7)updata() //修改数据纪录的函数 初始条件:必须建立了数据库并且数据文件中含有数据纪录 操作结果:修改输入的学号相对应的学生的一切信息。 如不存在相应的纪录则提示不存在 8)output() //输出函数 初始条件:数据文件已经建立 操作结果:起泡法排序 按学号顺序输出记录 2> 本程序包含10个函数: 1. 主函数main() 2. 新建数据文件create() 3. 查询函数serch1() 4. 查询函数serch2() 5. 查询函数serch3() 6. 加数据纪录函数insert() 7. 删除数据纪录函数delete() 8. 修改数据纪录函数updata() 9. 数据文件读取函数readfile () 10. 查询当前所有纪录冰按学号升序输出的函数output() <2>各函数间关系: 利用主函数调用其他的各个函数,新建数据文件函数create()是其它各个函数的基础,有了它其它函数才能够使用。查询函数insert1.2.3()添加数据纪录函数insert()删除数据纪录函数delete ()修改数据纪录函数updata ()这些函数都是在同一等级上的函数,是平行关系。查询当前所有纪录的函数output()以学号为关键字查询函数serch1()以姓名为关键字查询函数serch2()以床号为关键字查询函数serch3()以宿舍号)这些函数都是查询函数中的子函数,他们之间是平行的关系。 4.功能模块详细设计 1. 主函数main() 通过swich分支 构建图形用户界面 一次调用其他模块完成总体功能; 2新建数据文件create() 2.1为节点分配内存 2.2创建二进制文件用于存储学生信息 2.3通过一个循环 一次录入学生信息 2.4关闭文件 3. 查询函数serch1() 3.1 打开文件 3.2遍历整个文件找到与指定姓名匹配的信息 3.3输出查询到的信息 3.4关闭文件 4. 查询函数serch2() 4.1打开文件 4.2遍历整个文件找到与制定学号匹配的信息 4.3输出查询到的信息 5.4关闭文件 5. 查询函数serch3() 5.1打开文件 5.2遍历整个文件找到与制定床号匹配的信息 5.3输出查询到的信息 5.4关闭文件 6.加数据纪录函数insert() 6.1打开文件 6.2将制定记录插入到文件的末尾 6.3关闭文件 7.删除数据纪录函数delete() 7.1打开文件 7.2遍历文件找到与制定姓名匹配的记录 并删除 7.3关闭文件 8. 修改数据纪录函数updata() 8.1打开文件 8.2遍历整个文件找到与制定姓名匹配的记录并修改 8.3关闭文件 9. 数据文件读取函数readfile () 9.1打开文件 9.2读取文件 9.3关闭文件 10.查询当前所有纪录冰按学号升序输出的函数output() 10.1打开文件 10.2遍历文件(嵌套遍历) 依次比较学号大小 用起泡法进行排序 10.3遍历文件 依次输出文件中的记录 4.1 详细设计思想 采用模块化编程思想,将程序划分为11个模块,在逐个模块细化编程,最后再将个个模块组装成软件。 ………………………. 4.2 源代码 #include #include #include typedef struct pnode //结构体定义 用于存放学生信息的节点 { char name [8]; //姓名 char xh[16]; //学号 char fh[30]; //房号 }personnode; char filename[20]; //文件名 FILE *fp; //指向文件的指针 void creat() //创建新数据文件的函数 创建一个二进制文件 用于存放学生数据 { personnode *person; person=(personnode *)malloc(sizeof(personnode)); //为节点分配内存 printf("\n please enter the filename:\n"); scanf("%s",filename); if((fp=fopen(filename,"w+"))==NULL) { printf("\n you have no enter the filename,can not font the file"); exit(0); } printf("\n please enter the name,studentnumbeer (the same length) and roomnumber,spare with space,endwith #\n"); scanf("%s",person->name); while(strcmp(person->name,"#")) //该循环用于控制 学生信息的录入 当输入#时 学生信息录入完毕 { scanf("%s %s",person->xh,person->fh); fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->xh,person->fh); scanf("%s",person->name); } fclose(fp); } void readfile() //文件读取函数 用于打开已有的二进制数据文件 {printf("\n please enter the fileroad:\n"); scanf("%s",filename); //此处输入为文件的路径 如c:\zhang if((fp=fopen(filename,"r+"))==NULL) { printf("\n can't open thefile:\n"); exit(0); } fclose(fp); } void output() //输出函数 用于输出文件的全部信息 { personnode *person; long offset1,offset2; char name1[8],name2[8],name3[8]; char xh1[16],xh2[16],xh3[16]; char fh1[30],fh2[30],fh3[30]; person=(personnode *)malloc(sizeof(personnode)); if((fp=fopen(filename,"r"))==NULL) { printf("\n can't open the file"); exit(0); } while(!feof(fp)) //此循环用于 对文件数据中关键字学号进行从小到大冒泡排序 { int a,b,c,d; //a为循环结束判定变量 b,c,d用于起泡排序时学号交换的替换 if((fp=fopen(filename,"r+"))==NULL) { printf("\n can't open the file"); exit(0); } while(!feof(fp)) // 从文件头开始遍历 { while(!feof(fp)) //对两组数据进行排序 { offset1=ftell(fp); //获取文件内部当前指针位置 fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); strcpy(name1,person->name); strcpy (xh1,person->xh); strcpy(fh1,person->fh); if(feof(fp)) break; //文件结束 跳出循环 offset2=ftell(fp); //获取文件内部下一指针位置 fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); strcpy (name2,person->name); strcpy(xh2,person->xh); strcpy(fh2,person->fh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b==c&&d>0) //如果 学号1大于等于学号2 怎交换全部数据 { strcpy(name3,name1); strcpy(name1,name2); strcpy(name2,name3); strcpy(xh3,xh1); strcpy(xh1,xh2); strcpy(xh2,xh3); strcpy(fh3,fh1); strcpy(fh1,fh2); strcpy(fh2,fh3); fseek(fp,offset1,SEEK_SET); //将文件指针移动offset1个字节 strcpy(person->name,name1); strcpy(person->xh,xh1); strcpy(person->fh,fh1); fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->xh,person->fh);//排序后写入文件 strcpy(person->name,name2); strcpy(person->xh,xh2); strcpy( person->fh,fh2); fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->xh,person->fh);//排序后写入文件 } fseek(fp,offset2,SEEK_SET); ///将文件位置指针从文件头向前移动offset2个字节 } rewind(fp); //指向头文件 while(!feof(fp)) //此循环用于判断学号是否有序 { offset1=ftell(fp); fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); strcpy (xh1,person->xh); if(feof(fp)) {a=1; break;} offset2=ftell(fp); fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); strcpy(xh2,person->xh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b==c&&d<=0) a=1; //若a为1 则有序 else{ a=0; //a为0怎无序 break;} fseek(fp,offset2,SEEK_SET); } if(a) break; //a为1 说明学号已经有序 跳出循环 rewind(fp); } if(a) break; ////若a为1,则学号已有序排列,跳出总循环,输出文件 } rewind(fp); printf("\n******************************************************************\n"); printf("%35s\n","thefile(thefile hava printf as studentnumber)"); printf("%-10s%-20s%-50s\n","name","studentnumber","roomnumber"); while(!feof(fp)) //次循环用于输出文件 { fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); } fclose(fp); printf("*******************************************************************\n\n"); } void search1() // 按姓名搜索函数 { int k=0; char namekey[8]; personnode *person; person=(personnode *)malloc(sizeof(personnode)); printf("\n please enter the namehead you need :"); scanf("%s",namekey); if((fp=fopen(filename,"rb"))==NULL) { printf("\n can't open thefile"); exit(0); } while(!feof(fp)) { fscanf(fp,"%s %s %s\n",person->name,person->xh,person->fh); if(!strcmp(namekey,person->name)) //比较是否相同 相同则输出结果 否则输出未找到记录 { printf("\n\n have serched,the courrent is:"); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); k=1; } } if(!k) printf("\n\n sorry,there is not the current of thiss people \n"); fclose(fp); } void search2() //按学号搜索函数 { int k=0; char xhkey[16]; personnode *person; person=(personnode *)malloc(sizeof(personnode)); printf("\n please enter the roomnumber you want to serch:"); scanf("%s",xhkey); if((fp=fopen(filename,"rb"))==NULL) { printf("\n can't open the file "); exit(0); } while(!feof(fp)) { fscanf(fp,"%s %s %s\n",person->name,person->xh,person->fh); if(!strcmp(xhkey,person->xh)) ////比较是否相同 相同则输出结果 否则输出未找到记录 { printf("\n\n have got it,the current is:"); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); k=1; } } if(!k) printf("\n\n sorry,there is not the current of thiss people \n"); fclose(fp); } void search3() //按房号搜索函数 { int k=0; char fhkey[30]; personnode *person; person=(personnode *)malloc(sizeof(personnode)); printf("\n please enter the roomnumber you want to serch:"); scanf("%s",fhkey); if((fp=fopen(filename,"rb"))==NULL) { printf("\n can't open thefile"); exit(0); } while(!feof(fp)) { fscanf(fp,"%s %s %s\n",person->name,person->xh,person->fh); if(!strcmp(fhkey,person->fh)) //比较是否相同 相同则输出结果 否则输出未找到记录 { printf("\n\n have got it,the current is:"); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); k=1; } } if(!k) printf("\n\n sorry,there is not the current of thiss people\n"); fclose(fp); } void append() //插入函数 用于像已有文件插入一条新的学生信息记录 { personnode *person; person=(personnode *)malloc(sizeof(personnode)); if((fp=fopen(filename,"a"))==NULL) { printf("\n can't open the file"); exit(0); } printf("\n please enter the name,studentnumber and roomnumber \n"); scanf("%s %s %s",person->name,person->xh,person->fh); fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->xh,person->fh); fclose(fp); } void modify() //更新函数 用于修改指定学生姓名的记录 { int k=0; long offset; char namekey[8]; personnode *person; person=(personnode *)malloc(sizeof(personnode)); printf("\n please enter the studentname you want to updata :"); scanf("%s",namekey); if((fp=fopen(filename,"r+"))==NULL) { printf("\n can't open thefile"); exit(0); } while(!feof(fp)) { offset=ftell(fp); fscanf(fp,"%s %s %s\n",person->name,person->xh,person->fh); if(!strcmp(namekey,person->name)) //比较是否相同 如 { k=1; break; } } if(k) //相同 输出记录并进行修改 { printf("\n hava got it,the current is:"); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); printf("\n please enter the new studentname,studentnumber and roomnumber :"); scanf("%s %s %s",person->name,person->xh,person->fh); fseek(fp,offset,SEEK_SET); fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->xh,person->fh); } else printf("\n sorry,there is not the current of this people \n"); fclose(fp); } void deleted() //删除函数 用于删除指定学生姓名的记录 { int k=0; char m; long offset; char namekey[8]; personnode *person; person=(personnode *)malloc(sizeof(personnode)); printf("\n please enter the name you want to delete :"); scanf("%s",namekey); if((fp=fopen(filename,"r+"))==NULL) { printf("\n can't open the file "); exit(0); } while(!feof(fp)) //此循环遍历整个文件 查找需要删除的记录 { offset=ftell(fp); fscanf(fp,"%s%s%s\n",person->name,person->xh,person->fh); if(!strcmp(namekey,person->name)) { k=1; break; } } if(k) { printf("\n hava got it,the current is:"); printf("%-10s%-20s%-50s\n",person->name,person->xh,person->fh); printf("\n are you sure to delete it?y/n?"); scanf("%s",&m); if(m=='y') //删除确认按钮 { fseek(fp,offset,SEEK_SET); //删除记录 fprintf(fp,"%-10s%-20s%-50s\n","","",""); } else rewind(fp); } else printf("\n sorry,there is not the current of this people \n"); fclose(fp); } void main() //主函数 { int m,flag=1; // m用于控制菜单的选择项 flag用于控制菜单弹出 while(flag) { printf("%33s\n","thefile"); printf("--------------------------------------------------------------------------------\n"); printf("\t\t0-------------creat a new datafile\n"); printf("\t\t1-------------read the oldfile\n"); printf("\t\t2------------ serch as name\n"); printf("\t\t3------------ serch as studentnumber\n"); printf("\t\t4------------ serch as roomnumber\n"); printf("\t\t5-------------updata\n"); printf("\t\t6-------------delete\n"); printf("\t\t7-------------insert\n"); printf("\t\t8-------------printf\n"); printf("\t\t9-------------exit\n"); printf("--------------------------------------------------------------------------------\n"); printf("\t please choice(0-----------9)\n"); scanf("%d",&m); switch(m) { case 0:creat(); break; case 1:readfile(); break; case 2:search1(); break; case 3:search2(); break; case 4:search3(); break; case 5:modify(); break; case 6: deleted(); break; case 7:append(); break; case 8:output(); break; case 9:exit(0); } } } 5.调试 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 测试数据 文件名 zhang 姓名 学号 床号 zhang 123 456 sun 321 453 zhang 215 453 排序输出 zhang 123 456 zhang 215 453 sun 321 453 删除 zhang Sun 321 453 插入 zhang 123 123 zhang 123 123 排序输出 zhang 123 123 Sun 321 453 修改 zhang zhang 123 321 按姓名查询 zhang zhang 123 321 按学号查询 123 zhang 123 321 按房号查询 453 sun 321 453 退出 重新打开文件 重复上述过程测试无误 6 心得体会 决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载 对我们这一学期实际学到的内容的检验,在课程设计的同时不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力。 要学好数据结构这门课程,不仅要认真的阅读课本知识,更重要的是要通过上机实践才能增强和巩固对课本知识的理解。首先通过实践我发现了自己许多的不足,尤其是露出了对C语言知识基础的掌握不好,许多简单的东西都不知道。在课本上看到各种算法感觉很简单,但是真正的让自己去写一个算法感觉很困难。即使是课本上的原程序算法,自己写起来都感觉有点生疏。在调试过程中经常出现的错误也不是很熟悉。通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习数据结构,还是其它的课程,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。回顾起此次数据结构课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践
本文档为【张旭亮课程设计-数据解构-宿舍管理查询软件课程设计说明书zxl】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_936382
暂无简介~
格式:doc
大小:91KB
软件:Word
页数:0
分类:互联网
上传时间:2018-09-09
浏览量:22