本篇博客简单的实现了一下学生管理系统:
(其中的各项功能是由链表进行实现)
其中的功能有以下几点:
1.增加学生信息
2.删除指定学生信息
3.查找指定学生信息
4.修改指定学生信息
5.显示所有学生信息
6.清空所有学生信息
7.以成绩排序学生信息
0.退出当前通讯系统
如果还需其他功能大家可以在其中添加
以下是代码部分:
Ssystem.h
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct People
{
char name[20];
int age[10];
char sex[5];
int num[20];
float English[20];
float Chinese[20];
float Math[20];
}People;
typedef struct List
{
struct People E[1000];
int count;
}List;
Ssystem.c
#include"Ssysytem.h"
void menu()//打印菜单
{
printf(" 欢迎使用通讯录 \n");
printf("***********1.增加学生信息 *************\n");
printf("***********2.删除指定学生信息*************\n");
printf("***********3.查找指定学生信息*************\n");
printf("***********4.修改指定学生信息*************\n");
printf("***********5.显示所有学生信息*************\n");
printf("***********6.清空所有学生信息*************\n");
printf("***********7.以成绩排序学生信息***********\n");
printf("***********0.退出当前通讯系统***********\n");
}
void menu2()//修改学生时所用到的菜单
{
printf("**********************\n");
printf("****1.姓名**2.性别****\n");
printf("****3.年龄**4.学号****\n");
printf("****5.成绩**6.返回****\n");
printf("**********************\n");
}
void init(List *L)//初始化
{
int count = sizeof(L->E);
L->count = 0;
memset(L->E, 0, count);
}
int Find(List *L, char* pname)
{
int j = 0;
for (; j<L->count; j++)
{
if (strcmp(L->E[j].name, pname) == 0)
{
return j;
}
}
return -1;
}
void Add_E(List *L)//添加学生信息
{
printf("请输入学生姓名: \n");
scanf("%s", L->E[L->count].name);
printf("请输入学生年龄: \n");
scanf("%d", L->E[L->count].age);
printf("请输入学生性别: \n");
scanf("%s", L->E[L->count].sex);
printf("请输入学生学号: \n");
scanf("%d", L->E[L->count].num);
printf("请输入学生英语成绩: \n");
scanf("%f", L->E[L->count].English);
printf("请输入学生语文成绩: \n");
scanf("%f", L->E[L->count].Chinese);
printf("请输入学生数学成绩: \n");
scanf("%f", L->E[L->count].Math);
if (L->count >= 1000)
{
printf("系统已满!\n");
return;
}
else
{
L->count++;
printf("学生数据添加成功\n");
printf("%d", L->count);
}
}
void Revise_E(List *L)//修改指定学生信息
{
int i = 0;
int ret = 0;
char name[20] = { 0 };
printf("请输入要修改的学生:\n");
scanf("%s", name);
ret = Find(L, name);
if (ret != -1)
{
printf(" 姓名%s ", L->E[ret].name);
printf(" 年龄%d", *(L->E[ret].age));
printf(" 性别%s", L->E[ret].sex);
printf(" 学号%d", *(L->E[ret].num));
printf(" 英语成绩%f", L->E[ret].English);
printf(" 语文成绩%f", L->E[ret].Chinese);
printf(" 数学成绩%f", L->E[ret].Math);
printf("\n");
do
{
menu2();
printf("输入你要修改的选项:\n");
scanf("%d", &i);
switch (i)
{
case 1:
printf("请把姓名修改成:");
scanf("%s", L->E[ret].name);
break;
case 2:
printf("请把性别修改成:");
scanf("%s", L->E[ret].sex);
break;
case 3:
printf("请把年龄修改成:");
scanf("%d", &(L->E[ret].age));
break;
case 4:
printf("请把学号修改成:");
scanf("%s", L->E[ret].num);
break;
case 5:
printf("请把英语成绩修改成:");
scanf("%s", L->E[ret].English);
break;
case 6:
printf("请把语文成绩修改成:");
scanf("%s", L->E[ret].Chinese);
break;
case 7:
printf("请把数学成绩修改成:");
scanf("%s", L->E[ret].Math);
break;
case 8:
return;
default:
printf("输入错误");
break;
}
} while (i);
}
else
{
printf("你要修改的学生不存在\n");
}
}
void Del_E(List *L)//删除指定学生信息
{
char name[20] = { 0 };
int i = 0;
int n = 0;
int ret = 0;
printf("请输入删除学生姓名:\n");
scanf("%s", name);
ret = Find(L, name);
if (ret != -1)
{
printf("你是否要删除该学生信息?\n");
printf("删除请按1 不删除请按0\n");
scanf("%d", &n);
if (1 == n)
{
for (i = ret; i<(L->count); i++)
{
L->E[i] = L->E[i + 1];//联系人信息依次覆盖
}
L->count--;
printf("删除成功\n");
}
else
{
printf("删除失败\n");
}
}
}
void Show_E(List *L)//显示所有学生
{
int i = 0;
if (L->count == 0)
{
printf("无该学生!\n");
}
for (; i<L->count; i++)
{
printf(" 第%d个人信息为: \n", i + 1);
printf(" 姓名%s ", L->E[i].name);
printf(" 年龄%d", *(L->E[i].age));
printf(" 性别%s", L->E[i].sex);
printf(" 学号%d", *(L->E[i].num));
printf(" 英语成绩%f", L->E[i].English);
printf(" 语文成绩%f", L->E[i].Chinese);
printf(" 数学成绩%f", L->E[i].Math);
printf("\n");
}
}
void Clear_E(List* L)//清空管理系统
{
L->count = 0;
printf("成功清除!\n");
}
void Research_E(List *L)//查找指定学生
{
int ret = 0;
char name[20] = { 0 };
printf("请输入需要查找学生姓名: \n");
scanf("%s", name);
ret = Find(L, name);
if (ret != -1)
{
printf(" 姓名%s ", L->E[ret].name);
printf(" 年龄%d", *(L->E[ret].age));
printf(" 性别%s", L->E[ret].sex);
printf(" 学号%d", *(L->E[ret].num));
printf(" 英语成绩%f", L->E[ret].English);
printf(" 语文成绩%f", L->E[ret].Chinese);
printf(" 数学成绩%f", L->E[ret].Math);
printf("\n");
}
else
{
printf("查找的学生不存在\n");
}
}
//按英语成绩排序
void Sort_E(List* L)
{
int i = 0;
int j = 0;
for (; i<L->count - 1; i++)
{
for (; j<(L->count - 1 - i); j++)
{
if ((L->E[j].English - L->E[j + 1].English) >= 0)
{
People tmp;
tmp = L->E[j];
L->E[j] = L->E[j + 1];
L->E[j + 1] = tmp;
}
}
}
printf("排序成功!\n");
}
test.c
#include"Ssysytem.h"
int main()
{
List L;
int i = 0;
int count = 0;
init(&L);
menu();
do
{
printf("请选择所要进行的操作:\n");
scanf("%d", &i);
switch (i)
{
case 1:
Add_E(&L);
break;
case 2:
Del_E(&L);
break;
case 3:
Research_E(&L);
break;
case 4:
Revise_E(&L);
break;
case 5:
Show_E(&L);
break;
case 6:
Clear_E(&L);
break;
case 7:
Sort_E(&L);
break;
case 8:
printf("成功退出\n");
return 0;
default:
printf("输入参数错误\n");
break;
}
} while (i);
system("pause");
return 0;
}