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]);}}。
c 公路收费课程设计一、课程目标知识目标:1. 让学生理解并掌握公路收费的基本概念、原则及计算方法。
2. 使学生了解我国公路收费政策及管理规定,认识到公路收费的必要性和合理性。
3. 引导学生运用数学知识,进行公路收费相关计算,提高解决问题的能力。
技能目标:1. 培养学生运用所学知识,解决实际生活中公路收费问题的能力。
2. 提高学生通过小组合作、讨论交流等方式,分析、解决问题的能力。
3. 培养学生运用信息技术手段,搜集、整理和分析公路收费相关数据的能力。
情感态度价值观目标:1. 培养学生关注社会现象,认识到公路收费与国家经济发展、民生等方面的关系。
2. 增强学生的法制观念,认识到遵守交通法规的重要性,培养良好的交通行为习惯。
3. 培养学生的团队协作精神,学会尊重他人,善于倾听和表达自己的观点。
本课程针对初中年级学生设计,结合学生年龄特点,注重理论与实践相结合,以实际生活中的公路收费现象为切入点,引导学生学习相关学科知识。
课程目标具体、可衡量,旨在提高学生的知识水平、技能和情感态度价值观,为后续教学设计和评估提供明确的方向。
二、教学内容1. 公路收费基础知识:包括公路收费的定义、原则、类型及计算方法。
结合教材相关章节,使学生了解我国公路收费的基本情况。
2. 公路收费政策与管理:介绍我国公路收费政策、法规及管理规定,让学生认识到公路收费的合法性和必要性。
3. 数学计算与应用:运用数学知识,进行公路收费相关计算,如收费标准、收费金额等。
结合教材中相关例题和练习题,提高学生解决问题的能力。
4. 实际案例分析:分析实际生活中的公路收费案例,让学生了解公路收费在现实生活中的应用,提高分析问题的能力。
5. 信息技术应用:培养学生运用信息技术手段,搜集、整理和分析公路收费相关数据的能力,提高信息素养。
教学内容按照以下进度安排:第一课时:公路收费基础知识学习;第二课时:公路收费政策与管理介绍;第三课时:数学计算与应用;第四课时:实际案例分析;第五课时:信息技术应用。
系统是基于c语言写的小程序,以应付毕业项目或期末考试用。
由于用到fopen读写文件操作,编译前必须在当前文件下建立用户信息.txt 和充值卡.txt 两个文件,否则会报错。
效果图#include <stdio.h>#include <windows.h>#include <string.h>#include <stdlib.h>#include <time.h>//定义链表typedef struct{char name[20];char mima[20];int state;int jine;}user;typedef struct lnod{user data;struct lnod *next;}lnod, *linklist;//充值卡定义链表typedef struct{char name[30];int jine;}kami;typedef struct kk{kami data;struct kk *next;}kk, *kamil;//创建链表void createlist_l(linklist *l){*l = (linklist)malloc(sizeof(lnod));(*l)->next = NULL;}//插入用户信息(尾插法)int listinset_l(linklist *l,user data) {linklist p = *l,q;if (NULL==p)return -1;while (NULL!=p){}p = (linklist)malloc(sizeof(lnod));p->data = data;p->next = q->next;q->next = p;return 0;}//载入文件到链表void filelist_l(linklist *l){int i;FILE *fp1;user user0;fp1 = fopen("用户信息.txt","rb");for (i = 0;i<50;i++){if (1!=fread(&user0,sizeof(user),1,fp1)){break;}listinset_l(l,user0);}fclose(fp1);}//查找制定用户是否存在int locateelem_l(linklist l,char name[]){linklist p;p = l->next;while (p!=NULL){if (!(strcmp(p->,name))){break;}p = p->next;}if (p == NULL){return -1;}elsereturn 0;}//查找指定用户和密码int locateelem_l2(linklist l,char name[],char mm[]) {p = l->next;while (p!=NULL){a = strcmp(p->,name);b = strcmp(p->data.mima,mm);if (a==0&&b==0){//p->data.state = 1;break;}p = p->next;}if (p == NULL){return -1;}elsereturn 0;}//登陆后state = 1;void gaistate_l(linklist *l,char name[]) {linklist p;int b;p = (*l)->next;while (p!=NULL){b = strcmp(p->,name);if (b==0){p->data.state=1;break;}else{p = p->next;}}}//下线state = 0void xiaxian_l(linklist *l,char name[]) {linklist p;int b;p = (*l)->next;while (p!=NULL)if (b==0){p->data.state=0;break;}else{p = p->next;}}}//修改金额void gaijine_l(linklist *l,char name[],int j){linklist p;int b;p = (*l)->next;while (p!=NULL){b = strcmp(p->,name);if (b==0){p->data.jine=p->data.jine+j;printf("您当前余额为%d元",p->data.jine);break;}else{p = p->next;}}}//修改密码void gaimm_l(linklist *l,char name[],char gmm[]){linklist p;int b;p = (*l)->next;while (p!=NULL){b = strcmp(p->,name);if (b==0){strcpy(p->data.mima,gmm);break;{p = p->next;}}}//下线扣费void koufei_l(linklist *l,char name[],int j){linklist p;int b;p = (*l)->next;while (p!=NULL){b = strcmp(p->,name);if (b==0){p->data.jine = p->data.jine-j;break;}else{p = p->next;}}}//写文件void userfile(user user0){FILE *fp0;if((fp0=fopen("用户信息.txt","ab"))==NULL){printf("cannot open file\n");return;}if(fwrite(&user0,sizeof(user),1,fp0)!=1)printf("file write error\n");fclose(fp0);}//更新文件void update_file(linklist l){FILE *fp;linklist p;p = l->next;if (( fp= fopen("用户信息.txt","wb"))==NULL)return;}while (p!=NULL){if (p->data.state==1){p->data.state = 0;userfile(p->data);p->data.state = 1;}else{userfile(p->data);}p = p->next;}}//查询所有用户void chaxun_l(linklist l){linklist p;p = l->next;while (p != NULL){printf("用户名:%-10s密码:%-10s余额%-10d是否在线(1/0):%d \n",p->,p->data.mima,p->data.jine,p->data.state);p = p->next;}}//充值卡创建链表void createlist_k(kamil *l){*l = (kamil)malloc(sizeof(kk));(*l)->next = NULL;}//充值卡查找制定用户是否存在int locateelem_k(kamil kl,char name[]){kamil p;p = kl->next;while (p!=NULL){if (!(strcmp(p->,name))){break;}if (p == NULL){return -1;}elsereturn 0;}//充值卡插入用户信息(尾插法)int listinset_k(kamil *l,kami data){kamil p = *l,q;if (NULL==p)return -1;while (NULL!=p){q = p;p = p->next;}p = (kamil)malloc(sizeof(kk));p->data = data;p->next = q->next;q->next = p;return 0;}//充值卡载入文件到链表void filelist_k(kamil *l){int i;FILE *fp1;kami kami0;fp1 = fopen("充值卡.txt","rb");for (i = 0;i<50;i++){if (1!=fread(&kami0,sizeof(kami),1,fp1)){break;}listinset_k(l,kami0);}fclose(fp1);}//充值卡修改金额void gaijine_k(kamil *l,char name[],int j){kamil p;while (p!=NULL){b = strcmp(p->,name);if (b==0){p->data.jine=p->data.jine+j;printf("您当前余额为%d元",p->data.jine);break;}else{p = p->next;}}}//充值卡写文件void kamifile(kami kami0){FILE *fp0;if((fp0=fopen("充值卡.txt","ab"))==NULL){printf("cannot open file\n");return;}if(fwrite(&kami0,sizeof(kami),1,fp0)!=1)printf("file write error\n");fclose(fp0);}//充值卡更新文件void update_file_k(kamil l){FILE *fp;kamil p;p = l->next;if (( fp= fopen("充值卡.txt","wb"))==NULL){printf("无法打开文件\n");return;}while (p!=NULL){kamifile(p->data);p = p->next;}void delete_k(kamil *L,char name[]) {kamil p,q;int i;p=(*L)->next;q=*L;while(p!=NULL){i = strcmp(p->,name);if(i == 0){q->next=p->next;free(p);break;}else{q=p;p=p->next;}}}//主函数void main(){linklist l;int b;//选择点int z;//判断z是否等于0int j;//金额char yhm[20];char mm[20],mm1[20];char gmm[20],gmm1[20];//改密码user n;clock_t start,finish;float jf;char nk[15],nk0[15];//之下是卡密int i;// int kjine;kami lsk;kamil kl;char gly[20] = "admin";//管理员密码srand((unsigned)time(NULL));createlist_l(&l);filelist_l(&l);createlist_k(&kl);filelist_k(&kl);while (1){system("color f9");system("cls");printf(" ╭═══════欢═迎═光═临══════╮\n");printf(" ╰╮╭----------------╮╭╯\n");printf(" ▲╯║~~1、注册~~║╰▲\n");printf(" ◇★║~~2、用户登陆~~║★◇\n");printf(" ◇★║~~3、管理员登陆~~║★◇\n");printf(" ★◇║~~4、退出~~║◇★\n");printf(" ▼╮║~~本网吧壕专享一秒钟一元~~║╭▼\n");printf(" ╭╯╰----------------╯╰╮\n");printf(" ╰═══════祝═你═快═乐══════╯\n");scanf("%d",&b);switch(b){case 1:{while (1)//注册界面{system("cls");printf("请输入账号:\n");scanf("%s",yhm);z = locateelem_l(l,yhm);if (z == 0){printf("该用户名已存在,任意键返回");fflush(stdin);getchar();break;}else{printf("请输入密码:\n");scanf("%s",mm);printf("请再次输入密码:\n");scanf("%s",mm1);if (!(strcmp(mm,mm1))){printf("注册成功,任意键返回\n");strcpy( , yhm);strcpy(n.mima , mm);n.jine = 0;listinset_l(&l,n);update_file(l);fflush(stdin);getchar();break;}else{printf("两次密码输入不一致,请重新注册\n");Sleep(1000);continue;}}}break;}case 2://用户登陆{system("cls");while(1){printf("请输入用户名\n");scanf("%s",yhm);z = locateelem_l(l,yhm);if (z!=0){printf("用户名不存在,即将返回\n");Sleep(1000);break;}else{printf("请输入密码:\n");scanf("%s",mm);z = locateelem_l2(l,yhm,mm);if (z==0){gaistate_l(&l,yhm);start = clock();while(1){system("cls");printf(" ╭═══════祝═你═快═乐══════╮\n");printf(" ╰╮╭----------------╮╭╯\n");printf(" ▲╯║~~1、查余额~║╰▲\n");printf(" ◇★║~~2、改密码~║★◇\n");printf(" ◇★║~~3、充值卡充值~║★◇\n");printf(" ★◇║~~4、小游戏~║◇★\n");printf(" ▼╮║~~5、下线~║╭▼\n");printf(" ╭╯╰----------------╯╰╮\n");printf(" ╰═══════祝═你═快═乐══════╯\n");scanf("%d",&b);if (b == 1){system("cls");gaijine_l(&l,yhm,0);printf("\n任意键返回\n");fflush(stdin);getchar();continue;}if (b == 2){system("cls");printf("请输入新密码\n");scanf("%s",gmm);printf("请再次输入密码\n");scanf("%s",gmm1);if (!(strcmp(gmm,gmm1))){printf("修改密码成功,任意键后返回\n");gaimm_l(&l,yhm,gmm);update_file(l);fflush(stdin);getchar();break;}else{printf("两次密码输入不一致,请重新修改\n");Sleep(1000);continue;}}if (b == 5){printf("下线成功,任意键返回主界面:\n");xiaxian_l(&l,yhm);finish = clock();jf = (int)((finish - start)/1000);koufei_l(&l,yhm,jf);update_file(l);fflush(stdin);getchar();break;}if (b == 3){system("cls");printf("请输入充值卡\n");scanf("%s",nk0);b = locateelem_k(kl,nk0);if (b!=0){printf("您输入的充值卡不存在,请重新输入\n");Sleep(1000);continue;}if (b == 0){printf("100元已成功充值进您的账号,任意键返回\n");gaijine_l(&l,yhm,100);update_file(l);delete_k(&kl,nk0);update_file_k(kl);fflush(stdin);getchar();continue;}}if (b == 4){while (1){system("cls");iy = 10;jy = 0;printf("请在两秒钟内输入以下简单等式,答对过关,答错结束,任意键开始\n");fflush(stdin);getchar();while(1){system("cls");ay = rand()%iy;by = rand()%iy;iy=iy+100;printf("%d + %d = ",ay,by);fflush(stdin);Sleep(2000);ky = kbhit();scanf("%d",&zhi);fflush(stdin);if (ky == 0){printf("时间到啦\n");if(jy<=5){printf("你只通过了%d关,只击败了5%%的人,弱爆了。
编写高速公路收费金额的程序
本程序是一个高速公路收费金额计算器,可根据车辆类型和行驶距离自动计算收费金额。
首先根据车辆类型分为小型车、中型车和大型车三种,每种车型的收费金额不同。
小型车收费标准:起步价10元,每公里0.5元。
中型车收费标准:起步价20元,每公里1元。
大型车收费标准:起步价30元,每公里1.5元。
其次根据行驶的距离计算收费金额,假设行驶距离为X公里,则小型车的收费金额为10+0.5X元,中型车的收费金额为20+1X元,大型车的收费金额为30+1.5X元。
最后在程序中设置输入功能,用户输入车辆类型和行驶距离后,程序自动计算收费金额并输出。
通过本程序,可以方便快捷地计算车辆在高速公路行驶所需支付的费用,提高行车的便利性和费用的准确性。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream.h>#include<conio.h>#include<fstream.h>class Car //定义一个类{private:char cheXing[20],cheHao[20],people[30],time[30];//定义成员变量int ruKou,gongLi;double feiYong;public:void sum()//计算费用{int a,b,c;switch (ruKou){system("cls"); //case 1:if(a) feiYong=gongLi*0.5;else if(b) feiYong=gongLi*0.4;else if(c) feiYong=gongLi*0.3;cout<<"所收费用为:"<<feiYong<<"元"<<endl;break;case 2:if(a) feiYong=gongLi*0.5;else if(b) feiYong=gongLi*0.4;else if(c) feiYong=gongLi*0.3;cout<<"所收费用为:"<<feiYong<<"元"<<endl;break;case 3:if(a) feiYong=gongLi*0.5;else if(b) feiYong=gongLi*0.4;else if(c) feiYong=gongLi*0.3;cout<<"所收费用为:"<<feiYong<<"元"<<endl;break;}}void write()//记录信息{int a,b,c;cout<<"请输入路口(1、2、3):"<<endl;cin>>ruKou;cout<<"请输入车型(输入a,b,c. 'a-代表大型车,b-代表中型车,c-代表小型车'):"<<endl;cin>>cheXing;cout<<"请输入车牌号:"<<endl;cin>>cheHao;cout<<"请输入路程(单位为公里):"<<endl;cin>>gongLi;cout<<"请输入收费人:"<<endl;cin>>people;cout<<"请输入日期(格式:****-**-** . 年-月-日):"<<endl;cin>>time;}void show() //打印记录情况{cout<<"车型"<<" "<<"车号"<<" "<<"费用"<<" "<<"收款人"<<" "<<"日期"<<endl;cout<<"________________________________________________________________"<<endl;cout<<cheXing<<" "<<cheHao<<" "<<feiYong<<" "<<people<<" "<<time<<endl;}int save() //记录信息写入3个文档{if(ruKou==1){ofstream sf("记录数据1.txt",ios::app);if(!sf){cout<<"文件打开失败"<<endl;return -1;}sf<<cheXing<<" "<<cheHao<<" "<<feiYong<<" "<<people<<" "<<time<<endl;sf.close();cout<<"\n数据已保存成功!\n"<<endl;return 0;}if(ruKou==2){ofstream sf("记录数据2.txt",ios::app);if(!sf){cout<<"文件打开失败"<<endl;return -1;}sf<<cheXing<<" "<<cheHao<<" "<<feiYong<<" "<<people<<" "<<time<<endl;sf.close();cout<<"\n数据已保存成功!\n"<<endl;return 0;}if(ruKou==3){ofstream sf("记录数据3.txt",ios::app);if(!sf){cout<<"文件打开失败"<<endl;return -1;}sf<<cheXing<<" "<<cheHao<<" "<<feiYong<<" "<<people<<" "<<time<<endl;sf.close();cout<<"\n数据已保存成功!\n"<<endl;return 0;}}int tongJi() //写入统计信息{ofstream tj("统计数据.txt",ios::app);if(!tj){cout<<"文件打开失败"<<endl;return -1;}tj<<ruKou<<" "<<cheXing<<" "<<people<<endl;tj.close();return 0;}int openTj() //打开统计信息文档{char d;ifstream ot("统计数据.txt");cout<<"路口"<<" "<<"车型"<<" "<<"收款人"<<endl;cout<<"________________________________"<<endl;while((d=ot.get())!=EOF)cout<<d;return 0;}int opensf1() //打开记录信息文档1{char ch;ifstream of("记录数据1.txt");cout<<"车型"<<" "<<"车号"<<" "<<"费用"<<" "<<"收款人"<<" "<<"日期"<<endl;cout<<"_________________________________________________________________"<<endl;cout<<cheXing<<" "<<cheHao<<" "<<feiYong<<" "<<people<<" "<<time<<endl;while((ch=of.get())!=EOF)cout<<ch;return 0;}int opensf2() //打开记录信息文档2{char ch;ifstream of("记录数据2.txt");cout<<"车型"<<" "<<"车号"<<" "<<"费用"<<" "<<"收款人"<<" "<<"日期"<<endl;cout<<"_________________________________________________________________"<<endl;while((ch=of.get())!=EOF)cout<<ch;return 0;}int opensf3() //打开记录信息文档3{char ch;ifstream of("记录数据2.txt");cout<<"车型"<<" "<<"车号"<<" "<<"费用"<<" "<<"收款人"<<" "<<"日期"<<endl;cout<<"_________________________________________________________________"<<endl;while((ch=of.get())!=EOF)cout<<ch;return 0;}void lookUp() //查询记录{int a;cout<< "请输入路口(按路口查询):"<<endl;cin>>a;switch (a){case 1:opensf1();break;case 2:opensf2();break;case 3:opensf3();break;}}void select() //选择操作选项{char x;cout<<" ===================欢迎进入高速路口计费系统==================="<<endl;cout<<" ======请选择操作======"<<endl;cout<<" ===a 录入车辆信息==="<<endl;cout<<" ===b 查询信息==="<<endl;cout<<" ===c 统计信息==="<<endl;cout<<" ==================★☆★☆★☆★☆★☆★☆★=================="<<endl;cin>>x;switch (x){case 'a':write();sum();show();save();tongJi();select();break;case 'b':lookUp();select();break;case 'c':openTj();cout<<" ===========感谢本次使用==========";break;}}};void main(){Car c;c.select();}。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define N 10struct vehicle/*车辆信息*/{char number[6];/*车牌号*/char type[3];/*车辆类型a,b,c*/char entime[6];/*进入时间*/char enter[2];/*进站口1,2,3*/double N1;}ve[N];char number[6];int count,i;FILE *fp;void readfile()/*从文件导入*/{if((fp=fopen("vehicle.txt","r"))==NULL){printf("\n\t\t\t\t文件为空");if((fp=fopen("vehicle.txt","w"))==NULL){printf("\n\t\t\t建立失败");exit(0);}else{printf("\n\t\t☆☆☆☆☆文件已重新建立,请输入信息☆☆☆☆☆\n");printf("\n\t\t☆☆☆☆☆Press any key to get to mainmenu!☆☆☆☆☆");getchar();return;}exit(0);}else{fseek(fp,0,2);/*文件指针fp指到文件末尾*/if(ftell(fp)>0)/*文件不为空*/{fseek(fp,0,0);/*文件指针指到文件开始位置*/for(count=0;((!feof(fp))&&fread(&ve[count],sizeof(struct vehicle),1,fp));count++); printf("\n\t\t**************系统初始化完成**************\n");printf("\n\t\t欢迎进入*李普*为您设计的*高速公路收费系统*\n");printf("\n\t\t*************按任意键进入系统*************\n");getch();return;}}}void put(){int l1,l2,l3;l1=100;l2=200;l3=300; /*三个入口到出口的距离分别是11 12 13(100 200 300)公里*/ char a;system("cls");printf("\n\n\t请输入输入车辆信息:\n\n");printf("\n\t1.车牌号:");scanf("%s",&ve[count].number);printf("\n\t2.车辆类型(a,b,c):");scanf("%s",&ve[count].type);printf("\n\t3.进入时间:");scanf("%s",&ve[count].entime);printf("\n\t4.入口(1 2 3):");scanf("%s",&ve[count].enter);if(strcmp(ve[count].type,"a")==0&&strcmp(ve[count].enter,"1")==0){ve[count].N1=0.5*l1;}else if(strcmp(ve[count].type,"a")==0&&strcmp(ve[count].enter,"2")==0){ve[count].N1=0.5*l2;}else if(strcmp(ve[count].type,"a")==0&&strcmp(ve[count].enter,"3")==0){ve[count].N1=0.5*l3;}else if(strcmp(ve[count].type,"b")==0&&strcmp(ve[count].enter,"1")==0){ve[count].N1=0.4*l1;}else if(strcmp(ve[count].type,"b")==0&&strcmp(ve[count].enter,"2")==0){ve[count].N1=0.4*l2;}else if(strcmp(ve[count].type,"b")==0&&strcmp(ve[count].enter,"3")==0) {ve[count].N1=0.4*l3;}else if(strcmp(ve[count].type,"c")==0&&strcmp(ve[count].enter,"1")==0) {ve[count].N1=0.3*l1;}else if(strcmp(ve[count].type,"c")==0&&strcmp(ve[count].enter,"2")==0) {ve[count].N1=0.3*l2;}else if(strcmp(ve[count].type,"c")==0&&strcmp(ve[count].enter,"3")==0) {ve[count].N1=0.3*l3;}fp=fopen("vehicle.txt","at+");if(fwrite(&ve[count],sizeof(struct vehicle ),1,fp)!=1)printf("文件写入错误\n");fclose(fp);count=count+1;printf("\n\t是否还要继续(Y/N)");a=getch();if(a=='y'||a=='Y')put();}void play(){int flag=0;char a;system("cls");printf("\n\n\t输入车牌号:");scanf("%s",number);if((fp=fopen("vehicle.txt","r"))==NULL){printf("\n\t\t\t\t文件为空");printf("\n\n按任意键返回主菜单");getch();return;}for(i=0;i<count;i++){if(strcmp(ve[i].number,number)==0){printf("\n\n\t您所查询的车辆信息如下:");printf("\n\n\t1.车牌号:%s",ve[i].number);printf("\n\n\t2.车辆类型:%s",ve[i].type);printf("\n\n\t3.进入时间:%s",ve[i].entime);printf("\n\n\t4.入站口:%s",ve[i].enter);printf("\n\n\t此车应缴费%.1f 元\n",ve[i].N1);flag=1;}}if(flag==0)printf("\n\t没有该车的相关信息!\n");printf("\n\t是否还要继续(Y/N)");a=getch();if(a=='y'||a=='Y')play();}void add(){system("cls");if((fp=fopen("vehicle.txt","r"))==NULL){printf("\n\t\t\t\t文件为空");printf("\n\n按任意键返回主菜单");getch();return;}printf(" 车辆信息统计\n");printf("≯≯≯≯≯≯≯★★★★★★★★★★★★★★★★★★★★★★★★★★≮≮≮≮≮≮≮\n");printf("【车牌号】\t【车辆类型】\t【进入时间】\t【入站口】\t【付费】\n");for(i=0;i<count;i++){printf(" %s\t\t %s\t\t %s\t\t %s\t\t %.f\n",ve[i].number,ve[i].type,ve[i].entime,v e[i].enter,ve[i].N1);}printf("≯≯≯≯≯≯≯★★★★★★★★★★★★★★★★★★★★★★★★★★≮≮≮≮≮≮≮\n");printf("\n");printf("车辆总数:%d",count);printf("\n\n按任意键返回主菜单");getch();return;}void writefile(){printf("\n\t\t按任意键推出程序\n\t\t");exit(0);}void menu(){system("cls");/*清屏*/char n;printf("\n\n");printf("\t\t》》》》》》★★★★★★★★★★★《《《《《《《");printf(" \t\t 欢迎使用*李普*为您设计的☆高速公路收费系统☆\n\n");printf(" 主菜单\n\n");printf(" \t\t ☆☆☆1.输入车辆信息☆☆☆\n\n");printf(" \t\t ☆☆☆2.显示车辆信息☆☆☆\n\n");printf(" \t\t ☆☆☆3.统计车辆信息☆☆☆\n\n");printf(" \t\t ☆☆☆4.退出系统☆☆☆\n\n");printf("\t\t》》》》》》★★★★★★★★★★★《《《《《《《\n\n");printf(" \t\t ☆☆☆☆☆请输入数字选择操作类型☆☆☆☆☆:");n=getchar();switch(n){case '1': put();break;case '2': play();break;case '3': add();break;case '4': writefile();break;default: printf("输入数据有误,请重输");}}void main(){readfile();while(1){menu();}}。