2023年7月6日发(作者:)
湖北工业大学
工程技术学院
课程设计报告书
课程名称: C语言课程设计
班 级: 物联网一班
小组成员: 范立恒、陈根、聂俊豪、麦灿文、黄文康
组 长: 范立恒
指导教师: 楚惟善
二○一三 年 六 月
C语言课程设计实验报告
1 课程题目及要求及要求
题目一:火车售票系统
任务:结合C语言中相关知识,设计出火车售票系统。
1 录入北京西站车次信息;
2 旅客按车次买票;
3 统计某日火车票销售金额。
程序要求:
贯彻结构化的程序设计思想。
用户界面友好,功能明确,操作方便。
用户界面中的菜单至少应包括“车次信息录入”、“旅客买票”、“统计某 日销售 金额”、“退 出”4项。
代码应适当缩进,并给出必要的注释,以增强程序的可读性
为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;
根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后可返回到主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量,重点功能部分均要求给出清晰的程序注释。
程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和
2 程序分设计说明
经过对程序设计题目的分析可知,整个程序的设计实现大致分为八个模块,每一个模块对应一个函数。在这些函数当中,添加车次数据函数,售票函数,查询总额函数的实现严格按照题目的要求,而显示时间函数和显示车次函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1. 添加车次函数 主要实现程序最初运行时车次的录入;
- 2 - C语言课程设计实验报告
2. 旅客买票函数 实现的功能是按照旅客所需车次几所购买车票的数目;
3. 查询车票总额 按照题目的具体要求实现的是总额的查询;
4. 显示函数 实现的是显示目前所有的有效车次信息。
除上面介绍的功能之外,程序还具有显示当地时间,以及退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个车次都包含车次、日期,始发、终点以及所受票数和所需费用,在程序当中,将车次类型定义为结构体类型,添加的车次信息直接写入E盘的文件中,其它函数每次对车次记录的访问,其数据来源都是文件,这样做不但可以保证学生数据的一致性,而且可以对车次数据进行永久保存,保证每次运行程序都可以采用原来的数据。
3程序流程图
1. 程序总体结构图
当1真输入值 n=1?真n=2?真n=3?假假假n=4?假真添加学显示学生信息生信息删除假真n=5?函数
函数
函数
n=6?更新真假add()show()del()函数
排序change()函数
查询退出sort()函数
query()
图1程序总体结构图
2. 具体功能框图
- 3 - C语言课程设计实验报告
(1)添加学生数据函数add
真以追加方式打开E盘文件成功?假假输出文件打开失败以追加方式打开E盘文件成功?真输入添加学生数量n循环变量i=1当i<=n时输入学号、姓名和三门成绩学生信息写入文件
i++关闭文件图2 添加学生数据函数
返回
(2)读取学生数据函数reads
真以读方式打开E盘文件成功?假循环变量i=0当文件未结束时读取学生信息到数组元素stu[i]中i++关闭文件返回学生人数i图3读取学生数据
输出文件打开失败返回
(3)删除学生记录函数del
- 4 - C语言课程设计实验报告
n=reads(stu)循环变量i=0; 输入待删除学生学号number当i stu[i]与number相等?i++假假(4)按总分排序函数sort - 5 - C语言课程设计实验报告 n=reads(stu)循环变量i=0当i j++图5按总分排 4.程序清单 本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加学生数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。 1.录入车次信息函数 录入车次信息,首先由程序创建一个新文件,并将录入的车次信息写入该文件(e:)当中。具体的程序段如下: if((fp=fopen("e:","a"))==NULL) //如果文件已经存在,可以追加车次信息 { if((fp=fopen("e:","w"))==NULL) // 文件不存在时,创建新文件,输入车次信息 { - 6 - C语言课程设计实验报告 printf("文件打开失败!n"); return; } } printf("请输入要车次的数量,按回车键确认:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("n请输入第%d个车的车次,日期,始发,终点,用空格分开,并按回车键确认:n",i); scanf("%d%d%s%s",&,&,,); printf("n请输入第%d个卖出的数量,车次所需的费用,用空格分开,并按回车键确认:n",i); scanf("%d%f",&o,&rice); fprintf(fp,"%d %d %s %s %d %fn",,,,,o,rice); } fclose(fp); } 2.旅客买票函数 对于买票,这部分程序然调用了reads函数,首先应输入旅客所买车次,然用if函数进行比较,如果成立就进行一下售票以及金额运算,最后调用save函数进行更新。 具体程序如下: n=reads(tra); printf("n请输入待查询的车次号,按回车键确认:n"); scanf("%d",&num); for(i=0;i if(num==tra[i].num) break; if(i>=n) { printf("没有找到该车次信息!n"); return; } else printf("n请输入所买票数,按回车键确认:n"); - 7 - C语言课程设计实验报告 scanf("%d",&j); tra[i].maipiao=tra[i].maipiao+j; printf("n购买成功n"); printf("n%12d%11d%11s%11s%11d%11.2fn",tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); save(tra,n); 3. 查询销售总额 对于也使用比较日期的方法实现的,这部分程序仍然调用了reads函数,整个排序过程在文件中实现,然后用for循环进行运算,把查询这一天的总额算出。 具体程序如下: if((fp=fopen("e:","r"))==NULL) { printf("读取错误,不能打开该文件!!n"); return; } else for(i=0;i fscanf(fp," %d %d %s %s %d %fn",&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice); printf("请输入你要查询的日期:n"); scanf("%d",&); for(i=0;i if(==tra[i].date) {sum=sum+tra[i].maipiao*tra[i].tickeprice;j=1; } - 8 - C语言课程设计实验报告 if(j==0) printf("无此日期销售信息,请重新输入"); else printf("今天的总销售额为:%fn",sum); fclose(fp); 5.所遇到的问题 问题一:屏幕停滞问题 由于知识的有限,对于很多功能知识了解大概,通过网上的查询,得知getchar()有停滞界面的功能。 问题二:…………(你们自己补充问题) 6.课程设计总结 范立恒:本次C语言课程设计从暑假就开始收集资料,学习相关知识,一些上课未涉及的内容也做了些了解和掌握,直至开学的第一周陆续完成。 在实验的设计的过程中出现了许多上课、作业中没有遇到过的问题,这就是理论与实践的区别,知道知识却不能很好的运用,说明自己没有真正的掌握C语 言,学习的只是皮毛,使我认识到了实践、动手编译的重要性。 以下本次C语言课程设计的几点小结: (1) 通过上网学习和参阅参考资料陆续解决了系统时间的定义及调用、菜单形式界面的形成、屏幕停滞问题等问题。 (2) 在编译的过程中大大提高了编程的逻辑性,在语言清晰、简洁方面有了较好的提高。在程序查错的过程中也学会了设置断点,分块检查,逐渐提高了判断错误的速度和准确性。 (3) 通过在上课时间与老师的交流了解到了函数模块化的重要性。把程序的总目标分成一个个模块,提高清晰度和可读性。 (4) 本次试验是个自主学习的机会,通过本次试验也增强了自己的信息获取能力和自学能力。 聂俊豪:通过这次学习,使我更加深刻的了解了c语言的用处,也使我更加喜欢这一学科,但也有一些不足之处:在统计金额方面不会使用定义时间的函数,不能把时间函数有效的使用,从而是程序有了一些瑕疵。这也只能希望在以后的学习中我能够慢慢的把这些问题解决掉。 陈根:紧张的近一周数据结构课程设计很快过去了,通过这周的学习使我巩固了以前的- 9 - C语言课程设计实验报告 知识并在此基础上对数据结构的特点和算法有了更深的了解, C语言是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已经成为其他理工专业的热门选修课。在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性,同时这两周的学习也提高了我适应实际,实践编程的能力. 黄文康:首先这一周的学习,使我在巩固了原有的理论知识上,培养了我灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我体会到自身知识和能力在实际中的应用和发挥。其次,激发了我创新意识,开发创造的能力和培养沟通能力。另外,让我进一步熟悉了数据结构的设计应用。每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我数据结构的学习和提高很有益处,并且使我明白了程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、树和二叉树以及图等,然后确定处理过程——算法,可得最后结论。最后,在这次课程设计过程中,我们深刻的认识到了自己在学习方面的不足之处,我们知道我们还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。 麦灿文:一个礼拜的课程设计让我们受益匪浅。要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,不断经历失败,然后又不断的尝试才能获得成功。两个多礼拜中,我们有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。 对于我本人来讲这次课程设计的总体表现,我自己还比较满意,每天做到了按时的出勤,上机遵守机房的管理规定,遵循指导老师的安排并能适时地与老师进行沟通,觉得不足的是不能熟练地掌握c语言的设计技巧使编程的结果缺乏效率,不过我相信这只是我的一个开始,我更应该注重的是这次过程,我坚信我会在以后的学习和训练中不断地弥补自己的不足之处,不断的完善自己的编程能力,因为成功需要一点一点积累。 - 10 - C语言课程设计实验报告 7.源程序(我标注的段落是你们各自负责的模块) 红色:范 紫色:聂 绿色:陈 蓝色:麦 黄色:黄 #include #include #include "time.h" #include"conio.h" #define N 20 struct train {int num; int date ; char from[20]; char ter[20]; int maipiao; float tickeprice; }; void menu(); int reads(struct train tra[N]); void save(struct train tra[N],int n); void add(); void sell(); void show(); void localtimes(); void all(); void main() { int n; while(1) { menu(); printf("n 请输入您要选择的操作序号,按回车键确认:"); scanf("%d",&n); switch(n) { case 1: localtimes();break; case 2: add();break; case 3: show();break; case 4: sell();break; case 5: all();break; case 6: exit(0); default: printf("输入错误,请输入列表中存在的序号!n "); } } - 11 - C语言课程设计实验报告 } void menu() { printf(" ************************* 武昌站火车订票系统************************ "); printf("n 1 显示当前时间"); printf("n 2 车次信息录入"); printf("n 3 显示"); printf("n 4 旅客买票"); printf("n 5 统计某日销售金额"); printf("n 6 退出"); } int reads(struct train tra[N]) // 读取车次中的内容 { FILE *fp; int i=0; if((fp=fopen("e:","r"))==NULL) { printf("文件打开失败!n"); return 0; } else { for(i=0;!feof(fp);i++) fscanf(fp,"%d %d %s %s %d %fn",&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice); } fclose(fp); return i; } void save(struct train tra[N],int n) // 车次信息改变后更新文件 { FILE *fp; int i=0; if((fp=fopen("e:","w"))==NULL) { printf("文件打开失败!n"); return ; } else { for(i=0;i - 12 - C语言课程设计实验报告 fprintf(fp,"%d %d %s %s %d %fn",tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); } fclose(fp); } void add()/*录入车次信息*/ { FILE *fp; int n,i; struct train tra; if((fp=fopen("e:","a"))==NULL) //如果文件已经存在,可以追加车次信息 { if((fp=fopen("e:","w"))==NULL) // 文件不存在时,创建新文件,输入车次信息 { printf("文件打开失败!n"); return; } } printf("请输入要车次的数量,按回车键确认:"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("n请输入第%d个车的车次,日期,始发,终点,用空格分开,并按回车键确认:n",i); scanf("%d%d%s%s",&,&,,); printf("n请输入第%d个卖出的数量,车次所需的费用,用空格分开,并按回车键确认:n",i); scanf("%d%f",&o,&rice); fprintf(fp,"%d %d %s %s %d %fn",,,,,o,rice); } fclose(fp); } void show() // 车次信息显示函数 { struct train tra[N]; int i,n; n=reads(tra); printf("*********************所有的车次信息如下**********************nn"); printf(" 序号 车次 日期 始发 终点 卖出 票价 n"); printf("*************************************************************n"); for(i=0;i printf("n%3d%12d%11d%11s%11s%11d%11.2fn",i+1,tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); - 13 - C语言课程设计实验报告 getch(); } void sell() // 按顾客要求对车次信息卖票 { struct train tra[N]; int num,n,j; int i; n=reads(tra); printf("n请输入待查询的车次号,按回车键确认:n"); scanf("%d",&num); for(i=0;i if(num==tra[i].num) break; if(i>=n) { printf("没有找到该车次信息!n"); return; } else printf("n请输入所买票数,按回车键确认:n"); scanf("%d",&j); tra[i].maipiao=tra[i].maipiao+j; printf("n购买成功n"); printf("n%12d%11d%11s%11s%11d%11.2fn",tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); save(tra,n); } void all()//统计销售金额 { struct train tra[N],temp; float sum=0; FILE *fp; int i,j=0; if((fp=fopen("e:","r"))==NULL) { printf("读取错误,不能打开该文件!!n"); return; } else for(i=0;i fscanf(fp," %d %d %s %s %d %fn",&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice); printf("请输入你要查询的日期:n"); - 14 - C语言课程设计实验报告 scanf("%d",&); for(i=0;i if(==tra[i].date) {sum=sum+tra[i].maipiao*tra[i].tickeprice;j=1; } if(j==0) printf("无此日期销售信息,请重新输入"); else printf("今天的总销售额为:%fn",sum); fclose(fp); } void localtimes() { struct tm *p; time_t t; t=time(NULL); p=localtime(&t); printf(asctime(p)); } (备注:C语言课程设计大纲 /*提取当地时间*/ 一、课程设计报告内容: (一)、课程设计目的 (二)、课程设计内容 1、 课程设计的题目及简介 2、 设计说明 3、 程序流程图 4、 程序清单 (三)、课程设计总结 (四) 、设计报告要求 1、语言简练,条理清楚,图表规范 2、程序设计组成框图、流程图等清楚、正确3、有模块功能说明 - 15 - C语言课程设计实验报告 4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施 5、源程序清单和执行结果(光盘):清单中应有足够的注释 二、具体安排: 学生以2—6人为一组,共同完成一个题目,选出一个组长负责分工和管理,共同完成总体框架设计,然后每个学生分工独立完成各自的功能模块的编程,最后要能集成并测试通过。 每组要以光盘形式上交C源文件和可执行文件(放在组长文件袋中,其他成员在报告本中写明源程序在哪个同学的文件袋中) (注:课程设计报告统一使用学院规定的课程设计报告本和文件袋) 三、备注 每个人可自行附加模块设计心得 及所发现的问题及解决方法 《C语言课程设计报告 火车售票查询系统(完)》的word文档中1.、2、3、4、7是统一一样的 你们需要另外说明 哪个版块是你设计的 OK ) - 16 -
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688603763a154332.html
评论列表(0条)