资源描述
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define N 1000
typedef struct TICKET //定义新构造体TICKET
{
char num[10]; //车次
char hour[3];
char min[3];
char from[10];
char to[10];
float hours;
int max; //车载容量
int now; //已售票数
}CLASS;
int class_num=0;
CLASS records[N];
int system_time();
void message();
void ShowTable1();
void ShowTable2(int i);
void Display();
void add();
void save();
void load(); // 按班次查询
void search(); //查询
void change(); //修改
void quit(); //退出
void buyticket(); //售票
void deleteticket(); //取消
int menu_select(); //菜单
int whether(int); //判断购买时间
void find(char s1[],char s2[]); //按起点终点查询
void deletemessage(); //删除
int findnum(char s1[]); //班次查询
void get(int,int); //修改及增长班次
char *menu[]={" 欢迎使用车票查询系统 ",
"\n*******************菜单***********************",
"\n 1. 录入班次 ",
"\n 2. 浏览班次信息 ",
"\n 3. 查询路线 ",
"\n 4. 增长班次 ",
"\n 5. 售票 ",
"\n 6. 退票 ",
"\n 7. 修改班次 ",
"\n 8. 删除班次 ",
"\n 9. 退出 " };
int main()
{
system("cls");
while(1)
{
switch(menu_select()) //菜单
{
case 1: message();break;
case 2: Display();break;
case 3: search();break;
case 4: add();break;
case 5: buyticket();break;
case 6: deleteticket();break;
case 7: change();break;
case 8: deletemessage();break;
case 9: quit();break;
}
}
}
int menu_select() //菜单
{
char s[5];
int c,i;
system("cls");
for(i=0;i<11;i++)
{
printf("%s",menu[i]); //输出菜单
}
i=0;
while(c<0||c>9)
{
printf("\n");
printf("\n请输入选项(1-9): ");
scanf("%s",s);
c=atoi(s);
} //输出菜单
return c;
}
void message() //录入
{
int i=0,j=5,h;
char s[5];
FILE *fp; //定义文献型指针变量
system("cls"); //刷屏
if((fp=fopen("d:车票管理系统0.dat","rb"))!=NULL) //fopen打开文献
{
printf("增长信息\n");
printf("请输入任意键返回\n");
scanf("%s",s);
i=1;
}
if(i==0)
{
system("cls"); //刷屏
printf("请输入班次总数:\n");
scanf("%d",&class_num); //指向班次指针
system("cls"); //刷屏
for(i=0;i<class_num;i++)
{
system("cls"); //刷屏
printf("请输入%d班次信息:\n",i+1);
h=-1;
for(;h!=i;) ///循环输出
{
printf("请输入班次:\n");
scanf("%s",records[i].num);
for(h=0;h<i;h++)
if(strcmp(records[h].num,records[i].num)==0)
{
printf("该班次已存在\n");
break;
}
}
get(i,j); //修改及增长班次
j=5;
}
save(); //调用保存函数
}
}
/*******************************显示所有函数********************************/
void Display() //显示所有函数
{
int i,j;
system("cls"); //刷屏
load(); // 按班次查询
ShowTable1();
for(i=0,j=0;i<class_num;i++,j+=2) //按班次顺序输出
{
if(whether(i)) //判断时间与否超过
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s| 已发车 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
}
ShowTable2(j);
printf("\n按任意键继续\n");
getch();
}
void ShowTable1()
{
int i=2;
system("cls"); //刷屏
printf(" 班次信息 \n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |\n");
}
void ShowTable2(int i)
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
}
void search() //查询班次
{
int i;
char s1[10]={'\0'},s2[10]={'\0'};
system("cls"); //刷屏
printf("1. 按班次查询\n");
printf("2. 按终点站查询\n");
printf("3. 退出\n");
printf("请选择(1-3):\n");
scanf("%d",&i);
load(); //按班次查询
switch(i)
{
case 1: printf("请输入要查询旳班次:\n");
scanf("%s",s1);
find(s1,s2);
break;
case 2: printf("请输入要查询终点站:\n");
scanf("%s",s2);
find(s1,s2);
break;
case 3: break;
default : printf("输入错误!\n");
break;
}
printf("按任意键继续\n");
getch();
}
void find(char s1[],char s2[])
{
int i,h=0,m;
ShowTable1();
if(s2[0]=='\0')
m=1;
else m=0;
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
{
printf("\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
if(m==1)
break;
}
ShowTable2(h);
if(h==0)
printf("查找旳班次不存在\n");
}
void add()
{
int i,j=5;
load();
system("cls");
printf("1. 增长班次\n");
printf("2. 返回\n");
printf("请选择(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls");
printf("1. 输入要增长旳班次:\n");
scanf("%s",records[class_num].num);
for(i=0;i<class_num;i++)
if(strcmp(records[class_num].num,records[i].num)==0)
{
printf("输入错误\n");
getch();
break;
}
if(i==class_num)
{
get(i,j);
class_num++;
save();
}
}
}
void buyticket()
{
int i;
char num[10];
system("cls");
printf("1. 售票\n");
printf("2. 返回\n");
printf("请选择(1-2):\n");
scanf("%d",&i);
if(i==1)
{
load(); // 按班次查询
search();
printf("请输入要订票旳班次(若无请输入0):\n");
scanf("%s",num);
for(i=0;i<class_num;i++)
if(strcmp(num,records[i].num)==0)
if(records[i].max>records[i].now&&whether(i)==1)
{
records[i].now++;
printf("通向%s班次为%s旳票订票成功\n",records[i].to,records[i].num);
save();
getch();
break;
}
else
{
printf("该班次已满或已发出!\n");
getch();
}
}
}
void deleteticket()
{
int i;
char num[10];
system("cls");
printf("1. 退票\n");
printf("2. 返回\n");
printf("请选择(1-2)\n:");
scanf("%d",&i);
if(i==1)
{
system("cls");
load();
printf("请输入要退票旳班次:\n");
scanf("%s",num);
i=findnum(num);
if(strcmp(num,records[i].num)==0)
if(whether(i))
{
printf("与否确认");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
records[i].now--;
printf("退票成功\n");
save();
getch();
}
}
else
{
printf("该班车已发出,无法退票\n");
getch();
}
if(i==class_num)
{ printf("输入错误\n");
getch();
}
}
}
void change()
{
char num[10],s[10];
int h=0,j=13,i;
load();
system("cls");
printf("请输入要修改旳班次:\n");
scanf("%s",num);
i=findnum(num);
if(i==class_num)
{
printf("输入错误\n");
getch();
}
else
{
printf("确认修改\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
{
get(i,j);
save();
}
}
}
void deletemessage()
{
int i,h=0;
char num[10];
system("cls");
printf("1. 删除班次\n");
printf("2. 返回\n");
printf("请选择(1-2):\n");
scanf("%d",&i);
if(i==1)
{
system("cls");
printf("请输入要删除旳班次:\n");
scanf("%s",num);
i=findnum(num);
if(i==class_num)
{
printf("输入错误\n");
getch();
}
else
{
printf("与否确认\n");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
for(;i<class_num-1;i++)
records[i]=records[i+1];
class_num--;
save();
printf("删除成功\n");
getch();
}
}
}
}
int findnum(char s1[])
{
int i,h=0;
ShowTable1();
for(i=0;i<class_num;i++)
{
if(strcmp(s1,records[i].num)==0)
{
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min,records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
break;
}
}
ShowTable2(h);
return i;
}
void save()
{
FILE *fp1,*fp2;
if((fp1=fopen("d:车票管理系统.dat","wb"))==NULL) //打开文献
{
printf("文献打开错误!\n");
exit(0);
}
if((fp2=fopen("d:车票管理系统0.dat","wb"))==NULL)
{
printf("文献打开错误!\n");
exit(0);
}
fwrite(&class_num,sizeof(int),1,fp2);
fwrite(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2);
}
void load()
{
FILE *fp1,*fp2;
if((fp1=fopen("d:车票管理系统.dat","rb"))==NULL)
{
system("cls");
printf("文献打开错误\n");
getch();
exit(0);
}
if((fp2=fopen("d:车票管理系统0.dat","rb"))==NULL)
{
system("cls");
printf("文献打开错误\n");
getch();
exit(0);
}
fread(&class_num,sizeof(int),1,fp2);
fread(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2);
}
void quit()
{
char s[5];
printf("确认退出\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
exit(0);
}
void get(int i,int j)
{
for(;;)
{
printf("请输入发车时间(xx xx)");scanf("%s%s",records[i].hour,records[i].min);
if((atoi(records[i].hour)<24&&atoi(records[i].hour)>=0)&&(atoi(records[i].min)<60&&atoi(records[i].min)>=0))
break;
else
{
printf("输入错误\n");
getch();
}
}
printf("请输入起点站:\n");
scanf("%s",records[i].from);
printf("请输入终点站:\n");
scanf("%s",records[i].to);
printf("请输入行车时间:\n");
scanf("%f",&records[i].hours);
printf("请输入额定载量:\n");
scanf("%d",&records[i].max);
for(;;)
{
printf("请输入已售票数:\n");
scanf("%d",&records[i].now);
if(records[i].now<=records[i].max)
break;
else
{
printf("输入错误\n");
getch();
}
}
}
int whether(int i)
{
struct tm *local;
time_t t;
t=time(NULL); //NULL在stdio.h中定义为0
local=localtime(&t); /////获取目前系统时间
if(local->tm_hour<atoi(records[i].hour)||local->tm_hour==atoi(records[i].hour)&&local->tm_min<atoi(records[i].min))
//atoi将字符串转换成一种整数值
return 1;
else
return 0;
}
展开阅读全文