宿舍管理系统c语言设计
宿舍管理系统c语言课程设计

宿舍管理系统c语言课程设计一、背景介绍宿舍管理系统是一种为学校宿舍管理人员提供便利的软件系统。
本系统旨在通过计算机技术的应用,实现对宿舍信息、学生信息、入住情况等数据的管理和统计,提高宿舍管理工作效率和服务质量。
二、需求分析1. 功能需求(1)管理员登录:管理员需要输入用户名和密码才能登录系统。
(2)学生信息录入:管理员可以添加、修改和删除学生信息,包括姓名、性别、年龄、联系方式等。
(3)宿舍信息录入:管理员可以添加、修改和删除宿舍信息,包括宿舍号码、楼层、床位数等。
(4)学生入住登记:管理员可以登记学生入住情况,包括选择宿舍房间号码,记录入住时间等。
(5)查询统计功能:管理员可以查询学生信息、宿舍信息以及入住情况,并进行统计分析。
2. 性能需求本系统需要具有较高的安全性和稳定性,保证数据的完整性和可靠性。
同时,在用户界面设计上要简洁明了,易于操作。
三、设计方案1. 系统架构本系统采用客户端/服务器模式,将客户端与服务器分离,实现系统的分布式部署。
客户端负责用户界面的展示和用户输入的响应,服务器负责数据存储和处理。
2. 数据库设计本系统需要设计三个数据库表:学生信息表、宿舍信息表和入住情况表。
学生信息表包括学生姓名、性别、年龄、联系方式等字段;宿舍信息表包括宿舍号码、楼层、床位数等字段;入住情况表包括学生姓名、宿舍号码、入住时间等字段。
3. 界面设计本系统的用户界面需要简洁明了,易于操作。
采用菜单式界面设计,将各个功能模块以菜单形式呈现,方便用户进行选择。
四、开发实现1. 开发环境本系统采用C语言进行开发,使用Visual Studio 2019作为开发工具。
数据库采用MySQL。
2. 关键技术(1)C语言编程技术:C语言是一种高效的编程语言,在系统开发中具有广泛应用。
(2)MySQL数据库技术:MySQL是一种常用的关系型数据库管理系统,在数据存储和处理方面具有很好的性能。
(3)网络编程技术:客户端/服务器模式需要使用网络编程技术实现客户端与服务器之间的通信。
宿舍管理系统c语言

#include"stdio.h"int main_menu_select() /*主菜单选择*/ {char s;printf("\n1 Administrator in charge of the students and books' information\n");printf("\n2 Administrator in charge of lend books\n");printf("\n3 Administrator in charge of receive books\n");printf("\n4 Student\n");printf("\n5 Guest\n");printf("\n6 exit\n\n");printf("\n input 1-6 to choice the function\n");do{s=getche();printf("\n");}while(s<49||s>54);return s;}int administrator_menu_select() /*管理员菜单选择*/ {int s;printf("input 1-6 to choice the function\n");printf("1 input the information of books\n");printf("2 recompose the information of the books\n");printf("3 cancel the information of books \n");printf("4 input the information of students\n");printf("5 recompose information of the students\n");printf("6 cancel the information of students\n");printf("7 return main menu\n");printf("8 exit\n\n" );do{s=getche();printf("\n");}while(s<49||s>56);return s;}hello_main() /*返回主菜单*/ {for(; ;){switch(main_menu_select()){case 49:adm_information();break;case 51:printf("hellooo");break;case 52:printf("helloooo");break;case 53:printf("hellooooo");break;case 54:printf("Goodbye!");exit(0);}}}hello_adm_menu() /*返回管理员功能选择菜单*/ {for(; ;){switch(administrator_menu_select()){case 49:books_information_input();break;case 50:printf("Student\n");break;case 51:printf("Guest\n");break;case 52:students_information_input();break;case 53:printf("Guest of gentleman\n");break;case 54:printf("hahha");break;case 55:hello_main();break;case 56:printf("Goodbye!");exit(0);}}}struct /*图书结构体*/ {int number;char name[20];char press[20];char writer[20];int price;}books[200];struct /*学生结构体*/ {int number;char name[20];char sex[6];int grade;}students[200];adm_information() /*管理员菜单*/ {for(; ;){switch(administrator_menu_select()){case 49:books_information_input();break;case 51:printf("Guest\n");break;case 52:students_information_input();break;case 53:printf("Guest of gentleman\n");break;case 54:printf("hahha");break;case 55:hello_main();break;case 56:printf("Goodbye!");exit(0);}}}int books_information_input() /*图书信息输入函数*/ {int m,i,s;char h;printf("input the number of the books you want to operate:");scanf("%d",&m);for(i=1;i<m+1;i++){printf("please input the %dth book's number:",i);scanf("%d",&books[i].number);printf("\n please input the %dth book's name:",i);scanf("%s",books[i].name);printf("\n please input the %dth book's press:",i);scanf("%s",books[i].press);printf("\n please input the %dth book's writer:",i);scanf("%s",books[i].writer);printf("\n please input the %dth book's price:",i);scanf("%d",&books[i].price);printf("\n\n");}printf("\ninformation of the students has been inputed\n");printf("1 to return higher menu\n"); /*返回上一级菜单,即管理员选择功能菜单*/h=getche();if(h==1)hello_adm_menu();}students_information_input() /*学生信息输入函数*/ {int m,i,s;printf("input the number of the students you want to operate:");scanf("%d",&m);for(i=1;i<m+1;i++){printf("\nplease input the %dth student's number:",i);scanf("%d",&students[i].number);printf("\n please input the %dth student's name:",i);scanf("%s",students[i].name);printf("\n please input the %dth student's sex:",i);scanf("%s",students[i].sex);printf("\n please input the %dth student's grade:",i);scanf("%d",&students[i].grade);}printf("\ninformation of the books has been inputed\n\n"); }main(){for(; ;){switch(main_menu_select()){case 49:adm_information();break;case 50:printf("helloo");break;case 51:printf("hellooo");break;case 52:printf("helloooo");break;case 53:printf("hellooooo");break;case 54:printf("Goodbye!");exit(0);}}}。
c语言课课程设计宿舍管理

