车票管理系统1

 时间:2016-05-21 21:12:23 贡献者:忘记叫什么234

导读:课程设计说明书(论文)用纸摘要C 是一种计算机程序设计语言,可以作为系统设计语言编写系统应用程序, 也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,因此它的应 用

车票管理系统毕业课程设计报告
车票管理系统毕业课程设计报告

课程设计说明书(论文)用纸摘要C 是一种计算机程序设计语言,可以作为系统设计语言编写系统应用程序, 也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,因此它的应 用范围广阔。

本系统是根据学校图书管理工作的需要,通过 C 语言开发一个图 书管理系统来实现对图书信息进行有效、准确的管理。

整个系统从简便、实用的 要求出发,完成图书管理的全过程,包括图书信息的采集,图书的插入、删除、 借阅、归还、显示、输出等功能。

本文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。

系统 的说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。

关键词:图书管理系统, C 语言,信息采集模块I

课程设计说明书(论文)用纸目录1 设计目的及内容要求................................................................................................ 1 1.1 设计目的„„„„„„„„„„„„„„„„„„„„„„„„„ 1 1.2 内容要求„„„„„„„„„„„„„„„„„„„„„„„„„1 2 系统结构设计............................................................................................................ 2 3 系统详细设计............................................................................................................ 3 3.1 系统主界面设计„„„„„„„„„„„„„„„„„„„„„„ 3 3.2 定义 3.3 定义 构造方法„„„„„„„„„„„„„„„„„„„„3 方法„„„„„„„„„„„„„„„„„„„„„„34 运行结果及分析„„„„„„„„„„„„„„„„„„„„„„4 总 结............................................................................................................................ 6 参考文献........................................................................................................................ 7 源程序............................................................................................................................ 8II

课程设计说明书(论文)用纸1 系统背景意义1.1 系统开发目的随着经济的发展,交通运输越来越便捷,为了提高效率,减轻劳动强度,设计开 发高效的汽车信息查询系统就显得颇为重要。

汽车售票管理中包含许多内容,有 订票管理问题,车票发布问题,用户登录问题等等。

这次 C#大作业利用 VS2012 开 发工具和 SQL Server2008 数据库系统来汽车票务信息管理系统。

该系统主要目 的是实现车站网上售票工作,可以满足普通用户售票的基本要求,包括登录、查 询、订票、退票等模块。

1.2 同类产品概况车票管理涵盖了我们出行的方方面面,全国目前有多家网站经营汽车票的销 售管理,比如畅途网、坐车网、12308 等,这些网站主要面向全国用户,与多家售票 站点合作,多是一些大城市之间的客车,县级之间的汽车信息很少有。

而目前从总 体上看大部分的中小汽车站官网已经有了订票功能,弥足了它们的不足。

购票流 程也是大同小异, 用户登录之后选择始发站、 目的站、 出发日期, 查阅车票信息, 确定后付款即可, 这时个人中心即有了自己的购票信息,若要退票则选择退订即 可,操作步骤流畅,个人体验也较好。

1.3 与同类产品的比较这次的车票订购管理系统实现了与同类产品一样的查票、购票、退票的基本 功能, 优点是操作简单, 已经能满足票务管理的需求, 退票也遵循了原子性操作, 退票之后系统将之添加到票库中。

当然缺点是此次系统主要是票务管理的模拟, 在细节上无法与同类产品相比较,比如缺少了注册用户,购票付款,退票返钱的 环节,而且是一款 window 下的客户端产品,少了同类产品网页版的灵活性,当 然其他系统如 Linux,mac OS 是无法运行本系统的。

1

课程设计说明书(论文)用纸2.系统主要设计2.1 系统总体功能模块车票主要划分为三个部分:用户管理,车票查询,车票管理三个功能模块。

车票管理系统用户管理模块车票查询模块车票管理模块三个模块完成各自的功能。

