数据结构课程设计-宿舍管理系统的设计与实现.doc

上传人:小小飞 文档编号:3277345 上传时间:2019-08-07 格式:DOC 页数:27 大小:304.01KB
返回 下载 相关 举报
数据结构课程设计-宿舍管理系统的设计与实现.doc_第1页
第1页 / 共27页
数据结构课程设计-宿舍管理系统的设计与实现.doc_第2页
第2页 / 共27页
数据结构课程设计-宿舍管理系统的设计与实现.doc_第3页
第3页 / 共27页
数据结构课程设计-宿舍管理系统的设计与实现.doc_第4页
第4页 / 共27页
数据结构课程设计-宿舍管理系统的设计与实现.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《数据结构课程设计-宿舍管理系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-宿舍管理系统的设计与实现.doc(27页珍藏版)》请在三一文库上搜索。

1、 宿舍管理系统的设计与实现 第 27 页 共 27 页 宿舍管理系统的设计与实现学生姓名:* 指导老师:*摘 要 数据结构课程设计的目的是,通过设计掌握数据结构课程中学到的基本理论和算法并综合运用于解决实际问题中,它是理论与实践相结合的重要过程。设计要求学会如何对实际问题定义相关数据结构,并采用恰当的设计方法和算法解决问题,同时训练学生进行复杂程序设计的技能和培养良好的程序设计习惯。宿舍管理是对每栋楼房所有宿舍的一个详细情况登记,每个宿舍在数据库里面的信息都是就静态的只有里面的实住人数是动态增加的,当某个宿舍增加或减少一个学生实住人数会自动加1或减1,实现动态增减。关键词 C语言;姓名;文件操

2、作1 引 言1.1 课题背景在社会飞速发展的今天,用计算机来管理宿舍信息是发展必然趋势,又因为宿舍种类和学生的不断增加,对于管理造成了困难。以往的宿舍管理方法,查询速度慢,管理困难,容易丢失数据,已经不适合现在的要求。为克服宿舍管理的困难,和查询的不便。采用计算机来管理宿舍和学生的信息,大大提高了查询的速度,节约了人力和物力资源,达到了预期的要求1。二十一世纪的今天,已经是计算机的时代。计算机已经进入了现代社会的各个领域,计算机世界日新月异地发展着,在Microsoft公司的 Windows操作系统被成千上万的用户所使用的今天,开发Windows下的图形用户界面程序对于广大的程序员来说已经成为

3、一件刻不容缓的事。开发数据库程序已经一个重要的领域,如今,各种数据库的开发出不穷,而 C语言以其完美的界面,方便的操作,强大的功能在各种数据库开发独树一帜。作为微软公司的重点产品,C语言具有其它数据库开发所无法比拟的优势,它易学易用,因此得到了广大软件开发人员及计算机爱好者的青睐,成为了人们的得力助手。过去的单位一般都用人工来管理信息,这样既不方便又容易发生错误,还占用了大量的人员和物资,现在这些已经成为过去,用计算机来管理可以非常容易的实现这些要求。 用计算机来管理各种数据信息,是世界发展的需求,也是社会发展的趋势。在学校的宿舍管理中,也存在着这种问题,为了提高办事效率,急需开发一套操作简单

4、方便的管理系统。此次课程设计就是为了解决这种问题而设计的。根据调查得知我校宿管科需要一个对学生住宿情况进行管理的软件,于是便起草了这份设计报告。据了解,我校宿管科是管理学生住宿、出勤、卫生、纪律等方面的后勤部门,属于后勤集团的一部分。住宿方面,他们主管住宿学生登记,在新生入学时,一般由新生持入学通知书来办理各种入学手续,然后再拿学校财务部门开具的收据到所在校区宿舍服务公司办理登记手续。这些大量的登记数据形成数据库。在卫生和出勤(早操)检查方面,有纪律检查部的人员定期来检查,检查结果交送宿舍服务公司处理,然后再送交各院系。如有违纪人员,则先交值班室处理然后交各院系,使情况轻重决定是否交给自律委员

5、会处理。在硬件设施(如:桌子、凳子、床)方面,如果有坏掉的,到各个楼的值班室来报修,填一张报修表,然后持保修表到所在校区后勤集团相关服务部门办理报修事宜。同时,如有物品要分发,楼里值班室应通知各寝室长来值班室领取,值班室有自己的仓库,分发情况要上报。各楼值班室的登记数据自己保存,以方便学生家长查找学生。 241.2 课程设计的目的(1)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; (2)训练学生灵活应用所学数据结构的基本知识,熟练的完成问题分析、算法设计、编写程序,求解出指定的问题;(3)训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提

