学生信息管理系统下设管理员、教师、学生三个部分。管理员可以对教师和学生的身份进行管理。教师的权限在成绩维护与查询,其中成绩维护包括录入 、修改、删除、添加,查询功能包括各种方式的成绩查询、统计。学生端则可以查询单科成绩或总成绩

时间: 2023-12-20 17:07:10 浏览: 26
好的,以下是使用 C 语言实现的学生信息管理系统的部分代码,包括管理员、教师和学生三个部分的功能。为了简化代码,这里使用了结构体和数组来存储学生和教师的信息。 ```c #include <stdio.h> #include <string.h> #define MAX_STUDENT 100 #define MAX_TEACHER 100 // 学生和教师信息结构体 struct student { char name[20]; int id; int grade; int class; char phone[20]; int math; int english; int physics; int chemistry; int total; }; struct teacher { char name[20]; char password[20]; }; // 全局变量 struct student students[MAX_STUDENT]; int student_cnt = 0; struct teacher teachers[MAX_TEACHER]; int teacher_cnt = 0; // 函数声明 void admin_login(); void admin_menu(); void add_teacher(); void add_student(); void modify_student(); void delete_student(); void query_student(); void teacher_login(); void teacher_menu(); void add_score(); void modify_score(); void delete_score(); void query_score(); int main() { while (1) { printf("请选择用户类型:\n"); printf("1. 管理员\n"); printf("2. 教师\n"); printf("3. 学生\n"); printf("4. 退出\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: admin_login(); break; case 2: teacher_login(); break; case 3: // 学生功能暂未实现 case 4: return 0; default: printf("无效选择,请重新输入。\n"); } } } // 管理员登录 void admin_login() { printf("请输入管理员账号和密码:\n"); char username[20], password[20]; scanf("%s %s", username, password); if (strcmp(username, "admin") == 0 && strcmp(password, "admin") == 0) { admin_menu(); } else { printf("账号或密码错误,请重新登录。\n"); } } // 管理员菜单 void admin_menu() { while (1) { printf("请选择操作:\n"); printf("1. 添加教师\n"); printf("2. 添加学生\n"); printf("3. 修改学生信息\n"); printf("4. 删除学生信息\n"); printf("5. 查询学生信息\n"); printf("6. 退出\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: add_teacher(); break; case 2: add_student(); break; case 3: modify_student(); break; case 4: delete_student(); break; case 5: query_student(); break; case 6: return; default: printf("无效选择,请重新输入。\n"); } } } // 添加教师 void add_teacher() { if (teacher_cnt >= MAX_TEACHER) { printf("教师信息已满,无法添加。\n"); return; } printf("请输入教师姓名和密码:\n"); char name[20], password[20]; scanf("%s %s", name, password); strcpy(teachers[teacher_cnt].name, name); strcpy(teachers[teacher_cnt].password, password); teacher_cnt++; printf("教师信息添加成功。\n"); } // 添加学生 void add_student() { if (student_cnt >= MAX_STUDENT) { printf("学生信息已满,无法添加。\n"); return; } printf("请输入学生姓名、学号、年级、班级和联系方式:\n"); char name[20], phone[20]; int id, grade, class; scanf("%s %d %d %d %s", name, &id, &grade, &class, phone); strcpy(students[student_cnt].name, name); students[student_cnt].id = id; students[student_cnt].grade = grade; students[student_cnt].class = class; strcpy(students[student_cnt].phone, phone); students[student_cnt].math = -1; students[student_cnt].english = -1; students[student_cnt].physics = -1; students[student_cnt].chemistry = -1; students[student_cnt].total = -4; student_cnt++; printf("学生信息添加成功。\n"); } // 修改学生信息 void modify_student() { printf("请输入学生学号:\n"); int id; scanf("%d", &id); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } printf("请输入修改后的学生姓名、年级、班级和联系方式:\n"); char name[20], phone[20]; int grade, class; scanf("%s %d %d %s", name, &grade, &class, phone); strcpy(students[index].name, name); students[index].grade = grade; students[index].class = class; strcpy(students[index].phone, phone); printf("学生信息修改成功。\n"); } // 删除学生信息 void delete_student() { printf("请输入学生学号:\n"); int id; scanf("%d", &id); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } for (int i = index; i < student_cnt - 1; i++) { students[i] = students[i + 1]; } student_cnt--; printf("学生信息删除成功。\n"); } // 查询学生信息 void query_student() { printf("请输入学生学号:\n"); int id; scanf("%d", &id); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } printf("学生姓名:%s\n", students[index].name); printf("学生学号:%d\n", students[index].id); printf("学生年级:%d\n", students[index].grade); printf("学生班级:%d\n", students[index].class); printf("联系方式:%s\n", students[index].phone); } // 教师登录 void teacher_login() { printf("请输入教师姓名和密码:\n"); char name[20], password[20]; scanf("%s %s", name, password); int index = -1; for (int i = 0; i < teacher_cnt; i++) { if (strcmp(teachers[i].name, name) == 0 && strcmp(teachers[i].password, password) == 0) { index = i; break; } } if (index < 0) { printf("教师姓名或密码错误,请重新登录。\n"); return; } teacher_menu(); } // 教师菜单 void teacher_menu() { while (1) { printf("请选择操作:\n"); printf("1. 添加成绩\n"); printf("2. 修改成绩\n"); printf("3. 删除成绩\n"); printf("4. 查询成绩\n"); printf("5. 退出\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: add_score(); break; case 2: modify_score(); break; case 3: delete_score(); break; case 4: query_score(); break; case 5: return; default: printf("无效选择,请重新输入。\n"); } } } // 添加成绩 void add_score() { printf("请输入学生学号和四门课程的成绩:\n"); int id, math, english, physics, chemistry; scanf("%d %d %d %d %d", &id, &math, &english, &physics, &chemistry); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } students[index].math = math; students[index].english = english; students[index].physics = physics; students[index].chemistry = chemistry; students[index].total = math + english + physics + chemistry; printf("成绩添加成功。\n"); } // 修改成绩 void modify_score() { printf("请输入学生学号和需要修改的课程:\n"); int id; char course[20]; scanf("%d %s", &id, course); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } int score; if (strcmp(course, "math") == 0) { printf("请输入修改后的数学成绩:\n"); scanf("%d", &score); students[index].math = score; } else if (strcmp(course, "english") == 0) { printf("请输入修改后的英语成绩:\n"); scanf("%d", &score); students[index].english = score; } else if (strcmp(course, "physics") == 0) { printf("请输入修改后的物理成绩:\n"); scanf("%d", &score); students[index].physics = score; } else if (strcmp(course, "chemistry") == 0) { printf("请输入修改后的化学成绩:\n"); scanf("%d", &score); students[index].chemistry = score; } else { printf("无效课程,请重新输入。\n"); return; } students[index].total = students[index].math + students[index].english + students[index].physics + students[index].chemistry; printf("成绩修改成功。\n"); } // 删除成绩 void delete_score() { printf("请输入学生学号和需要删除的课程:\n"); int id; char course[20]; scanf("%d %s", &id, course); int index = -1; for (int i = 0; i < student_cnt; i++) { if (students[i].id == id) { index = i; break; } } if (index < 0) { printf("找不到学生信息,请重新输入。\n"); return; } if (strcmp(course, "math") == 0) { students[index].math = -1; } else if (strcmp(course, "english") == 0) { students[index].english = -1; } else if (strcmp(course, "physics") == 0) { students

相关推荐

application/x-rar
为实现用户需求,从需求分析阶段的数据流图出发,根据小组讨论后确定的最佳方案。本系统主要包括两大功能模块:学生信息和成绩信息两个系统。其中学生信息系统划分为七个模块,学生成绩划分为四个模块。然后在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据结构。在测试过程中,先对单个模块进行测试,然后把模块连接起来进行测试。测试完成后书写文档,最后小组成员和用户在一块审查和复审。 1、 课题陈述 一方面,在时下这个飞速发展的信息社会中,直到今天仍然没有一套完善可行的学生信息管理系统出现在学校里。每年,从大专生、本科生到硕士生、博士生,几千人的入学、升学、毕业,全要由教务处和各系老师人工管理。信息量之巨大,工作量之繁重,是难以想象的。因此,学校和各个系都要安排多名教师专门负责学生学籍管理,浪费了大量的人力资源。然而,即使这样,管理仍然谈不上井井有条。举一个最简单的真实例子,一个同学的姓名在花名册里印错了,就一错错了三年,一直没能改正。同学想去改,却不知道是应该找系里,还是去找教务处。还有,当学生的基本信息,比如家庭住址、电话等变更后,无法及时在档案中修改,使得老师与同学无法联系沟通。 另一方面,从社会这方面讲,随着计算机的普及,越来越多的学校利用计算机来处理日常事务。面对众多的数据资料,很多管理者常常感到无从下手。在数字化的今天,我们需要一个学生管理系统,使我们的整体管理水平上一个档次,与如今这个高科技的信息社会接轨。 因此,如何有效的管理学生信息,帮助学校和老师管理和掌握这些情况,这就是学生信息管理系统需要完成的任务。
rar

最新推荐

recommend-type

软件工程 作业后勤管理子系统设计

在万里通企业集团的网络信息管理系统中,后勤管理子系统扮演着至关重要的角色。这个子系统专注于后勤作业数据的管理与统计分析,旨在优化后勤资源配置,提升后勤管理水平,同时提高劳动生产效率。后勤管理子系统的...
recommend-type

工资管理信息系统分析设计

学校下设教务处、财务处和房产处等二十六处室,还设有计算机系、自动控制系和管理工程系等十八个教学系,此外还附设一个机械工厂、一个电子厂和一所校医院,该校财务处的现行系统负责全校教职工的工资管理工作。
recommend-type

万科流程管理(WORD版)

此外,文件管理系统还包括工程技术规范、国家标准、行业规范和标准合同文本等内容,确保了流程执行的标准化和规范化。 总的来说,万科流程管理通过建立清晰、规范的业务流程,提高了公司的运作效率,减少了内部交易...
recommend-type

数学建模 企业的营销管理问题分析

一般的,企业下设营销部,企业生产的产品要通过营销部进行销售。由于企业生产能力的制约,因此需要在满足已签约的销售合同量的基础上,对意向签约量有选择的安排生产。一方面,企业会组织安排生产,完成已签约的销售...
recommend-type

FIDIC合同条件 99年第一版 通用条件

 FIDIC下设2个地区成员协会:FIDIC亚洲及太平洋成员协会(ASPAC);FIDIC非洲成员协会集团(CAMA)。 FIDIC还设立了许多专业委员会,用于专业咨询和管理。如业主/咨询工程师关系委员会(CCRC);合同委员会(CC);...
recommend-type

基于嵌入式ARMLinux的播放器的设计与实现 word格式.doc

本文主要探讨了基于嵌入式ARM-Linux的播放器的设计与实现。在当前PC时代,随着嵌入式技术的快速发展,对高效、便携的多媒体设备的需求日益增长。作者首先深入剖析了ARM体系结构,特别是针对ARM9微处理器的特性,探讨了如何构建适用于嵌入式系统的嵌入式Linux操作系统。这个过程包括设置交叉编译环境,优化引导装载程序,成功移植了嵌入式Linux内核,并创建了适合S3C2410开发板的根文件系统。 在考虑到嵌入式系统硬件资源有限的特点,通常的PC机图形用户界面(GUI)无法直接应用。因此,作者选择了轻量级的Minigui作为研究对象,对其实体架构进行了研究,并将其移植到S3C2410开发板上,实现了嵌入式图形用户界面,使得系统具有简洁而易用的操作界面,提升了用户体验。 文章的核心部分是将通用媒体播放器Mplayer移植到S3C2410开发板上。针对嵌入式环境中的音频输出问题,作者针对性地解决了Mplayer播放音频时可能出现的不稳定性,实现了音乐和视频的无缝播放,打造了一个完整的嵌入式多媒体播放解决方案。 论文最后部分对整个项目进行了总结,强调了在嵌入式ARM-Linux平台上设计播放器所取得的成果,同时也指出了一些待改进和完善的方面,如系统性能优化、兼容性提升以及可能的扩展功能等。关键词包括嵌入式ARM-Linux、S3C2410芯片、Mplayer多媒体播放器、图形用户界面(GUI)以及Minigui等,这些都反映出本文研究的重点和领域。 通过这篇论文,读者不仅能了解到嵌入式系统与Linux平台结合的具体实践,还能学到如何在资源受限的环境中设计和优化多媒体播放器,为嵌入式技术在多媒体应用领域的进一步发展提供了有价值的经验和参考。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

Python字符串为空判断的动手实践:通过示例掌握技巧

![Python字符串为空判断的动手实践:通过示例掌握技巧](https://img-blog.csdnimg.cn/72f88d4fc1164d6c8b9c29d8ab5ed75c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFyYm9yIExhdQ==,size_20,color_FFFFFF,t_70,g_se,x_16) # 1. Python字符串为空判断的基础理论 字符串为空判断是Python编程中一项基本且重要的任务。它涉及检查字符串是否为空(不包含任何字符),这在
recommend-type

box-sizing: border-box;作用是?

`box-sizing: border-box;` 是 CSS 中的一个样式属性,它改变了元素的盒模型行为。默认情况下,浏览器会计算元素内容区域(content)、内边距(padding)和边框(border)的总尺寸,也就是所谓的"标准盒模型"。而当设置为 `box-sizing: border-box;` 后,元素的总宽度和高度会包括内容、内边距和边框的总空间,这样就使得开发者更容易控制元素的实际布局大小。 具体来说,这意味着: 1. 内容区域的宽度和高度不会因为添加内边距或边框而自动扩展。 2. 边框和内边距会从元素的总尺寸中减去,而不是从内容区域开始计算。
recommend-type

经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf

本文主要探讨的是"经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf",该研究专注于嵌入式指纹识别技术在实际应用中的设计和实现。嵌入式指纹识别系统因其独特的优势——无需外部设备支持,便能独立完成指纹识别任务,正逐渐成为现代安全领域的重要组成部分。 在技术背景部分,文章指出指纹的独特性(图案、断点和交叉点的独一无二性)使其在生物特征认证中具有很高的可靠性。指纹识别技术发展迅速,不仅应用于小型设备如手机或门禁系统,也扩展到大型数据库系统,如连接个人电脑的桌面应用。然而,桌面应用受限于必须连接到计算机的条件,嵌入式系统的出现则提供了更为灵活和便捷的解决方案。 为了实现嵌入式指纹识别,研究者首先构建了一个专门的开发平台。硬件方面,详细讨论了电源电路、复位电路以及JTAG调试接口电路的设计和实现,这些都是确保系统稳定运行的基础。在软件层面,重点研究了如何在ARM芯片上移植嵌入式操作系统uC/OS-II,这是一种实时操作系统,能够有效地处理指纹识别系统的实时任务。此外,还涉及到了嵌入式TCP/IP协议栈的开发,这是实现系统间通信的关键,使得系统能够将采集的指纹数据传输到远程服务器进行比对。 关键词包括:指纹识别、嵌入式系统、实时操作系统uC/OS-II、TCP/IP协议栈。这些关键词表明了论文的核心内容和研究焦点,即围绕着如何在嵌入式环境中高效、准确地实现指纹识别功能,以及与外部网络的无缝连接。 这篇论文不仅深入解析了嵌入式指纹识别系统的硬件架构和软件策略,而且还展示了如何通过结合嵌入式技术和先进操作系统来提升系统的性能和安全性,为未来嵌入式指纹识别技术的实际应用提供了有价值的研究成果。