寝室管理系统c语言.docx

上传人:b****7 文档编号:11499465 上传时间:2023-03-02 格式:DOCX 页数:26 大小:128.70KB
下载 相关 举报
寝室管理系统c语言.docx_第1页
第1页 / 共26页
寝室管理系统c语言.docx_第2页
第2页 / 共26页
寝室管理系统c语言.docx_第3页
第3页 / 共26页
寝室管理系统c语言.docx_第4页
第4页 / 共26页
寝室管理系统c语言.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

寝室管理系统c语言.docx

《寝室管理系统c语言.docx》由会员分享,可在线阅读,更多相关《寝室管理系统c语言.docx(26页珍藏版)》请在冰豆网上搜索。

寝室管理系统c语言.docx

寝室管理系统c语言

课程设计成绩

考勤成绩(%)

指导老师评语

报告及程序成绩(%)

总评成绩

指导老师签名:

《数据结构》

课程设计报告

学院(系):

电计系

班级:

软件一班

学生姓名:

董涛学号201020205114

指导教师:

李思莉

时间:

从2011年9月5日到2011年9月9日

课程设计题目

 

一、程序设计目标

建立数据文件,数据文件按关键字包含(姓名、学号、房号),本程序采用冒泡排序发排序,实现按照姓名首字母排序,学号排序,以及寝室号排序,因为查找时涉及相同姓名以及相同寝室号的情况,故查找采用的是顺序查找法,考虑到方便管理,故以一栋楼为对象,人数上限设为400,可设立外部程序调用每栋楼的数据,即可实现对全院是寝室管理。

姓名字符长度不能超过20,学号要12位数字,寝室号格式为X+5位数字,未按照规定输入时会自提示出错,然后退出程序,菜单选项分别有:

0,插入学员

插入学员能在指定的寝室中插入,输入寝室号,规定每个寝室住4人,如果该寝室人数已满,则会显示:

该寝室人数已满!

插入成功会提醒:

恭喜你已是该寝室成员。

该项功能将有助于小规模调寝室。

1,重新输入学员

重新输入学员。

功能是格式化原来记录,重新输入新成员,用于大规模的寝室调动。

2,删除记录

删除记录是输入学号进行删除,因为考虑到按照姓名删除会出现相同姓名的情况,故只设这种删除方式。

3,按照姓名查找

输入姓名后能查找该姓名的人的姓名,学号以及房号,相同姓名的人也会一起找到,并显示出来。

4,按照学号查找

输入学号,能准确快速的找到你要查找的记录。

一旦找到记录,就会即刻跳出循环,减少时间。

5,按照寝室号查找

输入寝室号,会显示该寝室里住的每个成员。

6,按照姓名排序

按照姓名的首字母排序。

从a到z。

7,按照学号排序

按照学号的大小排序。

从小到大。

8,按照寝室号排序

按照寝室号码的顺序排序,从小到大。

9,显示记录

打印出所有记录。

10,保存记录

保存记录到程序目录下的record.txt文件中。

11,加载记录

自动读取程序目录下的record.txt文件。

12,退出

退出整个程序。

1、问题描述

建立结构体,结构体元素有:

姓名,学号,寝室号。

用switch语句和循环语句实现程序的反复使用,用了结构体,排序,折半查找,问题关键在用折半查找法找出名字相同的人,寝室号相同的多个人,文件的保存和读取。

2、问题分析

排序直接比较字符的大小,折半查找查多个人:

用折半查找先找到其中一个人,然后再用那个人和相邻的人比较,相同的就打印出来。

由此解决了用折半查找,找出多个人的问题。

二、概要设计

利用switch语句将程序各个部分联系起来,函数相互调用,可实现交互作用。

1、数据结构:

姓名,学号,寝室号

2、程序模块:

12个功能模块+主程序+菜单选项

3、各模块之间的调用关系:

用主程序进入菜单选项,用switch语句连接所有功能函数,折半查找用了排序功能。

三、详细设计

模块的功能描述

 

流程框图

 

 

 

 

 

四、C源程序清单:

//1213.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"ctype.h"

