一、分析系统功能设计
1.初始化学生列表、教师列表
·typedef struct student
- 先对学生结构体进行重定义,便于对相关数组取名
- 再初始化一个教室class,便于在后面的函数中调用学生信息
·typedef struct teacher
- 先对教师结构体进行重定义,便于对相关数组取名
·void inputtStu()
- 初始化三个学生的姓名、学号、性别、年龄、语文成绩与数学成绩
- 再通过计算,算出每个学生的总分、平均分
·void inputtTea()
- 初始化一位教师的用户账户(工号)、密码
2.登录功能
·void login()
- 设置登录,登录成功教师才可以使用学生管理系统
- 首先设置提示语:请输入账户.......;
- 其次利用循环语句和判断语句,如果输入的账号、密码与预期相符,即输出提示语:登录成功
- 否则输出:重新登录
3.菜单函数
·void menu()
- 存放添加函数、修改函数、删除函数、查询函数、排序函数、查看函数等功能函数
- 利用while循环、switch循环、case语句、break语句、default语句等,再调用功能函数写出相应的代码
4.添加函数
·void addStu()
- 添加学生信息
- 采用3个while循环,第一个包括一些提示语句,比如:请输入添加学生的学号等
- 第二个while循环包括判断学号是否与初始化的重复
- 第三个包括判断成绩输入是否在0~100之间,最后利用判断语句,询问是否继续添加
5.修改函数
·void updateStu()
- 修改原有的学生信息
- 先设置while循环,通过for循环,遍历学生信息的数组,通过if语句中的strcmp对比函数,寻找与输入的学号相符的学生
- 找到之后可修改学生姓名、性别、学号、成绩,分别在两个while循环里利用if语句判断修改的学号是否与现有的重复、判断修改的分数是否在0~100之间
- 全部符合规定,判断修改成功
6.删除函数
·void deleteStu()
- 删除原有的学生信息
- 先设置while循环,通过for循环,遍历学生信息的数组,通过if语句中的strcmp对比函数,寻找与输入的学号相符的学生,找到即删除成功
7.查询函数
·void Student_SearchByIndex()
- 查询所有学生信息
- 遍历学生数组,通过if判断语句中strcmp函数对比学生的学号ID,找到就返回位置
8.排序函数
·void sortByScoreSum()
- 通过冒泡排序,利用两个for循环,对学生的总成绩进行排序
- 在第一个for循环中输出排名
9.查看函数
·void printScore()
- 通过调用结构体元素打印出全部学生的信息
10.主函数
·int main()
- 调用登录、初始化学生信息、初始化教师信息、菜单函数
一、实现代码
1.初始化学生列表、教师列表
//重定义结构体
//学生结构体
typedef struct student{
//学号、姓名、性别、年龄
char ID[20];
char name[20];
char sex[20];
float age;
//每个学生每科成绩、总成绩、平均成绩
float chinese;
float math;
float sum;
float av;
}STU;
//初始化一个教室--数组 、三个学生
STU class[20];
int count=3;
//初始化3个学生信息
void inputtStu()
{
strcpy(class[0].name,"a");
strcpy(class[0].sex,"男");
strcpy(class[0].ID,"101");
class[0].age=18;
class[0].chinese=78;
class[0].math=95;
class[0].sum=class[0].chinese+class[0].math;
class[0].av=(class[0].chinese+class[0].math)/2;
strcpy(class[1].name,"b");
strcpy(class[1].sex,"男");
strcpy(class[1].ID,"102");
class[1].age=19;
class[1].chinese=98;
class[1].math=86;
class[1].sum=class[1].chinese+class[1].math;
class[1].av=(class[1].chinese+class[1].math)/2;
strcpy(class[2].name,"c");
strcpy(class[2].sex,"女");
strcpy(class[2].ID,"103");
class[2].age=20;
class[2].chinese=75;
class[2].math=79;
class[2].sum=class[2].chinese+class[2].math;
class[2].av=(class[2].chinese+class[2].math)/2;
}
//教师结构体
typedef struct teacher
{
//姓名
char name[20];
//每个登录账号(工号)和密码
char username[20];
char password[20];
}TEA;
TEA tea[20];
//初始化1个教师用户
void inputtTea()
{
strcpy(tea[0].name,"李老师");
strcpy(tea[0].username,"10001");
strcpy(tea[0].password,"10010");
}
2.登录功能
void login()
{
//判断逻辑
char username[20];
char password[20];
char pd[20];
int i;
printf("\n\t\t\t\t********学生管理系统********\n");
while(1){
printf("\t\t\t\t**********请 登 录**********\n");
printf("\t\t\t\t\t请输入用户账号\n");
scanf("%s",username);
printf("\t\t\t\t\t请输入用户密码\n");
scanf("%s",password);
//判断用户账户与用户密码是否匹配
for(i=0;i<3;i++){
if(strcmp(tea[i].username,username)==0&&strcmp(tea[i].password,password)==0)
{
printf("\t\t\t\t登录成功!\n");
return;
}
printf("\t\t\t\t\t账号或密码错误!!!\n");
printf("\t\t\t\t\t是否继续?(y or n)");
scanf("%s",pd);
if (strcmp(pd,"n")==0)
{
printf("\t\t\t\t\t欢迎下次使用!");
exit(0); //结束操作
}
else{
break;
}
}
}
}
3.菜单函数
void menu()
{
while(1){
printf("\t\t\t\t\t********学生管理系统********\n");
printf("\t\t\t\t\t\t0.退出系统\n");
printf("\t\t\t\t\t\t1.添加学生信息\n");
printf("\t\t\t\t\t\t2.修改学生信息\n");
printf("\t\t\t\t\t\t3.删除学生信息\n");
printf("\t\t\t\t\t\t4.查询学生信息\n");
printf("\t\t\t\t\t\t5.根据总分进行排序\n");
printf("\t\t\t\t\t\t6.查看所有学生信息\n");
printf("\t\t\t\t\t\t\t请选择0-6\n");
int i;
scanf("%d",&i);
switch(i)
{
case 1: addStu(); break;//添
case 2:updateStu(); break;//改
case 3:deleteStu(); break;//删
case 4:Student_SearchByIndex(); break;//查
case 5:sortByScoreSum(); break;//排
case 6:printScore(); break;//看
case 0:printf("\t\t\t\t\t\t\t欢迎下次使用!");exit(0);//退出系统
default:printf("\t\t\t\t\t输入错误,请重新输入!!!");
}
}
}
4.添加函数
void addStu()
{
int i=0;
//第一个while循环体包括两个while,第一个作用是作为判断学号输入是否合格的判断语句的循环体
//第二个是作为判断分数是否合格的判断语句的循环体
while(1){
printf("请输入新增学生的姓名:");
scanf("%s",class[count].name);
printf("请输入新增学生的学号:");
scanf("%s",class[count].ID);
printf("请输入新增学生的性别:");
scanf("%s",class[count].sex);
printf("请输入新增学生的年龄:");
scanf("%f",&class[count].age);
char *pd;
/*1.遍历所有学生
2.把每个学生的学号与刚才输入的学号进行对比,是否重复
3.如果重复就重新输入,否则向后执行*/
while(1)
{
for(i=0;i<count;i++)
{
if(strcmp(class[count].ID,class[i].ID)==0)
{
printf("学号有误,请重新输入!!!");
printf("请输入新增学生的学号:");
scanf("%s",class[count].ID);
break;
}
}
//所有条件不满足就跳出for循环,证明输入的学号符合规范
if(i==count){
break;
}
}
printf("请输入新增学生的语文成绩:");
scanf("%f",&class[count].chinese);
printf("请输入新增学生的数学成绩:");
scanf("%f",&class[count].math);
class[count].sum=class[count].chinese+class[count].math;
class[count].av=(class[count].chinese+class[count].math)/2;
while(1){
if(class[count].chinese<0||class[count].chinese>M||class[count].math<0||class[count].math>M){
printf("请输入0-100之间的数字!!!");
printf("请输入新增学生的语文成绩:");
scanf("%f",&class[count].chinese);
printf("请输入新增学生的数学成绩:");
scanf("%f",&class[count].math);
class[count].sum=class[count].chinese+class[count].math;
class[count].av=(class[count].chinese+class[count].math)/2;
}
else{
break;
}
}
count++; //为了可以继续添加人数
printf("添加成功!");
printf("是否继续添加?y or n");
scanf("%s",pd);
if(*pd=='n')
{
printf("欢迎下次使用!");
//退出系统是因为,这不是文件,没办法储存新增的学生信息
exit(0);
}
}
}
5.修改函数
void updateStu()
{
int i=0;
//遍历学生信息的数组
while(1)
{
printf("\t\t\t\t请输入需要修改的学生信息的学号:\n");
scanf("%s",class[count].ID);
char *pd;
printf("\t\t\t\t--------请输入学生的信息--------\n");
while(1)
{
for(i=0;i<count;i++)
{
//如果学号相符,进行修改操作
if(strcmp(class[count].ID,class[i].ID)==0)
{
printf("\t\t\t\t\n请输入修改后的姓名:");
scanf("%s",class[count].name);
printf("\t\t\t\t\n请输入修改后的年龄:");
scanf("%f",&class[count].age);
printf("\t\t\t\t\n请输入修改后的性别:");
scanf("%s",class[count].sex);
}
if(i==count)
{
printf("\t\t\t\t请重新输入学号 !!!\n");
printf("\t\t\t\t请输入需要修改的学生信息的学号:\n");
scanf("%s",class[count].ID);
break;
}
}
printf("\t\t\t\t\n请输入修改后的语文成绩:");
scanf("%f",&class[count].chinese);
printf("\t\t\t\t\n请输入修改后的数学成绩:");
scanf("%f",&class[count].math);
while(1){
if(class[count].chinese<0||class[count].chinese>M||class[count].math<0||class[count].math>M)
{
printf("请重新输入0-100间的分数!");
printf("\t\t\t\t\n请输入修改后的语文成绩:");
scanf("%f",&class[count].chinese);
printf("\t\t\t\t\n请输入修改后的数学成绩:");
scanf("%f",&class[count].math);
}
else{
break;
}
}
printf("\t\t\t\t修改成功!!!\n");
printf("是否继续?(y or n)");
scanf("%s",pd);
if (*pd=='n')
{
printf("\t\t\t\t\t欢迎下次使用!");
exit(0);
}
}
}
}
6.删除函数
void deleteStu()
{
printf("\t\t\t\t请输入需要删除的学生信息的学号:");
char number[20];
char pd[20];
scanf("%s",number);
//遍历学生信息的数组
int i;
for(i=0;i<count;i++)
{
//根据当前用户所输入的学号进行一一对比
if(strcmp(number,class[i].ID)==0){
//如果学号相符,进行删除操作
//把当前需要删除的学生开始遍历,后一个覆盖前一个,直到找到为止
int j=i;
for(j;j<count-1;j++){
class[j]=class[j+1];
}
printf("\t\t\t\t删除成功!!!\n");
count--;
return;
}
printf("\t\t\t\t当前用户不存在,请重新输入!");
printf("是否继续?(y or n)");
scanf("%s",pd);
if (strcmp(pd,"n")==0)
{
printf("\t\t\t\t\t欢迎下次使用!");
break;
}
}
}
7.查询函数
void Student_SearchByIndex()
{
printf("\t\t\t\t请输入需要查询的学生信息的学号:\n");
char *id;
scanf("%s",id);
char pd[20];
//遍历学生信息的数组
printf("\t\t\t\t--------查询的学生信息如下--------\n");
int i;
for(i=0;i<count;i++)
{
//通过strcmp函数对比学生的学号ID,找到就返回位置
if(strcmp(class[i].ID,id)==0){
printf("\t\t\t姓名:%s 学号:%s 性别:%s 年龄:%.2f 语文成绩:%.2f 数学 成 绩:%.2f\n",class[i].name,class[i].ID,class[i].sex,class[i].age,class[i].chinese,class[i].math);
printf("\t\t\t\t该学生的总成绩为:%.2f\n",class[i].sum);
printf("\t\t\t\t该学生的平均成绩为:%.2f\n",class[i].av);
printf("\t\t\t\t--------------------!!!\n");
return;
}
printf("\t\t\t当前用户不存在,请重新输入!!!\n");
printf("\t\t\t\t是否继续?(y or n)");
scanf("%s",pd);
if (strcmp(pd,"n")==0)
{
printf("\t\t\t\t\t欢迎下次使用!");
exit(0);
}
}
}
8.排序函数
void sortByScoreSum()
{
printf("\t\t\t\t\t--------学生总成绩排名如下--------\n");
int i,j,temp;
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(class[j].sum<class[j+1].sum)
{
temp=class[j].sum;
class[j].sum=class[j+1].sum;
class[j+1].sum=temp;
}
printf("\t\t\t\t学生的总成绩的排名:%.2f\n",class[j].sum);
}
}
}
9.查看函数
void printScore()
{
//STU *stu=class;
int i;
printf("\t\t\t--------所有学生的信息--------\n");
for(i=0;i<count;i++)
{
printf("\t\t\t姓名:%s 学号:%s 性别:%s 年龄:%.2f 语文成绩:%.2f 数学成绩:%.2f\n",class[i].name,class[i].ID,class[i].sex,class[i].age,class[i].chinese,class[i].math);
printf("\t\t\t\t该学生的总成绩为:%.2f\n",class[i].sum);
printf("\t\t\t\t该学生的平均成绩为:%.2f\n",class[i].av);
}
printf("\t\t\t-----------------------");
}
10.主函数
//注意调用函数的顺序
int main()
{
system("color E"); //改变控制台中文字的颜色
inputtTea();
inputtStu();
login();
menu();
}
11.库函数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10
#define M 100
三、运行结果图
1.登录系统
2.菜单函数
3.添加函数
4.修改函数
5.查看函数
6.删除函数
7.查询函数
8.排序函数
最后,我也是一名新手小菜鸟,希望和大家一起进步~文章来源:https://www.toymoban.com/news/detail-493328.html
希望大家可以自己把代码敲出来,并且弄懂,只有把知识点弄懂弄透,才能把其变成自己的东西~加油吧! 文章来源地址https://www.toymoban.com/news/detail-493328.html
到了这里,关于C语言版----学生信息管理系统(分析+代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!