源文件
#include"StudentManagerSystem.h"
int main()
{
while(1)
{
Welcome(); //函数调用
char ch;
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': //查找学生信息
break;
case'7': //修改学生信息
break;
case'8': //删除学生信息
break;
case'0': //退出系统
break;
}
}
return 0;
}
void Welcome() //welcome函数体部分
{
printf("*****************************************************\n");
printf("*\t欢迎使用高校学生成绩管理系统V1.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");
}
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*\n");
printf("*****************************************************\n");
printf("*\t学号\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\t*\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("E:\\stuinfo.dat","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数据保存成功\n");
system("pause"); //暂停
system("cls"); //清屏
}
void ReadStudent()//读取学生信息
{
FILE* fp = fopen("E:\\stuinfo.dat","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;
}
头文件
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void Welcome(); //welcome函数声明
void InputStudent(); //录入学生信息
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 PrintfStudent();//打印学生信息
void SaveStudent();//保存学生信息
void ReadStudent(); //读取学生信息
int CountStudent();//统计学生总人数