本文主要是介绍train订票系统优化最终版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
.h文件#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct train {//车次的属性int id;char name[50];int remainTickets;
};struct node {//普通节点的属性struct node *next;struct train * train_inform;
};struct head {//头节点属性struct node * nd;int fg;
};struct list{//链表的属性struct head * listhead;int len;
};struct list * initList();struct list * createList(struct list * l);struct node * searchTrain(struct list * l,int id);int printNode(struct node * train);int printList(struct list * l);int bookTrain(struct list * l,int id);int returnTrain(struct list * l,int id);struct list * addTainInform(struct list * l);struct list * deleteTainInform(struct list * l,int id);struct list * createAllTrainInform();int login();int userUsage(struct list * l);int administratorUsage(struct list * l);int userMenu(struct list * l);int administratorMenu(struct list * l);.c文件#include "train优化.h"int main()
{login();return 0;
}struct list * initList(){struct list * l;l = (struct list *)malloc(sizeof(struct list));l->listhead = (struct head *)malloc(sizeof(struct head));l->listhead->nd = (struct node *)malloc(sizeof(struct node));l->listhead->nd->train_inform = (struct train *)malloc(sizeof(struct train));l->listhead->nd->next=NULL;l->len=0;return l;
}struct list * createList(struct list * l){int id;char name[50];int remainTickets;struct node * p, * last;last=l->listhead->nd;printf("依次输入:列车id号,名称,剩余票数(id==-1终止!)\n");scanf("%d%s%d",&id,&name,&remainTickets);while(id!=-1){p=(struct node *)malloc(sizeof(struct node));p->train_inform=(struct train *)malloc(sizeof(struct train));p->train_inform->id=id;strcpy(p->train_inform->name,name);p->train_inform->remainTickets=remainTickets;l->len++;last->next=p; last=p; p->next=NULL;scanf("%d%s%d",&id,&name,&remainTickets);}return l;
}struct node * searchTrain(struct list * l,int id){//查询,返回节点信息struct node * p;p = l->listhead->nd;while(p!=NULL){if(p->train_inform->id==id){break;}p=p->next;}return p;
}int printNode(struct node * train){//打印节点信息if(train!=NULL){printf("列车id: %d\n",train->train_inform->id);printf("列车名称:%s\n",train->train_inform->name);printf("剩余票数:%d\n",train->train_inform->remainTickets);}else{printf("系统内无此列车信息!\n");}return 0;
}int printList(struct list * l){struct node * p;p = l->listhead->nd->next;while(p!=NULL){printNode(p);p=p->next;}return 0;
}int bookTrain(struct list * l,int id){//订票struct node * p;p = l->listhead->nd;while(p!=NULL){if(p->train_inform->id==id){p->train_inform->remainTickets--;break;}p=p->next;}printNode(p);return 0;
}int returnTrain(struct list * l,int id){//退票struct node * p;p = l->listhead->nd;while(p!=NULL){if(p->train_inform->id==id){p->train_inform->remainTickets++;break;}p=p->next;}printNode(p);return 0;
}struct list * addTainInform(struct list * l){int id;char name[50];int remainTickets;struct node * p, * last , * check;last = l->listhead->nd;while(last->next!=NULL){last=last->next;}printf("依次输入:列车id号,名称,剩余票数!\n");scanf("%d%s%d",&id,&name,&remainTickets);check = l->listhead->nd;while(check!=last){check=check->next;if(id==check->train_inform->id||strcmp(name,check->train_inform->name)==0){printf("添加失败!id号或列车名称重复!\n");return l;}}p=(struct node *)malloc(sizeof(struct node));p->train_inform=(struct train *)malloc(sizeof(struct train));p->train_inform->id=id;strcpy(p->train_inform->name,name);p->train_inform->remainTickets=remainTickets;l->len++;last->next=p; last=p; p->next=NULL;printf("%s列车信息已添加!\n",p->train_inform->name);return l;
}struct list * deleteTainInform(struct list * l,int id){struct node * p;p = l->listhead->nd;while(p!=NULL){if(p->train_inform->id==id){break;}p=p->next;}if(l->listhead->nd->next==NULL){printf("列车信息为空!删除失败!\n");}else{p = l->listhead->nd->next;l->listhead->nd->next=p->next;printf("%s列车信息被删除!\n",p->train_inform->name);free(p);}return l;
}struct list * createAllTrainInform(){struct list * l;l=initList();printf("请输入列车原始信息!\n");l = createList(l);return l;
}int login(){int x;struct list * l;l = createAllTrainInform();printf("请登录!\n1.管理员登录 2.用户登录\n");scanf("%d",&x);switch(x){case 1:administratorUsage(l);break;case 2:userUsage(l);break;default:return 0;}return 0;
}int userUsage(struct list * l){//打印用户提示界面printf("请按提示输入完成操作!\n");printf("1.查询车次信息\n");printf("2.订票\n");printf("3.退票\n");printf("4.退出系统\n");userMenu(l);return 0;
}int administratorUsage(struct list * l){//打印管理员提示界面int pass;
loop: printf("请输入管理员密码:");scanf("%d",&pass);if(pass==123456){printf("请按提示输入完成操作!\n");printf("1.查询车次信息\n");printf("2.增加车次信息\n");printf("3.删除车次信息\n");printf("4.打印所有车次信息\n");printf("5.退出系统\n");administratorMenu(l);}else{printf("密码错误!请重新输入!\n");goto loop;}return 0;
}int userMenu(struct list * l){int x,id;int k=1;struct node * p;while(k){printf("请输入序列号:");scanf("%d",&x);switch(x){case 1:printf("输入所要查询的列车的id号:");scanf("%d",&id);p = searchTrain(l,id);if(p==NULL){printf("//\n");break;}printNode(p);printf("//\n");break;case 2:printf("输入所要订票的列车的id号:");scanf("%d",&id);bookTrain(l,id);printf("//\n");break;case 3:printf("输入所要订票的列车的id号:");scanf("%d",&id);bookTrain(l,id);printf("//\n");break;case 4:k=0;printf("已退出系统……\n");printf("//\n");break;default:return 0;}}return 0;
}int administratorMenu(struct list * l){int x,id;int k=1;struct node * p;while(k){printf("请输入序列号:");scanf("%d",&x);switch(x){case 1:printf("输入所要查询的列车的id号:");scanf("%d",&id);p = searchTrain(l,id);printNode(p);printf("//\n");break;case 2:printf("添加列车信息!\n");l=addTainInform(l);printf("//\n");break;case 3:printf("输入所要删除的列车的id号:");scanf("%d",&id);l=deleteTainInform(l,id);printf("//\n");break;case 4:printList(l);printf("//\n");break;case 5:k=0;printf("已退出系统……\n");printf("//\n");break;default:return 0;}}return 0;
}
这篇关于train订票系统优化最终版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!