头部文件
#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("学生总人数为:%d\n", CountStudent());
system("pause"); //暂停
system("cls"); //清屏
break;
case '6'://查找学生信息
{
Node* p = FindStudent();
if (p != NULL)
printf("学号:%d\t姓名:%s\t年龄:%d\t成绩:%d\n", 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.0\t*\n");
printf("*************************************************\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");
}
//录入学生信息
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.0\t\t *\n");
printf("*************************************************************\n");
printf("*\t学号\t*\t姓名\t*\t年龄\t*\t成绩*\n");
printf("*************************************************************\n");
//遍历列表
Node* p = g_pHead;
while (p != NULL)
{
printf("*\t%d\t*\t%s\t*\t%d\t*\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"); //清屏
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)