车票管理系统1_第1页
车票管理系统1_第2页
车票管理系统1_第3页
车票管理系统1_第4页
车票管理系统1_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要C是一种计算机程序设计语言,可以作为系统设计语言编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,因此它的应用范围广阔。本系统是根据学校图书管理工作的需要,通过C语言开发一个图书管理系统来实现对图书信息进行有效、准确的管理。整个系统从简便、实用的要求出发,完成图书管理的全过程,包括图书信息的采集,图书的插入、删除、借阅、归还、显示、输出等功能。本文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。系统的说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。关键词:图书管理系统, C语言,信息采集模块目 录1 设计目的及内容要求11.1 设计目的1

2、1.2 内容要求12 系统结构设计23 系统详细设计33.1 系统主界面设计33.2 定义 构造方法33.3 定义 方法34运行结果及分析4总 结6参考文献7源程序81系统背景意义1.1系统开发目的 随着经济的发展,交通运输越来越便捷,为了提高效率,减轻劳动强度,设计开发高效的汽车信息查询系统就显得颇为重要。汽车售票管理中包含许多内容,有订票管理问题,车票发布问题,用户登录问题等等。这次C#大作业利用VS2012开发工具和SQL Server2008数据库系统来汽车票务信息管理系统。该系统主要目的是实现车站网上售票工作,可以满足普通用户售票的基本要求,包括登录、查询、订票、退票等模块

3、。 1.2同类产品概况车票管理涵盖了我们出行的方方面面,全国目前有多家网站经营汽车票的销售管理,比如畅途网、坐车网、12308等,这些网站主要面向全国用户,与多家售票站点合作,多是一些大城市之间的客车,县级之间的汽车信息很少有。而目前从总体上看大部分的中小汽车站官网已经有了订票功能,弥足了它们的不足。购票流程也是大同小异,用户登录之后选择始发站、目的站、出发日期,查阅车票信息,确定后付款即可,这时个人中心即有了自己的购票信息,若要退票则选择退订即可,操作步骤流畅,个人体验也较好。1.3与同类产品的比较这次的车票订购管理系统实现了与同类产品一样的查票、购票、退票的基本功能,优点是操作简单,已经能

4、满足票务管理的需求,退票也遵循了原子性操作,退票之后系统将之添加到票库中。当然缺点是此次系统主要是票务管理的模拟,在细节上无法与同类产品相比较,比如缺少了注册用户,购票付款,退票返钱的环节,而且是一款window下的客户端产品,少了同类产品网页版的灵活性,当然其他系统如Linux,mac OS是无法运行本系统的。2. 系统主要设计 2.1系统总体功能模块 车票主要划分为三个部分:用户管理,车票查询,车票管理三个功能模块。车票管理系统用户管理模块车票查询模块车票管理模块三个模块完成各自的功能。用户管理模块用户登录信息提示密码验证 用户管理模块:用户可以根据自己的帐号密码进行系统的登录,若登录失败

5、系统则给出提示信息。 车票查询模块,用户可以选择出发日期,出发站,目的站来查询车票信息并订购自己的车票。车票订购车票查询模块车票查询系统提示信息输入车票管理模块:用于对用户已经订购车票的管理。车票管理模块车票退订 程序流程图主要如下所示:开始登录界面检查正确性NY系统主界面车票退订车票订购车票查询结束退出 2.2数据库设计 数据库设计了三张表,users,ticket和myticket表。 users表示用户表,存储系统中存在的用户名和密码,如下所示: ticket表存储汽车班次的详细信息,含有始发站,终点站,车次,发车时间,到达时间,票价,剩余票数等信息,如下:表名:ticket mytic

6、ket表记录所有用户订购的汽车车票信息,含有用户名,出发站,到站,出发日期,票价等信息,如下:表名:myticket出发日期各个实体间的依赖关系如下:用户名用户名我的车票表密码查阅票价用户表车次始发站购票终点站票数车票表到达时间出发时间票价 2.3使用的主要技术本次C#大作业使用了sql server2008来实现数据库的设计,VS2012来实现系统的编码。用了数据库及数据库表的创建技术,C#模块化编程,在系统与数据库之间用了三层架构,将数据库连接进行了封装,避免了代码的冗杂并实现了完全对对象的操作,面向对象的设计思想也得到了很好的应用,在代码编写过程中还运用了调试技术。 2.4系统的安全性

7、系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对学生信息进行操作,否则给出登录的错误提示信息。代码中也设置了各种语法检查,避免不必要的异常抛出。3. 系统实现 3.1系统主要类的设计本次系统设计用了三个类User,Ticket和Myticket。User类主要对应于数据库里的users表,成员有用户id,用户名userName,用户密码password;UserPrivate int userId;Private string userName;Private string password;Ticket类对应于ticket表,成员有始发站st