用户管理模块:用户可以根据自己的帐号密码进行系统的登录,若登录失败 系统则给出提示信息。

用户管理模块用户登录密码验证信息提示车票查询模块,用户可以选择出发日期,出发站,目的站来查询车票信息并 订购自己的车票。

车票查询模块2信息输车票查询车票订购

课程设计说明书(论文)用纸车票管理模块:用于对用户已经订购车票的管理。

车票管理模块车票退订程序流程图主要如下所示:开始登录界面检查正确 性 Y 系统主界面N车票查询车票订购车票退订退出2.2 数据库设计结束数据库设计了三张表,users,ticket 和 myticket 表。

users 表示用户表,存储系统中存在的用户名和密码,如下所示:ticket 表存储汽车班次的详细信息,含有始发站,终点站,车次,发车时间, 到达时间,票价,剩余票数等信息,如下:3

课程设计说明书(论文)用纸表名:ticketmyticket 表记录所有用户订购的汽车车票信息,含有用户名,出发站,到站, 出发日期,票价等信息,如下: 表名:myticket各个实体间的依赖关系如下:出发日期用户名 密码 查阅 用户表 购票 4始发站用户名 我的车票表 票价 车次

课程设计说明书(论文)用纸票数车票表终点站票价到达时间出发时间2.3 使用的主要技术本次 C#大作业使用了 sql server2008 来实现数据库的设计, VS2012 来实现系 统的编码。

用了数据库及数据库表的创建技术, C#模块化编程,在系统与数据 库之间用了三层架构, 将数据库连接进行了封装,避免了代码的冗杂并实现了完 全对对象的操作, 面向对象的设计思想也得到了很好的应用,在代码编写过程中 还运用了调试技术。

2.4 系统的安全性系统设计了登录界面, 每个合法用户有用户名及一个密码,只有当用户输入正 确的用户名及密码组合后才能够对学生信息进行操作, 否则给出登录的错误提示 信息。

代码中也设置了各种语法检查,避免不必要的异常抛出。

3.系统实现3.1 系统主要类的设计本次系统设计用了三个类 User,Ticket 和 Myticket。

User 类主要对应于数 据库里的 users 表,成员有用户 id,用户名 userName,用户密码 password;UserPrivate int userId; Private string userName; Private string password;Ticket 类对应于 ticket 表,成员有始发站 startStation,终点站 arriveStation,车次5

课程设计说明书(论文)用纸carNumber 等等;TicketPrivate string startStation; Private string arriveStation; Private string carNumber; Private string startTime; Private string arriveTime; Private int tickePrice; Privatec int poll; Myticket 类设计对应于数据库中 myticket 表格中的数据, 成员有用户名 uname, 出发站 goStation, 到达站 toStation, 出发日期 goDate, 票价 ticNum, 车次 carNu;MyticketPrivate string uname; Private string goStation; Private string toStation; Private string goDate; Private int ticNum; Private string carNum; 在类的设计中, 以上三个类的每个成员都进行了重构和封装字段操作,方便其 他函数的调用与访问,三个类封装在了以 Model 命名的类库中,其他类库使用 只需添加引用即可,方便了操作。

3.2 功能模块设计与实现本系统主要设计了四个模块,如下图:6

课程设计说明书(论文)用纸Model 模块包含了本次程序所需要的所有类,有 Ticket,User 和 Myticket,他们 在前面类设计已经尽心了详细的介绍。

DAL 模块负责数据库的连接,含有四个 C#文件,DBHelperForsql 主要实现底层 数据库的连接,包含增删改查函数,UserService 实现用户登录时连接数据库用 户名和密码的检查,TicketService 实现了查询数据库中的车票信息,可以向数据 库中添加和减少车票, MyticketService 实现向个人用户的数据库车票中添加删除 等操作。

BLL 模块是 DAL 模块与 TicketManager 模块之间的连接层, 实现了 DAL 模块每 个类中定义的函数,在 TicketManager 模块中可以直接调用。

