声明 :
由于我不会单链表,所以我的设计 简单应用了一下结构体数组和指针,绝对适合没有深入了解结构体和指针的朋友。
对您有帮助请点一个赞支持以下~~
学生系统要求如下:
- 输入记录模块 从键盘逐个输入学生记录。
- 查询记录模块 按照学生的学号查询或者按照学生的姓名进行查询;查找最高分和不及格的学生;把满足条件的学生信息显示出来。
- 更新记录模块 修改某一个学生的信息,对学生按照学号和成绩就行排序(升序或者降序);求出每个学生的平均成绩。插入一个学生信息;删除一个学生的信息。
- 统计记录模块 统计每一门课最高分和不及格人数。
- 输出记录模块 显示所有学生的信息。
我写了一个头文件fun.h,两个c文件fun.c,test.c
fun.h包含对我写的函数声明和一些变量声明
fun.c具体写函数功能实现
test.c是游戏的主运行程序
文件名字可以自己随意定义,以上3个文件只要在vs内同一个project内打开就可以运行
头文件 fun.c
#define CHIN 0//stu[].score[0]输入语文成绩
#define MATH 1//stu[].score[1]输入数学成绩
#define ENG 2//stu[].score[2]输入外语成绩
#include<stdio.h>
#include<string.h>
#include<windows.h>//system("cls") 清屏命令 system("pause")输入任意键继续命令
//学生结构体
struct student {
int id;//学号
char name[9];//姓名
int score[3];//成绩数组
}stu;
void Input(struct student stu[100], int Num);//输入学生成绩
void SearchId(struct student stu[100], int Num);//按照学号查找学生
void SearchName(struct student stu[100], int Num);//按照姓名查找学生
void Search_Max_Fall(struct student stu[100], int Num);//查询最高成绩和不及格学生
void Change(struct student stu[100], int Num);//修改学生信息
void Sort(struct student stu[100], int Num);//排序
void SortExchange(struct student stu[100], int Num, int j);//交换结构体数组元素位置
void Average(struct student stu[100], int Num);//求平均成绩
void Search_Max_Sub(struct student stu[100], int Num, int sub);//寻找科目分最高的同学
void Search_Fall_Sub(struct student stu[100], int Num,int sub); //寻找科目挂科的同学
void DeleteId(struct student stu[100], int* Num);//按照学号删除
void DeleteName(struct student stu[100], int* Num);//按照姓名删除
void Insert(struct student stu[100], int* Num);//插入学生信息
void Sum(struct student stu[100], int Num);//同计没课最高分和不及格人数
void Print(struct student stu[100], int Num);//输出所有学生信息
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"fun.h"
//菜单函数
void Menu() {
printf("--------------------------------------------------\n\n");
printf("* 您好!欢迎来到学生成绩管理系统! *\n");
printf("* 1. 录入 *\n");
printf("* 2. 查询 *\n");
printf("* 3. 更新 *\n");
printf("* 4. 统计 *\n");
printf("* 5. 输出 *\n");
printf("* 0. 退出 *\n\n");
printf("--------------------------------------------------\n");
}
void MenuSearch() {
printf("--------------------------------------------------\n\n");
printf("* 1. 按照学号查找 \n");
printf("* 2. 按照姓名查找 \n");
printf("* 3. 查找最高成绩和不及格学生 \n");
printf("* 0. 退出 \n\n");
printf("--------------------------------------------------\n");
}
void MenuRenew() {
printf("--------------------------------------------------\n\n");
printf("* 1. 修改学生信息 *\n");
printf("* 2. 删除学生信息 *\n");
printf("* 3. 插入学生信息 *\n");
printf("* 4. 求学生平均成绩 *\n");
printf("* 5. 排序 *\n");
printf("* 0. 退出 *\n\n");
printf("--------------------------------------------------\n");
}
void MenuDeleteMethod() {
printf("\n--------------------------------------------------\n");
printf("* 请选择删除方式: \n");
printf("* 1. 学号 \n");
printf("* 2. 姓名 \n");
printf("* 0. 取消 \n");
printf("\n--------------------------------------------------\n");
}
//学生系统主函数
void test() {
struct student stu[100];
int Choose = 0;//选择功能
int Num = 0;//学生总数
int Search = 0;//查找功能的查找方式
int Renew = 0;//更新功能选择
do {
system("cls");
Menu();
printf("\n请输入您想选择的模式:\n");
scanf("%d", &Choose);
//五大功能主菜单
switch (Choose) {
case 1:
printf("请输入您想添加的学总人数:\n");
scanf("%d", &Num);
system("cls");
Input(stu,Num);
break;
case 2:
MenuSearch();
printf("请输入您想查找得方式:\n");
scanf("%d", &Search);
switch (Search) {
case 1:
system("cls");
SearchId(stu, Num);
break;
case 2:
system("cls");
SearchName(stu, Num);
break;
case 3:
system("cls");
Search_Max_Fall(stu, Num);
break;
case 0:
break;
default:
printf("选择错误!请重新选择!\n");
break;
}
break;
case 3:
system("cls");
MenuRenew();
printf("请输入您想执行的操作:\n");
scanf("%d", &Renew);
switch (Renew) {
case 1:
system("cls");
Change(stu, Num);
break;
case 2:
system("cls");
int method = 0;
while (1) {
MenuDeleteMethod();//
scanf("%d", &method);
switch (method) {
case 1:
DeleteId(stu, &Num);
break;
case 2:
DeleteName(stu, &Num);
break;
case 0:
goto end;
default:
printf("选择不在选项内!请重新选择!\n");
break;
}
}
end:;
break;
case 3:
Insert(stu,&Num);
break;
case 4:
system("cls");
Average(stu, Num);
break;
case 5: