火车票预订系统(C语言“动态链表”、“文件”实现)资深小白一枚,写的不好请见谅哦|ू・ω・` )

设计要求

(1)建立车票信息库,每班车次有若干途径站,有若干票源,按照里程票价不同。//本人是按照三个中途站来编写的
(2)建立旅客信息库(乘车人的基本信息)。
(3)为二者建立乘车票务信息库(每位旅客定了哪里的票)。
(4)实现各种信息的统计。

本人建立了三个文件trainmes.txt、membermes.txt、memtrainmes.txt用来分别存储列车班次信息、用户基本信息、用户票务信息

功能系统分析

分为两个模块:管理员模块和用户模块在这里插入图片描述

系统运行流程

在这里插入图片描述

代码实现

main函数

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "head.h"
char secret[20]="000000";

int main()
{
   
    char secret1[20];
    int flag;
    int com,com1,com2;
    printf("******************************************************************************\n");
    printf("*******************************欢迎使用本系统*********************************\n");
    printf("******************************本系统由****编写********************************\n");
    printf("******************************指导教师:$$$$$********************************\n");
    printf("******************************************************************************\n");
    printf("\n\n\n\n\n");
    printf("**************请确定您所属身份,用户请回复0、管理员请回复1!!!**************\n");
    scanf("%d",&com);
    if(com==0)
    {
   
        printf("**************您是否为新用户,新用户请回复0、否则请回复1!!!****************\n");
        scanf("%d",&com1);
        if(com1==0)
        {
   
            printf("请完成信息注册,格式为:姓名  年龄  性别  联系方式  身份证号;\n");
            zhuce();
            printf("注册成功!!!\n");
        }
        while(1)
            {
   
                introduce1();
                while(scanf("%d",&com2)!=1)
                {
   
                    printf("您输入的指令不正确,请重新输入!\n");
                    fflush(stdin);
                    continue;
                }
                switch(com2)
                {
   
                    case 0:saygoodbye1();exit(1);
                    case 1:outputs();break;
                    case 2:find1();break;
                    case 3:yuding1();break;
                    case 4:tuipiao();break;
                    case 5:chaxunxingcheng();break;
                    case 6:system("cls");break;
                    default :printf("没有该操作,请确认后再输入\n");break;
                }
            }
    }
    else if(com==1)
    {
   
        flag=3;
         printf("*************************请输入密码!!!**************************\n");
         scanf("%s",secret1);
         while(strcmp(secret,secret1)!=0)
         {
   
             printf("密码输入失败!!!您还有%d次机会!!!\n",--flag);
             if(flag==0)
                saygoodbye1(),exit(1);
                printf("请输入密码!!!\n");
                scanf("%s",secret1);
         }
         printf("密码输入正确!!!\n");
         while(1)
         {
   
             introduce2();
             while(scanf("%d",&com2)!=1)
                {
   
                    printf("您输入的指令不正确,请重新输入!\n");
                    fflush(stdin);
                }
                switch(com2)
                {
   
                    case 0:saygoodbye1();exit(1);
                    case 1:add();break;
                    case 2:outputs();break;
                    case 3:outputmembermes();break;
                    case 4:outputmemtrainmes();break;
                    case 5:find1();break;
                    case 6:findmembermes();break;
                    case 7:findmemtrainmes();break;
                    case 8:system("cls");break;
                    default :printf("没有该指令,请确认后再次操作\n");
                }
         }
    }
}


头文件 head.h

#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED


struct trainmes1
{
   
    char mid[10][20];
    char checi[20];
    char startime[20];
    int number;
    double money;
    struct trainmes1 *next;
};
typedef struct trainmes1 trainmes1;
#define lenoftrainmes1 sizeof(trainmes1)
struct trainmes2
{
   
    char mid[10][20];
    char checi[20];
    char startime[20];
    int number;
    double money;
};
typedef struct trainmes2 trainmes2;
#define lenoftrainmes2 sizeof(trainmes2)
struct member1
{
   
    char name[20];
    char sex;
    int age;
    char tel[15];
    char id[30];
    struct member1 *next;
};
typedef struct member1 member1;
#define lenofmember1 sizeof(member1)
struct member2
{
   
    char name[20];
    char sex;
    int age;
    char tel[15];
    char id[30];
};
typedef struct member2 member2;
#define lenofmember2 sizeof(member2)
struct piaowu1
{
   
    char name[20];
    char id[30];
    char checi[20];
    char start[20];
    char last[20];
    char starttime[20];
    int piaoshu;
    struct piaowu1 *next;
};
typedef struct piaowu1 piaowu1;
#define lenofpiaowu1 sizeof(piaowu1)
struct piaowu2
{
   
    char name[20];
    char id[30];
    char checi[20];
    char start[20];
    char last[20];
    char starttime[20];
    int piaoshu;
};
typedef struct piaowu2 piaowu2;
#define lenofpiaowu2 sizeof(piaowu2)

extern char secret[20];

//zhuce.c
void zhuce();

//introduce.c
void introduce1();
void introduce2();
void introduce3();
void introduce4();

//saygoodbye.c
void saygoodbye1();

//add.c
void add2(int num);
void add();

//尾插法.c
trainmes1 * aaa(int m);
trainmes1 * aaa2(FILE *fp1);

//清空链表.c
void freee(trainmes1 *phead);
void freee1(piaowu1 *phead);
void freee2(member1 *phead);

//outputs.c
void outputs();

//sort.c
trainmes1 * paixu();
trainmes1 *zhijiepaixu(FILE *fp);
void charu(trainmes1 *phead,trainmes1 *pnew);

//yuding.c
void charu1(piaowu1 *phead,piaowu1 *pnew);
piaowu1 *zhijiepaixu1(FILE *fp);
piaowu1 * paixu1();
int piaowuxinxitianjia(char *name,char *id,char *start,char *last,char *time,char *checi,int num);
void yuding1();
void yuding2();
void yuding3();

//修改文件信息类型的输入.c
void xiugai1(char *pp,piaowu1 *phead);
void xiugai2(char *pp,trainmes1 *phead);

//find.c
void find1();
void find2();
void find3();
void find4();

//tuipiao.c
void charu2(piaowu1 *phead,piaowu1 *pnew);
piaowu1 *zhijiepaixu2(FILE *fp);
piaowu1 * paixu2();
void tuipiao();

//chaxunxingcheng.c
void chaxunxingcheng();

//outputtrainmes.c
void charu3(member1 *phead,member1 *pnew);
member1 *zhijiepaixu3(FILE *fp);
member1 * paixu3();
void outputmembermes();

//outputmemtrainmes.c
void outputmemtrainmes();

//findmembermes.c
void findmembermes();
void findmembermes2();
void findmembermes1();

//findmemtrainmes.c
void findmemtrainmes();
void findmemtrainmes1();
void findmemtrainmes2();
#endif // HEAD_H_INCLUDED

添加列车信息函数 add.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "head.h"


void add2(int num)
{
   
    int com;
    trainmes1 *phead,*p;
    FILE *fp;
    if((fp=fopen("trainmes.txt","ab"))==NULL)
    {
   
        printf("文件打开失败!!!\n");
        exit(1);
    }
    phead=aaa(num);
    p=phead->next;
    printf("是否添加上述信息?如果是请回复0,否则回复1\n");
    scanf("%d",&com);
    if(com==0)
    {
   
         while(p!=NULL)
         {
   
             fwrite(p,lenoftrainmes2,1,fp);
             p=p->next;
         }
         printf("添加班次信息成功!!!\n");
         freee(phead);
    }
    fclose(fp);
}

void add()
{
   

    printf("********************1表示从键盘添加列车班次信息******************\n");
    printf("********************2表示从文件添加列车班次信息******************\n");
    int com,num,m;
    trainmes1 *phead,*p;
    char file3[100],file2[100];
    FILE *fp1,*fp2;
    scanf("%d",&com);
    if(com==1)
    {
   
        printf("请输入要添加的班次个数\n");
        
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值