本段程序代码来源于博客园: https://www.cnblogs.com/switch-and-for/p/3403936.html 未具体完善
本段程序代码来源于博客园:
https://www.cnblogs.com/switch-and-for/p/3403936.html
运行环境:Visual studio
gets为未定义标识符
原因是在visual的较高版本中gets()函数会报错是因为这个函数不安全,可能会因为读取的字符长度太长而导致缓冲区溢出甚至程序崩溃。
此时应换用fgets()或者gets_s()函数就可以解决问题。
调用scanf()函数时
调用查询学生成绩时,界面显示
与程序显示的数学成绩相矛盾,需要在源代码中第5项的英语成绩改为数学成绩
将管理员登录功能更改为用户注册界面。
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
void manu();
struct student
{
int num;
int password;
char name[20];
int cl;
int ch;
int math;
int sum;
int aver;
}stu[200] = { {200,456852,"张三",1,89,98},{201,456852,"李四",2,67,100},{202,456852,"王五",1,78,99} };
struct student stu1[20];
int N = 0;
int n = 3;
void add()
{
char a, b;
int i, j;
int k;
int count = 0;
int count1 = 0;
system("cls");
do
{
printf("添加第%d学生的信息\n", n + 1);
printf("输入学生的学号");
scanf_s("%d", &k);
for (i = 0; i < n; i++)
{
if (stu[i].num == k)
{
printf("学号重复");
count1++;
system("pause");
system("cls");
manu();
}
}
if (count1 == 0)
{
stu[n].num = k;
}
fflush(stdin);
printf("输入学生的姓名");
gets_s(stu[n].name);
fflush(stdin);
printf("输入学生的班级");
scanf_s("%d", &stu[n].cl);
printf("输入学生的语文成绩");
fflush(stdin);
scanf_s("%d", &stu[n].ch);
printf("输入学生的数学成绩");
fflush(stdin);
scanf_s("%d", &stu[n].math);
n++;
fflush(stdin);
printf("输入Y停止输入\n");
scanf_s("%c", &a);
} while (a != 'Y');
printf("是否要实现插入操作输入y进入");
fflush(stdin);
scanf_s("%c", &b);
printf("%c", b);
if (b == 'y' || b == 'Y')
{
system("cls");
printf("插入哪个学号之前");
scanf_s("%d", &j);
k = 1;
for (i = 0; i < n; i++)
{
if (stu[i].num == j)
{
j = i;
printf("此学号存在");
k--;
break;
}
}
if (k == 1)
{
printf("学号不存在");
system("pause");
system("cls");
manu();
}
for (i = n; i >= j; i--)
{
stu[i + 1] = stu[i];
}
n++;
printf("登陆学生信息\n");
printf("输入学生的学号\n");
scanf_s("%d", &k);
for (i = 0; i < n; i++)
{
if (stu[i].num == k)
{
printf("学号重复");
count++;
system("pause");
system("cls");
manu();
}
}
if (count == 0)
{
stu[j].num = k;
}
fflush(stdin);
printf("输入学生的姓名");
fflush(stdin);
gets_s(stu[j].name);
fflush(stdin);
printf("输入学生的班级");
scanf_s("%d", &stu[j].cl);
printf("输入学生的语文成绩");
fflush(stdin);
scanf_s("%d", &stu[j].ch);
printf("输入学生的数学成绩");
fflush(stdin);
scanf_s("%d", &stu[j].math);
}
else
{
printf("输入有误\n");
system("pause");
system("cls");
manu();
}
system("cls");
manu();
}
void display()
{
int j;
system("cls");
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
for (j = 0; j < n; j++)
{
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
}
system("pause");
system("cls");
manu();
}
void Delete()
{
int nm;
int count;
int j, m = 0;
char k;
system("cls");
printf("\t******************欢迎进入删除界面*****************************\t\n");
//display();
printf("\t\t选择按学号查找\n");
fflush(stdin);
scanf_s("%d", &nm);
for (j = 0; j < n; j++)
{
if (stu[j].num == nm)
{
printf("找到了\n");
count = j;
m++;
break;
}
}
if (m == 0)
{
printf("没找到\n");
printf("按y重新输入\n");
fflush(stdin);
system("pause");
scanf_s("%c", &k);
if (k == 'y' || k == 'Y')
{
Delete();
}
}
for (j = count; j < n; j++)
{
stu[j] = stu[j + 1];
}
n--;
system("pause");
display();
system("pause");
manu();
}
void Class()
{
int i, j;
int k = 0;
char a;
system("cls");
printf("输入班级号\n");
scanf_s("%d", &i);
printf("\t学号\t姓名\t班级\t语文成绩\t数学成绩\n");
for (j = 0; j < n; j++)
{
if (stu[j].cl == i)
{
printf("\t%d\t%s\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
k = 1;
continue;
}
}
if (k == 0)
{
printf("很抱歉 没找到\n");
printf("输入y继续");
scanf_s("%c", &a);
if (a == 'y' || a == 'Y')
{
system("pause");
system("cls");
manu();
}
else
{
printf("输入有误");
system("pause");
system("cls");
manu();
}
}
system("pause");
system("cls");
manu();
}
void num()
{
int i, j;
int k = 0;
char a;
system("cls");
printf("输入学号\n");
scanf_s("%d", &i);
printf("\t学号\t姓名\t班级\t语文成绩\t数学成绩\n");
for (j = 0; j < n; j++)
{
if (stu[j].num == i)
{
printf("\t%d\t%s\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
k = 1;
continue;
}
}
if (k == 0)
{
printf("很抱歉 没找到\n");
system("pause");
printf("输入y继续");
scanf_s("%c", &a);
if (a == 'y' || a == 'Y')
{
system("pause");
system("cls");
manu();
}
else
{
printf("输入有误");
system("pause");
system("cls");
manu();
}
}
system("pause");
system("cls");
manu();
}
void tiaojian(int score)
{
int i;
int k = 0;
for (i = 0; i < n; i++)
{
if (stu[i].ch >= score && stu[i].math >= score)
{
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[i].num, stu[i].name, stu[i].cl, stu[i].ch, stu[i].math);
k++;
system("pause");
system("cls");
manu();
}
}
if (k == 0)
{
printf("不存在满足条件的学生");
system("pause");
system("cls");
manu();
}
}
void lookfor()
{
int i;
int k = 0;
system("cls");
printf("\t=======================欢迎进入查找界面=========================\t\n");
printf(" 1,按班级查找\n");
printf(" 2,按学号查找\n");
printf(" 3,单科在90分以上\n");
printf(" 4,单科在80分以上\n");
printf(" 5,单科在60分以上\n");
printf(" 6,单科在60分以下\n");
fflush(stdin);
scanf_s("%d", &i);
switch (i)
{
case 1:Class();
break;
case 2:num();
break;
case 3:
tiaojian(90);
break;
case 4:
tiaojian(80);
break;
case 5:
tiaojian(60);
break;
case 6:
for (i = 0; i < n; i++)
{
if (stu[i].ch < 60 && stu[i].math < 60)
{
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[i].num, stu[i].name, stu[i].cl, stu[i].ch, stu[i].math);
k++;
system("pause");
system("cls");
manu();
}
}
if (k == 0)
{
printf("不存在满足条件的学生");
system("pause");
system("cls");
manu();
}
break;
}
}
void xiugai()
{
int i;
int j;//循环序号
char a[20];
int k = 0;//标志点
int m;//选择点
int h;//循环序号
int count = 0;//标志点
int g;
system("cls");
printf("\t******************欢迎进入修改界面*****************************\t\n");
printf(" 按学号查找\n");
printf("输入学号\n");
fflush(stdin);
scanf_s("%d", &g);
for (j = 0; j < n; j++)
{
if (stu[j].num == g)
{
k++;
printf("找到了\n");
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
printf(" 1,修改该生的学号\n");
printf(" 2,修改该生的姓名\n");
printf(" 3,修改该生的班级\n");
printf(" 4,修改该生的语文成绩\n");
printf(" 5,修改该生的数学成绩\n");
scanf_s("%d", &m);
if (m == 1)
{
printf("学号修改成:\n");
scanf_s("%d", &i);
for (h = 0; h < n; h++)
{
if (stu[h].num == i)
{
printf("学号重复");
k++;
system("pause");
system("cls");
manu();
}
}
if (k != 0)
{
stu[j].num = i;
}
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
system("pause");
system("cls");
manu();
break;
}
if (m == 2)
{
printf("姓名修改成:\n");
scanf_s("%s", &stu[j].name);
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
system("pause");
system("cls");
manu();
}
if (m == 3)
{
printf("班级修改成:\n");
scanf_s("%d", &stu[j].cl);
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
system("pause");
system("cls");
manu();
}
if (m == 4)
{
printf("语文成绩修改成:\n");
scanf_s("%d", &stu[j].ch);
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
system("pause");
system("cls");
manu();
}
if (m == 5)
{
printf("数学成绩修改成:\n");
scanf_s("%d", &stu[j].math);
printf("\t学号\t姓名\t班级\t语文成绩 数学成绩\n");
printf("\t%d\t%s\t %d\t %d \t %d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math);
system("pause");
system("cls");
manu();
}
}
}
if (k == 0)
{
printf("没找到\n");
system("pause");
system("cls");
xiugai();
}
}
void clear()
{
n = 0;
printf("信息已经清空");
system("pause");
display();
manu();
}
void Exit()
{
system("exit");
}
void sort()
{
int i;
int j, k;
system("cls");
printf("\t===============欢迎进入排序界面===============\t\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t\t 1,按姓名排序\n");
printf("\t\t 2,按班级排序\n");
printf("\t\t 3,按语文成绩排序\n");
printf("\t\t 4,按数学排序\n");
printf("\t\t 5,按总分排序\n");
scanf_s("%d", &i);
switch (i)
{
case 1:
for (j = 0; j < n; j++)
{
for (k = 0; k < n; k++)
{
if (stu[k].name > stu[k + 1].name)
{
stu[199] = stu[k];
stu[k] = stu[k + 1];
stu[k + 1] = stu[199];
}
}
}
display();
break;
case 2:
for (j = 0; j < n; j++)
{
for (k = 0; k < n - 1; k++)
{
if (stu[k].cl > stu[k + 1].cl)
{
stu[199] = stu[k];
stu[k] = stu[k + 1];
stu[k + 1] = stu[199];
}
}
}
display();
break;
case 3:
for (j = 0; j < n; j++)
{
for (k = 0; k < n - 1; k++)
{
if (stu[k].ch > stu[k + 1].ch)
{
stu[100] = stu[k];
stu[k] = stu[k + 1];
stu[k + 1] = stu[100];
}
}
}
display();
break;
case 4:
for (j = 0; j < n; j++)
{
for (k = 0; k < n - 1; k++)
{
if (stu[k].math > stu[k + 1].math)
{
stu[199] = stu[k];
stu[k] = stu[k + 1];
stu[k + 1] = stu[199];
}
}
}
display();
break;
case 5:
for (j = 0; j < n; j++)
{
stu[j].sum = stu[j].math + stu[j].ch;
stu[j].aver = stu[j].sum / 2;
}
for (j = 0; j < n; j++)
{
for (k = 0; k < n - 1; k++)
{
if (stu[k].sum > stu[k + 1].sum)
{
stu[199] = stu[k];
stu[k] = stu[k + 1];
stu[k + 1] = stu[199];
}
}
}
display();
break;
}
}
void zhuce()
{
int a, b;
printf("请输入工号/学号:\n");
scanf_s("%d", &a);
for (int i = 0; i < n; i++)
{
if (stu[i].num == a)
{
printf("学号重复!");
system("pause");
system("cls");
printf("请重新输入:");
zhuce();
}
else
{
stu[i].num = a;
fflush(stdin);
printf("输入学生的姓名");
gets_s(stu[n].name);
fflush(stdin);
printf("输入学生的班级");
scanf_s("%d", &stu[n].cl);
printf("输入学生的语文成绩");
fflush(stdin);
scanf_s("%d", &stu[n].ch);
printf("输入学生的数学成绩");
fflush(stdin);
scanf_s("%d", &stu[n].math);
fflush(stdin);
scanf_s("%c", &a);
stu[i].password = 456852;
printf("注册成功!");
break;
}
}
printf("注册成功!\n初始密码为:456852\n");
manu();
}
void tongji()
{
int i, j, k = 0;
int summath = 0;
int avermath;
int sumch = 0;
int averch;
char a;
system("cls");
printf("\t\t==========1,每个学生的总分平均分============\n");
printf("\t\t==========2,统计各个科目的平均分============\n");
printf("\t\t==========3,统计班级的单科平均分============\n");
printf("\t\t==========4,统计班级的总平均分==============\n");
scanf_s("%d", &i);
switch (i)
{
case 1:for (j = 0; j < n; j++)
{
stu[j].sum = stu[j].math + stu[j].ch;
stu[j].aver = stu[j].sum / 2;
}
printf("\t学号\t姓名\t班级\t语文\t数学\t总分\t平均分\n");
for (j = 0; j < n; j++)
{
printf("\t%d\t%s\t%d\t%d\t%d\t%d\t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math, stu[j].sum, stu[j].aver);
}
system("pause");
system("cls");
manu();
break;
case 2:
for (j = 0; j < n; j++)
{
summath += stu[j].math;
avermath = summath / n;
sumch += stu[j].ch;
averch = sumch / n;
}
printf("\t学号\t姓名\t班级\t语文\t数学\t语文均分\t数学均分\n");
for (j = 0; j < n; j++)
{
printf("\t%d\t%s\t%d\t%d\t%d \t%d \t%d\n", stu[j].num, stu[j].name, stu[j].cl, stu[j].ch, stu[j].math, averch, avermath);
}
system("pause");
system("cls");
manu();
break;
case 3: //统计班级的单科平均分
printf("输入班级号");
scanf_s("%d", &i);
for (j = 0; j < n; j++)
{
if (stu[j].cl == i)
{
summath += stu[j].math;
sumch += stu[j].ch;
k++;
}
else
{
printf("您输入的班级号不存在\n");
system("pause");
system("cls");
tongji();
}
}
avermath = summath / k;
averch = sumch / k;
printf("\t班级\t语文均分\t数学均分\n");
printf("\t%d\t%d\t%d\n", i, averch, avermath);
system("pause");
system("cls");
manu();
break;
case 4: //统计班级的总平均分
printf("输入班级号");
scanf_s("%d", &i);
for (j = 0; j < n; j++)
{
if (stu[j].cl == i)
{
summath += stu[j].math + stu[j].ch;
k++;
}
else
{
printf("您输入的班级号不存在\n");
system("pause");
system("cls");
tongji();
}
}
avermath = summath / k;
printf("\t班级\t总均分\n");
printf("\t%d\t%d\n", i, avermath);
system("pause");
system("cls");
manu();
break;
}
}
void manu()
{
int i;
system("cls");
printf("\t************************************************************\n");
printf("\t 管理员登陆界面 \n");
printf("\t************************************************************\n");
printf("\t 欢迎进入学生管理成绩系统 \n");
printf("\t0,功能:\n");
printf("\t1,浏览学生成绩\n");
printf("\t2,添加学生成绩\n");
printf("\t3,修改学生成绩\n");
printf("\t4,删除学生成绩\n");
printf("\t5,清空记录\n");
printf("\t6,按要求查询学生成绩\n");
printf("\t7,按要求排序\n");
printf("\t8,按要求统计成绩\n");
printf("\t9,关闭程序\n");
printf("\t请选择功能:\n");
scanf_s("%d", &i);
switch (i)
{
case 1:
display();
break;
case 2:
add();
break;
case 3:
xiugai();
break;
case 4:
Delete();
break;
case 5:
clear();
break;
case 6:
lookfor();
break;
case 7:
sort();
break;
case 8:
tongji();
break;
case 9:
break;
}
}
void main()
{
int i;
char a[20] = { 'l','i','u' };
int j = 123;
char b[20];
int k;
printf("\t\t\t 1.普通用户登陆\n");
printf("\t\t\t 2.用户注册\n");
printf("\t\t\t 功能选择:\n");
scanf_s("%d", &i);
if (i == 1)
{
printf("输入用户名和密码\n");
printf("用户名\n");
fflush(stdin);
gets_s(b);
printf("密码\n");
scanf_s("%d", &k);
if (strcmp(a, b) == 0 && j == k)
{
manu();
}
else
{
printf("输入错误");
system("exit");
}
}
if(i==2)
{
zhuce();
}
else
{
printf("输入错误");
system("exit");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理