题目:科研项目信息管理系统设计
科研项目信息包括项目编号、项目名称、主持人姓名、职称、单位、电话等(项目编号不重复)。试设计一科研项目信息管理系统,使之能提供以下功能:
1、系统以菜单方式工作,可以循环显示菜单,直至选择退出系统,才结束整个程序的运行
2、科研项目信息录入功能
3、科研项目信息浏览功能
4、科研项目信息查询功能
实现两种查询方式:
按主持人姓名查询
按项目编号查询
5、科研项目信息删除、修改功能
怎么用c语言设计这个
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注为了设计一个科研项目信息管理系统,我们需要实现以下几个部分:
- 定义结构体来存储科研项目信息。
- 编写函数实现信息的录入、浏览、查询、删除和修改。
- 设计一个菜单来提供这些功能,并实现循环操作,直到用户选择退出。
代码实现
以下是完整的 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; }代码详解
结构体定义:
Project结构体包含项目编号、项目名称、主持人姓名、职称、单位和电话等属性,以及指向下一个项目的指针next。
全局变量:
head变量指向链表的头节点,初始值为NULL。
菜单显示函数:
displayMenu函数用于显示菜单选项。
信息录入函数:
inputProject函数创建一个新的项目节点,并将其插入到链表的头部。
信息浏览函数:
browseProjects函数遍历链表,显示所有项目的信息。
按主持人姓名查询:
queryByLeaderName函数根据主持人姓名查找项目,并显示匹配的项目信息。
按项目编号查询:
queryByProjectID函数根据项目编号查找项目,并显示匹配的项目信息。
信息删除函数:
deleteProject函数根据项目编号删除项目节点。
信息修改函数:
modifyProject函数根据项目编号修改项目节点的信息。
主函数:
main函数实现菜单循环,根据用户选择调用相应的函数来操作项目信息。
通过这段代码,你可以实现一个基本的科研项目信息管理系统,满足信息录入、浏览、查询、删除和修改的功能。希望这对你理解 C 语言的结构体和链表操作有所帮助!
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用