头部文件
#include
#include
#include
#include
//定义一个学生
typedef struct _Student
{
char name[20]; //姓名
int age; //年龄
int stuNum; //学号
int score; //成绩
}Student;
//节点()车厢
typedef struct _Node
{
Student stu;//学生
struct _Node* pNext;//指向下一个节点的指针
}Node;
Node *g_pHead = NULL;//头节点
//声明欢迎
void Welcome();
//声明录入学生信息
void InputStudent();
//打印学生信息
void PrintfStudent();
//保存学生信息
void SaveStudent();
//读取学神信息
void ReadStudent();
//统计所有学生人数
int CountStudent();
//查找学生
Node* FindStudent();
//修改学生信息
void ModifyStudent();
//删除学生
void DeleteStudent();
源文件
#include "StudentManagerSystem.h"
int main()
{
while (1)
{
Welcome();//欢迎
char ch = getch();//从键盘接受一个字符
switch (ch)
{
case '1'://录入学生信息
InputStudent();
break;
case '2'://打印学生信息
PrintfStudent();
break;
case '3'://保存学生信息
SaveStudent();
break;
case '4'://读取学生信息
ReadStudent();
break;
case '5'://统计所有学生信息
printf("学生总人数为:%dn", CountStudent());
system("pause"); //暂停
system("cls"); //清屏
break;
case '6'://查找学生信息
{
Node* p = FindStudent();
if (p != NULL)
printf("学号:%dt姓名:%st年龄:%dt成绩:%dn", p->stu.stuNum, p->stu.name, p->stu.age, p->stu.score);
else
printf("没有找到该学员n");
system("pause"); //暂停
system("cls"); //清屏
break;
}
break;
case '7'://修改学生信息
ModifyStudent();
break;
case '8'://删除学生信息
DeleteStudent();
break;
case '0'://退出系统
printf("Bye Bye!!!n");
return 0;
default:
printf("你的输入有误,请重新输入n");
system("pause"); //暂停
system("cls"); //清屏
}
}
return 0;
}
void Welcome()//欢迎函数
{
printf("*************************************************n");
printf("*t欢迎使用高校学生成绩管理系统1.0t*n");
printf("*************************************************n");
printf("*ttt请选择功能列表tt*n");
printf("*************************************************n");
printf("*tt1.录入学生信息ttt*n");
printf("*tt2.打印学生信息ttt*n");
printf("*tt3.保存学生信息ttt*n");
printf("*tt4.读取学生信息ttt*n");
printf("*tt5.统计所有学生信息tt*n");
printf("*tt6.查找学生信息ttt*n");
printf("*tt7.修改学生信息ttt*n");
printf("*tt8.删除学生信息ttt*n");
printf("*tt0。退出系统ttt*n");
printf("*************************************************n");
}
//录入学生信息
void InputStudent()
{
//创建一个新节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
//头插法、尾插法
//头插法
if (g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
printf("请输入学生姓名:n");
scanf("%s", &pNewNode->stu.name);//从键盘接收一个字符串,整数等等
printf("请输入学生的年龄:n");
scanf("%d", &pNewNode->stu.age);//&:取地址运算符
printf("请输入学生的学号:n");
scanf("%d", &pNewNode->stu.stuNum);
printf("请输入学生的成绩:n");
scanf("%d", &pNewNode->stu.score);
printf("学生信息录入成功n");
system("pause"); //暂停
system("cls"); //清屏
}
//打印学生信息
void PrintfStudent()
{
system("cls"); //清屏
printf("*************************************************************n");
printf("*t欢迎使用高校学生成绩管理系统v1.0tt *n");
printf("*************************************************************n");
printf("*t学号t*t姓名t*t年龄t*t成绩*n");
printf("*************************************************************n");
//遍历列表
Node* p = g_pHead;
while (p != NULL)
{
printf("*t%dt*t%st*t%dt*t%d*n",
p->stu.stuNum,
p->stu.name,
p->stu.age,
p->stu.score);
p = p->pNext;
}
printf("*************************************************************n");
system("pause"); //暂停
system("cls"); //清屏
}
//保存学生信息
void SaveStudent()
{
//打开文件
FILE *fp = fopen("F:C语言stuinfo.data", "w");
if (fp == NULL)
{
printf("打开文件失败n");
return;
}
//遍历列表
Node* p = g_pHead;
while (p != NULL)
{
fwrite(&p->stu, 1, sizeof(Student), fp);
p = p->pNext;
}
//关闭文件
fclose(fp);
printf("保存文件成功n");
system("pause"); //暂停
system("cls"); //清屏
}
//读取学生信息
void ReadStudent()
{
//打开文件
FILE *fp=fopen("F:C语言stuinfo.data", "r");
if (fp == NULL)
{
printf("打开文件失败n");
return;
}
//读取文件
Student stu;
while (fread(&stu, 1, sizeof(Student), fp))
{
//创建一个新节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
memcpy(pNewNode,&stu, sizeof(Student));
//头插法
if (g_pHead == NULL)
{
g_pHead = pNewNode;
}
else
{
pNewNode->pNext = g_pHead;
g_pHead = pNewNode;
}
}
//关闭文件
fclose(fp);
printf("加载数据成功n");
system("pause"); //暂停
system("cls"); //清屏
}
int CountStudent()
{
int nCount = 0;//学生总数
//遍历列表
Node* p = g_pHead;
while (p != NULL)
{
nCount++;
p = p->pNext;
}
return nCount;
}
//查找学生
Node* FindStudent()
{
int nStuNum;
char szName[20];
printf("请输入要查找的学生的学号:n");
scanf("%d",&nStuNum);
printf("请输入要查找的学生的姓名:n");
scanf("%s",szName);
Node* p = g_pHead;
while (p != NULL)
{
//strcmp字符串比较函数
if (p->stu.stuNum == nStuNum || 0 == strcmp(p->stu.name, szName))
{
return p;
}
p = p->pNext;
}
return NULL;
}
//修改学生信息
void ModifyStudent()
{
int nStuNum;
printf("请输入需要修改的学生信息的学号:n");
scanf("%d", &nStuNum);
Node* p = g_pHead;
while (p != NULL)
{
//strcmp字符串比较函数
if (p->stu.stuNum == nStuNum )
{
printf("请输入要修改的学生姓名 年龄 成绩:n");
scanf("%s %d %d", p->stu.name,&p->stu.age,&p->stu.score);
printf("修改成功n");
break;
}
p = p->pNext;
}
if (p == NULL)
{
printf("没有找到该学生信息n");
}
system("pause"); //暂停
system("cls"); //清屏
}
void DeleteStudent()
{
int nStuNum;
printf("请输入要删除的学生的学号:n");
scanf("%d", &nStuNum);
Node* p1, *p2;
//判断是不是头节点
if (g_pHead->stu.stuNum == nStuNum)
{
p1 = g_pHead;
g_pHead = g_pHead->pNext;
free(p1);
return;
}
//不是头节点
Node* p = g_pHead;
while (p->pNext != NULL)
{
if (p->pNext->stu.stuNum == nStuNum)
{
p2 = p->pNext;
p->pNext = p->pNext->pNext;
free(p2);
system("pause"); //暂停
system("cls"); //清屏
return;
}
p = p->pNext;
if (p->pNext == NULL)
{
break;
}
}
if (p->pNext == NULL)
{
printf("没有找到该学员");
}
system("pause"); //暂停
system("cls"); //清屏
}



