C语言编程学生成绩管理系统
·
目录
一、介绍
利用C语言,运用链表、指针、封装函数等基本知识实现一个学生管理系统。通过在终端对学生信息进行一系列操作。
基本思想流程图如下:
基本参数:
二、功能
1.录入学生
通过输入选项 0 匹配功能,进入录入学生信息的程序,将学生的信息录入到程序。
相关函数:
int insert_stu(Class_t *cls)
程序运行结果:
2.删除学生信息
通过输入选项 1 匹配功能,进入删除学生信息的程序,对指定学生的信息删除。
相关函数:
int delete_stu(Class_t *cls)
程序运行结果:
3.修改学生信息
通过输入选项 2 匹配功能,进入修改学生信息的程序,对指定学生的信息进行修改。
相关函数:
int update_stu(Class_t *cls)
程序运行结果:
4.查询学生信息
通过输入选项 3 匹配功能,进入查询学生信息的程序,将指定学生的信息打印出来。
相关函数:
int select_stu(Class_t *cls)
程序运行结果:
5.所有学生信息
通过输入选项 4 匹配功能,进入遍历学生信息的程序,将所有学生的信息打印出来。
相关函数:
void print_all_stu(Class_t *cls)
程序运行结果:
已提前录入aa、bb、cc、dd、ee相关信息。
6.成绩排序
通过输入选项 5 匹配功能,进入成绩排序的程序,将所有的学生按照总成绩降序排序,并打印所有学生的信息。
相关函数:
void sort_stu(Class_t *cls)
程序运行结果:
7.退出程序
通过输入选项 6 匹配功能,退出程序。
程序运行结果:
三、代码
1.主函数
#include "score.h"
//学生成绩管理系统
int main(int argc, const char *argv[])
{
int chose = 0;
int loop = 1;
// 1. 定义一个班级的的变量
Class_t *cls_p =(Class_t *)malloc(sizeof(Class_t));
if (cls_p == NULL)
{
printf("malloc failed!\n");
return -1;
}
// 初始化学生的个数, 数组的变量从第0开始的
cls_p->count = -1;
while (loop)
{
printf("################################################################\n");
printf("#### 0.录入 1.删除 2.修改 3.查询 4.遍历 5.排序 6.退出 ####\n");
printf("################################################################\n");
printf("请输入你的选择 > ");
scanf("%d", &chose);
while (getchar() != '\n'); // 循环吃掉所有的垃圾字符
switch (chose)
{
case INSERT:
insert_stu(cls_p);
break;
case DELECT:
delete_stu(cls_p);
break;
case UPDATE:
update_stu(cls_p);
break;
case SELECT:
select_stu(cls_p);
break;
case PRINT:
print_all_stu(cls_p);
break;
case SORT:
sort_stu(cls_p);
print_all_stu(cls_p);
break;
case QUIT:
loop = 0;
printf("退出学生成绩管理系统\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
if (!loop)
{
break;
}
}
if (cls_p != NULL)
{
free(cls_p);
cls_p = NULL;
}
return 0;
}
2.头文件
#ifndef __SCORE_H__
#define __SCORE_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 班级学生的最大的个数
#define NUM 100
// 学生成绩管理系统的功能
#define INSERT 0//插入
#define DELECT 1//删除
#define UPDATE 2//修改
#define SELECT 3//查询
#define PRINT 4//遍历
#define SORT 5//排序
#define QUIT 6//退出
//声明一个学生成绩组成的结构体类型
typedef struct student_score
{
int Maths;
int Chinese;
int English;
int Total_score;
}score_t;
// 声明一个学生的结构体类型
typedef struct Student /*不省略结构体名*/
{
char name[20];
int age;
char sex;
score_t score;
} Student_t;
// 声明一个班级的结构体类型
typedef struct /*省略结构体名*/
{
Student_t stu_arr[NUM];
int count; // 记录学生的个数
} Class_t;
int insert_stu(Class_t *cls);//录入
int delete_stu(Class_t *cls);//删除
int update_stu(Class_t *cls);//修改
int select_stu(Class_t *cls);//查询
void print_all_stu(Class_t *cls);//遍历
void sort_stu(Class_t *cls);//排序
#endif // __SCORE_H__
3.函数封装库
#include "score.h"
/*--------------------------------------------------------
功能:录入一个学生
参数:
@ cls :插入到哪个班级
返回值:
0:成功
-1:失败 学生满不可以插入
*/
int insert_stu(Class_t *cls)
{
if (NUM == cls->count-1)
{
printf("内存不足!插入失败!\n");
return -1;
}
cls->count++;
printf("请输入所要录入学生的相关信息\n");
printf("请输入姓名:");
scanf("%s",cls->stu_arr[cls->count].name);
printf("请输入年龄:");
scanf("%d",&cls->stu_arr[cls->count].age);
printf("请输入性别:");
scanf("%s",&cls->stu_arr[cls->count].sex);
printf("请输入成绩->\n");
printf("语文:");
scanf("%d",&cls->stu_arr[cls->count].score.Chinese);
printf("数学:");
scanf("%d",&cls->stu_arr[cls->count].score.Maths);
printf("英语:");
scanf("%d",&cls->stu_arr[cls->count].score.English);
cls->stu_arr[cls->count].score.Total_score = \
cls->stu_arr[cls->count].score.Chinese + \
cls->stu_arr[cls->count].score.English + \
cls->stu_arr[cls->count].score.Maths;
printf("总成绩:%-5d\n",cls->stu_arr[cls->count].score.Total_score);
printf("录入成功\n");
return 0;
}
/*---------------------------------------------------------
功能:删除一个学生,按照名字删除
参数:
@ cls : 删除哪个班级的学生
返回值:
0 :成功
-1 : 失败 没有学生的,查无此人
*/
int delete_stu(Class_t *cls)
{
char name[20] = "";
printf("请输入所要删除学生的姓名:");
scanf("%s",name);
int i,j = 0;
for(i = 0; i <= cls->count; i++){
if(!(strcmp(cls->stu_arr[i].name,name))){
for(j = i; j <= cls->count; j++){
cls->stu_arr[j] = cls->stu_arr[j+1];
}
printf("删除成功\n");
cls->count--;
return 0;
}
}
printf("查无此人\n");
return -1;
}
/*--------------------------------------------------------
功能:修改学生成绩,按照名字修改
参数:
@ cls : 修改哪个班级的学生
返回值:
0 : 成功
-1 : 失败 没有学生的,查无此人
*/
int update_stu(Class_t *cls)
{
char name[20] = "";
int i = 0;
printf("请输入需要修改成绩学生的姓名:\n");
scanf("%s",name);
for(i = 0; i <= cls->count; i++){
if(!strcmp(cls->stu_arr[i].name,name)){
printf("该学生语文成绩为:%d\n",cls->stu_arr[i].score.Chinese);
printf("请输入新的成绩:\n");
scanf("%d",&(cls->stu_arr[i].score.Chinese));
printf("该学生数学成绩为:%d\n",cls->stu_arr[i].score.Maths);
printf("请输入新的成绩:\n");
scanf("%d",&(cls->stu_arr[i].score.Maths));
printf("该学生英语成绩为:%d\n",cls->stu_arr[i].score.English);
printf("请输入新的成绩:\n");
scanf("%d",&(cls->stu_arr[i].score.English));
cls->stu_arr[cls->count].score.Total_score = \
cls->stu_arr[cls->count].score.Chinese + \
cls->stu_arr[cls->count].score.English + \
cls->stu_arr[cls->count].score.Maths;
printf("总成绩:%-5d\n",cls->stu_arr[cls->count].score.Total_score);
printf("修改成功\n");
return 0;
}
}
printf("查无此人\n");
return -1;
}
/*--------------------------------------------------------
功能:查询某个学生成绩,按照名字查询
参数:
@ cls : 查询哪个班级的学生
返回值:
0 : 成功
-1 : 失败 没有学生的,查无此人
*/
int select_stu(Class_t *cls)
{
char name[20] = "";
int i = 0;
printf("请输入姓名:");
scanf("%s",name);
for(i = 0; i <= cls->count; i++){
if(!(strcmp(cls->stu_arr[i].name,name))){
printf("查询成功\n");
printf("该学生成绩为->语文:%-4d数学:%-4d英语:%-4d总成绩:%-5d\n",\
cls->stu_arr[i].score.Chinese,\
cls->stu_arr[i].score.Maths,\
cls->stu_arr[i].score.English,\
cls->stu_arr[i].score.Total_score);
return 0;
}
}
printf("查无此人\n");
return -1;
}
/*--------------------------------------------------------
功能:打印所有学生成绩信息,
参数:
@ cls : 打印哪个班级的学生
*/
void print_all_stu(Class_t *cls)
{
int i = 0;
for(i = 0 ;i <= cls->count; i++){
printf("姓名:%-4s年龄:%-4d性别:%-4c成绩->语文:%-4d数学:%-4d英语:%-4d总成绩:%-5d\n",\
cls->stu_arr[i].name,\
cls->stu_arr[i].age,\
cls->stu_arr[i].sex,\
cls->stu_arr[i].score.Chinese,\
cls->stu_arr[i].score.Maths,\
cls->stu_arr[i].score.English,\
cls->stu_arr[i].score.Total_score);
}
}
/*--------------------------------------------------------
功能:对所有学生按照总成绩进行排序,
参数:
@ cls : 排序哪个班级的学生
*/
void sort_stu(Class_t *cls)
{
int i,j = 0;
Student_t temp;
for(i = 0; i <= cls->count -1; i++){
for(j = 0; j <= cls->count -1 -i; j++){
if(cls->stu_arr[j].score.Total_score < cls->stu_arr[j+1].score.Total_score)
{
temp = cls->stu_arr[j];
cls->stu_arr[j] = cls->stu_arr[j+1];
cls->stu_arr[j+1] = temp;
}
}
}
printf("排序成功\n");
}
更多推荐
已为社区贡献2条内容
所有评论(0)