2301_80312530 2024-03-10 21:22 采纳率: 100%
浏览 7
已结题

求用c语言完成以下数据库的问题

有没有比较厉害的人能给我写出满足以下要求的代码,想要带着简要解释的,并能给出符合数据文件和结果示意图,想要一个完整的函数

img

  • 写回答

8条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-10 22:07
    关注

    以下是一个使用C语言实现的学生-课程数据库应用程序,包括添加、查找、删除和修改功能。程序使用文件来保存学生信息,并在控制台上显示结果。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_STUDENTS 100
    #define FILE_NAME "students.dat"
    
    typedef struct {
        char id[10];
        char name[20];
        char gender[5];
        int age;
        char department[20];
    } Student;
    
    // Function prototypes
    void add(Student students[], int *count);
    void searchById(Student students[], int count, const char *id);
    void modify(Student students[], int count);
    void deleteById(Student students[], int *count, const char *id);
    void saveToFile(Student students[], int count);
    void display(Student students[], int count);
    void displayFile();
    
    int main() {
        Student students[MAX_STUDENTS];
        int count = 0;
        char choice;
    
        FILE *file = fopen(FILE_NAME, "rb");
        if (file != NULL) {
            fread(students, sizeof(Student), MAX_STUDENTS, file);
            fclose(file);
            count = MAX_STUDENTS;
        }
    
        do {
            printf("
    1. Add student
    ");
            printf("2. Search by ID
    ");
            printf("3. Modify
    ");
            printf("4. Delete by ID
    ");
            printf("5. Display all
    ");
            printf("6. Display file content
    ");
            printf("7. Exit
    ");
            printf("Enter your choice: ");
            scanf(" %c", &choice);
    
            switch(choice) {
                case '1':
                    add(students, &count);
                    break;
                case '2': {
                    char id[10];
                    printf("Enter ID to search: ");
                    scanf("%s", id);
                    searchById(students, count, id);
                    break;
                }
                case '3':
                    modify(students, count);
                    break;
                case '4': {
                    char id[10];
                    printf("Enter ID to delete: ");
                    scanf("%s", id);
                    deleteById(students, &count, id);
                    break;
                }
                case '5':
                    display(students, count);
                    break;
                case '6':
                    displayFile();
                    break;
                case '7':
                    saveToFile(students, count);
                    printf("Exiting program.
    ");
                    break;
                default:
                    printf("Invalid choice. Please try again.
    ");
            }
        } while (choice != '7');
    
        return 0;
    }
    
    void add(Student students[], int *count) {
        if (*count >= MAX_STUDENTS) {
            printf("Database full. Cannot add more students.
    ");
            return;
        }
    
        printf("Enter student details:
    ");
        printf("ID: ");
        scanf("%s", students[*count].id);
        printf("Name: ");
        scanf("%s", students[*count].name);
        printf("Gender: ");
        scanf("%s", students[*count].gender);
        printf("Age: ");
        scanf("%d", &students[*count].age);
        printf("Department: ");
        scanf("%s", students[*count].department);
    
        (*count)++;
    }
    
    void searchById(Student students[], int count, const char *id) {
        int found = 0;
        for (int i = 0; i < count; i++) {
            if (strcmp(students[i].id, id) == 0) {
                printf("Student found:
    ");
                printf("ID: %s
    ", students[i].id);
                printf("Name: %s
    ", students[i].name);
                printf("Gender: %s
    ", students[i].gender);
                printf("Age: %d
    ", students[i].age);
                printf("Department: %s
    ", students[i].department);
                found = 1;
                break;
            }
        }
        if (!found) {
            printf("Student with ID %s not found.
    ", id);
        }
    }
    
    void modify(Student students[], int count) {
        for (int i = 0; i < count; i++) {
            students[i].age++;
        }
        printf("All students ages have been incremented by 1.
    ");
    }
    
    void deleteById(Student students[], int *count, const char *id) {
        int found = 0;
        for (int i = 0; i < *count; i++) {
            if (strcmp(students[i].id, id) == 0) {
                for (int j = i; j < *count - 1; j++) {
                    students[j] = students[j + 1];
                }
                (*count)--;
                printf("Student with ID %s deleted.
    ", id);
                found = 1;
                break;
            }
        }
        if (!found) {
            printf("Student with ID %s not found.
    ", id);
        }
    }
    
    void saveToFile(Student students[], int count) {
        FILE *file = fopen(FILE_NAME, "wb");
        if (file != NULL) {
            fwrite(students, sizeof(Student), count, file);
            fclose(file);
        } else {
            printf("Error saving to file.
    ");
        }
    }
    
    void display(Student students[], int count) {
        printf("Student details:
    ");
        for (int i = 0; i < count; i++) {
            printf("ID: %s, Name: %s, Gender: %s, Age: %d, Department: %s
    ",
                   students[i].id, students[i].name, students[i].gender,
                   students[i].age, students[i].department);
        }
    }
    
    void displayFile() {
        FILE *file = fopen(FILE_NAME, "rb");
        if (file != NULL) {
            Student student;
            printf("Student details from file:
    ");
            while (fread(&student, sizeof(Student), 1, file)) {
                printf("ID: %s, Name: %s, Gender: %s, Age: %d, Department: %s
    ",
                       student.id, student.name, student.gender,
                       student.age, student.department);
            }
            fclose(file);
        } else {
            printf("Error displaying file content.
    ");
        }
    }
    

    这个程序可以添加、查找、修改和删除学生记录,并在控制台上显示结果。学生信息保存在名为 "students.dat" 的二进制文件中。

    以下是程序的工作示意图:

    1. Add student
    2. Search by ID
    3. Modify
    4. Delete by ID
    5. Display all
    6. Display file content
    7. Exit
    Enter your choice: 1
    Enter student details:
    ID: 950011
    Name: 李勇日
    Gender: 男
    Age: 20
    Department: CS
    
    1. Add student
    2. Search by ID
    3. Modify
    4. Delete by ID
    5. Display all
    6. Display file content
    7. Exit
    Enter your choice: 5
    Student details:
    ID: 950011, Name: 李勇日, Gender: 男, Age
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 修改了问题 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成