计算机科学与技术系信息管理与信息系统专业《程序设计综合课程设计》报告(2013/2014学年第一学期)学生姓名:学生班级:学生学号:指导教师:2013年1月8日目录第一章课程设计的目的和要求 (1)1.1课程设计的目的 (1)1.2 课程设计的基本要求 (1)第二章课程设计任务内容 (2)2.1 简介 (2)2.2 功能说明 (2)第三章详细设计说明 (3)3.1 模板设计图 (3)3.2 主函数流程图 (4)3.3 子函数流程图 (5)第四章编码与调试 (7)4.1 软件使用说明 (7)4.2 运行结果及截图 (7)第五章课程设计心得与体会 (11)附录一参考文献 (12)附录二程序清单 (13)附录三录入文件 (27)火车票管理系统第一章课程设计的目的和要求高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时巩固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的基本方法,熟悉程序开发的全过程,提高综合应用语言的能力。
高级语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。
1.1课程设计的目的1.巩固和掌握高级语言程序设计基本概念;2.掌握基本的程序设计方法;3.掌握开发软件所需的需求定义能力;4.提高书写程序设计说明文档的能力;5.提高综合运用高级语言的能力,强化编程和调试能力。
1.2 课程设计的基本要求1.根据所给的课程设计题目,分析课程设计题目的要求;2.对系统功能模块进行分析,写出详细的设计说明文档;3.编写程序代码,调试所编写程序使其能正确运行;4.设计完成的软件便于操作和使用;5.设计完成后提交课程设计报告。
第二章课程设计任务内容2.1 简介火车票管理系统:是为广大群众开发的,帮助人们查询车次信息,订票和退票,大大节约了人们的时间,是铁路营运公司所需要的全部功能的一个综合的管理系统。
2.2 功能说明(1)录入班次信息:信息用文件保存,可不定时地增加班次数据。
(2)浏览班次信息:可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询 ,可按终点站查询。
(4)售票和退票功能:A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
(5)删除功能:该功能可以删除录入的错误信息。
(6)订购功能:该功能可以方便旅客提前预定。
第三章详细设计说明3.1 模板设计图图3-1函数功能模板图3.2 主函数流程图图3-2主函数流程图3.3 子函数流程图图3-3 录入班次流程图图3-4 查询车次函数流程图图3-5 订票函数流程图第四章编码与调试4.1 软件使用说明打开软件后,会出现一个主页面,这时候你首先要把火车票信息调用出来,这款软件具备很多功能,例如用键盘操作页面;可以更改班次信息;浏览班次信息;订票;退票等等,并且能够随时退出系统得功能。
这款软件简单易操作,希望大家会喜欢。
4.2 运行结果及截图1、进入系统页面录入班次信息图4-1 录入班次信息图2、浏览录入班次信息图4-2 浏览班次信息图3、查询你乘车需要的信息(1)按班次查询图4-3 班次查询图(2)按终点站查询图4-4 班次查询图4、订票与退票(1)订票成功图4-5 订票成功图(2)订票失败图4-6 订票失败图(3)退票成功图4-7 退票成功图(4)退票失败图4-8 退票失败图5、退出系统图4-9 退出系统图第五章课程设计心得与体会三周的课程设计结束了,我终于完成了这次高级语言课程设计,并且认真完成了课程设计报告。
在这次的课程设计中不仅检验了我所学习的知识,也培养了自己的耐心。
课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.通过这次课程设计,本人在多方面都有所提高。
通过这次火车票系统设计,综合运用本专业所学课程的理论,巩固与扩充了高级语言设计等课程所学的内容,掌握高级语言设计的方法和步骤,掌握了高级语言设计的基本的概念,了解了高级语言的基本结构,提高了编程能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,大大激发了我编程的兴趣,在设计的过程中亦遇到了许多困难,我会向同学和学长寻求帮助,在交流中共同进步,也体现出自己设计程序的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
附录一参考文献[1] 张海藩编著.软件工程导论(第四版)[M] .清华大学出版社.2006.5.[2] Roger S.Pressman.软件工程----实践者的研究方法.机械工业出版社.1990[3] 张敬等编著.软件工程教程.北京航空航天大学出版社.2003.7.[4] Steve maguire. Writing Clean Code(姜静波等译).电子工业出版社.1993[5]谭浩强著.<<C++程序设计>>.清华大学出版社[6]严蔚敏.吴伟民编著.<<数据结构(C语言版)>>.清华大学出版社附录二程序清单以下是火车票管理系统的完整程序清单:#include<stdio.h>#include<stdlib.h>#include<dos.h>#include<time.h>#include<conio.h>#include<string.h>const int MAX=20;const int N=50;const int MAXFILENAME=100;enum {FALSE,TRUE};struct time{int hour;int minutes;};struct ticket{int SerialNumber;struct time SetOut;char DeparturePoint[MAX];char TerminalPoint[MAX];float LastTime;int FixNumber;int FixedNumber;}car[N];int RecordNumber;int FLAG=FALSE;/**********************************************/ int ShowMessage(void); //载入原始数据void mainmenu(void); //主菜单void InsertMessage(void); //录入班次信息void SearchMenu(void); //查询路线子菜单void SearchByNumber(void); //按班次号查询void SearchByAddress(void); //按终点站查询void TicketManagement(void); //车票售出与退回void TicketOrder(void); //售票void TicketDelete(void); //退票void exit(void); //退出该系统void SaveRecord(ticket x); //储存信息到文件中/********************************************/ int main(void){do{mainmenu();}while(FLAG==FALSE);return 0;}void mainmenu(void){system("color 1f");system("mode con: cols=140 lines=130");char functionNumber;printf(" 车票管理系统\n\n");printf(" 日期:2011/1/3/22:57\n");printf("============================================================== ==============\n");printf(" 1.录入班次信息\t\n");printf(" 2.浏览班次信息\t\n");printf(" 3.查询行车路线\t\n");printf(" 4.售票与退票系统\t\n");printf(" 5.退出该系统\t\n");printf("============================================================== ==============\n");printf("请选择你所需要的功能:");scanf("%c",&functionNumber);switch(functionNumber){case '1':{InsertMessage();printf("\n按任意键回主菜单......\n");getchar();getchar();}break;case '2':{RecordNumber=ShowMessage();printf("\n按任意键回主菜单......\n");getchar();getchar();}break;case '3':{SearchMenu();printf("\n按任意键回主菜单......\n");getchar();getchar();}break;case '4':{TicketManagement();getchar();getchar();}break;case '5':FLAG=TRUE;exit();break;default:{printf("输入错误,请确保你的输入为1--5.\n"); printf("按任意键回主菜单......\n");getchar();getchar();}}//switch endsFLAG=FALSE;}void InsertMessage(void){FILE *fp;char filename[MAXFILENAME];int i;printf("请输入文件名或者文件路径名:");scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n",filename,filename);mainmenu();}for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++){fscanf(fp,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].Se tOut.minutes);fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&c ar[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);SaveRecord(*(car+i));}RecordNumber=i;/*******************************输出更新后的订票记录************************************************************/printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");for(i=0;i<RecordNumber;i++){printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].S etOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);}fclose(fp);}int ShowMessage(void){int i;FILE *fp;if((fp=fopen("add.txt","r"))==NULL){printf("读取数据失败,请检查文件add.txt是否存在.\n");exit(-1);}for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++){fscanf(fp,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].Se tOut.minutes);fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&c ar[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);}int count=i;printf("班次\t发车时间\t起点\t终点\t 行车时间(小时)\t额定载量\t已定票人数\n");for(i=0;i<count;i++){printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i]. SetOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\t",car[i].DeparturePoint,car[i].Term inalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);/*调用系统时间实现的功能:如果车已发出,则打出提示"此车已发出",但是此处有错误*/time_t tval;struct tm *now;tval = time(NULL);now = localtime(&tval);if((now->tm_hour==car[i].SetOut.hour&&now->tm_min>car[i].SetOut.minute s)||(now->tm_hour>car[i].SetOut.hour))printf("此车已发出");printf("\n");}return count;}void SearchMenu(void){system("color 1f");system("mode con: cols=140 lines=130");char functionNumber;printf(" 查询子菜单\n");printf("============================================================== ==============\n");printf(" 1.按班次号查询\t\n");printf(" 2.按终点站查询\t\n");printf(" 3.返回主菜单\t\n");printf("============================================================== ==============\n");printf("请选择你所需要的功能:");scanf("%*c%c",&functionNumber);switch(functionNumber)case '1':SearchByNumber();break;case '2':SearchByAddress();break;case '3':getchar();mainmenu();break;default:printf("输入错误,请确保你的输入为1--3.\n");printf("按任意键回查询子菜单......\n");getchar();getchar();SearchMenu();}}void SearchByNumber(void){int SearchNumber;printf("请输入要查询的班次号:");scanf("%d",&SearchNumber);printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");printf("%d\t%d:%d\t\t",car[SearchNumber-1].SerialNumber,car[SearchNumb er-1].SetOut.hour,car[SearchNumber-1].SetOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[SearchNumber-1].DeparturePoin t,car[SearchNumber-1].TerminalPoint,car[SearchNumber-1].LastTime,car[S earchNumber-1].FixNumber,car[SearchNumber-1].FixedNumber);}void SearchByAddress(void)int i;char Address[MAX];printf("请输入终点站的名称:");scanf("%s",&Address);printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");for(i=0;i<RecordNumber;i++){//对比终点站记录,找到并输出if((strcmp(Address,car[i].TerminalPoint))==0){printf("%d\t%d:%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].S etOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i].DeparturePoint,car[i].Term inalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);}}}void TicketManagement(void){char functionNumber;system("color 1f");system("mode con: cols=140 lines=130");printf(" 订票与退票菜单\n");printf("============================================================== ==============\n");printf(" 1.订票\t\n");printf(" 2.退票\t\n");printf(" 3.返回主菜单.\n");printf("============================================================== ==============\n");printf("选择你需要的功能:");scanf("%*c%c",&functionNumber);switch(functionNumber){case '1':{TicketOrder();//getchar();//getchar();}break;case '2':TicketDelete();break;case '3':{getchar();mainmenu();}break;default:{printf("输入错误,请确保你的输入为1--3.\n");printf("按任意键回主菜单......\n");getchar();getchar();mainmenu();}}}void TicketOrder(void){int i;printf("请输入要订购的车票的班次:");scanf("%d",&i);if(i<0||i>RecordNumber){printf("对不起,今天没有这趟车,请明天再来,谢谢使用!\n");printf("按任意键回主菜单......\n");getchar();//getchar();TicketManagement();}time_t tval;struct tm *now;tval = time(NULL);now = localtime(&tval);if((now->tm_hour==car[i].SetOut.hour&&now->tm_min<car[i].SetOut.minute s)||(now->tm_hour<car[i].SetOut.hour)){if(car[i].FixedNumber<car[i].FixNumber){(car[i].FixedNumber)++;printf("你的订票成功,请按时上车,谢谢使用!\n");}else printf("对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!\n");}else printf("对不起,今天的这趟车已发出,请明天再来,谢谢合作!\n");printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");printf("%d\t%d:%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[ i-1].SetOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i-1].DeparturePoint,car[i-1]. TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumbe r);//printf("按任意键回主菜单......\n");//getchar();getchar();}void TicketDelete(void){int i;printf("请输入要退购的车票的班次:");scanf("%d",&i);if(i<0||i>RecordNumber){printf("对不起,今天没有这趟车,无法完成退票.谢谢使用!\n");getchar();//getchar();TicketManagement();getchar();}time_t tval;struct tm *now;tval = time(NULL);now = localtime(&tval);if((now->tm_hour==car[i].SetOut.hour&&now->tm_min<car[i].SetOut.minute s)||(now->tm_hour<car[i].SetOut.hour)){if(car[i].FixedNumber>=1){car[i].FixedNumber-=1;printf("退订车票成功,谢谢使用!\n");}else printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n");}else printf("对不起,今天的这趟车已发出,无法完成退票!\n");printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");printf("%d\t%d:%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[ i-1].SetOut.minutes);printf("%s\t%s\t\t%.1f\t %d\t\t%d\n",car[i-1].DeparturePoint,car[i-1]. TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumbe r);getchar();}void exit(void){printf("\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\n");exit(0);}void SaveRecord(ticket x){FILE *fp;if((fp=fopen("add.txt","a"))==NULL){printf("打开文件%s失败\n","add.txt");exit(-1);}fprintf(fp,"\n%d\t%d\t%d\t\t",x.SerialNumber,x.SetOut.hour,x.SetOut.mi nutes);fprintf(fp,"%s\t%s\t\t%.1f\t %d\t\t%d",x.DeparturePoint,x.TerminalPoin t,stTime,x.FixNumber,x.FixedNumber);}附录三录入文件。