铁路售票管理系统    
程序中传递的有信息有:票务信息(包括车次,出发站、到达站、出发时间日期,历时、票数,票价)个人购票信息(姓名,身份信息,车次,出发时间日期,座位号,票价)

票务浏览        (对票务系统中的所有票务信息进行浏览,获取不同时间日期的票务信息。)
购票             当乘客购票成功后,为乘客构建购票信息,用于存储该乘客所有的购票信息,
                     以便乘客查询,同时减少票务系统中的相关票数。
退票             当乘客退票成功后,将相关的购票信息从为乘客构建的购票信息系统中删除,
                     同时增加票务系统中的相关票数。
信息查看         乘客可随时查看票务系统中所有的票务信息,同时也可提供UI,用于查看个人的所有购票信息。

用户界面

 

管理员界面

1.查看票务

2.管理票务

(详细操作暂不展示)

...

main.c文件

#include "slist.h"
#include "menu.h"
#include "file.h"
#include <stdio.h>int main(void)
{tNODE*  head  = NULL; //存放火车信息的链表uNODE*  head1 = NULL;  //存放乘客信息的链表NODE*   head2 = NULL;  //存放用户账号密码的链表Welcome();  //欢迎界面load(&head, &head1);  //文件操作load1(&head2);    while(MainMenu(&head, &head1,&head2));  //主菜单slist_freeT(&head);  //释放链表slist_freeU(&head1);slist_free(&head2);return 0;
}

文件操作

file.h

//file.c文件的头文件
#ifndef __FILE_H
#define __FILE_H
#include"slist.h"int load(tNODE** , uNODE**);
int load1(NODE**);int saveT(tNODE*);
int saveU(uNODE*);
int save(NODE*);#endif

file.c

#include"file.h"
#include"slist.h"
#include<stdio.h>int load(tNODE** head, uNODE** head1) //打开车票,与乘客的文件
{FILE* fp = fopen("ticket.dat", "r");//以只读方式打开FILE* fp1 = fopen("user.dat", "r");if (!fp){puts("ticket.dat打开失败");return -1;}if (!fp1){puts("user.dat打开失败");return -1;}Ticket      data = { 0 };User         data1 = { 0 };while (fread((&data), sizeof(Ticket), 1, fp))//将文件中的信息读取到链表中{slist_addTicket(head, data);//头插法,将每次读取到的信息插入}while (fread((&data1), sizeof(User), 1, fp1)){slist_addUser(head1, data1);}fclose(fp);fclose(fp1);return 0;
}
int load1(NODE** head2)
{FILE *fp = fopen("account.dat","r");//账号密码文件if(!fp ){puts("account.dat加载失败");return -1;}       Useract          data2 = {0};while(fread((&data2),sizeof(Useract),1,fp)){slist_user(head2,data2);}fclose(fp);return 0;
}/*将链表中的信息保存到对应的链表中*/
int saveT(tNODE* head)
{FILE* fp = fopen("ticket.dat", "w");if (!fp){puts("ticket.dat打开失败");return -1;}tNODE* p = head;while (p){fwrite(&(p->data), sizeof(Ticket), 1, fp);p = p->next;}fclose(fp);return 0;
}
int saveU(uNODE* head1)
{FILE* fp = fopen("user.dat", "w");if (!fp){puts("user.dat打开失败");return -1;}uNODE* p = head1;while (p){fwrite(&(p->data), sizeof(User), 1, fp);p = p->next;}fclose(fp);return 0;
}
int save(NODE* head2)
{FILE* fp = fopen("account.dat", "w");if (!fp){puts("account.dat打开失败");return -1;}NODE* p = head2;while (p){fwrite(&(p->data), sizeof(Useract), 1, fp);p = p->next;}fclose(fp);return 0;
}

链表操作

slist.h

#ifndef  __SLIST_H
#define  __SLIST_Htypedef  struct
{char       num[10];    // 车次char   start[30];//出发站char     end[30];//到达站char   date[20];//出发日期char time[10];//出发时间float    take;//历时int        count;//票数float price;//票价
}Ticket;typedef struct node
{Ticket         data;struct node  *next;
}tNODE;typedef  struct
{char          name[30];// 姓名char     id[20];//身份char     num[10];//车次char    date[20];//出发日期char time[10];//出发时间char     seat[20];//座位号float     price;//票价
}User;typedef struct
{char name[20];//用户名char password[20];//密码char issue[20];//密保问题char answer[20];//密保答案int num;//0为用户,1为管理员
}Useract;typedef struct node_u
{Useract            data;struct node_u*  next;
}NODE;typedef   struct unode
{User       data;struct unode   *next;
}uNODE;int  slist_addTicket(tNODE**, Ticket);//插入函数
int  slist_addUser(uNODE**,User);
int  slist_deleteTicket(tNODE**,User);//删除函数
int  slist_deleteUser(uNODE**,User);
int  slist_user(NODE**, Useract); //添加
void  slist_printT(const tNODE*); //遍历
void  slist_printU(const uNODE*);
void  slist_freeT(tNODE**); //释放链表
void  slist_freeU(uNODE**);
void  slist_free(NODE**);#endif

slist.c

#include"slist.h"
#include<stdio.h>
#include<stdlib.h>int  slist_addTicket(tNODE** head, Ticket data)
{tNODE* pNew = (tNODE*)malloc(sizeof(tNODE));if(!pNew){puts("数据插入失败!");return -1;}pNew -> data  = data;pNew -> next  = *head;*head = pNew;return 0;
}int  slist_addUser(uNODE** head1, User data1)
{uNODE* pNew = (uNODE*)malloc(sizeof(uNODE));if(!pNew){puts("数据插入失败!");return -1;}pNew -> data  = data1;pNew -> next  = *head1;*head1 = pNew;return 0;
}int slist_user(NODE** head2, Useract data2)
{NODE* pNew = (NODE*) malloc (sizeof(NODE));if(!pNew){puts("注册失败!");return -1;}pNew -> data = data2;pNew -> next = *head2;*head2 = pNew;return 0;
}void  slist_printT(const tNODE* head)
{const  tNODE* p  = head;printf("=============================================================================\n\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "车次", "出发站", "到达站", "出发日期", "出发时间", "历时", "票数", "票价");  while(p){printf("%s\t%s\t%s\t%s\t%s\t\t%.2f\t%d\t%.2f\n", p->data.num, p->data.start, p->data.end, p->data.date, p->data.time, p->data.take, p->data.count, p->data.price);p = p -> next;}printf("=============================================================================\n\n");}void  slist_printU(const uNODE* head1)
{const  uNODE* p  = head1;printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间", "座位号", "票价");while(p){  printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);p = p -> next;}printf("=============================================================================\n\n");
}void  slist_freeT(tNODE** head)
{tNODE* p  = *head,*q = NULL;while(p){q =  p;p =  p -> next;free(q);}
}void  slist_freeU(uNODE** head1)
{uNODE* p  = *head1,*q = NULL;while(p){q =  p;p =  p -> next;free(q);}
}void slist_free(NODE** head2)
{NODE* p = *head2, *q = NULL;while(p){q = p;p = p -> next;free(q);}
}

菜单文件

menu.h

#ifndef __MENU_H
#define __MENU_H#include"slist.h"
#include"file.h"
void Welcome(void);
int MainMenu(tNODE**,uNODE**, NODE**);
int tMenu(tNODE**, uNODE**,NODE**);
int tmenu(tNODE**, uNODE**,NODE**);
int uMenu(tNODE**, uNODE**,NODE**);
int umenu(tNODE**, uNODE**,NODE**);
int Manage(tNODE**, uNODE**);#endif

menu.c

#include"menu.h"
#include<string.h>
#include"function.h"
#include<stdio.h>
#include"slist.h"void Welcome(void)
{printf("\n\n");puts("|============================|");puts("|                  |");puts("|*** 欢迎使用铁路购票系统 ***|");puts("|                |"); puts("|============================|");puts("\n");puts(" =======按任意键继续======");getchar();
}int MainMenu(tNODE** head, uNODE** head1, NODE** head2)
{puts("======================");puts("----1.  管理员模式----");puts("----2.  用户模式------");puts("----0.  退出程序------");puts("======================");printf("\n请选择:");int i  = 0;scanf("%d",&i);switch(i){case  0:break;case  1:while(tmenu(head, head1, head2));break;case  2:while(umenu(head, head1, head2));break;default:puts("选择有误,请重新选择");break;}return i;
}int tmenu(tNODE** head, uNODE** head1, NODE** head2)
{puts("======================");puts("1. 管理员注册");puts("2. 管理员登陆");puts("3. 修改密码");puts("4. 找回密码");puts("0. 返回上一级");puts("======================");int n = 0;printf("\n请选择:");scanf("%d", &n);switch(n){case 0:return n;case 1:{Useract data = {0};puts("请输入用户名:");scanf("%s", data.name);puts("请输入密码");printf("\033[8m");scanf("%s", data.password);printf("\033[0m");   puts("请输入密保问题:");scanf("%s", data.issue);puts("请输入答案:");scanf("%s", data.answer);data.num = 1;NODE* p = *head2;while(p){if(strcmp( data.name, p->data.name) == 0){puts("用户名已存在!");return n;}p = p -> next;}puts("注册成功");slist_user(head2,data);save(*head2);return n;}break;case 2:{char name[20] = { 0 };char password[20] = { 0 };NODE* p = NULL;int count = 0;while (1){p = *head2;printf("用户名:");scanf("%s", name);printf("密码:");printf("\033[8m");scanf("%s", password);printf("\033[0m");count++;while (p){if ((strcmp(name, p->data.name) == 0) && (strcmp(password, p->data.password) == 0)){if (p->data.num == 1){printf("\n");puts("登陆中,请稍后... ...");sleep(2);printf("\n");puts("登陆成功!");while (tMenu(head, head1, head2));return n;}}p = p->next;}if (count == 3){printf("\n");puts("登陆失败!");printf("\n");break;}printf("\n");puts("用户名或密码错误请重新输入");printf("\n");}}break;case 3:change_password(head2);break;case 4:find_password(*head2);break;default:puts("选择有误,请重新选择");break;}return n;
}
int tMenu(tNODE** head, uNODE** head1, NODE** head2)
{puts("======================");puts("----1.  查看票务------");puts("----2.  管理票务------");puts("----0.  返回上一层----");puts("======================");printf("\n请选择:");int i  = 0;scanf("%d", &i);switch(i){case  0:break;case  1:while(find(*head, *head1));break;case  2:while(Manage(head, head1));break;default:puts("选择有误,请重新选择");break;}return i;}int umenu(tNODE** head, uNODE** head1,NODE** head2)
{puts("======================");puts("1. 用户注册");puts("2. 用户登陆");puts("3. 修改密码");puts("4. 找回密码");puts("0. 返回上一级");puts("======================");int n = 0;printf("\n请选择:");scanf("%d", &n);switch(n){case 0:break;case 1:{Useract data = {0};puts("请输入用户名:");scanf("%s", data.name);puts("请输入密码");printf("\033[8m");scanf("%s", data.password);printf("\033[0m");puts("请输入密保问题:");scanf("%s", data.issue);puts("请输入答案:");scanf("%s", data.answer);data.num = 0;NODE* p = *head2;while(p){if(strcmp( p -> data.name, data.name) == 0){puts("用户名已存在!");return n;                                              }p = p -> next; }puts("注册成功");slist_user(head2,data);save(*head2);}break;case 2:{char name[20] = { 0 };char password[20] = { 0 };NODE* p = NULL;int count = 0;while (1){p = *head2;printf("用户名:");scanf("%s", name);printf("密码:");printf("\033[8m");scanf("%s", password);printf("\033[0m");count++;while (p){if ((strcmp(name, p->data.name) == 0) && (strcmp(password, p->data.password) == 0)){if (p->data.num == 0){printf("\n");puts("登陆中,请稍后... ...");sleep(2);printf("\n");puts("登陆成功!");printf("\n");while (uMenu(head, head1, head2));return n;}}p = p->next;}if (count == 3){printf("\n");puts("登陆失败!");printf("\n");break;}printf("\n");puts("用户名或密码错误请重新输入");printf("\n");}}break;case 3:change_password(head2);break;case 4:find_password(*head2);break;default:puts("输入错误请重新输入");break;}return n;}int uMenu(tNODE** head, uNODE** head1, NODE** head2)
{puts("=======================");puts("----1.    购票------------");puts("----2.    退票------------");puts("----3.    改签------------");puts("----4.   查看信息------");puts("----5.  查看票务------");puts("----0.    返回上一级---");puts("=======================");printf("\n请选择:");int i = 0;scanf("%d", &i);switch(i){case 0:break;case 1:while(buyTicket(head, head1));break;case 2:while(refundTicket(head,head1));break;case 3:while (change_ticket(head, head1));break;case 4:while(findInform(*head1));break;case 5:slist_printT(*head);break;default:puts("输入有误请重新输入!");break;}return i;
}int Manage(tNODE** head, uNODE** head1)
{puts("=====================");puts("----1.  增加票务-----");puts("----2.  删除票务-----");puts("----3. 修改票务----");puts("----4.  售票-----");puts("----5.  退票-----");puts("----6.  改签-----");puts("----0.  返回上一级---");puts("=====================");printf("\n请选择:");int i = 0;scanf("%d", &i);switch (i){case 0:break;case 1:while (addTicket(head));break;case 2:while (deletTicket(head));break;case 3:while (change(head));break;case 4:while (buyTicket(head,head1));break;case 5:while (deletUser(head1, head));break;case 6:while (change_ticket(head, head1));break;default:puts("选择有误请重新选择");break;}return i;
}

工程文件

function.h

#ifndef __FUNCTION_H
#define __FUNCTION_H
#include"slist.h"
int change_password(NODE**);
int addTicket(tNODE**);int deletUser(uNODE**, tNODE**);
int deletTicket(tNODE**);
int buyTicket(tNODE**, uNODE**);
int refundTicket(tNODE**,uNODE**);
int findInform(uNODE*);
int find(tNODE*, uNODE*);
int change_ticket(tNODE**, uNODE**);
int find_password(NODE*);
int change(tNODE**);
#endif

function.c

#include"function.h"
#include"slist.h"
#include"file.h"
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>static int ticket_print(tNODE*  head);
static int user_print(uNODE* head1);int addTicket(tNODE** head)
{Ticket tri = {0};char ch ='\0';tNODE* p = NULL;do{p = *head;puts("请输入车次");scanf("%s", tri.num);while (p){if (strcmp(p->data.num, tri.num) == 0 ){puts("该车次已存在,请勿重复添加!");return 0;}p = p->next;}puts("请输入起始站");scanf("%s", tri.start);puts("请输入终点站");scanf("%s", tri.end);puts("请输入出发日期(例如2022/11/11)");scanf("%s", tri.date);puts("请输入出发时间(例如12:15)");scanf("%s", tri.time);puts("请输入历时");scanf("%f", &tri.take);puts("请输入票数");scanf("%d", &tri.count);puts("请输入票价");scanf("%f", &tri.price);slist_addTicket(head,tri);puts("是否继续添加(Y/N)");while(getchar() != '\n');ch = getchar();}while(ch == 'y' || ch == 'Y');slist_printT(*head);saveT(*head);return 0;
}int deletUser(uNODE** head1, tNODE** head)
{slist_printU(*head1);char name[20] = {0};puts("请输入要删除的乘员姓名:");scanf("%s", name);char id[20] = {0};puts("请输入要删除的乘员id:");while (1){scanf("%s", id);if (strlen(id) == 18)break;puts("id错误请重新输入");}uNODE* p = *head1, *q = NULL;tNODE* t = *head;if(!p)return -1;if ((strcmp(p->data.name, name) == 0) && (strcmp(p->data.id, id) == 0)){while (t){if (strcmp(p->data.num, t->data.num) == 0){(t->data.count)++;break;}t = t->next;}*head1 = p->next;free(p);saveU(*head1);puts("退票成功!");slist_printU(*head1);slist_printT(*head);return 0;}while (p){if ((strcmp(p->data.name, name) == 0) && (strcmp(p->data.id, id) == 0)){while (t){if (strcmp(p->data.num, t->data.num) == 0){(t->data.count)++;break;}t = t->next;}q->next = p->next;free(p);saveU(*head1);puts("退票成功!");slist_printU(*head1);slist_printT(*head);return 0;}q = p;p = p->next;}puts("未找到要退票的成员信息");return 0;
}
int deletTicket(tNODE** head)
{slist_printT(*head);char num[20] = {0};puts("请输入要删除的车次:");scanf("%s", num);tNODE* p = *head, *q = NULL;if(!p)return -1;if(strcmp(num, p -> data.num) == 0)       {*head = p -> next;free(p);puts("删除成功!");saveT(*head);slist_printT(*head);return 0;}while(p){if(strcmp(num, p -> data.num) == 0 ){q -> next = p -> next;free(p);puts("删除成功!");saveT(*head);slist_printT(*head);return 0;}q = p;p = p -> next;}   printf("\n");puts("未找到要删除的车次");slist_printT(*head);return 0;
}
int refundTicket(tNODE** head, uNODE** head1)
{char name[20] = {0};puts("请输入要删除的姓名:");scanf("%s", name);char id[30] = {0};puts("请输入要删除的id:");while (1){scanf("%s", id);if (strlen(id) == 18)break;puts("id错误请重新输入");}uNODE* p = *head1, *q = NULL;tNODE* t = *head;if(!p)return -1;if((strcmp(name, p -> data.name) == 0 )&& (strcmp(id, p -> data.id) == 0)){while (q){if (strcmp(p->data.num, t->data.num) == 0){(t->data.count)++;break;}t = t->next;}*head1 = p -> next;free(p);saveU(*head1);puts("删除成功!");slist_printT(*head);return 0;}while(p){if((strcmp(name, p -> data.name) == 0) && (strcmp(id, p -> data.id) == 0)){while (q){if (strcmp(p->data.num, t->data.num) == 0){(t->data.count)++;break;}t = t->next;}q -> next = p -> next;free(p);puts("退票成功!");slist_printT(*head);saveU(*head1);return 0;}q = p;p = p -> next;}puts("未找到要删除的乘员");return 0;
}
int buyTicket(tNODE** head,uNODE** head1 )
{if(*head == NULL){puts("当前暂无可购买车票!");return -1;}slist_printT(*head);char ch = '\0';User user = {0};tNODE* p = NULL;uNODE* q = NULL;do{        puts("请输入要购买的车次");scanf("%s", user.num);p = *head;q = *head1;int flag = 0;while(p){if(strcmp(p -> data.num, user.num) == 0){puts("是否为学生(y/n)");while (getchar() != '\n');ch = getchar();if (ch == 'y' || ch == 'Y'){user.price = (p->data.price) * 0.69;}elseuser.price = p->data.price;strcpy( user.date, p->data.date);strcpy(user.time, p->data.time);(p -> data.count)--;flag = 1;break;}p = p -> next;}if (flag == 0){puts("该车次未运行");return 0;}puts("请输入姓名:");scanf("%s", user.name);puts("请输入身份证号:");while (1){scanf("%s", user.id );if (strlen(user.id) == 18)break;puts("身份证输入错误,请重新输入");}puts("请输入座位号:");scanf("%s", user.seat);while(q){if(strcmp(q -> data.name, user.name) == 0 && strcmp( q -> data.num, user.num) == 0){puts("购票失败,请勿重复购买");return -1;}q = q -> next;}puts("购票成功!");printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间 ", "座位号", "票价");printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", user.name, user.id, user.num, user.date, user.time, user.seat, user.price);printf("=============================================================================\n\n");slist_addUser(head1, user);saveU(*head1);saveT(*head);puts("是否继续添加(Y/N)");while(getchar() != '\n');ch = getchar(); }while(ch == 'y' || ch == 'Y');slist_printT(*head);return 0;
}
int findInform(uNODE* head1)
{uNODE* p = NULL;char ch;do{p = head1;char name[30] = { 0 };puts("请输入要查询的乘客姓名:");scanf("%s", name);char id[20] = { 0 };puts("请输入要查询的乘客id");while (1){scanf("%s", id);if (strlen(id) == 18)break;puts("id错误请重新输入");}int flag = 0;while (p){if ((strcmp(p->data.name, name) == 0) && (strcmp(p->data.id, id) == 0)){puts("信息如下:");printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间 ", "座位号", "票价");printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);printf("=============================================================================\n\n");flag = 1;}p = p->next;}if (flag == 0){puts("未找到乘客信息!");}puts("是否继续查找(Y/N)");while (getchar() != '\n');ch = getchar();} while (ch == 'Y' || ch == 'y');return 0;
}
int find(tNODE* head, uNODE* head1)
{puts("===========================");puts("1. 查询车次信息");puts("2. 售票信息");puts("0.   返回上一级");puts("===========================");printf("\n");int i = 0;printf("请选择:");scanf("%d", &i);switch(i){case 0:break;case 1:while (ticket_print(head));break;case 2:while (user_print(head1));break;default :puts("输入错误请重新输入!");break;}return i;
}int change_ticket(tNODE** head, uNODE** head1)
{char ch;int flag = 0;uNODE* p = *head1;tNODE* q = *head, * t = *head;char name[20] = { 0 };char num[10] = { 0 };char new_num[10] = { 0 };puts("请输入乘客姓名:");scanf("%s", name);puts("请输入的车次:");scanf("%s", num);while (p){if ((strcmp(name, p->data.name) == 0) && (strcmp(num, p -> data.num) == 0)){flag = 1;break;}p = p->next;}if (flag == 0){puts("未找到该乘客信息");return 0;}slist_printT(*head);while (q){if (strcmp(num, q->data.num) == 0){(q->data.count)++;saveT(*head);break;}q = q->next;}puts("请输入要改签的车次:");scanf("%s", new_num);while (t){if (strcmp(new_num, t->data.num) == 0){strcpy(p->data.num, new_num);strcpy(p->data.date, t->data.date);strcpy(p->data.time, t->data.time);puts("是否为学生(y/n)");while (getchar() != '\n');ch = getchar();if (ch == 'y' || ch == 'Y'){p->data.price = (t->data.price) * 0.69;}elsep->data.price = t->data.price;(t->data.count)--;puts("请稍后... ...");sleep(2);puts("改签成功!");printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间 ", "座位号", "票价");printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);printf("=============================================================================\n\n");saveT(*head);saveU(*head1);return 0;}t = t->next;}puts("改签失败");return 0;
}
int find_password(NODE* head2)
{Useract data = { 0 };puts("请输入用户名:");scanf("%s", data.name);NODE* p = head2;while (p){if (strcmp( p->data.name, data.name) == 0){printf("%s\n", p->data.issue);puts("请输入答案:");scanf("%s", data.answer );if (strcmp( data.answer, p->data.answer) == 0){printf("您所查询的密码为:%s\n", p->data.password);return 0;}else{puts("答案错误,查询失败!");return -1;}}p = p->next;}puts("查无此人!");return -1;
}
int change_password(NODE** head2)
{Useract data = { 0 };puts("请输入用户名:");scanf("%s", data.name);puts("请输入密码:");printf("\033[8m");scanf("%s", data.password);printf("\033[0m");    NODE* p = *head2;while (p){if ((strcmp( data.name, p->data.name) == 0) && (strcmp( data.password, p->data.password) == 0)){puts("请输入要修改的密码:");printf("\033[8m");scanf("%s", p->data.password);printf("\033[0m");puts("修改成功");save(*head2);return 0;}p = p->next;}puts("用户或密码错误!");return -1;
}static int ticket_print(tNODE* head)
{puts("===========================");puts("1. 查看全部");puts("2.   按日期查询");puts("3.  按终点站查询");puts("0. 返回上一级");puts("===========================");printf("\n");int i = 0;printf("请选择:");scanf("%d", &i);switch (i){case 0:return i;case 1:slist_printT(head);break;case 2:{char date[30] = { 0 };printf("请输入要查询的日期:");scanf("%s", date);tNODE* p = head;printf("=============================================================================\n\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "车次", "出发站", "到达站", "出发日期","出发时间", "历时", "票数", "票价");while (p){if (strcmp(p->data.date, date) == 0){printf("%s\t%s\t%s\t%s\t%s\t\t%.2f\t%d\t%.2f\n", p->data.num, p->data.start, p->data.end, p->data.date, p-> data.time , p->data.take, p->data.count, p->data.price);}p = p->next;}printf("=============================================================================\n\n");}break;case 3:{char end[30] = { 0 };printf("请输入要查询的终点站:");scanf("%s", end);tNODE* p = head;printf("=============================================================================\n\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "车次", "出发站", "到达站", "出发日期", "出发时间", "历时", "票数", "票价");while (p){if (strcmp(p->data.end, end) == 0){printf("%s\t%s\t%s\t%s\t%s\t\t%.2f\t%d\t%.2f\n", p->data.num, p->data.start, p->data.end, p->data.date, p->data.time, p->data.take, p->data.count, p->data.price);}p = p->next;}printf("=============================================================================\n\n");}break;default:puts("输入错误请重新输入!");break;}return i;
}static int user_print(uNODE* head1)
{puts("===========================");puts("1. 查看全部");puts("2.   按车次查询");puts("3.  按日期查询");puts("4.  按姓名查询");puts("0.  返回上一级");puts("===========================");printf("\n");int i = 0;printf("请选择:");scanf("%d", &i);switch (i){case 0:return i;case 1:slist_printU(head1);break;case 2:{char num[30] = { 0 };printf("请输入要查询的车次:");scanf("%s", num);uNODE* p = head1;printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间", "座位号", "票价");while (p){if (strcmp(p->data.num, num) == 0){printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);}p = p->next;}printf("=============================================================================\n\n");}break;case 3:{char date[30] = { 0 };printf("请输入要查询的日期:");scanf("%s", date);uNODE* p = head1;printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间", "座位号", "票价");while (p){if (strcmp(p->data.date, date) == 0){        printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);}p = p->next;}printf("=============================================================================\n\n");}break;case 4:{char name[30] = { 0 };printf("请输入要查询的名字:");scanf("%s", name);uNODE* p = head1;printf("=============================================================================\n\n");printf("%s\t%s\t\t\t%s\t%s\t%s\t%s\t%s\n", "姓名", "身份", "车次", "出发日期", "出发时间", "座位号", "票价");while (p){if (strcmp(p->data.name, name) == 0){printf("%s\t%s\t%s\t%s\t%s\t\t%s\t%.2f\n", p->data.name, p->data.id, p->data.num, p->data.date, p->data.time, p->data.seat, p->data.price);}p = p->next;}printf("=============================================================================\n\n");}break;default:puts("输入错误请重新输入!");break;}return i;
}int change(tNODE** head)
{slist_printT(*head);char num[20] = { 0 };puts("请输入要修改的车次:");scanf("%s", num);tNODE* p = *head, * q = *head;while (p){if (strcmp(p->data.num, num) == 0){char new_num[20] = { 0 };puts("请输入修改后的车次:");scanf("%s", new_num);while (q){if (strcmp(new_num, q->data.num) == 0){puts("车次已存在,修改失败!");return 0;}q = q->next;}strcpy( p->data.num, new_num);puts("请输入修改后的起始站");scanf("%s", p->data.start);puts("请输入修改后的终点站");scanf("%s", p->data.end);puts("请输入修改后的出发日期(例如2022/11/11)");scanf("%s", p->data.date);puts("请输入修改后的出发时间(例如12:15)");scanf("%s", p->data.time);float take = 0, price = 0;int count = 0;puts("请输入修改后的历时");scanf("%f", &take);p->data.take = take;puts("请输入修改后的票数");scanf("%d", &count);p->data.count = count;puts("请输入修改后的票价");scanf("%f", &price);p->data.price = price;saveT(*head);puts("请稍后... ...");sleep(1);puts("修改成功!");printf("=============================================================================\n\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "车次", "出发站", "到达站", "出发日期", "出发时间", "历时", "票数", "票价");printf("%s\t%s\t%s\t%s\t%s\t\t%.2f\t%d\t%.2f\n", p->data.num, p->data.start, p->data.end, p->data.date, p->data.time, p->data.take, p->data.count, p->data.price);printf("=============================================================================\n\n");return 0;}p = p->next;}puts("未找到该车次");return 0;}

C语言阶段小项目(火车购票系统)相关推荐

  1. 基于java火车购票系统

    技术:Java.JSP等 摘要: 随着全国的计算机发展和铁路的飞速行进,人民的出行越来越方便,对于出行工具的也提出了更加先进的要求:但是购买车票同时也成为了一种困难,所以人民的生活更将的依赖网络.所以 ...

  2. Java毕设项目电影院购票系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电影院购票系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...

  3. C小项目 —— 学生选课系统

    C小项目 -- 学生选课系统 #include<stdio.h> #include<windows.h> #include<stdlib.h> #include&l ...

  4. 【小项目】OA系统-员工管理

    [小项目]OA系统-员工管理 嘿,你好啊,好久没有更新文章了,本站最近遭遇了大的波动,暂时没心情更新.刚好16级学弟学妹们要参加初级软件工程师的证书考试,看了他们的习题,就简单做了一个,方便他们观看. ...

  5. 火车售票排队系统 c语言,【C语言】实现12306火车售票系统!【附源码】

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: ● 录入班次信息 ● 浏览班次信息 ● 按班次号查询 ● 按终点站查询 ● 按余票数量排序保存 ● 售票 ● 退票 ● 更新班次信息 ...

  6. 火车购票系统服务器端uml活动图,火车购票完整系统UML类图时序图状态图协作图活动图对象图用例图.doc...

    火车购票完整系统UML类图时序图状态图协作图活动图对象图用例图 <UML面向对象分析>课程 实践项目报告 项目名称: 网上订购火车票系统 项目组成员: 学 号: 班 级: 指导 教师: 2 ...

  7. 微信小程序电影购票系统(含源码+论文+答辩PPT等)

    项目功能简介: 该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的电影购票前台和Java做的后台管理系统: 微信小程序--电影购票前台涉及技术:WXML ...

  8. Java实现项目电影购票系统(swing界面)

    使用三层架构实现电影购票系统,分用户和管理员,用户功能:展示电影,查找电影(模糊查询),查看电影详情,查找场次,购买影票,订制座位,退订影票等功能,界面美观漂亮,逻辑严谨,附加电影评论功能,订票超过五 ...

  9. java学习之小项目彩票购买系统

    项目需求 双色球投注区分为红色球号码区和蓝色球号码区, 红色球号码区由1-33共33个号码组成,蓝色球号码区由1-16共16个号码组成. 投注时选择6个红球号码和1个蓝球号码组成一注进行单式投注,每注 ...

最新文章

  1. AI竟然可以预测性取向,女装大佬在算法面前不堪一击!
  2. Twitter新计划:审视自家算法里的“无心之失”
  3. java委托事件与观察者模式_多播委托与观察者模式联合使用,以及委托与事件的区别...
  4. 电子工程可以报考二建_非工程类专业也能报考二建吗?
  5. mysql不对称复制数据_mysql UNION all 实现不对称数据统计
  6. python的json模块
  7. ssm线上文具销售系统答辩PPT模板
  8. Java实现堆排序和图解
  9. linux如何查看系统崩溃日志,Linux系统日志及日志分析
  10. linux软件安装文档总结
  11. 计算机硬盘启动设置方法,bios设置硬盘启动,详细教您bios设置硬盘启动操作步骤...
  12. CSP 202006-2 稀疏向量
  13. 案例:世界500强如何打造汽车后市场智慧门店
  14. 谁的青春不疯狂-----致青春
  15. 达梦数据库的备份与恢复
  16. Linux学习2.0(非markdown编辑)
  17. 英语语法总结--句子的种类
  18. 员工半夜被微信告知公司解散| 工资未发、押金未退,共享宝马走向破产…
  19. 你有没有遇到叫二狗子的那个哥们?
  20. 为泰泽铺路, Intel宣布32nm Atom正式出货 规格详解

热门文章

  1. 支付二清与第三方支付
  2. 十种心态毁掉你的职场生涯
  3. PHP简单的手机验证码验证过程
  4. 怎样才能画好人物手臂?画好人物手臂有哪些技巧?
  5. 微信支付二维码不显示
  6. brctl 配置网桥
  7. 【Leetcode】[190] 颠倒二进制位
  8. 服装企业的ERP实施是有条件的
  9. 小米5s 小米6 MIUI 系统 删除温控 破解限制
  10. 三日月くるみ - 魔法みたいな恋したい