C语言学生管理系统(末尾附加下载地址)

C语言学生管理系统(末尾附加下载地址)

一、项目简介
二、代码块简介

  1. 菜单界面的打印
  2. 打印录入学生信息
  3. 保存学生录入学生信息
  4. 读取学生信息
  5. 统计学生人数
  6. 查找学生信息
  7. 修改学生信息
  8. 删除学生信息
    三、导入源码编译运行报错——解决该问题
    1、导入到VC++6.0
    2、导入到Visual Studio
    四、总结及其下载链接

接下就一一给大家介绍
一、项目简介
该学生管理系统可以作为C语言初学者或进阶者做为一个参考,该管理系统并不是大家在生活中见到的为用户提供可视化界面的那种,该管理系统是运用到了C语言中的数据结构中的增、删、改、查、指针等,是一个类似DOS界面的管理系统运行界面如下:
在这里插入图片描述
二、代码块简介
1. 菜单界面的打印:
该环节可以直接用printf输出打印即可,运用到的就只有C语言初学的输入输出部分即可完成该项目的菜单界面,最后可在main()中调用即可完成。运行界面如上图所示代码如下:

void Menu() {
	printf("*************************************************\n");
	printf("*\t    欢迎使用该学生成绩管理系统\t\t*\n");
	printf("*\t    请输入数字0-8选择功能\t\t*\n");
	printf("*************************************************\n");
	printf("*\t\t1.录入学生信息\t\t\t*\n");
	printf("*\t\t2.打印学生信息\t\t\t*\n");
	printf("*\t\t3.保存学生信息\t\t\t*\n");
	printf("*\t\t4.读取学生信息\t\t\t*\n");
	printf("*\t\t5.统计所有学生人数\t\t*\n");
	printf("*\t\t6.查找学生信息\t\t\t*\n");
	printf("*\t\t7.修改学生信息\t\t\t*\n");
	printf("*\t\t8.删除学生信息\t\t\t*\n");
	printf("*\t\t0.退出系统\t\t\t*\n");
	printf("*************************************************\n");
}

2、打印录入学生信息
这里用到了数据结构的内容中的指针内容,就像大家排队一样,首相我们一定得有一个空间,才能完成信息的录入以及一下内容,先把空间建立好然后分配,接下来就是大家熟悉的输出(printf)与输入(scanf)来完成信息的录入以及打印,代码只能作为参考

void InputStudent() {
	//创建一个人,在堆中分配内存
	Node* pNewNode = (Node*)malloc(sizeof(Node));
	//指针下一个指向空
	pNewNode->pNext = NULL;

	//查找链表的尾结点
	Node* p = g_pHead;
	while (g_pHead != NULL && p->pNext != NULL)
	{
		p = p->pNext;
	}

	//把节点插到链表的尾节点
	if (g_pHead == NULL) {
		g_pHead = pNewNode;
	}
	else {
		p->pNext = pNewNode;
	}

	//录入学生信息
	printf("请输入学生姓名:\n");
	scanf("%s", pNewNode->stu.szName, sizeof(pNewNode->stu.szName));
	printf("请输入性别:\n");
	scanf("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));
	printf("请输入学生年龄:\n");
	scanf("%d", &pNewNode->stu.nAge);
	printf("请输入学号:\n");
	scanf("%d", &pNewNode->stu.nStuNo);
	printf("请输入成绩:\n");
	scanf("%d", &pNewNode->stu.nScore);
	printf("学生信息录入成功。\n\n");
	system("pause");
	system("cls");
}

在这里插入图片描述
3. 保存学生录入学生信息
该保存指的是在项目的文件夹中新建一个后缀为.dat的文档,将其录入的信息写入并且保存在该文档中(生成的文档为student.dat),其实也简单的,就是一个新建打开的代码来完成它的保存功能

void SaveStudent() {
	//打开文件
	FILE* pFile;
	pFile = fopen(".\\student.dat", "w");

	if (pFile == NULL) {
		printf("打开文件失败。\n");
		return;
	}

	//写入数据
	Node* p = g_pHead;
	while (p != NULL)
	{
		//fwrite(&p->stu, sizeof(Node), 1, pFile);
		fprintf(pFile, "*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
			p->stu.nStuNo,
			p->stu.szName,
			p->stu.szSex,
			p->stu.nAge,
			p->stu.nScore);
		p = p->pNext;
	}
	//关闭文件
	fclose(pFile);

	printf("数据保存成功。\n");
	system("pause");
	system("cls");
}

4. 读取学生信息
该功能并不复杂,简单的来说就是读取在上一步生成并且保存的student.dat文档中的信息

void ReadStudent() {
	system("cls");

	//打开文件
	FILE* pFile;
	pFile = fopen(".\\student.dat", "r");

	if (pFile == NULL) {
		printf("打开文件失败。\n");
		return;
	}

	//创建一个人,在堆中分配内存
	Node* p = (Node*)malloc(sizeof(Node));
	p->pNext = NULL;
	//重新建立链表
	g_pHead = p;

	//逐个单词读入文本内容
	char str[200];
	int i = 0;
	while (fscanf(pFile, "%s", str) != EOF) {  //读文件 
		//单词不是*或者空时,进行赋值
		if (strcmp(str, "*") && str != NULL) {
			switch (i)
			{
			case 0:
				p->stu.nStuNo = atoi(str);
				break;
			case 1:
				strcpy(p->stu.szName, str);
				break;
			case 2:
				strcpy(p->stu.szSex, str);
				break;
			case 3:
				p->stu.nAge = atoi(str);
				break;
			case 4:
				p->stu.nScore = atoi(str);
				break;
			default:
				Node* pNewNode = (Node*)malloc(sizeof(Node));
				pNewNode->pNext = NULL;
				p->pNext = pNewNode;
				p = pNewNode;
				p->stu.nStuNo = atoi(str);
				i = 0;
				break;
			}
			i++;
		}
	}
	//打印读取结果
	PrintStudent();
}

5. 统计学生人数
该功能只是借助countStu的打印来完成的

void CountStudent() {
	int countStu = 0;

	//遍历链表
	Node* p = g_pHead;
	while (p != NULL)
	{
		countStu++;
		p = p->pNext;
	}
	printf("学生总人数:%d\n\n", countStu);
	system("pause");
	system("cls");
}

6. 查找学生信息
首先输入输出不用说肯定是需要用到的,其次就是用到了链表中的查找功能,这里如果需要深入了解的话可能学过数据结构这门课的同学可以查看一下你们的课本,C语言只是用来作为业余的话就没有必要了,只需要知道了解一下链表以及它在C语言中中的用法即可。

void FindStudent() {
	system("cls");
	//以学号为查找示例,其他信息查找流程基本相似
	int stuNum;
	printf("请输入查找学生学号:");
	scanf("%d", &stuNum);
	//遍历链表查找,查找到后进行信息显示
	Node* p = g_pHead;
	//对表头进行展示一次
	bool isShowHead = false;
	//记录是否有找到该学号的学生信息
	bool isFindStu = false;
	while (p != NULL)
	{
		if (stuNum == p->stu.nStuNo) {
			if (!isShowHead) {
				printf("*********************************************************************************\n");
				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");				printf("*********************************************************************************\n");
				isShowHead = true;
			}
			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
				p->stu.nStuNo,
				p->stu.szName,
				p->stu.szSex,
				p->stu.nAge,
				p->stu.nScore
			);
			isFindStu = true;
			printf("*********************************************************************************\n");
		}
		p = p->pNext;
	}
	if (!isFindStu) {
		printf("学号输入有误,系统中暂无该学生信息。\n\n");
	}
	system("pause");
	system("cls");
}

