本篇博客简单的实现了一下学生管理系统:
(其中的各项功能是由链表进行实现)
其中的功能有以下几点:
1.增加学生信息
2.删除指定学生信息
3.查找指定学生信息
扫描二维码关注公众号,回复:
1766216 查看本文章
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; }