6、高编程水平,并在此过程中培养严谨的科学态度良好的工作作风;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力。1.3课程设计内容图1 功能模块图2 设计思路2.1设计内容 为宿舍管理人员编写一个宿舍管理查询软件。 要求:(1)建立数据文件,数据文件按关键字(姓名,学号,房号)进行排序(冒泡,选择,插入排序等任意一种)(2)查询菜单(用二分法实现以下操作) 按姓名查询 按学号查询 按房号查询2.2基本要求(1)系统功能的完善;(2)代码中有必要的注释。3 详细实现3.1 设计概述图2 设计概述图图3宿舍管理系统流程图3.2 函数设计(1)需要定义一个结构体:57typedef str

7、uct pnode /结构体定义 用于存放学生信息的节点 char name 8; /姓名 char xh16; /学号 char fh30; /房号personnode;用来存储学生的信息。(2) create() /初始条件:必须保证原有记录是空时方可建立 操作结果:建立一个新的数据文件(3) readfile() / 初始条件:数据文件已经建立 操作结果:获取次文件的信息 (4)serch1()按姓名查找serch2()按学号查找serch3()按宿舍号查找初始条件:数据文件中含有纪录操作结果:不支持模糊查询必须查询项和关键字吻合情况下才可查询。调用按不同关键字查询的子函数若存在相应的查

8、询结果则显示在屏幕上,若查找的纪录不存在则提示该纪录不存在,请建立相应的数据纪(5)insert() /添加数据纪录的函数初始条件:必须已经建立了数据文件操作结果:在数据文件中添加新的纪录若没有建立数据文件则添加失败。(6) delete() /删除数据纪录的函数初始条件:必须建立了数据库并且数据文件中含有数据纪录操作结果:删除输入学号的学生的一切相关纪录(7)updata() /修改数据纪录的函数初始条件:必须建立了数据库并且数据文件中含有数据纪录操作结果:修改输入的学号相对应的学生的一切信息。如不存在相应的纪录则提示不存在(8)output() /输出函数 初始条件:数据文件已经建立 操作

9、结果:起泡法排序 按学号顺序输出记录本程序包含10个函数:主函数main()新建数据文件create()查询函数serch1()查询函数serch2()查询函数serch3()加数据纪录函数insert()删除数据纪录函数delete() 修改数据纪录函数updata()数据文件读取函数readfile () 查询当前所有纪录冰按学号升序输出的函数output()3.3各函数间关系利用主函数调用其他的各个函数,新建数据文件函数create()是其它各个函数的基础,有了它其它函数才能够使用。查询函数insert1.2.3()添加数据纪录函数insert()删除数据纪录函数delete ()修改数

10、据纪录函数updata ()这些函数都是在同一等级上的函数,是平行关系。查询当前所有纪录的函数output()以学号为关键字查询函数serch1()以姓名为关键字查询函数serch2()以床号为关键字查询函数serch3()以宿舍号)这些函数都是查询函数中的子函数,他们之间是平行的关系。4 功能模块详细设计与结果4.1 模块详细设计810(1) 主函数main() 通过swich分支 构建图形用户界面 一次调用其他模块完成总体功能;(2)新建数据文件create()为节点分配内存 创建二进制文件用于存储学生信息 通过一个循环 一次录入学生信息闭文件(3) 查询函数serch1() 打开文件 遍

11、历整个文件找到与指定姓名匹配的信息 输出查询到的信息 关闭文件(4) 查询函数serch2() 打开文件 遍历整个文件找到与制定学号匹配的信息 输出查询到的信息 关闭文件(5) 查询函数serch3() 打开文件 遍历整个文件找到与制定床号匹配的信息 输出查询到的信息 关闭文件(6) 加数据纪录函数insert() 打开文件 将制定记录插入到文件的末尾 关闭文件(7) 删除数据纪录函数delete() 打开文件 遍历文件找到与制定姓名匹配的记录 并删除 关闭文件(8) 修改数据纪录函数updata() 打开文件 遍历整个文件找到与制定姓名匹配的记录并修改 关闭文件(9) 数据文件读取函数rea