8、artStation,终点站arriveStation,车次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,出发日期go

9、Date,票价ticNum,车次carNu;MyticketPrivate string uname;Private string goStation;Private string toStation;Private string goDate;Private int ticNum;Private string carNum; 在类的设计中,以上三个类的每个成员都进行了重构和封装字段操作,方便其他函数的调用与访问,三个类封装在了以Model命名的类库中,其他类库使用只需添加引用即可,方便了操作。 3.2功能模块设计与实现本系统主要设计了四个模块,如下图:Model模块包含了本次程序所需要的所有

10、类,有Ticket,User和Myticket,他们在前面类设计已经尽心了详细的介绍。DAL模块负责数据库的连接,含有四个C#文件,DBHelperForsql主要实现底层数据库的连接,包含增删改查函数,UserService实现用户登录时连接数据库用户名和密码的检查,TicketService实现了查询数据库中的车票信息,可以向数据库中添加和减少车票,MyticketService实现向个人用户的数据库车票中添加删除等操作。BLL模块是DAL模块与TicketManager模块之间的连接层,实现了DAL模块每个类中定义的函数,在TicketManager模块中可以直接调用。TicketMan

11、ager模块是系统的主模块,由三个Form窗体组成,第一个窗体位登录窗口,检查用户登录名密码的正确性并给出错误提示,登录进去之后直接跳转至购票查询主窗体,在主窗体中点击“我的购票信息”可以进入第三个已购票信息窗体,在这里可以点击退订进行退票。结果演示如下:首先运行会进入登录页面,在窗口中输入用户名和密码,比如密码输入错误,会给出弹窗信息,正确输入之后,会进入订票系统主界面,在窗口中选择日期,始发站和终点站点击查询,这时会显示出车次信息,选择好自己的车次点击订票若还有剩余车票则会显示出订票成功,此时显示剩余票数为32,这是在点击“我的订票信息”,会弹出已经订购过的车票,选择自己订购的车票点击“退

12、订”按钮,会将已经购买的车票返回给系统,这时再在主界面点击查询,会发现票数剩余33。总结此次的车票管理系统首先实现了用户的登录验证,并在安全性方面给与了一定的考虑,在界面功能上也基本实现了购票流程的模拟。在界面设计上竭尽所能做到排版简洁美观,操作简单易上手,已经能满足票务管理的需求, 对大部分的用户来说可以熟练的使用本系统。当然此次系统毕竟是票务管理 的模拟,在很多细节的把握上还是很难与商业化的大型购票网站相提并论, 比如灵活性,移植性问题等,而且也无法实现网银的真正接入付款,在这些 方面还是需要在以后的开发过程中多多考虑的。 本次的C#大作业花费了周六周日两天时间来完成代码的编写与测试,又用

13、了周一周二两个下午进行文档的编写,虽然耗费了不少时间,但最终还是自己一个人完成了这个小项目,尽管功能不是那么完善,但付出汗水之后确实 有不少的收获,希望在以后的时间里能多加锻炼自己的代码编写能力,在后续可以添加更多的功能。C#这门课之后才感觉所传非虚,虽然有点难上手 ,但老师大部分会按着推荐教材按部就班的讲,蒋老师的课确实很独特,通过一个个工程案例来让我们体会其中运用的技术。上了两周之后我对这种以前没有体验过的教课方式产生了极大兴趣,尽管课堂上有时候会跟不上节奏,但感觉学到了很多东西,印象最深的就是编程序的三层架构,以前只是知道但并不会运用到实际的编码中,通过第16周的学习我感觉自己的水平亟需

14、提高。最后,学习这门课对我最大的收获是:动手写程序比只看课本不实践重要得多参考文献1 Bruce Eckel.Java编程思想. 北京:机械工业出版社,20072 龚永罡,陈昕.Java程序设计M. 北京:清华大学出版社,20093 刘兆宏,郑莉,陈建等. Java语言程序设计案例教程M.北京:清华大学出版社,20084 王舜燕、钟珞.Java编程方法学M.北京:北京邮电大学出版社,2008源代码:#include<stdio.h> /宏定义函数#include<string.h> /串操作及内存操作函数#include<stdlib.h> /调用系统函数#

15、include<time.h> /时间库函数 #include<conio.h> /输入输出函数#define N 1000 /宏定义多条记录typedef struct TICKET /定义新结构体TICKETchar num10; /车次编号char hour3; /时间,小时char min3; /分钟char from10; /起始站char to10; /终点站float hours; /车程实际时间int max; /最大车载容量int now; /已售票数CLASS;int class_num=0; /初始班次总数为0 CLASS recordsN; /

