洛阳理工学院实验报告
查询函数:
附:源程序:
#include
#include
#include
#include
#include
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. 退出\n");
printf("\t\t****************************************\n");
printf("\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 { 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 for(j=0;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 for(j=0;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 for(j=0;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 if(i==n) { printf("\t\t\t没有找到相关信息!\n"); /*输入失败信息*/ return; } printf("\t\t\this(her) name:%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 if(i==n) { printf("\t\t\t没有找到相关信息!\n"); /*输入失败信息*/ return; } printf("\t\t\this(her) name:%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) name:%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 { 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); } } }