C语言课程设计《高速公路联网收费系统》代码
- 格式:doc
- 大小:88.00 KB
- 文档页数:18
《数据库系统概论》综合设计性实验报告题目:高速公路收费系统专业:班级:学号:姓名:2009年6月目录第一部分需求分析 (3)1.调查高速公路收费系统需求 (3)1.1用户对系统的要求 (3)1.1.1 职工管理员: (3)1.1.2完整性要求: (4)2. 系统功能的设计和划分 (4)2.1 职工管理部分 (4)2.2管理员管理部分 (4)3. 数据流图 (4)4. 数据字典 (5)4.1 数据项 (5)4.2 数据结构 (7)第二部分概要设计 (8)1. 根据需求分析说明书设计ER图 (8)1.1 设计完成的ER图为: (8)1.2 分E-R图 (9)1.2.1 车子E-R图: (9)1.2.2 收费站E-R图: (9)1.2.3 收费功能信息E-R图: (10)1.2.4 职工E-R图: (10)1.2.5 收费站与职工E-R图: (11)1.2.6 职工管理E-R图: (12)第三部分逻辑结构设计 (13)1. 将E-R图转换为关系模式 (13)1.1 E-R图: (13)1.3 关系模式 (14)第四部分物理结构设计 (15)第一部分需求分析1.调查高速公路收费系统需求在现代运输的铁路、公路、水运、航运和管理五种方式中,目前我国公路运输约占全国客、货运输总量的一半以上。
近年来,我国高速公路的发展很快,高速公路总里程跃居世界第二位,从而大大改善了公路路网结构,缓解了交通旅游业的发展,推动沿线产业结构调整,加快了中小城镇的发。
随着高速公路的建设,收费站数目的不断增加,对现有的收费管理和收费人员提出了新的要求:提高收费效率、降低收费差错,提高收费站管理服务水平。
而以手工收费、手工做帐为主的传统收费方式已经不能满足当前收费的实际需要。
这种传统收费方式的效率低、差错多,票证人员一直忙于做各种台帐、报表,管理人员无法及时了解一线人员的收费情况。
当少数“行为不规人员”放“人情车”“卖回笼票”时无法监督,同时社会上一些不法车主冲逃票时有发生,但是因没有证据无法按章惩办。
题目:高速公路计费系统设计功能:在某高速公路出口收费处,对三种类型的车辆计费,大型车每公里0。
5元,中型车每公里0。
4元,小型车每公里0。
3元,来车验条,乘公里数即得该收的款项。
在交班时要统计出总数。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2、完成最低要求:建立一个只有三个入口的计费系统,并能进行统计计算,打印出报表;3、进一步要求:完成任意多个入口的通用系统。
要求:1、用C语言实现程序设计;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。
总体设计1.本程序涉及的知识点变量的定义,输入输出函数、对文件的输入和输出和保存、for、switch、if等语句的使用,定义和使用结构体数组等等。
进入系统首页为主菜单,主菜单下分4个模块:模块1:录入车辆信息进入模块1后按提示要求录入车牌号码、时间、型号大小(用a、b、c分别表示大型、中型、小型)和入站口(1、2、3、4……表示不同入口站名称并分别对应不同公里路程数)。
模块2:查询车辆信息进入模块2后按提示要求录入所要查询的车牌号码,即可查询其进站入口,时间,及所需费用等信息模块3:车辆统计报表进入模块3后即可显示操作员之前录入的所有车辆的各个信息,并统计出车辆总数及应收总费用。
模块4:保存关闭系统进入模块4后系统自动保存所有车辆信息,并按提示可推出本系统。
流程图主函数:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define N 100#define M 4 //入口数量,可设置多个路口char a[]={20,30,40,50}; //路口1 :20公里,路口2 :30公里,路口3 :40公里, 路口4 :50公里char str[][3]={"k1","k2","k3","k4"}; //入口名称,分别对应上面数组的公里数FILE*fp;int count;void input();void cheak();void tongji();void read();void menu();void writefile();struct vehicle //车辆信息{char num[15];char time[6];char size[2];char road[3];float cost;}ve[N];void main(){read();while(1){menu();}}void read() //导入文件{char filename[20];if((fp=fopen("tql.txt","r"))==NULL){printf("无此文件,新建一个文件\n");printf("输入文件名,回车键结束:");scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("新建失败");exit(0);}else{printf("新建文件成功,按任意键返回主菜单");getchar();return;}}fseek(fp,0,2); // 文件内部指针退回到离文件结尾0位置,即指针指向文件内部末尾处if(ftell(fp)>0) // 使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
#include <> .\n");goto a; .\n");goto a;}break;case '3': printf("请输入年龄: ");scanf("%d",&(p->age));break;case '4': printf("请输入电话: ");scanf("%s",p->tel); break;default : break;}printf("是否继续修改Y/N"); f元!",cost*; f元!\n",money);printf("删除成功,按任意键继续!"); //显示退回的余额getch();menu(); //调用菜单函数} /*统计函数*/mem *sort_m(){ //按缴费总额排序mem *q,*tail,*p=(mem*)malloc(sizeof(mem));p->next=head;head=p;tail=NULL; //定义 tailwhile(tail!=head->next){q=p->next;while(q->next!=tail){ //判断 q是否为空if(p->next->money>q->next->money){p->next=q->next; //比较大小,排序q->next=q->next->next;p->next->next=q;}p=p->next;q=p->next;}tail=q;}head=head->next;free(p);return head; //返回值}mem* sort_c(){ //按消费金额排序mem *q,*tail,*p=(mem*)malloc(sizeof(mem));head=p;tail=NULL; //定义 tail while(tail!=head->next){p=head;q=p->next;while(q->next!=tail){if(p->next->cost>q->next->cost){ //比较大小,排序p->next=q->next;q->next=q->next->next;p->next->next=q;}p=p->next;q=p->next;}tail=q;}head=head->next;free(p);return head; //返回值}float summ(mem *p){ //计算缴费总额float summ=0;p=head;while(p){ //循环,实现求总额summ+=p->money;p=p->next;}return summ; //返回总额}float sumc(mem *p){ //计算消费总额float sumc=0;p=head;while(p){ //循环,实现求总额sumc+=p->cost;p=p->next;}return sumc; //返回总额}void statistics(){ //统计会员信息函数int f=0;mem *p;load(p);system("cls");printf("\t\t=======================================\n""\t\t|\n""\t\t|1 按缴费总额排序\n""\t\t|2 按消费总额排序\n""\t\t|3 返回菜单\n""\t\t|\n""\t\t=======================================\n") ;printf("请选择功能:");scanf("%d",&f);switch(f){ //用switch语句选择功能case 1: p=sort_m(p); //调用按缴费总额排序display_statistics(p,summ(p),sumc(p)); //调用函数getch();menu();break;case 2: p=sort_c(p); //调用按消费总额排序display_statistics(p,summ(p),sumc(p)); //调用函数getch();menu();break;default : menu();break;}}/*退出系统操作*/void clear(mem *p){ //释放链表空间if(p==NULL){return;}if(p->next ==NULL){free(p);}else{clear(p->next);free(p);p = NULL;}}void quit(){ //退出函数clear(head);exit(0);}/*菜单信息*/void menu_tile(char *title){ //菜单表头printf("\t\t=======================================\n");printf("\t\t| %s\n", title);printf("\t\t---------------------------------------\n");}void (* menu_main_func[])()= /*函数指针数组menu_main_func[] 存储的是主菜单项中7个功能函数的地址,分别对应1-7菜单项。
收费管理系统c语言课程设计一、课程目标知识目标:1. 理解C语言在收费管理系统中的应用,掌握基本的数据结构(如数组、结构体)和文件操作相关知识。
2. 学会使用C语言编写程序,实现收费管理系统的基本功能,如用户注册、登录、费用查询、费用缴纳等。
3. 了解收费管理系统的设计思路和模块划分,掌握模块化编程的方法。
技能目标:1. 培养学生运用C语言解决实际问题的能力,提高编程实践技能。
2. 学会使用调试工具,能够自主调试程序,找出并修复错误。
3. 提高团队协作能力,学会与他人共同分析问题、设计解决方案。
情感态度价值观目标:1. 培养学生积极探究、勇于实践的精神,增强学习编程的兴趣。
2. 培养良好的编程习惯,注重代码规范和程序优化。
3. 增强学生的网络安全意识,认识到收费管理系统在实际应用中的重要性。
课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基础知识的基础上,运用所学知识进行实际编程。
学生特点:学生已经具备一定的C语言基础,但实际编程经验不足,对收费管理系统这一实际应用场景较为陌生。
教学要求:注重理论与实践相结合,通过讲解、示范、练习、讨论等多种教学方式,引导学生掌握收费管理系统的设计与实现方法。
同时,关注学生的个体差异,提供个性化指导,确保每个学生都能达到课程目标。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 数据结构与文件操作:回顾C语言中的数组、结构体等基本数据结构,介绍文件操作相关知识,为编写收费管理系统打下基础。
- 数组的使用与操作- 结构体的定义与使用- 文件读写操作2. 收费管理系统功能模块设计:- 用户注册模块:实现用户注册功能,包括用户名、密码等信息的存储- 用户登录模块:实现用户登录功能,验证用户名和密码的正确性- 费用查询模块:实现用户费用查询功能,展示用户消费记录- 费用缴纳模块:实现用户费用缴纳功能,包括充值、支付等操作3. 编程实践与模块化设计:- 编程规范与代码优化- 模块化编程方法与实践- 调试工具的使用与程序调试技巧4. 团队协作与项目实践:- 分析与讨论:分组讨论,共同分析收费管理系统的需求与设计- 项目实践:小组成员分工合作,共同完成收费管理系统的设计与实现5. 教学进度安排:- 第一周:数据结构与文件操作知识回顾- 第二周:收费管理系统功能模块设计- 第三周:编程实践与模块化设计- 第四周:团队协作与项目实践,完成收费管理系统设计与实现教学内容与教材关联性:本课程教学内容与教材相关章节紧密相关,如数据结构与文件操作、模块化编程、调试技巧等,确保学生能够将所学知识应用于实际项目中。
C 语言项目描述本项目主要完成对局用程控交换机的二进制磁带卸载数据,按照一定的格式要求,转化成标准ASCII 码格式并以文本形式输出,然后再经过内存排序后,提供给后续计费模块进行批价处理。
1. 码制转换局用程控交换机为了减少数据存储量,通常数据以BCD 码的形式进行存储。
BCD (Binary-Coded Decimal ,二进码十进数,简称BCD)用4位二进制数来表示1位十进制数中的0-9这10个数码,简称BCD 码。
但为了方便后续工作的进行,通常需要将其转换成我们常见的ASCII 码。
我们所使用的BCD 数据被存放在后缀名为bs1、bs2、bs3文件中,具体文件格式见附录一。
转换后生成的文件请保存在同名ASC 文件中。
BCD 文件在 Data\Raw_Data 文件夹中转换后的ASCII 文件请放在 Data\ASC_Data 文件夹中 2. 数据校验码制转换完成后,我们要对转换后的数据进行校验,其目的是为局用程控交换机数据预处理系统用户界面码制转换数据校验数据排序日志处理了检查数据的合法性,删除非法数据。
如出现以下数据,则应该删除:a. 主叫号码少于7位b. 被叫号码少于3位c. 结束时间小于开始时间d. 文件结尾的残缺数据3. 排序局用程控交换机中的数据是以时间为序存储的,但是后续计费模块中的数据要求以主叫号码为序才能进行处理。
因此我们需要对转换后的ASCII数据进行排序,排序第一关键字为主叫号码,第二关键字为日期,第三关键字为呼出时间。
请将排序后的文件保存在同名STD 文件中。
排序后的文件请放在Data\STD_Data 文件夹中4. 日志处理日志一般是指存储软件程序、服务或操作系统产生的消息记录的文件。
本功能主要对用户进行的所有操作进行记录并显示。
每条日志需要有操作类型、结果、开始时间、结束时间等内容。
生成的日志文件请存放在 Data\LOG 文件夹中5.界面:用户界面应完成多级菜单显示及选择,此外还应加入对转换后和排序后的文件的显示功能。
c 公路收费问题课程设计一、课程目标知识目标:1. 让学生理解公路收费的基本概念,掌握收费标准的计算方法。
2. 培养学生运用数学知识解决实际问题的能力,学会运用公式进行收费计算。
3. 了解我国公路收费政策及其实施情况,认识收费公路对社会和经济的影响。
技能目标:1. 培养学生运用数学公式和计算方法解决公路收费问题的能力。
2. 提高学生分析问题、解决问题的能力,能够针对不同情况制定合理的收费标准。
3. 培养学生的数据分析和逻辑思维能力,学会整理和表达自己的观点。
情感态度价值观目标:1. 培养学生对社会现象的关注和思考,提高社会责任感。
2. 增强学生对数学学科的实际应用价值的认识,激发学习兴趣。
3. 培养学生合作、探究的学习态度,尊重他人观点,形成良好的沟通和团队协作能力。
本课程针对初中年级学生,结合数学学科特点,注重培养学生的实际应用能力。
在教学过程中,关注学生个体差异,充分调动学生的积极性和主动性,使学生在掌握知识的同时,提高自己的综合素质。
课程目标具体、可衡量,为后续教学设计和评估提供明确的方向。
二、教学内容1. 公路收费的基本概念:介绍收费公路的定义、分类及其作用。
- 教材章节:第二章第三节“生活中的数学——收费问题”2. 收费标准的计算方法:讲解公式推导,举例说明不同类型的收费标准。
- 教材章节:第二章第四节“收费标准的计算方法”3. 我国公路收费政策及其实施情况:分析政策背景、现状及发展趋势。
- 教材章节:第二章第五节“我国的公路收费制度”4. 收费公路对社会和经济的影响:探讨收费公路对地区经济、居民出行的影响。
- 教材章节:第二章第六节“收费公路的影响”5. 实际案例分析:分析具体案例,使学生理解公路收费问题在实际生活中的应用。
- 教材章节:第二章实践活动“公路收费问题案例分析”教学内容按照科学性和系统性进行组织,结合课程目标,制定以下教学大纲:第一课时:公路收费的基本概念第二课时:收费标准的计算方法第三课时:我国公路收费政策及其实施情况第四课时:收费公路对社会和经济的影响第五课时:实际案例分析在教学过程中,教师应关注学生掌握知识的情况,适时调整教学进度,确保学生能够扎实掌握教学内容。
c语言课程设计缴费系统一、教学目标本课程的目标是让学生掌握C语言的基本语法,能够运用C语言设计一个简单的缴费系统。
通过本课程的学习,学生应能够理解C语言的基本数据类型、运算符、控制结构、函数等概念,并能够运用这些知识设计、编写并调试C语言程序。
同时,通过课程的学习,培养学生的逻辑思维能力、问题解决能力和团队合作能力。
二、教学内容教学内容主要包括C语言的基本语法和编程技巧。
具体包括以下内容:1.C语言的基本数据类型和运算符2.控制结构:条件语句、循环语句3.函数:定义、调用、返回值4.数组和字符串5.结构体和文件操作6.编程技巧:代码规范、调试方法、算法设计三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:用于讲解C语言的基本概念和语法规则。
2.案例分析法:通过分析实际案例,让学生掌握编程技巧和解决问题的方法。
3.实验法:通过上机实验,让学生动手实践,加深对C语言的理解和运用能力。
四、教学资源教学资源包括教材、实验设备和相关多媒体资料。
1.教材:《C语言程序设计》2.实验设备:计算机、网络设备3.多媒体资料:教学PPT、视频教程、在线编程练习平台五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。
1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和理解能力。
2.作业:布置课后编程作业,评估学生的编程能力和解决问题的能力。
3.考试:定期进行理论考试和上机考试,评估学生对C语言知识的掌握程度。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节顺序进行教学,确保每个章节都有充分的时间进行讲解和实践。
2.教学时间:每周安排2个课时,其中1个课时用于讲授,1个课时用于实验和实践。
3.教学地点:教室和计算机实验室交替使用,以便学生能够及时进行实践操作。
七、差异化教学根据学生的不同学习风格、兴趣和能力水平,本课程将采取以下差异化教学措施:1.学习风格:提供多种学习资源,如视频教程、PPT讲解等,以满足不同学习风格的学生的需求。
/* 高速公路收费程序*/#include "stdio.h"#include "conio.h"#define n 6 /* n:高速公路网上入口(出口)数*/#define m 5 /* m:m种车型*/#define e 10 /* e:边数*/#define MAX 9999int g[n][n];/* 图的邻接矩阵,g[i][j]:两个相邻入口之间的路径长度*/int c[m+1]={0,1,2,5,6,8}; /* 第i类车的收费标准是每公里c[i]元*/main(){int i,j,k,h;/* 建立邻接矩阵*/for(i=0;i<=n-1;i++)for (j=0;j<=n-1;j++)g[i][j]=MAX;for(i=0;i<=n-1;i++)g[i][i]=0;for(k=1;k<=e;k++){ printf("\n请输入第%d条边(入口到出口)的长度,格式入口编号,出口编号,里程数",k);scanf("%d,%d,%d",&i,&j,&h);while(i<0||i>n-1||j<0||j>n-1||h<=0){ printf("\n 输入错误,编号超出范围或里程数为负,请重新输入!\n" );scanf("%d,%d,%d",&i,&j,&h);}g[i][j]=g[j][i]=h;}/* 输出邻接矩阵*/for (i=0 ;i<=n-1 ;i++){ for(j=0;j<=n-1; j++)printf("5%d",g[i][j]);printf("\n");}/* 依据floyd算法,计算每对顶点间的最短路径*/for ( k=0; k<=n-1 ;k++)for ( i=0 ;i<=n-1 ;i++)for(j=0;j<=n-1; j++)if (g[i][k]+g[k][j]<g[i][j])g[i][j]=g[i][k]+g[k][j];while (1){/* 收费*/printf("\n请输入:入口编号,出口编号,车型编号[-1,-1,-1:表示终止]");scanf("%d,%d,%d",&i,&j,&h);if (i==-1) break;printf("\n 收费:%d 元\n",g[i][j]*c[h]);}}。