宿舍管理系统c语言设计
- 格式:doc
- 大小:272.00 KB
- 文档页数:35
河南工程学院《数据结构》课程设计成果报告姓名学号学院计算机学院专业班级计算机科学与技术1521专业课程数据结构指导老师李芳2016年6月20日河南工程学院计算机学院课程设计报告书课程设计题目:课程设计时间:6月20日~6月24日课程设计地点: 计算机学院1201课程设计单位: 计算机学院指导教师: 李芳学院院长: 曲宏山目录目录1 设计目标 (1)2 课题分析1ﻩ2、1需求分析 (1)2、2 存储结构设计....................................... 22、3算法设计及其分析2ﻩ2、4程序流程图11ﻩ3程序清单12ﻩ4系统测试 ............................................. 304、1测试数据30ﻩ4、2测试结果31ﻩ5总结 ................................................. 33 5、1收获 .. (33)5、2不足 ............................................. 335、3算法改进分析...................................... 331 设计目标随着计算机技术得发展以及网络得发展,对学生宿舍得管理与控制越来越实用并且得到管理者得证实,无论就是查询还就是修改都有很方便,查询得信息一目了然。
这个程序包含了学生宿舍信息得录入、修改,学生楼栋信息得录入、毕业生得退舍、智能分配宿舍等功能,但不能进行删除得操作,总体来说使用简单方便。
这个程序应该满足以下几个要求:(1)信息得输入:需要建立起完整得宿舍信息数据库,从而实现通过输入学生入住得楼栋号、宿舍号,该宿舍入住得人数以及入住得学生得信息(包括学生得姓名、学号与系别),来添加学生信息,实现信息录入。
(2)信息得修改:进行信息输入后,过一段时间后,想要对里面得信息进行修改,可以通过学号等关键字对其进行修改。
(3)信息得查询:这个程序应该可以实现通过按学号或房号进行查找得过程。
在此使用得就是折半法,查找过程就是:先确定待查记录所在得范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。
这样可以缩短查找时间,同时还可以减少查找得次数。
(4)退出程序:当完成了所有得操作之后就要进行退出操作了。
2 课题分析2、1需求分析学生宿舍管理就是一个很大得项目,在早期,还没有利用计算机管理时,一切都就是利用人工进行管理得,这样管理起来既烦琐又复杂,资料也很容易被丢失,而且耗时、耗资金。
而利用本系统,可以高效地对学生宿舍进行统一管理与控制,资料也不容易被丢失,这样大大节省了人力与资源,提高了管理效率,给管理人员带来很多方便,基于以上分析有如下分析:(1)要实现交互工作方式,各项操作结束后均应返回主菜单。
(2)系统本无任何信息数据,要建立数据文件,需要开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们开发信息存盘功能;(3)信息录入后都要保存在内存中,用户瞧不到,需要设计一个信息显示功能,信息得显示应该便于查询,所以需要具备按各种关键字显示得功能;(4)由于有些新同学入校,所以设计了插入功能;(5)当用户操作完毕需要退出时,提供了退出选项,便于使用者退出交互式工作系统2、2 存储结构设计本系定义得存储结构为顺序存储结构,结构体为typedefstruct{ﻩchar ID[20]; //学号char name[20]; //姓名ﻩchargender[10]; //性别ﻩchar dormitory[4];//宿舍号}Student;typedef struct{char ID[4]; //宿舍号ﻩint max_num; //可容纳人数ﻩint current_num; //已入住人数ﻩchar gender[10];//男舍或女舍2、3算法设计及其分析在此系统中,根据对查阅资料得了解,我们对宿舍人员得信息以及各种函数进行了定义,具体如下:(1)将宿舍人员信息定义为一个名字为typedef struct得结构体,其中包括charID{20},charname[20],cahr gender[10],chard ormitory[4]分别表示学号、姓名、性别与宿舍号,将宿舍信息定义为一个名字为typedef struct得结构体,其中包括char ID[4],char m ax_num,char current_num,char gender[10],分别就是宿舍号、可容纳人数、已入住人数、男舍或者女舍。
(2)功能函数加上主函数一共有十二个,功能函数包括create(),open(),insert_dorm(),insert_stu(),dormnumsearch(),change(),namese arch(),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);ﻩ}ﻩ}ﻩelseﻩprintf("文件已存在!\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;ﻩintflag = 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(){ﻩintflag = 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(){ﻩintflag=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];chardorm_num[20];ﻩlonglocate, 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程序流程图#define _CRT_SECURE_NO#include<stdio、h>#include<stdlib、h>#include<string、h>typedefstruct{char ID[20]; //学号ﻩchar name[20]; //姓名ﻩchar gender[10]; //性别chardormitory[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);ﻩ}ﻩ}ﻩelseﻩprintf("文件已存在!\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;intflag= 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(){intflag =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");}elseﻩﻩprintf("不存在该宿舍记录!!\n");fclose(_fp);fclose(fp);}voidchange(){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->gende r, 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];ﻩlonglocate, 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];chardor_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;ﻩ}}ﻩ}ﻩelseﻩprintf("\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->dor mitory);ﻩﻩ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->gen der, 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\t9 ---------------- 房号查询\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 男舍小李男1110 男舍小王男4、2测试结果(1)新增楼栋(2)新增宿舍(3)新增学生宿舍信息5总结5、1收获通过这次实验,我拓宽了知识面,锻炼了能力,同时使个人得综合素质得到较大提高。