🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分81+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)
注:
学生成绩管理系统(语法)简单实现http://t.csdnimg.cn/DDppq该篇是基于数据结构顺序表的学生管理系统👇gitee链接:基于数据结构顺序表的学生管理系统https://gitee.com/mei-tianbu/stay-up-late-coding
目录
目的
效果呈现
①学生数据添加
②查看学生数据
编辑
③删除及查看
代码的具体实现
一.在测试文件(StuScoreTest.c)框架构建
学生管理系统框架代码实现
二.在头文件(StuScore.h)定义学生管理系统的相关函数
三.在文件(StuScore.c)具体实现学生数据的增删查改
学生管理系统的初始化和销毁代码具体实现
学生增删查找的具体实现
学生数据添加代码具体实现
利用学生姓名寻找学生相关数据代码具体实现
学生数据删除具体实现
修改学生数据的具体实现
学生数据的完整查看具体实现
一个学生相关数据的查看具体实现
目的
针对学生信息(学号,姓名,性别,英语、数学、数据结构成绩、简介)进行
操作(添加、删除、修改、查找个人、查找全部)信息
效果呈现
①学生数据添加
②查看学生数据
③修改和查看
③删除及查看
代码的具体实现
一.在测试文件(StuScoreTest.c)框架构建
1.先基于顺序表的初始化学生管理系统
2.主函数学生管理系统利用在do...while...语句中包含switch...case..语句实现学生数据的增删查改操作的框架
3.再基于顺序表的销毁学生管理系统
学生管理系统框架代码实现
int main()
{
int op = -1;
Stu con;
//初始化学生管理系统
STUCS(&con);
do
{
menu();
printf("请选择你的操作:");
scanf("%d", &op);
switch (op)
{
case 1:
//添加学生数据
stuscoreadd(&con);
break;
case 2:
//删除学生数据
stuscoredel(&con);
break;
case 3:
//修改学生数据
stuscoremodify(&con);
break;
case 4:
//查找学生数据
stuscorefind(&con);
break;
case 5:
//查看完整学生数据
stuscoreshow(&con);
break;
case 0:
printf("成功退出系统\n");
break;
default:
printf("选择错误,请重新选择\n");
}
} while (op != 0);
//销毁学生管理系统
STUdestroy(&con);
return 0;
}
二.在头文件(StuScore.h)定义学生管理系统的相关函数
1.创建(学生相关数据类型)结构体和顺序表的前置声明
#pragma once #define MAX_NAME 100 //(学生相关数据类型)结构体 typedef struct stuscore { int id;//学号 char name[MAX_NAME];//姓名 char sex[5];//性别 float EngScore;//英语 float MathScore;//数学 float DatastrScore;//数据结构 char StudentProfile[1000]; }Stu; //顺序表的前置声明 struct shunxu; typedef struct shunxu stu;
2.定义学生管理系统的初始化和销毁,增添查改函数
//学生管理系统的初始化和销毁 void STUCS(stu* pcon); void STUdestroy(stu* pcon); //添加,删除,修改,查找,查找全部 void stuscoreadd(stu* pcon); void stuscoredel(stu* pcon); void stuscoremodify(stu* pcon); void stuscorefind(stu* pcon); void stuscoreshow(stu* pcon);
三.在文件(StuScore.c)具体实现学生数据的增删查改
1.学生管理系统的初始化和销毁(调用顺序表中的初始化和销毁)
调用代码
//初始化 void CS(SX* ps) { //具体arr,size,nowsize具体的值不知道是多少,所以初始化为NULL,0 ps->arr = NULL; ps->size = ps->nowsize = 0; } //销毁 void SXdestroy(SX* ps) { //保证指针有效 assert(ps); if (ps->arr) { free(ps->arr); } ps->arr = NULL; ps->size = ps->nowsize = 0; }
学生管理系统的初始化和销毁代码具体实现
//学生管理系统的初始化和销毁
void STUCS(stu* pcon)
{
CS(pcon);
}
void STUdestroy(stu* pcon)
{
SXdestroy(pcon);
}
学生增删查找的具体实现
2.学生数据的添加
①输入学生数据保存在结构体变量
②使用.访问结构体成员输入学生的数据(学号,姓名,性别,英语、数学、数据结构成绩、简介)
③基于顺序表的尾插将学生数据保存在学生管理系统里去
调用顺序表的尾部插入数据
//顺序表的尾插 void CHARUback(SX* ps, datatype x) { //方式一:断言 -- 暴力方式 --会报错且知道具体错误位置 assert(ps); //方式二:断言 -- 温柔方式--会报错,不知道具体错误位置 /*if (ps == NULL) { return; }*/ //空间不够,扩容 publicKUOR(ps); //空间足够,直接插入 /*第一种写法*/ //ps->arr[ps->size] = x; //ps->size++; /*第二种写法*/ ps->arr[ps->size++] = x; }
学生数据添加代码具体实现
//添加学生数据
void stuscoreadd(stu* pcon)
{
Stu stu;
printf("请输入学生学号:\n");
scanf("%d", &stu.id);
printf("请输入学生姓名:\n");
scanf("%s", stu.name);
printf("请输入学生性别:\n");
scanf("%s", stu.sex);
printf("请输入学生英语成绩:\n");
scanf("%f", &stu.EngScore);
printf("请输入学生数学成绩:\n");
scanf("%f", &stu.MathScore);
printf("请输入学生数据结构成绩:\n");
scanf("%f", &stu.DatastrScore);
printf("请输入学生个人简介:\n");
scanf("%s", stu.StudentProfile);
//保存到学生管理系统:尾插
CHARUback(pcon, stu);
}
3.利用学生姓名寻找学生相关数据,若找到返回下标,找不到,返回-1
使用strcmp进行字符串之间的比较进而实现学生姓名的查找
利用学生姓名寻找学生相关数据代码具体实现
//寻找学生名字,找到返回下标,没找到,返回-1
int findname(stu* pcon, char name[])
{
for (int i = 0; i < pcon->size; i++)
{
if (strcmp(pcon->arr[i].name, name) == 0)
{
return i;//找到了
}
}
return -1;
}
4.学生数据删除
①利用寻找学生姓名删除该生的相关数据
若找到该生姓名,调用顺序表的删除进而删除该生的相关数据
若找不到该生姓名,直接返回
②调用顺序表的删除进而删除学生的相关数据
调用代码
//删除指定位置数据 void SXpointdestroy(SX* ps, int pos) { //判断ps是否为有效指针 assert(ps); //断言,保证下标pos>=0且pos小于顺序表空间大小size assert(pos >= 0 && pos < ps->size); for (int i = pos; i < ps->size - 1; i++) { ps->arr[i] = ps->arr[i + 1]; } ps->size--; }
学生数据删除具体实现
//学生数据删除
void stuscoredel(stu* pcon)
{
printf("请输入要删除的学生姓名:");
char name [MAX_NAME];
scanf("%s", name);
int findIndex = findname(pcon, name);
if (findIndex < 0)
{
printf("要删除的学生不存在!\n");
return;
}
SXpointdestroy(pcon, findIndex);
printf("该生相关数据删除成功!!!\n");
}
5.修改学生数据
利用寻找学生姓名修改该生的相关数据
若找到该生姓名,利用指针修改该生的相关数据
若找不到该生姓名,直接返回
修改学生数据的具体实现
//学生数据的修改
void stuscoremodify(stu* pcon)
{
char name[MAX_NAME];
printf("请输入要修改的学生姓名:");
scanf("%s", name);
int findIndex = findname(pcon, name);
if (findIndex < 0)
{
printf("要找的该生相关数据不存在!\n");
return;
}
printf("请输入要修改的学生学号:\n");
scanf("%d", &pcon->arr[findIndex].id);
printf("请输入要修改的学生姓名:\n");
scanf("%s", pcon->arr[findIndex].name);
printf("请输入要修改的学生性别:\n");
scanf("%s", pcon->arr[findIndex].sex);
printf("请输入要修改的学生英语成绩:\n");
scanf("%f", &pcon->arr[findIndex].EngScore);
printf("请输入要修改的学生数学成绩:\n");
scanf("%f", &pcon->arr[findIndex].MathScore);
printf("请输入要修改的学生数据结构成绩:\n");
scanf("%f", &pcon->arr[findIndex].DatastrScore);
printf("请输入要修改的学生个人简介:\n");
scanf("%s", pcon->arr[findIndex].StudentProfile);
printf("修改学生相关数据成功!!!\n");
}
6.学生数据的完整查看
使用for循环指针访问结构体成员输出全部学生的相关数据
学生数据的完整查看具体实现
//学生完整数据查看
void stuscoreshow(stu* pcon)
{
for (int i = 0; i < pcon->size; i++)
{
printf("学生学号:%d\n",pcon->arr[i].id);
printf("学生姓名:%s\n", pcon->arr[i].name);
printf("学生性别:%s\n", pcon->arr[i].sex);
printf("学生英语成绩:%.2f\n", pcon->arr[i].EngScore);
printf("学生数学成绩:%.2f\n", pcon->arr[i].MathScore);
printf("学生数据结构成绩:%.2f\n", pcon->arr[i].DatastrScore);
printf("学生个人简介:%s\n", pcon->arr[i].StudentProfile);
}
}
7.一个学生相关数据的查看
利用寻找学生姓名打印该生的相关数据
若找到该生姓名,利用指针打印该生的相关数据
若找不到该生姓名,直接返回
一个学生相关数据的查看具体实现
//学生相关数据查看
void stuscorefind(stu* pcon)
{
char name[MAX_NAME];
printf("请输入要查找的学生姓名:\n");
scanf("%s", name);
int findIndex = findname(pcon, name);
if (findIndex < 0)
{
printf("查找到学生相关数据不存在!!!\n");
return;
}
//找到了,打印学生相关数据
printf("学生学号:%d\n", pcon->arr[findIndex].id);
printf("学生姓名:%s\n", pcon->arr[findIndex].name);
printf("学生性别:%s\n", pcon->arr[findIndex].sex);
printf("学生英语成绩:%.2f\n", pcon->arr[findIndex].EngScore);
printf("学生数学成绩:%.2f\n", pcon->arr[findIndex].MathScore);
printf("学生数据结构成绩:%.2f\n", pcon->arr[findIndex].DatastrScore);
printf("学生个人简介:%s\n", pcon->arr[findIndex].StudentProfile);
}
***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:“道阻且长,行则将至”。
我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!!
好了划走吧。