学生管理系统数数组版

项目需求

使用者身份及权限

项目使用者分为 普通学生 和 教职工;不同的身份决定了不同的权限

普通学生

普通学生在此系统中只能进行 “读” 的操作,即只能查看不能修改,具体权限如下:

1.查看学生信息(不完全)

2.搜索指定学生

3.退出当前操作

教职工

教职工在此系统中可 “读” 亦可 “写”,即可以查看与修改,具体权限如下:

1.查看学生信息(完全)

2.搜索指定学生

3.添加学生档案

4.删除学生档案

5.修改学生信息

6.退出当前操作

学生信息要求

学生信息要求包含如下内容:

1.学生姓名

2.学生学号

3.学生电话号码

(学生查看时,号码中间四位数字用****替代,如“12345678900” -> “123****8900”;老师正常查看)

具体操作要求

1. 查看学生信息

选择此项,终端窗口整齐显示所有学生信息

2. 搜索指定学生

选择此项,程序输出 “请输入学生学号” ->

若存在该学号,则正常显示;若不存在,则提示“不存在该学生!”

3. 添加学生档案

选择此项,要求用户依次学生 学号,姓名,电话号码

注意 学生学号不可重复,否则提示“学号不可重复!”

4. 删除学生档案

选择此项,要求用户输入学生学号 ->

若存在,系统再次询问是否删除;不存在,则提示“不存在该学生!”

5. 修改学生信息

选择此项,要求用户输入学生学号 ->

若存在,用户依次输出修改后的学生信息;不存在,则提示“不存在该学生!”

6. 退出当前操作

选择此项,输出“欢迎使用,再见!”,最后返回主菜单;

根据需求逐步实现

初始化操作

学生信息

学生信息的组成部分是姓名、学号和电话号码;而我们要实现一个存储学生信息的功能;

就不得不使用 结构体数组 ;那么,第一步初始化操作便是 定义结构体

struct Student
{
  // 学生姓名
  char name[10];
  // 学生学号
  char number[13];
  // 电话号码
  char phone[11];
};
管理容器

由于还没有学习链表,我们先通过数组实现该系统 —— 初始化一个足够大的结构体数组,用于存储未来所有学生信息

为了使代码中所有函数可以访问该数组 需要全局定义

// 初始化结构体数组
  Student allStudents[10000];
学生总人数
// 初始化学生总人数
int students = 0;

第一步 选择身份

想要区分不同的用户类型

需要通过初始菜单供用户选择

void Users()
{
  while (1)
  {
    printf("请问您的身份是:\n");
    printf("1.普通学生\n");
    printf("2.教职工\n");
    printf("0.退出系统\n");
    // 选择变量
    int choice_1;
    // 输入用户的选择
    scanf("%d", &choice_1);
    switch (choice_1)
    {
    case 1:
      studentMenu();
      break;
    case 2:
      staffMenu();
      break;
    case 0:
      printf("欢迎下次使用!\n");
      return;
    default:
      printf("请输入有效选项!\n");
      break;
    }
  }
}

第二步 根据身份显示不同界面

思考一下为什么查看学生信息和搜索制定学生需要传参呢?

// 普通学生界面
void studentMenu()
{

  // 为了多次选择 需要使用while循环
  while (1)
  {
    // 显示学生可执行的操作
    // 1.查看学生信息(不完全)
    // 2.搜索指定学生
    // 3.退出当前操作
    printf("1.查看学生信息\n");
    printf("2.搜索指定学生\n");
    printf("3.退出当前操作\n");
    // 选择变量
    int choice_2;
    scanf("%d", &choice_2);
    // switch 进行选项分析
    switch (choice_2)
    {
    case 1:
      // 查看学生信息
      Information(1);
      break;
    case 2:
      // 搜索指定学生
      Search(1);
      break;
    case 3:
      // 退出系统
      printf("再见!\n");
      return;
    default:
      // 输入有误
      printf("请输入有效选项!\n");
      break;
    }
  }
}
// 教职工界面
void staffMenu()
{

  // 为了多次选择 需要使用while循环
  while (1)
  {
    // 显示教职工可执行的操作
    // 1.查看学生信息(完全)
    // 2.搜索指定学生
    // 3.添加学生档案
    // 4.删除学生档案
    // 5.修改学生信息
    // 6.退出当前操作
    printf("1.查看学生信息\n");
    printf("2.搜索指定学生\n");
    printf("3.添加学生档案\n");
    printf("4.删除学生档案\n");
    printf("5.修改学生信息\n");
    printf("6.退出当前操作\n");
    // 选择变量
    int choice_3;
    scanf("%d", &choice_3);
    // switch 进行选项分析
    switch (choice_3)
    {
    case 1:
      // 查看学生信息
      Information(2);
      break;
    case 2:
      // 搜索指定学生
      Search(2);
      break;
    case 3:
      // 添加学生档案
      addInfo();
      break;
    case 4:
      // 删除学生档案
      deleteInfo();
      break;
    case 5:
      // 修改学生信息
      modifyInfo();
      break;
    case 6:
      // 退出系统
      printf("再见!\n");
      return;
    default:
      // 输入有误
      printf("请输入有效选项!\n");
      break;
    }
  }
}

