C语言程序设计课程设计指导书_c语言课程设计指导书
C语言程序设计课程设计指导书由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“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 人数: 108、退出:退出程序
课题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 szAddre[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 #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 #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(“pre 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
附录四:关于头文件的使用
/******头文件(.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 struct stu{ char name[10];int num;int age;char addr[15];}boya[2],boyb[2],*pp,*qq;main(){ FILE *fp;char ch;int i;pp=boya;qq=boyb;if((fp=fopen(”stu_list“,”wb+“))== NULL){ printf(”Cannot open file strike any key exit!“);
本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中,然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。
getch();exit(1);}
printf(”ninput datan“);for(i=0;iname,&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
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值。