宿舍管理查詢(xún)
#include "stdio.h"
#include "stdlib.h" /*
標(biāo)準(zhǔn)庫(kù)函數(shù)*/
#include "ctype.h" /*
字符操作函數(shù)*/
#include "string.h"
typedef struct students{
char name[10];
int num;
int room;
}ADDRESS;
/******
以下是函數(shù)原型*******/
int enter(ADDRESS t[]); /*
錄入宿舍信息*/
void search1(ADDRESS t[],int n); /*
按姓名查詢(xún)宿舍信息*/
void search2(ADDRESS t[],int n); /*
按學(xué)號(hào)查詢(xún)宿舍信息*/
void search3(ADDRESS t[],int n); /*
按房號(hào)查詢(xún)宿舍信息*/
int delete(ADDRESS t[],int n); /*
刪除一個(gè)宿舍信息*/
int? add(ADDRESS t[],int n); /*
增加一個(gè)宿舍信息*/
void sort(ADDRESS t[],int n); /*
按姓名降序排序*/
int find(ADDRESS t[],int n,char *s);
void main()
{ADDRESS adr[40];? /*
定義結(jié)構(gòu)體數(shù)組*/
? intlength;
?? charn;
printf("********************菜單*********************\n\n");
?? printf("? 1.錄入宿舍信息\n");
?? printf("? 2.刪除宿舍信息\n");
?? printf("? 3.按姓名查詢(xún)宿舍信息\n");
?? printf("? 4.按學(xué)號(hào)查詢(xún)宿舍信息\n");
?? printf("? 5.按房號(hào)查詢(xún)宿舍信息\n");
?? printf("???? 6.退出\n");
??printf("***********************************************\n");
?? scanf("%c",&n);/*錄入選擇*/
?? for(;;)/*無(wú)限循環(huán)*/
?? {
????? switch(n)?? /*選擇n作開(kāi)關(guān)語(yǔ)句的條件*/
????? {
?
?case 1:enter(adr);break; /*錄入宿舍信息*/
? case 2:length=delete(adr,length);break; /*刪除*/
? case3:search1(adr,length);break; /*姓名查找*/
? case 4:search2(adr,length);break; /*學(xué)號(hào)查找*/
? case5:search3(adr,length);break; /*房號(hào)查找*/
? case 6:exit(0); /*如n為6則程序結(jié)束*/
????? }
?? }
}
int? enter(ADDRESS t[])
{
?? int i;
?? printf("
請(qǐng)輸入宿舍信息 \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];?? /*
保存待查找工號(hào)字符串*/
?? int i;?? /*
保存查找到結(jié)點(diǎn)的序號(hào)*/
?? printf("
請(qǐng)輸入需要查找的姓名\n");
?? scanf("%s",name); /*
輸入待查找姓名*/
??? i=find(t,n,name);
??? printf("
姓名:%s學(xué)號(hào):%d房號(hào):%d",t[i].name,t[i].num,t[i].room);
}
/*
學(xué)號(hào)查找宿舍信息*/
void search2(ADDRESS t[],int n)
{
?? int a;?? /*
保存待查找學(xué)號(hào)*/
?? int i,j;?? /*
保存查找到結(jié)點(diǎn)的序號(hào)*/
?? printf("
請(qǐng)輸入需要查找的學(xué)號(hào)\n");
?? scanf("%d",a); /*
輸入待查找工號(hào)*/
? for(i=0;i<40;i++)/*
從第一條記錄開(kāi)始,直到最后一條*/
? if(strcmp(a,t[i].num)==0)
??????? /*
記錄中的學(xué)號(hào)和待比較的學(xué)號(hào)是否相等*/
??????? {j=i;?? /*
相等,則返回該記錄的下標(biāo)號(hào)秩贰,程序提前結(jié)結(jié)束*/
??
? printf("姓名:%s學(xué)號(hào):%d房號(hào):%d",t[j].name,t[j].num,t[j].room);
}
}
/*
房號(hào)查找宿舍信息*/
void search1(ADDRESS t[],int n)
{
?? int b;?? /*
保存待查找房號(hào)*/
?? int i,j;?? /*
保存查找到結(jié)點(diǎn)的序號(hào)*/
?? printf("
請(qǐng)輸入需要查找的姓名\n");
?? scanf("%s",b); /*
輸入待查找房號(hào)*/
? for(i=0;i<40;i++)/*
從第一條記錄開(kāi)始璧微,直到最后一條*/
? if(strcmp(b,t[i].room)==0)
??????? /*
記錄中的房號(hào)和待比較的房號(hào)是否相等*/
??????? {j=i;?? /*
相等,則返回該記錄的下標(biāo)號(hào)讼积,程序提前結(jié)結(jié)束*/
??
? printf("姓名:%s學(xué)號(hào):%d房號(hào):%d",t[j].name,t[j].num,t[j].room);
}
}
int delete(ADDRESS t[],int n)
{
?? char s[10];? /*
要?jiǎng)h除記錄的姓名*/
?? int ch=0;
?? int i,j;
??printf("
請(qǐng)輸入需要?jiǎng)h除的姓名\n"); /*提示信息*/
?? scanf("%s",s);/*
輸入姓名*/
?? i=find(t,n,s); /*
調(diào)用find函數(shù)*/
?? if(i>n-1)? /*
如果i>n-1超過(guò)了數(shù)組的長(zhǎng)度*/
????? printf("
對(duì)不起未找到對(duì)應(yīng)信息,刪除不成功\n"); /*顯示沒(méi)找到要?jiǎng)h除的記錄*/
?? else
?? { printf("
姓名:%s學(xué)號(hào):%d房號(hào):%d\n",t[i].name,t[i].num,t[i].room);
/*顯示該條記錄信息*/
????? printf("
確定刪除該職工的信息(1/0)\n");? /*確認(rèn)是否要?jiǎng)h除*/
????? scanf("%d",&ch);? /*
輸入一個(gè)整數(shù)0或1*/
????? if(ch==1)? /*
如果確認(rèn)刪除整數(shù)為1*/
????? {
? for(j=i+1;j
刪除該記錄钞螟,實(shí)際后續(xù)記錄前移*/
? {
???? strcpy(t[j-1].name,t[j].name); /*
將后一條記錄的姓名拷貝到前一條*/
???? strcpy(t[j-1].num,t[j].num); /*
將后一條記錄的學(xué)號(hào)拷貝到前一條*/
???? strcpy(t[j-1].room,t[j].room); /*
將后一條記錄的房號(hào)拷貝到前一條*/
? }
? }
?? }
}
int find(ADDRESS t[],int n,char *s)
{
?? int i;
?? for(i=0;i<40;i++)/*
從第一條記錄開(kāi)始,直到最后一條*/
?? {
????? if(strcmp(name,t[i].name)==0)
??????? /*
記錄中的姓名和待比較的姓名是否相等*/
??????? return i;?? /*
相等绸狐,則返回該記錄的下標(biāo)號(hào)卤恳,程序提前結(jié)結(jié)束*/
?? }
?? return i;? /*
返回i值*/
}
航班查詢(xún)
#include
//標(biāo)準(zhǔn)輸入、輸出頭文件
#include //
包含字符串函數(shù)處理頭文件
#include //
包含動(dòng)態(tài)存儲(chǔ)與釋放函數(shù)頭文件
#define N 10000?
struct air //
定義結(jié)構(gòu)體數(shù)組
{
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("
★---您好寒矿,歡迎進(jìn)入中國(guó)民航管理系統(tǒng)突琳!---★\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("
請(qǐng)?jiān)?-7中選擇以回車(chē)鍵結(jié)束:\n\n");
scanf("%d",&j);
switch(j)
{
case 1: input();//
調(diào)用輸入模塊
break;
case 2:print();//
調(diào)用打印模塊
break;
case 3:xiugai();//
調(diào)用修改模塊
break;
case 4:search();//
調(diào)用查找模塊
break;
case 5:shanchu(); //
調(diào)用刪除模塊
break;
case 6:dingpiao();//
調(diào)用訂票模塊
break;
case 7:tuipiao();//
調(diào)用退票模塊
break;?
case 0:;
break;
}
}while(j!=0); //
判斷結(jié)束
printf("
謝謝使用,再見(jiàn)符相!\n");
}//
主函數(shù)結(jié)束
void input()//
打印模塊程序
{?
char f[]="2008china"; //
設(shè)置密碼
int y;
printf("
請(qǐng)輸入密碼并以回車(chē)鍵結(jié)束:\n\n");
scanf("%s",f); //
讀取密碼
if(strcmp(f,"2008china")==0)
{
printf("
請(qǐng)依次輸入航班信息(機(jī)票數(shù)位0結(jié)束輸入):\n\n"
"
完成輸入信息請(qǐng)鍵入w以回車(chē)鍵結(jié)束\n\n"); //打印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;i
{
printf("
請(qǐng)輸入航班號(hào):\n");?
scanf("%d",&s[i].num); //
讀取航班號(hào)
printf("
請(qǐng)輸入起始站:\n");
scanf("%s",s[i].start);//
讀取起始站
printf("
請(qǐng)輸入終點(diǎn)站:\n");
scanf("%s",s[i].over);//
讀取終點(diǎn)站
printf("
請(qǐng)輸入時(shí)間:\n");
scanf("%s",s[i].time);//
讀取時(shí)間
printf("
請(qǐng)輸入機(jī)票數(shù)(機(jī)票數(shù)為0結(jié)束輸入):\n",m);
scanf("%d",&s[i].count);//
讀取機(jī)票數(shù)
m++;
printf("
第%d個(gè)信息已經(jīng)輸完是否繼續(xù)?按任意鍵繼續(xù)拆融,按0結(jié)束",m);
scanf("%d",&y);
if(y==0)
{
save();//
將結(jié)構(gòu)體信息存盤(pán)
print();//
輸出輸入的航班信息
break;
}
}
}
else
printf("
輸入密碼錯(cuò)誤!請(qǐng)檢查您的密碼是否正確!謝謝!再見(jiàn)!\n\n");
}
void save()//
保存模塊程序
{?
FILE *fp,*fp1;//
定義文件指針
if((fp=fopen("chen.dat","wb"))==NULL)//
打開(kāi)文件并判斷是否出錯(cuò)?
{
printf("
創(chuàng)建文件失敗!\n\n");//打印出錯(cuò)提示
getchar();
return;
}
if((fp1=fopen("hao.dat","wb"))==NULL)//
打開(kāi)文件并判斷是否出錯(cuò)?
{
printf("
創(chuàng)建文件失敗!\n\n");//打印出錯(cuò)提示
getchar();
return;
}
for(i=0;i
if(fwrite(&s[i],sizeof(struct
air),1,fp)==0)//
向文件寫(xiě)入數(shù)據(jù),并判斷是否出錯(cuò)
printf("
向文件輸入數(shù)據(jù)失敗!\n\n");
fprintf(fp1,"%d",m);
fclose(fp);//
關(guān)閉文件
fclose(fp1);//
關(guān)閉文件
}
void read()//
從文件讀取信息模塊
{
FILE *fp,*fp1;//
定義文件指針
if((fp=fopen("chen.dat","rb"))==NULL)//
打開(kāi)文件啊终,并判斷是否出錯(cuò)
{
printf("
出錯(cuò)镜豹,請(qǐng)檢查文件是否存在,按任意鍵返回住菜單");//打印出錯(cuò)提示
getchar();
}
if((fp1=fopen("hao.dat","rb"))==NULL)//
打開(kāi)文件并判斷是否出錯(cuò)?
{
printf("
創(chuàng)建文件失敗!\n\n");//打印出錯(cuò)提示
getchar();
return;
}
fscanf(fp1,"%d",&m);
fclose(fp1);//
關(guān)閉文件
for(i=0;i
{
fread(&s[i],sizeof(air),1,fp);//
從文件中讀取信息
}
fclose(fp);//
關(guān)閉文件
}
void print()//
打印模塊
{
char w[10];
read();//
調(diào)用讀取文件函數(shù)
printf("
航班號(hào) 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)\n");
for(i=0;i
{
printf(PRINT);//
打印信息
}
printf("
請(qǐng)按任意鍵回車(chē)鍵結(jié)束返回上層菜單以:\n");
scanf("%s",w);
}
void search()//
查詢(xún)模塊
{
char name1[20];
char name2[20];
char ii[10];
int n,no;
do
{
printf("
請(qǐng)選擇查找方式:\n\n");//打印查詢(xún)方式菜單
printf("1.
按航班號(hào)查找\n\n"
"2.
按終點(diǎn)站查找\n\n"
"3.
按航線(xiàn)查找\n\n"
"0.
返回\n\n");
printf("
請(qǐng)?jiān)?-3中選擇:\n\n"
"
按其他鍵以回車(chē)鍵結(jié)束返回主菜單:\n\n");
scanf("%d",&n);//
讀取查找方式
if(n==0)
break;
switch(n)
{
case 1:
printf("
請(qǐng)輸入航班號(hào):\n");
scanf("%d",&no);//
航班號(hào)
break;
case 2:
printf("
請(qǐng)輸入終點(diǎn)站名稱(chēng):\n");
scanf("%s",name2);//
讀取終點(diǎn)站
break;
case 3:
printf("
請(qǐng)輸入起始站名稱(chēng):\n");
scanf("%s",name1);//
讀取起始站
printf("
請(qǐng)輸入終點(diǎn)站名稱(chēng):\n");
scanf("%s",name2);//
終點(diǎn)站
break;
}
read();//
調(diào)用讀取函數(shù)
for(i=0;i
{?
if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//
按終點(diǎn)站起始站判斷輸出條件
{
printf("\n
查找航班信息成功!\n");
printf("
航班號(hào) 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)\n");
printf(PRINT);//
打印信息
break;
}
if(s[i].num==no)//
按航班號(hào)判斷輸出條件
{?
printf("\n
查找航班信息成功!\n");
printf("
航班號(hào) 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)\n");
printf(PRINT);//
打印信息
break;
}?
}
no=0;//
將航班號(hào)賦值為0
printf("
沒(méi)有您需要的信息或查找完畢:\n\n"
"
是否繼續(xù)查找?請(qǐng)鍵入yes或no以回車(chē)鍵結(jié)束\n");
scanf("%s",ii);
}while(strcmp(ii,"yes")==0);//
判斷結(jié)束
}
void shanchu()//
刪除模塊
{
char name1[20];
char name2[20];
char ii[10];
char f[]="2008china";//
設(shè)置密碼
int no,n;?
printf("
請(qǐng)輸入密碼并以回車(chē)鍵結(jié)束:\n\n");
scanf("%s",f);//
讀取密碼
if(strcmp(f,"2008china")==0) //
判斷密碼是否正確
{
do?
{
printf("
請(qǐng)選擇刪除以方式回車(chē)鍵結(jié)束:\n\n");//打印刪除方式菜單
printf("*1.
按航班號(hào)刪除\n\n"
"*2.
按航線(xiàn)刪除\n\n"
"*0.
返回\n\n");
printf("
請(qǐng)?jiān)?-2中選擇以回車(chē)鍵結(jié)束:\n");
scanf("%d",&n);//
讀取刪除方式
if(n==0)
break; //
跳出循環(huán)
switch(n)
{
case 1:
printf("
請(qǐng)輸入航班號(hào):\n");
scanf("%d",&no);//
讀取航班號(hào)
read();//
調(diào)用讀取函數(shù)
break;//
跳出循環(huán)
case 2:
printf("
請(qǐng)輸入起始站 名稱(chēng):\n");
scanf("%s",name1);//
讀取起始站
printf("
請(qǐng)輸入終點(diǎn)站名稱(chēng):\n");
scanf("%s",name2);//
讀取終點(diǎn)站
read();//
調(diào)用讀取函數(shù)
break;//
跳出循環(huán)
}
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("
查找完畢或沒(méi)有這個(gè)信息\n\n");
printf("
是否繼續(xù)刪除\n");?
printf("
請(qǐng)鍵入yes或no以回車(chē)鍵結(jié)束\n");
scanf("%s",ii); //
讀取是否繼續(xù)信息
save(); //
調(diào)用讀取函數(shù)
if(!strcmp(ii,"yes")) //
判斷是否繼續(xù)刪除?
printf("
請(qǐng)按任意鍵以回車(chē)鍵結(jié)束返回上層菜單:\n");
break;
}while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0);
//
判斷結(jié)束
}
else
printf("
對(duì)不起密碼錯(cuò)誤!您不是管理員蓝牲,不能使用此項(xiàng)功能!謝謝!再見(jiàn)!\n\n");
}
void dingpiao()//
訂票模塊
{
int n;
char a[10];
do
{
search();//
調(diào)用查詢(xún)模塊
printf("
請(qǐng)輸入您要訂的機(jī)票數(shù)以回車(chē)鍵結(jié)束:\n");
scanf("%d",&n);//
讀取所訂機(jī)票數(shù)
if(n<0)
{
printf("
請(qǐng)輸入有效的機(jī)票數(shù)趟脂!\n");//判斷機(jī)票數(shù)是否出錯(cuò)
break;
}
if(s[i].count!=0&&s[i].count>=n)//
判斷是否出錯(cuò)
{
s[i].count=s[i].count-n;
save();//
調(diào)用保存函數(shù)
printf("
訂票成功!\n\n");
break;
}
if(s[i].count
判斷是否出錯(cuò)
{
printf("
請(qǐng)輸入有效的機(jī)票數(shù):\n");
break;?
}
printf("
是否繼續(xù)? 請(qǐng)輸入yes或no以回車(chē)鍵結(jié)束:\n");//判斷是否繼續(xù)訂票
scanf("%s",a);
}while(!strcmp(a,"yes"));//
判斷結(jié)束
}
void tuipiao()//
退票模塊
{
int n;
char a[10];
do
{
search();//
調(diào)用查詢(xún)模塊
printf("
請(qǐng)輸入您要退的機(jī)票數(shù)目:\n");
scanf("%d",&n);//
輸入所退票數(shù)
if(n<0) //
判斷票數(shù)是否有效
printf("
請(qǐng)輸入有效的機(jī)票數(shù)例衍!\n");
s[i].count=s[i].count+n;
save(); //
調(diào)用保存模塊
printf("
退票成功!\n\n");
printf("
是否繼續(xù)昔期? 請(qǐng)鍵入yes或no以回車(chē)鍵結(jié)束:\n\n");//判斷是否繼續(xù)退票
scanf("%s",a);
}while(!strcmp(a,"yes"));//
判斷并跳出循環(huán)
getchar();
}
void xiugai() //
修改模塊
{
struct xiu //
定義結(jié)構(gòu)體?
{
int no;
char name1[20];
char name2[20];
char time[20];
int count;
}x[1];
char j[10];
char f[]="2008china";//
設(shè)置密碼
int n;
printf("
請(qǐng)輸入密碼并以回車(chē)鍵結(jié)束:\n\n");
scanf("%s",f);//
讀取密碼
if(strcmp(f,"2008china")==0)//
判斷是否出錯(cuò)
{
read();//
調(diào)用讀取模塊
do
{
printf( "
請(qǐng)選擇修改方式:\n\n"
"*1,
按航班號(hào)修改:\n\n"
"*2,
按航線(xiàn)修改:
\n\n");
printf("
請(qǐng)?jiān)?---2中修改以回車(chē)鍵結(jié)束:\n\n");
scanf("%d",&n);//
讀取修改方式
switch(n)
{
case 1:printf("
請(qǐng)輸入航班號(hào):\n");
scanf("%d",&x[0].no);//
讀取航班號(hào)
break;
case 2:printf("
請(qǐng)輸入起始站:\n");
scanf("%s",x[0].name1);//
讀取起始站
printf("
請(qǐng)輸入終點(diǎn)站:\n");
scanf("%s",x[0].name2);//
讀取終點(diǎn)站
break;
}
for(i=0;i
{?
if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//
判斷輸出條件
{
printf("
航班號(hào) 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)\n");
printf(PRINT);
break;
}
if(s[i].num==x[0].no)//
判斷輸出條件
{?
printf("
航班號(hào) 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)\n");
printf(PRINT);
break;
}
}
x[0].no=0; //
將結(jié)構(gòu)體中的號(hào)為零
printf("
請(qǐng)輸入新航班號(hào)已卸、起始站、終點(diǎn)站硼一、時(shí)間(星期幾)累澡、機(jī)票數(shù):\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;//
替換航班號(hào)
strcpy(s[i].start,x[0].name1);//
替換其始站
strcpy(s[i].over,x[0].name2);//
替換終點(diǎn)站
strcpy(s[i].time,x[0].time);//
替換時(shí)間
s[i].count=x[0].count;//
替換機(jī)票數(shù)
save();//
調(diào)用保存模塊
printf("
是否繼續(xù)?請(qǐng)鍵入yes或no以回車(chē)鍵結(jié)束:\n\n");
scanf("%s",j);
}while(strcmp(j,"yes")==0); //
判斷結(jié)束
}
else
printf("
對(duì)不起密碼錯(cuò)誤!您不是管理員般贼,不能使用此項(xiàng)功能!謝謝!再見(jiàn)!\n\n");
}