本文目錄一覽:
C語言的題目—試設計一個航空客運訂票系統
白痴,這個問題至少200分,我以前的比這個簡單的200分也沒人回答
#include stdio.h
#include string.h
#include conio.h
#include ctype.h
#include stdlib.h
#include malloc.h
#include math.h//overflow
#define ok 1
typedef struct Yidingkehu
{//單鏈表
char name[15];//已訂票的客戶姓名
int dingpiaoshu;//已訂票數量
struct Yidingkehu *next1;//
}Yidingkehu,*Link;
typedef struct Weidingkehu
{//單鏈隊
char name[15];//預訂票的客戶姓名
int yudingpiao;// 要訂票數量
struct Weidingkehu *next2;//下一個鏈隊結點指針
}Weidingkehu,*Qptr;
typedef struct Hangxian
{//創建一個含有六個信息的結構體
char hangbanhao[15];//航班號-
char feijihao[15];//飛機號
int feixingriqi;//起飛時間
int chenkerenshu;//座位數
int yupiao;//余票
char zhongdianzhai[15];//降落城市
struct Hangxian *next;//指向下一個鏈結點的指針
struct Yidingkehu *yiding;//定義一個指向已訂票客戶的頭結點指針
struct Weidingkehu *yudingqueue;
}Hangxian,*Linklist;
Linklist InitLinklist();//01
int InsertLinklist(Linklist head1);//02
void hbhchaxun();//通過航班號查詢
void mddchaxun();//通過目的地查詢
void lurugongneng();//初始化錄入功能
void chaxungongnen();//查詢功能
void dingpiaogongnen();//訂票功能
void tuipiaogongnen();//退票功能
void main()
{
int n;
do{ //打印主界面
printf(“\t 歡迎使用航空客運訂票系統\n”);
printf(“\t+++++++++++++++++++++++++++++\n”);
printf(“\t==1. 錄入功能 ==\n”);
printf(“\t==2. 查詢功能 ==\n”);
printf(“\t==3. 訂票功能 ==\n”);
printf(“\t==4. 退票功能 ==\n”);
printf(“\t==5. 退出 ==\n”);
printf(“\t+++++++++++++++++++++++++++++\n”);
printf(“\t請選擇:”);
scanf(“%d”,n);printf(“\n”);
switch(n)
{
case 1: lurugongneng();//錄入功能
break;
case 2: chaxungongnen();//查詢功能
break;
case 3: dingpiaogongnen();//訂票功能
break;
case 4:tuipiaogongnen();//退票功能
break;
default :exit(0);//退出
}
}while(n==1||n==2||n==3||n==4);
}
void lurugongneng()//初始化的單鏈表*********************************************************錄入功能
{
Linklist p;
//int m,n;
if(!p) exit(OVERFLOW);
printf(“\t請依次輸入下面幾項內容:\n\n”);//這裡的輸入採用一個個單獨輸入,避免了亂賦值的現象
printf(“航班號\n”);
gets(p-hangbanhao);//這裡的二個gets主要是因為在回車鍵的輸入,其中的第一個是來接收上次的回車
gets(p-hangbanhao);
printf(“飛機號\n”);
gets(p-feijihao);
printf(“終點站\n”);
gets(p-zhongdianzhai);
printf(“飛行日期\n”);
scanf(“%d”,p-feixingriqi);
printf(“乘客總數\n”);
scanf(“%d”,p-chenkerenshu);
printf(“余票數\n”);
scanf(“%d”,p-yupiao);
}
void chaxungongnen()//******************************************************************查詢功能
{
int n;
printf(“\t 查 找 航 線 信 息 \n”);
printf(“\t+++++++++++++++++++++++++++++\n”);
printf(“\t==1. 通過目的地查詢 ==\n”);
printf(“\t==2. 通過航班號查詢 ==\n”);
printf(“\t+++++++++++++++++++++++++++++\n”);
printf(“\t請選擇:”);
scanf(“%d”,n);
printf(“\n”);//格式化
switch(n)
{
case 1:mddchaxun();
break;
case 2:hbhchaxun();
break;
default :break;
}
}
void mddchaxun()//通過目的地查詢
{
char c[15];
int m;
Linklist p=L;
printf(“\t請輸入要查詢的目的地:”);
gets(c);
gets(c);//原因同上
do{
p=p-next;
if(p)
{
m=strcmpi((*p).zhongdianzhai,c);//如果==的話則m=0;
if(m==0)
{
printf(“\t航班信息:\n”);
printf(“\t航班號:%s\n”,p-hangbanhao);
printf(“\t飛機號:%s\n”,p-feijihao);
printf(“\t飛行時間:周%d\n”,p-feixingriqi);
printf(“\t余票量:%d\n”,p-yupiao);
}
}
else
{//如果不匹配的話就做
printf(“\t對不起沒有你要找的目的地:\n\n”); m=0;
}
}while(m!=0);
}
void hbhchaxun()//通過目的地查詢
{
char c[15];
int m;
Linklist p=L;
printf(“\t請輸入要查詢的航班號:”);
gets(c); gets(c);printf(“\n”);
do{
p=p-next;
if(p)
{
m=strcmpi((*p).hangbanhao,c);//如果==的話則m=0;這裡的(*p).與p-的作用是一樣的
if(m==0)
{
printf(“\t航班信息:\n”);
printf(“\t航班號:%s\n”,p-hangbanhao);
printf(“\t飛機號:%s\n”,p-feijihao);
printf(“\t飛行時間:周%d\n”,p-feixingriqi);
printf(“\t余票量:%d\n\n”,p-yupiao);
}
}
else
{//如果不匹配的話就做
printf(“\t對不起沒有你要找的航班號:\n”); m=0;
}
}while(m!=0);
}
void dingpiaogongnen()//***************************************************************訂票功能
{
char c[15];
int m=1,piao,ydpiao=0,yd=0,n;//
gets(c);
printf(“請輸入終點站名:”); gets(c); printf(“\n”);
p=L-next;
if(p) {
do{//查找一下,是否有這個航班
if(!p)
{
printf(“對不起,沒有你要找的航班:\n\n”);
goto loop1;
}
m=strcmpi(p-zhongdianzhai,c);
if(m==0)
{
printf(“航班信息:\n”);
printf(“航班號:%s\n”,p-hangbanhao);
printf(“飛機號:%s\n”,p-feijihao);
printf(“飛行時間:周%d\n”,p-feixingriqi);
printf(“余票量:%d\n”,p-yupiao);}
else p=p-next;
}while(m!=0);
if(m==0)
{
do{
printf(“\n請輸入你要訂的票數:”); scanf(“%d”,piao);
if(piao=p-yupiao)
{
h=p-yiding;
if(h)
{
h1=h;
h=h-next1;
h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
printf(“請輸入你的名字:”);
gets(h-name);gets(h-name);
h-dingpiaoshu=piao;
h-next1=h1-next1;
h1-next1=h;
p-yupiao=p-yupiao-piao;
printf(“訂票成功:\n”); m=2;
}
}
else
{
printf(“余票量:%d\n”,p-yupiao);
printf(“對不起,余票 %d 張不足,不能完成訂票\n\n”,p-yupiao);
printf(” 是否要重新訂票?\n”);
printf(“需要請輸入1 否則請按2 預訂請輸入3 : “);
scanf(“%d”,m);
printf(“\n”);
if(m==3) goto loop3;
}
}while(m==1);
}
}
else if(!p)
{
loop3: struct Weidingkehu *q3;
printf(“對不起,該航班的票已售完\n”);
q.front=p-yudingqueue;
if(q.front==q.rear) printf(“沒有人預訂票,是否要預訂?\n”);
else if(q.front!=q.rear) printf(“已有人預訂票,是否要預訂?\n”);
printf(“預訂請輸入1 否則輸入2 : “);
scanf(“%d”,n);
printf(“\n”);
if(n==1)
{
printf(“請輸入你的姓名”); gets(q3-name); gets(q3-name);//q3不能指向name???
printf(“請輸入訂票數”); scanf(“%d”,q3-yudingpiao);
q3-next2=NULL;
q.rear-next2=q3;
q.rear=q3;
printf(” 你已經預訂了 !\n”);
}
}
loop1:;
}
void tuipiaogongnen()//***************************************************************退票功能
{
}
用C語言實現對單鏈表的基本操作
#include stdio.h
#include stdlib.h
typedef int DataType;
typedef struct node {
DataType member;
struct node *next;
}*LinkList, *pNode;
// 初始化鏈表
LinkList GetEmptyList() {
LinkList head = (pNode)malloc(sizeof(struct node));
head-member = 0;
head-next = NULL;
return head;
}
// 在非增鏈表中插入結點
void InsertNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p-next != NULL; p = p-next) {
if(p-next-member = x) {
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
return;
}
}
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
}
// 新結點插入為首結點
void PushNode(LinkList head, DataType x) {
pNode p = (pNode)malloc(sizeof(struct node));
p-member = x;
p-next = head-next;
head-next = p;
}
// 刪除結點
int DeleteNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p != NULL; p = p-next) {
if(p-next-member == x) {
q = p-next;
p-next = q-next;
free(q);
return 1; // 成功刪除member(第一個)為x的結點
}
}
return 0; // 沒有找到member為x的結點
}
// 查找結點
int FindNode(LinkList head, DataType x) {
pNode p;
for(p = head-next; p != NULL; p = p-next) {
if(p-member == x) return 1; // 找到了
}
return 0; // 沒有找到
}
// 銷毀鏈表
void DestroyList(LinkList head) {
pNode q,p = head;
while(p) {
q = p;
p = q-next;
free(q);
}
head = NULL;
}
// 遍歷鏈表
void ShowList(LinkList head) {
pNode p = head-next;
while(p != NULL) {
printf(“%d “,p-member);
p = p-next;
}
printf(“\n”);
}
int main() {
DataType x,res;
LinkList head = GetEmptyList();
printf(“輸入一個整數(‘q’ to quit): “);
while(scanf(“%d”,x) == 1) {
InsertNode(head, x); // 創建非增鏈表
printf(“輸入一個整數(‘q’ to quit): “);
}
fflush(stdin);
ShowList(head);
printf(“輸入待查找的整數: “);
scanf(“%d”,x);
res = FindNode(head, x);
if(res) printf(“找到了。\n”);
else printf(“沒找到!\n”);
printf(“輸入待刪除的整數: “);
scanf(“%d”,x);
res = DeleteNode(head, x);
if(res) printf(“成功刪除。\n”);
else printf(“沒找到數據為:%d的結點!\n”,x);
ShowList(head);
DestroyList(head);
return 0;
}
C語言如何創建單鏈表?
C語言創建單鏈表如下:
#include”stdio.h”
#include”stdlib.h”
#include”malloc.h”
#include “iostream.h”
typedef struct node
{
int data;
node * next;
}node , * List;
void create(int n)
{
int c;
List s,L;
L=(List)malloc(sizeof(node));
L-next=NULL;
printf(“請輸入第1個數據:”);
scanf(“%d”,c);
L-data=c;
for(int i=2;i=n;i++)
{
s=(List)malloc(sizeof(node));
printf(“請輸入第%d個數據:”,i);
scanf(“%d”,c);
s-data=c;
s-next=L;
L-next =s;
}
printf(“鏈表創建成功!”);
}
void main()
{
int n;
printf(“請你輸入鏈表的個數:”);
scanf(“%d”,n);
create(n);
}
單鏈表創建方法:
單鏈表的建立有頭插法、尾插法兩種方法。
1. 頭插法
單鏈表是用戶不斷申請 存儲單元和改變鏈接關係而得到的一種特殊 數據結構,將鏈表的左邊稱為鏈頭,右邊稱為鏈尾。頭插法建單鏈表是將鏈表右端看成固定的,鏈表不斷向左延伸而得到的。頭插法最先得到的是尾結點。
由於鏈表的長度是隨機的,故用一個while循環來控制鏈表中結點個數。假設每個結點的值都大於O,則循環條件為輸入的值大於o。申請 存儲空間可使用malloc()函數實現,需設立一申請單元 指針,但malloc()函數得到的指針並不是指向 結構體的指針,需使用 強制類型轉換,將其轉換成結構體型指針。剛開始時,鏈表還沒建立,是一空鏈表,head 指針為NULL。
鏈表建立的過程是申請空間、得到數據、建立鏈接的循環處理過程。
2. 尾插法
若將鏈表的左端固定,鏈表不斷向右延伸,這種建立鏈表的方法稱為尾插法。尾插法建立鏈表時,頭 指針固定不動,故必須設立一個搜索指針,向鏈表右邊延伸,則整個算法中應設立三個鏈表指針,即頭指針head、搜索指針p2、申請單元指針pl。尾插法最先得到的是 頭結點。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/251806.html