16、多条记录int system_time(); /系统时间void NewMessage(); /新纪录*录入函数*void ShowTable1(); /线框调用1,不用没次输 void ShowTable2(int i); /线框调用2,不用没次输 void Display(); /显示所有函数void add(); /增加记录void save(); / 保存函数void load(); / 按班次查询函数void search(); /查询函数void change(); /修改函数* void quit(); / /退出函数*void Ticketorder(); / /*售票函数*

17、void Ticketdelete(); /删除函数*int menu_select(); /菜单函数*int whether(int); /判断时间是否超出函数*void find(char s1,char s2); /查询函数/s1为班次/s2为终点站void deletemessage(); /删除函数int findnum(char s1); /班次查询函数void get(int,int); /修改及增加班次*char *menu="*欢迎使用车票查询系统*","n*MENU功能菜单*","n 1. 录入班次 ","

18、;n 2. 显示所有班次 ","n 3. 查询班次 ","n 4. 增加班次 ","n 5. 售票 ","n 6. 退票 ","n 7. 修改班次 ","n 8. 删除班次 ","n 9. 退出 " /*主函数*/void main()system("cls"); /刷屏while(1) /菜单函数循环switch(menu_select() /菜单函数*case 1: NewMessage();break; /新纪录*录入函

19、数*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 s5;

20、 /定义要输入的数字功能int c,i; system("cls"); /刷屏 system("color 09");/改变颜色 for(i=0;i<11;i+)printf("%s",menui); /输出菜单各项) i=0; while(c<0|c>9) /判断是否是1到9的命令printf("n"); /输出换行 printf("*"); printf("n请选择(1-9):");scanf("%s",s);c=atoi(s); /

21、atoi将字符串转换成一个整数值 /输出菜单面return c; /返回请求 /*录入函数*/void NewMessage() /*录入函数* int i=0,j=5,h; /char s5;FILE *fp; /定义文件型指针变量system("cls"); /刷屏if(fp=fopen("d:车票管理系统0.dat","rb")!=NULL) /fopen打开文件 printf("车票信息已经存在请选择增加功能!n");printf("任意输入则返回菜单n");scanf("%s

22、",s);i=1; /通过是1if(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&qu

23、ot;);scanf("%s",recordsi.num);for(h=0;h<i;h+)if(strcmp(recordsh.num,recordsi.num)=0) /判断字符串比较是否相等, 待比较的字符串 printf("输入错误!该班次已存在!n");break; /返回get(i,j); /修改及增加班次*j=5;save(); /调用保存函数/*显示所有函数*/void Display() /显示所有函数int i,j;system("cls"); /刷屏load(); / 调用按班次查询函数ShowTable1(

24、); /线框调用1,不用没次输 for(i=0,j=0;i<class_num;i+,j+=2) /按班次顺序输出 printf("n|-|-|-|-|-|-|-|n");if(whether(i) /判断时间是否超出函数*printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);else pri

25、ntf("|%10s| 已发车 |%10s|%10s|%8.1f|%8d|%8d|",recordsi.num,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);ShowTable2(j); /线框调用2printf("n按任意键继续.n");getch(); /从控制台读取一个字符,但不显示在屏幕上/*打印表头*/void ShowTable1() /线框调用1,不用没次输int i=2;system("cls"); /刷屏printf("

26、;*MESSAGE车程信息*n");printf("n|-|-|-|-|-|-|-|n"); printf("n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |n");/*打印表尾*/void ShowTable2(int i) /线框调用2。不用没次输。printf("n|-|-|-|-|-|-|-|n");/*查找函数11*/void search() /查询调用int i;char s110='0',s210='0'system("cls&qu

27、ot;); /刷屏printf("1. 按班次查询n");printf("2. 按终点站查询n");printf("3. 退出n");printf("请选择(1-3):n");scanf("%d",&i);load(); / 调用按班次查询函数switch(i) /多分枝选择语句 case 1: printf("请输入要查询的班次:n"); /s1为班次scanf("%s",s1);find(s1,s2); /调用查找函数222 2 break;c

28、ase 2:printf("请输入要查询终点站:n"); /s2为终点站scanf("%s",s2);find(s1,s2); /调用查找函数222 2 break; case 3: break;default : printf("输入错误!n");break;printf("按任意键继续.n");getch(); /从控制台读取一个字符,但不显示在屏幕上void find(char s1,char s2)int i,h=0,m;ShowTable1(); /调用线框1if(s20='0')m=1;