c语言课课程设计宿舍管理一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握C语言的基本语法和编程技巧,了解宿舍管理系统的需求和功能,并能够运用C语言实现简单的宿舍管理系统。
2.技能目标:学生能够运用所学的C语言知识,进行编程实践,培养解决问题的能力和创新思维。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,增强学生自主学习的能力和团队合作意识。
在制定教学目标时,充分考虑了课程性质、学生特点和教学要求,将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容本节课的教学内容主要包括以下几个部分:1.C语言基本语法和编程技巧,包括变量、数据类型、运算符、控制结构等。
2.宿舍管理系统的需求分析和功能介绍。
3.使用C语言实现宿舍管理系统的基本功能。
教学内容的选择和确保了科学性和系统性,详细的教学大纲明确了教学内容的安排和进度,教材的章节和列举的内容也与教学目标相符合。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,包括:1.讲授法:讲解C语言的基本语法和编程技巧。
2.案例分析法:通过分析宿舍管理系统的需求和功能,引导学生运用C语言进行编程实践。
3.实验法:学生在实验室进行编程实践,培养解决问题的能力和创新思维。
通过多样化的教学方法,使学生能够在实践中掌握C语言的知识和技能。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,本节课将使用以下教学资源:1.教材:C语言编程教程,用于讲解C语言的基本语法和编程技巧。
2.多媒体资料:包括宿舍管理系统的需求分析和功能介绍的PPT,以及相关的编程案例和实验指导书。
3.实验设备:计算机和网络设备,用于学生进行编程实践和实验。
通过以上教学资源的选择和准备,能够有效地支持教学活动的开展,提高学生的学习效果。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本节课将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和理解程度。
c语言课程设计宿舍管理

c语言课程设计宿舍管理一、课程目标知识目标:1. 学生能够理解C语言在开发宿舍管理系统中的应用,掌握基本的数据类型、变量定义、运算符、控制结构等基础知识。
2. 学生能够掌握C语言中的数组、函数、指针等高级概念,并能运用到宿舍管理系统的设计与实现中。
3. 学生能够通过课程学习,了解文件操作在C语言中的实现,实现对宿舍管理数据的存储和读取。
技能目标:1. 学生能够运用C语言编写简单的宿舍管理系统程序,实现宿舍基本信息录入、查询、修改和删除等功能。
2. 学生能够通过课程实践,掌握编程规范,养成良好的编程习惯,提高解决问题的能力。
3. 学生能够通过小组合作,培养团队协作能力和沟通能力,共同完成宿舍管理系统的设计与实现。
情感态度价值观目标:1. 学生能够认识到编程在现实生活中的应用价值,激发对计算机科学的兴趣和热情。
2. 学生能够在课程学习过程中,培养耐心、细心和勇于克服困难的品质,增强自信心。
3. 学生能够通过课程学习,认识到团队合作的重要性,树立正确的价值观,尊重他人的贡献。
本课程针对高中年级学生,结合C语言课程特点,注重理论与实践相结合,以宿舍管理系统为实际案例,引导学生掌握C语言基础知识,培养编程技能和团队协作能力。
课程目标具体、可衡量,旨在使学生在完成课程学习后,能够独立完成简单的宿舍管理系统设计与实现,为后续计算机课程学习打下坚实基础。
二、教学内容1. C语言基础知识回顾:- 数据类型、变量定义、常量- 运算符、表达式、赋值语句- 控制结构:顺序结构、选择结构、循环结构2. C语言高级概念:- 数组:一维数组、二维数组- 函数:函数定义、调用、参数传递、递归- 指针:指针定义、指针与数组、指针与函数3. 文件操作:- 文件打开与关闭- 文件读写操作- 文件定位4. 宿舍管理系统设计与实现:- 系统需求分析- 功能模块设计:宿舍信息录入、查询、修改、删除- 编程实现各功能模块5. 课程实践与团队协作:- 编程规范与调试技巧- 小组合作完成宿舍管理系统- 成果展示与评价教学内容依据课程目标,结合教材相关章节,确保科学性和系统性。
c语言宿舍管理系统课程设计

