学生管理系统大家肯定都不陌生,学计算机的大学同学基本都做过一个简易的学生管理系统,这篇文章的学生管理系统并未运用到链表相关的知识,较为简易,所以我不做过多描述,原码的链接请关注我的仓库结构体数组实现的学生管理系统,以后我会更新带图形界面的版本和链表的版本,彼时会进行详细的介绍,如有需要请私信我。
manage.h
#pragma once
#include<stdio.h>
#include<string.h>
#define MAX 100 //数组最大元素个数
typedef struct Stu_Node//学生信息表(其余信息请自己添加)
{
char name[5];
int age;
char address[15];
char tel[12];
}Stu_Node;
typedef struct Stu
{
Stu_Node stu_node[MAX];
int num;//记录大小
}Stu;
void Initstu(Stu *pc);//初始化学生表信息
void Add(Stu* pc);//加入新的人员信息
int Find_Stu(Stu* pc, char name[]);//查询人员的内部逻辑
void Search(Stu* pc, char name[]);//查询人员
void Delete(Stu* pc, char name[]);//删除人员
void Sort(Stu* pc);//人员排序
void Modify(Stu* pc, char name[]);//修改指定人信息
void clear(Stu* pc);//删除所有联系人
manage_system.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"manage.h"
void Initstu(Stu* pc)//初始化学生表
{
pc->num = 0;
int i = 0;
int size = sizeof(pc->stu_node[0]);
memset(pc->stu_node, 0, size * 100);
}
void Add(Stu* pc)//加入新的人员信息
{
int i = pc->num;
if (i == MAX)
{
printf("信息表已满,无法继续填充信息!\n");
}
else
{
printf("请输入名字>");
scanf("%s", pc->stu_node[i].name);
printf("请输入年龄>");
scanf("%d", &pc->stu_node[i].age);
printf("请输入住址>");
scanf("%s", pc->stu_node[i].address);
printf("请输入电话>");
scanf("%s", pc->stu_node[i].tel);
}
pc->num++;
}
void Print(Stu* pc)
{
int i = 0;
printf("%-5s%-6s%-15s%-12s\n", "名字", "年龄", "地址", "电话");
for (i = 0; i < pc->num;i++)
{
printf("%-5s%-6d%-15s%-12s\n", pc->stu_node[i].name, pc->stu_node[i].age,
pc->stu_node[i].address, pc->stu_node[i].tel);
}
}
int Find_Stu(Stu* pc, char name[])
{
int i = 0;
for (i = 0; i < pc->num; i++)
{
if (strcmp(pc->stu_node[i].name, name) == 0)
return i;
}
return 0;
}
void Search(Stu* pc, char name[])//查询人员
{
int ret = Find_Stu(pc, name);
if (ret != 0)
{
printf("找到了\n");
printf("%-5s%-6d%-15s%-12s\n", pc->stu_node[ret].name, pc->stu_node[ret].age,
pc->stu_node[ret].address, pc->stu_node[ret].tel);
}
else
{
printf("该信息表里没有这个人!\n");
}
}
void Delete(Stu* pc, char name[])//删除人员
{
int ret = Find_Stu(pc, name);
pc->stu_node[ret] = pc->stu_node[pc->num - 1];
pc->num--;
}
int compare_age(const void* x, const void* y)
{
return ((Stu_Node*)x)->age -((Stu_Node*)y)->age;
}
int compare_name(const void* x, const void* y)
{
return strcmp(((Stu_Node*)x)->name,((Stu_Node*)y)->name);
}
void sort_menu()
{
printf("-----------------------------------------\n");
printf("** 1.按名字 2.按年龄 **\n");
printf("-----------------------------------------\n");
}
void Sort(Stu* pc)
{
int input = 0;
sort_menu();
printf("请输入你要按照排序的方式>");
scanf("%d", &input);
switch(input)
{
case 1:
qsort(pc->stu_node, pc->num, sizeof(Stu_Node), compare_name);
break;
case 2:
qsort(pc->stu_node, pc->num, sizeof(Stu_Node), compare_age);
break;
default:
printf("输入有误!\n");
break;
}
}
void Modify(Stu* pc, char name[])
{
int ret = Find_Stu(pc, name);
if (ret != 0)
{
printf("请输入名字>");
scanf("%s", pc->stu_node[ret].name);
printf("请输入年龄>");
scanf("%d", &pc->stu_node[ret].age);
printf("请输入住址>");
scanf("%s", pc->stu_node[ret].address);
printf("请输入电话>");
scanf("%s", pc->stu_node[ret].tel);
}
else
{
printf("该信息表里没有这个人!\n");
}
}
void clear(Stu* pc)//删除所有联系人
{
pc->num = 0;
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"manage.h"
void menu()
{
printf("*****************************************\n");
printf("****** 1.新增人员 2.查询人员 **\n");
printf("****** 3.删减人员信息 4.排序 **\n");
printf("****** 5.打印人员信息 6.修改信息 **\n");
printf("****** 7.清空所有名单 0.退出 **\n");
printf("*****************************************\n");
}
int main()
{
int input = 0;
char name[20] = { 0 };
Stu stu;
Initstu(&stu);
do
{
menu();
printf("请输入要选择的功能>");
scanf("%d", &input);
switch (input)
{
case 1:
Add(&stu);
break;
case 2:
printf("请输入姓名>");
scanf("%s", name);
Search(&stu,name);
break;
case 3:
printf("请输入姓名>");
scanf("%s", name);
Delete(&stu, name);
break;
case 4:
Sort(&stu);
break;
case 5:
Print(&stu);
break;
case 6:
printf("请输入姓名>");
scanf("%s", name);
Modify(&stu,name);
break;
case 7:
clear(&stu);
break;
case 0:
printf("退出管理系统!");
break;
default:
printf("输入有误!请重新输入!\n");
break;
}
} while(input);
return 0;
}