第三步 书写详细函数

查看学生信息
// 查看学生信息
void Information(int identity)
{
  printf("学生信信息如下:\n");
  printf("姓名\t学号\t\t电话号码\t\n");
  // 学生的电话号码根据身份有不同的显示格式
  // 此时适合通过参数分辨
  if (identity == 1)
  {
    // 学生操作中
    for (int i = 0; i < students; i++)
    {
      Student stu = allStudents[i];
      printf("%s\t", stu.name);
      printf("%s\t", stu.number);
      printf("%c%c%c****%c%c%c%c\t", stu.phone[0], stu.phone[1], stu.phone[2], stu.phone[7], stu.phone[8], stu.phone[9], stu.phone[10]);
      printf("\n");
    }
  }
  else
  {
    // 老师操作中
    for (int i = 0; i < students; i++)
    {
      Student stu = allStudents[i];
      printf("%s\t", stu.name);
      printf("%s\t", stu.number);
      printf("%s\t", stu.phone);
      printf("\n");
    }
  }
  printf("\n");
}
搜索指定学生
// 搜索指定学生
void Search(int identity)
{
  printf("请输入该学生学号:\n");
  char searchNumber[13];
  scanf("%s", &searchNumber);
  // 查找ing
  // 存在标志
  int flag = 0;
  Student stu;

  for (int i = 0; i < students; i++)
  {
    stu = allStudents[i];
    // 判断学号是否符合
    if (strcmp(stu.number, searchNumber) == 0)
    {
      flag = 1;
      break;
    }
  }
  if (!flag)
  {
    printf("不存在该学生!\n");
    return;
  }
  // 显示该学生信息
  printf("学生姓名\t学生学号\t学生电话号码\t\n");
  if (identity == 1)
  {
    printf("%s\t", stu.name);
    printf("%c%c%c****%c%c%c%c\t", stu.number[0], stu.number[1], stu.number[2], stu.number[7], stu.number[8], stu.number[9], stu.number[10]);
    printf("%s\t", stu.phone);
    printf("\n");
  }
  else
  {
    printf("%s\t", stu.name);
    printf("%s\t", stu.number);
    printf("%s\t", stu.phone);
    printf("\n");
  }
}
添加学生档案
// 添加学生档案
void addInfo()
{
  // 初始化待添加学生的信息
  Student newStudent;
  printf("请输入学生姓名:\n");
  scanf("%s", &newStudent.name);
  printf("请输入学生学号:\n");
  scanf("%s", &newStudent.number);
  printf("请输入学生电话号码:\n");
  scanf("%s", &newStudent.phone);
  // 判断学号是否重复
  for (int i = 0; i < students; i++)
  {
    Student stu = allStudents[i];
    if (strcmp(stu.number, newStudent.number) == 0)
    {
      printf("学号不可重复!\n");
      return;
    }
  }
  // 添加
  allStudents[students++] = newStudent;
  printf("添加成功!\n");
  return;
}
删除学生档案
// 删除学生档函
void deleteInfo()
{
  if (students == 0)
  {
    printf("暂无可删除的学生\n");
    return;
  }

  printf("请输入该学生学号:\n");
  char searchNumber[13];
  scanf("%s", &searchNumber);
  // 查找ing
  // 存在标志
  int flag = 0;
  Student stu;

  for (int i = 0; i < students; i++)
  {
    stu = allStudents[i];
    // 判断学号是否符合
    if (strcmp(stu.number, searchNumber) == 0)
    {
      flag = 1;
      // 再次确认是否删除
      printf("是否确认删除该学生?(y/n)\n");
      char answer;
      scanf(" %c", &answer);
      if (answer == 'n')
      {
        return;
      }

      // 删除 数组就很麻烦
      for (int j = i; i < students - 1; i++)
      {
        allStudents[j] = allStudents[+1];
      }
      // 人数变化
      --students;
      printf("该学生已删除\n");
    }
  }
  if (!flag)
  {
    printf("不存在该学生!\n");
    return;
  }
}
修改学生信息
// 修改学生信息
void modifyInfo()
{
  printf("请输入该学生学号:\n");
  char searchNumber[13];
  scanf(" %s", &searchNumber);
  // 查找ing
  // 存在标志
  int flag = 0;
  Student stu;
  for (int i = 0; i < students; i++)
  {
    stu = allStudents[i];
    // 判断学号是否符合
    if (strcmp(stu.number, searchNumber) == 0)
    {
      flag = 1;
      // 修改
      Student stu;
      printf("请输入修改后的学生姓名:\n");
      scanf("%s", &stu.name);
      printf("请输入修改后的学生学号:\n");
      scanf("%s", &stu.number);
      printf("请输入修改后的学生电话号码:\n");
      scanf("%s", &stu.phone);
      allStudents[i] = stu;
      printf("修改完成!\n");
      break;
    }
  }
  if (!flag)
  {
    printf("不存在该学生!\n");
  }
}

效果演示

教职工添加学生档案

 

教职工查看学生信息+教职工修改学生信息

 

教职工删除学生档案

 

切换用户身份

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值