#defineM400/*M为寝室总人数*/

typedefstruct/*定义一个结构体,存姓名,学号,寝室号*/

{

charname[20];/*姓名*/

charxuehao[20];/*学号*/

charfanghao[20];/*寝室号*/

}ADDRESS;

inttianjia(ADDRESSt[]);/*重新添加成员*/

intshanchu(ADDRESSt[],intn);/*删除寝室成员*/

intxingming(ADDRESSt[],intn);/*按照姓名查找*/

intxuehao(ADDRESSt[],intn);/*按照学号查找*/

intfanghao(ADDRESSt[],intn);/*按照寝室号查找*/

voidxingmingpx(ADDRESSt[],intn);/*按照姓名排序*/

voidxuehaopx(ADDRESSt[],intn);/*按照学号排序*/

voidfanghaopx(ADDRESSt[],intn);/*按照寝室号排序*/

voidxianshi(ADDRESSt[],intn);/*显示*/

voidsave(ADDRESSt[],intn);/*保存记录*/

intmenu_select();/*主菜单*/

intload(ADDRESSt[]);/*从外部加载文件记录*/

intadd(ADDRESSt[],intn);/*添加成员*/

voidmain()/*主函数*/

{

ADDRESSadr[M];/*定义一个结构体数组,M=400*/

intlength;/*成员个数*/

system("cls");/*清屏*/

for(;;)/*无限循环,实现重复操作*/

{

switch(menu_select())/*功能选项*/

{

case0:

length=add(adr,length);break;

case1:

length=tianjia(adr);break;

case2:

length=shanchu(adr,length);break;

case3:

xingming(adr,length);break;

case4:

xuehao(adr,length);break;

case5:

fanghao(adr,length);break;

case6:

xingmingpx(adr,length);break;

case7:

xuehaopx(adr,length);break;

case8:

fanghaopx(adr,length);break;

case9:

xianshi(adr,length);break;

case10:

save(adr,length);break;

case11:

length=load(adr);break;

case12:

exit(0);/*退出*/

}

}

}

intmenu_select()/*主菜单*/

