学生管理系统--微笑笑一个

学生管理系统–微笑笑一个

#include"weixiaodestudentManagement.h"//在本地目录优先搜索文件(为“<>”的话是优先在系统目录搜索文件)
int main()
{
	{
		system("title Student Management1.0--来自微笑笑一个");//修改控制台的标题
	}
	while(1)
	{
		//打印菜单
		Menu();
		//读取一个一个字符整数,字符在内存中映射为ASCII码
		char ch = _getch();//getch()函数不将读入的字符显示在屏幕上
		switch(ch)
		{
			case '1'://录入学生信息
				InputStudent();
				break;
			case '2'://打印学生信息
				PrintStudent();
				break;
			case '3'://保存学生信息
				SaveStudent();
				break;
			case '4'://读取学生的信息
				ReadStudent();
				break;
			case '5'://统计学生信息
				CountStudent();
				break;
			case '6'://查找学生信息
				FindStudent();
				break;
			case '7'://修改学生信息
				ChangeStudent();
				break;
			case '8'://删除学生信息
				DeleteStudent();
				break;
			default:
				printf("输入有误,没有该功能\n\n");
				system("pause");//暂停
				system("cls");//清屏
				break;
		}
	}
	return 0;
}
//菜单
void Menu()
{
	printf("*************************************************\n");
	printf("*\t  学生成绩管理系统 Versioning 1.0  \t*\n");
	printf("*\t欢迎使用高校学生成绩管理系统V 1.0\t*\n");
	printf("*\t\t请选择功能\t\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");
}
//1.录入学生信息
void InputStudent()
{
//创建的单个学生在堆中分配内存(动态内存分配)
Node*pNewNode = (Node*)malloc(sizeof(Node));
/*(Node*):中Node是类型说明符,将其强制转换为该类型的指针等于号的左边是Node类型的指针,sizeof(Node):中的Node在内存的动态存储空间中分配一块“Node”字节的连续存储空间,函数的返回值是该区域的首地址。*/
malloc(100);
//指针下一个指向空
pNewNode->pNext = NULL;//(pNewNode是"new"的一个新节点,这里的new指的是新建一个新节点)
//查找链表的尾节点
Node*p = g_pHead; /*(Node*p = Node*g_pHead这里使用*p代替*g_phead(指针指向头节点,即指针指向头指针指向的位置))
while(g_pHead !=NULL&&p->pNext !=NULL)(g_pHead是前面创建的头结点,p->pNext=Node *p->taqNode*pNext)(指向头结点的指针不为空,指向下一个节点的指针不为空)*/
{
	p=p->pNext;//(Node*p = Node*g_pHead这里使用*p代替*g_phead(指针指向头节点))
}
//把节点插到链表的尾节点
if(g_pHead == NULL)
{
	g_pHead = pNewNode;//(+1分配内存空间的首地址,(没有输入,没有分配存储空间))
}
	else{
	p->pNext = pNewNode;//(+1分配内存空间的首地址,(根据你输入的动态内存分配的空间))
}
	//录入学生信息
	printf("请输入学生姓名:\n");
	scanf_s("%s",pNewNode->stu.szName, sizeof(pNewNode->stu.szName));/*(stu指的是前面定义的Student	类型的变量,(scanf()函数中“,”后面跟的是地址))*/
	printf("请输入你的性别:\n");
	scanf_s("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));//类似于数组
	printf("请输入你的年龄:\n");
		scanf_s("%d", &pNewNode->stu.nAge);
	printf("请输入你的学号:\n");
	scanf_s("%d", &pNewNode->stu.nStuNo);
	printf("请输入你的成绩:\n");
		scanf_s("%d", &pNewNode->stu.nScore);
	printf("学生的信息录入成功!\n");
	system("pause");
	system("cls");
	}
//2.打印学生的信息
void PrintStudent()//(void:在这里指无返回值的函数)
{
	system("cls");
	//遍历链表
	Node*p = g_pHead;
	if(p==NULL)//(判断p指针是否为null)
	{
		printf("查无此学生");//没有录入学生信息就直接打印
	}
	else{
		printf("*********************************************************************************\n");
		printf("*\t\t\t学生成绩管理系统 Versioning 1.0\t\t\t*\n");
		printf("*********************************************************************************\n");
		printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
		printf("*********************************************************************************\n");
		while(p !=NULL)
			{
				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);
				p = p->pNext;
				printf("*********************************************************************************\n");
					}
				}
				system("pause");
				system("cls");
				}
此处之前无误
//3.保存学生信息
void SaveStudent(){
//打开文件
FILE*pFile;//文件结构体指针(FILE类型的指针)
pFile = fopen(".\\save.dat","w");//(在cpp文件的同文件目录下创建一个save.dat的文件)
if(pFile == NULL)//文件指针为null
{
	printf("抱歉,打开文件失败\n");
	return}
//写入数据
Node*p = g_pHead;//(指针指向头指针的位置)
while(p != NULL)(若指针p不是空指针)
{
	fwrite(&p->stu,sizeof(Node),1,pFile);//将数据写入文件流,&p->stu(写入的地址),总共写入的字符数,返回实际写入的数目,pfile为FILE*pFile(打开的文件指针)
	p=p->pNext;
}
//关闭文件
fclose(pFile);
printf("数据保存成功。\n");
system("pause");
system("cls");
}

