一、需求分析
通过c语言设计一套学生管理系统,要求:可以对学生信息进行增、删、查、改和打印学生信息的功能,学生基本信息包括姓名、性别、年龄和学号。
细节1:对学生信息进行添加时,学生的学号不能重复,需要确保学号的唯一性。
细节2:对学生信息进行删除时,需要判断该学生的学号,根据学号进行删除该学生,如果该学号不存在则删除失败。
二、基本框架
1.首先c语言是一种面向过程的语言,是没有类和对象的,所以需要定义结构体来作为操作学生信息的工具:
(1)结构体1 :用于存储学生基本信息,包括姓名、性别、年龄、学号;
结构体2:用于存储学生人数,方便管理以及后续对学生信息的操作。
//定义结构体记录学生基本信息
typedef struct student{
char name[MAX];//姓名
char gender[MAX];//性别
int age;//年龄
long stu_id;//学号
}student;
//定义结果体管理学生
typedef struct class_room {
student person[MAX];//每个学生
int count;//学生人数
}class_room;
2.初始化
//初始化学生人数为0
void init_class_room(class_room* cr) {
cr->count = 0;
}
3.定义主菜单
//定义主菜单
void menu() {
printf("\t\t\t\t\t=============**===============\n");
printf("\t\t\t\t\t========****欢迎****==========\n");
printf("\t\t\t\t\t=====****学生管理系统****=====\n");
printf("\t\t\t\t\t============****==============\n");
printf("\t请输入选项进行操作:\n");
printf("\t1.添加学生信息\t2.删除学生信息\t3.查找学生信息\t4.修改学生信息\t5.展示学生信息\t6.退出\n");
}
4.主函数
//主函数
int main(void) {
//初始化
struct class_room cr;
init_class_room(&cr);
while (true) {
menu();
int choice;
scanf_s("%d", &choice);
switch (choice)
{
case 1: {//添加学生
printf("请输入学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("请输入学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("请输入学生年龄:\n");
int age;
scanf("%d",&age);
printf("请输入学生学号:\n");
long stu_id;
scanf("%d",&stu_id);
bool result = add_student(&cr,name,gender,age,stu_id);
if (result) {
printf("添加学生信息成功!!\n");
}else{
printf("添加学生信息失败,该学生学号已存在!!\n");
}
}break;
case 2: {//删除学生
printf("请输入需要删除学生信息的学生学号:\n");
long id;
scanf("%d",&id);
bool result = delete_student(&cr,id);
if (!result) {
printf("删除学生信息失败,请确认学生学号后再次尝试!!\n");
}else {
printf("删除学生信息成功!!\n");
}
}break;
case 3: {//查找学生
printf("请输入学生学号来查询学生信息:\n");
long stu_id;
scanf("%d",&stu_id);
bool result = find_student(&cr, stu_id);
if (!result) {
printf("无该学生信息,请确认学号后再次输入!!\n");
}
}break;
case 4: {//修改学生
printf("请输入要修改学生的学号:\n");
long id;
scanf("%d",&id);
printf("修改后学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("修改后学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("修改后学生年龄:\n");
int age;
scanf("%d",&age);
bool result = update_student(&cr,id,name,gender,age);
if (!result) {
printf("修改学生信息失败!!请确认学生学号后修改!!\n");
}
}break;
case 5: {//打印学生
int result = show_student(&cr);
if (result == -1) {
printf("暂无学生信息,请输入学生信息后查询!!\n");
}
}break;
case 6: {//退出
printf("谢谢使用!!\n");
exit(-1);
}break;
default:
printf("");
break;
}
}
system("pause");
return 0;
}
三、定义函数实现功能
(1)添加学生信息
//添加学生信息
bool add_student(class_room* cr,char name[MAX],char gender[MAX],int age,long stu_id) {
int count = cr->count;
for (int i = 0; i < count; i++) {
long id = cr->person[i].stu_id;
if (id == stu_id) {
return false;
}
}
snprintf(cr->person[cr->count].name,sizeof(name)+1,name);
snprintf(cr->person[cr->count].gender,sizeof(gender)+1,gender);
cr->person[cr->count].age = age;
cr->person[cr->count].stu_id = stu_id;
cr->count++;
return true;
}
(2)删除学生信息
//删除学生信息
bool delete_student(class_room* cr,long stu_id) {
int count = cr->count;
if (count == 1 && cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
if (cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
for (int i = 0; i < count - 1 ; i++) {
if (stu_id == cr->person[i].stu_id) {
cr->person[i] = cr->person[i + 1];
cr->count--;
return true;
}
}
return false;
}
(3)查找学生信息
//查找学生信息
bool find_student(class_room* cr,long stu_id) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
printf("学生 %d 姓名:%s\n", i + 1, cr->person[i].name);
printf(" 性别:%s\n", cr->person[i].gender);
printf(" 年龄:%d\n", cr->person[i].age);
printf(" 学号:%d\n", cr->person[i].stu_id);
return true;
}
}
return false;
}
(4)修改学生信息
//修改学生信息
bool update_student(class_room* cr,long stu_id, char name[MAX], char gender[MAX], int age) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
snprintf(cr->person[i].name, sizeof(name) + 1, name);
snprintf(cr->person[i].gender, sizeof(gender) + 1, gender);
cr->person[i].age = age;
return true;
}
}
return false;
}
四、完整代码实现
#include<stdio.h>
#include<string>
#define MAX 120
//定义结构体记录学生基本信息
typedef struct student{
char name[MAX];//姓名
char gender[MAX];//性别
int age;//年龄
long stu_id;//学号
}student;
//定义结果体管理学生
typedef struct class_room {
student person[MAX];//每个学生
int count;//学生人数
}class_room;
//初始化学生人数为0
void init_class_room(class_room* cr) {
cr->count = 0;
}
//添加学生信息
bool add_student(class_room* cr,char name[MAX],char gender[MAX],int age,long stu_id) {
int count = cr->count;
for (int i = 0; i < count; i++) {
long id = cr->person[i].stu_id;
if (id == stu_id) {
return false;
}
}
snprintf(cr->person[cr->count].name,sizeof(name)+1,name);
snprintf(cr->person[cr->count].gender,sizeof(gender)+1,gender);
cr->person[cr->count].age = age;
cr->person[cr->count].stu_id = stu_id;
cr->count++;
return true;
}
//修改学生信息
bool update_student(class_room* cr,long stu_id, char name[MAX], char gender[MAX], int age) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
snprintf(cr->person[i].name, sizeof(name) + 1, name);
snprintf(cr->person[i].gender, sizeof(gender) + 1, gender);
cr->person[i].age = age;
return true;
}
}
return false;
}
//删除学生信息
bool delete_student(class_room* cr,long stu_id) {
int count = cr->count;
if (count == 1 && cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
if (cr->person[cr->count - 1].stu_id == stu_id) {
cr->count--;
return true;
}
for (int i = 0; i < count - 1 ; i++) {
if (stu_id == cr->person[i].stu_id) {
cr->person[i] = cr->person[i + 1];
cr->count--;
return true;
}
}
return false;
}
//打印学生信息
int show_student(class_room* cr) {
int count = cr->count;
if (count == 0) {
return -1;
}
for (int i = 0; i < count; i++) {
printf("学生 %d 姓名:%s\n",i + 1,cr->person[i].name);
printf(" 性别:%s\n",cr->person[i].gender);
printf(" 年龄:%d\n",cr->person[i].age);
printf(" 学号:%d\n",cr->person[i].stu_id);
printf("\n");
}
}
//查找学生信息
bool find_student(class_room* cr,long stu_id) {
int count = cr->count;
for (int i = 0; i < count; i++) {
if (stu_id == cr->person[i].stu_id) {
printf("学生 %d 姓名:%s\n", i + 1, cr->person[i].name);
printf(" 性别:%s\n", cr->person[i].gender);
printf(" 年龄:%d\n", cr->person[i].age);
printf(" 学号:%d\n", cr->person[i].stu_id);
return true;
}
}
return false;
}
//定义主菜单
void menu() {
printf("\t\t\t\t\t=============**===============\n");
printf("\t\t\t\t\t========****欢迎****==========\n");
printf("\t\t\t\t\t=====****学生管理系统****=====\n");
printf("\t\t\t\t\t============****==============\n");
printf("\t请输入选项进行操作:\n");
printf("\t1.添加学生信息\t2.删除学生信息\t3.查找学生信息\t4.修改学生信息\t5.展示学生信息\t6.退出\n");
}
//主函数
int main(void) {
//初始化
struct class_room cr;
init_class_room(&cr);
while (true) {
menu();
int choice;
scanf_s("%d", &choice);
switch (choice)
{
case 1: {//添加学生
printf("请输入学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("请输入学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("请输入学生年龄:\n");
int age;
scanf("%d",&age);
printf("请输入学生学号:\n");
long stu_id;
scanf("%d",&stu_id);
bool result = add_student(&cr,name,gender,age,stu_id);
if (result) {
printf("添加学生信息成功!!\n");
}else{
printf("添加学生信息失败,该学生学号已存在!!\n");
}
}break;
case 2: {//删除学生
printf("请输入需要删除学生信息的学生学号:\n");
long id;
scanf("%d",&id);
bool result = delete_student(&cr,id);
if (!result) {
printf("删除学生信息失败,请确认学生学号后再次尝试!!\n");
}else {
printf("删除学生信息成功!!\n");
}
}break;
case 3: {//查找学生
printf("请输入学生学号来查询学生信息:\n");
long stu_id;
scanf("%d",&stu_id);
bool result = find_student(&cr, stu_id);
if (!result) {
printf("无该学生信息,请确认学号后再次输入!!\n");
}
}break;
case 4: {//修改学生
printf("请输入要修改学生的学号:\n");
long id;
scanf("%d",&id);
printf("修改后学生姓名:\n");
char name[MAX];
scanf("%s",name);
printf("修改后学生性别:\n");
char gender[MAX];
scanf("%s",gender);
printf("修改后学生年龄:\n");
int age;
scanf("%d",&age);
bool result = update_student(&cr,id,name,gender,age);
if (!result) {
printf("修改学生信息失败!!请确认学生学号后修改!!\n");
}
}break;
case 5: {//打印学生
int result = show_student(&cr);
if (result == -1) {
printf("暂无学生信息,请输入学生信息后查询!!\n");
}
}break;
case 6: {//退出
printf("谢谢使用!!\n");
exit(-1);
}break;
default:
printf("");
break;
}
}
system("pause");
return 0;
}
五、实现结果