⑴ 求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();
}