C语言实现Windows环境下科研项目信息管理系统:含录入、查询、修改等功能
下面是一个简单的C语言科研项目信息管理系统的实现。这个程序使用了文件来保存项目信息,并提供了菜单驱动的用户界面。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define FILENAME "projects.dat" typedef struct { int id; char name[100]; char leader[50]; char title[50]; char institution[100]; char phone[15]; } Project; void addProject(); void viewProjects(); void searchProject(); void deleteProject(); void modifyProject(); void displayMenu(); int main() { int choice; do { displayMenu(); scanf("%d", &choice); switch (choice) { case 1: addProject(); break; case 2: viewProjects(); break; case 3: searchProject(); break; case 4: deleteProject(); break; case 5: modifyProject(); break; case 6: printf("退出系统。\n"); break; default: printf("无效的选择,请重新选择。\n"); } } while (choice != 6); return 0; } void displayMenu() { printf("\n科研项目信息管理系统\n"); printf("1. 录入项目信息\n"); printf("2. 浏览项目信息\n"); printf("3. 查询项目信息\n"); printf("4. 删除项目信息\n"); printf("5. 修改项目信息\n"); printf("6. 退出系统\n"); printf("请选择操作:"); } void addProject() { Project project; FILE *fp = fopen(FILENAME, "ab"); if (!fp) { printf("无法打开文件。\n"); return; } printf("输入项目编号: "); scanf("%d", &project.id); printf("输入项目名称: "); scanf(" %[^\n]", project.name); printf("输入主持人姓名: "); scanf(" %[^\n]", project.leader); printf("输入主持人职称: "); scanf(" %[^\n]", project.title); printf("输入主持人单位: "); scanf(" %[^\n]", project.institution); printf("输入主持人电话: "); scanf(" %[^\n]", project.phone); fwrite(&project, sizeof(Project), 1, fp); fclose(fp); } void viewProjects() { Project project; FILE *fp = fopen(FILENAME, "rb"); if (!fp) { printf("无法打开文件。\n"); return; } while (fread(&project, sizeof(Project), 1, fp)) { printf("编号: %d, 名称: %s, 主持人: %s, 职称: %s, 单位: %s, 电话: %s\n", project.id, project.name, project.leader, project.title, project.institution, project.phone); } fclose(fp); } void searchProject() { int choice; printf("1. 按主持人姓名查询\n2. 按项目编号查询\n选择查询方式: "); scanf("%d", &choice); if (choice == 1) { char name[50]; printf("输入主持人姓名: "); scanf(" %[^\n]", name); Project project; FILE *fp = fopen(FILENAME, "rb"); if (!fp) { printf("无法打开文件。\n"); return; } while (fread(&project, sizeof(Project), 1, fp) { if (strcmp(project.leader, name) == 0) { printf("编号: %d, 名称: %s, 主持人: %s, 职称: %s, 单位: %s, 电话: %s\n", project.id, project.name, project.leader, project.title, project.institution, project.phone); } } fclose(fp); } else if (choice == 2) { int id; printf("输入项目编号: "); scanf("%d", &id); Project project; FILE *fp = fopen(FILENAME, "rb"); if (!fp) { printf("无法打开文件。\n"); return; } while (fread(&project, sizeof(Project), 1, fp)) { if (project.id == id) { printf("编号: %d, 名称: %s, 主持人: %s, 职称: %s, 单位: %s, 电话: %s\n", project.id, project.name, project.leader, project.title, project.institution, project.phone); } } fclose(fp); } else { printf("无效的选择。\n"); } } void deleteProject() { int id; printf("输入要删除的项目编号: "); scanf("%d", &id); FILE *fp = fopen(FILENAME, "rb"); FILE *temp = fopen("temp.dat", "wb"); if (!fp || !temp) { printf("无法打开文件。\n"); return; } Project project; int found = 0; while (fread(&project, sizeof(Project), 1, fp)) { if (project.id != id) { fwrite(&project, sizeof(Project), 1, temp); } else { found = 1; } } fclose(fp); fclose(temp); remove(FILENAME); rename("temp.dat", FILENAME); if (found) { printf("项目删除成功。\n"); } else { printf("未找到项目。\n"); } } void modifyProject() { int id; printf("输入要修改的项目编号: "); scanf("%d", &id); FILE *fp = fopen(FILENAME, "rb+"); if (!fp) { printf("无法打开文件。\n"); return; } Project project; int found = 0; while (fread(&project, sizeof(Project), 1, fp)) { if (project.id == id) { found = 1; printf("输入新的项目名称: "); scanf(" %[^\n]", project.name); printf("输入新的主持人姓名: "); scanf(" %[^\n]", project.leader); printf("输入新的主持人职称: "); scanf(" %[^\n]", project.title); printf("输入新的主持人单位: "); scanf(" %[^\n]", project.institution); printf("输入新的主持人电话: "); scanf(" %[^\n]", project.phone); fseek(fp, -sizeof(Project), SEEK_CUR); fwrite(&project, sizeof(Project), 1, fp); break; } } fclose(fp); if (found) { printf("项目修改成功。\n"); } else { printf("未找到项目。\n"); } } ``` 额外需要注意的逻辑点: 1. 文件操作时,确保文件正确打开和关闭,避免资源泄露。 2. 在修改和删除操作中,使用临时文件来存储更新后的数据,确保数据完整性。 3. 在用户输入时,考虑输入验证和错误处理,提高程序的健壮性。 ######[AI写代码神器 | 1596点数解答 | 2025-03-04 21:00:50]
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)441
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)435
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)371
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)449
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)246
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)190
- Windows 系统下按键精灵:绑定窗口实现鼠标左键点击及开发注意要点(DeepSeek | 126点数解答 | 2025-08-24 23:48:27)152
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)342
- 深度剖析:黑盒、白盒、单元、集成、系统与验收测试的区别与联系 (百度文心 | 424点数解答 | 2023-11-09 18:24:11)314
- Spring Boot 打造 MallShop 购物商城:多角色权限、全业务功能的 Web 应用奇迹 (GPT | 1095点数解答 | 2024-12-09 14:06:47)383
- C++实现银行排队系统:从思路到代码的完整解析(讯飞星火 | 2048点数解答 | 2024-12-11 15:11:23)502
- Windows 10 下用按键精灵:鼠标左键一键绑定窗口及代码详解与注意要点(字节豆包 | 509点数解答 | 2025-08-24 23:34:49)257