前言
当这个时代,编程已经成为了一项不可或缺的技能。无论是软件开发工程师、数据科学家还是人工智能专家,都需要具备扎实的编程基础。所以现在程序员一抓一大把,而学习编程最好的方式之一就是通过实践项目来提升自己的技能。在下面文章中,通过一个简单而实用的C语言基础项目来展示一下。
正文
学生管理系统相信大家都不陌生吧,毕竟是我们从学编程开始敲,都快敲吐了,但是它不仅仅是一个简单的练手项目,更是我们理解程序设计和数据结构的良好起点。这篇文章简单的实现一个C语言基础的学生管理系统。
示例
学生管理系统可以实现对学生的添加、全部显示、查询、修改、删除功能。
实现思路
接下来详细说明一下实现思路:
-
添加学生信息 (
void add()
):- 提示用户输入姓名、年龄和性别。
- 读取用户输入的信息,并将其保存到数组
s
的下一个位置。 - 更新数据条数
n
。
-
显示所有学生信息 (
void show()
):- 使用循环遍历数组
s
,依次打印每个学生的姓名、年龄和性别。
- 使用循环遍历数组
-
查询学生信息 (
void find()
):- 提示用户输入要查询的学生姓名。
- 调用
find_index()
函数查找该学生在数组中的索引。 - 如果找到了学生,打印该学生的姓名、年龄和性别;否则提示用户未找到该学生。
-
修改学生信息 (
void edit()
):- 提示用户输入要修改的学生姓名。
- 调用
find_index()
函数查找该学生在数组中的索引。 - 如果找到了学生,先打印该学生的信息,然后提示用户输入新的姓名、年龄和性别,并更新该学生的信息;否则提示用户未找到该学生。
-
删除学生信息 (
void del()
):- 提示用户输入要删除的学生姓名。
- 调用
find_index()
函数查找该学生在数组中的索引。 - 如果找到了学生,先打印该学生的信息,然后将该学生之后的所有学生信息向前移动一个位置,实现删除操作;同时更新数据条数
n
;否则提示用户未找到该学生。
-
主函数
main()
:- 使用一个无限循环,直到用户选择退出程序。
- 在每次循环中,显示帮助菜单并提示用户输入指令。
- 根据用户输入的指令调用相应的函数来执行操作。
代码实现
C
#include <stdio.h>
#include <string.h>
// 宏定义的常量,代表学生的最大个数
#define NUM 100
// 结构体类型 struct stu 别名为 STU
typedef struct st
{
char name[30]; // 姓名
int age; // 年龄
char sex[5]; // 性别
} STU;
// 学生信息数组
STU s[NUM] = {
{"周九", 24, "男"},
{"吴十", 25, "女"},
{"郑十一", 26, "男"}};
// 帮助菜单显示函数定义
void help_menu()
{
printf("\n");
printf(" 欢迎使用本学生信息管理系统\n");
printf("* ================================ *\n");
printf("* 1. 添加 *\n");
printf("* 2. 显示 *\n");
printf("* 3. 查询 *\n");
printf("* 4. 修改 *\n");
printf("* 5. 删除 *\n");
printf("* 6. 退出 *\n");
printf("* ================================ *\n");
}
// 现有数据条数
int n = 3;
// 添加学生信息函数
void add()
{
printf("请输入用户名:\n");
scanf("%s", s[n].name); // 从标准输入读取姓名
printf("请输入年龄:\n");
scanf("%d", &s[n].age); // 从标准输入读取年龄
printf("请输入性别:\n");
scanf("%s", s[n].sex); // 从标准输入读取性别
printf("添加成功:姓名:%s 年龄:%d 性别:%s \n", s[n].name, s[n].age, s[n].sex); // 打印添加成功信息
n++; // 数据条数加一
}
// 显示所有学生信息函数
void show()
{
for (int i = 0; i < n; i++) // 遍历学生数组
{
printf("姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印每个学生的信息
}
}
// 查找学生信息的索引函数
int find_index(char *p)
{
for (int i = 0; i < n; i++) // 遍历学生数组
{
if (strcmp(s[i].name, p) == 0) // 如果找到姓名与输入的姓名相同
{
return i; // 返回该学生信息在数组中的索引
}
}
return -1; // 如果没有找到,返回-1
}
// 查询学生信息函数
void find()
{
printf("请输入要查询的学生姓名:\n");
char sname[30];
scanf("%s", sname); // 从标准输入读取要查询的学生姓名
int i = find_index(sname); // 调用查找学生信息的索引函数
if (i != -1) // 如果找到了该学生
{
printf("姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印该学生的信息
}
else
{
printf("没有找到该学生\n"); // 打印没有找到该学生的提示
}
}
// 修改学生信息函数
void edit()
{
printf("请输入要修改的学生姓名:\n");
char sname[30];
scanf("%s", sname); // 从标准输入读取要修改的学生姓名
int i = find_index(sname); // 调用查找学生信息的索引函数
if (i != -1) // 如果找到了该学生
{
printf("修改前的信息为:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印修改前的信息
printf("请输入用户名:");
scanf("%s", s[i].name); // 从标准输入读取新的用户名
printf("请输入年龄:");
scanf("%d", &s[i].age); // 从标准输入读取新的年龄
printf("请输入性别:");
scanf("%s", s[i].sex); // 从标准输入读取新的性别
printf("修改成功:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印修改成功信息
}
else
{
printf("没有找到该学生\n"); // 打印没有找到该学生的提示
}
}
// 删除学生信息函数
void del()
{
printf("请输入要删除的学生姓名:\n");
char sname[30];
scanf("%s", sname); // 从标准输入读取要删除的学生姓名
int i = find_index(sname); // 调用查找学生信息的索引函数
if (i != -1) // 如果找到了该学生
{
printf("删除前的信息为:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印删除前的信息
for (int j = i; j < n; j++) // 从找到的学生索引开始,向后移动学生信息,实现删除操作
{
s[j] = s[j + 1];
}
n--; // 数据条数减一
printf("删除成功\n"); // 打印删除成功信息
}
else
{
printf("没有找到该学生\n"); // 打印没有找到该学生的提示
}
}
int main()
{
while (1)
{
// 帮助菜单显示
help_menu();
// 用户输入选项
int num;
printf("请输入指令数据:");
scanf("%d", &num); // 从标准输入读取用户的指令数据
// 根据用户输入的指令执行相应的操作
switch (num)
{
case 1:
add();
break;
case 2:
show();
break;
case 3:
find();
break;
case 4:
edit();
break;
case 5:
del();
break;
default:
break;
}
if (num == 6)
{
printf("退出\n");
break;
}
}
return 0;
}
结尾
通过对学生信息管理系统的实现,我们不仅学习了如何设计和实现一个简单的程序,更重要的是掌握了程序设计的基本思维和方法。无论是对于初学者还是有一定编程基础的人来说,通过实际项目的学习,可以更加深入地理解编程的本质和魅力。最后一句,孰能生巧吧哈哈哈!!!