在这里插入图片描述

以下的功能也是基本都是用到了链表中的增删改查的各个功能,如果需要深入了解的也可以为大家提供相应的书籍供大家在业余时间查看以及使用。
如果需要相应的书籍可联系博主获取
三、导入源码运行出错——解决该问题
1、导入到VC++6.0:一般情况该项目就是用该软件做的一般情况不会出错。(1)如果编译或运行出错,那可以先复制后缀为.CPP里面的源代码(为了方便大家的观看,所以把所有的源代码都放入在了一个CPP文件中了)(2)看一下软件是否安装安全或查看文件是否被删除过某个文件,这里建议从新安装该软件在进行编译运行
2、 2、导入到Visual Studio:
1)类似loadimage、mciSendString报错:解决方案中右键工程名>配置属性高级>字符集改改为“多字符集”。
2)类似scanf、fopen、sprintf报错:解决方案>右键工程名>属性>c/c++>预处理器>预处理器定义,编辑栏中输入提示编码(_CRT_SECURE_NO_WARNINGS)确定
3) 类似使用了可能未初始化的本地指针变量“p1”之类的报错:右键工程名>属性>C/C++常规>SDL检查>否
4)类似const char类型与char类型不兼容:属性>C/C++>语言>符合模式将是改为否
四、总结及其下载链接
该学生管理系统还是相对来说比较的完美了,如果需要制作可视化界面的话,可以在此功能及其原理上进行设计,不过也是需要长期的实践与积累。编程嘛还是需要多敲代码嘛,只看不实践那…。
实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。如果大家遇到什么问题的话也可以私信,或者加联系方式可以有人在线指导大家的,如有需要可以添加
希望该源文件能对你们有所帮助,有需要可以随时联系博主,请教或指导都可联系。
以下是下载该文件的地址
链接网盘下载:https://pan.baidu.com/s/1TUGJQUYfVk5Q6YbE4R9ZSw
提取码:9yg9
复制这段内容后打开百度网盘手机App,操作更方便哦
如若若过期也可以通过以下链接进行下载:
c语言学生管理系统_数据的增删改查(1、录入学生信息 2、打印学生信息 3、保存学生信息 4、读取学生信息 5、统计所有学生人数 6、查找学生信息 7、修改学生信息 8、删除学生信息 0、退出系统 9个功能)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小猿网

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

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

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

打赏作者

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

抵扣说明:

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

余额充值