TicketManager 模块是系统的主模块,由三个 Form 窗体组成,第一个窗体位登录 窗口, 检查用户登录名密码的正确性并给出错误提示,登录进去之后直接跳转至 购票查询主窗体,在主窗体中点击“我的购票信息”可以进入第三个已购票信息 窗体,在这里可以点击退订进行退票。

结果演示如下: 首先运行会进入登录页面,7

课程设计说明书(论文)用纸在窗口中输入用户名和密码,比如密码输入错误,会给出弹窗信息,正确输入之后,会进入订票系统主界面,在窗口中选择日期,始发站和终点站点击 查询, 这时会显示出车次信息, 选择好自己的车次点击订票若还有剩余车票则会 显示出订票成功,此时显示剩余票数为 32,8

课程设计说明书(论文)用纸这是在点击“我的订票信息” ,会弹出已经订购过的车票,选择自己订购的车票点击“退订”按钮,会将已经购买的车票返回给系统, 这时再在主界面点击查询,会发现票数剩余 33。

9

课程设计说明书(论文)用纸总结此次的车票管理系统首先实现了用户的登录验证,并在安全性方面给与 了一定的考虑,在界面功能上也基本实现了购票流程的模拟。

在界面设计上 竭尽所能做到排版简洁美观, 操作简单易上手, 已经能满足票务管理的需求, 对大部分的用户来说可以熟练的使用本系统。

当然此次系统毕竟是票务管理 的模拟,在很多细节的把握上还是很难与商业化的大型购票网站相提并论, 比如灵活性,移植性问题等,而且也无法实现网银的真正接入付款,在这些 方面还是需要在以后的开发过程中多多考虑的。

本次的 C#大作业花费了周六周日两天时间来完成代码的编写与测试, 又用 了周一周二两个下午进行文档的编写,虽然耗费了不少时间,但最终还是自 己一个人完成了这个小项目,尽管功能不是那么完善,但付出汗水之后确实 有不少的收获,希望在以后的时间里能多加锻炼自己的代码编写能力,在后 续可以添加更多的功能。

C#这门课之后才感觉所传非虚,虽然有点难上手 ,但老师大部分会按着推 荐教材按部就班的讲, 蒋老师的课确实很独特,通过一个个工程案例来让我们体 会其中运用的技术。

上了两周之后我对这种以前没有体验过的教课方式产生了极 大兴趣,尽管课堂上有时候会跟不上节奏,但感觉学到了很多东西,印象最深的 就是编程序的三层架构,以前只是知道但并不会运用到实际的编码中,通过第 16 周的学习我感觉自己的水平亟需提高。

最后,学习这门课对我最大的收获是: 动手写程序比只看课本不实践重要得多10

课程设计说明书(论文)用纸参考文献[1] Bruce Eckel.Java 编程思想. 北京:机械工业出版社,2007 [2] 龚永罡,陈昕.Java 程序设计[M]. 北京:清华大学出版社,2009 [3] 刘兆宏,郑莉,陈建等. Java 语言程序设计案例教程[M].北京:清华大学出 版社,2008 [4] 王舜燕、钟珞.Java 编程方法学[M].北京:北京邮电大学出版社,200811

