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


前言

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


一、文件操作

程序是在内存中运行的,一旦程序结束,运行期间输入的数据就会被释放。如何将数据保存到硬盘上呢?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<stdio.h>
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语言仅是计算机学习的冰山一角,如果你对其它计算机知识感兴趣,希望你们能够顺着兴趣,再接再厉!最后祝大家学业有成,梦想成真!再见!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值