📄 新建 文本文档 (5).txt
字号:
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生信息及成绩进行管理,具有手工管理所无法比拟的优点.
源程序及各模块说明
1、主函数
定义结构体,对要调用的函数进行声明。通过输出控制显示欢迎界面,通过函数getch(),putchar(‘*’)控制密码的输入输出,系统调用菜单函数密码登陆。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 100
int M=0;
struct student
{char num[10];
char name[25];
char sex;
int age;
float score[3];
}stu[N];
void main()
{void system();
void menu();void add();
void del();
void search();
void modify();
void sort();
int k,i;
char str[10];
printf("*****************************************************************************\n");
printf("
\n");printf(" \n");printf(" 欢迎进入学生成绩管理系统! \n"); printf(" \n");printf(" 请输入密码继续! \n");printf(" \n");printf(" \n");
for(k=0;;)
{printf("请输入六位数密码:");
for(i=0;(str[i]=getch())!='\r';i++)
putchar('*');
printf("\n");
str[i]='\0';
if(strcmp(str,"123456")!=0)
printf("密码错误!\n");
else break;
}
printf("登陆成功!");
printf("\n\n\n");
system("cls");
menu();
}
2、 菜单函数
定义菜单函数,通过输出函数显示系统功能。利用switch语句实现多分支选择结构。
void menu()
{int c;printf(" 欢迎进入主菜单! \n");
printf("****************************************************************************\n");
printf("* *\n");printf("* 1.学生信息的录入 *\n");printf("* *\n");printf("* 2.学生信息的删除 *\n");printf("* *\n");printf("* 3.学生信息的查找 *\n); printf("* *\n");printf("* 4.学生信息的修改 *\n");printf("* *\n");printf("* 5.学生排名的情况 *\n");printf("* *\n");printf("* 6.退出系统 *\n");printf("* *\n");printf("****************************************************************************\n");
printf("请选择操作:");
scanf("%d",&c);
if(c<1 || c>6)c=0;
switch(c)
{case 0:printf("输入错误!\n");break;
case 1: add();break;
case 2: del();break;
case 3: search();break;
case 4: modify();break;
case 5: sort();break;
case 6: break;
}}
3、 录入函数
多次使用输入输出函数输入信息,通过标记flag控制多次输入。
void add()
{ void system();
int i=0,flag=1;char k;
system("cls");printf(" 欢迎进入学生信息的录入! \n");
while(flag)
{ i++;
printf("请输入第%d个学生的学号:",i);
scanf("%s",stu[i-1].num);
printf("请输入第%d个学生的姓名:",i);
scanf("%s",stu[i-1].name);
printf("请输入第%d个学生的性别:",i);getchar();
scanf("%c",&stu[i-1].sex);
printf("请输入第%d个学生的年龄:",i);
scanf("%d",&stu[i-1].age);
printf("输入第%d个学生的数学成绩:",i);
scanf("%f",&stu[i-1].score[0]);
printf("输入第%d个学生的英语成绩:",i);
scanf("%f",&stu[i-1].score[1]);
printf("输入第%d个学生的计算机成绩:",i);
scanf("%f",&stu[i-1].score[2]);
M++;printf("\n\n");
printf("序号: %d\n",i);
printf("学号:%s\n",stu[i-1].num);
printf("姓名:%s\n",stu[i-1].name);
printf("性别:%c\n",stu[i-1].sex);
printf("数学:%.2f\n",stu[i-1].score[0]);
printf("英语:%.2f\n",stu[i-1].score[1]);
printf("计算机:%.2f\n",stu[i-1].score[2]); printf("\n\n");
printf("继续或退出(y/n):");getchar();scanf("%c",&k);
if(k=='n' || k=='N')
flag=0;}
system("cls");
menu();
}
4、 删除函数
输入学号,通过学号找到对应的学生,从删除项起后面对应的信息前移。同时,用标记flag控制多次删除。
void del()
{void system();
int i,j,flag=1;
char c;
system("cls");
printf("欢迎进入学生信息的删除 功。 \n");
while(flag)
{printf("请输入要删
除的学号:");
scanf("%s",str);
for(i=0;i<N;i++)
if(strcmp(str,stu[i].num)
==0)
{for(j=i;j<N;j++)
stu[j]=stu[j+1];
printf("删除成功!\n");
M--; break; }
if(i==N)
printf("无此学号!\n");
printf("继续或退出(y/n):");
getchar();
scanf("%c",&c);
if(c=='n' || c=='N')flag=0;
}
system("cls");
menu();
}
5查找函数
flag=0
void search()
char str[10];
{void system();
int i,flag=1;
char m;
system("cls");
printf(" 欢迎进入学生信息的查找! \n");
while(flag)
{ printf("请输入要查找的学号:");
scanf("%s",str);
for(i=0;i<N;i++)
if (strcmp(str,stu[i].num)==0)
{ printf("学号 姓名 性别 年龄 高数 英语 计算机\n");
printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],
stu[i].score[1],stu[i].score[2]);
break;
}
if(i==N)printf("无此学号!\n");
printf("继续或退出(Y/N)?");
getchar();
scanf("%c",&m);
if (m=='n'||m=='N')
flag=0;}
system("cls");
menu();
}
算法:通过顺序查找法,从N=0到N-1循环顺序查找输入的学号,再通过字符串比较函数找到学号的位置i,并通过结构体数组输出学生i一系列的信息;通过标记flag=1进入外层循环,控制多次查找信息。
6、 修改函数
输入要修改的学号,通过学号找到对应的学生,再修改其信息,同样,还是利用标记flag控制多次修改。
void modify()
{void system();
char str[10];
int i,j,flag=1;
char k;
system("cls");
printf(" 欢迎进入学生信息的修改! \n");
while(flag)
{printf("请输入要修改的学号:");
scanf("%s",str);
for(i=0;i<N;i++)
if (strcmp(str,stu[i].num)==0)
{ printf("ok!\n");
printf("输出修改前的信息:\n");
printf("学号 姓名 性别 年龄 高数 英语 计算机\n");
printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],
stu[i].score[1],stu[i].score[2]);
printf("\n输入修改的分数:\n");
printf("高数 英语 计算机:");
for(j=0;j<3;j++)
scanf("%f",&stu[i].score[j]);
printf("输出修改后的信息:\n");
printf("学号 姓名 性别 年龄 高数 英语 计算机\n");
printf("%-6s%-10s%3c%7d%11.1f%11.1f%11.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],
stu[i].score[1],stu[i].score[2]);
break;
}
if(i==N)
printf("无此学号!\n");
printf ("继续或退出(Y/N)?");
getchar();
scanf("%c",&k);
if(k=='n'||k=='N')flag=0;
}
system("cls");
menu();
}
7、 排序函数
定义结构体变量作为空瓶子,在利用简单选择排序法以后,用k标记每一躺的最大值的位置,在交换信息。利用flag控制返回主菜单。
void sort()
{void system();
struct student t;
float sum[N];
float aver[N];
float f,g;
char c;
int i,j,k,p,x,flag=1;
system("cls"); 假
printf("欢迎进入学生
信息的排序!\n");
while(flag)
{for(i=0;i<M;i++)
sum[i]=0;
for(i=0;i<M;i++)
for(j=0;j<3;j++)
{sum[i]=sum[i]+
stu[i].score[j];
aver[i]=sum[i]/3; }
for(k=0;k<M-1;k++) {x=k;for(p=k+1;p<M;p++)
if(sum[x]<sum[p])
x=p;
g=sum[k];sum[k]=sum[x];sum[x]=g;
t=stu[k];stu[k]=stu[x];stu[x]=t;
f=aver[k];aver[k]=aver[x];aver[x]=f;}
printf("学号 姓名 性别 年龄 高数 英语 计算机 总分 平均分\n");
for(i=0;i<M;i++)
printf("%-7s%-10s%2c%7d%10.1f%10.1f%10.1f%9.1f%9.1f\n",
stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],
stu[i].score[1],stu[i].score[2],sum[i],aver[i]);
printf("是否返回主菜单(y/n):");
getchar(); scanf("%c",&c);
if(c=='y'||c=='Y') flag=0; }
system("cls");
menu();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -