#define _CRT_SECURE_NO_WARNINGS
#include "Student.h"//文件名称不区分大小写
void menu()
{
system("cls");//清空屏幕
printf("\n");
printf("\t\t --------------学生成绩管理系统--------------\n");
printf("\t\t︱\t\t 1 添加记录 ︱\n");
printf("\t\t︱\t\t 2 显示记录 ︱\n");
printf("\t\t︱\t\t 3 修改记录 ︱\n");
printf("\t\t︱\t\t 4 删除记录 ︱\n");
printf("\t\t︱\t\t 5 查找记录 ︱\n");
printf("\t\t︱\t\t 6 排序记录 ︱\n");
printf("\t\t︱\t\t 0 退出系统 ︱\n");
printf("\t\t --------------------------------------------\n");
printf("\t\t请选择(0-6):");
}
void add(struct student stu[])//结构体数组作为函数
{
int i, id = 0; //i作为循环变量,id用来保存新学号
char quit; //保存是否退出的选择
do
{
printf("学号:");
scanf("%d", &id);
for (i = 0; i < n; i++)//n是全局变量,在student.h里
{
if (id == stu[i].id) //假如新学号等于数组中某生的学号
{
printf("此学号存在!\n");
return;//提前结束函数
}
}
stu[i].id = id;
printf("姓名:");
scanf("%s",stu[i].name);
printf("语文成绩:");
scanf("%d", &stu[i].chinese);
printf("数学成绩:");
scanf("%d", &stu[i].math);
stu[i].sum = stu[i].chinese + stu[i].math; //计算出总成绩
n++; //记录条数加1
printf("是否继续添加?(Y/N)");
getchar();//接走缓冲区里的回车
scanf("%c", &quit);
}while(quit!='N'&&quit!='n');
}
void show(struct student stu[], int i)
{
printf("%-10d", stu[i].id);
printf("%-10s", stu[i].name);
printf("%-10d", stu[i].chinese);
printf("%-10d", stu[i].math);
printf("%-10d\n", stu[i].sum);
}
void showAll(struct student stu[])
{
int i;
printf("%-10s%-10s%-10s%-10s%-10s\n","学号", "姓名", "语文成绩", "数学成绩", "总分");
for (i = 0; i < n; i++)
{
show(stu, i);
}
}
void modify(struct student stu[])
{
char name[8], ch; //name用来保存姓名,ch用来保存是否退出的选择
int i;
printf("修改学生的记录。\n");
printf("请输入学生的姓名:");
scanf("%s", name);
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].name) == 0)
{
getchar(); //提取并丢掉回车键
printf("找到该生的记录,如下所示:\n");
printf("%-10s%-10s%-10s%-10s%-10s\n","学号", "姓名", "语文成绩", "数学成绩", "总分");//显示记录的标题
show(stu, i); //显示数组stu中的第i条记录
printf("是否修改?(Y/N)\n");
scanf("%c", &ch);
if (ch == 'Y' || ch == 'y')
{
getchar(); //提取并丢掉回车键
printf("姓名:");
scanf("%s",stu[i].name);
printf("语文成绩:");
scanf("%d", &stu[i].chinese);
printf("数学成绩:");
scanf("%d", &stu[i].math);
stu[i].sum = stu[i].chinese + stu[i].math; //计算出总成绩
printf("修改完毕。\n");
}
return;//让函数提前结束
}
}
printf("没有找到该生的记录。\n");
}
void del(struct student stu[])
{
int id, i;
char ch;
printf("删除学生的记录。\n");
printf("请输入学号:");
scanf("%d", &id);
for (i = 0; i < n; i++)
{
if (id == stu[i].id)//两个等号
{
getchar();
printf("找到该生的记录,如下所示:\n");
printf("%-10s%-10s%-10s%-10s%-10s\n","学号", "姓名", "语文成绩", "数学成绩", "总分"); //显示记录的标题
show(stu, i); //显示数组stu中的第i条记录
printf("是否删除?(Y/N)\n");
scanf("%c", &ch);
if (ch == 'Y' || ch == 'y')
{
for(; i < n; i++)
stu[i] = stu[i + 1];//被删除记录后面的记录均前移一位
n--; //记录总条数减1
printf("删除成功!");
}
return;
}
}
printf("没有找到该生的记录!\n");
}
void search(struct student stu[])
{
char name[8];
int i;
printf("查找学生的记录。\n");
printf("请输入学生的姓名:");
scanf("%s",name);
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].name) == 0)
{
printf("找到该生的记录,如下所示:\n");
printf("%-10s%-10s%-10s%-10s%-10s\n","学号", "姓名", "语文成绩", "数学成绩", "总分"); //显示记录的标题
show(stu, i); //显示数组stu中的第i条记录
return;
}
}
printf("没有找到该生的记录。\n");
}
void sort(struct student stu[])
{
int i, j;
struct student t;
printf("按总成绩进行排序,");
for (i = 0; i < n - 1; i++) //双层循环实现总分的比较与排序
{
for (j = i + 1; j < n; j++)
{
if (stu[i].sum < stu[j].sum)
{
t = stu[i];
stu[i] = stu[j];
stu[j] = t;
}
}
}
printf("排序结果如下:\n");
showAll(stu); //显示排序后的所有记录
}