10讲学会C语言之第10讲:学生管理系统

10讲学会C语言之第10讲:学生管理系统,第1张

文章目录
  • 前言
  • 一、文件 *** 作
  • 二、系统介绍
  • 三、作业


前言

大家好,我是卷卷,本节课是最后一讲,学生管理系统。本节课主要有以下三个部分:文件 *** 作,系统介绍,作业。(文末附课程资源和讨论q群号)


一、文件 *** 作

程序是在内存中运行的,一旦程序结束,运行期间输入的数据就会被释放。如何将数据保存到硬盘上呢?C语言提供了文件 *** 作。与文件相关的数据类型,函数都是定义在stdio头文件中的,所以无需额外声明一个头文件。接下来我们看如何使用文件 *** 作?首先定义一个文件指针FILE*,然后使用打开文件函数fopen。举例如下:

	FILE* fp;
	fp=fopen("filepath","type");

其中filepath是文件路径,用双引号包围。文件路径的分隔符用一个左斜杠“/”或两个右斜杠“\”。比如:C:\Windows\Boot或者C:/Windows/Boot
文件路径又分为绝对路径和相对路径,绝对路径就是具体的文件位置,比如上述例子。相对路径就是相对当前编程文件的路径。比如,我在D:/test路径下创建了cpp文件,在文件中使用文件 *** 作,则相对路径就是相对该cpp文件的目录而定的。比如路径”stu.txt”,它就放在和cpp文件同一目录下,即test文件内。而路径“…/stu.txt”就表示当前cpp文件的上一层目录,即D盘根目录。“…/”可以多次使用,表示往上追溯多级目录。
type是文件的打开方式,具体如表10.1所示。特别注意,在文件指针使用完后,应及时用fclose()关闭文件:fclose(fp);
             表10.1 文件的打开方式

最常用的使用方式是只读r,只写w和追加a。r是从文件中读取数据,一般用于查找 *** 作。w是向文件写入数据,一般用于修改 *** 作,注意写入之前会清空之前的数据。a是在文件末尾添加数据,一般用于增加 *** 作。接下来看下部分文件输入输出函数:
             表10.2 部分文件输入输出函数

最常用的函数:fgetc(),fscanf(),fprintf()。下面是文件指针移动函数:
关于偏移量,n表示偏移n个字节,也可以加上L,效果一样。关于起始位置,有三个宏定义:

起始点常量名常量值
文件开头SEEK_SET0
当前位置SEEK_CUR1
文件末尾SEEK_END2

接下来是实例:

#include
struct student{
	int no;
	double grade;
	char name[20];
};
student* stu=new student;
int main(){
	FILE* fp=fopen("test.txt","r+");
	if(fp){
		while(getc(fp)!=EOF){
			fseek(fp,-1L,SEEK_CUR);
			fscanf(fp,"%d %f",&stu->no,stu->grade);
		}
		stu->no=1,stu->grade=100;
		fprintf(fp,"%d %f",stu->no,stu->grade);
		fclose(fp);
	}
	return 0;
}

首先定义了一个结构体指针,然后以可读可写的形式打开文件。如果打开的文件不为空,则开始循环。每个文件都会有一个文件结束标志,它是-1或EOF。所以循环时,先读一个字符比如ch,看看这个ch是否为文件末尾标志。如果不是,就用fseek函数向前回溯一个单位,然后将文件信息输入到变量中。注意从文件输入变量用fscanf函数,输出到文件中用fprintf函数。然后将变量写入文件,最后不要忘了关闭文件哦。

二、系统介绍

1.系统功能模块:
查询学生信息会稍微复杂一点,包括两个子功能,按姓名查询和查询所有人,查询所有人功能上又有两个小功能,按年龄升序或者降序。

2.系统详细要求
(1)整体要求:完成增删改查功能,并将程序运行期间的数据保存到硬盘上。
(2)结构体:定义两个结构体,一个结构体表示学生个体。包括姓名,性别,年龄,专业,学号,班号。年龄用int,其余用char数组存储。另一个结构体表示结构体列表,存放学生结构体数组和数组长度。
(3)主界面:显示菜单,包括增加,修改,删除,查询,退出这5个选项。
(4)增加:输入要添加的人数,然后输入学生信息。并对输入的学号检测,若学号重复,则给出提示,并让用户反复输入直到学号不重复。添加完后,显示成功信息。每次输入数据后,将数据追加到txt文件中。
(5)删除:输入待删除的学生姓名,查找,包括重名的学生。若学生未找到,给出提示。若找到,则删除学生信息并给出提示。所有的删除 *** 作完成后,将所有数据写入txt文件。
(6)修改:输入待修改的学生姓名,查找,包括重名的学生。若学生未找到,给出提示。若找到,则让用户输入学生信息。并对输入的学号检测,做法和增加功能一样。修改完后,显示成功信息。所有的修改 *** 作完成后,将所有数据写入txt文件。
(7)查询:若无数据,给出提示。若有数据,给出查询方式:查询所有人或按姓名查询。按姓名查询包括重名的学生。查询所有人下再给出查询方式:按年龄降序或按年龄升序查询,用户选择其中一个后,对数据排序,输出结果。
(8)退出:退出程序即可。

3.部分运行结果展示:




三、作业

恭喜大家走到了这里,你们离掌握C语言还差一步!请完成前面要求的学生管理系统。建议尽量花时间去做,等做得差不多了再对答案。答案不作输入合法性检测,大家可在完成系统功能的基础上自行添加。有其它想法也可以动手实现,逐步完善自己的系统,这就是编程的乐趣。我相信大家做完后,C语言肯定都比较扎实了。感谢大家一直以来的坚持,你们的坚持就是我的动力。学会C语言仅是计算机学习的冰山一角,如果你对其它计算机知识感兴趣,希望你们能够顺着兴趣,再接再厉!最后祝大家学业有成,梦想成真!再见!!
课后作业和参考答案 提取码:l2du
讨论群号:1028887052

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/915189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存