/************************************************************************
文件名称:main.c
文件描述:学生成绩管理系统
编译环境:只要有编译器
最后修改:
<2017年4月16日> <创建工程> <九夏老师>
主要的学习任务:
链表
文件操作
*************************************************************************/
#include "student.h"
STU *pStu = NULL; //定义一个指向空的指针.
FILE *fp; //文件指针
int main()
{
int choice;
//创建空头结点
pStu = (STU*)malloc(sizeof(STU)); //开辟一块空间 一个节点可以存放一个学生的信息.
pStu->pnext = NULL;
do
{
system("cls");
welcome();
scanf("%d", &choice); //从键盘输入一个选择 //1-4
//不同的选择进行不同的处理. 分支结构? if else else if switch
switch (choice) //choice 1
{
case 1:
//录入信息
AddInformation();
break;
case 2:
//查找信息
Search();
getchar();
getchar();
break;
case 3:
//删除信息
Delete();
break;
case 4:
//修改信息
Modify();
break;
}
} while (choice != 0);
return 0;
}
//界面
void welcome()
{
printf("\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t\t┃ 学生成绩管理系统 ┃\n");
printf("\t\t\t┣━━━━━━━━━━━━━━━━━━━┫\n");
printf("\t\t\t┃ 1.录入学生信息 ┃\n");
printf("\t\t\t┃ 2.查找学生信息 ┃\n");
printf("\t\t\t┃ 3.删除学生信息 ┃\n");
printf("\t\t\t┃ 4.修改学生信息 ┃\n");
printf("\t\t\t┃ 0.退出学生系统 ┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t请选择:");
}
//录入 创建链表 1.带空头结点的 2.没有空头节点
void AddInformation()
{
system("cls");
int num; //一次可以添加几个
STU* pTemp = pStu;
STU *pNew = NULL; //定义一个新的节点
//先把pTemp指向最后一个节点.
while (pTemp->pnext != NULL)
{
pTemp = pTemp->pnext;
}
printf("\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t\t┃ 添 加 学 员 信 息 ┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t请问您要添加几位学员:");
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
system("cls");
printf("\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t\t┃ 添 加 学 员 信 息 ┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
pNew = (STU*)malloc(sizeof(STU)); //为新的节点内存
printf("\t\t\t请输入第%d个学员的信息:\n",i+1);
printf("\t\t\t请输入学号:"); //为新节点填充信息
scanf("%d", &pNew->num);
printf("\t\t\t请输入姓名:");
scanf("%s", pNew->name); //char name[20]; name数组名.
printf("\t\t\t请输入语文成绩:");
scanf("%f", &pNew->chinese);
printf("\t\t\t请输入数学成绩:");
scanf("%f", &pNew->math);
printf("\t\t\t请输入英语成绩:");
scanf("%f", &pNew->english);
pNew->pnext = NULL;
pTemp->pnext = pNew;
pTemp = pNew;
}
}
//查找
void Search()
{
int choice;
do
{
system("cls");
printf("\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t\t┃ 查 找 学 员 信 息 ┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t1.全部浏览\n");
printf("\t\t\t2.按学号查找\n");
printf("\t\t\t3.按姓名查找\n");
printf("\t\t\t0.返回主菜单\n");
scanf("%d",&choice);
switch (choice)
{
case 1:
SearchAll();
break;
case 2:
SearchNum();
break;
case 3:
SearchName();
break;
}
} while (choice != 0);
}
void SearchAll()
{
//全部浏览
STU *pTemp = pStu->pnext; //新建一个临时节点 指向第一个有效节点
while (pTemp != NULL)
{
printf("%d\t%s\t%f\t%f\t%f\n", pTemp->num, pTemp->name, pTemp->chinese, pTemp->math, pTemp->english);
pTemp = pTemp->pnext;
}
getchar();
}
void SearchNum()
{
int keynum;
STU *pTemp = pStu->pnext;
printf("\t\t\t请输入要查找的学号:");
scanf("%d", &keynum);
while (pTemp != NULL) //通俗易懂 重要的环节需要去使用比较复杂的程序之外
//10%-30%
{
if (pTemp->num == keynum)
{
printf("\t\t\t查找到的信息:\n");
printf("\t\t\t 学号\t姓名\t语文\t数学\t英语\n");
printf("%d\t%s\t%f\t%f\t%f\n", pTemp->num, pTemp->name, pTemp->chinese, pTemp->math, pTemp->english);
getch();
return;
}
pTemp = pTemp->pnext;
}
printf("\t\t\t没有此学员!");
getch();
}
void SearchName() //8880 限时优惠活动 300多块钱
{
}
//删除
void Delete()
{
int keynum;
STU *pDele = pStu->pnext;
STU *pTemp = pStu;
printf("\t\t\t请输入要删除的学号:");
scanf("%d", &keynum);
while (pDele != NULL) //通俗易懂 重要的环节需要去使用比较复杂的程序之外
{
if (pDele->num == keynum) //需要删除的节点和前面一个节点
{
printf("\t\t\t已查找到的信息:\n");
printf("\t\t\t 学号\t姓名\t语文\t数学\t英语\n");
printf("%d\t%s\t%f\t%f\t%f\n", pDele->num, pDele->name, pDele->chinese, pDele->math, pDele->english);
printf("\t\t\t是否要删除?(y/n)");
char ch;
getchar();
ch = getchar();
if (ch == 'Y' || ch == 'y')
{
pTemp->pnext = pDele->pnext;
free(pDele);
return;
}
else
{
return;
}
}
pTemp = pTemp->pnext;
pDele = pDele->pnext;
}
printf("\t\t\t没有此学员!");
getch();
}
//修改
void Modify()
{
/**********************************
5000*4=20000
1000*5*2*4 =40000
//60000
8880 360 一天12
什么样的服务呢.
3个小时的课程.
改作业2小时.
发视频 发笔记代码.
全天答疑.
下午补课.
**********************************/
}
//总结
/***********************************************************************
链表就这么几个操作.
查找?
修改?
删除? free
1.vip 20:30-23:00 23:00-23:30 答疑当场课程的问题. //30%
2.视频 笔记 代码 反复的去学.
3.兴趣怎么来? 做出很多的项目.
4.为什么写不出来? 不管写什么 总后遇到问题.
答疑 白天 QQ 微信 电话 视频 远程. 解决掉. //70%
//学不会. 小学毕业,煤矿工人,我一直不要. 3000多.C/C++ 前端开发.
//一门课程 VIP不是一门课程 是一个平台.
//能力.
//人脉. VIP学员内部介绍.
//20+ 工作室 什么科技.
8个月太长.
***************************************************************************/