main.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"func.h"
#include"menu.h"
int main()
{
int ch, sch;
int n, i;
TICKET ticket[ticketNum];
while (1)
{
ch = MainMenu();
system("cls");
switch (ch)
{
case 1:
sch = Submenu1();
if (sch == 1)
{
printf("请输入要录入的火车票种类数:");
scanf("%d", &n);
ReadScore(ticket, n);
}
else if (sch == 2)
n = ReadformFile();
break;
case 2:
sch = Submenu2();
if (sch == 1)
{
n = appendTicket(ticket, n);
}
if (sch == 2)
{
n = deleteTicket(ticket, n);
}
if (sch == 3)
{
modify(ticket, n);
}
break;
case 3:
sch = Submenu3();
if (sch == 1)
{
SortbyAmount1(ticket, n);
puts("剩余数量从高到低排:");
Print(ticket, n);
}
if (sch == 2)
{
SortbyAmount2(ticket, n);
puts("剩余数量从低到高排:");
Print(ticket, n);
}
if (sch == 3)
{
SortbyNum(ticket, n);
puts("按编号排列:");
Print(ticket, n);
}
break;
case 4:
sch = Submenu4();
if (sch == 1)
SearchbyNum(ticket, n);
if (sch == 2)
SearchbyName(ticket, n);
break;
case 5:
sch = Submenu5();
if (sch == 1)
Print(ticket, n);
if (sch == 2)
Write(ticket, n);
break;
case 0:
printf("程序运行结束!\n");
exit(0);
default:
puts("请输入正确序号:\n");
system("pause");
system("cls");
break;
}
}
return 0;
}
menu.c
#include<stdio.h>
int MainMenu()
{
int sel;
puts("*******************************************");
puts("* 主菜单 *");
puts("* 1.输 入 *");
puts("* 2.修 改 *");
puts("* 3.排 序 *");
puts("* 4.查 询 *");
puts("* 5.输 出 *");
puts("* 0.退 出 *");
puts("*******************************************");
printf("请输入功能选项:");
scanf("%d", &sel);
return sel;
}
int Submenu1()
{
int sel;
puts("******************************************");
puts("* 输入子菜单 *");
puts("* 1.从键盘导入 *");
puts("* 2.从文件导入 *");
puts("******************************************");
printf("请输入功能选项:");
scanf("%d", &sel);
return sel;
}
int Submenu2()
{
int sel;
puts("******************************************");
puts("* 修改子菜单 *");
puts("* 1.添 加 *");
puts("* 2.删 除 *");
puts("* 3.修 改 *");
puts("******************************************");
printf("请输入功能选项:");
scanf("%d", &sel);
return sel;
}
int Submenu3()
{
int sel;
puts("******************************************");
puts("* 排序子菜单 *");
puts("* 1.按剩余数量从高到底排 *");
puts("* 2.按剩余数量从低到高排 *");
puts("* 3.按照火车编号排 *");
puts("******************************************");
printf("请输入功能选项:");
scanf("%d",& sel);
return sel;
system("cls");
}
int Submenu4()
{
int sel;
puts("******************************************");
puts("* 查询子菜单 *");
puts("* 1.按编号查找 *");
puts("* 2.按地名查找 *");
puts("******************************************");
printf("请输入功能选项:");
scanf("%d", &sel);
return sel;
}
int Submenu5()
{
int sel;
puts("******************************************");
puts("* 输出子菜单 *");
puts("* 1.输出到屏幕 *");
puts("* 2.输出到文件 *");
puts("******************************************");
printf("请输入功能选项:");
scanf("%d", &sel);
return sel;
}
menu.h
int MainMenu();
int Submenu1();
int Submenu2();
int Submenu3();
int Submenu4();
int Submenu5();
func.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "func.h"
/*从键盘输入火车票的信息*/
void ReadScore(TICKET ticket[],int n)
{
int i;
printf("请输入火车的编号、起点和终点、出发时间、价格和剩余数量:\n");
for (i = 0; i < n;i++)
{
scanf("%ld%s%d%d%d%f%d", &ticket[i].num,ticket[i].name, &ticket[i].time,&ticket[i].price,&ticket[i].amount);
}
system("pause");
system("cls");
}
/*从文件中读取火车票信息*/
int ReadformFile()
{
TICKET ticket[50];
FILE *fp;
int i;
if((fp=fopen("D://ticket.txt","r"))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
for (i = 0; !feof(fp);i++)
{
fscanf(fp, "%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d", &ticket[i].num, ticket[i].name, &ticket[i].time ,&ticket[i].price,&ticket[i].amount);
}
return i;
}
/*添加火车票信息*/
int appendTicket(TICKET ticket[],int n)
{
puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
scanf("%ld%s%d%d%d%f%d", &ticket[n].num, ticket[n].name, &ticket[n].time,&ticket[n].price,&ticket[n].amount);
printf("添加成功!\n");
n = n + 1;
system("pause");
system("cls");
return n;
}
/*删除火车票信息*/
int deleteTicket(TICKET ticket[], int n)
{
int i, k;
long num;
printf("请输入火车票的编号:");
scanf("%ld", &num);
for (i = 0; i < n; i++)
{
if (num == ticket[i].num)
break;
}
if (i < n)
{
for (k = i + 1; k < n; k++)
{
ticket[k - 1] =ticket[k];
return 0;
}
printf("删除成功!\n");
n = n - 1;
system("pause");
system("cls");
}
else
{
puts("未找到该火车票");
system("pause");
system("cls");
return n;
}
}
/*修改火车票信息*/
void modify(TICKET ticket[],int n)
{
int i;
long num;
printf("请输入待修改火车票的编号:");
scanf("%ld", &num);
for (i = 0; i < n; i++)
if(num == ticket[i].num)
break;
if(i<n)
{
puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n", ticket[i].num, ticket[i].name,ticket[i].time,ticket[i].price,ticket[i].amount);
printf("请输入待修改火车票的编号、起点和终点、出发时间、价格和剩余数量:\n");
scanf("%ld%s%d%d%d%f%d", &ticket[i].num,ticket[i].name, &ticket[i].time ,&ticket[i].price,&ticket[i].amount);
printf("修改成功!\n");
system("pause");
system("cls");
}
else
{
puts("未找到该火车票");
system("pause");
system("cls");
}
}
/*按剩余数量从高到低排序*/
void SortbyAmount1(TICKET ticket[],int n)
{
int i, j;
TICKET temp1;
for (i = 0; i < n - 1;i++)
{
for (j = i + 1; j < n;j++)
{
if(ticket[i].amount<ticket[j].amount)
{
temp1 = ticket[i];
ticket[i] = ticket[j];
ticket[j] = temp1;
}
}
}
}
/*按剩余数量从低到高排序*/
void SortbyAmount2(TICKET ticket[], int n)
{
int i, j;
TICKET temp1;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (ticket[i].amount > ticket[j].amount)
{
temp1 = ticket[i];
ticket[i] = ticket[j];
ticket[j] = temp1;
}
}
}
}
/*按编号排序*/
void SortbyNum(TICKET ticket[],int n)
{
int i, j;
TICKET temp1;
for (i = 0; i < n - 1;i++)
{
for (j = i + 1; j < n;j++)
{
if(ticket[i].num>ticket[j].num)
{
temp1 = ticket[i];
ticket[i] = ticket[j];
ticket[j] = temp1;
}
}
}
}
/*按火车编号查找*/
void SearchbyNum(TICKET ticket[],int n)
{
long number;
int i;
printf("请输入编号:");
scanf("%ld", &number);
puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
for (i = 0; i < n;i++)
{
if(ticket[i].num == number)
{
printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n", ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
return;
}
}
printf("未找到结果\n");
system("pause");
system("cls");
}
/*按起点和终点查找*/
void SearchbyName(TICKET ticket[],int n)
{
char name[20];
int i;
printf("请输入名称:");
scanf("%s", name);
puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
for (i = 0; i < n;i++)
{
if(strcmp(name,ticket[i].name) == 0)
{
printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n",ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
break;
}
}
if (i < n)
{
system("pause");
system("cls");
}
if (i == n)
{
printf("未找到结果\n");
system("pause");
system("cls");
}
}
/*在屏幕上显示所有火车票信息*/
void Print(TICKET ticket[],int n)
{
int i;
puts("编号\t起点和终点\t出发时间\t价格\t剩余数量");
for (i = 0; i < n;i++)
{
printf("%-8ld%-8s%-8d%-8d%-8d%-10.2f%-8d\n",ticket[i].num, ticket[i].name, ticket[i].time,ticket[i].price,ticket[i].amount);
if (i == (n - 1))
putchar('\n');
}
system("pause");
system("cls");
}
/*将火车票信息输出到文件*/
void Write(TICKET ticket[],int n)
{
FILE *fp;
int i;
if((fp=fopen("D://ticket.txt","w"))==NULL)
{
printf("Can't open this file.\n");
exit(0);
}
for (i = 0; i < n;i++)
{
fprintf(fp, "%ld %s %d %d %d %f %d\n", ticket[i].num,ticket[i].name,ticket[i].time,ticket[i].price,ticket[i].amount);
}
fclose(fp);
printf("输出完成!\n");
system("pause");
system("cls");
}
date.h
#define ticketNum 100
typedef struct ticket
{
long num;
char name[20];
char time[20];
int price;
int amount;
}TICKET;
func.h
#include "date.h"
void ReadScore(TICKET ticket[], int n);
int ReadformFile();
int appendTicket(TICKET ticket[], int n);
int deleteTicket(TICKET ticket[], int n);
void modify(TICKET ticket[], int n);
void SortbyAmount1(TICKET ticket[], int n);
void SortbyAmount2(TICKET ticket[], int n);
void SortbyNum(TICKET ticket[], int n);
void SearchbyNum(TICKET ticket[], int n);
void SearchbyName(TICKET ticket[], int n);
void Print(TICKET ticket[], int n);
void Write(TICKET ticket[], int n);