课 程 设 计 实 验 报 告
单片机课程设计数字钟实验报告

单片机课程设计:电子钟一、实现功能1、能够实现准确计时,以数字形式显示时、分、秒的时间。
2、小时以24小时计时形式,分秒计时为60进位,能够调节时钟时间。
3、闹钟功能,一旦走时到该时间,能以声或光的形式告警提示。
4、能够实现按键启动与停止功能。
5、能够实现整点报时功能。
6、能够实现秒表功能。
二、设计思路1、芯片介绍VCC:电源。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
操作系统实验报告

篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。
三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。
:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。
接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。
这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。
这一指令是visual studio c++ 编译器特有的。
接下来是winmain() 方法。
其中有四个由实际的低级入口点传递来的参数。
大计基课程实验报告

一、实验目的通过本次大计基课程实验,旨在加深对计算机基础知识理论的理解,提高实际操作能力,掌握计算机基本操作技能,为后续课程学习打下坚实基础。
二、实验内容1. 系统安装与配置2. 文件与文件夹管理3. 计算机病毒防治4. 办公软件使用5. 网络基本操作三、实验过程1. 系统安装与配置(1)选择合适的操作系统安装盘,将电脑开机设置为从光驱启动。
(2)按照提示进行操作系统安装,选择合适的安装选项。
(3)安装完成后,进行系统配置,包括设置用户账户、安装驱动程序等。
2. 文件与文件夹管理(1)打开文件资源管理器,熟悉文件系统的基本结构。
(2)创建新文件夹,重命名文件和文件夹。
(3)移动、复制和删除文件和文件夹。
(4)使用搜索功能查找文件。
3. 计算机病毒防治(1)了解计算机病毒的基本概念和传播途径。
(2)安装杀毒软件,并定期更新病毒库。
(3)对电脑进行病毒扫描,清除病毒。
4. 办公软件使用(1)使用Word进行文字处理,包括文字输入、编辑、格式设置等。
(2)使用Excel进行表格制作,包括单元格操作、公式应用、图表制作等。
(3)使用PowerPoint进行演示文稿制作,包括幻灯片设计、动画效果设置等。
5. 网络基本操作(1)了解网络基本概念,如IP地址、子网掩码、默认网关等。
(2)设置网络连接,包括有线和无线连接。
(3)使用浏览器浏览网页,搜索信息。
四、实验结果与分析1. 系统安装与配置:成功安装操作系统,并对系统进行基本配置。
2. 文件与文件夹管理:熟练掌握文件和文件夹的基本操作,能够快速找到所需文件。
3. 计算机病毒防治:了解计算机病毒相关知识,学会使用杀毒软件进行病毒防治。
4. 办公软件使用:掌握Word、Excel、PowerPoint的基本操作,能够完成简单的文档处理、表格制作和演示文稿制作。
5. 网络基本操作:了解网络基本概念,能够设置网络连接,使用浏览器浏览网页。
五、实验心得通过本次大计基课程实验,我对计算机基础知识有了更深入的理解,掌握了计算机基本操作技能。
课程设计实验报告-超声波测距仪的设计

超声波测距仪的设计一、设计目的本设计利用超声波传输中距离与时间的关系,采用STC51单片机进行控制和数据处理,设计出能够精确测量两点间距离的超声波测距仪。
同时了解单片机各脚的功能,工作方式,计数/定时,I/O口的相关原理,并稳固学习单片机的相关内容知识。
二、设计要求1.设计一个超声波测距仪,能够用四段数码管准确显示所测距离2.精度小于1CM,测量距离大于200CM三、设计器材元器件数量STC51单片机 1个超声波测距模块URF-04 1个电阻〔1K 200 4.7K〕 3 个晶振〔12MHz〕 1 个共阳极四位数码管 1 个极性电容〔33pF〕 2 个非极性电容〔22uF〕 1 个四、超声波测距系统原理331.45米/秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测量精度理论上可以到达毫米级。
超声波测距的算法设计: 超声波在空气中传播速度为每秒钟340米〔15℃时〕。
X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,那么有340m×0.03S=10.2m。
由于在这10.2m 的时间里,超声波发出到遇到返射物返回的距离如下:图1 测距原理超声波测距器的系统框图如下列图所示:图2 系统框图五、设计方案及分析〔包含设计电路图〕4.1硬件电路设计4.1.1 单片机最小系统控制模块设计与比拟方案二:采用STC51单片机控制。
STC51单片机是一种低功耗、高性能CMOS8位微控制器,具有 8KB的系统可编程Flash 存储器。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路,能够满足题目设计的所有要求,而且我们对STC51单片机也比拟熟悉,因此我们选择方案二。
最小系统电路图如图3所示图3 单片机最小系统显示模块设计采用四位共阳极数码管显示,连接电路简单,显示电路连接图如图4所示图4 数码管显示电路超声波测距模块a.本系统采用超声波模块URF04进行测距,该模块使用直流5V供电,理想条件下测距可达500cm,广泛应用于超声波测距领域,模块性能稳定,测度距离精确,盲区〔2cm〕超近。
计算机组成原理中断实验报告

北京建筑大学2015/2016 学年第二学期课程设计课程名称计算机组成原理综合实验设计题目微程序控制器设计与实现系别电信学院计算机系班级计141学生姓名艾尼瓦尔·阿布力米提学号完成日期二〇一六年七月八日星期五成绩指导教师(签名)计算机组成综合实验任务书➢实验目的1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。
2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运用所学理论知识独立分析和解决问题的能力。
➢实验电路1. 微指令格式与微程序控制器电路2.微程序控制器组成仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中断系统。
这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中断屏蔽功能,旨在说明最基本的原理。
中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1 和TIMER2)中。
其ABEL语言表达式如下:INTR1 := INTR;INTR1.CLK = CLK1;IE := CLR & INTS # CLR & IE & !INTC;IE.CLK= MF;INTQ = IE & INTR1;其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。
INTS微指令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机器指令执行过程中从控制存储器读出的。
INTE是中断允许标志,控制台有一个指示灯IE显示其状态,它为1时,允许中断,为0 时,禁止中断。
当INTS = 1时,在下一个MF的上升沿IE变1,当INTC = 1时,在下一个MF的上升沿IE变0。
CLR信号实际是控制台产生的复位信号CLR#。
实验报告单格式(模板)

实验报告单格式实验报告单格式篇一:实验报告格式模板-供参考实验名称:粉体真密度的测定粉体真密度是粉体质量与其真体积之比值,其真体积不包括存在于粉体颗粒内部的封闭空洞。
所以,测定粉体的真密度必须采用无孔材料。
根据测定介质的不同,粉体真密度的主要测定方法可分为气体容积法和浸液法。
气体容积法是以气体取代液体测定试样所排出的体积。
此法排除了浸液法对试样溶解的可能性,具有不损坏试样的优点。
但测定时易受温度的影响,还需注意漏气问题。
气体容积法又分为定容积法与不定容积法。
浸液法是将粉末浸入在易润湿颗粒表面的浸液中,测定其所排除液体的体积。
此法必须真空脱气以完全排除气泡。
真空脱气操作可采用加热(煮沸)法和减压法,或两法同时并用。
浸液法主要有比重瓶法和悬吊法。
其中,比重瓶法具有仪器简单、操作方便、结果可靠等优点,已成为目前应用较多的测定真密度的方法之一。
因此,本实验采用比重瓶法。
一.实验目的 1.了解粉体真密度的概念及其在科研与生产中的作用;2. 掌握浸液法—比重瓶法测定粉末真密度的原理及方法;3.通过实验方案设计,提高分析问题和解决问题的能力。
二.实验原理比重瓶法测定粉体真密度基于“阿基米德原理”。
将待测粉末浸入对其润湿而不溶解的浸液中,抽真空除气泡,求出粉末试样从已知容量的容器中排出已知密度的液体,就可计算所测粉末的真密度。
真密度ρ计算式为:式中: m0——比重瓶的质重,g; ms——(比重瓶+粉体)的质重,g;msl——(比重瓶+液体)的质重,g;ρl——测定温度下浸液密度;g/c m3;ρ——粉体的真密度,g/c m3;三.实验器材:实验仪器:真空干燥器,比重瓶(2-4个);分析天平;烧杯。
操作系统课程设计实验报告用C实现银行家算法

