1、. .课 程 设 计 报 告课程名称 C语言程序设计 课题名称 学生宿舍管理系统 专 业班 级学 号姓 名指导教师2012年6月19日工程学院课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 学生宿舍管理系统 专业班级 学生XX 学 号 指导教师 审 批 任务书下达日期 2021 年 6 月 19 日任务完成日期 2021年 7 月 4 日一、设计容与设计要求1 设计容:学生宿舍管理系统设计涉及的知识点:掌握并熟练运用C语言的根本数据类型与各种表达式,程序的流程控制语句;掌握数组的根本概念。熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。掌握函数的定
2、义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。掌握构造体的概念,构造体类型的定义,构造体变量的定义和初始化,构造体成员的表示,构造体变量的赋值含义,构造体与指针、函数的关系。掌握文件、文件类型指针的根本概念,熟练掌握文件的翻开与关闭以及文件的建立、读写等有关操作。2 设计要求:1) 用C语言实现系统;利用构造体数组实现学生宿舍信息的数据构造设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单
3、。2) 建立一个学生宿舍信息数据库,文件名为ssxxk.txt,并从该文件中读取数据;3) 学生宿舍管理系统应能提供以下功能:系统以菜单方式工作:通过提示用户输入一个数字选项,调用相应的功能函数。显示功能:完成全部宿舍信息的显示,显示时按表格的形式,且应有表头;追加功能:完成一个或多个学生入住宿舍的登记追加记录,要求在追加过程中有相应的提示信息,完成追加后能重新显示;查询功能:要求可选择按指定学号和指定XX两种方式定位查询,查询的结果要求以表格的形式显示,假设查询不到应给出相应的提示信息。删除功能:要求可按指定的学号和指定的XX两种定位方式删除学生在宿舍的记录。修改功能:要求能按学号或按XX两
4、种定位方式,且可以按用户要求修改记录中除学号和XX以外的指定容,并重新显示。)统计模块:能按指定的校区、宿舍栋号、统计入住该栋的学生人数,或统计指定的班级入住某栋的人数,并将统计的结果以及被统计的人员的信息用表格的形式显示;排序功能:按宿舍类别排序升序要求在删除模块、修改模块和查询模块中假设找不到所需的记录时,系统设计中应有一定的提示信息。4) 说明:(1) 要求将修改后的数据写入到一个新的数据文件nwesxxk.txt中。(2) 对系统有兴趣的同学可以在实现根本要求的根底上,完善系统的其它功能。5) 学生宿舍管理系统采用一个构造体数组,宿舍生信息数据库构造如下:char ssdh4; /*宿
5、舍栋号*/ int fjh; /*房间号*/ long xh /*学号*/ char name10; /*XX*/ char xb4; /*性别*/ char bj12; /*班级*/ char phone12; /*/ int xq; /*校区*/ int sslb; /*宿舍类别*/注意:学号不能重复且不少于4位数字,各项字符串的长度要求在410之间,数据库应有10条或多于10条以上的记录。6) 要求: 要求每个学生必须独立思考,认真并按时完本钱课程设计所包含的所有容; 要求学生必须按照课程设计报告的完整格式说明设计容,设计任务分析过程和算法,给出程序流程图和全部源程序; 设计报告的完整格
6、式应包括以下局部的容: 系统设计总体思路; 系统的主要功能; 系统功能模块的划分要求画出总体模块框图; 主要功能的实现和各个程序模块说明每个功能模块的框图、系统主模块的流程图,各个功能模块至少要有一个主要的流程图; 程序调试过程及各模块调试中相应的局部截图; 课程设计总结与体会不少于500字。 课程设计参考文献; 程序清单; 课程设计周,凡规定的集中上机时间必须到机房调试程序; 设计完成后必须参加辩论,并按要求演示程序,提交课程设计报告和有关电子文档。7分组及安排所选题目根据学生班号和学号确定,班号+学号% 6+1。如你的班号为01班、学号为01,那么所选题目号为:1+1%6+13,即课题号为
7、3。8成绩评定程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量上下;辩论时答复以下问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表。二、进度安排第 19 周 星期一 8:0012:00 讲课、布置任务星期二 8:0012:00 机房上机调试程序星期三 14:0018:00 机房上机调试程序星期四 14:0018:00 机房上机调试程序、辩论 附:课程设计报告排版、打印和装订要求1. 课程设计报告装订顺序:封面、任务书、目录、正文、附件、评分表。按A4大小的纸排版和打印。 2. 设计报告的页码从目录之后开场使用;3. 正文的格式:一级标题用3号黑体,二级标题用四号
8、宋体加粗,正文用小四号宋体;行距为22磅。正文中程序清单英文用英文字体Times New Roman,单倍行间距。 4. 正文的容:一、课题的主要功能;二、课题的功能模块的划分要求画出模块图;三、主要功能的实现至少要有一个主要模块的流程图;四、程序调试各模块至少有一个程序调试的截图;五、总结不少于500字;六、参考文献;t、附件包含所有程序的原代码,且程序中应有必要的注释。八.正文总字数要求在5000字以上不含程序原代码。5设计报告中任务书和评分表不需重新排版。目 录一、系统总体设计思路:1.总体功能设计:1.各模块功能设计:1二.系统总体模块框图:3三、系统总流程图及各模块流程图4.总流程图
9、:4.各模块流程图:6四、系统各模块主要功能的实现12I.显示模块12II.追加模块12III修改模块12IV删除模块13V.查询模块13VI统计模块:13VII排序模块:14五程序调试14I.显示模块:14II追加程序:16III.修改程序:20IV删除模块:23V查询模块:26VI统计模块:28VII排序模块:31VIII退出模块:32六.总结与体会33七参考文献:34八附件34. .word.zl. .一、系统总体设计思路:.总体功能设计:学生宿舍管理系统存放了每个学生的学号、XX、性别、班级、及所住的宿舍栋号、房间号、校区、宿舍类别的数据库。每个人的信息定义在一个构造体变量中。其构造如
10、下:系统通过显示程序、追加程序、查询程序、删除程序、修改程序、统计程序、排序程序来实现学生信息管理系统的显示功能、追加功能、查询功能、删除功能、修改功能、统计功能、排序功能。各个功能的调用通过主函数中的switch语句来实现。switch(sele) case 1:Disp();break;显示模块 case 2:Appe();break;追加模块 case 3:Modi();break;修改模块 case 4:Dele();break;删除模块 case 5:Query();break;查询模块 case 6:Sort(); break;排序模块 case 7:Total(); break;
11、统计模块 case 8:Quit(); sele=0;break;退出模块.各模块功能设计:.显示模块:通过设计一个模块,来实现学生信息的显示。以便于浏览学生的信息。.追加模块:通过设计一个模块,当要参加新的学生的信息的时候,来实现新学生信息的参加。iii.查询模块:通过设计一个模块,这个模块可以按学生的学号、XX来查询学生所有的信息,并显示学生的所有信息,以便查询者阅读。 iv.删除模块: 通过设计一个模块,当输入一个学生的学号或者XX的时候,可以通过这个模块,将输入学号或者XX的学生的所有信息从数据库中删除出去。以后,这个学生的信息将不再会出现再数据库中。v.修改模块:通过设计一个模块,当
12、某个人的信息发生变化的时候,可以通过修改模块来进展修改。修改模块时一具有多级子菜单的摸块。使用十分的方便、灵活。vi统计模块:通过设计一个模块,能按指定的校区、宿舍栋号统计入住该栋的学生人数,或统计制指定的班级入住某栋的人数,并能将统计的结果以及统计的人员的信息用表格显示出来,是浏览者一目了然。vii.排序模块:通过设计一个模块,来实现数据库的信息按宿舍类别的升序排列。并显示所有信息,使浏览者一目了然。二.系统总体模块框图:主函数显示模块追加模块查询模块删除模块排序模块退出模块统计模块退出修改模块三、系统总流程图及各模块流程图.总流程图:进入系统输入Sele=?追加程序删除程序查询程序统计程序
13、显示程序退出程序输出Sele=8Sele=4Sele=2Sele=5Sele=7Sele=1排序程序Sele=6修改程序Sele=3开场完毕.各模块流程图:i.显示模块:进入输入选项xuanxM=?输出所有信息退出M=1M=2ii.追加模块:进入输入选项num=?输入信息输出所有信息退出num=2num=1是否继续追加否是iii.修改模块:进入输入选项t=?修改宿舍栋号修改性别修改修改校区退出程序输入信息t=8t=3t=1t=7修改宿舍类别t=6修改房间号t=2修改班级num=??num=3按学号查找并修改按XX查找并修改num=1num=2输出所有信息t=4t=5选择是否继续修改?是否iv.
14、删除模块:进入输入选项要查找的信息查找要删除的学生信息删除学生信息输出删除后的学生信息是否继续删除退出查无此人flag=?否是flag=0flag=1v.查询模块:进入输入选项按学号查找号按XX查找号查找学生num=1num=3num=2flag=?是否继续查询查无此人!flag=1输出学生信息flag=0退出是否vi.统计模块:进入输入选项按校区、宿舍栋号统计该栋入住学生人数按班级统计入住某栋的人数输入统计的人数和这些学生的信息是否继续统计退出否是t=1t=2t=3vii.排序模块:进入输入选项按宿舍类别进展升序排列输出排序后的学生信息退出num=2num=1四、系统各模块主要功能的实现I.
15、显示模块程序通过一个printf函数把输出信息的表头打印出来,再通过一个for循环把每一个学生的信息输出,在输出的时候,通过调用Print函数一个专门用来输出的函数,且是用指向构造体数组的指针输出学生信息输出所有学生信息。II.追加模块构造体中间的成员之间用空格来隔开输入,通过回车键来实现追加。且追加一个学生信息后可选择继续追加或退出。III修改模块程序定义一个变量num1,来确定到底输入的是学号还是XX。通过一个for循环来确定数据库到底是否含有此人的信息。如果含有此人的信息,那么把此人的序号赋值给变量k,把标识变量flag赋值为1;如果不含有此人信息,那么标识变量flag值仍为0。再通过i
16、f语句,如果标识变量flag为0,那么打印“查无此人!。如果flag的值为1怎进入下一级菜单,通过switch语句来选择是修改这个人的宿舍栋号、房间号、性别、班级、校区还是宿舍类别。修改完成后通过调用Print函数输出修改后的新的所有学生信息。每次修改成功之后可通过选择“是或者“否来选择是否继续修改学生信息。IV删除模块程序通过定义一个变量num,来确定输入到底是学号还是XX,或者退出删除模块。通过一个for循环来确定数据库到底是否含有此人的信息。如果含有此人的信息,那么通过一个for循环,把这个以后的信息依次前推来覆盖这个人的信息,而实现此人信息的删除。如果不含此人的信息,那么打印“查无此人
17、!。每次删除完毕之后通过选择“是或者“否来选择是否继续删除学生信息。V.查询模块程序通过输入一个变量num来实现是按学号还是按XX来查找,或者退出查询。当输入完学号或者XX的时候,再通过一个for循环来实现此人信息的查找。当含有这个人的信息的时候,把标识变量flag赋值为1,并立即输出此人信息。如果不含这个人的信息的时候,标识变量flag仍为0。再通过一个if 语句,如果标识变量flag为0,那么打印“查无此人!。用while循环保证程序在模块中查询。每次查询完毕之后通过选择“是或者“否来选择是否继续查询学生信息。VI统计模块:程序通过输入一个变量t来选择是按校区、宿舍栋号统计该栋入住学生人数
18、还是按班级统计入住某栋的人数,或者退出统计模块。再通过一个for循环来实现目标信息的查找。定义标识变量flag,在for循环查找信息前赋值为零。当每找到一个目标信息的时,把标识变量flag赋值为1,用变量num累加人数并并把此人信息赋给另一个构造体成员。如果不含这个人的信息的时,标识变量flag仍为0。最后输出统计的人数并通过for语句输出这些学生的信息,再通过一个if 语句,如果标识变量flag为0,那么打印出“查无此信息!。每次统计完毕之后可通过选择“是或者“否来选择是否继续统计其他学的信息信息。VII排序模块:程序运用起泡排序方法从第一个数开场依次对相邻两数进展比较,如次序对那么不进展任
19、何操作;如次序不对那么使这两个数交换位置。第一遍的N-1次比较后,最大数已放在最后,第二遍只需考虑N-1个数,以此类推直到第N-1遍后就可以完成排序。对所有学生按宿舍类别进展升序排列,并通过调用Print函数输出排序后的数据。五程序调试如果运行程序,将出现如下的界面,即程序主菜单:I.显示模块:输入1,并按回车键,程序将进入显示模块的菜单二级菜单,界面如下:如果输入1并按回车,将显示出所有学生的所有信息,其输出界面如下:如果按任意键将退出,退回主菜单:II追加程序:在主菜单下输入2并回车,将进入追加程序菜单,其界面如下:输入2并回车,将开场进展追加学生信息:输入学生信息:输入学生信息后,按回车
20、将自动显示出追加的及原来的所有学生信息,并显示出是否继续追加学生信息,其界面如下:输入1并按回车,即选择继续追加学生信息,将出现追加程序的菜单:输入另一个学生的信息并回车,将自动显示出所有学生的信息,其界面如下:输入2并按回车,将显示出提示语“按任意键返回主菜单,界面如下:按任意键将退出追加程序返回主菜单。III.修改程序:在主菜单下输入3并回车进入修改程序下菜单:输入1并回车,即按学号查找并修改,程序将会提示输入学号:输入学号,如2112,回车,显示修改程序的下一级菜单,即修改选项:输入选择项,如2,将会提示进入下一步,即修改信息:输入修改信息并回车,将显示出经修改后所有学生的新信息,并出现
21、提示语句选项,是否继续修改,其界面如下:输入1并回车,即选择继续修改,将进入修改程序下的主菜单:输入2并回车,即选择按XX查找并修改。修改完成后选择继续修改,并按学号查找并修改,随便输入一个学号即数据库不存在的学生信息,将会显示提示信息查无此人!其界面如下:输入2并回车,即选择退出修改程序,程序将完成修改并返回主菜单。IV删除模块:在主菜单下输入2并回车,将进入删除程序的菜单下,其界面如下:输入1并回车,即选择按学号查找并删除,并输入一个学号回车,如输入2112,将自动显示出删除后新的学生信息,即不在存在学号为2112的学生信息:按任意键将进入下一步,即选择是否继续修改:输入1并回车,即选择继
22、续修改,将显示出删除程序的选择菜单:输入2,即按XX查找并修改,随意输入一个XX,即数据库不存在的学生信息,回车将显示出提示信息:查无结果! 其界面如下:V查询模块:在主菜单下输入5并回车,进入查询程序的选择菜单下,其界面如下:输入1并回车,即选择按学号查询,将出现提示语句,提示使用者输入学生学号。输入一个学生学号,如2021,回车,将显示出此学生的所有信息。并且提示使用者是否选择继续查询,其界面如下:选择继续查询将回到查询程序的选择菜单下。在查询程序的菜单下输入2并回车,即选择按XX查询,输入一个学生XX并回车,如司马懿追加的学生信息,将出现此人的所有信息,即也证明追加学生信息成功:选择继续
23、查询,并且按学号查询或按XX查询,随便输入一个数据,即数据库不存在的,如学号8970,将出现提示语句-查无此人!选择“否,即不继续查询,将完成信息的查询并退出查询程序返回主菜单。VI统计模块:在主菜单下输入6并回车,将进入统计模块的菜单下:输入1,即按校区、宿舍栋号统计该栋入住学生人数,并提示使用者输入相关信息:输入相关信息,如0,A中间用空格,回车将统计出人数和显示出这些学生的所有信息,并提示使用者下一步是否继续统计其他的数据:选择继续统计将返回统计程序下的菜单,输入2并回车,即选择按班级统计入住某栋的人数,并提示输入相关信息:输入相关信息并回车,将显示出统计出的人数和这些学生的所有信息:选
24、择继续统计返回菜单,选择1、2任一项,如选择1,即选择按班级统计入住某栋的人数,随意输入数据,即数据库不存在的,回车,将显示提示语句-查无此信息!其界面如下:选择“否完成统计返回主菜单。VII排序模块:在主菜单下输入7并回车进入排序程序下的菜单:输入2并回车,即选择按宿舍类别排列升序,将显示排序后的所有学生信息:按任意键返回主菜单。VIII退出模块:在主菜单下输入8并回车将显示出退出程序的界面:继续按任意键将退出整个程序,即退出学生宿舍管理系统。六.总结与体会说过“实践是检验真理的唯一标准。通过几天的课程设计,通过实践来理解和稳固理论知识,使我对C语言程序设计有了一个更加深入的认识,从刚开场的
25、初略了解到有了比较深入的认识,能够比较灵活的运用。C语言是一门比较灵活、有趣而且实践性非常强的课程,单从理论课上是难以领略到它的精华,我们只有从它的实践运用中,才能体会到了学习C语言的乐趣和好处。在课程设计的这段时间里,我学到了许多东西,同时也使我对以前学的东西有了一个更深更透彻的理解。比方:能够灵活的运用循环,switch语句,构造体的定义、引用、使用,指针的定义、使用等。虽然对C语言编程还有许多不明白,但这段时间我真的获易匪浅,原来理论课上一些没弄懂知识点通过上机实践差不多都弄懂了。课程设计也就是学以致用嘛,让自己了解自己所学怎样用于实际应用中。正所谓实践出真知,在实践中我们才能发现自己所
26、存在的问题和缺乏。在编程过程中总是出现这个或那个问题,比方说总是在scanf语句中少掉地址符“&,最终导致程序无法运行。这也源于自己平时没养成好的习惯,初心大意吧,以后得多多注意啊。在编程过程出现诸多问题是免不了的,不过还好最终通过与同学讨论或请教教师都一一解决了。为了与同学讨论解决问题,我甚至放弃了使用自己的电脑而去电子阅览室上机编程。在这次课程设计中,我再一次深深地体会到了了与别人合作交流的重要性,正所谓“众人拾柴火焰高。虽说每个人独立编程,但总少不了遇到问题,遇到问题就得解决啊。在与同学的交流讨论中,取长补短,不仅别人帮我解决了问题,同样我也帮别人解决了问题。我感觉自己的程序还算编得不错
27、,清楚美观,还许多特色。为了美观我特意把所有的界面上的菜单调到了中间。我自己定义了一个函数用于输出数据,而且是通过指针输出的。所以说整个程序所学的知识差不多我都用到了,用些知识可能不需要,但我还是想方法把它用进去,表达它的作用。可是遗憾的是最后程序通过我的修修改改,最终的辩论却出现了一些问题,有些不能运行。不过没什么,现在问题已经解决了,辩论出问题了,又何必在乎那个结果呢?应该看重的是整个过程。虽然课程设计很复杂,枯燥乏味,但我从没想到过放弃。高考都经历过来了,这又算得了什么呢?遇到困难时,不要轻言放弃,有毅力能做好事情。当然c语言课程设计确实很难,但是世上无难事只怕有心人,紧要关头不放弃,绝
28、望就会变成希望。任何困难都只不过是纸老虎,相信自己就一定能成功。课程设计也就是学以致用嘛,让自己了解自己所学怎样用于实际应用中。正所谓实践出真知,在实践中我们才能发现自己所存在的问题和缺乏。C语言的学习更是为我们以后学习的微机原理以及单片机原理奠定了根底。我们的专业是电子科学与技术,主要是跟电子产品打交道,后面用到C语言的地方还有许多,所以说,学好C语言,为我们以后专业知识的学习有很大好处。在学习C语言中更使我体会到了学习计算机技术的乐趣,我将更加努力多学,学好计算机技术。七参考文献:1. ?C语言程序设计? 主编 世清 大学 2. ?C语言程序设计实践教程? 主编 世清 大学八附件#incl
29、ude stdio.h#include string.h#include conio.hint N=0;struct stu char ssdh4; /*宿舍栋号*/ int fjh; /*房间号*/ long xh; /*学号*/ char name10; /*XX*/ char xb4; /*性别*/ char bj12; /*班级*/ char phone12; /*/ int xq; /*校区*/ int sslb; /*宿舍类别*/ s40;void Re_file() FILE *fp; fp=fopen(G:课题2ssxxk.txt,r); while( fscanf(fp,%s
30、n%dn%ldn%sn%sn%sn%sn%dn%dn,sN.ssdh,&sN.fjh,&sN.xh,sN.name,sN.xb,sN.bj,sN.phone,&sN.xq,&sN.sslb)!=EOF) N+; fclose(fp); void Wr_file()int i; FILE *fp; fp=fopen(G:课题2newssxxk.txt,w); for(i=0;iN;i+) fprintf(fp,%sn%dn%ldn%sn%sn%sn%sn%dn%dn,si.ssdh,si.fjh,si.xh,si.name,si.xb,si.bj,si.phone,si.xq,si.sslb);
31、 fclose(fp);void Print() /*输出函数*/struct stu *p;printf( *n); printf( 宿舍栋号 房间号 学号 XX 性别 班级 校区 宿舍类别n); printf( *n);for(p=s;pssdh,p-fjh,p-xh,p-name,p-xb,p-bj,p-phone,p-xq,p-sslb);void Disp() /*显示模块*/int num;printf( *n); printf( * *n); printf( * 1.显示学生信息 *n); printf( * *n); printf( * 2.退 出 *n); printf( *
32、 *n); printf( *n); printf(请选择:); scanf(%d,&num);switch(num)case 1:Print();case 2: printf(nn请按任意键退出!);getch();void Appe() /*追加模块*/ int num; printf( *n); printf( * *n); printf( * 1.追加学生信息 *n); printf( * *n); printf( * 2.退 出 *n); printf( * *n); printf( *n); printf(nn 请输入选项:);scanf(%d,&num);switch(num)c
33、ase 1: printf(请输入数据:n); printf( *n); printf( 宿舍栋号 房间号 学号 XX 性别 班级 校区 宿舍类别n); printf( *n);scanf(%s%d%ld%s%s%s%s%d%d,sN.ssdh,&sN.fjh,&sN.xh,sN.name,sN.xb,sN.bj,&sN.phone,&sN.xq,&sN.sslb);N+;printf(nn新数据如下表:nn);Print();printf(nn * 是否继续追加? *n);printf(nn * 1.是 * 2.否 * nnn); printf(请输入选项:); scanf(%d,&num)
34、;switch(num)case 1:Appe();break; case 2:printf( 按任意键返回主菜单!n);getch();return;case 2:printf( 按任意键返回主菜单!n);getch();break;void Modi() /*修改模块*/ int j,num1,num,k,t; long xuehao;char xingming4;int flag;printf( *n);printf( * *n);printf( * 1.按学号查找并修改 *n);printf( * *n);printf( * 2.按XX查找并修改 *n);printf( * *n);printf( * 3. 退 出 *n);printf( * *n);printf( *n); printf(nn 请输入你的选项:);scanf(%d,&num1);flag=0;if(num1=1)printf(n 请输入学号:); scanf(%ld,&xuehao);for(j=0;jN;j+)if(sj.xh=xuehao)flag=1;k=j;break;if(num1=2)printf(n 请输入XX:); scanf(%s,xingmin