用C语言编写宿舍管理查询系统

A.采用交互工作方式B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)2)查询菜单:(用二分查找实现以下操作)A.按姓名查询... A. 采用交互工作方式
B. 建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
2) 查询菜单: (用二分查找实现以下操作)
A. 按姓名查询
B. 按学号查询
C. 按房号查询
3) 打印任一查询结果(可以连续操作)
要能在winTC下运行的 谢谢了
展开
 我来答
匿名用户
推荐于2018-02-28
展开全部
以前给别人写的,完全原创,已经在VC上编译运行通过:

#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

typedef struct /*定义结构体数组*/
{
char num[10]; /*学号*/
char name[20]; /*姓名*/
int roomID; /*房号*/
}Student;
Student stu[80]; /*结构体数组变量*/

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 | 3. 排序 |\n");
printf("\t\t | 4. 查询信息 |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t****************************************\n");
printf("\t\t\t请输入处理种类(0-4):");
c=getchar(); /*读入选择*/
}while(c<'0'||c>'4');
return(c-'0'); /*返回选择*/
}

int Input(Student stud[],int n) /*输入若干条记录*/
{int i=0;
char sign,x[10]; /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N') /*判断*/
{
printf("\t\t\t学号:"); /*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\t姓名:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t房号:");
scanf("\t\t\t%d",&stud[n+i].roomID);
gets(x); /*清除多余的输入*/
printf("\t\t\t还需要继续输入吗?(Y/N)");
scanf("\t\t\t%c",&sign); /*输入判断*/
i++;
}
return(n+i);
}