//4.读取学生信息
	void ReadStudent()
{
	system("cls");
	//遍历链表
	Node*p = g_pHead;
	if(p==NULL)
	{
		printf("系统中暂无学生信息,请录入学生数据后再来查看。\n\n");
	}
	else{
		printf("*********************************************************************************\n");
		printf("*\t\t\t学生成绩管理系统 Versioning 1.0\t\t\t*\n");
		printf("*********************************************************************************\n");
		printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
		printf("*********************************************************************************\n");
		while(p!=NULL)
		{
			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.nAge,
				p->stu.nScore

			);

			//下一个节点
			p = p->pNext;
			printf("*********************************************************************************\n");
			}
		}
		system("pause");
		system("cls");
		}
//统计所有学生人数
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.查找学生信息
	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 = ture;
		}
			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.Score
		);
			isFindStu = ture;
			printf("*********************************************************************************\n");
		}
			p = p->pNext;
		}
			if(!isFindstu){
			printf("学号输入有误,系统暂无该学生的信息。\n\n");
			}
			system("pause");
			sysyem("cls");
			}
//7.修改学生信息
	void ChangeStudent(){
	//以学号为查找示例,其他信息查找流程基本相似
	int stuNum;
	printf("请输入与修改学生的号码:");
	scanf("%d",&stuNum);
	//遍历链表查找,查找到后进行信息显示
	Node* p = g_pHead;
	//对表头进行展示一次
	bool isShowhead = false;
	while(p!=NULL)
	{
		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.nAge,
			p->stu.nScore
			);
		//修改学生信息
		printf("请输入学生姓名:\n");
		scanf("%s",p->stu.szName,sizeof(p->stu.szName));
		printf("请输入性别:\n");
		scanf_s("%s",p->stu.szSex,sizeof(p->stu.szSex));
		printf("请输入学生年龄:\n");
		scanf_s("%d",&p->stu.nAge);
		printf("请输入学号:\n");
		scanf_s("%d",&p->stu.nStuNo);
		printf("请输入成绩:\n");
		scanf_s("%d",&p->stu.nScore);
		isFindStu = true;
		printf("*********************************************************************************\n");
		printf("学生信息修改成功,请注意及时保存。\n\n");
		}
		p = p->pNext;
		}
		if(!isFindStu)
		{
			printf("学号输入有误,系统中暂无该学生信息,无法进行修改。\n\n");
		}
		system("pause");
		system("cls");
		}
//8.删除学生信息
void DeleteStudent(){
	system("cls");
	//以学号为查找示例,其他信息查找流程基本相似
	int stuNum;
	printf("请输入删除学生的学号:");
	scanf_s("%d",&stuNum);
	//遍历链表查找,查找到后进行信息显示
	Node* p = g_pHead;
	//记录前一个节点,删除时方便操作
	Node *beforeNode = 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");
		//删除节点为头节点
		if(p == g_pHead)
		{
			g_pHead = p->pNext;
		}
		//删除节点为尾节点
		else if(p->pNext ==NULL)
		{
			p=beforeNode;
			p->pNext = NULL;
		}
		//删除节点为中间节点
		else
		{
			beforeNode->pNext = p->pNext;
		}
		printf("删除成功,请记得保存。\n\n");
		}
		beforeNode = p;
		p=p->pNext;
	}
	if(!isFindStu)
	{
		printf("学号输入有误,系统暂时无该学生的信息,无法进行删除操作。\n\n");
	}
	system("pause");
	system("cls");
}




#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>

首先我们要定义一个为student类型(相当于int float)的结构变量taqStudent
student 包括szName[](姓名)、szSex[](性别)nAge(年龄)nStuNo(学号)nScore(成绩)
/*结构模板:标记是book*/
typedef struct student{
char szName[20];//姓名
char szSex[4]//性别;
int nAge;//年龄
int nStuNo;//学号
int nScore;//成绩
}Student;
/*结构模板结束*/
//链表
//节点
typedef struct taqNode //(相当于定义的一个节点,struct taqNode指的是taqNode类型)
{
	Student stu;//节点中学生的信息
	struct taqNode*pNext;//指向下一个节点
}Node;(这代表一个类型)
(一个单向链表的节点被分为两个部分,一部分用来保存或显示关于节点的信息,另一部分用来存放下一个节点的地址)
(struct taqNode 相当于 Node)
//创建头节点
Node*g_pHead = NULL;//指向头节点的指针
//模块化
(一个主菜单包含:1.录入学生信息、2.打印学生信息、3.保存学生信息、4.读取学生信息、5.统计学生信息、6.查看学生信息、7.修改学生信息、8.删除学生信息)

//菜单
void Menu();
//1.录入学生信息
void InputStudent();
//2.打印学生信息
void PrintStudent();
//3.保存学生信息
void SaveStudent();
//4.读取学生信息
void ReadStudent();
//5.统计学生信息
void CountStudent();
//6.查找学生信息
void FindStudent();
//7.修改学生信息
void ChangeStudent();
//8.删除学生信息
void DeleteStudent();
先定义一个学生类型的结构
再定义一个节点类型的结构
然后模块化部分
菜单
录入学生信息
打印学生信息
保存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值