学生宿舍管理系统.docx
《学生宿舍管理系统.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
学生宿舍管理系统
学生宿舍管理系统
1.课程设计的目的
进一步掌握和利用C语言进行程设计的能力,理解和运用结构化程设计的思想和方法,熟练掌握条件语句、循环、数组、函数操作,初步掌握开发一个小型实用系统的基本方法,学会高度一个较长程序的基本方法和利用流程图或N-S图表示算法,将本课程所学的知识合理地运用于实践当中。
适当了解一些书上没有的函数及使用方法。
2设计分工与合作:
在本设计中,其中§1.输入记录、§2.显示记录、§6.按姓名查找,删除一条记录、§7查找并显示一个记录程序等程序代码由(学号:
222009322072035)完成,其中§3.按房间号排序并显示、§4.按学号排序并显示、§5.插入一条记录按学号排序并显示等程序代码由。
3.设计方案论证
2.1设计思路
利用数组对宿舍的记录进行循环输入输出,利用冒泡法记录进行排序,利用循环查找数组中某个数据,对其进行显示,删除,读入和写入文档等操作。
2.2N-S图
4.具体程序代码:
#include/*引用库函数*/
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charroomnum[4];/*房间号*/
charbednum[2];/*床位号*/
charnum[10];/*学号*/
charname[20];/*姓名*/
}Student;
Studentroom1[1000];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");/*运行前清屏*/
printf("\t\t★★★★★★学生宿舍管理系统★★★★★★\n");/*菜单选择*/
printf("\t\t§1.输入记录§\n");
printf("\t\t§2.显示记录§\n");
printf("\t\t§3.按房间号排序并显示§\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');/*返回选择*/
}
intInput(Studentroom[],intn)/*输入若干条记录*/
{inti=0;
charsign,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);
}
voidDisplay(Studentroom[],intn)/*显示所有记录*/
{
inti;
printf("\t\t--------------------------------------------------\n");/*格式头*/
printf("\t\t房间号床位号学号姓名\n");
printf("\t\t--------------------------------------------------\n");
for(i=1;i{
printf("\t\t%-10s%-10s%-10s%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[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");
}
voidSort_by_num(Studentroom[],intn)/*按学号排序*/
{
inti,j,*p,*q,s;
chart[10];
for(i=0;ifor(j=0;jif(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);
}
}
voidSort_by_roomnum(Studentroom[],intn)/*按房间号排序*/
{
inti,j,*p,*q,s;
chart[10];
for(i=0;ifor(j=0;jif(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);
}
}
intInsert_a_record(Studentroom[],intn)/*插入一条记录*/
{charx[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);
}
intDelete_a_record(Studentroom[],intn)/*按姓名查找,删除一条记录*/
{
chars[20];
inti=0,j;
printf("\t\t输入他(她)的姓名:
");/*交互式问寻*/
scanf("%s",s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没找到该学生!
\n");/*返回失败信息*/
return(n);
}
for(j=i;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);
}
voidQuery_a_record(Studentroom[],intn)/*查找并显示一个记录*/
{
chars[20];
inti=0;
printf("\t\t输入他(她)的姓名:
");/*交互式输入*/
scanf("\t\t%s",&s);
while(strcmp(room[i].name,s)!
=0&&iif(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);
}
intAddfromText(Studentroom[],intn)/*从文件中读入数据*/
{
inti=0,num;
FILE*fp;/*定义文件指针*/
charfilename[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{
fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].bednum,room[n+i].num,room[n+i].name);
i++;
}
n+=num;
fclose(fp);/*关闭文件*/
printf("\t\t读入成功!
\n");
printf("\t\t");
system("pause");
return(n);
}
voidWritetoText(Studentroom[],intn)/*将所有记录写入文件*/
{
inti=0;
FILE*fp;/*定义文件指针*/
charfilename[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{
fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].bednum,room[i].num,room[i].name);
i++;
}
fclose(fp);/*关闭文件*/
printf("写入成功!
\n");/*返回成功信息*/
}
voidmain()/*主函数*/
{
intn=0;
for(;;)
{
switch(menu_select())/*选择判断*/
{
case1:
printf("\t\t输入记录\n");/*输入若干条记录*/
n=Input(room1,n);
break;
case2:
printf("\t\t显示记录\n");/*显示所有记录*/
Display(room1,n);
break;
case3:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n);/*按房间号排序*/
printf("\t\t排序成功!
\n");
Display(room1,n);
printf("\t\t");
break;
case4:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n);/*按学号排序*/
printf("\t\t\t排序成功!
\n");
Display(room1,n);
printf("\t\t");
break;
case5:
printf("\t\t插入一条记录按学号排序并显示\n");
n=Insert_a_record(room1,n);/*插入一条记录*/
Display(room1,n);
printf("\t\t");
break;
case6:
printf("\t\t按姓名查找,删除一条记录\n");
n=Delete_a_record(room1,n);/*按姓名查找,删除一条记录*/
printf("\t\t");
system("pause");
break;
case7:
printf("\t\t查找并显示一个记录\n");
Query_a_record(room1,n);/*查找并显示一个记录*/
printf("\t\t");
system("pause");
break;
case8:
printf("\t\t从文件中读入数据\n");
AddfromText(room1,n);/*从文件中读入数据*/
printf("\t\t");
system("pause");
break;
case9:
printf("\t\t循环写入数据\n");
WritetoText(room1,n);/*循环写入数据*/
printf("\t\t");
system("pause");
break;
case0:
printf("\t\t谢谢使用,祝您好运,再见!
\n");/*结束程序*/
printf("\t\t");
system("pause");
exit(0);
}
}
}