{

chars[80],a;/*用s装选择的数字*/

intc;/*整形C*/

printf("pressanykeyentermenu......\n");

scanf("%s",&a);

system("cls");/*清屏*/

printf("**********welcometouseme!

************\n");

printf("*0,插入学员*\n");

printf("*1,重新输入学员*\n");

printf("*2,删除记录*\n");

printf("*3,按照姓名查找*\n");

printf("*4,按照学号查找*\n");

printf("*5,按照寝室号查找*\n");

printf("*6,按照姓名排序*\n");

printf("*7,按照学号排序*\n");

printf("*8,按照寝室号排序*\n");

printf("*9,显示记录*\n");

printf("*10,保存记录*\n");

printf("*11,加载记录*\n");

printf("*12,退出*\n");

printf("****************************************\n");

do{

printf("\n请选择:

");

scanf("%s",s);

c=atoi(s);/*将字符S转化为整数*/

}while(c<0||c>12);/*c的输入值在~12有效,否则一直选择*/

returnc;/*返回C值供switch用*/

}

inttianjia(ADDRESSt[])/*重新输入记录*/

{

chara;

inti,n;

system("cls");/*clrscr();/*清屏*/

printf("\n输入记录个数(到):

\n");

scanf("%d",&n);/*输入记录的个数*/

while(n<0||n>400)

{

printf("输入记录个数有误,请重新输入记录个数(到):

\n");

scanf("%d",&n);/*输入记录的个数*/

}

printf("输入记录:

\n");

printf("姓名学号寝室号\n");

printf("------------------------------------------------\n");

for(i=0;i

{

scanf("%s%s%s",t[i].name,t[i].xuehao,t[i].fanghao);

printf("------------------------------------------------\n");

if(strlen(t[i].name)>20)

{

printf("你输入的姓名有误,按任意键退出:

");

scanf("%s",&a);

exit

(1);

}

if(strlen(t[i].xuehao)!

=12)

{

printf("你输入的学号有误,按任意键退出:

");

scanf("%s",&a);

exit

(1);

}

if(strlen(t[i].fanghao)!

=6)

{

printf("你输入的寝室号有误,按任意键退出:

");

scanf("%s",&a);

exit

(1);

}

}

returnn;/*返回n的值*/

}

voidxianshi(ADDRESSt[],intn)/*显示记录*/

{

inti;

chara;

system("cls");/*clrscr();*/

if(n>M){/*当没有记录时,M为一个很大的随机数,利用此属性,解决没记录时点击显示出现乱码的BUG*/

printf("没有可以显示的类容,按任意键退出!

!

!

");

scanf("%s",&a);

exit

(1);

}

printf("\n******************************************\n");

printf("姓名学号寝室号\n");

printf("-----------------------------------------------\n");

for(i=0;i

printf("%-20s%-20s%-20s\n",t[i].name,t[i].xuehao,t[i].fanghao);

printf("-----------------------------------------------\n");

if((i+1)%10==0)/*以十个为一组,用-------分割开,便于观察*/

{

printf("----------------------------------------------\n");

}

printf("按任意键继续.......\n");/*按任意键继续*/

}

intshanchu(ADDRESSt[],intn)/*删除记录*/

{

chars[20];/*S存储姓名*/

intch=0;

inti,j,b=-1;

printf("请输入要删除的人的学号:

\n");/*请输入要删除的人的学号*/

scanf("%s",s);

for(i=0;i

{

if(strcmp(s,t[i].xuehao)==0)/*当输入的姓名和已找到姓名相同时,将i赋值b*/

{

b=i;

break;/*找到后就退出查找,节约时间*/

}

}

if(b!

=-1)/*如果b不为-1,那么执行删除命令*/

{

printf("要删除的记录为:

\n%-20s%-20s%-20s\n确认按:

1取消按:

0\n",t[b].name,t[b].xuehao,t[b].fanghao);/*打印出查找到的记录*/

scanf("%s",&ch);

if(ch=='1')/*确认删除*/

{

for(j=i+1;j

{

strcpy(t[j-1].name,t[j].name);

strcpy(t[j-1].xuehao,t[j].xuehao);

strcpy(t[j-1].fanghao,t[j].fanghao);

}

n--;/*n的值减一*/

}

elseprintf("已经取消操作\n");/*否则,取消操作*/

}

elseprintf("未找到你要删除的记录\n");/*如果B=0,未找到你要删除的记录*/

returnn;/*返回n的值*/

}

intxingming(ADDRESSt[],intn)/*按照姓名查找,二分查找法*/

{

chars[20];

inti=1,j=1;

intlow,mid,high;

printf("输入你要查找的人的姓名:

\n");/*输入你要查找的人的姓名*/

scanf("%s",s);

xingmingpx(t,n);

system("cls");/*清屏*/

low=0;high=n-1;

printf("你要查找的人是:

\n姓名学号寝室号\n----------------------------------------------------\n");

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(t[mid].name,s)==0)

{

printf("%-20s%-20s%-20s\n",t[mid].name,t[mid].xuehao,t[mid].fanghao);

while((strcmp(t[mid].name,t[mid+i].name))==0||(strcmp(t[mid].name,t[mid-j].name))==0){/*分别判断左右字符是否相同*/

if((strcmp(t[mid].name,t[mid+i].name))==0){/*如果右字符相同,打印出来,i++*/

printf("%-20s%-20s%-20s\n",t[mid+i].name,t[mid+i].xuehao,t[mid+i].fanghao);

i++;

}

if((strcmp(t[mid].name,t[mid-j].name))==0){/*如果左字符相同,打印出来,j++*/

printf("%-20s%-20s%-20s\n",t[mid-j].name,t[mid-j].xuehao,t[mid-j].fanghao);

j++;

}

}

break;

}

elseif(strcmp(t[mid].name,s)>0)high=mid-1;

elselow=mid+1;

}

if(strcmp(t[mid].name,s)!

=0)

printf("未找到记录\n");

return0;

}

intxuehao(ADDRESSt[],intn)/*按照学号查找*/

{

chars[20];

intlow,mid,high;

printf("输入你要查找的人的学号:

\n");/*输入你要查找的人的学号*/

scanf("%s",s);

xuehaopx(t,n);

system("cls");/*清屏*/

low=0;high=n-1;

printf("你要查找的人是:

\n姓名学号寝室号\n----------------------------------------------------\n");

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(t[mid].xuehao,s)==0)

{

printf("%-20s%-20s%-20s\n",t[mid].name,t[mid].xuehao,t[mid].fanghao);

break;

}

elseif(strcmp(t[mid].xuehao,s)>0)high=mid-1;

elselow=mid+1;

}

if(strcmp(t[mid].xuehao,s)!

=0)

printf("未找到记录\n");

return0;

}

 

intfanghao(ADDRESSt[],intn)/*按照寝室号码查找*/

{

chars[20];

inti=1,j=1;

intlow,mid,high;

printf("输入你要查找的寝室号码:

\n");/*输入你要查找的寝室号码*/

scanf("%s",s);

fanghaopx(t,n);

system("cls");/*清屏*/

low=0;high=n-1;

printf("你要查找的人是:

\n姓名学号寝室号\n----------------------------------------------------\n");

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(t[mid].fanghao,s)==0)

{

printf("%-20s%-20s%-20s\n",t[mid].name,t[mid].xuehao,t[mid].fanghao);

while((strcmp(t[mid].fanghao,t[mid+i].fanghao))==0||(strcmp(t[mid].fanghao,t[mid-j].fanghao))==0)/*分别判断左右字符是否相同*/

{

if((strcmp(t[mid].fanghao,t[mid+i].fanghao))==0){/*如果右字符相同,打印出来,i++*/

printf("%-20s%-20s%-20s\n",t[mid+i].name,t[mid+i].xuehao,t[mid+i].fanghao);

i++;

}

if((strcmp(t[mid].fanghao,t[mid-j].fanghao))==0){/*如果左字符相同,打印出来,j++*/

printf("%-20s%-20s%-20s\n",t[mid-j].name,t[mid-j].xuehao,t[mid-j].fanghao);

j++;

}

}

break;

}

elseif(strcmp(t[mid].fanghao,s)>0)high=mid-1;

elselow=mid+1;

}

if(strcmp(t[mid].fanghao,s)!

=0)

printf("未找到记录\n");

return0;

}

voidxingmingpx(ADDRESSt[],intn)/*按照姓名排序*/

{

inti,j;

ADDRESStemp;/*结构体temp*/

for(i=0;i

{

for(j=0;j

{

if(strcmp(t[i].name,t[j].name)<0)

{

strcpy(temp.name,t[i].name);

strcpy(t[i].name,t[j].name);

strcpy(t[j].name,temp.name);

strcpy(temp.xuehao,t[i].xuehao);

strcpy(t[i].xuehao,t[j].xuehao);

strcpy(t[j].xuehao,temp.xuehao);

strcpy(temp.fanghao,t[i].fanghao);

strcpy(t[i].fanghao,t[j].fanghao);

strcpy(t[j].fanghao,temp.fanghao);

}

}

}

printf("排序成功!

!

!

\n");/*排序成功*/

}

voidxuehaopx(ADDRESSt[],intn)/*按照学号排序*/

{

inti,j;

ADDRESStemp;

for(i=0;i

{

for(j=0;j

{

if(strcmp(t[i].xuehao,t[j].xuehao)<0)

{

strcpy(temp.name,t[i].name);

strcpy(t[i].name,t[j].name);

strcpy(t[j].name,temp.name);

strcpy(temp.xuehao,t[i].xuehao);

strcpy(t[i].xuehao,t[j].xuehao);

strcpy(t[j].xuehao,temp.xuehao);

strcpy(temp.fanghao,t[i].fanghao);

strcpy(t[i].fanghao,t[j].fanghao);

strcpy(t[j].fanghao,temp.fanghao);

}

}

}

printf("排序成功!

!

!

\n");

}

voidfanghaopx(ADDRESSt[],intn)/*按照寝室号查找*/

{

inti

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

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1