宿舍管理查询
#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]; /*
定义结构体数组*/
intlength;
charn;
printf("********************菜单*********************\n\n");
printf(" 1.录入宿舍信息\n");
printf(" 2.删除宿舍信息\n");
printf(" 3.按姓名查询宿舍信息\n");
printf(" 4.按学号查询宿舍信息\n");
printf(" 5.按房号查询宿舍信息\n");
printf(" 6.退出\n");
printf("***********************************************\n");
scanf("%c",&n);/*录入选择*/
for(;;)/*无限循环*/
{
switch(n) /*选择n作开关语句的条件*/
{
case 1:enter(adr);break; /*录入宿舍信息*/
case 2:length=delete(adr,length);break; /*删除*/
case3:search1(adr,length);break; /*姓名查找*/
case 4:search2(adr,length);break; /*学号查找*/
case5:search3(adr,length);break; /*房号查找*/
case 6:exit(0); /*如n为6则程序结束*/
}
}
}
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; /*
相等,则返回该记录的下标号,程序提前结结束*/
printf("姓名:%s学号:%d房号:%d",t[j].name,t[j].num,t[j].room);
}
}
/*
房号查找宿舍信息*/
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; /*
相等,则返回该记录的下标号,程序提前结结束*/
printf("姓名:%s学号:%d房号:%d",t[j].name,t[j].num,t[j].room);
}
}
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
删除该记录,实际后续记录前移*/
{
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值*/
}
航班查询
#include
//标准输入、输出头文件
#include //
包含字符串函数处理头文件
#include //
包含动态存储与释放函数头文件
#define N 10000
struct air //
定义结构体数组
{
int num;
char start[20];
char over[20];
char time[10];
int count;
}s[N];
int i;
int m=0;
#define PRINT
"%-d%12s%12s%10s%12d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count
//
定义输出格式
void input(); //
输入航班信息
void print(); //
输出航班信息
void save(); //
保存航班信息
void read(); //
读取航班信息
void search(); //
查找航班信息
void shanchu(); //
删除航班信息
void dingpiao(); //
订票信息
void tuipiao(); //
退票信息
void xiugai(); //
修改信息
void main()
{
int j;
printf("
★---您好,欢迎进入中国民航管理系统!---★\n");
printf("================================================================================\n");
do
{
printf(" --------
☆ 1.输入航班信息☆-------- \n\n"
" --------
☆ 2.浏览航班信息☆-------- \n\n"
" --------
☆ 3.修改航班信息☆-------- \n\n"
" --------
☆ 4.查找航班信息☆-------- \n\n"
" --------
☆ 5.删除航班信息☆-------- \n\n"
" --------
☆ 6.订票信息☆-------- \n\n"
" --------
☆ 7.退票信息☆-------- \n\n"
" --------
☆ 0.退出☆-------- \n\n");
printf("================================================================================\n");
printf("
请在0-7中选择以回车键结束:\n\n");
scanf("%d",&j);
switch(j)
{
case 1: input();//
调用输入模块
break;
case 2:print();//
调用打印模块
break;
case 3:xiugai();//
调用修改模块
break;
case 4:search();//
调用查找模块
break;
case 5:shanchu(); //
调用删除模块
break;
case 6:dingpiao();//
调用订票模块
break;
case 7:tuipiao();//
调用退票模块
break;
case 0:;
break;
}
}while(j!=0); //
判断结束
printf("
谢谢使用,再见!\n");
}//
主函数结束
void input()//
打印模块程序
{
char f[]="2008china"; //
设置密码
int y;
printf("
请输入密码并以回车键结束:\n\n");
scanf("%s",f); //
读取密码
if(strcmp(f,"2008china")==0)
{
printf("
请依次输入航班信息(机票数位0结束输入):\n\n"
"
完成输入信息请键入w以回车键结束\n\n"); //打印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;i
{
printf("
请输入航班号:\n");
scanf("%d",&s[i].num); //
读取航班号
printf("
请输入起始站:\n");
scanf("%s",s[i].start);//
读取起始站
printf("
请输入终点站:\n");
scanf("%s",s[i].over);//
读取终点站
printf("
请输入时间:\n");
scanf("%s",s[i].time);//
读取时间
printf("
请输入机票数(机票数为0结束输入):\n",m);
scanf("%d",&s[i].count);//
读取机票数
m++;
printf("
第%d个信息已经输完是否继续?按任意键继续,按0结束",m);
scanf("%d",&y);
if(y==0)
{
save();//
将结构体信息存盘
print();//
输出输入的航班信息
break;
}
}
}
else
printf("
输入密码错误!请检查您的密码是否正确!谢谢!再见!\n\n");
}
void save()//
保存模块程序
{
FILE *fp,*fp1;//
定义文件指针
if((fp=fopen("chen.dat","wb"))==NULL)//
打开文件并判断是否出错
{
printf("
创建文件失败!\n\n");//打印出错提示
getchar();
return;
}
if((fp1=fopen("hao.dat","wb"))==NULL)//
打开文件并判断是否出错
{
printf("
创建文件失败!\n\n");//打印出错提示
getchar();
return;
}
for(i=0;i
if(fwrite(&s[i],sizeof(struct
air),1,fp)==0)//
向文件写入数据,并判断是否出错
printf("
向文件输入数据失败!\n\n");
fprintf(fp1,"%d",m);
fclose(fp);//
关闭文件
fclose(fp1);//
关闭文件
}
void read()//
从文件读取信息模块
{
FILE *fp,*fp1;//
定义文件指针
if((fp=fopen("chen.dat","rb"))==NULL)//
打开文件,并判断是否出错
{
printf("
出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示
getchar();
}
if((fp1=fopen("hao.dat","rb"))==NULL)//
打开文件并判断是否出错
{
printf("
创建文件失败!\n\n");//打印出错提示
getchar();
return;
}
fscanf(fp1,"%d",&m);
fclose(fp1);//
关闭文件
for(i=0;i
{
fread(&s[i],sizeof(air),1,fp);//
从文件中读取信息
}
fclose(fp);//
关闭文件
}
void print()//
打印模块
{
char w[10];
read();//
调用读取文件函数
printf("
航班号 起始站 终点站 时间 机票数\n");
for(i=0;i
{
printf(PRINT);//
打印信息
}
printf("
请按任意键回车键结束返回上层菜单以:\n");
scanf("%s",w);
}
void search()//
查询模块
{
char name1[20];
char name2[20];
char ii[10];
int n,no;
do
{
printf("
请选择查找方式:\n\n");//打印查询方式菜单
printf("1.
按航班号查找\n\n"
"2.
按终点站查找\n\n"
"3.
按航线查找\n\n"
"0.
返回\n\n");
printf("
请在0-3中选择:\n\n"
"
按其他键以回车键结束返回主菜单:\n\n");
scanf("%d",&n);//
读取查找方式
if(n==0)
break;
switch(n)
{
case 1:
printf("
请输入航班号:\n");
scanf("%d",&no);//
航班号
break;
case 2:
printf("
请输入终点站名称:\n");
scanf("%s",name2);//
读取终点站
break;
case 3:
printf("
请输入起始站名称:\n");
scanf("%s",name1);//
读取起始站
printf("
请输入终点站名称:\n");
scanf("%s",name2);//
终点站
break;
}
read();//
调用读取函数
for(i=0;i
{
if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//
按终点站起始站判断输出条件
{
printf("\n
查找航班信息成功!\n");
printf("
航班号 起始站 终点站 时间 机票数\n");
printf(PRINT);//
打印信息
break;
}
if(s[i].num==no)//
按航班号判断输出条件
{
printf("\n
查找航班信息成功!\n");
printf("
航班号 起始站 终点站 时间 机票数\n");
printf(PRINT);//
打印信息
break;
}
}
no=0;//
将航班号赋值为0
printf("
没有您需要的信息或查找完毕:\n\n"
"
是否继续查找?请键入yes或no以回车键结束\n");
scanf("%s",ii);
}while(strcmp(ii,"yes")==0);//
判断结束
}
void shanchu()//
删除模块
{
char name1[20];
char name2[20];
char ii[10];
char f[]="2008china";//
设置密码
int no,n;
printf("
请输入密码并以回车键结束:\n\n");
scanf("%s",f);//
读取密码
if(strcmp(f,"2008china")==0) //
判断密码是否正确
{
do
{
printf("
请选择删除以方式回车键结束:\n\n");//打印删除方式菜单
printf("*1.
按航班号删除\n\n"
"*2.
按航线删除\n\n"
"*0.
返回\n\n");
printf("
请在0-2中选择以回车键结束:\n");
scanf("%d",&n);//
读取删除方式
if(n==0)
break; //
跳出循环
switch(n)
{
case 1:
printf("
请输入航班号:\n");
scanf("%d",&no);//
读取航班号
read();//
调用读取函数
break;//
跳出循环
case 2:
printf("
请输入起始站 名称:\n");
scanf("%s",name1);//
读取起始站
printf("
请输入终点站名称:\n");
scanf("%s",name2);//
读取终点站
read();//
调用读取函数
break;//
跳出循环
}
for(i=0;i
{
if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0)//
判断输入信息是否存在
{
s[i]=s[m-1];
m--;
}
}
printf("
查找完毕或没有这个信息\n\n");
printf("
是否继续删除\n");
printf("
请键入yes或no以回车键结束\n");
scanf("%s",ii); //
读取是否继续信息
save(); //
调用读取函数
if(!strcmp(ii,"yes")) //
判断是否继续删除
printf("
请按任意键以回车键结束返回上层菜单:\n");
break;
}while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0);
//
判断结束
}
else
printf("
对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n");
}
void dingpiao()//
订票模块
{
int n;
char a[10];
do
{
search();//
调用查询模块
printf("
请输入您要订的机票数以回车键结束:\n");
scanf("%d",&n);//
读取所订机票数
if(n<0)
{
printf("
请输入有效的机票数!\n");//判断机票数是否出错
break;
}
if(s[i].count!=0&&s[i].count>=n)//
判断是否出错
{
s[i].count=s[i].count-n;
save();//
调用保存函数
printf("
订票成功!\n\n");
break;
}
if(s[i].count
判断是否出错
{
printf("
请输入有效的机票数:\n");
break;
}
printf("
是否继续? 请输入yes或no以回车键结束:\n");//判断是否继续订票
scanf("%s",a);
}while(!strcmp(a,"yes"));//
判断结束
}
void tuipiao()//
退票模块
{
int n;
char a[10];
do
{
search();//
调用查询模块
printf("
请输入您要退的机票数目:\n");
scanf("%d",&n);//
输入所退票数
if(n<0) //
判断票数是否有效
printf("
请输入有效的机票数!\n");
s[i].count=s[i].count+n;
save(); //
调用保存模块
printf("
退票成功!\n\n");
printf("
是否继续? 请键入yes或no以回车键结束:\n\n");//判断是否继续退票
scanf("%s",a);
}while(!strcmp(a,"yes"));//
判断并跳出循环
getchar();
}
void xiugai() //
修改模块
{
struct xiu //
定义结构体
{
int no;
char name1[20];
char name2[20];
char time[20];
int count;
}x[1];
char j[10];
char f[]="2008china";//
设置密码
int n;
printf("
请输入密码并以回车键结束:\n\n");
scanf("%s",f);//
读取密码
if(strcmp(f,"2008china")==0)//
判断是否出错
{
read();//
调用读取模块
do
{
printf( "
请选择修改方式:\n\n"
"*1,
按航班号修改:\n\n"
"*2,
按航线修改:
\n\n");
printf("
请在1---2中修改以回车键结束:\n\n");
scanf("%d",&n);//
读取修改方式
switch(n)
{
case 1:printf("
请输入航班号:\n");
scanf("%d",&x[0].no);//
读取航班号
break;
case 2:printf("
请输入起始站:\n");
scanf("%s",x[0].name1);//
读取起始站
printf("
请输入终点站:\n");
scanf("%s",x[0].name2);//
读取终点站
break;
}
for(i=0;i
{
if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//
判断输出条件
{
printf("
航班号 起始站 终点站 时间 机票数\n");
printf(PRINT);
break;
}
if(s[i].num==x[0].no)//
判断输出条件
{
printf("
航班号 起始站 终点站 时间 机票数\n");
printf(PRINT);
break;
}
}
x[0].no=0; //
将结构体中的号为零
printf("
请输入新航班号、起始站、终点站、时间(星期几)、机票数:\n");
scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count);//
定义输入格式
s[i].num=x[0].no;//
替换航班号
strcpy(s[i].start,x[0].name1);//
替换其始站
strcpy(s[i].over,x[0].name2);//
替换终点站
strcpy(s[i].time,x[0].time);//
替换时间
s[i].count=x[0].count;//
替换机票数
save();//
调用保存模块
printf("
是否继续?请键入yes或no以回车键结束:\n\n");
scanf("%s",j);
}while(strcmp(j,"yes")==0); //
判断结束
}
else
printf("
对不起密码错误!您不是管理员,不能使用此项功能!谢谢!再见!\n\n");
}