学生管理系统

news/2024/10/2 0:32:35

include <stdio.h>

include <string.h>

define MAXSIZE 100 // 最大存储100人

define _CRT_SECURE_NO_WARNINGS

struct Student {
char name[20]; // 姓名
int age; // 年龄
int score; // 分数
int num; // 序号
} stu[MAXSIZE];

static int I = 0; // 当前学生数量

void menu();
void input();
void ddelete();
void modify();
void find();
void findall();
int add();

int main() {
int choice1 = 0;
while (1) {
menu();
scanf_s("%d", &choice1);
switch (choice1) {
case 1:
input();
break;
case 2:
ddelete();
break;
case 3:
modify();
break;
case 4:
find();
break;
case 5:
if (!add()) {
printf("插入失败,请检查插入位置。\n");
}
break;
case 6:
findall();
break;
case 7:
printf("退出系统\n");
return 0;
default:
printf("不存在该选项\n");
}
}
return 0;
}

// 主菜单
void menu() {
printf("学生管理系统*\n");
printf(" 请选择:\n");
printf(" 1、输入学生信息\n");
printf(" 2、删除学生信息\n");
printf(" 3、修改学生信息\n");
printf(" 4、查看学生信息\n");
printf(" 5、插入学生信息\n");
printf(" 6、查看总体学生信息\n");
printf(" 7、退出系统\n");
printf(" *************************\n");
}

// 输入学生信息
void input() {
if (I < MAXSIZE) {
printf("输入学生姓名:\n");
scanf_s("%19s", stu[I].name, sizeof(stu[I].name)); // 使用 sizeof 计算数组大小

    printf("输入序号:\n");scanf_s("%d", &stu[I].num);printf("输入年龄:\n");scanf_s("%d", &stu[I].age);printf("输入成绩:\n");scanf_s("%d", &stu[I].score);I++;
}
else {printf("已满,无法输入\n");
}

}

// 删除学生信息
void ddelete() {
printf("输入序号:\n");
int num1 = 0;
scanf_s("%d", &num1);
int flag = -1; // 初始化为-1以表示未找到
for (int j = 0; j < I; j++) {
if (stu[j].num == num1) {
flag = j;
break; // 找到后退出循环
}
}
if (flag != -1) { // 如果找到
for (int n = flag; n < I - 1; n++) {
stu[n] = stu[n + 1]; // 向前移动元素
}
--I; // 学生数量减一

    // 更新序号for (int j = 0; j < I; j++) {stu[j].num = j + 1; // 假设序号从1开始,序号数比数组序数大1。}printf("删除成功\n");
}
else {printf("未找到该序号的学生\n");
}

}

// 修改学生信息
void modify() {
printf("输入序号:\n");
int num1 = 0;
scanf_s("%d", &num1);
for (int j = 0; j < I; j++) {
if (stu[j].num == num1) {
printf("选择要修改的信息:\n1、姓名\n2、序号\n3、年龄\n4、成绩\n");
int choice = 0;
scanf_s("%d", &choice);
switch (choice) {
case 1:
printf("输入修改后的姓名:\n");
scanf_s("%19s", stu[j].name, sizeof(stu[j].name)); // 使用 sizeof 计算数组大小
break;
case 2:
printf("输入修改后的序号:\n");
scanf_s("%d", &stu[j].num);
break;
case 3:
printf("输入修改后的年龄:\n");
scanf_s("%d", &stu[j].age);
break;
case 4:
printf("输入修改后的成绩:\n");
scanf_s("%d", &stu[j].score);
break;
default:
printf("不存在该操作,请重新选择\n");
}
return; // 找到并修改后直接返回
}
}
printf("未找到该序号的学生\n");
}

// 查看信息
void find() {
printf("输入序号:\n");
int num1 = 0;
scanf_s("%d", &num1);
for (int i = 0; i < I; i++) {
if (stu[i].num == num1) {
printf("学生姓名:%s\t 学生年龄:%d\t 学生序号:%d\t 学生成绩:%d\t\n", stu[i].name, stu[i].age, stu[i].num, stu[i].score);
return; // 找到后直接返回
}
}
printf("未找到该序号的学生\n");
}

//查看总体学生信息
void findall() {
for (int i = 0; i < I; i++) {
printf("学生姓名:%s\t 学生年龄:%d\t 学生序号:%d\t 学生成绩:%d\t\n", stu[i].name, stu[i].age, stu[i].num, stu[i].score);
}
}