c语言宿舍管理系统课程设计一、课程目标知识目标:1. 理解C语言在开发宿舍管理系统中的应用,掌握基本的数据类型、语法和结构;2. 学会使用数组、结构体、文件操作等C语言特性进行数据处理和存储;3. 掌握模块化编程思想,理解函数的定义、调用和参数传递。
技能目标:1. 能够运用所学知识,设计并实现一个简单的宿舍管理系统;2. 培养学生分析问题、解决问题的能力,通过编写代码解决宿舍管理中的实际问题;3. 提高学生的团队协作能力,通过小组合作完成课程设计。
情感态度价值观目标:1. 激发学生对编程的兴趣,培养其对计算机科学的热爱;2. 培养学生的耐心和毅力,使其在面对编程困难时保持积极的心态;3. 增强学生的责任感,使其认识到编程在解决实际问题中的重要性。
课程性质:本课程设计属于实践性课程,以培养学生的实际编程能力为目标。
学生特点:学生具备一定的C语言基础,对编程有一定兴趣,但实际操作经验不足。
教学要求:结合学生特点,以实用性为导向,注重培养学生的动手能力和团队协作精神。
通过课程设计,使学生将所学知识应用于实际项目中,提高其解决实际问题的能力。
课程目标分解为具体学习成果,以便于教学设计和评估。
二、教学内容1. C语言基础知识回顾:数据类型、运算符、表达式、控制结构(第二章)- 强化基本语法,为后续编程打下坚实基础。
2. 函数与模块化编程:函数的定义、调用、参数传递(第四章)- 培养学生模块化编程思想,提高代码复用性和可维护性。
3. 数组与字符串:一维数组、二维数组、字符串操作(第三章)- 为处理宿舍信息数据提供有效手段。
4. 结构体与文件操作:结构体定义、结构体数组、文件读写(第五章)- 实现对宿舍信息的存储和读取功能。
5. 宿舍管理系统功能设计:- 登录与权限管理(第六章)- 宿舍基本信息管理(第三章、第五章)- 学生信息管理(第三章、第五章)- 宿舍卫生管理(第三章、第五章)- 数据查询与统计(第四章)6. 项目实践与团队协作:- 将学生分组,每组负责一个模块的开发,提高团队协作能力;- 结合教材内容,按进度完成各个模块的设计与实现。
学生宿舍管理系统c程序

学生宿舍管理系统c程序
学生宿舍管理系统C程序的设计与实现
随着学校规模的不断扩大,学生宿舍管理面临着越来越多的挑战。
传统的手工管理方式已经无法满足现代化教学的需求。
因此,设计一款高效、便捷的学生宿舍管理系统变得至关重要。
本文将介绍一个基于C语言的学生宿舍管理系统,并详细阐述其设计与实现过程。
学生宿舍管理系统的功能主要包括:学生信息管理、宿舍信息管理、宿舍入住管理、宿舍退房管理以及宿舍报修管理等。
为了实现这些功能,我们设计了以下几个模块:
1、学生信息管理模块:该模块主要用于维护学生信息,包括姓名、学号、性别、年龄、联系方式等。
通过输入学生信息,可以快速查询和更新学生的基本信息。
2、宿舍信息管理模块:该模块主要用于维护宿舍信息,包括宿舍号、房间号、住宿人数等。
通过输入宿舍信息,可以快速查询和更新宿舍的基本情况。
3、宿舍入住管理模块:该模块主要用于管理学生的入住情况,包括入住时间、入住原因等。
通过输入入住信息,可以实时掌握宿舍的入住情况。
4、宿舍退房管理模块:该模块主要用于管理学生的退房情况,包括
退房时间、退房原因等。
通过输入退房信息,可以实时掌握宿舍的退房情况。
5、宿舍报修管理模块:该模块主要用于管理宿舍的报修情况,包括报修时间、报修内容、维修进度等。
通过输入报修信息,可以及时了解宿舍的维修情况。
以下是基于以上设计的学生宿舍管理系统的C程序代码实现:。
学生宿舍管理系统设计c语言

