導航:首頁 > 編程語言 > 檢索編程

檢索編程

發布時間:2023-03-22 16:54:40

⑴ 求C語言編程(航班信息查詢與檢索)

#include "stdio.h"
#include "malloc.h"
#include "string.h"
#define MAXN 100

typedef struct{
char hour[MAXN];
char minute[MAXN];
} time;

typedef struct node
{
char number[MAXN]; //航班號
time start; //起飛時間
time end; //到達時間
char start_station[MAXN]; //起點站
char end_station[MAXN]; //終點站
char type[MAXN]; //飛機型號
char price[MAXN]; //票價
struct node*link;
}NODE;

NODE *create_link_list(int n)
{
int i;
NODE *head,*p,*q;
if(n==0)return(NULL);
head=(NODE*)malloc(sizeof(NODE));
for(i=0;i <MAXN;i++)
{
head->number[i]='\0';
head->start.hour[i]='\0';
head->start.minute[i]='\0';
head->end.hour[i]='\0';
head->end.minute[i]='\0';
head->start_station[i]='\0';
head->end_station[i]='\0';
head->type[i]='\0';
head->price[i]='\0';
}
p=head;
for(i=1;i <n;i++)
{
printf("請輸入航班號:");
scanf("%s",&(p->number));
printf("請輸入起飛時間(時 分):");
scanf("%s %s",&(p->start.hour),&(p->start.minute));
printf("請輸入達到時間(時 分):");
scanf("%s %s",&(p->end.hour),&(p->end.minute));
printf("請輸入起點站 終點站:");
scanf("%s %s",&(p->start_station),&(p->end_station));
printf("請輸入飛機型號:");
scanf("%s",&(p->type));
printf("請輸入票價:");
scanf("%s",&(p->price));
printf("\n");
q=(NODE*)malloc(sizeof(NODE));
p->link=q;
p=q;
}
printf("請輸入航班號:");
scanf("%s",&(p->number));
printf("請輸入起飛時間(時 分):");
scanf("%s %s",&(p->start.hour),&(p->start.minute));
printf("請輸入達到時間(時 分):");
scanf("%s %s",&(p->end.hour),&(p->end.minute));
printf("請輸入起點站 終點站:");
scanf("%s %s",&(p->start_station),&(p->end_station));
printf("請輸入飛機型號:");
scanf("%s",&(p->type));
printf("請輸入票價:");
scanf("%s",&(p->price));
printf("\n");
getchar();
p->link=NULL;
return(head);
}

void insert(NODE **p_head,NODE *q)
{
NODE *p;
if(*p_head==NULL)
*p_head=q;
else
{
p=*p_head;
while(p!=NULL&&p->link!=NULL)
p=p->link;
p->link=q;
}
}

unsigned int countit(NODE* n)//計算鏈表長度
{
unsigned int counti = 0;
while(n!=NULL)
counti++,n=n->link;
return counti;
}

NODE* getindex(NODE* head, int num);

NODE* getindex(NODE* head, int num)//取得index為num 的節點!
{

if(num<0 || num>countit(head))
return NULL;
NODE* rn = head;

while(--num>0)
rn = rn->link;
return rn;
}

int binSearch(NODE* n,char *strinput,int low, int high)// 二分查找
{
int i;
int middle = (high+low)/2;

if (high < low)
return 0;

if ((i=strcmp(strinput, n->number)) <0)
high= middle;
else if (i > 0)
low = middle;
else
{
i = middle;
return i;
}
binSearch(getindex(n,middle),strinput,low,high);
}

int bisect(char a[],int n,char s[MAXN])//二分查找
{
int i,j,m;
i=0;
j=n-1;
while(i <=j)
{
m=(i+j)/2;
}
return(-1);
}

NODE *search1(NODE *head,char v[MAXN])//起點站順序查找
{
for(;head!=NULL&&strcmp(head->start_station,&v[0]);head=head->link);
return(head);
}

NODE *search2(NODE *head,char w[MAXN])//到達站順序查找
{
for(;head!=NULL&&strcmp(head->end_station,&w[0]);head=head->link);
return(head);
}

NODE *search3(NODE *head,char x[MAXN],char y[MAXN])//起飛時間順序查找
{
for(;head!=NULL&&(strcmp(head->start.hour,&x[0]) || strcmp(head->start.minute,&y[0]));head=head->link);
return(head);
}

NODE *search4(NODE *head,char t[MAXN],char u[MAXN])//到達時間順序查找
{
for(;head!=NULL&&(strcmp(head->end.hour,&t[0]) || strcmp(head->end.minute,&u[0]));head=head->link);
return(head);
}

void output(NODE *p)
{
while(p!=NULL)
{
printf("航班信息:\n");
printf("航班號:%s\n",p->number);
printf("起飛時間:%s點%s分,",p->start.hour,p->start.minute);
printf("到達時間:%s點%s分\n",p->end.hour,p->end.minute);
printf("起點站:%s,",p->start_station);
printf("到達站:%s\n",p->end_station);
printf("飛機型號:%s ",p->type);
printf("票價:%s元\n\n",p->price);
p=p->link;
}
}

NODE *rank( NODE *head)
{
NODE *q=0,*p=0,*t,*h1;
h1=head->link;
head->link=NULL;

while(h1!=NULL)
{
t=h1;
h1=h1->link;

p=head;
q=head;

while( p!=NULL && strcmp(t->number, p->number)>0 )
{
q=p;
p=p->link;
}

if(q == p)
{
t->link=p;
head=t;
}
else
{
t->link=p;
q->link=t;
}
}
return head;
}

int main(int argc, char* argv[])
{
NODE *p,*q,*r;
int a,b,i,j,n;
int count=0;
char o[MAXN];
char s[MAXN];
char v[MAXN];
char w[MAXN];
char x[MAXN];
char y[MAXN];
char t[MAXN];
char u[MAXN];
for(i=0;i <MAXN;i++)
{
o[i]='\0';
s[i]='\0';
v[i]='\0';
w[i]='\0';
x[i]='\0';
y[i]='\0';
t[i]='\0';
u[i]='\0';
}
while(true)
{
printf("【航班信息的查詢與檢索】\n");
printf("★*******************************★\n");
printf(" 1.建立航班信息\n");
printf(" 2.插入航班信息\n");
printf(" 3.按航班號進行排序 \n");
printf(" 4.航班信息查詢\n");
printf(" 5.顯示航班信息\n");
printf(" 6.退出本系統\n");
printf("★*******************************★\n");
scanf("%d",&a);
getchar();
switch(a)
{
case 1:
printf("請輸入你所要建立的航班信息個數:");
scanf("%d",&n);
p=create_link_list(n);
break;
case 2:
q=create_link_list(1);
insert(&p,q);
break;

case 3:
p = rank(p);
break;
case 4:
printf("\n1、按照航班號查詢.\n");
printf("2、按照起點站查詢.\n");
printf("3、按照到達站查詢.\n");
printf("4、按照起飛時間查詢.\n");
printf("5、按照到達時間查詢.\n");
scanf("%d",&b);
getchar();
switch(b)
{
case 1:
p=rank(p);
printf("請輸入您所要找的航班號:");
scanf("%s",s);
if( binSearch(p,s,1, countit(p)) )
printf("scuess!\n");
break;
case 2:
printf("請輸入起點站");
scanf("%s",&v[MAXN]);
if(search1(p,&v[MAXN])!=NULL)
{
printf("查詢成功!\n");
r=search1(p,&v[MAXN]);
output(r);
}
else
printf("查詢失敗,該信息錄中沒有該起點站!\n");
break;
case 3:
printf("請輸入到達站");
scanf("%s",&w[MAXN]);
if(search2(p,&w[MAXN])!=NULL)
{
printf("查詢成功!\n");
r=search2(p,&w[MAXN]);
output(r);
}
else
printf("查詢失敗,該信息錄中沒有該到達站!\n");
break;
case 4:
printf("請輸入起飛時間(時 分)");
scanf("%s %s",&x[MAXN],&y[MAXN]);
if(search3(p,&x[MAXN],&y[MAXN])!=NULL)
{
printf("查詢成功!\n");
r=search3(p,&x[MAXN],&y[MAXN]);
output(r);
}
else
printf("查詢失敗,該信息錄中沒有該到達站!\n");
break;
case 5:
printf("請輸入到達時間");
scanf("%s %s",&t[MAXN],&u[MAXN]);
if(search4(p,&t[MAXN],&u[MAXN])!=NULL)
{
printf("查詢成功!\n");
r=search4(p,&t[MAXN],&u[MAXN]);
output(r);
}
else
printf("查詢失敗,該信息錄中沒有該到達站!\n");
break;

}
break;
case 5:
output(p);
printf("\n");
break;

case 6:
return(0);
}
}
return(0);
}

⑵ 如何實現學生信息檢索問題用C++編程

把學生信息保存到單鏈表中,我把我寫的源碼給你:你看看改改用!
//21chenxb's work
//2009/7/1
////////////彎源//////////////////////頭文件包含
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<malloc.h>
#include<conio.h>
#include<stdlib.h>
/////////////////////////////////預定義

#define ERROR 0
#define OK 1;
////////////////////////////////結構體定義

struct student
{
char studentno[10];//學號
char name[10];//姓名
char sex[5];//性別
char jiguan[10];//籍貫
char xueyuan[10];//學院
char banji[10];//班級
} ;

typedef int ElemType;

typedef struct LNODE
{
student data;
struct LNODE *next;
}LNode, *LinkList;

/////////////////////////哪喚////存儲結構(單鏈表)所必須的實現函數
//初始化單鏈表
int init(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(L)
L->next=NULL;
return OK;
}/*init */

//求表長
int ListLength(LinkList L)
{
LinkList p=L->next;
int n=0;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;

}/*getLinklist length*/
//插入操作
int ListInsert(LinkList &L,int i, student e)
{
LinkList s,p = L;
int j = 0;
while (p && j < i-1)
{ p = p->next; ++j; }
if (!p)
return -1;
s = (LinkList) malloc ( sizeof (LNode));
s->data=e;
s->next = p->next;
p->next = s;
return 1;

}/*ListInsert before i*/
///////////////////////////////函數聲明部分
void menu();//顯示菜單
void add(LinkList stuinfo);//添加信息
void del(LinkList stuinfo);//刪除信息
void que(LinkList stuinfo);//查找信息
void baobiao(LinkList L);//顯示全部信息
void xuanze(LinkList stuinfo);//用戶完成操李鬧凱作後的選擇
void begin(int choose,LinkList stuinfo);//程序運行中開始
int addiden(LinkList stuinfo,student stu);//用於判斷添加信息的時候出現相同學號
void help(LinkList stuinfo);//幫助信息
void start();//新啟動時開始
void Exception();//處理操作異常
/////////////////////////////主函數部分
void main()
{
cout<<"-----------------IMPORTANT INFO ---------------------"<<endl;
cout<<"This programer is powerd by 21chenxb!"<<endl;
cout<<"You may choose 5 and look the help info."<<endl;
cout<<"You must be more careful,or you will lose the data"<<endl;
cout<<"------------------------------------------------------"<<endl;
start();

}
////////////////////////////各詳細功能函數實現部分
void menu()//菜單
{
cout<<"------The Student Management System is running------"<<endl;
cout<<"菜單:"<<endl;
cout<<"----------------------------------------------------"<<endl;
cout<<"| N.退出系統(N=0或任何非數字字串). |"<<endl;
cout<<"| 1.添加學生信息. |"<<endl;
cout<<"| 2.刪除學生信息. |"<<endl;
cout<<"| 3.查詢學生信息. |"<<endl;
cout<<"| 4.報表學生信息. |"<<endl;
cout<<"| 5.查看幫助信息. |"<<endl;
cout<<"----------------------------------------------------"<<endl;
cout<<"請選擇操作!"<<endl;
cout<<"----------------your work is beginning-------------------"<<endl;
}
void add(LinkList stuinfo)//添加
{
cout<<"------------you are adding the student's info-------"<<endl;
int n;
char temp;
student info;
cout<<"姓名:";
cin>>info.name;
cout<<"性別:";
cin>>info.sex;
cout<<"學號:";
cin>>info.studentno;
if(addiden(stuinfo,info)==1)
{
cout<<"學號重復!請檢查後重新添加!"<<endl;
cout<<"----------------The exception is passed-------------"<<endl;
cout<<"現在重新添加!"<<endl;
add(stuinfo);

}

cout<<"籍貫:";
cin>>info.jiguan;
cout<<"學院:";
cin>>info.xueyuan;
cout<<"班級:";
cin>>info.banji;
n=ListLength(stuinfo)+1;
ListInsert(stuinfo,n,info);
///////////////////////////////////////////////////
cout<<"繼續添加嗎?"<<endl<<"1→繼續 2→結束"<<endl;
cin>>temp;
switch(temp)
{
case '1': add(stuinfo);break;
case '2': xuanze(stuinfo);break;
default: Exception();break;
}

}
void del(LinkList stuinfo)//刪除
{
cout<<"------------you are deleting the student's info-------"<<endl;
int flag=0;
student que;
cout<<"請輸入要刪除的學號:"<<endl;
cin>>que.studentno;
LinkList p,q;
p=stuinfo->next;
q=stuinfo;
while(p&&flag!=1)
{

if(strcmp((p->data).studentno,que.studentno)==0)
{
flag=1;
//q=p->next;
p=q->next;//正確的刪除方法,上面的刪除方法不正確
q->next=p->next;//
free(p);
cout<<"刪除成功!"<<endl;
}
else
{
p=p->next;
q=q->next;
}
if(flag==0)
{
cout<<"刪除失敗,無此學號信息!"<<endl;
}
}
//////////////////////////////////////
xuanze(stuinfo);
}
void que(LinkList stuinfo)//查詢

{
cout<<"------------you are searching the student's info-------"<<endl;
int flag=0;
student que;
cout<<"請輸入要查詢的學號:"<<endl;
cin>>que.studentno;
LinkList p;
p=stuinfo->next;
while(p)
{
if(strcmp((p->data).studentno,que.studentno)==0)//字元串只能比較用
{
flag=1;
cout<<"檢索成功!"<<endl;
cout<<"學號"<<setw(12)<<"姓名"<<setw(12)<<"性別"<<setw(12)<<"籍貫"<<setw(12)<<"學院"<<setw(12)<<"班級"<<endl;
cout<<(p->data).studentno<<setw(10)<<(p->data).name<<setw(10)<<(p->data).sex<<setw(10)<<(p->data).jiguan<<setw(10)<<(p->data).xueyuan<<setw(10)<<(p->data).banji<<endl;
}

p=p->next;
}
if(flag==0)
{
cout<<"查詢失敗,無此學號信息!"<<endl;
}

/////////////////////////////
xuanze(stuinfo);
}
int addiden(LinkList stuinfo,student stu)//用於判斷添加的學號是否重復
{
LinkList p;
int flag=0;
p=stuinfo->next;
while(p)
{
if(strcmp((p->data).studentno,stu.studentno)==0)//字元串只能比較用
{
flag=1;
}
p=p->next;
}
return flag;
}