操作系统实验报告2学院:计算机科学与技术学院班级:计091学号:姓名:时间:2011/12/30目录1.实验名称 (3)2.实验目的 (3)3.实验内容 (3)4.实验要求 (3)5.实验原理 (3)6.实验环境 (4)7.实验设计 (4)数据结构设计 (4)算法设计 (6)功能模块设计 (7)8.实验运行结果 (8)9.实验心得 (9)附录:源代码部分 (9)一、实验名称:用C++实现银行家算法二、实验目的:通过自己编程来实现银行家算法,进一步理解银行家算法的概念及含义,提高对银行家算法的认识,同时提高自己的动手实践能力;各种死锁防止方法能够阻止发生死锁,但必然会降低系统的并发性并导致低效的资源利用率;死锁避免却与此相反,通过合适的资源分配算法确保不会出现进程循环等待链,从而避免死锁;本实验旨在了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生;三、实验内容:利用C++,实现银行家算法四、实验要求:1.完成银行家算法的设计2.设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源;五、实验原理:系统中的所有进程放入进程集合,在安全状态下系统收到进程的资源请求后,先把资源试探性的分配给它;之后,系统将剩下的可用资源和进程集合中的其他进程还需要的资源数作比较,找出剩余资源能够满足的最大需求量的进程,从而保证进程运行完毕并归还全部资源;这时,把这个进程从进程集合中删除,归还其所占用的所有资源,系统的剩余资源则更多,反复执行上述步骤;最后,检查进程集合,若为空则表明本次申请可行,系统处于安全状态,可以真正执行本次分配,否则,本次资源分配暂不实施,让申请资源的进程等待;银行家算法是一种最有代表性的避免的算法;在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待;为实现银行家算法,系统必须设置若干;要解释银行家算法,必须先解释操作系统安全状态和不安全状态;安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi1≤i≤n,它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj j < i 当前占有资源量之和;安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态;安全状态一定是没有死锁发生;不安全状态:不存在一个安全序列;不安全状态不一定导致死锁;我们可以把看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款;为保证资金的安全,银行家规定:1 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;2 顾客可以分期贷款,但贷款的总数不能超过最大需求量;3 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;4 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配;当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量;若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配;六、实验环境:Win-7系统Visual C++七、实验设计:1.数据结构设计定义结构体:struct Process0, 0, 0;}}};class DataInit法设计class FindSafeListdb->available; db->pdb->ruleri.currentAvail db->pdb->ruleri-1.currentAvail;db->pdb->ruleri-1.allocation;db->pdb->ruleri.currentAvail{ return false; }db->sum{ return false; }}return true; laim_allocation{ return 1; }Source sdb->pi.allocation; db->ask;db->pi.db->ask;ifexsitSafeListdb db->ask;db->pi.db->ask;return 2;}db->0,0,0; 能模块设计class Data0, 0, 0;}}};class DataInitr1,r2,r3;cout<<'p'<<i<<" max allocationclaimR1,R2,R3: ";r1,r2,r3;r1=db->pi.>pi.;pi.;r3=db->pi.>pi.;db->pi.r1, r2, r3;}}};class Displaylaim;cout<<"\t\t";displaySourcepi.allocation;cout<<endl;}cout<<endl;}void displaySafeListData db urrentAvail;cout<<" ";displaySourcedb->pdb->ruleri.claim;cout<<" ";displaySourcedb->pdb->ruleri.allocation;cout<<" ";displaySourcedb->pdb->ruleri.claim_allocation;cout<<" true";cout<<endl;}}void displayAskResultData db,int n db->available;db->pdb->ruleri.currentAvail db->pdb->ruleri-1.currentAvail;db->pdb->ruleri-1.allocation;db->pdb->ruleri.currentAvail{ return false; }db->sum{ return false; }}return true; laim_allocation{ return 1; }Source sdb->pi.allocation; db->ask;db->pi.db->ask;ifexsitSafeListdb db->ask;db->pi.db->ask;return 2;}db->0,0,0; //找到安全序列,将请求资源置零,返回3return 3;}};void main{Data db;db=new Data;ifdb{ cout<<"errorno enough memory space"; return; } DataInit dataInit;db; //设置进程个数db; //设置系统总资源量db; //设置当前系统可获得资源量db; //设置t0时刻进程基本状态Display display;FindSafeList findSafeList;int r1=0,r2=0,r3=0;int c;db->r1,r2,r3; //设置请求资源为0,即无请求c=db,0; //寻找安全序列,返回结果ifc=3{ cout<<"t0时刻的进程组不存在安全序列\n"; return; }int choice=1;int pi;whilechoice{cout<<"\n 选择操作:\n 1 查看进程情况\n 2 请求分配资源\n 0 退出\n ";cin>>choice;switchchoice{case 1:{cout<<"当前资源量availableR1,R2,R3:\n ";db->available;cout<<endl;cout<<"\n当前进程资源分配情况piR1,R2,R3: \n";cout<<" 进程\tclaim\t\tallocation\n";db->p,db->pLength;break;}case 2:{cout<<"输入请求资源进程序号:";cin>>pi;cout<<"输入请求资源R1,R2,R3: 0,0,0表示当前进程组无请求\n";cin>>r1>>r2>>r3;db->r1,r2,r3;c=db,pi;db,c;cout<<endl;break;}case 0:{ break; }default:{ cout<<"input errortry again\n"; break; }}}}。
工程造价实训报告范文6篇