void Display(Student stud[],int n) /*显示所有记录*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式头*/
printf("\t\t\t学号\t\t姓名\t\t房号\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循环输入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].roomID);
if(i>1&&i%10==0) /*每十个暂停*/
{
printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}

void Sort_by_num(Student stud[],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(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}

void Sort_by_name(Student stud[],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(stud[j].name,stud[j+1].name)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}

void Sort_by_room(Student stud[],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(stud[j].roomID>stud[j+1].roomID)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}

void Query_a_record_by_name(Student stud[],int n) /*查找并显示一个记录*/
{
char s[20];
int i=0;
printf("\t\t\t请输入姓名:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\t没有找到相关信息!\n"); /*输入失败信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*输出该学生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}

void Query_a_record_by_num(Student stud[],int n) /*查找并显示一个记录*/
{
char s[20];
int i=0;
printf("\t\t\t请输入学号:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].num,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\t没有找到相关信息!\n"); /*输入失败信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*输出该学生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}

void Query_a_record_by_room(Student stud[],int n) /*查找并显示一个记录*/
{
int s;;
int i=0;
printf("\t\t\t请输入房号:"); /*交互式输入*/
scanf("\t\t\t%d",&s);
while(stud[i].roomID==s) i++; /*查找判断*/
if(i==n)
{ printf("\t\t\t没有找到相关信息!\n"); /*输入失败信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*输出该学生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}

void WritetoText(Student stud[],int n) /*将所有记录写入文件*/
{
int i=0;
FILE *fp; /*定义文件指针*/

if((fp=fopen("stu.txt","w"))==NULL) /*打开文件*/
{
printf("\t\t\t文件打开失败!!\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].roomID);
i++;
}
fclose(fp); /*关闭文件*/
printf("文件保存完毕!\n"); /*返回成功信息*/
}

void main() /*主函数*/
{
int n=0,i;
for(;;)
{
switch(menu_select()) /*选择判断*/
{
case 1:
printf("\t\t\t输入相关情报\n"); /*输入若干条记录*/
n=Input(stu,n);
break;

case 2:
printf("\t\t\宿舍状况一览\n"); /*显示所有记录*/
Display(stu,n);
break;

case 3:
printf("\t\t\t请输入按什么进行排序(1.姓名、2.学号、3.房号)\n\t\t\t");
scanf("%d",&i);
while(i)
{
if(i<1||i>3)
{
printf("错误输入!!\n");
printf("\t\t\t请输入按什么进行排序(1.姓名、2.学号、3.房号)\n\t\t\t");
continue;
}

switch(i)
{
case 1:
Sort_by_name(stu,n);
break;
case 2:
Sort_by_num(stu,n);
break;
case 3:
Sort_by_room(stu,n);
break;
}
break;
}
printf("\t\t\t排序完毕!\n");
printf("\t\t\t");
WritetoText(stu,n);
system("pause");
break;

case 4:
printf("\t\t\t请输入按什么进行查询(1.姓名、2.学号、3.房号)\n\t\t\t");
scanf("%d",&i);
while(i)
{
if(i<1||i>3)
{
printf("错误输入!!\n");
printf("\t\t\t请输入按什么进行查询(1.姓名、2.学号、3.房号)\n\t\t\t");
continue;
}

switch(i)
{
case 1:
Query_a_record_by_name(stu,n);
break;
case 2:
Query_a_record_by_num(stu,n);
break;
case 3:
Query_a_record_by_room(stu,n);
break;
}
break;
}
printf("\t\t\t");
system("pause");
break;

case 0:
printf("\t\t\t欢迎使用!!\n"); /*结束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}
黑马250王子
2016-01-01 · TA获得超过1.9万个赞
知道大有可为答主
回答量:3106
采纳率:75%
帮助的人:814万
展开全部
#include "stdio.h"
#include "stdlib.h" /*标准库函数*/
#include "ctype.h" /*字符操作函数*/
#include "string.h"
typedef struct students{
char name[10];
int num;
int room;
}ADDRESS;
/******以下是函数原型*******/
int enter(ADDRESS t[]); /*录入宿舍信息*/
void search1(ADDRESS t[],int n); /*按姓名查询宿舍信息*/
void search2(ADDRESS t[],int n); /*按学号查询宿舍信息*/
void search3(ADDRESS t[],int n); /*按房号查询宿舍信息*/
int delete(ADDRESS t[],int n); /*删除一个宿舍信息*/
int add(ADDRESS t[],int n); /*增加一个宿舍信息*/
void sort(ADDRESS t[],int n); /*按姓名降序排序*/
int find(ADDRESS t[],int n,char *s);
void main()
{ADDRESS adr[40]; /*定义结构体数组*/<br> int length;<br> char n;<br>printf("********************菜单*********************\n\n");<br> printf(" 1. 录入宿舍信息\n");<br> printf(" 2. 删除宿舍信息\n");<br> printf(" 3. 按姓名查询宿舍信息\n");<br> printf(" 4. 按学号查询宿舍信息\n");<br> printf(" 5. 按房号查询宿舍信息\n");<br> printf(" 6. 退出\n");<br> printf("***********************************************\n");<br> scanf("%c",&n);/*录入选择*/<br> for(;;)/*无限循环*/<br> {<br> switch(n) /*选择n作开关语句的条件*/<br> {<br> <br> case 1:enter(adr);break; /*录入宿舍信息*/<br> case 2:length=delete(adr,length);break; /*删除*/<br> case 3:search1(adr,length);break; /*姓名查找*/<br> case 4:search2(adr,length);break; /*学号查找*/<br> case 5:search3(adr,length);break; /*房号查找*/<br> case 6:exit(0); /*如n为6则程序结束*/<br> }
}
}
int enter(ADDRESS t[])
{
int i;

printf("请输入宿舍信息 \n"); /*提示输入记录*/
printf("name num room\n");
printf("------------------------------------------------\n");
for(i=0;i<40;i++)
{
scanf("%s%d%d",t[i].name,t[i].num,t[i].room); /*输入记录*/
printf("----------------------------------------------\n");
}

}
/*姓名查找宿舍信息*/
void search1(ADDRESS t[],int n)
{
char name[10]; /*保存待查找工号字符串*/
int i; /*保存查找到结点的序号*/

printf("请输入需要查找的姓名\n");
scanf("%s",name); /*输入待查找姓名*/
i=find(t,n,name);
printf("姓名:%s学号:%d房号:%d",t[i].name,t[i].num,t[i].room);
}
/*学号查找宿舍信息*/
void search2(ADDRESS t[],int n)
{
int a; /*保存待查找学号*/
int i,j; /*保存查找到结点的序号*/

printf("请输入需要查找的学号\n");
scanf("%d",a); /*输入待查找工号*/
for(i=0;i<40;i++)/*从第一条记录开始,直到最后一条*/

if(strcmp(a,t[i].num)==0)
/*记录中的学号和待比较的学号是否相等*/

{j=i; /*相等,则返回该记录的下标号,程序提前结结束*/<br> <br> printf("姓名:%s学号:%d房号:%d",t[j].name,t[j].num,t[j].room); <br>}
}
/*房号查找宿舍信息*/
void search1(ADDRESS t[],int n)
{
int b; /*保存待查找房号*/
int i,j; /*保存查找到结点的序号*/

printf("请输入需要查找的姓名\n");
scanf("%s",b); /*输入待查找房号*/
for(i=0;i<40;i++)/*从第一条记录开始,直到最后一条*/

if(strcmp(b,t[i].room)==0)
/*记录中的房号和待比较的房号是否相等*/

{j=i; /*相等,则返回该记录的下标号,程序提前结结束*/<br> <br> printf("姓名:%s学号:%d房号:%d",t[j].name,t[j].num,t[j].room); <br>}
}
int delete(ADDRESS t[],int n)
{
char s[10]; /*要删除记录的姓名*/
int ch=0;
int i,j;
printf("请输入需要删除的姓名\n"); /*提示信息*/
scanf("%s",s);/*输入姓名*/
i=find(t,n,s); /*调用find函数*/
if(i>n-1) /*如果i>n-1超过了数组的长度*/
printf("对不起未找到对应信息,删除不成功\n"); /*显示没找到要删除的记录*/
else
{ printf("姓名:%s学号:%d房号:%d\n",t[i].name,t[i].num,t[i].room); /*显示该条记录信息*/
printf("确定删除该职工的信息(1/0)\n"); /*确认是否要删除*/
scanf("%d",&ch); /*输入一个整数0或1*/
if(ch==1) /*如果确认删除整数为1*/
{
for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/
{
strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/
strcpy(t[j-1].num,t[j].num); /*将后一条记录的学号拷贝到前一条*/
strcpy(t[j-1].room,t[j].room); /*将后一条记录的房号拷贝到前一条*/
}
}
}
}
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<40;i++)/*从第一条记录开始,直到最后一条*/
{
if(strcmp(name,t[i].name)==0)
/*记录中的姓名和待比较的姓名是否相等*/

return i; /*相等,则返回该记录的下标号,程序提前结结束*/
}
return i; /*返回i值*/

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杭电王同学
2015-12-21 · TA获得超过166个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:76.4万
展开全部
定义结构或者类,类属性包括姓名、学号、房间号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式