叶633 2024-07-02 09:04 采纳率: 100%
浏览 6
已结题

怎么用c语言设计这个

题目:科研项目信息管理系统设计
科研项目信息包括项目编号、项目名称、主持人姓名、职称、单位、电话等(项目编号不重复)。试设计一科研项目信息管理系统,使之能提供以下功能:
1、系统以菜单方式工作,可以循环显示菜单,直至选择退出系统,才结束整个程序的运行
2、科研项目信息录入功能
3、科研项目信息浏览功能
4、科研项目信息查询功能
实现两种查询方式:
按主持人姓名查询
按项目编号查询
5、科研项目信息删除、修改功能

  • 写回答

4条回答 默认 最新

  • 邓瑞军说HelloWorld 智能终端待机状态检测方法及装置专利发明者 2024-07-02 10:00
    关注

    为了设计一个科研项目信息管理系统,我们需要实现以下几个部分:

    1. 定义结构体来存储科研项目信息。
    2. 编写函数实现信息的录入、浏览、查询、删除和修改。
    3. 设计一个菜单来提供这些功能,并实现循环操作,直到用户选择退出。

    代码实现

    以下是完整的 C 代码实现:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    // 定义科研项目信息的结构体
    typedef struct Project {
        int id;
        char name[100];
        char leader[100];
        char title[100];
        char unit[100];
        char phone[20];
        struct Project *next;
    } Project;
    
    // 全局变量指向链表的头节点
    Project *head = NULL;
    
    // 菜单显示函数
    void displayMenu() {
        printf("\nMenu:\n");
        printf("1. Input Project Information\n");
        printf("2. Browse Project Information\n");
        printf("3. Query Project by Leader Name\n");
        printf("4. Query Project by Project ID\n");
        printf("5. Delete Project Information\n");
        printf("6. Modify Project Information\n");
        printf("0. Exit\n");
        printf("Enter your choice: ");
    }
    
    // 信息录入函数
    void inputProject() {
        Project *newProject = (Project *)malloc(sizeof(Project));
        printf("Enter Project ID: ");
        scanf("%d", &newProject->id);
        getchar(); // 清除缓冲区的换行符
        printf("Enter Project Name: ");
        fgets(newProject->name, sizeof(newProject->name), stdin);
        strtok(newProject->name, "\n"); // 去掉换行符
        printf("Enter Leader Name: ");
        fgets(newProject->leader, sizeof(newProject->leader), stdin);
        strtok(newProject->leader, "\n");
        printf("Enter Title: ");
        fgets(newProject->title, sizeof(newProject->title), stdin);
        strtok(newProject->title, "\n");
        printf("Enter Unit: ");
        fgets(newProject->unit, sizeof(newProject->unit), stdin);
        strtok(newProject->unit, "\n");
        printf("Enter Phone: ");
        fgets(newProject->phone, sizeof(newProject->phone), stdin);
        strtok(newProject->phone, "\n");
    
        // 插入到链表的头部
        newProject->next = head;
        head = newProject;
    }
    
    // 信息浏览函数
    void browseProjects() {
        Project *current = head;
        while (current != NULL) {
            printf("\nProject ID: %d\n", current->id);
            printf("Project Name: %s\n", current->name);
            printf("Leader Name: %s\n", current->leader);
            printf("Title: %s\n", current->title);
            printf("Unit: %s\n", current->unit);
            printf("Phone: %s\n", current->phone);
            current = current->next;
        }
    }
    
    // 按主持人姓名查询
    void queryByLeaderName() {
        char leaderName[100];
        printf("Enter Leader Name to search: ");
        getchar(); // 清除缓冲区的换行符
        fgets(leaderName, sizeof(leaderName), stdin);
        strtok(leaderName, "\n");
    
        Project *current = head;
        while (current != NULL) {
            if (strcmp(current->leader, leaderName) == 0) {
                printf("\nProject ID: %d\n", current->id);
                printf("Project Name: %s\n", current->name);
                printf("Leader Name: %s\n", current->leader);
                printf("Title: %s\n", current->title);
                printf("Unit: %s\n", current->unit);
                printf("Phone: %s\n", current->phone);
            }
            current = current->next;
        }
    }
    
    // 按项目编号查询
    void queryByProjectID() {
        int projectID;
        printf("Enter Project ID to search: ");
        scanf("%d", &projectID);
    
        Project *current = head;
        while (current != NULL) {
            if (current->id == projectID) {
                printf("\nProject ID: %d\n", current->id);
                printf("Project Name: %s\n", current->name);
                printf("Leader Name: %s\n", current->leader);
                printf("Title: %s\n", current->title);
                printf("Unit: %s\n", current->unit);
                printf("Phone: %s\n", current->phone);
                return;
            }
            current = current->next;
        }
        printf("No project found with ID: %d\n", projectID);
    }
    
    // 信息删除函数
    void deleteProject() {
        int projectID;
        printf("Enter Project ID to delete: ");
        scanf("%d", &projectID);
    
        Project *current = head;
        Project *previous = NULL;
        while (current != NULL) {
            if (current->id == projectID) {
                if (previous == NULL) {
                    head = current->next;
                } else {
                    previous->next = current->next;
                }
                free(current);
                printf("Project with ID: %d deleted.\n", projectID);
                return;
            }
            previous = current;
            current = current->next;
        }
        printf("No project found with ID: %d\n", projectID);
    }
    
    // 信息修改函数
    void modifyProject() {
        int projectID;
        printf("Enter Project ID to modify: ");
        scanf("%d", &projectID);
    
        Project *current = head;
        while (current != NULL) {
            if (current->id == projectID) {
                printf("Enter new Project Name: ");
                getchar(); // 清除缓冲区的换行符
                fgets(current->name, sizeof(current->name), stdin);
                strtok(current->name, "\n");
                printf("Enter new Leader Name: ");
                fgets(current->leader, sizeof(current->leader), stdin);
                strtok(current->leader, "\n");
                printf("Enter new Title: ");
                fgets(current->title, sizeof(current->title), stdin);
                strtok(current->title, "\n");
                printf("Enter new Unit: ");
                fgets(current->unit, sizeof(current->unit), stdin);
                strtok(current->unit, "\n");
                printf("Enter new Phone: ");
                fgets(current->phone, sizeof(current->phone), stdin);
                strtok(current->phone, "\n");
    
                printf("Project with ID: %d modified.\n", projectID);
                return;
            }
            current = current->next;
        }
        printf("No project found with ID: %d\n", projectID);
    }
    
    int main() {
        int choice;
        do {
            displayMenu();
            scanf("%d", &choice);
    
            switch (choice) {
                case 1:
                    inputProject();
                    break;
                case 2:
                    browseProjects();
                    break;
                case 3:
                    queryByLeaderName();
                    break;
                case 4:
                    queryByProjectID();
                    break;
                case 5:
                    deleteProject();
                    break;
                case 6:
                    modifyProject();
                    break;
                case 0:
                    printf("Exiting program.\n");
                    break;
                default:
                    printf("Invalid choice. Please try again.\n");
            }
        } while (choice != 0);
    
        return 0;
    }
    

    代码详解

    1. 结构体定义

      • Project 结构体包含项目编号、项目名称、主持人姓名、职称、单位和电话等属性,以及指向下一个项目的指针 next
    2. 全局变量

      • head 变量指向链表的头节点,初始值为 NULL
    3. 菜单显示函数

      • displayMenu 函数用于显示菜单选项。
    4. 信息录入函数

      • inputProject 函数创建一个新的项目节点,并将其插入到链表的头部。
    5. 信息浏览函数

      • browseProjects 函数遍历链表,显示所有项目的信息。
    6. 按主持人姓名查询

      • queryByLeaderName 函数根据主持人姓名查找项目,并显示匹配的项目信息。
    7. 按项目编号查询

      • queryByProjectID 函数根据项目编号查找项目,并显示匹配的项目信息。
    8. 信息删除函数

      • deleteProject 函数根据项目编号删除项目节点。
    9. 信息修改函数

      • modifyProject 函数根据项目编号修改项目节点的信息。
    10. 主函数

      • main 函数实现菜单循环,根据用户选择调用相应的函数来操作项目信息。

    通过这段代码,你可以实现一个基本的科研项目信息管理系统,满足信息录入、浏览、查询、删除和修改的功能。希望这对你理解 C 语言的结构体和链表操作有所帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月10日
  • 已采纳回答 7月2日
  • 创建了问题 7月2日