宿舍管理系统c语言设计.docx

上传人:b****3 文档编号:11671904 上传时间:2023-06-02 格式:DOCX 页数:39 大小:212.05KB
下载 相关 举报
宿舍管理系统c语言设计.docx_第1页
第1页 / 共39页
宿舍管理系统c语言设计.docx_第2页
第2页 / 共39页
宿舍管理系统c语言设计.docx_第3页
第3页 / 共39页
宿舍管理系统c语言设计.docx_第4页
第4页 / 共39页
宿舍管理系统c语言设计.docx_第5页
第5页 / 共39页
宿舍管理系统c语言设计.docx_第6页
第6页 / 共39页
宿舍管理系统c语言设计.docx_第7页
第7页 / 共39页
宿舍管理系统c语言设计.docx_第8页
第8页 / 共39页
宿舍管理系统c语言设计.docx_第9页
第9页 / 共39页
宿舍管理系统c语言设计.docx_第10页
第10页 / 共39页
宿舍管理系统c语言设计.docx_第11页
第11页 / 共39页
宿舍管理系统c语言设计.docx_第12页
第12页 / 共39页
宿舍管理系统c语言设计.docx_第13页
第13页 / 共39页
宿舍管理系统c语言设计.docx_第14页
第14页 / 共39页
宿舍管理系统c语言设计.docx_第15页
第15页 / 共39页
宿舍管理系统c语言设计.docx_第16页
第16页 / 共39页
宿舍管理系统c语言设计.docx_第17页
第17页 / 共39页
宿舍管理系统c语言设计.docx_第18页
第18页 / 共39页
宿舍管理系统c语言设计.docx_第19页
第19页 / 共39页
宿舍管理系统c语言设计.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

宿舍管理系统c语言设计.docx

《宿舍管理系统c语言设计.docx》由会员分享,可在线阅读,更多相关《宿舍管理系统c语言设计.docx(39页珍藏版)》请在冰点文库上搜索。

宿舍管理系统c语言设计.docx

宿舍管理系统c语言设计

河南工程学院

 

《数据结构》课程设计

成果报告

 

姓名

学号

学院计算机学院

专业班级计算机科学与技术1521

专业课程数据结构

指导老师李芳

2016年6月20日

河南工程学院计算机学院

课程设计报告书

 

课程设计题目:

 

课程设计时间:

6月20日~6月24日

课程设计地点:

计算机学院1201

课程设计单位:

计算机学院

 

指导教师:

李芳学院院长:

曲宏山

 

本组组长

夏少峰

本组成员

夏少峰、丁宏阁、曲宣榕

设计题目

宿舍管理查询系统

本人分工

资料查询,设计思路、算法设计、部分代码编制、

代码调试

考核项目

考核内容

得分

平时考核

(30分)出勤情况、态度、效率、协作精神;知识掌握情况、基本操作技能、知识应用能力、获取知识能力

设计思想

(20分)需求分析能力,算法分析设计能力

编码、调试分析

(30分)编制代码能力,调试分析能力

文档资料

(20分)表达能力、文档写作能力和文档的规范性

总评成绩

指导教师评语:

 

等级:

评阅人:

职称:

副教授

年月日

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存储结构设计

本系定义的存储结构为顺序存储结构,结构体为

typedefstruct{

charID[20];//学号

charname[20];//姓名

chargender[10];//性别

chardormitory[4];//宿舍号

}Student;

typedefstruct{

charID[4];//宿舍号

intmax_num;//可容纳人数

intcurrent_num;//已入住人数

chargender[10];//男舍或女舍

2.3算法设计及其分析

在此系统中,根据对查阅资料的了解,我们对宿舍人员的信息以及各种函数进行了定义,具体如下:

(1)将宿舍人员信息定义为一个名字为typedefstruct的结构体,其中包括charID{20},charname[20],cahrgender[10],chardormitory[4]分别表示学号、姓名、性别和宿舍号,将宿舍信息定义为一个名字为typedefstruct的结构体,其中包括charID[4],charmax_num,charcurrent_num,chargender[10],分别是宿舍号、可容纳人数、已入住人数、男舍或者女舍。

(2)功能函数加上主函数一共有十二个,功能函数包括create(),open(),insert_dorm(),insert_stu(),dormnumsearch(),change(),namesearch(),check_out(),numsearch(),exchange(),display(),main(),分别用新增楼栋,新增宿舍信息,新增学生入住宿舍信息,毕业生退舍,互换宿舍,姓名查询,学号查询,宿舍号查询,互换宿舍,调换宿舍,职能分配宿舍,退出本系统的功能。

(3)在主函数中,使用一个while语句来选择调用主菜单中的各个功能函数。

由于本人负责新增宿舍楼栋,新增宿舍信息,新增学生宿舍信息的功能,所以操作如下:

单击数字键“0”则为新增楼栋信息

单击数字键“1”则为新增宿舍信息

单击数字键“2”则为新增学生宿舍信息

在每次操作前都要输入相应的编号。

各功能函数的具体实现如下:

voidcreate(){

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

}

voidopen(){

printf("请输入学生宿舍所在楼栋:

\n");

scanf("%s",);

_fp=fopen(,"rb+");

fp=fopen(strcat(,"学生"),"rb+");

if(fp==NULL||_fp==NULL){

printf("open!

\n");

exit(-1);

}

}

voidinsert_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);

}

voidinsert_stu(){

longlocate,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);

}

voidchange(){

intflag=0,tag=0;

longlocate,locate_b,locate_c;

charinput_stunum[20];

charinput_dormnum[4];

charprevious_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);

}

voidnamesearch(){

intflag=0,tag=0;

longlocate;

charinput_name[20];

chardor_num[4];

charID[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);

}

voidcheck_out(){

charstu_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程序流程图

 

3程序清单

#define_CRT_SECURE_NO_WARNINGS

#include

#include

#include

 

typedefstruct{

charID[20];//学号

charname[20];//姓名

chargender[10];//性别

chardormitory[4];//宿舍号

}Student;

typedefstruct{

charID[4];//宿舍号

intmax_num;//可容纳人数

intcurrent_num;//已入住人数

chargender[10];//男舍或女舍

}Dormitory;

char[20];

FILE*fp;//学生信息文件指针

FILE*_fp;//宿舍信息文件指针

voidcreate(){

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

}

voidopen(){

printf("请输入学生宿舍所在楼栋:

\n");

scanf("%s",);

_fp=fopen(,"rb+");

fp=fopen(strcat(,"学生"),"rb+");

if(fp==NULL||_fp==NULL){

printf("open!

\n");

exit(-1);

}

}

voidinsert_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);

}

voidinsert_stu(){

longlocate,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+

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2