学生宿舍管理系统设计c语言学生宿舍管理系统是一个有着多种功能的系统,它主要负责管理宿舍数据、学生数据、宿舍水电费用、宿舍安全、学生违纪以及宿舍管理员的工作等。
一个合理运行的宿舍管理系统可以使学生的宿舍生活更加安全、舒适、方便。
下面我将详细阐述如何设计一个基于C语言的学生宿舍管理系统。
1.需求分析首先需要进行需求分析,明确系统应该能够执行哪些功能。
包括宿舍的数据管理,包括了宿舍编号、宿舍地址、宿舍费用等;学生的数据管理,包括了学生姓名、学号、性别、联系方式等;宿舍安全,包括了监控系统、入宿控制、防火安全等;学生管理,包括了违纪记录的管理以及学生信息的管理等。
2.设计模块针对这些功能,我们需要设计相应的模块。
首先是数据管理模块,这个模块需要包括宿舍数据和学生数据两个类。
宿舍数据类可以包含如下内容:- 宿舍编号- 宿舍地址- 宿舍费用学生数据类可以包含如下内容:- 学号- 姓名- 性别- 联系方式接下来是安全模块,这个模块需要实现入宿控制、防火安全等功能,还应该有监控系统。
违纪管理模块应该能够记录学生的各种违纪行为,例如抽烟、喝酒、打架等,这个模块需要有一个记录表格。
最后是管理员模块,这个模块可以进行学生宿舍的分配、学生信息维护、违纪行为记录等管理工作。
3.实现代码在C语言中,我们可以使用结构体来实现上述模块。
例如宿舍数据类的代码可以写成:struct dormitory{char dorm_id[10];char dorm_address[30];float dorm_fee;};学生数据类的代码可以写成:struct student{char name[20];char id[10];char sex[10];char phone[20];};其他模块的代码同样可以类似地实现。
4.测试与完善在代码实现结束后,我们需要进行测试和完善。
测试可以先按照设计的需求,输入相应的数据来验证系统是否符合要求。
在测试中,我们需要注意各种输入可能引发的异常情况,例如空数据、重复数据等。
c语言寝室管理系统课程设计