课程设计说明书(论文)用纸源代码:#include #include #include #include #include #define N 1000 typedef struct 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 NewMessage(); void ShowTable1(); void ShowTable2(int i); void Display(); void add(); void save(); void load(); void search(); void change(); void quit(); void Ticketorder(); void Ticketdelete(); int menu_select(); int whether(int); void void deletemessage(); int findnum(char s1[]); void get(int,int); // ///初始班次总数为 0 // 多条记录 //系统时间 //新纪录*录入函数****** //线框调用 1, , ,不用没次输 //线框调用 2, , ,不用没次输 //显示所有函数 //增加记录 保存函数 // 按班次查询函数 //查询函数 //修改函数** ////////// //退出函数****** // //*售票函数*** //删除函数* //菜单函数* ////判断时间是否超出函数*** //查询函数★//s1 为班次//s2 为终点站 //班次查询函数 //修改及增加班次* //删除函数 //车次编号 //时间, ,小时 //分钟 //起始站 //终点站 //车程实际时间 //最大车载容量 //已售票数 ///宏定义函数 //串操作及内存操作函数 /////调用系统函数 ///时间库函数 ///输入输出函数 //宏定义多条记录 ////定义新结构体 TICKETfind(char s1[],char s2[]);char *menu[]={"*****************欢迎使用车票查询系统*****************", "\n*******************MENU 功能菜单***********************", "\n◤ "\n◆ "\n◆ ★ ★ ★ 1. 录入班次 2. 显示所有班次 3. 查询班次 ◥", ◆", ◆",12

