学生成绩管理系统C语言(详解)附源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
// 描述学生信息的结构体
struct student
{
char name[18]; // 名字
int num; // 学号
double score[3]; // 3门课的成绩
double sum; // 总分
};
// 学生所有信息的结构体
struct stuSystem
{
struct student stu[MAX]; //系统用学生的信息的结构体数组stu[]来储存学生的信息
int curSize; //当前系统中有的学生数
};
// 创建系统的函数
struct stuSystem* createSystem()
{
//初始化结构体指针
struct stuSystem* pSystem = (struct stuSystem*)calloc(sizeof(struct stuSystem), 1);
return pSystem;
};
// 制作菜单
void makeMenu()
{
printf("---------------------------------------------n");
printf("tt 0. 退出系统 n");
printf("tt 1. 录入信息 n");
printf("tt 2. 浏览信息 n");
printf("tt 3. 删除信息 n");
printf("tt 4. 修改信息 n");
printf("tt 5. 查找信息 n");
printf("tt 6. 排序信息 n");
printf("---------------------------------------------n");
printf("---------请输入(0 ~ 7):");
}
// 录入学生信息的函数
void inputStu(struct stuSystem* pSystem)
{
struct student temp; // 结构体变量,临时储存用户输入的信息
printf("请输入学生的姓名和学号:");
scanf("%s%d",temp.name, &temp.num);
printf("请输入此学生3门课的成绩:");
temp.sum = 0;
for(int i = 0; i < 3; i++)
{
scanf("%lf",&temp.score[i]);
temp.sum += temp.score[i];
}
insertArray(pSystem, temp); // 插入数组函数(用于将用户输入的信息插入并储存在数组中)
}
// 插入(学生信息)数组函数
void insertArray(struct stuSystem* pSystem,struct student stuInfo)
{
if(pSystem -> curSize >= MAX) // 如果数组已经存满
{
printf("学生人数已满,无法录入!n");
return; // 直接返回
}
// 若没有存满
pSystem ->stu[pSystem ->curSize] = stuInfo; // 指针指向学生信息的数组并赋值
pSystem ->curSize++; // 指向现在已经存在学生数
}
//打印(学生信息)数组函数
void printfArray(struct stuSystem* pSystem)
{
printf("姓名t编号t数学t英语t体育t总分n");
for(int i = 0; i < pSystem ->curSize; i++)
{
printf("%st%dt",pSystem ->stu[i].name, pSystem ->stu[i].num); //打印姓名和学号
for(int j = 0; j < 3; j++)
{
printf("%.llft",pSystem ->stu[i].score[j]); // 打印各科成绩
}
printf("%.llfn",pSystem ->stu[i].sum); // 打印总分
}
}
//查找学生姓名函数
int searchArray(struct stuSystem* pSystem, const char* name)
{
for(int i = 0; i < pSystem ->curSize; i++)
{
if(strcmp(pSystem ->stu[i].name, name) == 0) // 运用比较字符串进行比较
return i; // 如果成功找到,返回数组下标
}
return -1; // 没有找到,返回-1
}
//删除(学生信息)数组函数(数组的移位操作)
void deleteArray(struct stuSystem* pSystem, const char* name)
{
int pos = searchArray(pSystem, name);
if(pos == -1)
{
printf("没有找到此学生,无法删除!n");
}
else
{
//利用指针的移位删除数组
for(int i = pos; i < pSystem ->curSize - 1; i++)
{
pSystem ->stu[i] = pSystem -> stu[i + 1];
}
pSystem ->curSize--;
printf("删除成功!n");
}
}
//修改(学生信息)数组函数
void modifyArray(struct stuSystem* pSystem, const char* name)
{
int pos = searchArray(pSystem, name);
if(pos == -1)
{
printf("没有找到此学生,无法修改!n");
}
else
{
printf("请输入该生新的姓名和学号:");
scanf("%s%d",pSystem ->stu[pos].name,&pSystem ->stu[pos].num);
printf("请输入新的三门课的成绩:");
pSystem ->stu[pos].sum = 0; //初始为零
for(int i = 0; i < 3; i++) //重新赋值
{
scanf("%lf",&pSystem ->stu[pos].score[i]);
pSystem ->stu[pos].sum += pSystem ->stu[pos].score[i];
}
printf("修改成功 n");
}
}
//(数组的)排序函数(冒泡排序)
void SortBySum(struct stuSystem* pSystem)
{
//按照总分排序
for(int i = 0; i < pSystem ->curSize; i++)
{
for(int j = 0; j < pSystem ->curSize - i - 1; j++)
{
if(pSystem ->stu[j].sum < pSystem ->stu[j + 1].sum)
{
struct student temp = pSystem ->stu[j];
pSystem ->stu[j] = pSystem ->stu[j + 1];
pSystem ->stu[j + 1] = temp;
}
}
}
}
//寻找并打开某一个系统的函数(打开系统的钥匙)
void keyDown(struct stuSystem* pSystem)
{
// 按键输入+开关语句(switch)
int userKey = 0;
scanf("%d",&userKey); // 输入钥匙
int result = userKey;
int pos = 0; // 查找判断
char name[18] = "";
switch(userKey) // 用钥匙打开系统的某个操作
{
case 0:
printf("------------退出系统-----------n");
printf("退出成功 n");
system("pause");
exit(0); //退出界面函数
break;
case 1:
printf("------------录入学生信息-----------n");
inputStu(pSystem); //调用输入函数
break;
case 2:
printf("------------浏览学生信息-----------n");
printfArray(pSystem); //调用打印学生信息函数
break;
case 3:
printf("------------删除学生信息-----------n");
printf("请输入要删除学生的姓名:");
scanf("%s",name);
deleteArray(pSystem, name); //调用删除函数
break;
case 4:
printf("------------修改学生信息-----------n");
printf("请输入修改学生的姓名:");
scanf("%s", name);
modifyArray(pSystem, name);//调用修改函数
break;
case 5:
printf("------------查找学生信息-----------n");
printf("请输入要查找的学生的姓名:");
scanf("%s",name);
pos = searchArray(pSystem, name); // 调用查找函数
if(pos == -1)
{
printf("未找到相关学生信息!n");
}
else
{
printf("姓名t编号t数学t英语t体育t总分n");
printf("%st%dt",pSystem ->stu[pos].name, pSystem ->stu[pos].num); //打印姓名和学号
for(int i = 0; i < 3; i++)
{
printf("%.lft", pSystem ->stu[pos].score[i]); // 打印各科成绩
}
printf("%.lfn", pSystem ->stu[pos].sum); // 打印总分
}
break;
case 6:
printf("------------学生排序信息-----------n");
SortBySum(pSystem); //调用排序函数
printfArray(pSystem); //然后调用打印函数打印信息
break;
default:
printf("输入错误!请重新输入!n");
break;
}
}
int main()
{
struct stuSystem* pSystem = createSystem(); //创建一个结构指针插入某个系统
while (1)
{
makeMenu(); // 调用函数并打印出菜单
keyDown(pSystem); //调用打开系统函数
system("pause");
}
return 0;
}
制作不易,还请三连支持!!!