?? guanlixitong.txt
字號:
#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
#include "string.h"
#define ERROR 0
#define OK 1
#define MAXSIZE 2500
#define EQ(a,b) ((a)==(b))
typedef int Status;
int N=4;//全局變量來儲存所輸入的個數;
struct student
{
//數據結構類型;
char name[10];
int num;
int room;
};
/*--------------------------------------------------------------------------*/
Status Input()
{
//數據輸入;
int i=0;
int flag=1;
char ch;
FILE * fpdata;
student stu[MAXSIZE];
if((fpdata=fopen("studata.txt","wb"))==NULL)
{
printf("cannot open studata.c file!");
return ERROR;
}
while(flag)
{
printf("是否繼續輸入(Y/N):");
cin>>ch;
if(ch=='y'||ch=='Y')
{
scanf("%s%d%d",stu[i].name,&stu[i].num,&stu[i].room);
fwrite(&stu[i],sizeof(struct student),1,fpdata);
i++;
}
else flag=0;
}
N=i;
fclose(fpdata);
printf("數據輸入完成!\n");
return OK;
}
Status Print(char *filename)
{
//輸出數據;
FILE * fpdata;
student st;
int i=0;
if((fpdata=fopen(filename,"rb"))==NULL)
{
printf("cannot open studata.c file!");
return ERROR;
}
while(i<N)
{
fread(&st,sizeof(struct student),1,fpdata);
printf("%s %d %d\n",st.name,st.num,st.room);
i++;
}
fclose(fpdata);
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status NameSort()
{
//姓名排序;
int i,j;
FILE * fpdata;
FILE * fpnamesort;
student stu[MAXSIZE];
if((fpdata=fopen("studata.txt","rb"))==NULL)
{
printf("cannot open data.c file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,fpdata);
}
fclose(fpdata);
if((fpnamesort=fopen("namesort.txt","wb"))==NULL)
{
printf("cannot open nsort.c");
return ERROR;
}
for(i=2;i<=N;i++)
{
if(strcmp(stu[i].name,stu[i-1].name)<0)
{
strcpy(stu[0].name,stu[i].name);
stu[0].num=stu[i].num;
stu[0].room=stu[i].room;
strcpy(stu[i].name,stu[i-1].name);
stu[i].num=stu[i-1].num;
stu[i].room=stu[i-1].room;
for(j=i-2;(strcmp(stu[0].name,stu[j].name))<0;j--)
{
strcpy(stu[j+1].name,stu[j].name);
stu[j+1].num=stu[j].num;
stu[j+1].room=stu[j].room;
}
strcpy(stu[j+1].name,stu[0].name);
stu[j+1].num=stu[0].num;
stu[j+1].room=stu[0].room;
}
}
for(i=1;i<=N;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fpnamesort);
}
fclose(fpnamesort);
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status NumSort()
{
//學號排序;
int i,j;
FILE * fpdata;
FILE * fpnumsort;
student stu[MAXSIZE];
if((fpdata=fopen("studata.txt","rb"))==NULL)
{
printf("cannot open data.c file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,fpdata);
}
fclose(fpdata);
if((fpnumsort=fopen("numsort.txt","wb"))==NULL)
{
printf("cannot open nsort.c");
return ERROR;
}
for(i=2;i<=N;i++)
{
if(stu[i].num<stu[i-1].num)
{
strcpy(stu[0].name,stu[i].name);
stu[0].num=stu[i].num;
stu[0].room=stu[i].room;
strcpy(stu[i].name,stu[i-1].name);
stu[i].num=stu[i-1].num;
stu[i].room=stu[i-1].room;
for(j=i-2;stu[0].num<stu[j].num;j--)
{
strcpy(stu[j+1].name,stu[j].name);
stu[j+1].num=stu[j].num;
stu[j+1].room=stu[j].room;
}
strcpy(stu[j+1].name,stu[0].name);
stu[j+1].num=stu[0].num;
stu[j+1].room=stu[0].room;
}
}
for(i=1;i<=N;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fpnumsort);
}
fclose(fpnumsort);
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status RoomSort()
{
//房間號排序;
int i,j;
FILE * fpdata;
FILE * fproomsort;
student stu[MAXSIZE];
if((fpdata=fopen("studata.txt","rb"))==NULL)
{
printf("cannot open data.c file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,fpdata);
}
fclose(fpdata);
if((fproomsort=fopen("roomsort.txt","wb"))==NULL)
{
printf("cannot open nsort.c");
return ERROR;
}
for(i=2;i<=N;i++)
{
if(stu[i].room<stu[i-1].room)
{
strcpy(stu[0].name,stu[i].name);
stu[0].num=stu[i].num;
stu[0].room=stu[i].room;
strcpy(stu[i].name,stu[i-1].name);
stu[i].num=stu[i-1].num;
stu[i].room=stu[i-1].room;
for(j=i-2;stu[0].room<stu[j].room;j--)
{
strcpy(stu[j+1].name,stu[j].name);
stu[j+1].num=stu[j].num;
stu[j+1].room=stu[j].room;
}
strcpy(stu[j+1].name,stu[0].name);
stu[j+1].num=stu[0].num;
stu[j+1].room=stu[0].room;
}
}
for(i=1;i<=N;i++)
{
fwrite(&stu[i],sizeof(struct student),1,fproomsort);
}
fclose(fproomsort);
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status NameSearch(char * namekey)
{
//按名字查詢;
//順序查找
int i;
FILE * f;
student stu[MAXSIZE];
if((f=fopen("namesort.txt","rb"))==NULL)
{
printf("cannot open namesort.txt file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,f);
}
int low=1;
int high=N;
//int mid;
int flag=0;
int m=N;
//char namekey;
//int t;
strcpy(stu[0].name,namekey);
for(m=N;m>0;--m)
{
if(!strcmp(stu[m].name,namekey))
printf("%s %d %d\n",stu[m].name,stu[m].num,stu[m].room);
}
return m;
fclose(f);
if(flag>0)
{
printf("%s %d %d\n",stu[flag].name,stu[flag].num,stu[flag].room);
}
else printf("對不起,沒有找到相匹配的記錄\n");
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status NumSearch(int key)
{
//按學號查詢;
int i;
FILE * f;
student stu[MAXSIZE];
if((f=fopen("numsort.txt","rb"))==NULL)
{
printf("cannot open namesort.txt file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,f);
}
int low=1;
int high=N;
int mid;
int flag=0;
while(low<=high)
{
mid=(low+high)/2;
if(stu[mid].num==key)
{
flag=mid;
break;
}
else
{
if(stu[mid].num>key)
high=mid-1;
else
low=mid+1;
}
}
fclose(f);
if(flag>0)
{
printf("%s %d %d\n",stu[flag].name,stu[flag].num,stu[flag].room);
}
else printf("對不起,沒有找到相匹配的記錄\n");
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
Status RoomSearch(int key)
{
//按房間號查詢;
int i;
FILE * f;
student stu[MAXSIZE];
if((f=fopen("roomsort.txt","rb"))==NULL)
{
printf("cannot open roomsort.txt file!");
return ERROR;
}
for(i=1;i<=N;i++)
{
fread(&stu[i],sizeof(struct student),1,f);
}
int low=1;
int high=N;
//int mid;
int flag=0;
int t;
stu[0].room=key;
for(t=N;t>0;--t)
{if(stu[t].room==key)
printf("%s %d %d\n",stu[t].name,stu[t].num,stu[t].room);
}
return t;
fclose(f);
if(flag>0)
{
printf("%s %d %d\n",stu[flag].name,stu[flag].num,stu[flag].room);
}
else printf("對不起,沒有找到相匹配的記錄\n");
return OK;
}
/* ******** ******** ********* ********* ********* ********* ********* */
/* ******** ******** ********* main() ********* ********* ********* */
/* ******** ******** ********* ********* ********* ********* ********* */
void main()
{
int num;
int room;
int flag,flag1,flag2;
char cha;
char name[10];
cout<<" ******** 學生宿舍管理系統 ********"<<endl;
printf(" ------Powered by GUOXIAOJIE\n");
printf("------------------------------------------------------\n");
cout<<"是否需要錄入入住學生信息(Y/N)"<<endl;
char cha1;
cin>>cha1;
if(cha1=='Y'||cha1=='y')
{printf("------------------------------------------------------\n");
printf("請將住宿學生信息輸入(姓名 學號 房間號)\n");
Input();
NameSort();
NumSort();
RoomSort();
}
while(flag)
{printf("------------------------------------------------------\n");
cout<<"**************** 學生宿舍管理系統 ****************"<<endl;
printf("------------------------------------------------------\n");
printf("請選擇操作:\n");
printf("A.按姓名查詢\n");
printf("B.按學號查詢\n");
printf("C.按房號查詢\n");
printf("D.退出\n");
cout<<"注意:字母請輸入大寫……"<<endl;
cin>>cha;
switch(cha)
{
case 'A' :
flag1=1;
while(flag1)
{printf("------------------------------------------------------\n");
printf("A.輸入要查詢的名字\n");
printf("B.按姓名全部輸出\n");
printf("C.返回\n");
printf("注意:字母請輸入大寫……\n");
cin>>cha;
switch(cha)
{
case 'A':
scanf("%s",name);
printf("查詢結果為:\n");
printf("------------------------------------------------------\n");
NameSearch(name);
printf("------------------------------------------------------\n");
break;
case 'B':
Print("namesort.txt");
break;
case 'C':
flag1=0;
break;
default:
printf("------------------------------------------------------\n");
printf("!!!!!!!!你輸入的命令無效。注意:命令字母請輸入大寫!!!!!!!!!!!\n");
}
}
break;
case 'B' :
while(flag2)
{printf("------------------------------------------------------\n");
printf("A.輸入要查詢的學號\n");
printf("B.按學號全部輸出\n");
printf("C.返回\n");
printf("注意:字母請輸入大寫……\n");
cin>>cha;
switch(cha)
{
case 'A':
scanf("%d",&num);
printf("查詢結果為:\n");
printf("------------------------------------------------------\n");
NumSearch(num);
break;
case 'B':
Print("numsort.txt");
break;
case 'C':
flag2=0;
break;
default:
printf("------------------------------------------------------\n");
printf("!!!!!!!!你輸入的命令無效。注意:命令字母請輸入大寫!!!!!!!!!!!\n");
}
}
break;
case 'C' :
flag1=1;
while(flag1)
{printf("------------------------------------------------------\n");
printf("A.輸入要查詢的宿舍號\n");
printf("B.按宿舍號全部輸出\n");
printf("C.返回\n");
printf("注意:字母請輸入大寫……\n");
cin>>cha;
switch(cha)
{
case 'A':
scanf("%d",&room);
printf("查詢結果為:\n");
printf("------------------------------------------------------\n");
RoomSearch(room);
printf("------------------------------------------------------\n");
break;
case 'B':
Print("roomsort.txt");
break;
case 'C':
flag1=0;
break;
default:
printf("------------------------------------------------------\n");
printf("!!!!!!!!你輸入的命令無效。注意:命令字母請輸入大寫!!!!!!!!!!!\n");
}
}
break;
case 'D' :
flag=0;
break;
default:
printf("------------------------------------------------------\n");
printf("!!!!!!!!你輸入的命令無效。注意:命令字母請輸入大寫!!!!!!!!!!!\n");
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -