这几天没学什么能拿得出手的东西,都是一些基础,就不在博客上发表了,不过这几天把C语言的课程设计弄了一下,一下是源代码。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include<windows.h> #define n 5int len=0;//乘客信息
struct passenge
{char name[10];                 //姓名int  num;                      //所需票量
}lg[n];                           //结构体变量名 //车票信息
typedef struct train
{char start_stat[20];          //起始站char end_stat[20];            //终点站char go_time[16];             //出发时间 char go_data[16];             //出发日期char train_num[15];           //车次信息char all_time[16];            //旅途时间int  ticket_lea;               //余票数量
}Train;              //把结构体struct train 叫做 Train typedef Train Item;    //又把Train 叫做 Item,目的让链表更通用    链表里只有2 个东西 项目和指针  struct node
{                        //node是一个节点   节点包括项目和指针 Item item;struct node *next;
};//将信息保存到文件
void save_inf(struct node *pHead)             //将链表中的信息保存到制定文件中
{                                         //头指针不能移动 struct node *pTemp;   //因为要一个节点移动 所以定义为pTemp移动 FILE *fp;fp=fopen("information.txt","at");    //打开文件 if(fp==NULL){printf("打开文件失败,文件可能不存在!\n");exit(1);}//遍历输入 for(pTemp=pHead ; pTemp != NULL;pTemp=pTemp->next)      //节点先指向项目,项目里面再找成员 fprintf(fp,"%s %s %s %s %s %s %d\n",pTemp->item.start_stat,pTemp->item.end_stat,pTemp->item.go_time,pTemp->item.go_data,pTemp->item.train_num,pTemp->item.all_time,pTemp->item.ticket_lea);fclose(fp);
}//增加
struct node *add(struct node *pHead)
{struct node *pNew;struct node *current; pNew=(struct node *)malloc(sizeof(struct node));      //再次分配结点的内存空间pNew->next=pHead;    //新结点指向原来的首节点 pHead=pNew;          //头指针指向新结点//尾插法;/*current=pHead;while(current->next!=NULL){current=current->next;} current->next=pNew;pNew->next=NULL;*/printf("\n请输入起始站:");scanf("%s",pNew->item.start_stat);printf("请输入终点站:");scanf("%s",pNew->item.end_stat);printf("请输入出发时间:");scanf("%s",pNew->item.go_time);printf("请输入出发日期:");scanf("%s",pNew->item.go_data);printf("请输入车次信息:");scanf("%s",pNew->item.train_num);printf("请输入旅途时间:");scanf( "%s",pNew->item.all_time);printf("请输入余票数量:");scanf("%d",&pNew->item.ticket_lea);current=pHead;while(current!=NULL){printf("%-10s",current->item.start_stat);printf("%-10s",current->item.end_stat);printf("%-12s",current->item.go_time);printf("%-14s",current->item.go_data);printf("%-12s",current->item.train_num);printf("%-13s",current->item.all_time);printf("%-d",current->item.ticket_lea);printf("\n");current=current->next;}return pHead;       //返回头指针 } //输出显示模块
void output(struct node *pHead)
{struct node *pTemp;                 //循环所用的临时指针pTemp=pHead;                         //指针的到首结点的指针printf("\t******车票信息如下******\n");printf("起始站    终点站    出发时间    出发日期     车次信息     旅途时间    余票量\n");while((pTemp!=NULL)){printf("%-10s",pTemp->item.start_stat);printf("%-10s",pTemp->item.end_stat);printf("%-12s",pTemp->item.go_time);printf("%-14s",pTemp->item.go_data);printf("%-12s",pTemp->item.train_num);printf("%-13s",pTemp->item.all_time);printf("%-d",pTemp->item.ticket_lea);printf("\n");pTemp=pTemp->next;              //移动临时指针到下一个结点}}//查询车票信息
int inquire(struct node *pHead)
{int flag = 0;struct node *pTemp; char inquire_start[20],inquire_end[20];       //查询选择的起始站和终点站printf("请输入要查询车票的起始站和终点站:");scanf("%s %s",inquire_start,inquire_end);pTemp=pHead;while(pTemp!=NULL){if((strcmp(pTemp->item.start_stat,inquire_start)==0) && (strcmp(pTemp->item.end_stat,inquire_end)==0)){flag = 1;printf("\n车票信息结果如下:\n");printf("起始站    终点站    出发时间    出发日期    车次    旅途时间    余票量\n");printf("%-10s",pTemp->item.start_stat);printf("%-10s",pTemp->item.end_stat);printf("%-12s",pTemp->item.go_time);printf("%-14s",pTemp->item.go_data);printf("%-12s",pTemp->item.train_num);printf("%-13s",pTemp->item.all_time);printf("%-d",pTemp->item.ticket_lea);       }pTemp=pTemp->next;continue;}if(flag == 0){printf("输入错误!\n");inquire(pHead);}return 0;} //订票 int buy(struct node *pHead)
{struct node *pTemp; char   choice_start[20],choice_end[20];       /*购票选择的起始和终点站*/int    numbers;                                /*购买数量*/char   buy_name[10];                          /*购买人姓名*/char   wy;pTemp=pHead; printf("请输入所购买车票的起始站、终点站和票数:");scanf("%s %s %d",choice_start,choice_end,&numbers);while(pTemp!=NULL){if((strcmp(pTemp->item.start_stat,choice_start)==0)&&(strcmp(pTemp->item.end_stat,choice_end)==0))      /*找到起始终点均相同的站*/{if(numbers<=pTemp->item.ticket_lea)       /*若小于余票量进行办理*/{printf("找到符合信息的车次:\n");printf("起始站    终点站    出发时间    出发日期    车次    旅途时间    余票量\n");printf("%-10s",pTemp->item.start_stat);printf("%-10s",pTemp->item.end_stat);printf("%-11s",pTemp->item.go_time);printf("%-12s",pTemp->item.go_data);printf("%-10s",pTemp->item.train_num);printf("%-13s",pTemp->item.all_time);printf("%-d",pTemp->item.ticket_lea);printf("\n");printf("请您输入姓名:");scanf("%s",buy_name);printf("正在办理订票......\n");printf("恭喜您办理成功!\n");pTemp->item.ticket_lea=pTemp->item.ticket_lea - numbers;       /*办理成功,该车次票量减少*/strcpy(lg[len].name,buy_name);lg[len].num=numbers;len++;return 0;    /*订票成功返回主菜单*/}else {printf("您所需要的票数超过余票数,请问是否继续办理(Y/y || N/n)?\n");getchar();scanf("%c",&wy);if(wy == 'Y' || wy == 'y')buy(pHead);else if(wy == 'N' || wy=='n' ){printf("谢谢使用,按任意键返回!\n");getch();return 0;}}}elsepTemp=pTemp->next;}printf("\n很遗憾,未找到您需要的车次,请重新订票!\n");buy(pHead);return 0;
}//退票
int back(struct node *pHead)
{struct node *pTemp;int i;char wy;                //判断yes or no char back_name[10];     //退票人姓名int back_num;           //退票数char back_start[20];    //退票起始站char back_end[20];      //退票终点站printf("请输入要退票人姓名和退票数:");scanf("%s%d",back_name,&back_num);printf("请输入退票的起始站和终点站:");scanf("%s%s",back_start,back_end);pTemp=pHead;while(pTemp!=NULL){if((strcmp(pTemp->item.start_stat,back_start)==0)&&(strcmp(pTemp->item.end_stat,back_end)==0))      /*找到起始终点均相同的站*/{for(i=0;i<len;i++){if(strcmp(back_name,lg[i].name)==0){printf("退票成功!\n");pTemp->item.ticket_lea=pTemp->item.ticket_lea + back_num;       //办理成功,该车次票数增加return 0;}else{printf("未找到您定的票,请问您是否重输信息继续进行退票(Y/y || N/n):");getchar();scanf("%c",&wy);if(wy=='Y' || wy =='y')back(pHead);else if(wy=='N' || wy == 'n'){printf("谢谢使用,按任意键返回!\n");getch();return 0;}}}}elsepTemp=pTemp->next;}printf("\n很遗憾,未找到您要退票的车次,请重新退票!\n");back(pHead);return 0;
}//从文件中读取信息
struct node *read_inf() //从磁盘文件中读取信息并存入单链表
{struct node *head, *r, *train;   //定义结构体指针变量  struct node是类型 //head为头结点(头结点中有信息),r为尾节点, train为当前节点 FILE *fp;if((fp=fopen("information.txt","rt"))==NULL){printf("读文件出错,按任意键退出");getch();exit(1); }head=(struct node *)malloc(sizeof(struct node));   //初始化 head->next=NULL;fscanf(fp,"%s %s %s %s %s %s %d",head->item.start_stat,head->item.end_stat,head->item.go_time,head->item.go_data,head->item.train_num,head->item.all_time,&head->item.ticket_lea);r=head;  //r是尾节点 while(!feof(fp))     //文件末结束 {                        train=(struct node *)malloc(sizeof(struct node));        //建立链表 fscanf(fp,"%s %s %s %s %s %s %d",train->item.start_stat,train->item.end_stat,train->item.go_time,train->item.go_data,train->item.train_num,train->item.all_time,&train->item.ticket_lea);r->next=train;   //链表节点 r=train;}r->next=NULL;fclose(fp);printf("\n文件中信息以正确读出,按任意键返回!");getch();   //清除缓冲区 system("cls");return head;
}//主界面
void meau()
{printf("\n");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☆~~~~~~~~~~~~~~~6. 订     票~~~~~~~~~~~~~~~~~~~~~☆\n");printf("\t☆~~~~~~~~~~~~~~~7. 退     票~~~~~~~~~~~~~~~~~~~~~☆\n");printf("\t☆~~~~~~~~~~~~~~~8.退出管理系统~~~~~~~~~~~~~~~~~~~☆\n");printf("\t☆================================================☆\n");printf("\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");printf("请选择编号(1-8)选择功能进行相应的操作:");
}//链表长度,为了更好的排序
int listlength(struct node *pHead)   //判断链表的长度 进而知道循环次数
{struct node *current;int len=0;current=pHead;while(current!=NULL){len++;                   //遍历一篇 len自增 表示最后链表的长度 current=current->next;} return len;
}//排统计序
void Sort(struct node *pHead)
{int len;struct node *current;current=pHead;len=listlength(pHead);         //上面一个函数的功能判断链表的长度 printf("共有%d个信息\n", len);while(len>1){                       //冒泡排序 while(current->next != NULL){if(strcmp(current->item.all_time, current->next->item.all_time)>0)   //比较时间 { Item temp;  //定义一个交换变量 temp=current->item;current->item=current->next->item;current->next->item=temp;}current=current->next;}len--;current=pHead;   //每次从头开始遍历 }output(pHead);  //进去输出函数 return;
} //主函数
int main()
{system("color 4");printf("欢");sleep(0);printf("迎");sleep(1); system("color 3");printf("使");sleep(0);printf("用");sleep(1);system("color 2");printf("车");sleep(0);printf("票");sleep(1);system("color 1");printf("管");sleep(0);printf("理");sleep(1); system("color 6");printf("系");sleep(0);printf("统\n");sleep(2);printf("\t\t");printf("\n"); system("color 8"); printf("\t\t\t即将进入登陆注册页面请稍候.....");sleep(3);system("cls");system("color 3");int choice=8;struct node *pHead;                  //定义头结点//选择编号  while(choice != 10){  meau();scanf("%d",&choice);switch(choice){  case 1:system("cls"); pHead=read_inf();  break;         case 2:system("cls"); output(pHead);     break;                       case 3:system("cls"); inquire(pHead);    break;case 4:system("cls"); add(pHead);   save_inf(pHead);        break;case 5:system("cls"); Sort(pHead);       break;case 6:system("cls"); buy(pHead);        break;case 7:system("cls"); back(pHead);       break;case 8:exit(1);default:printf("请输入正确的编号!\n");  break;}    }
}

C语言课设——车票管理系统相关推荐

  1. C语言课设车票管理系统(大作业)

    C语言课程设计(大作业)(车票管理系统) 一.项目简介 设计一个车票管理系统实现录入.查看班次信息,售票,退票等基本功能.设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的.规模较大的问题, ...

  2. C语言课设-----工资管理系统(附全部源码)

    C语言课设-----工资管理系统(附全部源码) 本系统分三个部分: 1.出售金鱼 2.数字菱形 3.工资管理系统 (ps:另外添加了登录界面 id:qwq password:123 可自己在代码里再更 ...

  3. C语言课设物资管理系统,C语言课设之物资管理系统.doc

    C语言课设之物资管理系统 C语言课程设计 目 录 1.需求分析: 2.系统总框图: 3.每个模块的设计分析: 4.列出所有定义的函数及说明: 5.举例说明1.2个比较有特点的算法: 6.数据分析.完备 ...

  4. 关于C语言课设学生管理系统的编写(简单版)

    课设要求 根据课设要求,我们需要给我们的管理系统增加以下功能:1,菜单方式工作:2,录入功能:3,浏览功能:4,查询功能:5,排序功能:6,删除功能:7,修改功能:8,保存功能. 我们将用模块化的思想 ...

  5. c语言课设——药品管理系统

    运用结构体链表指针等写出实现增删改查统计文件等基本操作,代码如下 #include <stdio.h> #include <conio.h> #include <stdl ...

  6. C语言课设-药品管理系统(含代码)

    用到的知识点 文件操作,fopen,fclose,fprintf,fscanf,fread,fwirte函数等 链表操作,头插法,尾插法,增删节点 window.h里system(color XX), ...

  7. C语言课设设备管理系统(大作业)

    一.任务概述 设备管理系统应包含各种设备的全部信息,每台设备为一条记录(同一时间统一部门购买的若干相同设备可作为1条记录),包括设备号,设备名称,领用人,所属部门,数量,购买时间,价格等.能够显示和统 ...

  8. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  9. c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc

    C语言课设之学生学籍管理系统.doc 题目学生学籍管理系统 目录一.个人简介.二.报告摘要.三.报告目录.四.报告正文. 1.系统需求分析 2.系统总体设计 3.系统详细设计六.总结. 二.报告摘要 ...

最新文章

  1. python基础代码库-CNN详解-基于python基础库实现的简单CNN
  2. Unfair contest 模拟-分类讨论
  3. IDEA 快捷键 Android Studio快捷键
  4. Pytorch实现基本循环神经网络RNN (3)
  5. iText in Action 2nd5.4节(Adding page events to PdfWriter)读书笔记
  6. linux中部分命令及快捷键
  7. Python数据分析与处理扩展库pandas常用选项设置
  8. eclipse不能添加tomcat7的问题
  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
  10. 参加软件测试工程师面试前,这些内容你一定要准备
  11. java Android SDK安装与环境变量配置以及开发第一个Android程序
  12. linux 使用 ioctl 参数
  13. textarea 滚动条属性设置
  14. C# Wke例子 -- WebUI登录窗口
  15. 史上最全的 struts2 面试题
  16. matlab_使用dsolve函数求解微分方程(逻辑斯蒂模型)示例
  17. 家庭组网 光猫+交换机利用VLAN划分实现客厅IPTV机顶盒与上网路由器单线复用(上)
  18. Asset Pricing:Introduction
  19. 微机原理与接口技术的基础知识
  20. C# 开发CAD注意事项(二)-CAD不显示注记

热门文章

  1. WPF 动态更换模板
  2. html5 geolocation 百度地图,html5 geolocation配合百度地图api实现定位
  3. RIKIBOT使用系列-基于Opencv HSV的色块检测
  4. 软考高级系统架构设计师系列论文十三:论软件测试方法和工具的选用
  5. ps cc 生成html,Adobe Photoshop CC 2017制作炫酷的UI界面
  6. 视频播放插件(video.js)
  7. 关闭计算机的配色方案更改,win10系统电脑提示是否要更改配色方案来提高性能窗口的处理方案...
  8. 汽机车仪表/温控器/电量显示器/无线蓝牙音箱/电力监测仪等LCD段码液晶显示屏驱动IC-VK1623 LQFP/QFP100/DICE裸片,48*8段显示,兼容替代市面上的1623,且具省电模式
  9. 小程序学习笔记(1)
  10. 猴子分桃的题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了 一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分 成五份,又多了一个,