29、 /1为无条件执行else m=0;for(i=0;i<class_num;i+)if(strcmp(s1,recordsi.num)=0|strcmp(s2,recordsi.to)=0) /判断字符串比较是否相等, 待比较的字符串 printf("n|-|-|-|-|-|-|-|n");printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,r

30、ecordsi.max,recordsi.now);h+=2;if(m=1)break;ShowTable2(h); /调用线框2if(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

31、);if(i=1)system("cls"); /刷屏printf("1. 请输入要增加的班次:n");scanf("%s",recordsclass_num.num);for(i=0;i<class_num;i+)if(strcmp(recordsclass_num.num,recordsi.num)=0)/判断字符串比较是否相等, 待比较的字符串 判断车次没重复 printf("输入错误!n");getch(); /从控制台读取一个字符,但不显示在屏幕上break;if(i=class_num) get(

32、i,j); /修改及增加班次*class_num+; /使班次数加1save(); /调用保存函数/*售票函数*/void Ticketorder() /*售票函数*int i;char num10;system("cls"); /刷屏printf("1. 售票n");printf("2. 返回n");printf("请选择(1-2):n");scanf("%d",&i);if(i=1)load(); / 调用按班次查询函数search(); /查找函数*printf("请输入

33、要订票的班次(若无请输入0):n");scanf("%s",num);for(i=0;i<class_num;i+)if(strcmp(num,recordsi.num)=0)/判断字符串比较是否相等, 待比较的字符串 if(recordsi.max>recordsi.now&&whether(i)=1) /判断时间是否超出函数*并且*没超出最大客量recordsi.now+; /使已售的暑假1printf("通向%s班次为%s的票订票成功!n",recordsi.to,recordsi.num);save(); /

34、调用保存函数getch(); /从控制台读取一个字符,但不显示在屏幕上break;elseprintf("该班次已满或已发出!n");getch(); /从控制台读取一个字符,但不显示在屏幕上/*退票删除函数*/void Ticketdelete() /删除函数*int i;char num10;system("cls"); /刷屏printf("1. 退票n");printf("2. 返回n");printf("请选择(1-2)n:");scanf("%d",&i)

35、;if(i=1)system("cls"); /刷屏load(); / 调用按班次查询函数printf("请输入要退票的班次:n");scanf("%s",num);i=findnum(num); /调用班次查询函数if(strcmp(num,recordsi.num)=0) /判断字符串比较是否相等 待比较的字符串 if(whether(i) /判断时间是否超出函数*printf("确定(Y/N)?");scanf("%s",num);if(num0='y'|num0='

36、;Y') recordsi.now-; /使已售票加1printf("退票成功!n");save(); /调用保存函数getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf("该班车已发出,无法退票!n");getch(); /从控制台读取一个字符,但不显示在屏幕上if(i=class_num)printf("输入错误!n");getch(); /从控制台读取一个字符,但不显示在屏幕上/*修改函数*/void change() /修改函数*char num10,s10;int h=0,j=13,i;lo

37、ad(); / 调用按班次查询函数system("cls"); /刷屏printf("请输入要修改的班次:n");scanf("%s",num);i=findnum(num); /调用班次查询函数 if(i=class_num)printf("输入错误,无此班次!n");getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf("确定修改(Y/N)?n");scanf("%s",s);if(s0='y'|s0='Y')ge

38、t(i,j); /修改及增加班次*save(); /调用保存函数/*删除函数*/void deletemessage() /删除班次信息int i,h=0;char num10;system("cls"); /刷屏printf("1. 删除班次n");printf("2. 返回n");printf("请选择(1-2):n");scanf("%d",&i);if(i=1)system("cls"); /刷屏printf("请输入要删除的班次:n");

39、scanf("%s",num);i=findnum(num); /调用班次查询函数if(i=class_num)printf("输入错误,无此班次!n");getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf("确定?(y/n)n");scanf("%s",num);if(num0='y'|num0='Y')for(;i<class_num-1;i+) recordsi=recordsi+1;class_num-; /班次总数减1save(); /调用

40、保存函数printf("删除成功!n");getch();/*按班次查询函数*/int findnum(char s1) /查找班次 int i,h=0;ShowTable1(); /线框调用1,不用没次输 for(i=0;i<class_num;i+)if(strcmp(s1,recordsi.num)=0) /判断字符串比较是否相等,如果符合则输出车次等信息 printf("|-|-|-|-|-|-|-|n");printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",recordsi

41、.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);h+=2; /加2使输出的框架合适break;ShowTable2(h); /调用框架2return i;void save() /保存函数FILE *fp1,*fp2; /文件行指针if(fp1=fopen("d:车票管理系统.dat","wb")=NULL) /打开文件、为输出打开一个二进制文件printf("文件打开错误!n");e

42、xit(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"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论