列车时刻表信息管理系统实践报告C语言源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t\t\t
#include /z stdio. h
〃 #include /z stdlib ・ h 〃 #include z/string. hV*定义头文件,处理文件及字符数组时要用到相应功能 #define N 10 void fmenu() (system(〃cls 〃); printf("************************ vl.20*****************\n 〃); 查询列车 %cl. */
欢迎使用苏州列车时刻表信息管理系统 printf
(〃\t\ \n\ 3) t\t\t printf (z/\n ,z %c2. 修改列车 \n\ 3)
); printf (〃
\t\ %c3. 增加列车
\n\ 3) printf CW %c4. 取消列车 \n\ 3) ); printf("\t\ t\t\t printf C\n z/ ); , %c5. %c0. 保存信息 \n\ 3) r aX* f viz K I X K I Z K I X x/z K I Z K I Z
I I printf (,z \ t\
***********、□"); t\t\t
printf j ; if 选择要执行的操作:\n 〃);/*菜单程序,用于各种功能的选择*/ ' struct train/*定义结构体*/ ); phiiatfi4rn^fS]; t't'tchar checi[6];
旺l 吁翦;yr ); t
int month; printf (〃\t\
int day; t\t\t int hour; int minute; } lieche[N] ;/* 定义一个结构体数组 */ void paixu(struct train *p) ;/* 函数声明 */ void chaxun(struct train *p)/*子程序,其功能是查询列车*/ ( paixu(lieche) ;/*先排序一下,方便查看*/ char a[8] ;/*定义一个字符数组,输入要查 询的列车 int k=0, i, c; */ printf ("请输入要查询的列车:\n 〃); scanf ("%s", a); for(i=0;i<N;i++)
if (strcmp(p[i]・ name, a) ==0)
printf (,z苏州一%s\t%s (车次)\t%d 年%d
\t%d:%02d\n,\ p[i]・name, p[i]・checi, p[i]・year, p[i]・month, p_i]・day, p[i]・hour, p[i]・minute) ;/*车的信息全部打出*/
k++;
)
if(k==0)
printf (z/抱歉,没有这趟列车\n〃);/*没有查到时,打出通知*/ printf C按1继续,按0退出\『);/*选择继续或者退出*/ scanf(〃%d〃,&c);
if(c!=0)
chaxun(lieche);
void xiugai (struct train *p)/*子程序,用于修改列车时间*/
(
char a[8], b [6];
int i, x, c, k二0, h, mi, y, m, d, q;
printf(〃请输入要修改的列车:\n〃);
scanf ("%s", a);
for(i=0;i<N;i++)
(
if (st rcmp (p[i ]・ name, a) =0)
printf (z,苏州一%s\t%s ()车次\t%d 年%d
\t%d:%02d\n,/, p[i]・ name, p[i]・ checi, p[i]. year, p[i]・ month, p.i]・ day, p[i]・ hour, p[i]・ minute)
f
printf (”要修改这趟列车吗?\nl.是0.否\n〃);
scanf &q); if (q==l)
printf ("请输入修改后的车次:\n,z) ; scanf ("%s", b);
printf ("请输入修改后的年月日:\n") ; scanf (“%d%d%d", &y, &m, &d);
scanf ("%d%d〃, &h, &mi);
printf C确定修改吗?\nl.是2.否\n〃);/*选择是否确定修改列车时%d日将所
间,防止查列
错误操作*/
scan f ("%d〃,&x);
if (x=l)
(
strcpy (p[i]・ checi, b); p[i]. yearly;
%d日
p[i]・ month二m; p[i]. day=d; p[i]・ hour=h; p[i]・ minute二mi; printfC己经修改此列车〃);
k++;
)
} if(k==0)
printf(z,抱歉,没有这趟列车\n〃);/*没有查到时,打出通知*/ printf C按]继续,按scanf &c) ;
0 退出\n");
if(c!=0)
xiugai(lieche);
void zengjia(struct train 子程序,用于列车增加*/
*p) /*
(
struct train a;
char 空白位置,在此处插入所填列车*/
b □二{〃0000000〃} ;/*
printf (〃请输入要增加的列车目的地:\『);
scanf ("%s", a. name);
printf(〃请输入修改后的车次:\rT);
scanf a. checi);
printf (〃请输入所增加列车的年月日:\『);
scanf ("%d%d%d", &a. year, &a. month, &a. day);
printf(〃请输入所增加列车的小时和分钟:\n〃);
scanf ("%d%d", &a. hour, &a. minute);
printf (”确定要增加这一趟列车吗?\nl.是0.否\n〃);
scanf&x);
if(x==l) for(i=0;i<N-l;i++)
if (strcmp (p[i]・ name, b) =0)
(
strcpy (p[i]・ name, a. name) ; strcpy (p[ij. checi, a. checi);
p[i]. year=a・ year;
p[i]・ month=a・ month; p[i]・ day=a・ day; p[i]・ hour=a・ hour;
p[i]・ minute=a・ minute;
strcpy (pli+l]. name, b) ;/*找到位置,插入列车,并把0000000给后面一个结构体
*/
printfC已经增加这趟列车“);break;
5 paixu(lieche) ; printf (〃按 1 继续,按0 退出\n") ; scanf ("%d", &c); if(c!=0) zengjia(lieche); } void
paixu(struct train *p)/*子程序,用于同名列车时刻排序*/ int i, x; char a[6];
for(i=0;i<N;i++)
if (strcmp(p[i]. name, p[i+l]. name)==0)/* 先找到相同名字的列车*/ if (p[iJ. year>p[i+l]. year)// 根据年份排序(
strcpy (a, p[i]・ checi);
strcpy (p[i]・ checi, p[i+l]・ checi);
strcpy(p[i+l]. checi, p[i[・ checi) ; x二p[i]・ year; p[i]・ year=p[i+l]. year;
p[i+l]. year=x;
x=p[i]・ month;
p[i]・ month二p[i+l]・ month;
p[i+l]・ month二x;
x二p[i]. day;
p[i]. day=p[i+l]. day;
p[i+l]・ day=x;
x二p[i]・ hour;
p[i]・ hour二p[i+l]. hour;
p[i+l]・ hour=x;
x二p[i]. minute;
p[i]. minute=p[i+l]・ minute;
p[i+l]. minute二x;
else if(pLi]・year二二p[i+l].year)
if (p[i]. month>p[i+l]. month)// 相同年数,根据月份排序。
strcpy(a, p[i]・ checi) ; strcpy(pLi]・ checi, p[i+l]・ checi);
strcpy(p[i+l]・ checi, p[i]. checi) ; x=pLi]・ month;
p[i]. month二pLi+1 ]・ month;
p[i+l]・ month二x;
x二p[i]・ day;
p[i]. day=p[i+l]. day;
p[i+l]・ day=x;
x二p[i]・ hour;
p[i]・ hour二p[i+l]・ hour;
p[i+l]・ hour=x;
x二p[i]・ minute;
p[i]・ minute二p[i+l]・ minute;
p[i+l]・ minute=x;
)
else if(pLi]・ month二二p[i+1]・ month)
if (p[ij. day>p[i+1]. day)//相同月份,根据天排序1
strcpy (a, p[i]・ checi) ; strcpy (p[i]・ checi, p[i+l]・ checi);
strcpy(p[i+l]・ checi, p[i]・ checi) ; x二p[i]・ day;
p[订.day二p[i+1]. day;
p[i+l]・ day=x;
x二p[i]・ hour;
p[i]・ hour二p[i+1]• hour;
p[i+l]. hour=x; x二p[i]・ minute;
p[i]・ minute=p[i+^・ minute; p[i+l]. minute二x;
)
else if(p[i]. day==p[i+l]. day)
if (p[i]. hour>p[i+l]. hour)//相同天数,根据小时排序1
strcpy (a, p [i] • checi);
strcpy(p[i]. checi, p[i+l]・ checi);
strcpy (p[i+l]・ checi, p[i]・ checi);
x=p[i]・ hour;
p[i]・ hour二p[i+l]・ hour;
p[i+l]・ hour=x;
x二p[i] .minute;
p[i]. minute二p[i+1]・ minute;
p[i+l]・ minute二x;
else if (p[i]. hour==p[i+1]. hour)// 相同小时,根据分
排序
strcpy (a, p[i]・ checi);
strcpy (p[i]・ checi, p[i+l]・ checi);
strcpy (p[i+l]・checi, p[i]・checi) ; x=p[i]・minute;
p[i]・ minute二p[i+1]・ minute; p[i+l]・ minute=x;
void quxiao(struct train *p)/* 子程序,用于取消列车 */
char a[8];
char b □二{〃0000000〃};
int i, x, c, k=0, s;
printf C请输入要取消的列车\n") ; scanf a);
for(i=0;i<N;i++)
(
if (strcmp (p[i]・ name, a) ==0)
printf C苏州一%s\t%s (车次)\t%d 年%d 月%d Fl
\t%d:%02d\n z,, p[i]. name, p[i]. checi, p[i]. year, p[i]. month, p[i]. day, p[i]. hour, p[i]. minute); printf (”确定要删除这一次列车吗?\nl.是0.否\『);/*询问是否取消*/
scanf ("%d", &x);
if(x==l)
for (s=i ; s〈N-1; s++)
(
strcpy (p [s]・ name, p [s+1]・ name);
strcpy(p[s]・ checi, p[s+l]. checi);
p[s]• year=p[s+1]. year;
p[s]・ month二p[s+1]・ month;
p[s]. day二p[s+1]・ day;
p[s]・ hour二p[s+1]• hour;
p[s]. minute二p[s+1]. minute;/*将列车取消,把后一个结构体往前移一位*/
k++;
if(k==0)
printfC抱歉,没有这趟列车\『);/*先查一下有没有要取消的列车*/ printfC按1继续,按0退出\『);
scanf&c);
if (c!=0)
quxiao(lieche);
)
void baocun(struct train *p)/* 子程序,用于数据保存 */
int c, i二0, x;
char b □二{"0000000"};
printfC确定要保存修改吗?\nl.是2.否\n〃);
scanf(〃%d: &x);
if(x!=0)
9har a [20]; printf( 〃请输入要保存的路径及文件名(扩展名为.txt) : W);/ *自己指定位置*/ scanf("%s",a);
FILE *pps;
辻((pps二fopen(a, "w+"))二二NULL)/* 打开一个新的文本文件 */
printfC不能打开此文件\n) - exit(0);
while (strcmp(lieche[i]・ name, b) !二0)
(
fprintf (pps, "%s %s %d %d %d %d:%02d\n,,) pFi]. name, p[i]. checi, p[i]. year, p[i]. month, p[i]. day , p[i]. hour, p[i]. minute);/*将结构体数组的数据写进里面*/
fprintf (pps, "%s", b) ; printf C 文件己保存\rT);
printf (?,按1继续,按0退出\n〃);
scanf&c);
if(c!=O)
baocun(lieche);
void mainO/*主程序,负责整个程序架构及函数调用等1*/
system(,z color 3b");/*更改前景和背景颜色*/ char b[] = {〃0000000〃};
FILE *fp;/**/
int x, i;
实践Wwenjian. txt z/,,,r+/,))==NULL)/* 打开文件,输入数据 */
(
printf(z/不能打开数据库文件\n〃);
exit (0);
for(i=0;i<N;i++)
fscanf(fp, "%s%s%d%d%d%d:%02d", lieche[i]. name, lieche[i]. checi, &1ieche[i]. year, &1ieche[ i ]. month, &1ieche[i]. day, &1ieche[i]. hour, &1ieche[i]. minute);
fmenu ();
scanf &x);
wh订e (x!=0)/*选择所要操作的功能*/
(
switch(x)
case 1:
chaxun(lieche) ;break;// 选择查询功能
case 2:
xiugai (lieche) ;break;// 选择修改功能
case 3:
zengjia(lieche) ;break;// 选择增加功能
case 4:
quxiao(lieche) ;break;// 选择取消功能case 5: baocun(lieche) ;break;// 选择保存功能: fmenu() ;/* 循环调用菜单 */ scanf ("%d",&x);。