第一篇:《高级语言程序设计》课程设计大纲
《高级语言程序设计》课程设计教学大纲
课程名称:高级语言程序设计课程设计
课程总学时:32 适用专业:广播电视工程、电子信息工程、电子科学与技术
课程类别:必修
一、课程设计任务与目的
《高级语言程序设计》课程是一门实践性较强的课程,课程设计环节是课程学习的重要组成,是课程教学的必经步骤。目的是培养学生实际操作技能和解决实际问题的能力。要求学生掌握C语言设计、调试、运行方法,获得用C语言解题的实际体会,加深对C语言的理解,得到C程序设计方法和技巧的训练,掌握C程序设计的全过程。通过课程设计的教学,使学生巩固和深化已学的理论知识,加强综合应用能力,训练学生掌握分析问题、解决问题的方法,培养较强的动手能力和一定的设计和调试能力。
二、课程设计基本内容与要求
鉴于课程设计的性质、要求和具体内容,对课程设计提出如下要求;
1、关于课题及选题
在课程设计任务书中列出了多个设计课题,每个课题都有相应的要求或说明。参加课程设计的学生首先要了解设计的任务,仔细思考各题的设计要求,然后根据自已的基础和能力情况从中选择一题。一般来说,选择课题应以在规定的时间内能完成,并能得到应有的锻炼为原则。
若学生对任务书中课题以外的相关课题较感兴趣,希望选作课程设计的课题时,应征得指导教师的认可,并写出明确的设计要求和说明。
2、关于设计的总要求
在设计时,要严格按照题意要求独立进行设计,不能随意更改。若确因条件所限,必须要改变课题要求时,应在征得指导教师同意的前提下进行。
3、验收
在课程设计完成后应由指导教师当场运行、验收,只有在验收合格后才能算设计部分的结束。
4、设计报告
课程设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。设计报告一般要以固定规格的纸张书写并装订,字迹及图形要清楚、工整(电子文档尤佳)。内容及要求如下:
(1)设计任务、要求及所用软件环境或工具。
(2)问题模型化描述以及求解算法的简要描述。
(3)设计的模块构成、各模块的简要说明、流程图、调用关系表。
(4)所设计软件的组成(程序文件和数据文件)及使用说明。
(5)设计总结和体会。
(6)验收情况。
三、课程设计设备与材料
计算机;Visual C++6.0或C-Free3.5或Turbo C++3.0软件。
四、考核方式与评分办法
1、学生按照实习计划和大纲完成实习教学任务,考试合格取得相应学分。
2、学生实习考核内容与成绩比例:实习态度与实习纪律占20%、业务能力与水平占40%、答辩与验收情况占20%,实习报告占20%。
3、无故不参加实习或实习全过程缺勤在三分之一及以上者,实习成绩视为不及格。
4、学生实习成绩按优秀、良好、中等、及格和不及格五级评定,原则上呈正态分布,严格控制优秀比例,一般优秀率不大于20%。
五、课程设计参考书
1、潭浩强.C语言程序设计.清华大学出版社.2000
2、廖湖声等.C语言程序设计案例教程.人民邮电出版社.2003
3、张仁杰 王风茂.《C语言程序设计实训教程》中国电力出版社.2004
执笔人:裘姝平
教研室:电子信息工程教研室 编制日期: 2008 年 9月
第二篇:《高级语言程序设计》课程设计任务书2
《高级语言程序设计》课程设计任务书
一、课程设计的目的
高级语言程序设计是本科工科类各专业的重要基础课,课程以影响深远的、传统的、面向过程的优秀编程语言C语言为基础,学习程序设计的基本概念和方法,通过本门课程学习,应使同学掌握高级语言的基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。
课程设计是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。经过该实践环节,培养学生的探索精神和创新能力。通过答辩训练学生的综合表达能力。
二、课程设计教学的基本内容和要求
1、课程设计教学基本内容
高级语言课程设计不仅是对程序设计能力的综合锻炼,更是对团队合作、软件开发与项目管理过程的训练。因此,课程设计根据题目的难度由小组合作完成,每个小组1-4人。整个课程设计分为以下几个阶段进行:选题与开题、系统设计、系统编码实现、系统测试、撰写课程设计报告、系统评价与验收。
(1)选题与开题:题目可来自教师指定的参考题目,也可自由选题,特别是鼓励有创新性的题目或是在已知题目的基础上进行创新。
(2)系统设计:系统设计的任务是对所确定的题目从问题需求、数据结构、程序结构、难点及关键技术等方面进行分析,形成的系统设计方案,并进行详细的分工。
(3)系统编码实现:小组成员根据初步的系统设计方案,对系统编程实现。(4)系统测试:在各程序模块编码完成并集成后,就可以开始对整个系统进行测试。(5)撰写课程设计报告:完成文档整理,按照要求完成课程设计报告。(6)系统评价与验收:通过小组答辩的形式对程序的功能进行评价与验收。
2、课程设计教学的要求
参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而反映出理解和运用本课程知识的水平和能力。具体如下:
(1)数据组织方面尽量使用到:数组、链表、结构体、文件;(2)程序结构方面做到函数调用,尽量采用指针运算;(3)代码编写规范,形成良好的编程习惯;
(4)程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。(5)课设完成须进行答辩,提交课设报告电子稿、装订的打印稿。课设报告内容包括以下几个方面:
程序的总体设计和算法分析。 程序流程图、函数说明 源程序代码清单 测试数据和测试过程记录 遇到的问题及解决方法分析 课程设计小结
三、课程设计的进度安排
系统整体设计和详细设计
1天 系统编码实现
1天 系统测试
1天 撰写课程设计报告
1天 演示软件和答辩
1天
四、课程设计的考核
评价是检测学生理解问题和解决问题能力的一个重要手段,教师将根据学生提交的课程设计报告,严格检查以下各项任务完成情况:
1、设计文档中要求项目是否齐全。
2、程序中运行时的屏幕提示信息是否准确:
如果在程序执行期间有足够的指导信息显示在屏幕上显示,这些用户文档可以是很简要的,也许只限于解释如何装入并运行程序。
3、问题和或任务的陈述(描述问题,而且问题是合理原始的、应当包括输入、输出及其预期范围)是否正确。
问题的解决方案采取由顶向下设计的形式,在适当的地方使用伪代码,把整个解决方案划分成若干模块。
5、程序完成后的代码应当加以注解。最少应清楚指出每一个模块。
6、用于检查程序的测试数据,或者对一个控制程序给出测试的例程。测试应考虑探索通过程序的几条路径,在合适的地方选择打印输出来。
7、程序的技术文档:必须包含函数的原型说明和所用变量的全体清单
8、程序顺利运行,结果正确;测试程序是否工作且满足设计指标并评价其效率。
五、指导书、参考资料
《C程序设计》 谭浩强编 清华大学出版社
《C程序设计思想与方法》 尹宝林编著 机械工业出版社
六、其他
第三篇:语言程序设计课程设计指导书
汇编语言程序设计课程设计指导书
一、课程设计的目的
本课程设计是《汇编语言程序设计》课程的后继教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,对汇编语言程序设计有更进一步的认识,提高编程技巧和阅读理解复杂程序的能力。
二、课程设计的任务要求
根据所给的“Reader.asm”应用程序框架,在此基础上修改和添加功能。1.基本任务:
认真阅读“Reader.asm”源程序,理解程序每一条指令在程序中的作用; 用→、←键在窗口内左右移动文本;
用PgDn,PgUp键上下快速移动文本(每次移半帧); 设计专用键放大、缩小窗口,改变窗口位置。
2.扩展任务: 对文本内的Tab字符(ASCII码09H)进行处理:遇到Tab键,下一个字符显示在下一个表站开始处(每个6个字符一个表站);
设置状态行,显示当前文件名、文本位置(仿垂直滚动条)。
3.自行设计的其它任务:
三、课程设计报告的内容
1.课程设计题目名称、班级号、学号、学生姓名和课程设计起止日期(封面);
2.上海应用技术学院课程设计任务书(下发)3.课程设计目的和要求;
4.课程设计任务内容; 5.详细设计说明; 6.软件使用说明; 7.课程设计总结;
8.附录:1 参考文献 2 程序清单(电子版)。
四、课程设计详细设计说明及其它要求
1.2.3.4.5.6.分析原“Reader.asm”程序结构:每个模块说明,较大模块程序流程图; 对你已经实现的功能做详细的说明,并附上流程图及部分程序清单; 自己对该“文件阅读器”的进一步设想;
对于有设想但最终未实现的功能的大致编程思路的阐述; 论述在设计过程中遇到的并且对你具有启发性的问题; 交课程设计报告手写版,源程序交电子版。
五、评分标准
1.根据平时出勤情况和设计时的工作情况;
2.根据课程设计程序的完成情况,必须有可运行的软件。3.根据课程设计报告的质量。课程设计报告不能抄袭,抄袭判为不及格。4.在题目要求之外附加具有实用性的功能。
六、课程设计工作进度计划
星期一:课程设计介绍,源程序阅读理解,功能设计,程序编写。星期二:功能设计,程序编写。
星期三:程序编写与调试,课程设计报告撰写。星期四:程序编写与调试,课程设计报告撰写。
星期五:程序最终修改,课程设计报告撰写,提交报告并答辩。
七、主要参考资料
[1]杨文显.汇编语言程序设计简明教程.北京:电子工业出版社,2005
八、附录
《文本阅读器》汇编语言源程序清单
;Title: Assemble Program “Reader.asm”
;Read a file from disk, display it‟s contents on screen;Move the content on screen by up/down arrow keys;========================== MYDAT SEGMENT MAXLEN DW 1000;最大行数 INDEX DW 1000 DUP(?);行索引 LENCT DW 0;实际行数 CURLINE DW 0;当前页第一行行数 CCOUNT DW ?;文件总字符数
TOP DB 5;窗口左上角行数 LEFT DB 5;窗口左上角列数 WS DW 60;窗口宽度 HS DW 15;窗口高度 FG DB 17H;文字属性 FGB DB 1FH;窗口边框属性
MSG1 DB 'File:$';输入文件名提示 MSG2 DB 'File open error!$';打开文件出错时提示 MSG3 DB 'File read error!$';读文件出错时提示 FILENA DB 80,?,80 DUP(?);输入文件名缓冲区
;定义功能键和相应的处理程序
;每个功能定义两个数据:扫描码,处理程序入口地址;该数据由DOSUB子程序使用
KEYSUB DW 48H, SUB1 , 50H, SUB2, 0
MYDAT ENDS
;==========================
BUFFER SEGMENT PARA DB 65535 DUP(?);文件缓冲区,文件最大为64K BUFFER ENDS
;==========================
SSEG SEGMENT STACK „STACK‟;堆栈段
DW 100 DUP(?)SSEG ENDS
;==========================
;宏定义 DISPINIT: 设置显示器显示方式 DISPINIT MACRO MOV AX,0003H;文本方式 25x80 INT 10H ENDM;----------;宏定义 PROMPT: 显示字符串 PROMPT MACRO OUTMSG LEA DX, OUTMSG MOV AH, 09H;INT 21H;ENDM;--------;宏定义KRYIN: 从键盘读入一个字符 KEYIN MACRO MOV AH,0;读键
INT 16H;AH中为扫描码
ENDM;==========================;代码段开始 CODE SEGMENT
ASSUME CS: CODE, DS: MYDAT, ES: BUFFER, SS: SSEG
START: MOV AX, MYDAT;装载DS,ES MOV DS, AX MOV AX, BUFFER MOV ES, AX
DISPINIT;显示方式初始化
CALL READFILE;读入文件
JC DONE
CALL CLIST;初始化索引行
CALL CLSCREEN;清屏
CALL CREWIN;创建窗口
CALL SHOWCUR;显示当前页
NEXT: KEYIN;进入主程序: 读键盘
CALL COMMAND;命令分析与处理
JNC NEXT;非x键继续循环
DONE: CALL CLSCREEN;清屏
MOV AX, 4C00H INT 21H;退出
;-------;子程序READFILE: 提示并读入文件名,将文件读入缓冲区 READFILE PROC PROMPT MSG1;CALL SIN;读入文件名
MOV AX, 3D00H MOV DX, OFFSET FILENA+2 INT 21H;打开文件(读)JC GETERR1;打开文件出错转GETERR1 PUSH DS PUSH ES POP DS;将DS指向文件缓冲区段
MOV BX, AX;BX=文件号
MOV AH, 3FH;读文件 MOV CX, 0FFFFH;读入最多64K-1 MOV DX, 0;DS: DX指向文件缓冲区
INT 21H POP DS JC GETERR2;读入文件出错转GETERR2 MOV CCOUNT, AX;实际读入字符数存入CCOUNT中
CLC JMP GETFILEXIT
GETERR1: PROMPT MSG2;读入文件出错处理
KEYIN STC JMP GETFILEXIT;
GETERR2: PROMPT MSG3;打开文件出错处理
KEYIN STC
GETFILEXIT: RET
READFILE ENDP;-------;输入文件名子程序 SIN PROC MOV AH, 0AH MOV DX, OFFSET FILENA INT 21H;输入文件名
XOR CH, CH MOV CL, FILENA+1;取文件名长度
LEA BX, FILENA+2 ADD BX, CX;计算字符串结尾地址
MOV BYTE PTR [BX], 0;在字符串尾部加0 RET SIN ENDP;-------;索引行初始化子程序 CLIST PROC MOV CX, CCOUNT JCXZ CSTX;文件为空结束
MOV SI,0;文件缓冲区字符指针
MOV DI,0;索引行指针
MOV DX,0;行数计数
MOV INDEX[DI], 0 INC DX;假设文件至少有一行 CST1: CMP WORD PTR ES:[SI], 0A0DH;判断是否为回车换行符
JNZ CST2;不是行结束,转CST2 INC DX;行数加一
ADD SI, 2;跳过回车换行符
ADD DI, 2;索引行指针加一
MOV INDEX[DI], SI;指向本行开始地址
CMP DX, MAXLEN JNC CST4;是否超过最大行,超过转CST4,结束
JMP CST3;CST2: INC SI;文件缓冲区字符指针指向下一字符 CST3: LOOP CST1;CST4: MOV LENCT, DX;保存行数到LENCT中 CSTX: RET CLIST ENDP;-------;清屏子程序
CLSCREEN PROC MOV AX, 0600H;清屏
MOV CX, 0 MOV DH, 50 MOV DL, 79 MOV BH, 07H INT 10H RET CLSCREEN ENDP;------;显示当前页子程序 SHOWCUR PROC MOV DH, 0;窗口最顶行
MOV SI, CURLINE;取当前页第一行行数
MOV CX, HS;窗口的第一行和最后一行为边框,SUB CX, 2;所以能够显示内容的高度为窗口高度减二 SC1:
CALL SHOWLINE;显示一行
INC DH;窗口下一行
INC SI;文件下一行
MOV AX, LENCT;CMP SI, AX;文件是否显示完
JNC SC2;显示完则转SC2 LOOP SC1 JMP SC1X SC2: JCXZ SC1X;该页显示满则结束
;该页没有显示满,则用空行填满该页 SC3: PUSH CX PUSH DX CALL SHOWSPLINE;显示空行
POP DX POP CX INC DH LOOP SC3 SC1X: RET SHOWCUR ENDP;------;显示一行子程序
;输入:SI=显示行行号;DH=窗口中的行号 SHOWLINE PROC PUSH CX PUSH SI PUSH DX PUSH AX
ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;
MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二
SHL SI, 1;行索引为字类型,所以乘二
MOV SI, INDEX[SI];取该行第一个字符在文件缓冲区的地址
PUSH DS MOV AX, 0B800H MOV DS, AX;DS指向显示缓冲区段地址 SL1: MOV AX, ES:[SI] CMP AX, 0A0DH JZ SL2;如果是回车换行,则该行结束
MOV DS: [DI], AL;显示一个字符 ADD DI, 2;INC SI;取下一个字符
LOOP SL1;JCXZ SLX;该行正好显示完,则结束,否则用空格填满
SL2: MOV BYTE PTR DS:[DI], ' ';该行没有显示满,则用空格填满
ADD DI, 2 LOOP SL2
SLX: POP DS
POP AX POP DX POP SI POP CX
RET SHOWLINE ENDP;--------;显示空行子程序
;输入:DI=窗口中的行号 SHOWSPLINE PROC;
MOV AX, HS;SUB AX, 2;CMP DH, AL;显示的空行是否超出最低行
JNC SSLX;如果是,则转SSLX ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;
MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二
PUSH DS MOV AX, 0B800H MOV DS, AX SSL1: MOV BYTE PTR DS:[DI], ' ' ADD DI, 2 LOOP SSL1 POP DS SSLX: RET SHOWSPLINE ENDP;-------;创建窗口子程序 CREWIN PROC PUSH ES MOV AX, 0B800H;显示缓冲区地址为B800:0 MOV ES, AX;
MOV DH, TOP MOV DL, LEFT;窗口左上角行列数
MOV CX, HS;窗口高度(行数)CW1: PUSH DX;CALL VADD;计算地址
PUSH CX;MOV CX, WS;窗口宽度(列数)
MOV AL, FG;取属性 CW2: MOV BYTE PTR ES:[DI], ' ';送空白字符
INC DI;MOV BYTE PTR ES:[DI], AL;送属性
INC DI;LOOP CW2;
POP CX POP DX INC DH;行数加一
LOOP CW1
CALL DRAWB;画边框
POP ES RET CREWIN ENDP;-;画边框子程序 DRAWB PROC PUSH DX PUSH CX PUSH BX PUSH AX MOV BL, FGB MOV DH, TOP MOV DL, LEFT CALL VADD
;画左上角角框
MOV BYTE PTR ES:[DI], 0C9H INC DI MOV BYTE PTR ES:[DI], BL INC DI
;画第一行边框
MOV CX, WS SUB CX,2 DB1: MOV BYTE PTR ES:[DI], 0CDH INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB1
;画右上角角框
MOV BYTE PTR ES:[DI], 0BBH INC DI MOV BYTE PTR ES:[DI], BL
;画第二行到倒数二行左右边框
MOV DH, TOP MOV DL, LEFT INC DH MOV CX, HS SUB CX, 2 DB2: PUSH DX CALL VADD MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL DEC DI MOV AX, WS DEC AX SHL AX, 1 ADD DI, AX MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL POP DX INC DH LOOP DB2;取边框属性;窗口左上角行列数;计算地址;角框╔;因为去掉了左右角框,所以宽度减二;上下边框═;角框╗;从第二行开始;第一行和最后一行没有左右边框,;所以高度减二;;计算左边框地址;左右边框║;;;;计算右边框地址;;下一行;
;画左下角角框
MOV DH, TOP;MOV DL, LEFT;MOV AX, HS;DEC AX;ADD DH, AL;左下角行数=右上角行数+窗口高度-1 CALL VADD MOV BYTE PTR ES:[DI], 0C8H;角框╚
INC DI MOV BYTE PTR ES:[DI], BL INC DI
;画最低行边框
MOV CX, WS;SUB CX, 2;因为去掉了左右角框,所以宽度减二 DB3: MOV BYTE PTR ES:[DI], 0CDH;上下边框═
INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB3
;画右下角角框
MOV BYTE PTR ES:[DI], 0BCH;角框╝
INC DI MOV BYTE PTR ES:[DI], BL
POP AX POP BX POP CX POP DX
RET DRAWB ENDP;------;计算窗口内某行列位置对应显存地址;输入:DH=行 DL=列;输出:DI为显存地址 VADD PROC MOV AL, 80;MUL DH;XOR DH, DH;ADD AX, DX;行数×80+列数
SHL AX, 1;乘2,因为每个字符占两个字节
MOV DI, AX RET VADD ENDP;--------;命令分析子程序 COMMAND PROC CMP AH, 2DH;2DH为x键的扫描码
JNZ COM1;不是x键,转COM1 STC;值x键标志
RET COM1: CALL DOSUB;转命令散转子程序
CLC RET COMMAND ENDP;--;命令散转子程序 DOSUB PROC MOV AL, AH MOV AH, 0;将键扫描码放入AX中
MOV BX, OFFSET KEYSUB;BX指向KEYSUB DOSUB1: CMP WORD PTR [BX], 0 JZ DOSUBX;KEYSUB表查完,即没有找到转DOSUBX CMP AX, [BX] JZ DOSUB2;找到扫描码转DOSUB2 ADD BX, 4 JMP DOSUB1;DOSUB2: ADD BX, 2 MOV BX, [BX];取处理程序入口地址
JMP BX;转处理程序 DOSUBX: RET
;SUB1和SUB2均为功能键处理程序;处理完后应使用JMP DOSSUBX结束
;上箭头键处理程序 SUB1: CMP CURLINE, 0 JZ SUB1X;已到第一行,结束
DEC CURLINE;向上一行
CALL SHOWCUR;显示当前页 SUB1X: JMP DOSUBX
;下箭头键处理程序 SUB2: MOV AX, LENCT DEC AX DEC AX;至少显示一行
CMP AX, CURLINE;已到最后一行
JZ SUB2X INC CURLINE;向下一行
CALL SHOWCUR;显示当前页 SUB2X: JMP DOSUBX
DOSUB ENDP;--------
CODE ENDS
;========================= END START
第四篇:C语言程序设计课程设计任务书
C语言程序设计课程设计任务书
项目4:
高校工资管理系统一、课程设计项目:
高校工资管理系统
二、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(3)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
三、设计方法和基本原理:
1、功能要求
问题的描述(功能要求):
现一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关数据结果以文件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相对应的删除动作。
相关信息: 每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:
其中工资的基本构成如下:
教师: 基本工资+课时费;
实验员: 基本工资+实验室补助;
行政人员: 基本工资+行政补贴;
教师兼职实验员: 基本工资+课时费+实验室补助;
行政人员兼职教师:基本工资+行政补贴+课时费;(其中:
1.课时费:教师每一学期的基本工作量为120,实验员每学期基本工作量为70,行政人员没有基本工作量,每节课时费为20元;课时费=(上学期工作量-基本工作量)*20;注意:如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20为负值。
2.基本工资:教师800元,实验员650元,行政人员750元。
3.行政补贴:250元。4.实验室补助:150元。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤: a)写出需求分析(该程序要实现什么什么样的功能)b)分析系统中的各个实体之间的关系及其属性和行为; c)根据问题描述,设计系统的类层次;
d)完成类层次中各个类的描述(包括属性和方法); e)完成类中各个成员函数的定义; f)用户界面的设计
g)分析系统功能模块(系统流程图)h)代码编写 i)功能调试;
j)完成系统总结报告以及系统使用说明书。
四、程序设计和调试:
五、答辩与评分标准:
1、完成基本功能:60分;
2、设计报告及使用说明书:10分;
3、设置错误或者按照要求改变结果:15分;
4、回答问题:15分。
六、报告:
包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目等。
第五篇:C语言程序设计课程设计指导书
课程设计指导书
课程名称: C语言程序设计
班次: 自动化2016-01,02,03班
设计任务:
整个课程设计一共提供了10个题目,编号为1~10。按学号尾数进行选题设计。
课程设计目的
1、进一步掌握利用C语言进行程序设计的能力;
2、进一步理解和运用结构化程序设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图表示算法;
5、学习撰写课程设计报告;
第一部分:课题描述(一共10个课题)
课题1:图书管理系统
在磁盘上创建3个txt文件,命名book.txt,borrow.txt和reader.txt,分别存储图书、借阅和读者的信息,每本图书的基本信息有编号、书名、作者、出版日期、金额、类别、在馆数量等。借阅基本信息有:编号、书名、金额、借书证号、借书日期、到期日期、罚款金额等。读者信息包括借书证号、姓名、班级、学号、类别等。创建图书管理系统,该系统运行时在控制台中显示菜单界面进行键盘输入操作,模拟借阅图书的管理过程。
系统功能包括以下方面: A、图书信息管理
图书按类别进行管理,常见类别有书籍、期刊、报刊等,在该模块中又包含添加、删除、修改、查询等操作,操作结果打印在控制台中。
字段包含:书名,编号,类别,存放地点,入库时间
B、借阅信息管理
图书借阅模拟操作,包括以下功能:借出,归还和续借等操作,对超期图书进行罚款金额显示。另外可以设置罚金数额和最大借阅数量和时间等参数。
字段包含:书名,编号,借阅者,借出时间,归还时间,借阅状态,超期时间,最大借阅数
C、读者信息管理
读者分为教师和学生两大类等级:教师和学生的最大图书借阅数量和时间有所不同,并可对添加、挂失和查询读者信息。
字段包含:读者姓名,读者类别,可借阅时间,可借阅数量,系统操作过程中能够正确读取和更新文件,并进行正常的图书、借阅和读者管理操作。
课题2:个人通讯录管理系统
在磁盘上建立1个communication.txt文件,作为读取和存储的通讯录,该系统运行时在控制台中显示菜单界面进行键盘输入操作,模拟通讯录的操作过程。
系统功能包括以下方面:
A、通讯录的每位联系人信息有姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。
B、输入、查找、删除、修改联系人信息功能。
C、显示功能:能够显示所有联系人信息(大于10条的分屏显示),或按分类进行显示。D、分类操作:可以按分类信息进行同一类的联系人操作,比如显示、删除和查找操作。E、(选作)可以加载联系人头像并进行显示,可用字符拼图或读取已有的黑白图片文件。系统操作过程中能够正确读取和更新文件,并进行正常的通讯录联系人操作。
课题3:职工工资管理系统
在计算机中建立相应的数据结构,利用程序实现工资的输入、查询、增、删、改、统计、输出等操作。
1、设计一个能够记录公司员工工资的数据结构(比如包括:员工号,姓名,基本工资,补贴金额,奖励金额,扣除金额、实发工资等)、文件(文件作为工资数据的保存介质)。注:,其中实发工资=基本工资+补贴金额+奖励金额-扣除金额
2、应用文件保存工资管理数据。
3、新增:能将所有输入的员工工资数据保存到文件中,并可选择继续输入或退出。
4、查找:输入员工的员工号,并在文件中查找
若找到,则显示该员工的工资详情 否则提示未找到。 无论查找成功否,应还可选择继续查找或退出。
5、删除:输入员工的员工号,并在文件中查找
若找到,提示是否确定删除
若选择是,则删除文件中该员工信息 若选择否,则取消, 否则提示无此员工信息
无论查找成功否,应还可选择继续查找或退出。
6、修改:输入员工的员工号,并在文件中查找
若找到,显示该员工的所有信息,并可进行输入。完成后将现输入的内容覆盖原内容保存到文件中。
否则提示无此员工信息
无论查找成功否,应还可选择继续查找或退出。
7、统计:分类汇总并输出所有员工的基本工资、补贴金额、奖励金额、扣除金额、实发工资的总金额和平均金额。如:
基本工资、补贴金额、奖励金额、扣除金额、实发工资
总和 12000 1300 1400 1500 13200 平均 1200 130 140 150 1320 人数: 10
8、退出:退出程序
课题4:自动售货机系统
某公司请你为其生产的自动售货机编写软件。这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。
自然,你的售货机用户希望尽可能地给用户找零,以免流失顾客。为了调查用户的喜好,希望得到三种商品的每日消费数据,由此来调整货柜中三种货物的存贮量。你的程序将实现以下功能:
库存查询:检索当前三种商品的储存量 商品上架:为三种商品增加或者减少储量
销售查询:分别统计今天每种商品的销售量和销售额 会计查询:打印当天的往来帐目以及剩余零钞数目
结算功能:取出今天所有的10元纸币,并且分别设置零钞的数目
销售界面:顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币 【题目要求】
(1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后操作员通过菜单项选择希望进行的操作项目;
(2)你的售货机用户不希望每一位顾客都有权限执行以上功能,因此一旦进入销售界面,就不应当退回到系统界面,但是应允许顾客反复购买,前一个顾客购买完毕后应停留在销售界面里允许下一个顾客操作。直到某位特殊的顾客(超级顾客)输入特殊的商品代号(密码)方可回到主控界面。
(3)计算机安排的找零算法应该合理,不要出现某一种零钱找光的情况。同时顾客也不喜欢 明明有5元零钞,却被找给5个一元的零钞。尽量满足这两个要求。
(3)、要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上所有结果保存在文件goods.txt。
【输入/输出要求】
(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。
课题5:销售管理系统
某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:
1)销售员的代号
2)产品的代号
3)这种产品的当天的销售额
每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(在磁盘上创建一个txt文件记录上个月的销售信息),进行如下处理。
1)计算上个月每个人每种产品的销售额。
2)按销售额对销售员进行排序,输出排序结果(销售员代号)
3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
4)输出统计报表
销售统计报表
产品代号
销售之和 销售员号 1 2 3 4 5 每种产品之和 总和
5)可以按产品代号查询,也可以按销售员号查询。
课题6: 车票管理系统一车站每天有n个发车班次,每个班次都有一班次号(1、2、3„n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如
班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 1 8:00 郫县 广汉 2 45 30 2 6:30 郫县 成都 0.5 40 40 3 7:00 郫县 成都 0.5 40 20 4 10:00 郫县 成都 0.5 40 2 „
(一)功能要求:用c语言设计一系统,能提供下列服务:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询 ,可按终点站查询(4)售票和退票功能
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
课题
7、单项选择题标准化考试系统
在磁盘上创建一个test.txt文件,使用记事本打开后先写入40道单选题和相应的选项和正确答案。再编写一个单项选择题标准化考试系统,该系统功能要求: 字段:题干,备选答案,标准答案
A、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)。B、试题录入、修改和删除。
C、试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)。D、考生答题:用户抽取N道试题进行答题,键盘输入每道题的答案。
E、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
系统操作过程中能够正确读取和更新试题文件,并进行正常的试题管理、抽取、答题和判卷操作,该过程在控制台中显示,人机交互方便。
课题8:医院门诊候诊的队列管理程序
要求采用先来先就诊的排队方式(就诊顺序与挂号单编号无关),假设挂号时编码是连续的,但由于同一个门诊科目有3个诊室,其中35(含35)岁以上的在第一诊室,35岁以下男患者进第二诊室,其它的进第三诊室,程序启动后显示下列菜单:
字段:挂号单号,患者姓名,年龄,性别,分诊室号,【实现提示】 1--挂号 2--叫号 3--分诊室
4--显示各诊室队列信息
5--统计当天就诊的患者情况(要求按性别进行统计和按任意年龄区段进行统计)6--结束程序
选1时,提示用户在一行内输入姓名及挂号单编号;
选2时,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除 选3时,进行诊室分配
选4时,按队列顺序显示个诊室排队人的姓名、挂号单编号及所在诊室 选5时,进行两种统计方法的选择,并进行必要的统计计算 选6时,退出程序的运行
要求1~5中每一个步骤完成后都能重新显示此选择菜单
课题9:成绩管理系统
现有学生成绩信息,内容如下
姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 „.......„
请用C语言编写一系统,实现学生信息管理,软件的功能要求如下:(1)信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:
要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果
课题10:停车场管理系统设计
1.有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层.(停车场可用一个二维数组实现, 每个数组元素存放一个车牌号)每辆车的信息包括车牌号, 层号, 车位号, 停车时间共4项.其中停车时间按分钟计算
2.假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5.即先将这四辆车的信息存入文件”car.dat”中(数组的对应元素也要进行赋值)3.停车操作: 当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号(分配前先查询车位的使用情况, 如果第一层有空则必须停在第一层), 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5.4.收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元.(停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零).按用户的选择来判断是否要输出停车收费的总计.5.输出停车场中全部车辆的信息.6.退出系统.字段:车牌号,楼层号,车位号,入库时间,出库时间,停车时间,停车费用
第二部分:基础训练
若感觉直接完成所选课题很困难,可以尝试先完成基础训练。完成基础训练,有一定的编程基础后,在完成所选课题。
第一步: 定义一个结构体类型,用来表示学生的各种属性。定义一个学生结构体变量,从键盘输入各个分量的值,然后从屏幕输出该结构体变量的各个分量。学生结构体类型定义如下:
typedef struct _CStudent { char szName[20];/* 学生姓名 */ char nNumber[10] /* 学号 */ int nAge;/* 年龄 */ char cSex;/* 性别,约定 „m‟ 代表女,„f‟代表男 */ char szAddress[20];/* 家庭地址 */ double dDataStruct;/* 数据结构成绩 */ double dMath;/* 数学成绩 */ double dEnglish;/* 英语成绩 */ }CStudent;
第二步:
定义一个结构体类型,用来表示学生的各种属性。定义一个含3个元素的学生结构体变量数组,从键盘输入3个同学的信息,然后从屏幕输出该结构体变量数组各成员的值。
建议:定义两个函数,一个用于从键盘输入一个学生结构体变量的各个分量的值,另一个把一个学生结构体变量的值输出到屏幕。函数原型可以如下:
void input(CStudent* p)/* 从键盘输入 */ void output(CStudent* p)/* 向屏幕输出 */
第三步:
从键盘输入一个学生的信息,然后以文本方式写入文件。定义另一个学生结构体变量,用于从文件读出数据,然后把数据显示到屏幕。
第四步:
定义一个含3个元素的学生结构体数组,从键盘输入3个同学的信息,以文本方式把这些数据写入文件。
第五步:
将课题4写入文件的数据全部读出,输出到屏幕。
附录一:
本设计中需要清屏。说明如下:
格式:
system(“cls”)包含头文件: stdlib.h
附录二:控制台程序选择菜单的完成
#include
int main(){ int choice1 = 1, choice2;
do {
printf(“欢迎使用学生成绩管理系统n”);
printf(“请选择程序功能n”);
printf(“
1、数据录入n”);
printf(“
2、数据查询n”);
printf(“
3、输出所有同学信息n”);
printf(“
4、退出程序n”);
scanf(“%d”, &choice1);
switch(choice1)
{
case 1:
printf(“数据录入n”);
/*编写数据录入程序*/
printf(“返回上级菜单请按n退出程序请按n”);
scanf(“%d”, &choice1);
break;
case 2:
printf(“
1、按学号查询n”);
printf(“
2、按姓名查询n”);
scanf(“%d”, &choice2);
switch(choice2)
{
case 1:
printf(“按学号查询n”);
/*编写按学号查询程序*/
break;
case 2:
printf(“按姓名查询n”);
/*编写按姓名查询程序*/
break;
}
printf(“返回上级菜单请按n退出程序请按n”);
scanf(“%d”, &choice1);
break;
case 3:
printf(“输出所有同学信息n”);
/*编写输出所有同学信息程序*/
printf(“返回上级菜单请按n退出程序请按n”);
scanf(“%d”, &choice1);
break;
case 4:
break;
}
system(“cls”);}while(choice1!= 4);
printf(“程序结束n”);return 0;}
附录三:关于菜单的处理技术举例 #include
int menu_select();/*主菜单函数*/ /******主函数开始*******/ main(){ int i;Salary sal[M];/*定义结构体数组*/ int length;/*保存记录长度*/ clrscr();/*清屏*/ for(;;)/*无限循环*/ { switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/ { case 1:length=enter(sal);break;/*输入记录*/ case 2:list(sal);break;/*显示全部记录*/ case 3:search(sal,name);break;/*按姓名查找显示记录*/ case 4:length=delete(sal);break;/*删除记录*/ case 5:length=add(sal);break;/*插入记录*/ case 6:save(sal);break;/*保存文件*/ case 7:length=load(sal);break;/*读文件*/ case 8:display(sal);break;/*按序号查找显示记录*/ case 9:sort(sal);break;/*排序成新文件*/ case 10:copy(sal);break;/*数据备份*/ case 0:exit(0);/*如返回值为0则程序结束*/ } } } /*菜单函数,函数返回值为整数,代表所选的菜单项*/ menu_select(){ char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/ printf(“press any key enter menu......n”);/*提示按任意键进入菜单选择*/ getch();/*读入任意字符*/ clrscr();/*清屏*/ gotoxy(1,1);printf(“********************MENU*********************nn”);printf(“ 1.Enter a recordn”);printf(“ 2.List the filen”);printf(“ 3.Search record on namen”);printf(“ 4.Delete a recordn”);printf(“ 5.Add record n”);printf(“ 6.Save the filen”);printf(“ 7.Load the filen”);printf(“ 8.Display record on ordern”);printf(“ 9.Sort to a new filen”);printf(“ 10.Copy to a new file n”);printf(“ 0.Quitn”);printf(“***********************************************n”);do{ printf(“n Enter you choice(0~10):”);/*提示输入选项*/ scanf(“%d”,&c);/*输入选择项*/ }while((c>10)||(c<0));/*选择项不在0~11之间重输*/ return c;/*返回选择项,主程序根据该数调用相应的函数*/ }
附录四:关于头文件的使用
/******头文件(.h)***********/ #include “stdio.h” /*I/O函数*/ #include “stdlib.h” /*标准库函数*/ #include “string.h”/*字符串函数*/ #include “ctype.h” /*字符操作函数*/ #define M 50 /*定义常数表示记录数*/ typedef struct /*定义数据结构*/ { char name[20];/*姓名*/ char no[10];/*员工编号*/ char units[30];/*部门*/ char post[10];/*职称*/ „„ }Salary;/******以下是函数原型*******/ int enter(SALARY t[]);/*输入记录*/ void list(SALARY t[]);/*显示全部记录*/ void search(SALARY t[],char name[]);/*按姓名查找显示记录*/ int delete(SALARY t[]);/*删除记录*/ int add(SALARY t[],int n);/*插入记录*/ void save(SALARY t[]);/*记录保存为文件*/ int load(SALARY t[]);/*从文件中读记录*/ void display(SALARY t[]);/*按序号查找显示记录*/ void sort(SALARY t[]);/*排序成新文件*/ void copy(SALARY t[]);/*数据备份*/ int menu_select();/*主菜单函数*/
附录五:关于文件的使用
要将信息永久保存,可采用磁盘文件的形式来存储数据。C语言提供了丰富的文件操作函数。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
ASC码:00110101 00110110 00110111 00111000
↓
↓
↓
↓
十进制码: 5 共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。
二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。在C语言中,文件操作都是由库函数来完成的。
文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式)其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如: FILE *fp;fp=(“file a”,“r”);其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
又如:FILE *fphzk;fphzk=(“c:hzk16',”rb“)其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“ ”中的第一个表示转义字符,第二个表示根目录。使用文件的方式共有12种,下面给出了它们的符号和意义。
文件使用方式
意 义
“rt”
只读打开一个文本文件,只允许读数据 “wt”
只写打开或建立一个文本文件,只允许写数据 “at”
追加打开一个文本文件,并在文件末尾写数据 “rb”
只读打开一个二进制文件,只允许读数据 “wb”
只写打开或建立一个二进制文件,只允许写数据 “ab”
追加打开一个二进制文件,并在文件末尾写数据 “rt+”
读写打开一个文本文件,允许读和写 “wt+”
读写打开或建立一个文本文件,允许读写
“at+”
读写打开一个文本文件,允许读,或在文件末追加数据 “rb+”
读写打开一个二进制文件,允许读和写 “wb+”
读写打开或建立一个二进制文件,允许读和写
“ab+”
读写打开一个二进制文件,允许读,或在文件末追加数据
fclose函数
调用的一般形式是: fclose(文件指针); 例如:fclose(fp);正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。文件的读写对文件的读和写是最常用的文件操作。
读字符串函数fgets函数
fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志' '。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。
对fgets函数有两点说明:一是,在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。二是,fgets函数也有返回值,其返回值是字符数组的首地址。
写字符串函数fputs fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针)其中字符串可以是字符串常量,也可以是字符数组名,或指针 变量,例如:fputs(“abcd“,fp);其意义是把字符串“abcd”写入fp所指的文件之中。
数据块读写函数fread和fwrite C语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp);写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp);其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。
例如:fread(fa,4,5,fp);其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。
从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。#include
本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中,然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。
getch();exit(1);}
printf(”ninput datan“);for(i=0;i<2;i++,pp++)scanf(”%s%d%d%s“,pp->name,&pp->num,&pp->age,pp->addr);pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);rewind(fp);
fread(qq,sizeof(struct stu),2,fp);printf(”nnnametnumber age addrn“);for(i=0;i<2;i++,qq++)
printf(”%st%5d%7d%sn“,qq->name,qq->num,qq->age,qq->addr);
fclose(fp);}
格式化读写函数fscanf和fprintf fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:fscanf(fp,”%d%s“,&i,s);fprintf(fp,”%d%c",j,ch);
文件的随机读写
前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据。但在实际问题中常要求只读写文件中某一指定的部分。为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek函数。
rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。
fseek函数。
fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
起始点
表示符号
数字表示
────────────────────────── 文件首
SEEK—SET
0 当前位置
SEEK—CUR
文件末尾
SEEK—END
例如:fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。
文件检测函数
文件结束检测函数feof函数调用格式: feof(文件指针);功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
读写文件出错检测函数ferror函数调用格式: ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferror返回值为0表示未出错,否则表示有错。
文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针);功能:本函数用于清除出错标志和文件结束标志,使它们为0值。