工程造价实训报告范文6篇工程造价实训报告范文篇一:一、实训目的市政工程定额与预算实训是一门实践性课程,是在完成了课程学习后所进行的一项专业综合练习。
在市政工程预算的课程教学中,学生已经边学边练的完成了各个分部分项工程的工程量计算,以及定额的基价的套用,并且已经掌握了工程造价的计算程序,工程量清单的编制。
但由于课时有限,尚未编制一套较完整的施工图预算。
预算编制内容多、时间长和单件性的特点,仅通过分部分项工程的预算练习远不能达到较好地、全面地掌握市政工程预算的编制方法和基本技能。
因此,通过市政工程预算编制实训操作训练,有利于学生运用所学知识,进一步较好地系统地掌握市政工程预算的编制方法、程序和技能。
二、实训内容实训的主要内容是根据设计的建筑、结构施工图、预算定额、费用定额、清单计价规范和有关资料,着手编制1套完整的市政单位工程施工图预算和清单工程量计价。
具体内容为:1。
熟悉施工图及有关资料;2。
列项、计算工程量;3。
预算定额的套用和换算;4。
直接工程费的计算5。
主要材料及用工量的分析及主要材料价差调整;6。
计算措施费、间接费、利润、税金,计算工程造价;7。
编制完整的施工图预算书,并装订成册。
8。
作为招标文件的工程量清单9。
作为投标文件的清单工程量报价三、实训要求1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海应用技术学院课程设计2011~ 2012学年第二学期设计题目成绩记录簿院(系)计算机科学与信息工程学院专业计算机应用技术班级 12104006 学号 1210400631学生姓名温源设计时间 2013.07.1~2012.07.12指导教师宋智礼提交日期上海应用技术学院课程设计任务书指导教师(签名):教研室主任(签名):目录一、设计目的及要 (4)二、功能描述 (5)三、总体设计 (6)3.1 功能模块设计3.2 数据结构设计3.3 函数功能描述四、程序实现 (15)4.1 源码分析4.2 运行结果五、程序调试与检错 (30)六、程序运行指导 (31)七、课程设计总结 (36)八、参考文献 (36)一、设计目的及要求通过对C语言的熟练掌握,编写一个拥有简单界面的可运行程序来实现对一个或多个学生成绩的记录,并且能在记录的基础上拓展到添加学生成绩、删除学生成绩、查询学生成绩甚至查询班级的某一课程成绩。
能够在执行可运行程序之前读取文件以及在作了一系列修改之后将所键入的学生成绩等各项信息保存在指定的文件夹内。
以下是课程设计的详细要求。
成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分;输入信息时要检查数据项学号、课程编号、成绩、学分的合法性,学号:8位数字;课程编号:5位数字;成绩:0 ~ 100 之间的整数,学分:1~ 5之间的实型数。
添加成绩:需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示;查询(班级或个人)成绩:查询个人成绩:以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成的总学分。
查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布的人数及百分比。
拓展功能:a) 程序启动时先从文件读入数据,如果文件中没有数据则给出提示;b) 每次修改的数据写入文件。
下面是要求的程序的主界面:二、功能描述按照要求的主界面的排布,我将程分为7个模块,依次为1、添加,2、删除,3、查学生成绩,4、查班级成绩,5、写入文件,6、读取文件,7、退出。
(1)、添加学生成绩摸块。
这一个模块又分为两个小模块,将学生的基本信息和学生的课程成绩分开添加,第一个小模块也就是学生的基本信息包括学生的学号、姓名和班级(见程序中第一个结构体);第二个小模块是学生的课程成绩其中包括学生的学号、课程编号、课程名字、成绩以及该门课程所占的学分(见程序中第二个结构体)。
第一个小模块和第二个小模块分别定义了一个函数insert1和insert2,最后用一个insert函数将两个小函数用一个switch语句连接起来。
(2)、删除学生成绩模块。
这一模块在思路上和第一个模块是一样的,都是用两个小函数分别将两个小模块写出来,再用一个函数将其连接起来,不作详细说明。
(3)、查询学生成绩模块。
这一个模块可以通过两种方法来查询学生的成绩,可以通过学号或是名字,只要在已存储的数据中含有该名学生的学号或是名字就会将这名学生的成绩信息输出到屏幕上,快捷,准确。
如果没有该名学生的学号或是名字信息,则程序将会返回到主界面,等待下一步操作。
(4)、查询班级成绩模块。
这一个模块通过输入班级以及想要查询的课程编号来查询该班级学生在该门课程的成绩并且成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布的人数及百分比。
(5)、写入文件模块。
因为可运行程序每运行一次数据不存储的话就会丢失,所以这个模块是为了将每次键入的学生信息完善以后按照指示存储到指定位置的文件里面去,以便于以后察看及导出。
(6)、读取文件模块。
就在刚才说过的导出文件中的信息就是这个模块的主要功能。
可以在刚开始运行程序的时候先选择读取文件,然后键入文件准确的位置信息,这样就可以将这个文件里面的学生的成绩等信息导入到程序的已以存储中,这样就不用每次都键入很多信息。
(7)、退出模块。
凡是程序有入口必须有出口,否则就不是一个很完善的程序。
这个模块就是提供这样一个出口的功能。
三、总体设计3.1 功能模块设计成绩记录簿的运行如上面的主要框架流程图所示,在检测键入的序号之后开始启动序号所对应的模块。
添加成绩和删除成绩都是对应的分为了两个小模块进一步运行的,一般都是通过先添加基本信息进去,再对应的添加进去基本信息所对应的课程成绩,而删除的时候是不用讲究次序的,可以直接通过键入学号,如果查找到对应的信息,则删除成功,若找不到也会提示删除不成功。
查询学生成绩与查询班级成绩的模块其实在原理上是一样的,只不过开始时输入的查询信息不一样。
一、主函数流程图(1) 主界面程序流程图:二、子函数(模块)流程图(1)、添加学生成绩(2)、删除学生成绩(3)、查询学生成绩(4)、查询班级成绩(5)、写入文件成绩(6)、读取文件成绩3.2 数据结构设计此程序中定义了两个结构体,以及全局变量,在这里着重说明一下这两个结构体的作用以及全局变量的使用。
1.student1结构体这是第一个结构体,它也是第一个模块添加成绩与第二个模块删除成绩中的学生基本信息的载体,如果没有它,那么这两个模块的分步骤添加或删除功能都不可能实现。
2.student2 结构体这是第二个结构体,它是学生详细的成绩信息,通过上面这个截图就能看变得很清楚,两个结构体所包含的元素不同,也使得他们两个的作用截然不同。
3.全局变量上面的截图是源程序中的一个全局变量,主要作用是用来控制后面程序中的for语句中的循环体。
3.3 函数功能描述(1)、isdigit()函数isdigit原型:extern int isdigit(char c);用法:#include <ctype.h>功能:判断字符c是否为数字说明:当c为数字0-9时,返回非零值,否则返回零。
附加说明此为宏定义,非真正函数。
(2)、strcmp()函数原型:extern int strcmp(const char *s1,const char * s2);所在头文件:string.h功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)说明:当s1<s2时,返回值<0当s1==s2时,返回值=0当s1>s2时,返回值>0即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
如:"A"<"B" "a">"A" "computer">"compare"特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
(3)、strcpy()函数原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
(4)、exit()函数函数名: exit()所在头文件:stdlib.h功能: 关闭所有文件,终止正在执行的程序。
exit(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值exit(x)(x不为0)都表示异常退出exit(0)表示正常退出用法: void exit(int status);参数 : status //程序退出的返回值.(5)、sizeof()函数sizeof是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。
它在编译时起作用,而不是运行时。
sizeof 的结果等于对象或者类型所占的内存字节数四、程序实现4.1 源码分析1.头文件这是源程序的头文件,也就是我们所说的预处理命令。
如果你不认识其中一些头文件那么你看一看上面的函数介绍就会知道为什么会出现这些头文件。
2.主函数main( ){int t;while(1){printf("\n\n\n");printf(" *成绩记录簿*\n");printf("--------------------------------------------------------------------------------");printf(" 1: 添加\n");printf(" 2: 删除\n");printf(" 3: 查询学生成绩\n");printf(" 4: 查询班成绩\n");printf(" 5: 写入文件\n");printf(" 6: 读取文件\n");printf(" 0: 退出\n");printf("--------------------------------------------------------------------------------");printf(" 请输入数字选择: ");scanf("%d",&t);switch(t){case 1: insert();break;case 2: Delete();break;case 3: student_check();break;case 4: class_check(); break;case 5: in_file();break;case 6: read_file();break;case 0: exit(0);default: ;}}3.子函数(1)添加成绩void insert(){int z;printf(" 1.*添加学生基本信息*");printf(" 2.*添加学生成绩*\n");printf(" 0.*退出*\n");scanf("%d",&z);switch(z){case 1: insert1(); break;case 2: insert2();break;case 0: exit(0);default: ;}}(2)删除成绩void Delete(){int z;printf(" 1.*删除学生基本信息*");printf(" 2.*删除学生成绩*\n");printf(" 0.*退出*\n");scanf("%d",&z);switch(z){case 1: delete1(); break;case 2: delete2();break;case 0: exit(0);default: ;}}(3)查询学生信息void student_check(){int i,j,n,k,m=1,l=0,ii,nn,pp;printf(" 1。