以下程序只是作为一个简单的示例:(火车票订票系统)
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> /*************************************预编译模块***************************************************/ #define HEADER1 "|------------------------------book ticket sys--------------------------------|\n" #define HEADER2 "| number |start city|reach city|takeoffTime|reach time| price |ticketNum |\n" #define HEADER3 "|-----------------------------------------------------------------------------|\n" #define FORMAT "|%-10s|%-10s|%-10s|%-11s|%-10s|%-10.2f|%-10d|\n" //除了takeoffTime这一项,为保持上下对齐的美观,其它项数据都固定只占10位的长度 //定义火车票信息结构体 typedef struct _ticket { char number[10]; //火车票的车次 char startCity[10]; //火车票的出发城市 char reachCity[10]; //火车票的到达城市 char takeoffTime[10]; //火车票的出发时间 char reachTime[10]; //火车票的到达时间 float price; //火车票的票价 int ticketNum; //火车票的剩余票数 }ticket; //定义单向链表节点 typedef struct _node { void *dat; //一般为结构体指针 int size; //dat指向区域的大小,一般为结构体的大小 struct _node *next; //后继节点 }node; node *g_ticketList = NULL; /*************************************链表模块***************************************************/ //创建链表 node *createList(int size) { node *head = (node *)malloc(sizeof(node)); //给链表头结点分配内存空间 if(!head) { printf("listHead malloc error!\n"); return NULL; } head->dat = NULL; //链表头结点不存储数据,故指向NULL head->size = size; //链表的size一般为结构体的大小[size == sizeof(ticket)] head->next = NULL; return head; } //插入数据到链表尾节点后 int insertData_toListTail(node *head,void *dat) { node *tmpNode = (node *)malloc(sizeof(node)); //定义一个存储插入数据的临时节点,插入该节点就相当于插入数据了 if(!tmpNode) { printf("tmpNode malloc error!\n"); return NULL; } //给临时节点的数据指针dat分配内存空间 tmpNode->dat = malloc(sizeof(head->size)); //dat的类型一般为struct *,所以不再进行(void *)的强制类型转换 if (!tmpNode->dat) { printf("tmpNode->dat malloc error!\n"); return NULL; } tmpNode->dat = dat; //将要插入的数据保存在临时节点内 tmpNode->size = head->size; node *cur = head; //定义当前节点 while(cur->next) //找到尾节点 [若链表只有一个头节点,则头节点就是尾节点] { cur = cur->next; } //将保存要插入数据的临时节点,插入到尾节点后 cur->next = tmpNode; tmpNode->next = NULL; //此时,tmpNode变为尾节点 } /*************************************火车票模块***************************************************/ //添加火车票,并保存在火车票信息链表中 int addTicket_toList(node *head) { ticket *tmpTicket = (ticket *)malloc(sizeof(ticket)); //定义火车票信息的临时结构体指针 if (!tmpTicket) { printf("tmpTicket malloc error!\n"); return -1; } printf("请输入火车票的车次:"); scanf("%s",tmpTicket->number); printf("请输入火车票的出发城市:"); scanf("%s",tmpTicket->startCity); printf("请输入火车票的到达城市:"); scanf("%s",tmpTicket->reachCity); printf("请输入火车票的出发时间:"); scanf("%s",tmpTicket->takeoffTime); printf("请输入火车票的到达时间:"); scanf("%s",tmpTicket->reachTime); printf("请输入火车票的票价:"); scanf("%f",&tmpTicket->price); printf("请输入火车票的剩余票数:"); scanf("%d",&tmpTicket->ticketNum); insertData_toListTail(head,tmpTicket); //插入火车票信息数据,到火车票信息链表尾节点后 return 0; } //显示火车票信息链表中的所有节点数据 int showTicketList_allData(node *head) { if(!head->next) //检测链表是否只有一个节点 { printf("list only have one node,error!\n"); //链表只有一个节点,则打印错误信息,并返回 return -1; } ticket *tmpTicket = (ticket *)malloc(sizeof(ticket)); //定义火车票信息的临时结构体指针 if (!tmpTicket) { printf("tmpTicket malloc error!\n"); return -1; } printf(HEADER1); //打印输出头信息 printf(HEADER2); printf(HEADER3); for(node *cur=head->next;cur!=NULL;cur=cur->next) //由于头节点不保存数据,所以从第二个节点开始显示数据 { tmpTicket = (ticket *)cur->dat; //将节点数据取出来,赋给临时结构体指针 printf(FORMAT,tmpTicket->number,tmpTicket->startCity,tmpTicket->reachCity,tmpTicket->takeoffTime,tmpTicket->reachTime,tmpTicket->price,tmpTicket->ticketNum); } return 0; } void menu() { printf("1. add ticket information \n"); printf("5. show ticket information \n"); } int _tmain(int argc, _TCHAR* argv[]) { int sel = 0; g_ticketList = createList(sizeof(ticket)); //创建火车票信息链表 do { menu(); //显示菜单选项 printf("请输入你的选项:"); scanf("%d",&sel); switch(sel) { case 1: { addTicket_toList(g_ticketList); //添加火车票信息,到火车票链表中 system("PAUSE"); //暂停 } break; case 5: { showTicketList_allData(g_ticketList); //显示火车票信息链表中的所有节点数据 system("PAUSE"); //暂停 } break; } system("CLS"); //清屏 } while (sel!=7); return 0; }
添加火车票信息的示意图:
显示火车票信息的示意图
原文地址:https://www.cnblogs.com/linuxAndMcu/p/9716303.html
时间: 2024-10-21 06:21:54