12、dfile () 打开文件 读取文件 关闭文件(10) 查询当前所有纪录冰按学号升序输出的函数output() 打开文件 遍历文件(嵌套遍历) 依次比较学号大小 用起泡法进行排序 遍历文件 依次输出文件中的记录4.2运行结果 采用模块化编程思想,将程序划分为11个模块,在逐个模块细化编程,最后再将个个模块组装成软件。如图所示:图4 进入页面图按0就可以创建一个新的数据文件,如 C:zjy 就是在C盘根目录下创建一个名为zjy的文件,用来存放宿舍内的学生信息图5 创建新数据文件界面按1可打开一个旧的数据文件,如 C:godlike 打开C盘根目录下的godlike文件(注意必须是已经创立的)按2

13、可按姓名查询图6按姓名查询界面按3可按学号查询按4可按房号查询图7按房号查询界面按5可以进行修改图8 修改界面按6可以进行删除图8 删除界面按7可以进行插入按8 起泡法对文件内的学生信息按学号升序排序 并输出按9 退出5 结束语对我们这一学期实际学到的内容的检验,在课程设计的同时不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力。要学好数据结构这门课程,不仅要认真的阅读课本知识,更重

14、要的是要通过上机实践才能增强和巩固对课本知识的理解。首先通过实践我发现了自己许多的不足,尤其是露出了对C语言知识基础的掌握不好,许多简单的东西都不知道。在课本上看到各种算法感觉很简单,但是真正的让自己去写一个算法感觉很困难。即使是课本上的原程序算法,自己写起来都感觉有点生疏。在调试过程中经常出现的错误也不是很熟悉。通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习数据结构,还是其它的课程,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。回顾起此次数据结构课程设计,至今我仍感慨颇多,的确

15、,从选题到定稿,从理论到实践参考文献1 孙立民. 谈转换机制.实现宿舍管理与学生工作的有机统一 1998 2许海明. 浅谈宿舍管理与学生的思想教育和精神文明建设 1998 3姬莉莉. 高校学生宿舍公寓化管理与服务 期刊论文 - 南开大学 2002 4王新华. 高校学生宿舍公寓化趋势研究 期刊论文 - 南开大学 2001 5阳剑兰. 强化学生宿舍管理及其对策 19996王刚. 高校学生宿舍管理发展趋向之我见 1999 7王新华. 高校学生宿舍公寓化趋势研究 期刊论文 - 南开大学 2001 8克罗恩克. 数据库处理-基础、设计与实现 2003 9Abraham Silberschatz.Henr

16、y F Korth.S Sudarshan,杨东清,唐世渭,数据结构系统概念. 2002 10 林满山. Oracle 9i实用全书. 2003 11. 查看详情 12. 罗晓沛 数据库设计 1994() 13. 王忠明.罗鸿 信息化经典书从-ERP原理设计与实施 2002() 14. 张晓辉.李祥胜 SQL Server 2000管理及应用系统开发 2002() 15. 宣小平.但正刚.张文毅 asp数据库系统开发实例导航 2002() 16. 王国荣 ASP数据库 1999() 17. 陈明 实用软件工程基础 2002() 18. 吴际.金茂忠 UML面向对象分析 2002() 19. 李

17、虎.王美英.万里威 UML基础、案例与应用 2002() 20. 冀振燕 UML系统分析设计与应用案例 2003() 21. 吴杰明.袁山龙 软件工程应用实践教程 2003() 22. 张海潘 软件工程导论 2003() 23. B Bruegge.A H Dutoit.吴丹.唐忆.申震杰 面向对象的软件工程 2002() 24. Roger S Pressman.梅宏 软件工程 2003() 附录(源代码)/ 程序名称:stdio.h/ 程序功能:在程序中随机生成N个数据,对这些数进行多种方法的排序,而且还要对各个排序做出相应的比较。(我不晓得你的是什么,你自己改下啊)/ 程序作者:周玖怡#

18、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 ente

19、r 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,

20、#) /该循环用于控制 学生信息的录入 当输入#时 学生信息录入完毕 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(filen

21、ame,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

22、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

23、-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(x

24、h1); 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-n

25、ame,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);

26、/将文件位置指针从文件头向前移动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(x

27、h1); 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 na

28、mehead 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%-50s

29、n,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(%

30、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

31、); 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

32、)=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,ther

33、e 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

34、 %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

35、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:

36、); 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(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1