#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//定义学生
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; //头结点
Node *p,*g_pHead;
void Welcome();//界面
void InputStudent();//录入
void PrintStudent();//打印
int CountStudent();//统计
Node* FindStudent();//查找
void ModifStudent();//修改
void DeleteStudent();//删除
void SaveStudent();//保存
int main()
{
//界面
while(1)
{
Welcome();//调用
//从键盘接受一个字符
char ch = getch();
switch (ch)
{
case '1'://录入学生信息
InputStudent();
break;
case '2'://打印学生信息
PrintStudent();
break;
case '3'://统计所有学生人数
printf("学生总人数为:%d\n",CountStudent());
system("pause"); //暂停
system("cls"); //清屏
break;
case '4'://查找学生信息
{
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 '5'://修改学生信息
ModifStudent();
break;
case '6'://删除学生信息
DeleteStudent();
break;
case '7'://保存学生信息
SaveStudent();
break;
case '0'://退出
printf("bye bye !!!\n");
return 0;
default:
printf("您的输入有误,请重新输入.\n");
system("pause"); //暂停
system("cls"); //清屏
break;
}
}
return 0;
}
//界面
void Welcome()
{
printf("*****************************************\n");
printf("*\t\t学生管理系统\t\t*\n");
printf("*\t\t请选择操作选项\t\t*\n");
printf("*****************************************\n");
printf("*\t\t1.录入学生信息\t\t*\n");
printf("*\t\t2.打印学生信息\t\t*\n");
printf("*\t\t3.统计所有学生人数\t*\n");
printf("*\t\t4.查找学生信息\t\t*\n");
printf("*\t\t5.修改学生信息\t\t*\n");
printf("*\t\t6.删除学生信息\t\t*\n");
printf("*\t\t0.退出\t\t\t*\n");
printf("*****************************************\n");
}
//录入学生信息
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;//p的下一个节点为pNewNode
}
//输入新的学生数据
scanf("%s %d %d %d", pNewNode->stu.name, &pNewNode->stu.stuNum, &pNewNode->stu.age, &pNewNode->stu.score);
system("cls");
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.stuNum,
p->stu.name,
p->stu.age,
p->stu.score);
p = p->pNext;
}
}
//保存学生信息
void SaveStudent()
{
system("cls");
FILE *pFile = fopen("C:\\stuinfo.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.stuNum, p->stu.name, p->stu.age,p->stu.score);
p = p->pNext;
}
printf("数据保存成功\n");
//关闭文件
fclose(pFile);
}
//查找
Node* FindStudent()
{
int nStuNum;//学号
char sName[20];
printf("请输入查找学生的学号:\n");
scanf("%d",&nStuNum);
printf("请输入查找学生的姓名:\n");
scanf("%s",sName);
Node* p = g_pHead;
while(p != NULL)
{
//strcmp字符串比较函数
if(p->stu.stuNum == nStuNum || p->stu.name == sName)
{
return p;
}
p = p->pNext;
}
return NULL;
}
//修改
void ModifStudent()
{
int nStuNum;
printf("请输入需要修改的学生的学号:\n");
scanf("%d",&nStuNum);
Node* p = g_pHead;
while(p != NULL)
{
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);
system("pause"); //暂停
system("cls"); //清屏
return ;
}
//不是头结点
Node* p = g_pHead;
while(p2->pNext->stu.stuNum == nStuNum)
{
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("没有找到该学生信息.\n");
}
}
//统计
int CountStudent()
{
int n = 0;//学生总数
Node* p = g_pHead;
while(p != NULL)
{
n++;
p = p->pNext;
}
return n;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交