课程设计说明书(论文)用纸"\n◆ "\n◆ "\n◆ "\n◆ "\n◆ "\n◣ void main() { system("cls"); while(1) { switch(menu_select()) { case 1: NewMessage();break; case 2: Display();break; case 3: search();break; case 4: add();break; case 5: Ticketorder();break; case 6: Ticketdelete();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"); ///输出换行 //判断是否是 1 到 9 的命令 //输出菜单各项) //刷屏 system("color 09");//改变颜色 ///定义要输入的数字功能 /////////菜单函数* ////新纪录*录入函数****** // // 显示 //查找函数** // //增加记录 ////* 售票函数*** //删除函数* //修改函数** ////// 选择调用删除函数 //////退出函数****** // 菜单函数* //刷屏 //菜单函数循环 ★ ★ ★ ★ ★ ★ 4. 增加班次 5. 售票 6. 退票 7. 修改班次 8. 删除班次 9. 退出 ◆", ◆", ◆", ◆", ◆", ◢"};/**************************主函数***************************/printf("******************************************************"); printf("\n 请选择(1-9):▁▂▃▄▆▇");13

课程设计说明书(论文)用纸scanf("%s",s); c=atoi(s); } return c; } /*******************************录入函数************************************/ void NewMessage() { int i=0,j=5,h; char s[5]; FILE *fp; system("cls"); { printf("车票信息已经存在请选择增加功能!\n"); printf("任意输入则返回菜单\n"); scanf("%s",s); i=1; } if(i==0) { system("cls"); //刷屏 //指向班次指针 printf("请输入要录入班次总数:\n"); scanf("%d",&class_num); system("cls"); { system("cls"); h=-1; for(;h!=i;) { printf("请输入班次:\n"); scanf("%s",records[i].num); for(h=0;h

课程设计说明书(论文)用纸} save(); } } /*******************************显示所有函数********************************/ void Display() { int i,j; system("cls"); load(); ShowTable1(); { printf("\n|----------|----------|----------|----------|--------|--------|--------|\n"); if(whether(i)) //判断时间是否超出函数*** //刷屏 // 调用按班次查询函数 //线框调用 1, , ,不用没次输 ///// 按班次顺序输出 //显示所有函数 //调用保存函数for(i=0,j=0;i

不用没次输。

打 印 表 尾 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |\n"); //线框调用 1, , ,不用没次输 //线框调用 2 /////从控制台读取一个字符,但不显示在屏幕上 printf("\n 按任意键继续....\n"); records[i].from,records[i].to,records[i].hours, records[i].max,records[i].now);15

课程设计说明书(论文)用纸{ printf("\n|----------|----------|----------|----------|--------|--------|--------|\n"); } /**************************查找函数 11**************************/ void { 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"); /////s2 为终点站 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

课程设计说明书(论文)用纸printf("\n|----------|----------|----------|----------|--------|--------|--------|\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

课程设计说明书(论文)用纸} } } /********************************售票函数*****************************/ void Ticketorder() { 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(); scanf("%s",num); for(i=0;irecords[i].now&&whether(i)==1) //判断时间是否超出函数***并且***没超出最大客量 { records[i].now++; printf(" save(); getch(); break; } else { printf("该班次已满或已发出!\n"); getch(); } } } /****************************退票删除函数***************************************/ void Ticketdelete() { int i; char num[10]; system("cls"); //刷屏 //删除函数* /////从控制台读取一个字符,但不显示在屏幕上 通 向 %s 班 功!\n",records[i].to,records[i].num); //调用保存函数 /////从控制台读取一个字符,但不显示在屏幕上 ///使已售的暑假 1 次 为 %s 的 票 订 票 成 // 调用按班次查询函数 //查找函数** //刷屏 //*售票函数***printf("请输入要订票的班次(若无请输入 0):\n");18

课程设计说明书(论文)用纸printf("1. 退票\n"); printf("2. 返回\n"); printf("请选择(1-2)\n:"); scanf("%d",&i); if(i==1) { system("cls"); load(); scanf("%s",num); i=findnum(num); if(whether(i)) { printf("确定(Y/N)?"); 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) { } } } /********************************修改函数*********************************/ void change() { char num[10],s[10]; int h=0,j=13,i; load(); system("cls"); scanf("%s",num); // 调用按班次查询函数 //刷屏 //修改函数** printf("输入错误!\n"); /////从控制台读取一个字符,但不显示在屏幕上 getch(); /////从控制台读取一个字符,但不显示在屏幕上 //调用保存函数 //从控制台读取一个字符,但不显示在屏幕上 //使已售票加 1 //调用班次查询函数 //判断字符串比较是否相等 待比较的字符串 //判断时间是否超出函数*** if(strcmp(num,records[i].num)==0) //刷屏 // 调用按班次查询函数printf("请输入要退票的班次:\n");printf("请输入要修改的班次:\n");19

课程设计说明书(论文)用纸i=findnum(num); if(i==class_num) { printf("输入错误,无此班次!\n"); getch(); } else { printf("确定修改(Y/N)?\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"); scanf("%s",num); i=findnum(num); if(i==class_num) { printf("输入错误,无此班次!\n"); getch(); } else { printf("确定?(y/n)\n"); scanf("%s",num); if(num[0]=='y'||num[0]=='Y') { ///从控制台读取一个字符,但不显示在屏幕上 //调用班次查询函数 //刷屏 printf("请输入要删除的班次:\n"); //刷屏 //删除班次信息 ////修改及增加班次* //调用保存函数 ///从控制台读取一个字符,但不显示在屏幕上 //调用班次查询函数20

课程设计说明书(论文)用纸for(;i

课程设计说明书(论文)用纸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"); getch(); exit(0); } if((fp2=fopen("d:车票管理系统 0.dat","rb"))==NULL) { system("cls"); getch(); exit(0); } fread(&class_num,sizeof(int),1,fp2); fclose(fp1);fclose(fp2); } void quit() { char s[5]; printf("确认退出?(Y/N)\n"); scanf("%s",s); if(s[0]=='y'||s[0]=='Y') exit(0); //程序中止执行,返回调用过程..state 0-正常中止非 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 // 修改及增加班次* // ///读入信息 fread(records,sizeof(CLASS),class_num,fp1);///// 读入信息 ///文件关闭 //刷屏 printf("文件打开错误!\n"); ///从控制台读取一个字符,但不显示在屏幕上 //退出 //刷屏 ///从控制台读取一个字符,但不显示在屏幕上 printf("文件打开错误!\n"); //按班次查询函数 ///关闭文件 // 写入文件信息22

课程设计说明书(论文)用纸(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; t=time(NULL); local=localtime(&t); ntm_hourtm_hour==atoi(records[i].hour)&&local->tm_mi23

 
 

微信扫一扫 送福利