C语言程序设计短学期车票管理系统.docx

上传人:牧羊曲112 文档编号:3155339 上传时间:2023-03-11 格式:DOCX 页数:23 大小:43.58KB
返回 下载 相关 举报
C语言程序设计短学期车票管理系统.docx_第1页
第1页 / 共23页
C语言程序设计短学期车票管理系统.docx_第2页
第2页 / 共23页
C语言程序设计短学期车票管理系统.docx_第3页
第3页 / 共23页
C语言程序设计短学期车票管理系统.docx_第4页
第4页 / 共23页
C语言程序设计短学期车票管理系统.docx_第5页
第5页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言程序设计短学期车票管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计短学期车票管理系统.docx(23页珍藏版)》请在三一办公上搜索。

1、C语言程序设计短学期车票管理系统车票管理系统源代码:其他说明见“C语言程序设计报告” #include #include #include typedef struct station char name20; char arrive_time15; struct station *next; S; typedef struct train char number10; int ticket_num; int station_num; S *station; struct train *next; T; typedef struct user char id10; char code10; c

2、har ticket10; int t_num; struct user *next; U; int choice = 0, choice1 = 0, choice2 = 0;/choice和choice12用于记录menu和menu123用户的选择 int choice3 = 0;/用于记录欢迎界面下用户的选择 char code6 = 123456;/初始管理员密码 int N;/记录列车总数 int login_flag = 0;/用户登录标志 int back_flag = 0;/从登录后的界面返回登录界面的标志1返回,0不返回 U *user = NULL;/用户登录成功后指向当前用

3、户对应的节点 U *login_head = NULL;/用户登录后指向用户链表的头结点 void menu;/打印主菜单 int code_menu;/打印密码验证界面 void menu1;/打印管理员界面 void menu2;/打印用户界面 void choose;/根据主界面下的选择执行相应功能 void choose1;/根据管理员界面下的选择执行相应功能 void choose2;/根据用户界面下的选择执行相应功能 void back;/返回 void back1;/欢迎界面下的返回 void train_input;/输入火车信息并存入文件 T *read;/从文件读取火车信息

4、 void print_all(T *t);/打印全部火车信息 void add_train;/向文件中添加火车信息 int search_menu;/打印搜索方式 int search_mode1(T *t, char *str);/按车次搜索 void search_mode2(T *t, char *str1, char *str2);/按出发地和目的地搜索 void search(T *t); /按条件搜索车票信息 void alter;/修改 void del_all;/删除全部 void del_one(T *t, char *str);/删除选定车辆信息 void del(T *

5、t);/删除包含两种删除方式 void registe;/注册,将用户ID和密码写入用户文件中 U *read_u;/读取用户文件 void save2;/将用户信息链表存储到用户文件中去 int welcom_menu;/打印登录成功后的欢迎界面 void choose3(int i);/欢迎界面下根据用户的选择执行相应功能 void login(U *u);/登录 void buy_ticket(T *t);/购票 void re_ticket;/退票 void my_ticket(T *t);/查看我的车票 /* 功能:打印初始界面 变量说明 *si 用于存放要打印的内容 i 用于循环

6、返回值:无 */ void menu / system(cls); system(color 07); printf(ntt); printf(*欢迎使用车管理系统*); printf(nntt); printf(); printf(nntt); printf(*管理员端 *ntt); printf(*用户端 *ntt); printf(*退出 *ntt); printf(ntt); printf(ntt); printf(请选择您的身份:); fflush(stdin); scanf(%d, &choice); if (choice2) system(cls); printf(输入错误,请重

7、新输入); menu; /* 功能:密码验证界面 变量说明 codein 用户输入的密码 wrong_choice 用于记录密码输入错误后的用户的选择 enter_success 密码输入正确标志1表示密码输入正确0表示没有输入正确密码 返回值:enter_success */ int code_menu system(cls); char codein6; int wrong_choice; int enter_success = 0; printf(请输入6位管理员密码:); fflush(stdin); gets(codein); if (strcmp(codein, code) = 0

8、) system(cls); enter_success = 1; menu1; else printf(密码错误nt); printf(重新输入nt); printf(返回主菜单nt); printf(退出nt); printf(请选择:); scanf(%d, &wrong_choice); if (wrong_choice = 0) exit(0); else if (wrong_choice = 1) system(cls); code_menu; else system(cls); return enter_success; /* 功能:打印管理员界面 变量说明 *si 用于存放要打

9、印的内容 i 用于循环 返回值:无 */ void menu1 system(cls); system(color f1); printf(n); printf(t); printf(*车票管理系统功能表*); printf(nn); printf(t); /* printf(); printf(nn); printf(t); char *s110 = 输入车票信息, 输出所有车票信息, 添加车票信息, 查询车票信息, 修改车票信息, 删除车票信息, 返回主菜单,退出管理系统, 请选择: ; int i; for (i = 0; i9; i+) printf(*%s*nt, s1i); ffl

10、ush(stdin); scanf(%d, &choice1); 功能:打印用户界面 变量说明 codein 用户输入的密码 wrong_choice 用于记录密码输入错误后的用户的选择 enter_success 密码输入正确标志1表示密码输入正确0表示没有输入正确密码 返回值:enter_success */ void menu2 system(cls); system(color F5); printf(n); printf(t); printf(*车票管理系统功能表*); printf(nn); printf(t); printf(); printf(nn); printf(t); c

