学生成绩管理系统
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//怎么去描述一个学生
typedef struct tagStudent
{
char szName[10]; //姓名
int nAge; //年龄
int nStuNum; //学号
int nScore; //成绩
}Student;
//学生基本类型的别名
typedef int MYINT;
typedef struct tagNode
{
Student stu; //学生信息 数据域
struct tagNode* pNext; //指向下一个学生 指针域
}Node;
Node* g_pHead = NULL; //定义的第一个学生
//录入学生信息
void InputStudent();
//打印学生信息
void PrintStudent();
//保存学生信息
void SaveStudent();
//读取学生信息
void ReadStudent();
//统计所有学生人数
int CountStudent();
//查找学生信息
Node* FindStudent();
//修改学生信息
void ModifyStudent();
//删除学生信息
void DeleteStudent();
int main()
{
system("title 高校学生成绩管理系统");
system("color 0B");
printf("===============欢迎使用高校学生成绩管理系统====================\n");
while (1)
{
printf("\t=========请选择功能列表==========\n");
printf("\tt1.录入学生信息==========\n");
printf("\tt2.打印学生信息==========\n");
printf("\tt3.保存学生信息==========\n");
printf("\tt4.读取学生信息==========\n");
printf("\tt5.统计所有学生人数==========\n");
printf("\tt6.查找学生信息==========\n");
printf("\tt7.修改学生信息==========\n");
printf("\tt8.删除学生信息==========\n");
printf("\tt0.退出信息系统==========\n");
char ch;
scanf("%c", &ch);
//格式化去读一个字符
//&取地址运算符 内存地址
char a=getchar();
switch (ch)
{
case '1'://录入学生信息
InputStudent();
break;
case '2'://打印学生信息
PrintStudent();
break;
case '3'://保存学生信息
SaveStudent();
break;
case '4'://读取学生信息
ReadStudent();
break;
case '5'://统计所有学生人数
printf("当前学生总数:%d\n", CountStudent());
break;
case '6'://查找学生信息
{
Node* pNode = FindStudent();
if (pNode != NULL)
{
//打印学生信息
printf("学号:%d\t姓名:%s\t年龄:%d\t成绩:%d\n ",
pNode->stu.nStuNum,
pNode->stu.szName,
pNode->stu.nAge,
pNode->stu.nScore);
}
break;
}
case '7'://修改学生信息
ModifyStudent();
break;
case '8'://删除学生信息
DeleteStudent();
break;
case '0'://退出信息系统
printf("退出成功!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
//录入学生信息
void InputStudent()
{
printf("\n请输入学生信息:姓名 学号 年龄 成绩\n");
Node* p; //当前节点
p = g_pHead;
while (g_pHead != NULL && p->pNext != NULL)
{
p = p->pNext;
}
//定义一个新节点
Node* pNewNode = (Node*)malloc(sizeof(Node));
pNewNode->pNext = NULL;
if (g_pHead == NULL)
{
g_pHead = pNewNode;
p = g_pHead;
}
else
{
p->pNext = pNewNode;
}
//输入新的学员数据
//姓名 学号 年龄 成绩
scanf("%s %d %d %d",
pNewNode->stu.szName,
&pNewNode->stu.nStuNum,
&pNewNode->stu.nAge,
&pNewNode->stu.nScore
);
getchar();
printf("\n添加数据成功\n");
}
//打印学生信息
void PrintStudent()
{
system("cls");
printf("打印所有学生信息\n");
Node* p;
p = g_pHead;
while (p != NULL)
{
printf("学号:%d\t姓名:%s\t年龄:%d\t成绩:%d\n ",
p->stu.nStuNum,
p->stu.szName,
p->stu.nAge,
p->stu.nScore);
p = p->pNext;
}
}
//保存学生信息
void SaveStudent()
{
FILE* pFile = fopen("E:\\C++代码\\StudentsManageSystem\\StudentMessege.data", "w");//打开文件,写入文件
if (pFile ==0)
{
printf("打开文件失败\n");
return;
}
//写入数据
Node* p;
p= g_pHead;
while (p != NULL)
{
fprintf(pFile, "%d %s %d %d\n",
p->stu.nStuNum,
p->stu.szName,
p->stu.nAge,
p->stu.nScore);
p = p->pNext;
}
printf("保存成功\n");
//关闭文件
fclose(pFile);
}
//读取学生信息
void ReadStudent()
{
//首先删除链表每个节点
Node* p, * p2;//p2用于删除当前节点
p = p2 = g_pHead;
while (p2!=NULL)
{
p = p->pNext;
free(p2);
p2 = p;
}
g_pHead = NULL;
//从文件读取,每一个学员信息保存到链表节点
FILE* pFile = fopen("E:\\C++代码\\StudentsManageSystem\\StudentMessege.data","r");
if (pFile == NULL)
{
printf("打开文件失败!\n");
}
while (!feof(pFile))
{
Node* pTemp = (Node*)malloc(sizeof(Node));
//格式化读出
fscanf(pFile, "%d %s %d %d\n",
&pTemp->stu.nStuNum,
&pTemp->stu.szName,
&pTemp->stu.nAge,
&pTemp->stu.nScore);
if (g_pHead == NULL)
{
g_pHead = pTemp;
p = g_pHead;
}
else
{
p->pNext = pTemp;
p = p->pNext;
p->pNext = NULL;
}
}
//关闭文件
fclose(pFile);
}
//统计所有学生人数
int CountStudent()
{
int nCount = 0;
Node* p = g_pHead;
while (p!=NULL)
{
nCount++;
p = p->pNext;
}
return nCount;
}
//查找学生信息
Node* FindStudent()
{
int nStuNum;
printf("请输入要查找的学生学号:\n");
scanf("%d",&nStuNum);
Node* p = g_pHead;
while (p != NULL)
{
if (p->stu.nStuNum == nStuNum)
return p;
}
if (p == NULL)
{
printf("没有找到该学员信息!");
return NULL;
}
}
//修改学生信息
void ModifyStudent()
{
int nStuNum;
printf("请输入要查找的学生学号:\n");
scanf("%d", &nStuNum);
Node* p = g_pHead;
while (p != NULL)
{
if (p->stu.nStuNum == nStuNum)
{
printf("请输入要修改的信息:姓名 学号 年龄 成绩\n");
scanf("%s %d %d %d",
p->stu.szName,
&p->stu.nStuNum,
&p->stu.nAge,
&p->stu.nScore
);
getchar();
printf("修改成功\n");
break;
}
p = p->pNext;
}
if (p == NULL)
{
printf("没有找到该学员信息!");
}
}
//删除学生信息
void DeleteStudent()
{
int nStuNum;
printf("请输入要查找的学生学号:\n");
scanf("%d", &nStuNum);
getchar();
Node* p, * p2;
p=g_pHead;
if (g_pHead->stu.nStuNum == nStuNum)
{
p2 = g_pHead;
g_pHead = g_pHead->pNext;
free(p2);
return;
}
while (p->pNext != NULL)
{
if (p->pNext->stu.nStuNum == nStuNum)
{
p2 = p->pNext;
p->pNext = p->pNext->pNext;
free(p2);
return;
}
p = p->pNext;
}
}
项目一完成