寝室管理系统c语言.doc_第1页
寝室管理系统c语言.doc_第2页
寝室管理系统c语言.doc_第3页
寝室管理系统c语言.doc_第4页
寝室管理系统c语言.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计成绩考勤成绩( %)指导老师评语报告及程序成绩( %)总评成绩指导老师签名:数据结构课 程 设 计 报 告 学院(系): 电计系 班 级: 软件一班 学生姓名: 董涛 学号 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语句连接所有功能函数,折半查找用了排序功能。三、详细设计菜单模块的功能描述室号查找学号查找姓名查找重新输入删除插入退出显示室号排序学号排序姓名排序保存加载流程框图开始13请选择输入s(012)Switch121011098765432130输入数据,姓名输入数据,姓名,学号,寝室号输入学号重新输入学员,姓名,学号,寝室号113按照姓名查找,二分查找法132插入学员,在数据最后面插入,n+13删除记录13重新输入学员,格式化所以记录后插入输入学员学号134按照学号查找,二分查找法,二分查找法3输入学员姓名按照姓名查找,二分查找法13513输入寝室号按照寝室查找,二分查找法6姓名排序,冒泡排序法31339138显示记录。挨个扫描打印寝室号排序,冒泡排序法137学号排序,冒泡排序法1312结束程序,exit(1)结束1310保存记录,保存到record.txt13读取record.txt中的数据11四、C源程序清单:/ 1213.cpp : Defines the entry point for the console application./#include stdafx.h#include stdio.h#include stdlib.h#include string.h#include ctype.h#define M 400/*M为寝室总人数*/typedef struct/*定义一个结构体,存姓名,学号,寝室号*/ char name20;/*姓名*/ char xuehao20;/*学号*/ char fanghao20;/*寝室号*/ADDRESS;int tianjia(ADDRESS t);/*重新添加成员*/ int shanchu(ADDRESS t,int n);/*删除寝室成员*/ int xingming(ADDRESS t,int n);/*按照姓名查找*/ int xuehao(ADDRESS t,int n);/*按照学号查找*/ int fanghao(ADDRESS t,int n);/*按照寝室号查找*/ void xingmingpx(ADDRESS t,int n);/*按照姓名排序*/ void xuehaopx(ADDRESS t,int n);/*按照学号排序*/ void fanghaopx(ADDRESS t,int n);/*按照寝室号排序*/ void xianshi(ADDRESS t,int n);/*显示*/ void save(ADDRESS t,int n);/*保存记录*/ int menu_select();/*主菜单*/int load(ADDRESS t);/*从外部加载文件记录*/int add(ADDRESS t,int n);/*添加成员*/void main()/*主函数*/ ADDRESS adrM;/*定义一个结构体数组,M=400*/ int length;/*成员个数*/ system(cls);/*清屏*/ for(;)/*无限循环,实现重复操作*/ switch(menu_select()/*功能选项*/ case 0:length=add(adr,length);break; case 1:length=tianjia(adr);break; case 2:length=shanchu(adr,length);break; case 3:xingming(adr,length);break; case 4:xuehao(adr,length);break; case 5:fanghao(adr,length);break; case 6:xingmingpx(adr,length);break; case 7:xuehaopx(adr,length);break; case 8:fanghaopx(adr,length);break; case 9:xianshi(adr,length);break; case 10:save(adr,length);break; case 11:length=load(adr);break; case 12:exit(0);/*退出*/ int menu_select()/*主菜单*/ char s80,a;/*用s装选择的数字*/ int c;/*整形C*/ printf(press any key enter menu .n);scanf(%s,&a); system(cls);/*清屏*/ printf( *welcome to use me!*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(c12);/*c的输入值在12有效,否则一直选择*/ return c;/*返回C值供switch用*/int tianjia(ADDRESS t)/*重新输入记录*/char a; int i,n; system(cls);/* clrscr();/*清屏*/ printf(n 输入记录个数(到):n); scanf(%d,&n);/*输入记录的个数*/while(n400)printf(输入记录个数有误,请重新输入记录个数(到):n);scanf(%d,&n);/*输入记录的个数*/ printf(输入记录:n); printf(姓名 学号 寝室号n); printf(-n); for(i=0;i20) printf(你输入的姓名有误,按任意键退出:);scanf(%s,&a);exit(1);if(strlen(ti.xuehao)!=12)printf(你输入的学号有误,按任意键退出:);scanf(%s,&a);exit(1);if(strlen(ti.fanghao)!=6)printf(你输入的寝室号有误,按任意键退出:);scanf(%s,&a);exit(1); return n;/*返回n的值*/void xianshi(ADDRESS t,int n)/*显示记录*/ int i;char a; system(cls);/* clrscr();*/if(nM)/*当没有记录时,M为一个很大的随机数,利用此属性,解决没记录时点击显示出现乱码的BUG*/printf(没有可以显示的类容,按任意键退出!); scanf(%s,&a); exit(1); printf(n*n); printf(姓名 学号 寝室号n); printf(-n); for(i=0;in;i+)/*按照结构体数组的顺序输出记录*/ printf(%-20s%-20s%-20sn, ,ti.xuehao ,ti.fanghao );printf(-n); if(i+1)%10=0)/*以十个为一组,用-分割开,便于观察*/ printf(-n); printf(按任意键继续.n);/*按任意键继续*/int shanchu(ADDRESS t,int n)/*删除记录*/ char s20;/*S存储姓名*/ int ch=0; int i,j,b=-1; printf(请输入要删除的人的学号:n);/*请输入要删除的人的学号*/ scanf(%s,s); for(i=0;in;i+)/*利用循环挨个扫描*/ if(strcmp(s,ti.xuehao)=0)/*当输入的姓名和已找到姓名相同时,将i赋值b*/ b=i; break;/*找到后就退出查找,节约时间*/ if(b!=-1)/*如果b不为-1,那么执行删除命令*/ printf(要删除的记录为:n%-20s%-20s%-20sn确认按: 1 取消按: 0n,,tb.xuehao,tb.fanghao);/*打印出查找到的记录*/ scanf(%s,&ch); if(ch=1)/*确认删除*/ for(j=i+1;jn;j+)/*删除该条记录后,后面的全部上移一位*/ strcpy(,); strcpy(tj-1.xuehao,tj.xuehao); strcpy(tj-1.fanghao,tj.fanghao); n-;/*n的值减一*/ else printf(已经取消操作n);/*否则,取消操作*/ else printf(未找到你要删除的记录n);/*如果B=0,未找到你要删除的记录*/ return n;/*返回n的值*/ int xingming(ADDRESS t,int n)/*按照姓名查找,二分查找法*/ char s20; int i=1,j=1; int low,mid,high; printf(输入你要查找的人的姓名:n);/*输入你要查找的人的姓名*/ scanf(%s,s); xingmingpx(t,n); system(cls);/*清屏*/ low=0;high=n-1; printf(你要查找的人是:n姓名学号寝室号n-n); while (low0) high=mid-1;else low=mid+1; if(strcmp(,s)!=0) printf(未找到记录n); return 0;int xuehao(ADDRESS t,int n)/*按照学号查找*/ char s20; int low,mid,high; printf(输入你要查找的人的学号:n);/*输入你要查找的人的学号*/ scanf(%s,s); xuehaopx(t,n); system(cls);/*清屏*/ low=0;high=n-1; printf(你要查找的人是:n姓名学号寝室号n-n); while (low0) high=mid-1;else low=mid+1; if(strcmp(tmid.xuehao,s)!=0) printf(未找到记录n); return 0;int fanghao(ADDRESS t,int n)/*按照寝室号码查找*/ char s20; int i=1,j=1; int low,mid,high; printf(输入你要查找的寝室号码:n);/*输入你要查找的寝室号码*/ scanf(%s,s); fanghaopx(t,n); system(cls);/*清屏*/ low=0;high=n-1; printf(你要查找的人是:n姓名学号寝室号n-n); while (low0) high=mid-1;else low=mid+1; if(strcmp(tmid.fanghao,s)!=0) printf(未找到记录n); return 0;void xingmingpx(ADDRESS t,int n) /*按照姓名排序*/int i,j;ADDRESS temp;/*结构体temp*/for(i=0;in;i+)/*利用冒泡法排序*/ for(j=0;jn;j+)/*/ if(strcmp(,)0) strcpy(,); strcpy(,); strcpy(,); strcpy(temp.xuehao,ti.xuehao); strcpy(ti.xuehao,tj.xuehao); strcpy(tj.xuehao,temp.xuehao); strcpy(temp.fanghao,ti.fanghao); strcpy(ti.fanghao,tj.fanghao); strcpy(tj.fanghao,temp.fanghao); printf(排序成功!n);/*排序成功*/void xuehaopx(ADDRESS t,int n)/*按照学号排序*/int i,j;ADDRESS temp;for(i=0;in;i+)/*冒泡法排序*/ for(j=0;jn;j+) if(strcmp(ti.xuehao,tj.xuehao)0) strcpy(,); strcpy(,); strcpy(,); strcpy(temp.xuehao,ti.xuehao); strcpy(ti.xuehao,tj.xuehao); strcpy(tj.xuehao,temp.xuehao); strcpy(temp.fanghao,ti.fanghao); strcpy(ti.fanghao,tj.fanghao); strcpy(tj.fanghao,temp.fanghao); printf(排序成功!n);void fanghaopx(ADDRESS t,int n)/*按照寝室号查找*/int i,j;ADDRESS temp;for(i=0;in;i+)/*冒泡排序法排序*/ for(j=0;jn;j+) if(strcmp(ti.fanghao,tj.fanghao)0) strcpy(,); strcpy(,); strcpy(,); strcpy(temp.xuehao,ti.xuehao); strcpy(ti.xuehao,tj.xuehao); strcpy(tj.xuehao,temp.xuehao); strcpy(temp.fanghao,ti.fanghao); strcpy(ti.fanghao,tj.fanghao); strcpy(tj.fanghao,temp.fanghao); printf(排序成功!n);void save(ADDRESS t,int n)/*保存文件*/int i;FILE *fp;/*设定文件指针*/if(fp=fopen(record.txt,wb)=NULL)/*以写的方式打开一个txt文件*/printf(不能打开文件n);/*如果为空,则打印不能打开文件,然后退出*/exit(1);printf(n 保存文件.nnn);/*保存文件*/fprintf(fp,%d,n);/*结构体个数写入文件*/fprintf(fp,rn);fclose(fp);/*关闭文件*/printf(*保存文件成功!*n);int load(ADDRESS t)/*加载文件*/int i,n;FILE *fp;if(fp=fopen(record.txt,rb)=NULL)/*打开目录下的txt文件*/printf(不能打开文件n);/*为空时打开失败*/exit(1);fscanf(fp,%d,&n);/*读取n值*/for(i=0;i20) printf(你输入的姓名有误,按任意键退出:n);scanf(%s,&a);exit(1);if(strlen(temp.xuehao)!=12)printf(你输入的学号有误,按任意键退出:n);scanf(%s,&a);exit(1);if(strlen(temp.fanghao)!=6)printf(你输入的寝室号有误,按任意键退出:n);scanf(%s,&a);exit(1);for(i=0;i4)/*当a大于时,说明添加人失败*/printf(你选择的寝室已经住满人!n);else /*否则添加成功*/printf(恭喜你已经成为该寝室成员!n); strcpy(,); strcpy(tn.xuehao,temp.xuehao); strcpy(tn.fanghao,temp.fanghao);n+;/*n加一*/ return n;/*返回n值*/ 五、调试分析和测试结果测试数据:9Pd201020205119 x26510Zxj201020205113 x26512Ctt201020205224 x26512Cyc201020205223 x26514Dt201020205114 x26514Dt201020205000x26511Gg201020205115 x26514Yy201020205441 x26514Ttw201020205661 x26512输出测试的结果:0,插入学员:姓名字符长度不能超过20,学号要12位数字,寝室号格式为X+5位数字,n+,插入成功1,重新输入学员:姓名字符长度不能超过20,学号要12位数字,寝室号格式为X+5位数字,成功运行2,删除记录:删除成功,n-3,按照姓名查找:输入姓名,无此人时显示:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论