// 插入学生信息
int add() {
printf("输入插入的位置 (1 到 %d):\n", I + 1); // 提示用户输入的范围
int N = 0;
scanf_s("%d", &N);
if (N > 0 && N <= I + 1 && I < MAXSIZE) { // 允许插入在I+1位置
for (int j = I; j >= N; j--) {
stu[j] = stu[j - 1]; // 向后移动元素
}

    printf("输入学生姓名:\n");scanf_s("%19s", stu[N - 1].name, sizeof(stu[N - 1].name)); // 使用 sizeof 计算数组大小printf("输入序号(与插入位置相同):\n");scanf_s("%d", &stu[N - 1].num);printf("输入年龄:\n");scanf_s("%d", &stu[N - 1].age);printf("输入成绩:\n");scanf_s("%d", &stu[N - 1].score);I++;// 更新序号for (int j = N - 1; j < I; j++) {   //N是插入是序号数,N-1是该插入数的数组序数stu[j].num = j + 1; // 序号从1开始}return 1; // 插入成功
}
return 0; // 插入失败

}

与以往不同的是这一次用c语言写系统类题目,与c++和java不同的是c语言没有类,所以将函数定义写在最前面。

在删除和插入功能中,要分清序号数分数组序数,数组序数要比序号数小1。

scanf_s("%19s", stu[N - 1].name, sizeof(stu[N - 1].name))中:
sizeof(stu[N - 1].name)是scanf_s的第三个参数,作用是 获取 stu[N - 1].name 的大小,以字节为单位。scanf_s 要求用户在读取字符串时提供目标缓冲区的大小,以增强安全性。scanf_s 的第三个参数是必须的,用于告诉函数可写入的最大字符数,以防止溢出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

忘记帝国 CMS 密码怎么办?教你一招轻松重置

如果您无法通过“找回密码”功能重置密码,可以尝试手动重置密码。备份数据库:在开始任何操作之前,请先备份数据库,以防万一。连接数据库:使用数据库管理工具(如 phpMyAdmin)连接到帝国CMS的数据库。找到用户表:导航到用户表,通常是 phome_enewsuser。查找用户记录:在…

dedecms(织梦)网站安全防护设置

织梦CMS 是国内常用的免费开源管理系统之一,但由于其广泛使用,也存在许多已知的安全漏洞。为了提高织梦CMS网站的安全性,以下是一些有效的安全防护设置步骤: 1. 修改网站后台的访问路径修改后台路径:默认后台路径为 http://域名/dede/。 修改为更复杂的路径,例如 http://…

静态QQ登录代码学习

记录学习 @搬砖界泰斗这只小狐狸 的静态QQ登陆页面源码,了解静态登陆页面如何书写&&拓宽自己对css的理解 Q1:用css调节子级元素位置时什么时候调节margin,什么时候调节padding? A1:margin对外,padding对内 e.g.要实现一个这样的排版 有一个大大盒子fafather,里面…

帝国CMS后台登陆时错误_enewsloginfail

当你在迁移帝国CMS网站后,遇到后台登录时出现“Table phome.***_enewsloginfail doesnt exist”的错误时,通常是因为数据库没有正确恢复。以下是详细的解决步骤: 1. 检查数据库恢复情况登录数据库管理工具:使用 phpMyAdmin 或其他数据库管理工具登录到数据库。检查数据库表…

解决 DedeCMS 报错“Please set ‘request_order’”的问题

如果你使用的是虚拟主机,无法直接修改 php.ini 文件,可以通过修改 DedeCMS 的代码来解决这个问题。找到 common.inc.php 文件:打开织梦CMS安装目录下的 include/common.inc.php 文件。修改代码:使用文本编辑器打开 common.inc.php 文件。找到第 34 行:phpif (strtoupper(i…

织梦错误Please set ‘request_order’

当你在使用 DedeCMS 并遇到错误提示“DedeCMS Error: (PHP 5.3 and above) Please set ‘request_order’ ini value to include C,G and P (recommended: ‘CGP’) in php.ini, more…”时,可以通过以下两种方法来解决这个问题: 方法 1:修改 php.ini 文件找到 php.ini 文件…

PbootCMS管理员密码忘记怎么办?pboot重置密码

1. PbootCMS 后台访问地址和初始密码后台访问地址:plaintexthttp://www.domain.com/admin.php将 www.domain.com 替换为你的实际域名。初始账号和密码:账号:admin 初始密码:1234562. 快速部署到本地或服务器 本地部署使用 PHPStudy:安装 PHPStudy 并按照官方文档搭建环境。…

织梦CMS后台登录验证码如何取消?

如果你想取消织梦CMS后台登录时的验证码,可以通过以下步骤进行操作: 1. 下载并编辑 inc_safe_config.php 文件下载文件:使用 FTP 客户端连接到服务器。 导航到网站根目录下的 DATA 文件夹。 找到 safe/inc_safe_config.php 文件并下载到本地。编辑文件:使用文本编辑器(如 …