C语言版----学生信息管理系统(分析+代码)

一、分析系统功能设计

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.排序函数

最后,我也是一名新手小菜鸟,希望和大家一起进步~

希望大家可以自己把代码敲出来,并且弄懂,只有把知识点弄懂弄透,才能把其变成自己的东西~加油吧! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值