11、har *s16 = 车票查询, 登录, 注册, 返回主菜单, 退出管理系统!, 请选择: ; int i; for (i = 0; i6; i+) printf(*%s*nt, s1i); fflush(stdin); scanf(%d, &choice2); /* 功能:主菜单下根据用户的选择执行相应的功能 变量说明 无无 返回值:无 */ void choose if (choice = 1)/选择管理员界面 if (code_menu = 1)/输入密码成功 switch (choice1) case 0: printf(谢谢使用,再见!); exit(0); case 1: trai

12、n_input; break; case 2: print_all(read); break; case 3: add_train; break; case 4: search(read); break; case 5: alter(read); break; case 6: del(read); break; / case 7: printf(返回); break; else if (choice = 2) menu2; switch (choice2) case 0: printf(谢谢使用,再见!); exit(0); case 1: search(read);break; case 2

13、: login(read_u);break; case 3: registe;break; / case 4: printf(case 4); break; else printf(谢谢使用,再见!); exit(0); /* 功能:管理员界面下根据用户的选择执行相应的功能 变量说明 无无 返回值:无 */ void choose1 system(cls); switch (choice1) case 0: printf(谢谢使用,再见!); exit(0); case 1: train_input; break; case 2: print_all(read); break; case 3:

14、 add_train; break; case 4: search(read); break; case 5: alter(read); break; case 6: del(read); break; / case 7: printf(case 7); break; /* 功能:用户员界面下根据用户的选择执行相应的功能 变量说明 无无 返回值:无 */ void choose2 system(cls); switch (choice2) / /* case 0: printf(谢谢使用,再见!); exit(0); case 1: search(read); break; case 2: l

15、ogin(read_u); break; case 3: registe; break; case 4: printf(case 4); break; 功能:修改管理员密码 变量说明 无无 返回值:无 */ void alter_code system(cls); printf(请输入新密码); scanf(%s,code); printf(密码修改成功n按任意键返回);getch; /* 功能:输入火车信息并存储到文件中去 变量说明 i 辅助循环变量,也用来表示当前输入的火车是第几辆 j 辅助循环变量,也用来表示当前输入的车站是第几辆 *t,*s 分别用来指向新建的节点,方便以块的方式将节点

16、信息存储到文件中去 返回值:无 */ void train_input int i, j; T *t = NULL; S *s = NULL; FILE *fp = NULL; if (fp = fopen(train.txt, w) = NULL) /*以文本只写方式打开文件*/ printf(创建文件失败); exit(0); system(cls); printf(请输入列车总数:); scanf(%d, &N); for (i = 0; inumber); printf(请输入本次列车的总票数:); scanf(%d, &t-ticket_num); printf(请输入本次列车经过的

17、总站数:); scanf(%d, &t-station_num); fwrite(t, sizeof(T), 1, fp); for (j = 0; jstation_num; j+) s = (S *)malloc(sizeof(S); memset(s, 0, sizeof(S); printf(请输入第%d站的站名:, j + 1); scanf(%s, s-name); printf(请输入第%d站到站时间:, j + 1); scanf(%s, s-arrive_time); fwrite(s, sizeof(S), 1, fp); fclose(fp); printf(n操作完成:

18、按其他任意键返回); getch; /* 功能:添加火车信息并存储到文件中去 变量说明 i 辅助循环变量,也用来表示当前添加的火车是第几辆 j 辅助循环变量,也用来表示当前添加的车站是第几辆 *t,*s 分别用来指向新建的节点,方便以块的方式将节点信息存储到文件中去 返回值:无 */ void add_train int i, j, n; T *t = NULL; S *s = NULL; FILE *fp = NULL; if (fp = fopen(train.txt, a) = NULL) /*以文本只写方式打开文件*/ printf(创建文件失败); exit(0); system(c

19、ls); printf(请输入要添加的列车数:); scanf(%d, &n); for (i = 0; inumber); /* printf(请输入本次列车的总票数:); scanf(%d, &t-ticket_num); printf(请输入本次列车经过的总站数:); scanf(%d, &t-station_num); fwrite(t, sizeof(T), 1, fp); for (j = 0; jstation_num; j+) s = (S *)malloc(sizeof(S); memset(s, 0, sizeof(S); printf(请输入第%d站的站名:, j + 1

20、); scanf(%s, s-name); printf(请输入第%d站到站时间:, j + 1); scanf(%s, s-arrive_time); fwrite(s, sizeof(S), 1, fp); fclose(fp); printf(n操作完成:按其他任意键返回); getch; 功能:将火车信息从文件中读取到链表中去并返回链表头结点 变量说明 j 用于创建车站链表是做循环 *t *s 分别用来指向火车链表头结点和车站链表头结点 *p*q 辅助指针用来建立火车链表 *p1*q1 辅助指针用来建立车站链表 *s1,*s2 辅助指针,同时指向车站链表的头结点,分别用来打印该车辆经过

21、的车站和对应到达时间 返回值:无 */ T *read FILE *fp = NULL; int j; T *t = NULL, *p = NULL, *q = NULL; S *s = NULL, *p1 = NULL, *q1 = NULL; if (fp = fopen(train.txt, rb) = NULL) /*以文本只读方式重新打开文件*/ printf(打开文件失败); exit(0); if (fgetc(fp) != EOF) rewind(fp); t = (T *)malloc(sizeof(T); fread(t, sizeof(T), 1, fp); t-next

22、 = NULL; p = t; /车站头结点 s = (S *)malloc(sizeof(S); fread(s, sizeof(S), 1, fp); s-next = NULL; p1 = s; for (j = 1; jstation_num; j+) q1 = (S *)malloc(sizeof(S); fread(q1, sizeof(S), 1, fp); q1-next = NULL; p1-next = q1; p1 = q1; p-station = s; while (!feof(fp) q = (T *)malloc(sizeof(T); fread(q, sizeo

23、f(T), 1, fp); if (feof(fp)/读取结束跳出循环 p-next = NULL; break; q-next = NULL; p-next = q; p = q; /建立车站节点 s = (S *)malloc(sizeof(S); fread(s, sizeof(S), 1, fp); s-next = NULL; p1 = s; for (j = 1; jstation_num; j+) q1 = (S *)malloc(sizeof(S); fread(q1, sizeof(S), 1, fp); /* q1-next = NULL; p1-next = q1; p1

24、 = q1; p-station = s; fclose(fp); /*关闭文件*/ return t; else return NULL; 功能:打印查找界面 变量说明 s_choice 用于记录用户对查询方式的选择 返回值:s_choice */ int search_menu int s_choice = 0; system(cls); printf(请选择查询方式:ntt按车次查询按出发地和目的地查询 nntt 请选择(按其他任意键返回):); scanf(%d, &s_choice); return s_choice; /* 功能:按车次查找并打印查找结果 变量 说明 success

25、_flag 查找成功标志:非0表示有符合条件的查找结果,0表示没有,即查找失败; *t 指向要查找的火车链表的头结点 *str 指向用户输入的要查找的车次 *s1,*s2 辅助指针,同时指向车站链表的头结点,分别用来打印该车辆经过的车站和对应到达时间 返回值:无 */ int search_mode1(T *t, char *str) S *s1 = NULL; S *s2 = NULL; int success_flag = 0; while (t) s1 = t-station; s2 = t-station; if (strcmp(str, t-number) = 0) success_

26、flag+; if (success_flag = 1) printf(搜索到以下结果:); printf(n列车编号:%st, t-number); printf(剩余票数:%d张tt, t-ticket_num); printf(共经过:%d站, t-station_num); printf(n-); printf(n途经车站:); while (s1) printf(%-7s, s1-name); s1 = s1-next; printf(n到达时间:); while (s2) printf(%-7s, s2-arrive_time); s2 = s2-next; printf(n-n)

27、; break; t = t-next; if (success_flag = 0)printf(抱歉,没有您要查找的结果); free(s1); free(s2);/ free(t); if (success_flag != 0) return 1; else return 0; /* 功能:按出发地和目的地查找并打印车票信息 变量 说明 success_flag 查找成功标志:非0表示有符合条件的查找结果,0表示没有,即查找失败; *t 指向要查找的火车链表的头结点 *st1,*st2 分别指向用户输入的要查找的出发地和目的地 *s1,*s2 辅助指针,同时指向车站链表的头结点,分别用来打

28、印该车辆经过的车站和对应到达时间 *s 指向当前火车的车站链表的头结点,用于遍历查询本次列车是否有符合条件的车站; 返回值:无 */ void search_mode2(T *t, char *str1, char *str2) int flag1, flag2; int success_flag = 0; S *s, *s1, *s2; s = s1 = s2 = NULL; system(cls); while (t) flag1 = 0; flag2 = 0; s1 = t-station; s2 = t-station; s = t-station; while (s) if (str

29、cmp(str1, s-name) = 0)flag1 = 1; if (strcmp(str2, s-name) = 0)flag2 = 1; s = s-next; if (flag1 = 1 & flag2 = 1)break; if (flag1 = 1 & flag2 = 1) success_flag+; if (success_flag = 1) printf(查找到以下结果:); printf(n列车编号为:%st, t-number); printf(剩余票数:%d张tt, t-ticket_num); printf(共经过:%d站, t-station_num); prin

30、tf(n-); printf(n途经车站:); while (s1) printf(%-7s, s1-name); s1 = s1-next; printf(n到达时间:); while (s2) printf(%-7s, s2-arrive_time); s2 = s2-next; printf(n-n); t = t-next; if (success_flag = 0)printf(抱歉,没有您要查找的结果); free(s1); free(t); free(s2); free(s); /* 功能:查找车票信息并打印 变量 说明 i 接受search_menu的返回值,即用户选择的查找方

31、式 st120,st220 分别用来存储用户输入的要查找的出发地和目的地 st20 用来存储按车次查询方式下用户输入的车次 返回值:无 */ void search(T *t) int i; char st20, st120, st220; if (t != NULL) i = search_menu; if (i = 1) system(cls); printf(请输入列车车次:); scanf(%s, st); search_mode1(t, st); printf(n操作完成:按其他任意键返回); getch; else if (i = 2) system(cls); printf(请输

32、入出发地:); scanf(%s, st1); printf(n请输入目的地:); scanf(%s, st2); search_mode2(t, st1, st2); printf(n操作完成:按其他任意键返回); getch; else system(cls); printf(没有列出信息,按任意键返回); getch; /* 功能:将链表存入文件中去 变量 说明 *t 要存入文件的链表的头指针 返回值:无 */ void save(T *t) FILE *fp = NULL; if (fp = fopen(train.txt, w) = NULL) /*以文本只读方式重新打开文件*/ p

33、rintf(打开文件失败); exit(0); while (t) fwrite(t, sizeof(T), 1, fp); while (t-station) fwrite(t-station, sizeof(S), 1, fp); t-station = t-station-next; t = t-next; / printf(存储完成,按任意键返回);getch; fclose(fp); /* 功能:修改文件中的火车信息 变量 说明 *train 辅助指针用于保存修改好的链表 *t1 辅助指针用于搜索并打印将要修改的信息 *s 辅助指针用于查找并修改车站信息 success_flag 修

34、改成功标识 j 查找成功标识 i 用于记录修改选项 n 用于记录新输入的余票数 str 用于存储要修改的车次 station_in20 用于存储新输入的车站名 time_in10 用于存储输入的到站时间 返回值:无 */ void alter(T *t) T *train = t; T *t1 = t; S *s = NULL; int success_flag = 0; int i, j, n; char str20, station_in20, time_in10, ch; if (t != NULL) system(cls); printf(请选择修改项:n余票数车辆到站时间n请选择(按

35、其他任意键返回):); scanf(%d, &i); if(i=1|i=2) system(cls); printf(请输入要修改的车次); scanf(%s, &str); system(cls); j = search_mode1(t1, str); printf(n确定修改吗?:); fflush(stdin); scanf(%c, &ch); if (j = 1 & i = 1 & (ch = Y | ch = y) printf(请输入余票数:); fflush(stdin); scanf(%d, &n); while (t) if (strcmp(str, t-number) =

36、0) success_flag = 1; t-ticket_num = n; break; t = t-next; /free(t); else if (j = 1 & i = 2 & (ch = Y | ch = y) printf(请输入要修改的车站名:); scanf(%s, station_in); printf(请输入要新的到站时间:); scanf(%s, time_in); while (t) s = t-station; if (strcmp(str, t-number) = 0) while (s) if (strcmp(station_in, s-name) = 0) su

37、ccess_flag = 1; strcpy(s-arrive_time, time_in); break; s = s-next; t = t-next; if (success_flag = 1) save(train); printf(n操作完成:按其他任意键返回); getch; else printf(修改失败); else system(cls); printf(没有列车信息,按任意键返回); getch; free(train); free(t1); free(t); /* 功能:删除全部车票信息 变量 说明 无无 返回值:无 */ void del_all FILE *fp = NULL; if (fp = fopen(train.txt, w) = NULL) /*以文本只读方式重新打开文件*/ printf(打开文件失败); exit(0); /* 功能:按车次删除车票信息 变量 说明 success_flag 删除

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号