C语言学校教务管理系统
要求如图片所示
需要帮助写一个完整的程序代码
gitee上面搜一下 ,很多
#include "mis.h"
#include "process.h"
#include "student.h"
#include "teacher.h"
int main(void)
{
stu=calloc(sizeof(Student),MAX_STU); //为学生结构体申请内存
tea=calloc(sizeof(Teacher),MAX_TEA); //申请内存过多 改*/
do
{
system("clear");
puts("*****教务管理系统*****\n");
puts("1、校长端\n");
puts("2、教师端\n");
puts("3、学生端\n");
puts("4、退出系统\n");
puts("********************\n");
puts("请选择功能:\n");
switch(getch())
{
case '1':
admin_main(); //校长系统
break;
case '2':
tea_login(); //教师系统
break;
case '3':
stu_login(); //学生系统
break;
case '4':
free(tea); //释放内存
free(stu);
return 0;
}
stdin->_IO_read_ptr=stdin->_IO_read_end;
}while(1);
}
https://blog.csdn.net/weixin_56324038/article/details/126184959
考虑web端的话,若依框架有现成的代码,改改就能用
你好,你的这个问题,可以参考一下前辈的牛人经验,他们有一些思路可以参考,希望能帮助到你
https://blog.csdn.net/ouyang_na_na/article/details/112972605
https://blog.csdn.net/qq_53005786/article/details/117911729
https://blog.csdn.net/qq_43886299/article/details/105098263
这个可以参考其他博主分享的代码,比如
https://blog.csdn.net/qfl_sdu/article/details/118098121?spm=1001.2014.3001.5502
https://blog.csdn.net/qfl_sdu/article/details/118186493?spm=1001.2014.3001.5502
可以借鉴下’
#include "mis.h"
#include "process.h"
#include "student.h"
#include "teacher.h"
int main(void)
{
stu=calloc(sizeof(Student),MAX_STU); //为学生结构体申请内存
tea=calloc(sizeof(Teacher),MAX_TEA); //申请内存过多 改*/
do
{
system("clear");
puts("*****教务管理系统*****\n");
puts("1、校长端\n");
puts("2、教师端\n");
puts("3、学生端\n");
puts("4、退出系统\n");
puts("********************\n");
puts("请选择功能:\n");
switch(getch())
{
case '1':
admin_main(); //校长系统
break;
case '2':
tea_login(); //教师系统
break;
case '3':
stu_login(); //学生系统
break;
case '4':
free(tea); //释放内存
free(stu);
return 0;
}
stdin->_IO_read_ptr=stdin->_IO_read_end;
}while(1);
}
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
typedef struct Node{
int id;//ѧºÅ
char name[50]; //Ãû×Ö
char sex[10];//ÐÔ±ð
int c,ma,en;//c£¬Êýѧ£¬Ó¢Óï
int pe;//ÌåÓý
struct Node *next; //Ö¸ÕëÓò
}node;
node List;//Á´±í
//¶ÁÎļþ
int readFile(node *L);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//Ö÷²Ëµ¥½çÃæ
void welcome();
//Ôö¼ÓѧÉúÐÅÏ¢
void add();
//ɾ³ýѧÉúÐÅÏ¢
void delet();
//ÐÞ¸ÄѧÉúÐÅÏ¢
void fix ();
//²éѯѧÉúÐÅÏ¢
void search ();
//Êä³öѧÉúÐÅÏ¢
void print (node *L);
//Í˳ö³ÌÐò
void goodBye();
int main(int argc, char *argv[]) {
int choice = 0;
readFile(&List);
//scanf("%d",&choice);
while(1){
welcome();
scanf("%d",&choice);
switch(choice){
case 1://Ôö¼ÓѧÉúÐÅÏ¢
add();
break;
case 2://ɾ³ýѧÉúÐÅÏ¢
delet();
break;
case 3://ÐÞ¸ÄѧÉúÐÅÏ¢
fix();
break;
case 4://²éѯѧÉúÐÅÏ¢
search();
break;
case 5://Êä³öѧÉúÐÅÏ¢
print(&List);
break;
case 0://Í˳ö³ÌÐò
goodBye();
break;
}
printf("ÊÇ·ñÐèÒª¼ÌÐø²Ù×÷?£¨yes:1/no:0):");
scanf("%d",&choice);
if(choice==0){
break;
}
}
return 0;
}
//Ö÷²Ëµ¥½çÃæ
void welcome(){
system("cls");
printf("***************************************************\n");
printf("*************ѧÉú³É¼¨¹ÜÀíϵͳ**********************\n");
printf("*********¡ª¡ª1.Ìí¼ÓѧÉúÐÅÏ¢¡ª¡ª********************\n");
printf("*********¡ª¡ª2.ɾ³ýѧÉúÐÅÏ¢¡ª¡ª********************\n");
printf("*********¡ª¡ª3.ÐÞ¸ÄѧÉúÐÅÏ¢¡ª¡ª********************\n");
printf("*********¡ª¡ª4.ѧÉúÐÅÏ¢²éѯ¡ª¡ª********************\n");
printf("*********¡ª¡ª5.ѧÉú³É¼¨²éѯ¡ª¡ª********************\n");
printf("*********¡ª¡ª0.Í˳ö¹ÜÀíϵͳ¡ª¡ª********************\n");
printf("ÇëÊäÈëÏëҪʵÏÖ¹¦ÄܵÄÊý×Ö");
}
//Ôö¼ÓѧÉúÐÅÏ¢
void add(){
printf("Ôö¼ÓѧÉúÐÅÏ¢");
}
//ɾ³ýѧÉúÐÅÏ¢
void delet() {
printf("ɾ³ýѧÉúÐÅÏ¢");
}
//ÐÞ¸ÄѧÉúÐÅÏ¢
void fix(){
printf("Ôö¼ÓѧÉúÐÅÏ¢");
}
//²éѯѧÉúÐÅÏ¢
void search(){
printf("²éѯѧÉúÐÅÏ¢");
}
//Êä³öѧÉúÐÅÏ¢
void print(node *L) {
system("cls");
node *p = L->next;
printf("_____________________________________________________________\n");
printf("| ѧºÅ\t|ÐÕÃû\t|ÐÔ±ð\t|cÓïÑÔ\t|¸ßÊý\t|Ó¢Óï\t|ÌåÓý\t|\n");
printf("_____________________________________________________________\n");
if(p!=NULL){
while(p!=NULL){
printf(" %d| %s\t |%s\t| %d\t| %d\t| %d\t| %d|\n",p->id,p->name,p->sex,p->c,p->ma,p->en,p->pe);
printf("_______________________________________________________________\n");
p=p->next;
}
}
}
//Í˳ö³ÌÐò
void goodBye(){
printf("Í˳ö³ÌÐò");
}
//ÎļþÊäÈë
int readFile(node *L)
{
FILE *fpr = fopen("studentInfo.txt","r");
node st;
node *s;
node *t=L;
if(fpr == NULL){
return 0;
}
else{
while(fscanf(fpr,"%d %s %s %d %d %d %d",&st.id,st.name,st.sex,&st.c,&st.ma,&st.en,&st.pe)!=EOF){
// printf("%d %s %s %d %d %d %d\n",st.id,st.name,st.sex,st.c,st.ma,st.en,st.pe);
s=(node *)malloc(sizeof(node));
*s=st;
t->next=s;
t=s;
t->next=NULL;
}
}
return 1;
}
你这个功能很多,建议去git搜索下载现成的框架进行修改,如果自己从零开始写的话,工作量很大的。
可以参考下
// mis 信息管理系统
// mis.h
#ifndef MIS_H
#define MIS_H
#define MAX_TEA 50 //不要用MAX遍历
#define MAX_STU 500
typedef struct Student
{
int firstlogin; // 是否是第一次登入
int id; // 学号
char password[20]; // 密码
char name[20]; // 姓名
char sex;
double chinese; // 语文成绩
double math; // 数学成绩
double english; // 英语成绩
int count; // 计算密码输入次数
int flag; // 状态:1,在校。-1,离校。0,该条记录无数据,或未使用
}Student;
typedef struct Teacher//声明教师的结构体,用来存放教师的基本信息
{
char name[20]; //教师的名字
char sex; //教师的性别
int id; //教师登陆系统的工号Student* stu;
char password[20]; //教师登陆系统的密码
int count; //教师登录系统输错密码的次数
int firstlogin; //判断是否第一次登录
int flag; //判断是否在校
}Teacher;
typedef struct admin{
int firstlogin; // 是否是第一次登入
char password[20]; // 密码
}Admin;
extern Teacher* tea;
extern Student* stu;
#endif //MIS_H
没人解决?
首先,您需要针对系统的各个模块进行功能需求分析,确定每个模块需要实现的具体功能。在此基础上,您可以设计整个系统的数据结构和算法,包括如何存储和管理学生、教师和课程的信息,以及如何进行各种查询和编辑操作。
对于数据的存储和管理,您可以考虑使用文件或数据库等方式进行。如果使用文件进行存储,可以将每个学生的信息存储为一条记录,使用逗号或其他字符进行分隔,方便读写操作。同时,您还需要设计相应的数据结构,比如数组、链表等,来方便对数据进行操作。
在代码实现方面,您可以使用 C 语言编写程序,利用各种数据结构和算法实现系统的各个模块功能。在实现过程中,需要注意代码的可读性、可维护性和可扩展性,同时保证代码的健壮性和安全性。
以下是一些建议,供您参考:
对于数据的存储和管理,您可以使用结构体来存储学生、教师和课程的信息,定义相应的成员变量,如学号、姓名、课程成绩等。同时,可以使用指针和动态内存分配等技术来动态管理内存,方便对数据的操作。
对于用户界面的设计,可以使用菜单来实现用户界面的交互,根据用户的选择来调用相应的功能函数。可以使用 switch 或 if/else 等语句来实现菜单的选择和功能调用。
在实现各个功能模块时,需要注意输入输出的格式和数据类型的转换,确保数据的正确性和完整性。同时,需要对异常情况进行处理,比如输入非法数据、文件读写错误等情况。
在实现管理员模块时,需要对权限进行控制,确保只有管理员才能进行敏感操作,比如对学生信息的增删改,对课程成绩数据的编辑等。可以使用密码验证等方式对管理员身份进行验证,防止非法访问。
在实现查询功能时,可以使用排序算法对数据进行排序,方便对排名、最高分、最低分等信息的查询。同时,可以使用统计算法对数据进行统计,比如计算平均分、优秀率等信息。
在实现文件读写操作时,需要注意文件的打开和关闭,以及对文件指针的操作。可以使用 fopen、fclose、fread、fwrite 等函数来进行文件读写操作,确保数据的准确读取和保存。
最后,需要对代码进行测试和调试,确保程序的正确性和稳定性。可以使用断点调试、输出调试信息等方式对程序进行调试,发现和解决潜在的问题。同时,可以编写测试用例对程序进行测试,确保程序的正确性和性能。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
对于学校教务管理系统,我们需要考虑以下几个方面的要求:
学生信息管理:包括学号、姓名、性别、年龄、班级等基本信息的录入、修改、查询和删除操作。
课程信息管理:包括课程编号、课程名称、学时、学分等基本信息的录入、修改、查询和删除操作。
成绩录入和查询:对每个学生的每门课程的成绩进行录入和查询。
统计分析功能:对所有学生的成绩进行分析,包括总分、平均分、优秀率、良好率、及格率和不及格率等统计信息的计算和输出。
根据以上需求,我们可以编写一个C语言程序来实现学校教务管理系统,具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STU_NUM 100 //最大学生人数
#define MAX_COURSE_NUM 10 //最大课程数量
//学生信息结构体
struct Student {
int id; //学号
char name[20]; //姓名
char gender[5]; //性别
int age; //年龄
char clas[20]; //班级
float score[MAX_COURSE_NUM]; //成绩数组
float total; //总分
float average; //平均分
};
//课程信息结构体
struct Course {
int id; //课程编号
char name[20]; //课程名称
int time; //学时
int credit; //学分
};
//学生信息数组
struct Student students[MAX_STU_NUM];
//课程信息数组
struct Course courses[MAX_COURSE_NUM];
//当前学生总数
int studentNum = 0;
//当前课程总数
int courseNum = 0;
//函数声明
void menu(); //主菜单
void addStudent(); //添加学生信息
void modifyStudent(); //修改学生信息
void deleteStudent(); //删除学生信息
void queryStudent(); //查询学生信息
void addCourse(); //添加课程信息
void modifyCourse(); //修改课程信息
void deleteCourse(); //删除课程信息
void displayCourse(); //显示所有课程信息
void inputScore(); //输入学生成绩
void queryScore(); //查询学生成绩
void calculateScore(); //计算学生成绩
void displayScoreAnalysis(); //显示成绩分析结果
int findStudentIndexById(int id); //根据学号查找学生在数组中的索引
int findCourseIndexById(int id); //根据课程编号查找课程在数组中的索引
//主函数
int main() {
menu();
return 0;
}
//主菜单
void menu() {
int choice;
while (1) {
printf("\n-----------------------------------------------------\n");
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("8. 显示所有课程信息\n");
printf("9. 输入学生成绩\n");
printf("10. 查询学生成绩\n");
printf("11. 计算学生成绩\n");
printf("12. 显示成绩分析结果\n");
printf("0. 退出程序\n");
printf("-----------------------------------------------------\n");
printf("请输入操作选项:");
scanf("%d", &choice);
fflush(stdin); //清空输入缓冲区
switch (choice) {
case 1:
addStudent();
break;
case 2:
modifyStudent();
break;
case 3:
deleteStudent();
break;
case 4:
queryStudent();
break;
case 5:
addCourse();
break;
case 6:
modifyCourse();
break;
case 7:
deleteCourse();
break;
case 8:
displayCourse();
break;
case 9:
inputScore();
break;
case 10:
queryScore();
break;
case 11:
calculateScore();
break;
case 12:
displayScoreAnalysis();
break;
case 0:
printf("程序已退出。\n");
return;
default:
printf("输入不合法,请重新输入。\n");
break;
}
}
}
//添加学生信息
void addStudent() {
struct Student s;
printf("请输入学生学号:");
scanf("%d", &s.id);
fflush(stdin); //清空输入缓冲区
//检查该学号是否已存在
if (findStudentIndexById(s.id) != -1) {
printf("该学号已存在,添加失败。\n");
return;
}
printf("请输入学生姓名:");
gets(s.name);
printf("请输入学生性别:");
gets(s.gender);
printf("请输入学生年龄:");
scanf("%d", &s.age);
fflush(stdin); //清空输入缓冲区
printf("请输入学生班级:");
gets(s.clas);
//将新学生信息添加到学生信息数组中
students[studentNum++] = s;
printf("添加成功!\n");
}
//修改学生信息
void modifyStudent() {
int id, index;
printf("请输入要修改信息的学生学号:");
scanf("%d", &id);
fflush(stdin); //清空输入缓冲区
//查找该学号对应的学生在学生信息数组中的索引
index = findStudentIndexById(id);
if (index == -1) {
printf("该学号不存在,无法修改信息。\n");
return;
}
printf("请输入新的学生姓名:");
gets(students[index].name);
printf("请输入新的学生性别:");
gets(students[index].gender);
printf("请输入新的学生年龄:");
scanf("%d", &students[index].age);
fflush(stdin); //清空输入缓冲区
printf("请输入新的学生班级:");
gets(students[index].clas);
printf("修改成功!\n");
}
//删除学生信息
void deleteStudent() {
int id, index;
printf("请输入要删除信息的学生学号:");
scanf("%d", &id);
fflush(stdin); //清空输入缓冲区
//查找该学号对应的学生在学生信息数组中的索引
index = findStudentIndexById(id);
if (index == -1) {
printf("该学号不存在,无法删除信息。\n");
return;
}
//将目标学生之后的学生依次向前移动一个位置
for (int i = index; i < studentNum - 1; i++) {
students[i] = students[i + 1];
}
studentNum--; //学生总数减1
printf("删除成功!\n");
}
//查询学生信息
void queryStudent() {
int id, index;
printf("请输入要查询信息的学生学号:");
scanf("%d", &id);
fflush(stdin); //清空输入缓冲区
//查找该学号对应的学生在学生信息数组中的索引
index = findStudentIndexById(id);
if (index == -1) {
printf("该学号不存在,无法查询信息。\n");
return;
}
printf("学号\t姓名\t性别\t年龄\t班级\n");
printf("%d\t%s\t%s\t%d\t%s\n", students[index].id, students[index].name, students[index].gender, students[index].age, students[index].clas);
}
//添加课程信息
void addCourse() {
struct Course c;
printf("请输入课程编号:");
scanf("%d", &c.id);
fflush(stdin); //清空输入缓冲区
//检查该课程编号是否已存在
if (findCourseIndexById(c.id) != -1) {
printf("该课程编号已存在,添加失败。\n");
return;
}
printf("请输入课程名称:");
gets(c.name);
printf("请输入课程学时:");
scanf("%d", &c.time);
printf("请输入课程学分:");
scanf("%d", &c.credit);
fflush(stdin);
//将新课程信息添加到课程信息数组中
courses[courseNum++] = c;
printf("添加成功!\n");
}
//修改课程信息
void modifyCourse() {
int id, index;
printf("请输入要修改信息的课程编号:");
scanf("%d", &id);
fflush(stdin); //清空输入缓冲区
//查找该课程编号对应的课程在课程信息数组中的索引
index = findCourseIndexById(id);
if (index == -1) {
printf("该课程编号不存在,无法修改信息。\n");
return;
}
printf("请输入新的课程名称:");
gets(courses[index].name);
printf("请输入新的课程学时:");
scanf("%d", &courses[index].time);
printf("请输入新的课程学分:");
scanf("%d", &courses[index].credit);
fflush(stdin);
printf("修改成功!\n");
}
//删除课程信息
void deleteCourse() {
int id, index;
printf("请输入要删除信息的课程编号:");
scanf("%d", &id);
fflush(stdin); //清空输入缓冲区
//查找该课程编号对应的课程在课程信息数组中的索引
index = findCourseIndexById(id);
if (index == -1) {
printf("该课程编号不存在,无法删除信息。\n");
return;
}
//将目标课程之后的课程依次向前移动一个位置
for (int i = index; i < courseNum - 1; i++) {
courses[i] = courses[i + 1];
}
courseNum--; //课程总数减1
printf("删除成功!\n");
}
//显示所有课程信息
void displayCourse() {
printf("课程编号\t课程名称\t学时\t学分\n");
for (int i = 0; i < courseNum; i++) {
printf("%d\t%s\t%d\t%d\n", courses[i].id, courses[i].name, courses[i].time, courses[i].credit);
}
}
//输入学生成绩
void inputScore() {
int id, cId, sIndex, cIndex;
float score;
printf("请输入要输入成绩的学生学号:");
scanf("%d", &id);
fflush(stdin);
sIndex = findStudentIndexById(id);
if (sIndex == -1) {
printf("该学号不存在,无法输入成绩。\n");
return;
}
printf("请输入要输入成绩的课程编号:");
scanf("%d", &cId);
fflush(stdin);
cIndex = findCourseIndexById(cId);
if (cIndex == -1) {
printf("该课程编号不存在,无法输入成绩。\n");
return;
}
printf("请输入要输入的成绩:");
scanf("%f", &score);
fflush(stdin);
students[sIndex].score[cIndex] = score;
printf("成绩录入成功!\n");
}
//查询学生成绩
void queryScore() {
int id, cId, sIndex, cIndex;
printf("请输入要查询成绩的学生学号:");
scanf("%d", &id);
fflush(stdin);
sIndex = findStudentIndexById(id);
if (sIndex == -1) {
printf("该学号不存在,无法查询成绩。\n");
return;
}
printf("请输入要查询成绩的课程编号:");
scanf("%d", &cId);
fflush(stdin);
cIndex = findCourseIndexById(cId);
if (cIndex == -1) {
printf("该课程编号不存在,无法查询成绩。\n");
return;
}
printf("该生在%s的成绩为:%.2f\n", courses[cIndex].name, students[sIndex].score[cIndex]);
}
//计算学生成绩
void calculateScore() {
float totalScore;
for (int i = 0; i < studentNum; i++) {
totalScore = 0;
for (int j = 0; j < courseNum; j++) {
totalScore += students[i].score[j];
}
students[i].total = totalScore;
students[i].average = totalScore / courseNum;
}
printf("成绩计算成功!\n");
}
//显示成绩分析结果
void displayScoreAnalysis() {
int a = 0, b = 0, c = 0, d = 0, f = 0;
for (int i = 0; i < studentNum; i++) {
if (students[i].average >= 90) {
a++;
} else if (students[i].average >= 80) {
b++;
} else if (students[i].average >= 70) {
c++;
} else if (students[i].average >= 60) {
d++;
} else {
f++;
}
}
printf("总人数:%d\n", studentNum);
printf("A级(90-100)人数:%d,占比:%.2f%%\n", a, a * 100.0 / studentNum);
printf("B级(80-89)人数:%d,占比:%.2f%%\n", b, b * 100.0 / studentNum);
printf("C级(70-79)人数:%d,占比:%.2f%%\n", c, c * 100.0 / studentNum);
printf("D级(60-69)人数:%d,占比:%.2f%%\n", d, d * 100.0 / studentNum);
printf("E级(0-59)人数:%d,占比:%.2f%%\n", f, f * 100.0 / studentNum);
}
//根据学号查找学生在数组中的索引
int findStudentIndexById(int id) {
for (int i = 0; i < studentNum; i++) {
if (students[i].id == id) {
return i;
}
}
return -1;
}
//根据课程编号查找课程在数组中的索引
int findCourseIndexById(int id) {
for (int i = 0; i < courseNum; i++) {
if (courses[i].id == id) {
return i;
}
}
return -1;
}
以上代码实现了基本的学校教务管理系统的各项功能,可以根据实际需求进行适当的修改。
如果我的回答解决了您的问题,请采纳!