程序设计报告.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《程序设计报告.pdf》由会员分享,可在线阅读,更多相关《程序设计报告.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-.程序设计实践训练课程设计报告姓 名:班 级:13 电信 2 班学 号:201330220133022013302-可修编-.指导老师:日期:2015.12.142015.12.16-华南农业大学电子工程学院-可修编-.摘要在现代社会,计算机已经进入社会生活的各个领域。计算机和互联网已经与老百姓的日常工作、学习和生活息息相关,人类社会现在又处于历史飞跃时期,由高度的工业化时代迈向计算机网络时代。作为新世纪的大学生,我们应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,通过实践巩固自己的知识。在这次的课程设计实践中,我们小组选择了车票管理系统这个课题。车票的管理系统包
2、括班次信息的录入、浏览和查询、售票和退票等功能。随着计算机技术的发展,可视编程技术占有了越来越重要的作用。Visual C+6.0 是一种功能强大行之有效的可视化编程工具。因此此软件是在 Visual C+6.0 环境下编写的。对于我们,随着学习的深入,已经大体掌握了 Visual C+6.0 环境下的程序开发。为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于 Visual C+6.0 环境的软件开发,先以字符统计软件作为开始,对 Visual C+6.0 环境和面向对象程序设计进行回忆和熟悉,使得在此基础上的下一个员工培训系统软件
3、的开发进行的更加顺利。本文档详细叙述了基于 Visual C+6.0环境下的车票管理系统的设计过程以及程序源代码。程序在编写的过程运用了子程序递归调用、头文件包含等编程方法,此次车票管理系统的开发目的是使我们用面向对象的方式来思考和解决问题的能力,并且可以掌握字符数组的使用、字符指针的使用、数据库的设计和文件使用以及 C 语言语法。设计程序的重要思想是模块化处理,自上而下,逐步精细;把一个复杂的问题分析为多个子问题,然后利用函数模块化把一个个小的问题解决。-可修编-.关键字:子程序、模块化、程序设计思路、结构体-可修编-.-可修编-.目录1 课程设计目的 12 课程准备阶段 12.1 背景 1
4、2.2 课程设计容 12.3 系统总体设计框架 13 程序设计过程 33.1 主函数的设计 33.2 录入信息功能函数的设计 43.3 显示所有班次功能 73.4 查询班次功能 93.5 增加班次功能 103.6 售票功能 113.7 退票功能 133.8 修改班次功能 153.9 删除班次功能 154 程序测试 175 总结 25Abstract 26参考文献 28-可修编-.-可修编-.-可修编-.1课程设计目的通过课程设计,加强对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构,进一步掌握C 语言中重要的数据结构,掌握并熟练运用指针、链表、结构体、文件等数据结构,掌
5、握软件系统设计的基本步骤,提高程序开发能力,能运用合理的控制流编写清晰高效的程序,加强程序分析能力1。2 课程准备阶段2.12.1 背景背景一直以来,在人们的日常出行中,大巴以其方便实惠的优点吸引了大量的乘客乘坐。然而,随着时代的发展,传统的效率低下,速度慢的人工售票方式已经跟不上时代的潮流。为了方便人们的出行,开发出一款车票管理系统已经迫在眉睫。2.22.2 设计容设计容一车站每天有 n 个发车班次,每个班次都有一班次号(1、2、3n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如:班次发车时间起点站终点站行车时间额定载量已定票人数18:00郫县广汉24
6、53026:30郫县0.5404037:00郫县0.54020-可修编-.410:00郫县0.5402程序基本要求:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据;(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息);(3)查询路线:可按班次号查询,可按终点站查询;(4)售票和退票功能:A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数;(5)采用文本菜单界面。-可修编-.2.32.3 系统总体设计框架系
7、统总体设计框架程序总体的功能如下图所示:程序包含了 8 个功能,除了课程设计要求的录入数据、显示数据、查询数据、增加数据、售票服务、退票服务这 6 个功能,我们另外加入了修改程序已经录入的数据和删除-可修编-.数据。相应的的函数实现算法,在之后的篇幅中详细介绍。3 程序设计过程根据程序设计的模块化思想,我们将程序进行功能的模块化,以下是我们的程序设计过程:3 31 1主函数的设计主函数的设计3.1.13.1.1主函数部应该设计一个死循环,里面将有一个控制变量函数,由其返回值确定主函数调用哪种功能,这里我们选用 switch语句,控制变量是 menu_select的返回值,menu_select
8、 是菜单选择函数。void main()system(cls);while(1)/*int k;k=mimaa();if(k)*/循环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:
9、deletemessage();break;/选择调用删除函数case 9:quit();break;/退出函数3.1.23.1.2menu_selectmenu_select 函数有校准功能,当输入无效字符时会显示提醒语句,程序如下:int menu_select()char s5;int c,i;/char menu20;system(cls);system(color 73);/改变颜色for(i=0;i0|c9)printf(n);printf(&);printf(n 请选择(1-9):);scanf(%s,s);c=atoi(s);break;/转化为整数值return c;3 32
10、 2 录入功能函数的设计录入功能函数的设计3.2.13.2.1 预约班次信息的录入录入的多个车票信息有多个数据类型,所以我们采用结构体数组为传递变量,每个结构体包含一个车次的信息,调用的函数为 newmessage 函数,结构体 recordsNrecordsN如下:#define N 1000typedef struct ticketchar num10;/车次-可修编-.char hour3;/发车时间char min3;/起点char from10;/终点char to10;/目的地float hours;/行车时间int max;/载客量int now;/已订票数CLASS;CLASS
11、 recordsN;3.2.2newmessage 函数程序如下:void newmessage()int i=0,j=5,h;char s5;FILE*fp;system(cls);if(fp=fopen(车票管理系统 0.txt,r)!=NULL)printf(车票信息已经存在请选择增加功能!n);printf(任意输入则返回菜单n);scanf(%s,s);-可修编-.i=1;/通过是 1if(i=0)system(cls);printf(请输入要录入班次总数:n);scanf(%d,&class_num);system(cls);for(i=0;iclass_num;i+)system
12、(cls);printf(请输入第%d 个班次信息n:,i+1);h=-1;for(;h!=i;)/先检验错误printf(请输入班次n:);scanf(%s,recordsi.num);for(h=0;hi;h+)if(strcmp(recordsh.num,recordsi.num)=0)printf(输入错误!该班次已经存在!n);break;-可修编-.save();/保存,若有错误,查看此处get(i,j);/部函数,存放到结构体j=5;3.2.33.2.3newmessage函数部还有进行子函数 get 的嵌套处理,它把录入的数据存放到结构体,再通过文件指针函数 save 对输入的
13、数据进行文件的保存。getget 函数程序如下:void get(int i,int j)for(;)printf(请输入发车时间(xx:xx);scanf(%s%s,recordsi.hour,recordsi.min);if(atoi(recordsi.hour)=0)&(atoi(recordsi.min)=0)break;-可修编-.elseprintf(输入错误!n);getch();/从控制台读取一个字符,但不显示在屏幕上printf(请输入起点站:n);scanf(%s,recordsi.from);printf(请输入终点站:n);scanf(%s,recordsi.to);p
14、rintf(请输入行车时间:n);scanf(%f,&recordsi.hours);printf(请输入载客量:n);scanf(%d,&recordsi.max);printf(请输入已售车票:n);scanf(%d,&recordsi.now);save 函数程序如下:void save()FILE*fp3,*fp4;-可修编-.if(fp3=fopen(1 车票管理系统.txt,w)=NULL)if(fp4=fopen(1 车票管理系统 0.txt,w)=NULL)fwrite(&class_num,sizeof(int),1,fp4);/写出一个整形数据 class_num 给 fp
15、2 指向的printf(文件打开错误!n);exit(0);printf(文件打开错误!n);exit(0);车票管理系统 0.txtfwrite(records,sizeof(CLASS),class_num,fp3);/写出class_num这么多个CLASS类型的数据给 fp1fclose(fp3);fclose(fp4);3.33.3 显示所有班次功能显示所有班次功能调用的函数是 displaydisplay 函数,在 displaydisplay 函数里除了调用打印表头表尾函数,最主要的一个函数是 loadload 函数,它的功能是对已经录入数据的文件进行读入数据,是在完成第一步之后
16、的下一个步骤,具体程序如下:3.3.1load3.3.1load 函数程序如下:-可修编-.void load()/查找班次FILE*fp1,*fp2;if(fp1=fopen(1 车票管理系统.txt,r)=NULL)system(cls);printf(文件打开错误!n);getch();exit(0);if(fp2=fopen(1 车票管理系统 0.txt,r)=NULL)system(cls);printf(文件打开错误!n);getch();exit(0);fread(&class_num,sizeof(int),1,fp2);fread(records,sizeof(CLASS),
17、class_num,fp1);fclose(fp1);fclose(fp2);-可修编-.3.3.2display 函数程序如下:void display()printf(n|-|-|-|-|-|-int i;system(cls);load();/会显示所有的班次showtable1();for(i=0;i20;i+)/class_num|-n);if(whether(i)printf(|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.t
18、o,recordsi.hours,recordsi.max,recordsi.now);elseprintf(|%10s|已经发车%10s|%10s|%8.1f|%8d|%8d|,recordsi.num,recordsi.from,recordsi.to,recordsi.hours,r-可修编-.ecordsi.max,recordsi.now);showtable2();printf(n 按任意键继续n);getch();3.43.4 查询班次功能查询班次功能查询班次功能 searchsearch 函数部进行了子函数嵌套,嵌套的函数是 findfind 函数,它的两个形参分别代指“班次查
19、询”和“终点站”查询,从而对结构体进行搜寻,之后返回输出。3.4.13.4.1searchsearch 函数程序如下:void search()int i;char s110=0,s210=0;system(cls);printf(1.按班次查询n);printf(2.按终点查询n);printf(3.退出n);printf(4.请选择(13):n);scanf(%d,&i);load();switch(i)-可修编-.case 1:printf(请输入要查询的班次:n);scanf(%s,s1);find(s1,s2);break;case 2:printf(请输入要查询的终点站:n);sc
20、anf(%s,s2);find(s1,s2);break;case 3:break;default:printf(输入错误!n);break;printf(按任意键继续。n);getch();3.4.23.4.2findfind 函数程序如下:void find(char s1,char s2)/int i,h=0,m;showtable1();if(s20=0)m=1;-可修编-.else m=0;for(i=0;iclass_num;i+)printf(n|-|-|-|-|-|-|-if(strcmp(s1,recordsi.num)=0|strcmp(s2,recordsi.to)=0)
21、-|n);printf(|%10s|%5s:%-4s|%10s|%10s|%10.1f|%10d|%10d|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);showtable2(h);h+=2;if(m=1)break;if(h=0)printf(要查找的班次不存在n);3.53.5 增加班次功能增加班次功能-可修编-.增加函数功能由 addadd 函数实现,嵌套了 getget 函数和 savesave 函数进行新增的数据保
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内