宿舍管理系统软件数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊一、题目名称:
宿舍管理查询软件
二、设计目的:
进一步掌握和利用C语言进行课程设计的能力,理解和运用结构化程设计的思想和方法,熟练掌握条件语句、循环、数组、函数操作,初步掌握开发一个小型实用系统的基本方法,学会高度一个较长程序的基本方法和利用流程图或N-S图表示算法,将本课程所学的知识合理地运用于实践当中。
了解一些书上没有的函数及使用方法。
三、设计分析:
1、需求分析
为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少不必要的人力、物力和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统——学生宿舍信息管理系统来进行管理学生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。
2、经济可行性分析
如今是信息化时代,信息化管理可以使学生宿舍管理更加系统化,全面化,快速化,这样可以为学校带来高效的工作效益和经济效益,开发出本系统可以减少宿舍管理人员人数,而且管理方便,各功能实现迅速,数据有效的管理。
这些效益和管理上的便捷远远超过了开发本系统的成本,所以在经济上具有完全的可行性。
四、总体设计:
根据系统要求,即本系统具有信息的录入,显示,查找,删除,从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分九个项目:输入记录、显示记录、按房间号排序并显示、按学号排序并显示、插入一条记录并按学号排序并显示、按姓名查找、删除一条记录、查找并显示一个记录、从文件中读入数据、循环写入数据以及结束程序。
五、详细设计:
1、系统流程图如图5-1所示
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
装
┊
┊
┊
┊
┊
订
┊
┊
┊
┊
┊
线
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
┊
图5-1 系统流程图
2、根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录
的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊输入主菜单如下:
输出("\t\t★★★★★★学生宿舍管理系统★★★★★★\n");
输出("\t\t§ 1. 输入记录§\n");
输出("\t\t§ 2. 显示记录§\n");
输出("\t\t§ 4. 按学号排序并显示§\n");
输出("\t\t§ 5. 插入一条记录按学号排序并显示§\n");
输出("\t\t§ 6. 按姓名查找,删除一条记录§\n");
输出("\t\t§ 7 查找并显示一个记录§\n");
输出("\t\t§ 8. 从文件中读入数据§\n");
输出("\t\t§ 9. 循环写入数据§\n");
输出("\t\t§ 0. 结束程序§\n");
输出("\t\t★★★★★★★★★★★★★★★★★★★★\n");
输出("\t\t请选择您要运行的选项按(0-9):");
将程序编译生成“学生宿舍管理系统.exe”。
运行该文件如图5-2所示。
图5-2 输出界面图
输入记录采用循环输入
while(sign!='n'&&sign!='N')
{
输出("\t\t房间号:");
输入("\t\t%s"&,room[n+i].roomnum);
输出("\t\t床位号:");
输入("\t\t%s",&room[n+i].bednum);
输出("\t\t学号:");
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
输入("\t\t%s",&room[n+i].num);
输出("\t\t姓名:");
输入("\t\t%s",&room[n+i].name);
gets(x); /*清除多余的输入*/
输出("\t\t是否继续输入?(Y/N)");
输入("\t\t%c",&sign);
i++;
}
返回(n+i);
}
按照提示选择“1”进行记录的输入如图5-3所示:
图5-3 输入记录显示图
按房间号排序采用冒泡排序法。
int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/ for(j=0;j<n-1-i;j++)
if(strcmp(room[j].roomnum,room[j+1].roomnum)>0) {
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
比较(t,room[j+1].roomnum);
比较(room[j+1].roomnum,room[j].roomnum);
比较(room[j].roomnum,t);
比较(t,room[j+1].bednum);
比较(room[j+1].bednum,room[j].bednum);
比较(room[j].bednum,t);
比较(t,room[j+1].num);
比较(room[j+1].num,room[j].num);
比较(room[j].num,t);
比较(t,room[j+1].name);
比较(room[j+1].name,room[j].name);
比较(room[j].name,t);}
}
连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图5-4所示。
图5-4 按房间号排序并显示图
按学号排序采用冒泡排序法
比较(t,room[j+1].bednum);
比较(room[j+1].bednum,room[j].bednum);
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
比较(room[j].bednum,t);
比较(t,room[j+1].num);
比较(room[j+1].num,room[j].num);
比较(room[j].num,t);
比较(t,room[j+1].name);
比较(room[j+1].name,room[j].name);
比较(room[j].name,t);}
显示后提示按任意键继续,选择“4”进行按学号排序并显示,如图5-5所示。
图5-5 按学号排序显示图
插入记录采用交互式输入:
输出("\t\t输入他(她)的姓名:");
输入("\t\t%s",&s);
while(strcmp(room[i].name,s)!=0&&i<n) i++;
如果(i==n)
{输出("\t\t对不起没找到该学生!\n");
return;}
输出("\t\t他(她)的房间号:%s\n",room[i].roomnum);
输出("\t\t他(她)的床位号:%s\n",room[i].bednum);
输出("\t\t他(她)的学号:%s\n",room[i].num);
显示后提示按任意键继续,选择“5”按提示步骤插入一条记录,如图5-6所示。
┊┊┊┊
┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
图5-6 插入一条记录图
六、系统测试
将源代码输入至编译环境中,将程序编译连接后生成“学生宿舍管理系统.exe”运行该文件,则显示主菜单:
1、输入记录
2、显示记录
3、按房间号排序并显示
4、按学号排序并显示
5、插入一条记录并按学号排序显示
6、按姓名查找,删除一条记录
7、查找并显示一个记录
8、从文件中读入数据
9、循环写入数据
0、结束程序
请选择您要运行的选项按(0-9):
按照提示选择“1”进行记录的输入,则在主菜单下显示:
输入记录
房间号:101
床位号:1
学号:21
姓名:xiaoning
是否继续输入?(Y/N)-
按N结束,按任意键后选择“2”进行记录的显示,则在主菜单下显示:房间号床位号学号姓名
101 1 21 xiaoning
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
314 2 12 xiaozhang
203 2 32 xiaoli
417 5 41 xiaowang
请按任意键继续……
选择“5”插入一条记录,则在主菜单下显示:
学生房间号:513
学生床位号:4
学生学号:52
学生姓名:xiaoguan
插入记录成功!
房间号床位号学号姓名
101 1 21 xiaoning
314 2 12 xiaozhang
203 2 32 xiaoli
417 5 41 xiaowang
513 4 52 xiaoguan
请按任意键继续……
七、结论
这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。
学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。
如果使次系统再详细些,需添加更多的管理员以及管理员权限,还有学生的更多信息,如果有必要的话,添加一些有关教师的信息,以及教师登录的界面。
在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。
只有思想上清晰了,编程才有意义,否则就是白费力气。
同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。
这次课程设计培养了我的细心和耐性,更树立了一种科学
的态度。
附录:源代码
#include<stdio.h> /*引用库函数*/
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定义结构体数组*/
{
char roomnum[4]; /*房间号*/
char bednum[2]; /*床位号*/
char num[10]; /*学号*/
char name[20]; /*姓名*/
}
Student;
Student room1[1000]; /*结构体数组变量*/
int menu_select() /*菜单函数*/
{
char c;
do{system("cls"); /*运行前清屏*/
printf("\t\t★★★★★★学生宿舍管理系统★★★★★★\n"); /*菜单选择*/ printf("\t\t§ 1. 输入记录§\n");
printf("\t\t§ 2. 显示记录§\n");
printf("\t\t§ 4. 按学号排序并显示§\n");
printf("\t\t§ 5. 插入一条记录按学号排序并显示§\n");
printf("\t\t§ 6. 按姓名查找,删除一条记录§\n");
printf("\t\t§ 7 查找并显示一个记录§\n");
printf("\t\t§ 8. 从文件中读入数据§\n");
printf("\t\t§ 9. 循环写入数据§\n");
printf("\t\t§ 0. 结束程序§\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t请选择您要运行的选项按(0-9):");
c=getchar(); /*读入选择*/
}
while(c<'0'||c>'9');
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
return(c-'0'); } /*返回选择*/
int Input(Student room[],int n) /*输入若干条记录*/
{
int i=0;
char sign,x[10]; /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N') /*判断*/
{
printf("\t\t房间号:"); /*交互输入*/
scanf("\t\t%s"&,room[n+i].roomnum);
printf("\t\t床位号:");
scanf("\t\t%s",&room[n+i].bednum);
printf("\t\t学号:");
scanf("\t\t%s",&room[n+i].num);
printf("\t\t姓名:");
scanf("\t\t%s",&room[n+i].name);
gets(x); /*清除多余的输入*/
printf("\t\t是否继续输入?(Y/N)");
scanf("\t\t%c",&sign); /*输入判断*/
i++;
}
return(n+i);
}
void Display(Student room[],int n) /*显示所有记录*/
{
int i;
printf("\t\t----------------------------------------------\n"); /*格式头*/
printf("\t\t房间号床位号学号姓名 \n");
printf("\t\t-------------------------------------------------\n");
for(i=1;i<n+1;i++) /*循环输入*/
{printf("\t\t%-10s%-10s%-10s%-20s\n",room[i-1].roomnum,room[i-1].bednum,r
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊oom[i-1].num,room[i-1].name);
if(i>1&&i%10==0) /*每十个暂停*/
{
printf("\t\t--------------------------------------------------\n");/*格式*/
printf("\t\t");
system("pause");
printf("\t\t--------------------------------------------------\n"); }
}
printf("\t\t");
system("pause");
}
void Sort_by_num(Student room[],int n) /*按学号排序*/
{
int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(room[j].num,room[j+1].num)>0)
{
strcpy(t,room[j+1].bednum);
strcpy(room[j+1].bednum,room[j].bednum);
strcpy(room[j].bednum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);}
}
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊void Sort_by_roomnum(Student room[],int n) /*按房间号排序*/
{
int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(room[j].roomnum,room[j+1].roomnum)>0)
{strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
strcpy(t,room[j+1].bednum);
strcpy(room[j+1].bednum,room[j].bednum);
strcpy(room[j].bednum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);}
}
int Insert_a_record(Student room[],int n) /*插入一条记录*/ {
char x[100]; /*清除多余输入所用*/
printf("\t\t学生房间号:"); /*交互式输入*/
scanf("\t\t%s",&room[n].roomnum);
printf("\t\t学生床位号:");
scanf("\t\t%s",&room[n].bednum);
printf("\t\t学生学号:");
scanf("\t\t%s",&room[n].num);
printf("\t\t学生姓名:");
scanf("\t\t%s",&room[n].name);
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
gets(x);
n++;
Sort_by_num(room,n); /*调用排序函数*/
printf("\t\t插入记录成功!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student room[],int n) /*按姓名查找,删除一条记录*/
{
char s[20];
int i=0,j;
printf("\t\t输入他(她)的姓名:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(room[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t对不起没找到该学生!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(room[j].roomnum,room[j+1].roomnum);
strcpy(room[j].bednum,room[j+1].bednum);
strcpy(room[j].num,room[j+1].num);
strcpy(room[j].name,room[j+1].name);
}
printf("\t\t删除记录成功!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student room[],int n) /*查找并显示一个记录*/ {
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
char s[20];
int i=0;
printf("\t\t输入他(她)的姓名:"); /*交互式输入*/
scanf("\t\t%s",&s);
while(strcmp(room[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{printf("\t\t对不起没找到该学生!\n"); /*输入失败信息*/
return;}
printf("\t\t他(她)的房间号:%s\n",room[i].roomnum); /*输出该学生信息*/ printf("\t\t他(她)的床位号:%s\n",room[i].bednum);
printf("\t\t他(她)的学号:%s\n",room[i].num);
}
int AddfromText(Student room[],int n) /*从文件中读入数据*/
{
int i=0,num;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t输入文件名:");
scanf("\t\t%s",&filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{
printf("\t\t无法打开该文件\n"); /*打开失败信息*/
printf("\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*读入总记录量*/
while(i<num) /*循环读入数据*/
{ fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].bednum,room[n+i].num,r oom[n+i].name);
i++;
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
n+=num;
fclose(fp); /*关闭文件*/
printf("\t\t读入成功!\n");
printf("\t\t");
system("pause");
return(n);
}
void WritetoText(Student room[],int n) /*将所有记录写入文件*/ {int i=0;
FILE *fp; /*定义文件指针*/
char filename[100]; /*定义文件名*/
printf("\t\t循环写入数据\n"); /*输入文件名*/
printf("\t\t输入文件名:");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
{printf("\t\t无法打开该文件\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].bednum,room[i].n um,room[i].name);
i++;
}
fclose(fp); /*关闭文件*/
printf("写入成功!\n"); /*返回成功信息*/
}
void main() /*主函数*/
{int n=0;
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊{switch(menu_select()) /*选择判断*/
{ case 1:
printf("\t\t输入记录\n"); /*输入若干条记录*/
n=Input(room1,n);
break;
case 2:
printf("\t\t显示记录\n"); /*显示所有记录*/
Display(room1,n);
break;
case 3:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n); /*按房间号排序*/
printf("\t\t排序成功!\n");
Display(room1,n);
printf("\t\t");
break;
case 4:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n); /*按学号排序*/
printf("\t\t\t排序成功!\n");
Display(room1,n);
printf("\t\t");
break;
case 5:
printf("\t\t插入一条记录按学号排序并显示\n");
n=Insert_a_record(room1,n); /*插入一条记录*/
Display(room1,n);
printf("\t\t");
break;
case 6:
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
printf("\t\t按姓名查找,删除一条记录\n");
n=Delete_a_record(room1,n); /*按姓名查找,删除一条记录*/
printf("\t\t");
system("pause");
break;
case 7:
printf("\t\t查找并显示一个记录\n");
Query_a_record(room1,n); /*查找并显示一个记录*/
printf("\t\t");
system("pause");
break;
case 8:
printf("\t\t从文件中读入数据\n");
AddfromText(room1,n); /*从文件中读入数据*/
printf("\t\t");
system("pause");
break;
case 9:
printf("\t\t循环写入数据\n");
WritetoText(room1,n); /*循环写入数据*/
printf("\t\t");
system("pause");
break;
case 0:
printf("\t\t谢谢使用,祝您好运,再见!\n"); /*结束程序*/
printf("\t\t");
system("pause");
exit(0);
}。