c语言设计一个学生管理系统,要求在程序中使用指针

题目描述

现有人数为10的学生,用c语言设计一个学生管理系统,要求在程序中使用指针

内容包括:

1,学生的基本资料:学生姓名,性别,绩点,账号,密码。

2,要有学生的注册,登录功能,登陆后可查询学生的基本资料,学生可以修改姓名,性别,密码。不可修改绩点,账号。

3,有一个管理员账号为langwang,密码为5678,管理员账号可查询所有的学生信息,也可以修改所有学生的任何信息。

源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 10
#define MAX_NAME_LENGTH 20
#define MAX_ACCOUNT_LENGTH 20
#define MAX_PASSWORD_LENGTH 20

// 学生结构体
typedef struct {
    char name[MAX_NAME_LENGTH];
    char gender;
    float gpa;
    char account[MAX_ACCOUNT_LENGTH];
    char password[MAX_PASSWORD_LENGTH];
} Student;

// 管理员账号信息
const char adminAccount[] = "langwang";
const char adminPassword[] = "5678";

// 学生数组
Student students[MAX_STUDENTS];

// 注册学生
void registerStudent() {
    int i;
    for (i = 0; i < MAX_STUDENTS; i++) {
        if (strlen(students[i].account) == 0) {
            printf("请输入学生姓名:");
            scanf("%s", students[i].name);
            printf("请输入学生性别:");
            scanf(" %c", &students[i].gender);
            printf("请输入学生绩点:");
            scanf("%f", &students[i].gpa);
            printf("请输入学生账号:");
            scanf("%s", students[i].account);
            printf("请输入学生密码:");
            scanf("%s", students[i].password);
            printf("注册成功!\n");
            break;
        }
    }
    if (i == MAX_STUDENTS) {
        printf("学生人数已满,无法注册新学生!\n");
    }
}

// 学生登录
Student* studentLogin() {
    char account[MAX_ACCOUNT_LENGTH];
    char password[MAX_PASSWORD_LENGTH];
    printf("请输入学生账号:");
    scanf("%s", account);
    printf("请输入学生密码:");
    scanf("%s", password);

    int i;
    for (i = 0; i < MAX_STUDENTS; i++) {
        if (strcmp(students[i].account, account) == 0 && strcmp(students[i].password, password) == 0) {
            return &students[i];
        }
    }

    printf("账号或密码错误,登录失败!\n");
    return NULL;
}

// 修改学生信息
void modifyStudentInfo(Student* student) {
    printf("请输入新的姓名:");
    scanf("%s", student->name);
    printf("请输入新的性别:");
    scanf(" %c", &student->gender);
    printf("请输入新的密码:");
    scanf("%s", student->password);
    printf("修改成功!\n");
}

// 查询学生信息
void queryStudentInfo(Student* student) {
    printf("姓名:%s\n", student->name);
    printf("性别:%c\n", student->gender);
    printf("绩点:%.2f\n", student->gpa);
    printf("账号:%s\n", student->account);
    printf("密码:%s\n", student->password);
}

// 管理员登录
int adminLogin() {
    char account[MAX_ACCOUNT_LENGTH];
    char password[MAX_PASSWORD_LENGTH];
    printf("请输入管理员账号:");
    scanf("%s", account);
    printf("请输入管理员密码:");
    scanf("%s", password);

    if (strcmp(account, adminAccount) == 0 && strcmp(password, adminPassword) == 0) {
        return 1;
    }

    printf("管理员账号或密码错误,登录失败!\n");
    return 0;
}

// 管理员修改学生信息
void adminModifyStudentInfo(Student* student) {
    printf("请输入新的姓名:");
    scanf("%s", student->name);
    printf("请输入新的性别:");
    scanf(" %c", &student->gender);
    printf("请输入新的绩点:");
    scanf("%f", &student->gpa);
    printf("请输入新的账号:");
    scanf("%s", student->account);
    printf("请输入新的密码:");
    scanf("%s", student->password);
    printf("修改成功!\n");
}

// 管理员查询学生信息
void adminQueryStudentInfo(Student* student) {
    printf("姓名:%s\n", student->name);
    printf("性别:%c\n", student->gender);
    printf("绩点:%.2f\n", student->gpa);
    printf("账号:%s\n", student->account);
    printf("密码:%s\n", student->password);
}

int main() {
    int choice;
    Student* currentStudent = NULL;

    while (1) {
        printf("\n--- 学生管理系统 ---\n");
        printf("1. 学生注册\n");
        printf("2. 学生登录\n");
        printf("3. 管理员登录\n");
        printf("4. 退出\n");
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                registerStudent();
                break;
            case 2:
                currentStudent = studentLogin();
                if (currentStudent != NULL) {
                    while (1) {
                        printf("\n--- 学生菜单 ---\n");
                        printf("1. 查询个人信息\n");
                        printf("2. 修改个人信息\n");
                        printf("3. 注销登录\n");
                        printf("请输入您的选择:");
                        scanf("%d", &choice);

                        switch (choice) {
                            case 1:
                                queryStudentInfo(currentStudent);
                                break;
                            case 2:
                                modifyStudentInfo(currentStudent);
                                break;
                            case 3:
                                currentStudent = NULL;
                                printf("注销成功!\n");
                                break;
                            default:
                                printf("无效的选择!\n");
                        }

                        if (currentStudent == NULL) {
                            break;
                        }
                    }
                }
                break;
            case 3:
                if (adminLogin()) {
                    while (1) {
                        printf("\n--- 管理员菜单 ---\n");
                        printf("1. 查询学生信息\n");
                        printf("2. 修改学生信息\n");
                        printf("3. 注销登录\n");
                        printf("请输入您的选择:");
                        scanf("%d", &choice);

                        switch (choice) {
                            case 1:
                                for (int i = 0; i < MAX_STUDENTS; i++) {
                                    if (strlen(students[i].account) != 0) {
                                        adminQueryStudentInfo(&students[i]);
                                    }
                                }
                                break;
                            case 2:
                                for (int i = 0; i < MAX_STUDENTS; i++) {
                                    if (strlen(students[i].account) != 0) {
                                        adminModifyStudentInfo(&students[i]);
                                    }
                                }
                                break;
                            case 3:
                                printf("注销成功!\n");
                                break;
                            default:
                                printf("无效的选择!\n");
                        }

                        if (choice == 3) {
                            break;
                        }
                    }
                }
                break;
            case 4:
                printf("感谢使用学生管理系统,再见!\n");
                exit(0);
            default:
                printf("无效的选择!\n");
        }
    }

    return 0;
}

这个示例代码实现了学生管理系统的基本功能,包括学生注册、登录,学生修改个人信息,管理员登录,管理员查询和修改学生信息等。通过指针传递学生结构体,可以在函数内部对学生信息进行修改。

© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享