已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中北大学数据结构课 程 设 计 说 明 书学生姓名:张旭亮学 号:0706054232学 院:电子与计算机科学技术学院专 业:软件工程题 目:宿舍管理查询系统成绩指导教师周海英 靳雁霞2009 年 6 月 24 日1.设计目的数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。.2.设计内容和要求2.1设计内容: 为宿舍管理人员编写一个宿舍管理查询软件。 要求:1)建立数据文件,数据文件按关键字(姓名,学号,房号)进行排序(冒泡,选择,插入排序等任意一种)2)查询菜单(用二分法实现以下操作) A按姓名查询 B按学号查询 C按房号查询2.2基本要求:1)系统功能的完善;2)代码中有必要的注释。、3概要设计1 1)需要定义一个结构体:typedef struct pnode /结构体定义 用于存放学生信息的节点 char name 8; /姓名 char xh16; /学号 char fh30; /房号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()各函数间关系:利用主函数调用其他的各个函数,新建数据文件函数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#includetypedef struct pnode /结构体定义 用于存放学生信息的节点 char name 8; /姓名 char xh16; /学号 char fh30; /房号personnode;char filename20; /文件名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%-50sn,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 cant open thefile:n); exit(0); fclose(fp);void output() /输出函数 用于输出文件的全部信息 personnode *person; long offset1,offset2; char name18,name28,name38; char xh116,xh216,xh316; char fh130,fh230,fh330;person=(personnode *)malloc(sizeof(personnode); if(fp=fopen(filename,r)=NULL) printf(n cant 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 cant open the file); exit(0); while(!feof(fp) / 从文件头开始遍历 while(!feof(fp) /对两组数据进行排序 offset1=ftell(fp); /获取文件内部当前指针位置 fscanf(fp,%s%s%sn,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%sn,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&d0) /如果 学号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%-50sn,person-name,person-xh,person-fh);/排序后写入文件 strcpy(person-name,name2); strcpy(person-xh,xh2); strcpy( person-fh,fh2); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh);/排序后写入文件 fseek(fp,offset2,SEEK_SET); /将文件位置指针从文件头向前移动offset2个字节 rewind(fp); /指向头文件 while(!feof(fp) /此循环用于判断学号是否有序 offset1=ftell(fp); fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy (xh1,person-xh); if(feof(fp) a=1; break; offset2=ftell(fp); fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy(xh2,person-xh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b=c&dname,person-xh,person-fh); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); fclose(fp); printf(*nn);void search1() / 按姓名搜索函数 int k=0; char namekey8; 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 cant open thefile); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,person-xh,person-fh); if(!strcmp(namekey,person-name) /比较是否相同 相同则输出结果 否则输出未找到记录 printf(nn have serched,the courrent is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss people n); fclose(fp);void search2() /按学号搜索函数 int k=0; char xhkey16; 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 cant open the file ); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,person-xh,person-fh); if(!strcmp(xhkey,person-xh) /比较是否相同 相同则输出结果 否则输出未找到记录 printf(nn have got it,the current is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss people n); fclose(fp);void search3() /按房号搜索函数 int k=0; char fhkey30; 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 cant open thefile); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,person-xh,person-fh); if(!strcmp(fhkey,person-fh) /比较是否相同 相同则输出结果 否则输出未找到记录 printf(nn have got it,the current is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss peoplen); fclose(fp);void append() /插入函数 用于像已有文件插入一条新的学生信息记录 personnode *person; person=(personnode *)malloc(sizeof(personnode); if(fp=fopen(filename,a)=NULL) printf(n cant 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%-50sn,person-name,person-xh,person-fh); fclose(fp);void modify() /更新函数 用于修改指定学生姓名的记录 int k=0; long offset; char namekey8; 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 cant open thefile); exit(0); while(!feof(fp) offset=ftell(fp); fscanf(fp,%s %s %sn,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%-50sn,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%-50sn,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 namekey8; 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 cant open the file ); exit(0); while(!feof(fp) /此循环遍历整个文件 查找需要删除的记录 offset=ftell(fp); fscanf(fp,%s%s%sn,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%-50sn,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%-50sn,); 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(%33sn,thefile); printf(-n); printf(tt0-creat a new datafilen); printf(tt1-read the oldfilen); printf(tt2- serch as namen); printf(tt3- serch as studentnumbern); printf(tt4- serch as roomnumbern); printf(tt5-updatan); printf(tt6-deleten); printf(tt7-insertn); printf(tt8-printfn); printf(tt9-exitn); printf(-n); printf(t please choice(0-9)n); scanf(%d,&m); switch(m) case 0:creat(); break; case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学教材 艾滋病初筛实验室标准
- 住宅小区垃圾运输服务合同
- 4S店装修附加协议
- 厂房改造工程装修合同样本
- 冷冻蔬菜运输合同范本
- 4S店水电安装合同模板
- 3对3班级篮球比赛活动方案
- 医院装修工程合同协议书
- 商铺营销策划方案
- 花店装修租赁合同样本
- 地貌与公路工程-山岭地貌(工程地质课件)
- 人事考试服务投标方案(技术方案)
- 川教版生命生态安全二年级上册 第10课《室内卫生有讲究》 课件
- 湖北省武汉市2022-2023学年八年级上学期语文期中试卷(含答案)
- 术中知晓预防与脑功能监测
- 昆明地铁5号线 施工方案
- 1.5基尔霍夫定律
- 新教科版四年级上册科学 2-8 食物在身体里的旅行 教学课件
- 机器设备评估常用数据与参数
- 糖尿病饮食指导健康讲解课件
- 肺栓塞业务学习课件
评论
0/150
提交评论