///////////////////////达内课后训练项目-火车票务管理系统///////////////////////// //
// //
姓名: X X
学号:1005010124
//
//
//
//
(1)火车时刻信息录入:包括车次、日期、起点、终点、开车时间、到达时间、票价// //
数据存入数据文件hchsk.dat或hchsk.txt中。
// //
每次打开软件自动读入文件中的信息
// //
(2)火车时刻信息查询。
// //
按照车次查询
// //
按终点查询
// //
按起点查询
// //
按终点和日期查询
// //
(3)统计
// //
按终点统计每日的车次数
// //
按起点统计每日的车次数
// // 系统主界面应有以下功能选项
// //
录入火车时刻信息
// //
浏览火车时刻信息
// //
查询火车时刻信息
// //
删除火车时刻信息
// //
统计火车车次
// //
退出
// /////////////////////////////////////////////////////////////////////////////////
#include #include #include #include
#define N 30
void menu();
//函数菜单 void save();
//保存文件信息
void open();
//运行软件的时候 自动打开以前录入的信息,并读入链表 void display();
//浏览输入的消息记录 void SearchTrain();
//根据火车车次查询 void Search();
//选择查询方式 void Quit();
//退出系统 void Great_Ticket();
//信息整体录入 void GoMenu();
//返回主菜单
void search(int x);
//按车次,启动 ,终点查询 void SearchEnd_Data();
//按终点和日期终点查询 void Statistics_Star();
//按起点统计车次数量 void Statistics_End();
//按终点统计车次数量 void Detele();
//删除火车时刻信息
struct Train_Ticket *Input( struct Train_Ticket *h ); //单个信息输入 struct Train_Ticket *Output( struct Train_Ticket *h ); //单个信息输出
struct Train_Ticket { char trains[N];
//车次
char data[N];
// 日期
char star[N];
//起点
char end[N];
// 终点
char star_time[N];
//开车时间
char end_time[N];
//到大时间
char prices[N];
//票价
struct Train_Ticket *next;
}; struct Train_Ticket *head; //链表头
//录入单个信息
struct Train_Ticket *Input( struct Train_Ticket *h ) {
printf(\"请输入:日期
起点
终点
开车时间
到达时间
票价\\n\"); fflush( stdin ); scanf(\"%s %s %s %s %s %s\",
h->data, h->star, h->end, h->star_time, h->end_time, h->prices); return h; }
//输出单个信息
struct Train_Ticket *Output( struct Train_Ticket *h ) { printf(\"%s %s %s %s %s %s %s\\n\",
h->trains,h->data, h->star, h->end, h->star_time, h->end_time, h->prices); return h; }
//保存文件 void save() { FILE *fp; struct Train_Ticket *p; p = head; fp = fopen(\"hchsk.txt\",\"w+\"); if( fp == NULL ) {
printf(\"打开文件失败!\\n\");
return ; } else {
while ( p != NULL)
{
fprintf(fp,\" %s %s %s %s %s %s %s\",
p->trains,p->data, p->star, p->end, p->star_time, p->end_time, p->prices);
p = p ->next;
} // printf(\"成功保存文件!\\n\"); } printf(\"\\n\"); fclose(fp); }
//录入整个链表信息
车次号不能相同 否则录入信息失败 void Great_Ticket() {
struct Train_Ticket *p1,*p2; p1 = p2 = (struct Train_Ticket *)malloc(sizeof( struct Train_Ticket) ); printf(\"请输入车次(车次为\'0\'时结束输入):\"); if(p2 == NULL) {
free(p2);
printf(\" 未分配内存成功!\\n\");
return ; } else {
fflush( stdin );
scanf( \"%s\", &p2->trains );
p2 ->next = NULL; } while( p2->trains[0] != \'0\' )
//车次号不为结束标志‘0’
{
p2 = Input(p2);
if( head == NULL )
{
head = p2;
}
else
{
p1 = head;
while( p1 ->next != NULL )
{
if(!strcmp(p1 ->trains,p2 ->trains))
//判断车次是否存在
{
printf(\"该车次已存在,输入信息失败!\\n\\n\");
return;
}
p1 = p1 ->next;
}
p1 ->next = p2;
}
p2 = (struct Train_Ticket *)malloc(sizeof( struct Train_Ticket) );
printf(\"请输入车次(车次为\'0\'时结束输入):\");
if( p2 != NULL )
{
fflush( stdin );
scanf( \"%s\", &p2->trains );
p2 ->next = NULL;
} } save(); //输入完成后 自动保存输入的信息到文件件
return ; }
//打开文件信息 void open() { FILE *fp; if( (fp = fopen(\"hchsk.txt\",\"r\")) == NULL ) {
printf(\"文件无任何消息记录!\\n\");
return ; } struct Train_Ticket *p1,*p2; p1 = p2 = (struct Train_Ticket *)malloc(sizeof( struct Train_Ticket) ); head = p1; while ( !feof(fp) )
//文件不到结束时,将文件内容写到链表中 {
fscanf(fp,\"%s %s %s %s %s %s %s\",
&p2->trains,&p2->data, &p2->star, &p2->end, &p2->star_time, &p2->end_time, &p2->prices);
p1 ->next = p2;
p1 = p2;
p2 = (struct Train_Ticket *)malloc(sizeof( struct Train_Ticket) );
p1 ->next = NULL; } fclose(fp); return ; }
//浏览
void display() { char ch; struct Train_Ticket *p1; p1 = head; if( p1 == NULL ) {
printf(\"无任何记录!\\n\");
return; }
printf(\"车次
日期
起点
终点
开车时间 while( p1 != NULL ) {
Output(p1);
if( p1 ->next != NULL )
p1 = p1 ->next;
else
{
printf(\"\\n\");
printf(\"返回主菜单?(y/n): \");
fflush(stdin);
scanf(\"%c\", &ch);
if(ch == \'y\' || ch == \'Y\')
{
system(\"cls\");
GoMenu();
}
else
return ;
到达时间票价\\n\");
} } }
//删除火车时刻信息 void Delete() { char c[30]; char ch; printf(\"请输入要删除的火车车次:\"); scanf(\"%s\", c); struct Train_Ticket *p1,*p2; p1 = (struct Train_Ticket *)malloc(sizeof( struct Train_Ticket) ); p1 = head; if( p1 == NULL ) {
printf(\"无任何记录!\\n\");
return; } p2 = p1 ->next;
if(!strcmp(p1 -> trains, c))
//如果删除的信息是在表头
{
printf(\"您要删除的信息如下:\\n\");
printf(\"车次
日期
起点
终点
开车时间
到达时间
票价\\n\");
Output(p1);
printf(\"确定删除吗?(y/n): \");
fflush(stdin);
scanf(\"%c\", &ch);
if( ch == \'y\' || ch == \'Y\' )
{
head = p2;
printf(\"成功删除该信息!\\n\\n\");
save();
//删除完成后,自动保存信息
free( p1 );
//释放p1
return ;
}
else
return ;
}
else
//要删除的信息不在表头
{
while( p2 != NULL )
{
if( !strcmp(p2->trains, c) )
{
printf(\"您要删除的信息如下:\\n\");
printf(\"车次
日期
起点
终点
开车时间
到达时间
票价\\n\");
Output(p2);
printf(\"确定删除吗?(y/n): \");
fflush(stdin);
scanf(\"%c\", &ch);
if( ch == \'y\' || ch == \'Y\' )
{
p1 ->next = p2 ->next;
printf(\"成功删除该信息!\\n\\n\");
save();
//删除完成后,自动保存信息
free( p2 );
//释放p2
return ;
}
}
else if( p2 ->next != NULL )
{
p1 = p1 ->next;
p2 = p2 ->next;
}
else
{
printf(\"无此车次信息,删除失败!\\n\");
return ;
}
} } }
//按火车车次、起点、终点查询 void search(int x) { char Tra[30]; char a[30]; struct Train_Ticket *p; p = head; printf(\"请输入您要查询的内容:\"); scanf(\"%s\", Tra); if ( p == NULL ) {
printf(\"对不起,无资料记录!\\n\");
exit(0); } else {
while (p != NULL)
{
if( x == 1 )
strcpy(a, p ->trains);
if( x == 2 )
strcpy(a, p ->star);
if( x == 3 )
strcpy(a, p ->end);
if( !strcmp(a, Tra) )
{
printf(\"车次
日期
起点
终点
Output(p);
return ;
}
p = p -> next ;
}
printf(\"没有您要查询的车次记录!\\n\"); } }
//按终点和日期查询 void SearchEnd_Data() { char end[30]; char data[30]; struct Train_Ticket *p; p = head; printf(\"请输入您要查询的车次和日期:\"); fflush(stdin); scanf(\"%s %s\", end,data); if ( p == NULL ) {
printf(\"对不起,无资料记录!\\n\");
exit(0); } else {
开车时间到达时间票价\\n\");
while (p != NULL)
{
if( !strcmp(p ->end, end) && !strcmp(p ->data,data) )
{
printf(\"车次
日期
起点
终点
开车时间
到达时间
票价\\n\");
Output(p);
}
if( p ->next != NULL )
{
p = p -> next ;
}
else
return ;
}
return ; } }
//返回主菜单 void GoMenu() { system(\"cls\"); menu(); }
//查询
void Search() { system( \"cls\" ); int i; printf(\"
1.按车次查找\\n\"); printf(\"
2.起点次查找\\n\"); printf(\"
3.终点次查找\\n\"); printf(\"
4.终点和日期次查找\\n\"); printf(\"
5.返回主菜单\\n\"); T: printf(\"请选择:\"); fflush(stdin); scanf(\"%d\",&i); switch( i ) { case 1:
search(1);
break; case 2:
search(2);
break; case 3:
search(3);
break; case 4:
SearchEnd_Data();
break; case 5:
GoMenu();
break; default:
printf(\"输入无效,请重试!\\n\");
goto T; } goto T; }
//按起点统计车数量 void Statistics_Star() { int cout = 0; char b[30]; struct Train_Ticket *p; p = head; printf(\"请输入起点名:\"); fflush(stdin); scanf(\"%s\", b); if ( p == NULL ) {
printf(\"对不起,无资料记录!\\n\");
return ; } else {
while( p != NULL )
{
if(!strcmp(p ->star, b))
{
cout ++;
}
if( p ->next != NULL )
{
p = p -> next ;
}
else
{
printf(\"起点为:%s 的车次共有 %d 次\\n\",b,cout);
return ;
}
}
} }
//按终点统计车数量 void Statistics_End() { int cout = 0; char b[30]; struct Train_Ticket *p; p = head; printf(\"请输入终点名:\"); fflush(stdin); scanf(\"%s\", b); if ( p == NULL ) {
printf(\"对不起,无资料记录!\\n\");
return ; } else {
while( p != NULL )
{
if( !strcmp(p ->end, b))
{
cout ++;
}
if( p ->next != NULL )
{
p = p -> next ;
}
else
{
printf(\"终点为:%s 的车次共有 %d 次\\n\",b,cout);
return ;
}
} } }
//统计车数量 void Statistics() { int n; printf(\"1.按起点统计
2.按终点统计\\n\"); if(!scanf(\"%d\", &n)) {
printf(\"输入无效!\\n\");
return; } else {
if(n == 1)
Statistics_Star();
else if(n == 2)
Statistics_End();
else
{
printf(\"输入无效!\\n\");
return;
} } }
//退出 void Quit() { char ch; printf(\"确定退出吗?(y/n)\\n\"); fflush( stdin ); scanf(\"%c\",&ch); if( ch == \'y\' || ch == \'Y\' )
exit(0); else
return; }
//菜单 void menu() { int m; printf(\"************************************\\n\"); printf(\"*
火车票务管理系统
*\\n\"); printf(\"************************************\\n\"); printf(\" ① 录入火车时刻信息
\\n\");
printf(\" ② 浏览火车时刻信息
\\n\"); printf(\" ③ 查询火车时刻信息
\\n\"); printf(\" ④ 删除火车车次
\\n\"); printf(\" ⑤ 统计火车车次
\\n\"); printf(\" ⑥ 退出
\\n\\n\"); L: printf(\"请选择功能:\"); fflush( stdin ); if( !scanf(\"%d\",&m) ) {
printf(\"输入无效,请重试:\\n\");
goto L; } switch( m ) { case 1:
Great_Ticket();
break; case 2:
display();
break;
case 3:
Search();
break; case 4:
Delete();
break; case 5:
Statistics(); //统计
break;
case 6:
Quit();
break; default:
printf(\"输入无效,请重新输入:\\n\");
goto L; } goto L; }
//主菜单 int main() { printf(\"欢迎进入火车票务管理系统!!\\n\"); printf(\"正在加载文档信息:\"); open();
//运行软件的时候自动打开存入文件中的相关信息
for(int i = 0; i
printf(\"* \");
Sleep(400); } system( \"cls\" ); menu(); return 0; }