c语言寝室管理系统课程设计一、教学目标本课程旨在通过C语言编程实现一个简单的寝室管理系统,让学生掌握C语言的基本语法、数据结构、文件操作等知识,培养学生的编程能力、逻辑思维能力和问题解决能力。
1.掌握C语言的基本语法和编程技巧。
2.了解数据结构的基本概念,学会使用结构体和数组。
3.掌握文件操作的方法,能编写简单的文件读写程序。
4.能够使用C语言编写简单的程序,实现对寝室信息的增删改查功能。
5.具备良好的编码习惯,能够编写清晰、规范的代码。
6.学会使用调试工具,能够独立排查和解决问题。
情感态度价值观目标:1.培养学生对编程的兴趣,增强自信心,培养克服困难的勇气。
2.培养学生团队合作精神,学会与人沟通和协作。
3.培养学生关注社会问题,提高社会责任感和使命感。
二、教学内容本课程的教学内容主要包括C语言基本语法、数据结构、文件操作等。
1.C语言基本语法:介绍C语言的数据类型、运算符、控制语句、函数等基本知识。
2.数据结构:讲解结构体、数组、链表等基本数据结构的概念和应用。
3.文件操作:讲解文件打开、关闭、读写等基本文件操作方法。
4.寝室管理系统实现:通过实际项目案例,引导学生运用所学知识编写程序,实现对寝室信息的增删改查功能。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法。
1.讲授法:通过讲解C语言的基本语法、数据结构和文件操作等知识,使学生掌握基本概念和编程方法。
2.案例分析法:通过分析实际项目案例,引导学生运用所学知识解决实际问题。
3.实验法:安排实验室实践环节,让学生动手编写程序,培养学生的实际编程能力和问题解决能力。
四、教学资源1.教材:《C程序设计语言》(K&R)或《C语言入门到精通》等。
2.参考书:《C Primer Plus》、《C语言深度探索》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、编程调试工具等。
教学资源应根据实际教学需求进行选择和准备,以支持教学内容和教学方法的实施,提高学生的学习体验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南工程学院《数据结构》课程设计成果报告姓名学号学院计算机学院专业班级计算机科学与技术 1521专业课程数据结构指导老师李芳2016年6月20日河南工程学院计算机学院课程设计报告书课程设计题目:课程设计时间:6月20日~6月24日课程设计地点:计算机学院1201课程设计单位:计算机学院指导教师:李芳学院院长:曲宏山目录目录1 设计目标 (1)2 课题分析 (1)2.1需求分析 (1)2.2 存储结构设计 (2)2.3 算法设计及其分析 (2)2.4程序流程图 (11)3程序清单 (12)4系统测试 (30)4.1测试数据 (30)4.2测试结果 (31)5总结 (33)5.1收获 (33)5.2不足 (33)5.3算法改进分析 (33)1 设计目标随着计算机技术的发展以及网络的发展,对学生宿舍的管理与控制越来越实用并且得到管理者的证实,无论是查询还是修改都有很方便,查询的信息一目了然。
这个程序包含了学生宿舍信息的录入、修改,学生楼栋信息的录入、毕业生的退舍、智能分配宿舍等功能,但不能进行删除的操作,总体来说使用简单方便。
这个程序应该满足以下几个要求:(1)信息的输入:需要建立起完整的宿舍信息数据库,从而实现通过输入学生入住的楼栋号、宿舍号,该宿舍入住的人数以及入住的学生的信息(包括学生的姓名、学号和系别),来添加学生信息,实现信息录入。
(2)信息的修改:进行信息输入后,过一段时间后,想要对里面的信息进行修改,可以通过学号等关键字对其进行修改。
(3)信息的查询:这个程序应该可以实现通过按学号或房号进行查找的过程。
在此使用的是折半法,查找过程是:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
这样可以缩短查找时间,同时还可以减少查找的次数。
(4)退出程序:当完成了所有的操作之后就要进行退出操作了。
2 课题分析2.1需求分析学生宿舍管理是一个很大的项目,在早期,还没有利用计算机管理时,一切都是利用人工进行管理的,这样管理起来既烦琐又复杂,资料也很容易被丢失,而且耗时、耗资金。
而利用本系统,可以高效地对学生宿舍进行统一管理与控制,资料也不容易被丢失,这样大大节省了人力与资源,提高了管理效率,给管理人员带来很多方便,基于以上分析有如下分析:(1)要实现交互工作方式,各项操作结束后均应返回主菜单。
(2)系统本无任何信息数据,要建立数据文件,需要开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们开发信息存盘功能;(3)信息录入后都要保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查询,所以需要具备按各种关键字显示的功能;(4)由于有些新同学入校,所以设计了插入功能;(5)当用户操作完毕需要退出时,提供了退出选项,便于使用者退出交互式工作系统2.2 存储结构设计本系定义的存储结构为顺序存储结构,结构体为typedef struct{char ID[20]; //学号char name[20]; //姓名char gender[10]; //性别char dormitory[4]; //宿舍号}Student;typedef struct{char ID[4]; //宿舍号int max_num; //可容纳人数int current_num; //已入住人数char gender[10]; //男舍或女舍2.3 算法设计及其分析在此系统中,根据对查阅资料的了解,我们对宿舍人员的信息以及各种函数进行了定义,具体如下:(1)将宿舍人员信息定义为一个名字为typedef struct的结构体,其中包括char ID{20},char name[20],cahr gender[10],char dormitory[4]分别表示学号、姓名、性别和宿舍号,将宿舍信息定义为一个名字为typedef struct的结构体,其中包括char ID[4],char max_num,char current_num,char gender[10],分别是宿舍号、可容纳人数、已入住人数、男舍或者女舍。
(2)功能函数加上主函数一共有十二个,功能函数包括create(),open(),insert_dorm(),insert_stu(),dormnumsearch(),change(),namesearch(),check_out(),numsearch(),exchange(),display(),main(),分别用新增楼栋,新增宿舍信息,新增学生入住宿舍信息,毕业生退舍,互换宿舍,姓名查询,学号查询,宿舍号查询,互换宿舍,调换宿舍,职能分配宿舍,退出本系统的功能。
(3)在主函数中,使用一个while语句来选择调用主菜单中的各个功能函数。
由于本人负责新增宿舍楼栋,新增宿舍信息,新增学生宿舍信息的功能,所以操作如下:单击数字键“0”则为新增楼栋信息单击数字键“1”则为新增宿舍信息单击数字键“2”则为新增学生宿舍信息在每次操作前都要输入相应的编号。
各功能函数的具体实现如下:void create(){printf("\n请输入新增楼栋名称:\n");scanf("%s", );_fp = fopen(, "rb+");if (_fp == NULL){ //如果文件不存在则建立文件否则提示文件已存在_fp = fopen(, "wb+");fp = fopen(strcat(, "学生"), "wb+");if (fp == NULL || _fp == NULL){printf(" open!\n");exit(-1);}}elseprintf("文件已存在!\n");fclose(fp);fclose(_fp);}void open(){printf("请输入学生宿舍所在楼栋:\n");scanf("%s", );_fp = fopen(, "rb+");fp = fopen(strcat(, "学生"), "rb+");if (fp == NULL || _fp == NULL){printf(" open!\n");exit(-1);}}void insert_dorm(){Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):\n");scanf("%s", d->ID);while (strcmp(d->ID, "#")){scanf("%d %d %s", &d->max_num, &d->current_num, d->gender);fwrite(d, sizeof(Dormitory), 1, _fp);scanf("%s", d->ID);}fclose(_fp);fclose(fp);}void insert_stu(){long locate, pre_locate;int flag = 0;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):\n");scanf("%s", s->ID);while (strcmp(s->ID, "#")){ //不相等继续读取,相等为0便退出循环不再读取数据scanf("%s %s %s", s->name, s->gender, s->dormitory);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, s->dormitory)){ //每增加一个学生,相应寝室的实际人数应当增加一个fseek(_fp, locate, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);flag = 1;break;}locate = ftell(_fp);}if (flag == 0){printf("不存在该宿舍!\n");exit(-1);}fwrite(s, sizeof(Student), 1, fp);rewind(_fp);scanf("%s", s->ID);}fclose(_fp);fclose(fp);}void change(){int flag = 0, tag = 0;long locate, locate_b, locate_c;char input_stunum[20];char input_dormnum[4];char previous_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要调换宿舍学生学号:\n");scanf("%s", input_stunum);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_stunum, s->ID)){flag = 1;printf("该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcmp(previous_dormnum, s->dormitory);printf("\n请输入新宿舍的宿舍号:\n");scanf("%s", input_dormnum);locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){tag = 1;if (d->current_num == d->max_num)printf("该宿舍已满员!");else{//更换学生宿舍信息fseek(fp, locate, SEEK_SET);strcpy(s->dormitory, input_dormnum);fwrite(s, sizeof(Student), 1, fp);//更换新宿舍信息fseek(_fp, locate_b, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);rewind(_fp);//更换旧宿舍信息locate_c = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(previous_dormnum, d->ID)){fseek(_fp, locate_c, SEEK_SET);d->current_num--;fwrite(d, sizeof(Dormitory), 1, _fp);break;}locate_c = ftell(_fp);}}break;}locate_b = ftell(_fp);}if (tag == 0){printf("不存在该宿舍!");exit(-1);}break;}locate = ftell(fp);}if (flag == 0)printf("\n不存在该学生!\n");fclose(_fp);fclose(fp);}void namesearch(){int flag = 0, tag = 0;long locate;char input_name[20];char dor_num[4];char ID[20];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的姓名:\n");scanf("%s", input_name);while (fread(s, sizeof(Student), 1, fp)){locate = ftell(fp); //记录下按名字搜索到达的位置if (!strcmp(input_name, s->name)){flag = 1;printf("\n学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcpy(dor_num, s->dormitory);strcpy(ID, s->ID);rewind(fp); //指针重置于文件头,查找室友printf("\n其室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){ //室友宿舍号相同,学号不同if ((!strcmp(dor_num, s->dormitory)) && (strcmp(s->ID, ID))){printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender, s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");tag = 0;while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}//break;}//同名情况if (flag)fseek(fp, locate, SEEK_SET);}if (flag == 0)printf("\n没有符合条件的学生的记录!\n");fclose(_fp);fclose(fp);}void check_out(){char stu_num[20];char dorm_num[20];long locate, locate_b;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入退宿学生学号:\n");scanf("%s", stu_num);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){// locate=ftell(fp);if (!strcmp(s->ID, stu_num)){strcpy(dorm_num, s->dormitory);fseek(fp, locate, SEEK_SET);memset(s, 0, sizeof(Student));fwrite(s, sizeof(Student), 1, fp);2.4程序流程图3程序清单#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char ID[20]; //学号char name[20]; //姓名char gender[10]; //性别char dormitory[4]; //宿舍号}Student;typedef struct{char ID[4]; //宿舍号int max_num; //可容纳人数int current_num; //已入住人数char gender[10]; //男舍或女舍}Dormitory;char [20];FILE *fp; //学生信息文件指针FILE *_fp; //宿舍信息文件指针void create(){printf("\n请输入新增楼栋名称:\n");scanf("%s", );_fp = fopen(, "rb+");if (_fp == NULL){ //如果文件不存在则建立文件否则提示文件已存在_fp = fopen(, "wb+");fp = fopen(strcat(, "学生"), "wb+");if (fp == NULL || _fp == NULL){printf(" open!\n");exit(-1);}}elseprintf("文件已存在!\n");fclose(fp);fclose(_fp);}void open(){printf("请输入学生宿舍所在楼栋:\n");scanf("%s", );_fp = fopen(, "rb+");fp = fopen(strcat(, "学生"), "rb+");if (fp == NULL || _fp == NULL){printf(" open!\n");exit(-1);}}void insert_dorm(){Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入宿舍号,可容纳学生数,已容纳学生数,男舍/女舍(空格隔开,‘#’结束):\n");scanf("%s", d->ID);while (strcmp(d->ID, "#")){scanf("%d %d %s", &d->max_num, &d->current_num, d->gender);fwrite(d, sizeof(Dormitory), 1, _fp);scanf("%s", d->ID);}fclose(_fp);fclose(fp);}void insert_stu(){long locate, pre_locate;int flag = 0;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别、宿舍号(空格隔开,‘#’结束):\n");scanf("%s", s->ID);while (strcmp(s->ID, "#")){ //不相等继续读取,相等为0便退出循环不再读取数据scanf("%s %s %s", s->name, s->gender, s->dormitory);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, s->dormitory)){ //每增加一个学生,相应寝室的实际人数应当增加一个fseek(_fp, locate, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);flag = 1;break;}locate = ftell(_fp);}if (flag == 0){printf("不存在该宿舍!\n");exit(-1);}fwrite(s, sizeof(Student), 1, fp);rewind(_fp);scanf("%s", s->ID);}fclose(_fp);fclose(fp);}void dormnumsearch(){int flag = 0, tag = 0;char input_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("请输入需要搜索的宿舍号:\n");scanf("%s", input_dormnum);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){flag = 1;printf("\n寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num, d->current_num,d->gender);break;}}if (flag){printf("该宿舍学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_dormnum, s->dormitory)){tag = 1;printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);}}if (tag == 0)printf("\n该宿舍没有学生入住!\n");}elseprintf("不存在该宿舍记录!!\n");fclose(_fp);fclose(fp);}void change(){int flag = 0, tag = 0;long locate, locate_b, locate_c;char input_stunum[20];char input_dormnum[4];char previous_dormnum[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要调换宿舍学生学号:\n");scanf("%s", input_stunum);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_stunum, s->ID)){flag = 1;printf("该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcmp(previous_dormnum, s->dormitory);printf("\n请输入新宿舍的宿舍号:\n");scanf("%s", input_dormnum);locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(input_dormnum, d->ID)){tag = 1;if (d->current_num == d->max_num)printf("该宿舍已满员!");else{//更换学生宿舍信息fseek(fp, locate, SEEK_SET);strcpy(s->dormitory, input_dormnum);fwrite(s, sizeof(Student), 1, fp);//更换新宿舍信息fseek(_fp, locate_b, SEEK_SET);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);rewind(_fp);//更换旧宿舍信息locate_c = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(previous_dormnum, d->ID)){fseek(_fp, locate_c, SEEK_SET);d->current_num--;fwrite(d, sizeof(Dormitory), 1, _fp);break;}locate_c = ftell(_fp);}}break;}locate_b = ftell(_fp);}if (tag == 0){printf("不存在该宿舍!");exit(-1);}break;}locate = ftell(fp);}if (flag == 0)printf("\n不存在该学生!\n");fclose(_fp);fclose(fp);}void namesearch(){int flag = 0, tag = 0;long locate;char input_name[20];char dor_num[4];char ID[20];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的姓名:\n");scanf("%s", input_name);while (fread(s, sizeof(Student), 1, fp)){locate = ftell(fp); //记录下按名字搜索到达的位置if (!strcmp(input_name, s->name)){flag = 1;printf("\n学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);strcpy(dor_num, s->dormitory);strcpy(ID, s->ID);rewind(fp); //指针重置于文件头,查找室友printf("\n其室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名","性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){ //室友宿舍号相同,学号不同if ((!strcmp(dor_num, s->dormitory)) && (strcmp(s->ID, ID))){printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender, s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");tag = 0;while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}//break;}//同名情况if (flag)fseek(fp, locate, SEEK_SET);}if (flag == 0)printf("\n没有符合条件的学生的记录!\n");fclose(_fp);fclose(fp);}void check_out(){char stu_num[20];char dorm_num[20];long locate, locate_b;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入退宿学生学号:\n");scanf("%s", stu_num);locate = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){// locate=ftell(fp);if (!strcmp(s->ID, stu_num)){strcpy(dorm_num, s->dormitory);fseek(fp, locate, SEEK_SET);memset(s, 0, sizeof(Student));fwrite(s, sizeof(Student), 1, fp);break;}locate = ftell(fp);}locate_b = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(d->ID, dorm_num)){fseek(_fp, locate_b, SEEK_SET);d->current_num--;//printf("111\n");//printf("%d\n",d->current_num);fwrite(d, sizeof(Dormitory), 1, _fp);printf("删除成功!\n");break;}locate_b = ftell(_fp);}fclose(_fp);fclose(fp);}void numsearch(){int flag = 0, tag = 0;char input_num[20];char dor_num[4];Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入需要搜索的学号:\n");scanf("%s", input_num);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_num, s->ID)){flag = 1;printf("\n该学生信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);break;}}strcpy(dor_num, s->dormitory);if (flag){rewind(fp);printf("\n室友信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");while (fread(s, sizeof(Student), 1, fp)){if ((!strcmp(dor_num, s->dormitory)) && strcmp(input_num, s->ID)){ printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);tag = 1;}}if (tag == 0)printf("\n没有室友!\n");while (fread(d, sizeof(Dormitory), 1, _fp)){if (!strcmp(dor_num, d->ID)){printf("\n该学生所在寝室信息如下:\n%-20s%-20s%-20s%-20s\n", "宿舍号", "可容纳学生数", "已容纳学生数", "男舍/女舍");printf("%-20s%-20d%-20d%-20s\n", d->ID, d->max_num,d->current_num, d->gender);break;}}}elseprintf("\n没有该学生的记录!\n");fclose(_fp);fclose(fp);}void exchange(){int flag = 0, tag = 0;long locate_a, locate_b;char input_ID_a[20];char input_ID_b[20];char dor_num[4];Student *s = (Student*)malloc(sizeof(Student));Student *_s = (Student*)malloc(sizeof(Student));open();printf("\n请输入需要互换宿舍学生A的学号:\n");scanf("%s", input_ID_a);printf("\n请输入需要互换宿舍学生B的学号:\n");scanf("%s", input_ID_b);locate_a = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_a, s->ID)){printf("\n学生A信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);flag = 1;break;}locate_a = ftell(fp);}rewind(fp);locate_b = ftell(fp);while (fread(_s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_b, _s->ID)){printf("\n学生B信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", _s->ID, _s->name, _s->gender,_s->dormitory);tag = 1;break;}locate_b = ftell(fp);}if (flag == 0 || tag == 0){printf("不存在A同学或B同学记录!");exit(-1);}else{strcpy(dor_num, s->dormitory);strcpy(s->dormitory, _s->dormitory);strcpy(_s->dormitory, dor_num);//locate_a=locate_a-sizeof(Student);fseek(fp, locate_a, 0);fwrite(s, sizeof(Student), 1, fp);// locate_b=locate_b-sizeof(Student);fseek(fp, locate_b, 0);fwrite(_s, sizeof(Student), 1, fp);}printf("更换宿舍后:\n");rewind(fp);locate_a = ftell(fp);while (fread(s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_a, s->ID)){printf("\n学生A信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", s->ID, s->name, s->gender,s->dormitory);break;}locate_a = ftell(fp);}locate_b = ftell(fp);while (fread(_s, sizeof(Student), 1, fp)){if (!strcmp(input_ID_b, _s->ID)){printf("\n学生B信息如下:\n%-20s%-20s%-20s%-20s\n", "学号", "姓名", "性别", "宿舍号");printf("%-20s%-20s%-20s%-20s\n", _s->ID, _s->name, _s->gender,_s->dormitory);break;}locate_b = ftell(fp);}fclose(_fp);fclose(fp);}void display(){long locate;Student *s = (Student*)malloc(sizeof(Student));Dormitory * d = (Dormitory*)malloc(sizeof(Dormitory));open();printf("\n请输入学号、姓名、性别:\n");scanf("%s %s %s", s->ID, s->name, s->gender);locate = ftell(_fp);while (fread(d, sizeof(Dormitory), 1, _fp)){if (d->max_num = d->current_num){strcpy(s->dormitory, d->ID);fwrite(s, sizeof(Student), 1, fp);fseek(_fp, locate, 0);d->current_num++;fwrite(d, sizeof(Dormitory), 1, _fp);printf("分配的宿舍是:");printf("%s\n", s->dormitory);break;}locate = ftell(fp);}fclose(_fp);fclose(fp);}int main(){int select, flag = 1; //flag为0则退出程序while (flag){printf("\t\t------------------------------------------------------\n");printf("\t\t\t 学生宿舍管理系统\n\n");printf("\t\t\t 0 ---------------- 新增楼栋\n");printf("\t\t\t 1 ---------------- 新增宿舍信息\n");printf("\t\t\t 2 ---------------- 新增学生住宿信息\n");printf("\t\t\t 3 ---------------- 互换宿舍\n");printf("\t\t\t 4 ---------------- 调换宿舍\n");printf("\t\t\t 5 ---------------- 学生毕业退宿\n");printf("\t\t\t 6 ---------------- 智能分配宿舍\n");printf("\t\t\t 7 ---------------- 学号查询\n");printf("\t\t\t 8 ---------------- 姓名查询\n");printf("\t\t\t 9 ---------------- 房号查询\n");printf("\t\t\t 10 ---------------- 退出系统\n");printf("\t\t------------------------------------------------------\n"); printf("请输入你的操作编号(0~10):");scanf("%d", &select);switch (select){case 0:create();break;case 1:insert_dorm();break;case 2:insert_stu();break;case 3:exchange();break;case 4:change();break;case 5:check_out();break;case 6:display();break;case 7:numsearch();break;case 8:namesearch();break;case 9:dormnumsearch();break;case 10:return 0;defaut:break;}}return 0;}4系统测试4.1测试数据(1)程序启动时的界面(2)测试的数据楼栋号宿舍号男舍/女舍学生姓名性别1 110 男舍小明男1 110 男舍小张男1 110 男舍小李男1 110 男舍小王男4.2测试结果(1)新增楼栋(2)新增宿舍(3)新增学生宿舍信息5总结5.1收获通过这次实验,我拓宽了知识面,锻炼了能力,同时使个人的综合素质得到较大提高。