#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct stu_cj
{
int stu_xh; //学号顺序值
int yw_cj; //语文
int sx_cj; //数学
int wy_cj; //外语
int pj_cj; //平均成绩
};
///定义子函数//
void Help();
void Type(struct stu_cj *p, int rs, int *k);
void Average(struct stu_cj *p, int k);
void List(struct stu_cj *p, int k);
void Sort( int k);
void search(struct stu_cj *p, int k, int x);
void clear();
void Quit();
//定义变量/
struct stu_cj A[20];
struct stu_cj *p = A;
int i = 0, j = 0, k = 0, x = 0, rs = 0; //k为添加信息条数<=10
char b = '0', c = '0', d = '0';
MAIN///
int main(int argc, char const *argv[])
{
Help();
while (1)
{
int rs = 0;
printf(">>>请输入命令:");
scanf("%s", &b);
getchar();
switch (b)
{
case 'H':
Help();
break;
case 'T': //录入
if (k <= 20)
{
printf("请输入增添人数:");
scanf("%d", &rs);
getchar();
Type(p, rs, &k);
printf("******************************************\n");
printf("%d", k);
break;
}
else
{
puts("数据已满!请联系管理员。");
printf("******************************************\n");
continue;
}
case 'A': //平均
if (k == 0)
{
puts("数据为空,请先执行命令 T,输入数据");
printf("******************************************\n");
continue;
}
else
{
Average(p, k);
printf("******************************************\n");
continue;
}
break;
case 'L': //列出
if (k == 0)
{
puts("数据为空,请先执行命令 T,输入数据");
printf("******************************************\n");
continue;
}
else
{
List(p, k);
printf("******************************************\n");
continue;
}
break;
case 'P': //排序
if (k == 0)
{
puts("数据为空,请先执行命令 T,输入数据");
printf("******************************************\n");
continue;
}
else
{
Sort(k);
printf("******************************************\n");
continue;
}
break;
case 'S': //查询
if (k == 0)
{
puts("数据为空,请先执行命令 T,输入数据");
printf("******************************************\n");
continue;
}
else
{
printf("请输入要查询的学号:");
scanf("%d", &x);
getchar();
search(p, k, x);
printf("******************************************\n");
continue;
}
break;
case 'C': //清屏
clear();
break;
case 'Q': //退出
Quit();
default:
puts("输入有误!请重新输入。");
printf("******************************************\n");
break;
}
}
return 0;
}
//HELP//
void Help()
{
puts("******************************************");
puts("* 学生成绩管理系统————帮助菜单 *");
puts("******************************************");
puts("* H >> 显示帮助菜单 *");
puts("* T >> 成 绩 录 入 *");
puts("* A >> 计算学生平均分 *");
puts("* L >> 列出成绩单 *");
puts("* P >> 按平均成绩由高到低排序 *");
puts("* S >> 按学号查询学生成绩 *");
puts("* C >> 清屏 *");
puts("* Q >> 退出系统 *");
puts("******************************************");
puts("* Copyright <C> 2023.03.11 By 于雪杰 *");
puts("******************************************");
}
//TYPE//
void Type(struct stu_cj *p, int rs, int *k)
{
int m = 1;
for (i = 0; i < rs; i++)
{
int t=*k;
(p + t)->stu_xh = t + 1;
(p + t)->pj_cj = 0;
puts("学号 语文 数学 外语");
printf("%d", (p + t)->stu_xh);
scanf("%d %d %d", &(p + t)->yw_cj, &(p + t)->sx_cj, &(p + t)->wy_cj);
(*k) += m;
}
printf("******************************************\n");
printf("已成功输入%d人成绩\n", *k);
}
void Average(struct stu_cj *p, int k)
{
for (i = 0; i < k; i++)
{
(p + i)->pj_cj = ((p + i)->yw_cj + (p + i)->wy_cj + (p + i)->sx_cj) / 3;
}
}
LIST///
void List(struct stu_cj *p, int k)
{
puts("学号 语文 数学 外语 平均分");
for (i = 0; i < k; i++)
{
printf("%d %d %d %d %d\n", (p + i)->stu_xh, (p + i)->yw_cj, (p + i)->sx_cj, (p + i)->wy_cj, (p + i)->pj_cj);
}
}
/SORT
void Sort( int k)
{
printf("%d", k);
for (i = 0; i < k; i++)
{
for (j=0; j < k-i ; j++)
{
struct stu_cj temp1 ={};
if ((p + j)->pj_cj < (p + j+1)->pj_cj)
{
temp1 = A[j];
A[j]= A[j+1];
A[j+1] = temp1;
}
}
}
}
///SEARCH//
void search(struct stu_cj *p, int k, int x)
{
for (int i = 0; i < k; i++)
{
if ((p + i)->stu_xh == x)
{
puts("学号 语文 数学 外语 平均分");
printf("%d %d %d %d %d\n", (p + i)->stu_xh, (p + i)->yw_cj, (p + i)->sx_cj, (p + i)->wy_cj, (p + i)->pj_cj);
break;
}
else if (i == k - 1)
{
puts("未查询到该学生相关信息!");
printf("\n");
break;
}
}
}
CLEAR
void clear()
{
system("clear");
}
///QUIT//
void Quit()
{
puts("感谢使用!");
exit(0);
}
学生管理系统的C语言实现 | 数据结构、结构体、函数封装
于 2023-04-11 18:29:33 首次发布