作为一个刚入行的萌新,自己写了一个学生管理系统,不足之处希望各位指正
stu.h文件
#ifndef __STUDENT_H__
#define __STUDENT_H__
#define N 30
// 创建学生的结构体
typedef struct
{
char name[20];
char sew;
int age;
int score;
} stu_t;
// 创建班级的结构体
typedef struct
{
stu_t st[N];
int count;
int n; // 用来记录班上学生的个数
} cls_t;
int add_student(cls_t *cls); // 添加学生信息
int del_student(cls_t *cls); // 删除学生信息
int mod_student(cls_t *cls); // 修改学生信息
void que_student(cls_t *cls); // 查询学生信息
void bubbling_student(cls_t *cls); // 对学生信息进行排序
void traver_studnet(cls_t *cls); // 遍历学生信息
#endif
mian.c
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
int main(int argc, char const *argv[])
{
int choose, flage = 1;
// 首先创建班级
cls_t *cls = (cls_t *)malloc(sizeof(cls_t));
if (cls == NULL)
{
perror("cls malloc error\n");
exit(-1);
}
cls->n = 0; // 初始化班级人数
while (flage)
{
choose = 0;
// 打印登录界面
printf("------------------欢迎访问学生管理系统-----------------------------\n");
printf("-----------1.增加 2.删除 3.修改 4.查询 5.遍历 6.排序 7.退出 --------\n");
printf("--------------请根据提示选择以上操作内容---------------------------\n");
scanf("%d", &choose);
while (getchar() != '\n')
; // 吃掉垃圾字符
switch (choose)
{
case 1:
// 增加操作
add_student(cls);
printf("添加学生信息成功\n");
break;
case 2:
// 删除操作
del_student(cls);
printf("删除学生信息成功\n");
break;
case 3:
// 修改操作
mod_student(cls);
printf("修改学生信息成功\n");
break;
case 4:
// 查询操作
que_student(cls);
printf("查询学生信息成功\n");
break;
case 5:
// 遍历操作
traver_studnet(cls);
printf("遍历学生信息成功\n");
break;
case 6:
// 对学生信息进行排序操作
bubbling_student(cls);
break;
case 7:
// 退出系统
printf("退出系统完成,欢迎下次访问\n");
flage = 0;
break;
default:
printf("输入的操作有误,请重新输入\n");
continue;
}
}
return 0;
}
student.c
#include <stdio.h>
#include "student.h"
#include <string.h>
// 1.增加学生信息
int add_student(cls_t *cls)
{
// 首先检查班级是否员
int ret = 0;
if (++(cls->n) > N - 1)
{
printf("班级已经满员了,不能在添加了\n");
cls->n--;
return -1;
}
// 当班级没有满员的情况
BACK_INPUT:
printf("input name sew age socre>");
ret = scanf("%s %c %d %d",
cls->st[cls->n].name, &cls->st[cls->n].sew, &cls->st[cls->n].age, &cls->st[cls->n].score);
while (getchar() != '\n')
;
if (ret != 4)
{
printf("你输入的信息不完整,请重新输入\n");
while (getchar() != '\n')
; // 吃掉垃圾字符
goto BACK_INPUT;
}
// 对输入的性别做判断
if (cls->st[cls->n].sew != 'w' && cls->st[cls->n].sew != 'm')
{
printf("输入的性别有误,请重新输入\n");
while (getchar() != '\n')
; // 吃掉垃圾字符
goto BACK_INPUT;
}
// 对输入的年龄做判断
if (0 > cls->st[cls->n].age || 100 < cls->st[cls->n].age)
{
printf("输入的年龄有误,请重新输入\n");
while (getchar() != '\n')
; // 吃掉垃圾字符
goto BACK_INPUT;
}
if (0 > cls->st[cls->n].score || 100 < cls->st[cls->n].score)
{
printf("输入的成绩有误,请重新输入\n");
while (getchar() != '\n')
; // 吃掉垃圾字符
goto BACK_INPUT;
}
else
{
printf("当前添加学生信息:name:%s sew:%c age:%d socre:%d\n",
cls->st[cls->n].name, cls->st[cls->n].sew, cls->st[cls->n].age, cls->st[cls->n].score);
printf("班级人数为:%d\n", cls->n);
}
return 0;
}
// 2.删除学生信息
int del_student(cls_t *cls)
{
// 首先对班级人数进行判断
char del_name[32];
int i, j;
if (cls->n == 0)
{
printf("这个班级没有人,无法进行删除操作\n");
return 0;
}
printf("input del student name>>>");
scanf("%s", del_name);
while (getchar() != '\n')
;
for (i = 0, j = 0; i <= cls->n; i++)
{
if (strcmp(del_name, cls->st[i].name) != 0) // 10
{
cls->st[j++] = cls->st[i];
}
}
cls->n = cls->n - (i - j);
return i - j; // 返回删除的人数
}
// 3.修改学生信息
int mod_student(cls_t *cls)
{
char mod_name[32];
int i = 0;
int choose = 0;
if (cls->n == 0)
{
printf("这个班级没有人,无法进行修改操作\n");
return 0;
}
printf("请输入需要修改学生的姓名\n");
scanf("%s", mod_name);
while (strcmp(cls->st[i].name, mod_name) != 0)
{
i++;
}
printf("当前学生信息为:\n");
printf("name = %-15s,sex = %c,age=%d,score = %d\n",
cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);
// 对学员信息进行修改
printf("input need mod 1.name 2.sew 3.age 4.socre>");
scanf("%d", &choose);
switch (choose)
{
case 1:
printf("input mod name>>>");
scanf("%s", cls->st[i].name);
break;
case 2:
printf("input mod sew>>>");
scanf("%c", &cls->st[i].sew);
break;
case 3:
printf("input mod age>>>");
scanf("%d", &cls->st[i].age);
break;
case 4:
printf("input mod socre>>>");
scanf("%d", &cls->st[i].score);
break;
default:
printf("输入有误,请检查后重新输入\n");
}
}
// 4.查询学员信息
void que_student(cls_t *cls)
{
char que_name[32];
int i = 0;
printf("请输入需要修改学生的姓名\n");
scanf("%s", que_name);
while (strcmp(cls->st[i].name, que_name) != 0)
{
i++;
}
printf("当前学生信息为:\n");
printf("name = %-15s,sex = %c,age=%d,score = %d\n",
cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);
}
// 5.遍历学员信息
void traver_studnet(cls_t *cls)
{
int i;
printf("班级人数为:%d\n", cls->n);
for (i = 1; i <= cls->n; i++)
{
printf("name = %-15s,sex = %c,age=%d,score = %d\n",
cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);
}
}
// 6.对学员成绩进行排序
void bubbling_student(cls_t *cls)
{
int i = 0;
int j = 0;
stu_t stu_temp;
for (i = 0; i < cls->n; i++)
for (j = 0; j < cls->n - i; j++)
{
if (cls->st[j].score > cls->st[j + 1].score)
{
stu_temp = cls->st[j];
cls->st[j] = cls->st[j + 1];
cls->st[j + 1] = stu_temp;
}
}
}