void baobiao(LinkList L)//報表,顯示全部學生信息
{
cout<<"------------There is all the students' info---------"<<endl;
LinkList p,stuinfo=L;
p=L;
cout<<"學號"<<setw(12)<<"姓名"<<setw(12)<<"性別"<<setw(12)<<"籍貫"<<
setw(12)<<"學院"<<setw(12)<<"班級"<<endl;
while(p->next)
{
p=p->next;

cout<<(p->data).studentno<<setw(10)<<(p->data).name<<
setw(10)<<(p->data).sex<<setw(10)<<(p->data).jiguan<<
setw(10)<<(p->data).xueyuan<<setw(10)<<(p->data).banji<<endl;

}
cout<<endl;
//////////////end function
xuanze(stuinfo);
}

void xuanze(LinkList stuinfo)//操作之後的選擇
{
cout<<"------------your work is over,please give new choice!-------"<<endl;
char xuanze;
cout<<"本次操作結束!";
cout<<"是否繼續? y/n? "<<endl;
//system("pause");

cin>>xuanze;
if(xuanze=='y')
{
system("cls");//qingping
int choose;
menu();
cin>>choose;
begin(choose,stuinfo);
}
else
{
if(xuanze=='n')
{
return;
}
else
{
Exception();
}
}
}

void begin(int choose,LinkList stuinfo)//開始時候的選擇
{
switch(choose)
{
case 0:
cout<<"成功退出,歡迎再來!"<<endl;break;
case 1: add(stuinfo);break;
case 2: del(stuinfo);break;
case 3: que(stuinfo);break;
case 4: baobiao(stuinfo);break;
case 5: help(stuinfo);break;
default :
cout<<"非法輸入!系統自動退出!"<<endl;
return;
}
}

void help(LinkList L)//幫助信息顯示函數
{
int t;
LinkList stuinfo=L;
cout<<"-------you are reading the helpful info------------"<<endl;
cout<<"a.本系統尚未採用文件讀寫機制,僅供測試演算法使用。"<<endl;
cout<<"b.測試之前,請按提示添加部分信息,且不要關閉程序。"<<endl;
cout<<"c.菜單中的序號為操作代號,提示信息中,依據提示代號。"<<endl;
cout<<"d.做的不好,多多指教,謝謝!是否返回?1→返回。"<<endl;
cin>>t;
if(t==1)
{
xuanze(stuinfo);//常規程序開始
}
else
{
Exception();//誤操作後程序開始
}
}
void start()//程序開始
{
int choose;
LinkList stuinfo;
init(stuinfo);
//////////////////////////
menu();
cin>>choose;
begin(choose,stuinfo);
}

void Exception()//用於處理用戶誤操作
{
cout<<"----------------------------------"<<endl;
cout<<endl;
cout<<"非法輸入,請仔細操作!"<<endl;
system("pause");
system("cls");
cout<<"本系統自動重新開始!"<<endl;
cout<<endl;
cout<<"----------------------------------"<<endl;
start();
}

閱讀全文

與檢索編程相關的資料

熱點內容
python數據分析實戰pdf 瀏覽:983
u盤插入文件夾 瀏覽:916
華為amd雲伺服器 瀏覽:495
漢化編程卡是什麼意思 瀏覽:126
python學習pdf 瀏覽:313
祝緒丹程序員那麼可愛拍吻戲 瀏覽:198
asp源碼會員消費系統 瀏覽:113
java反射設置 瀏覽:152
python一行文 瀏覽:439
排序演算法優缺點 瀏覽:563
惡搞加密文件pdf 瀏覽:674
gif怎麼壓縮圖片大小 瀏覽:217
命令選擇當前不可用 瀏覽:158
歐幾里得演算法如何求逆元 瀏覽:506
男中學生上課解壓神器 瀏覽:373
加密狗拔掉之後怎麼辦 瀏覽:27
雲儲存平台源碼 瀏覽:847
解壓文件蘋果手機rar 瀏覽:149
centos開機命令行模式 瀏覽:697
遍歷所有listpython 瀏覽:660