{"title":"概述:要求学生应用C语言中学习到的数组、函数、指针、结构体等内容,编写一个完整的程序,实现编程要求。要求有良好的编写习惯、做好注释。\n\n一、\t设备管理系统\n该系统要求对实验室公共设备进行管理,包括对设备的录入、查询、显示、修改、统计等功能,使用者包括高级管理者和普通用户。\n功能要求:\n(1)\t设备信息包含设备名称、型号、采购时间、存放位置、设备负责人、借用人、借用时间以及归还时间;\n(2)\t高级管理者可对设备信息进行添加、修改、删除,同时还可以对普通用户进行添加和删除;\n(3)\t普通用户可对设备进行查询、申请借用;\n加分项:针对实际情况对系统进行完善和创新\n(4)运用文件\n内容:程序设计思路:\n1. 定义设备信息的结构体,包括设备名称、型号、采购时间、存放位置、设备负责人、借用人、借用时间以及归还时间;\n2. 定义一个设备管理系统的结构体,包含设备信息数组、高级管理者信息数组、普通用户信息数组,以及当前登录用户的角色;\n3. 实现设备信息的录入、查询、显示、修改、统计等功能的函数;\n4. 实现高级管理者对设备信息和用户信息的添加、修改、删除的函数;\n5. 实现普通用户对设备信息的查询和申请借用的函数;\n6. 利用文件来存储设备信息和用户信息,实现数据的持久化存储;\n7. 根据当前登录用户的角色调用相应的函数来完成相应的功能;\n8. 添加必要的注释,提高代码的可读性和可维护性。\n\n代码设计:\nc\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define MAX_DEVICES 100\n#define MAX_USERS 100\n#define MAX_NAME_LENGTH 50\n#define MAX_MODEL_LENGTH 50\n#define MAX_LOCATION_LENGTH 50\n#define MAX_USERNAME_LENGTH 20\n#define MAX_PASSWORD_LENGTH 20\n\ntypedef struct {\n\tchar name[MAX_NAME_LENGTH];\n\tchar model[MAX_MODEL_LENGTH];\n\tchar purchaseDate[20];\n\tchar location[MAX_LOCATION_LENGTH];\n\tchar owner[MAX_USERNAME_LENGTH];\n\tchar borrower[MAX_USERNAME_LENGTH];\n\tchar borrowDate[20];\n\tchar returnDate[20];\n} Device;\n\ntypedef struct {\n\tchar username[MAX_USERNAME_LENGTH];\n\tchar password[MAX_PASSWORD_LENGTH];\n} User;\n\ntypedef struct {\n\tDevice devices[MAX_DEVICES];\n\tUser admins[MAX_USERS];\n\tUser users[MAX_USERS];\n\tint deviceCount;\n\tint adminCount;\n\tint userCount;\n\tint currentUserType; // 0: admin, 1: user\n\tint currentUserId; // index in admins or users array\n} DeviceManagementSystem;\n\nvoid initDeviceManagementSystem(DeviceManagementSystem *dms) {\n\tdms->deviceCount = 0;\n\tdms->adminCount = 0;\n\tdms->userCount = 0;\n\tdms->currentUserType = -1;\n\tdms->currentUserId = -1;\n}\n\nvoid printDevice(Device device) {\n\tprintf("设备名称:%s\n", device.name);\n\tprintf("设备型号:%s\n", device.model);\n\tprintf("采购时间:%s\n", device.purchaseDate);\n\tprintf("设备存放位置:%s\n", device.location);\n\tprintf("设备负责人:%s\n", device.owner);\n\tprintf("设备借用人:%s\n", device.borrower);\n\tprintf("借用时间:%s\n", device.borrowDate);\n\tprintf("归还时间:%s\n", device.returnDate);\n}\n\nvoid addDevice(DeviceManagementSystem *dms) {\n\tif (dms->deviceCount >= MAX_DEVICES) {\n\t printf("设备数量已达上限,无法继续添加!\n");\n\t return;\n\t}\n\n\tDevice device;\n\tprintf("请输入设备名称:");\n\tscanf("%s", device.name);\n\tprintf("请输入设备型号:");\n\tscanf("%s", device.model);\n\tprintf("请输入采购时间:");\n\tscanf("%s", device.purchaseDate);\n\tprintf("请输入设备存放位置:");\n\tscanf("%s", device.location);\n\tprintf("请输入设备负责人:");\n\tscanf("%s", device.owner);\n\n\tdms->devices[dms->deviceCount] = device;\n\tdms->deviceCount++;\n\tprintf("设备添加成功!\n");\n}\n\nvoid searchDevice(DeviceManagementSystem dms, char *name) {\n\tint found = 0;\n\tfor (int i = 0; i < dms.deviceCount; i++) {\n\t if (strcmp(dms.devices[i].name, name) == 0) {\n\t printDevice(dms.devices[i]);\n\t found = 1;\n\t break;\n\t }\n\t}\n\tif (!found) {\n\t printf("未找到该设备!\n");\n\t}\n}\n\nvoid displayDevices(DeviceManagementSystem dms) {\n\tfor (int i = 0; i < dms.deviceCount; i++) {\n\t printDevice(dms.devices[i]);\n\t printf("-------------------------------\n");\n\t}\n}\n\nvoid updateDevice(DeviceManagementSystem *dms, char *name) {\n\tint found = 0;\n\tfor (int i = 0; i < dms->deviceCount; i++) {\n\t if (strcmp(dms->devices[i].name, name) == 0) {\n\t printf("请输入修改后的设备名称:");\n\t scanf("%s", dms->devices[i].name);\n\t printf("请输入修改后的设备型号:");\n\t scanf("%s", dms->devices[i].model);\n\t printf("请输入修改后的采购时间:");\n\t scanf("%s", dms->devices[i].purchaseDate);\n\t printf("请输入修改后的设备存放位置:");\n\t scanf("%s", dms->devices[i].location);\n\t printf("请输入修改后的设备负责人:");\n\t scanf("%s", dms->devices[i].owner);\n\t printf("设备信息修改成功!\n");\n\t found = 1;\n\t break;\n\t }\n\t}\n\tif (!found) {\n\t printf("未找到该设备!\n");\n\t}\n}\n\nvoid deleteDevice(DeviceManagementSystem *dms, char *name) {\n\tint found = 0;\n\tfor (int i = 0; i < dms->deviceCount; i++) {\n\t if (strcmp(dms->devices[i].name, name) == 0) {\n\t for (int j = i; j < dms->deviceCount - 1; j++) {\n\t dms->devices[j] = dms->devices[j + 1];\n\t }\n\t dms->deviceCount--;\n\t printf("设备删除成功!\n");\n\t found = 1;\n\t break;\n\t }\n\t}\n\tif (!found) {\n\t printf("未找到该设备!\n");\n\t}\n}\n\nvoid addUser(DeviceManagementSystem *dms, char *username, char *password, int userType) {\n\tUser user;\n\tstrcpy(user.username, username);\n\tstrcpy(user.password, password);\n\n\tif (userType == 0) {\n\t if (dms->adminCount >= MAX_USERS) {\n\t printf("管理员数量已达上限,无法继续添加!\n");\n\t return;\n\t }\n\t dms->admins[dms->adminCount] = user;\n\t dms->adminCount++;\n\t printf("管理员添加成功!\n");\n\t} else if (userType == 1) {\n\t if (dms->userCount >= MAX_USERS) {\n\t printf("普通用户数量已达上限,无法继续添加!\n");\n\t return;\n\t }\n\t dms->users[dms->userCount] = user;\n\t dms->userCount++;\n\t printf("普通用户添加成功!\n");\n\t}\n}\n\nvoid deleteUser(DeviceManagementSystem *dms, char *username, int userType) {\n\tint found = 0;\n\n\tif (userType == 0) {\n\t for (int i = 0; i < dms->adminCount; i++) {\n\t if (strcmp(dms->admins[i].username, username) == 0) {\n\t for (int j = i; j < dms->adminCount - 1; j++) {\n\t dms->admins[j] = dms->admins[j + 1];\n\t }\n\t dms->adminCount--;\n\t printf("管理员删除成功!\n");\n\t found = 1;\n\t break;\n\t }\n\t }\n\t} else if (userType == 1) {\n\t for (int i = 0; i < dms->userCount; i++) {\n\t if (strcmp(dms->users[i].username, username) == 0) {\n\t for (int j = i; j < dms->userCount - 1; j++) {\n\t dms->users[j] = dms->users[j + 1];\n\t }\n\t dms->userCount--;\n\t printf("普通用户删除成功!\n");\n\t found = 1;\n\t break;\n\t }\n\t }\n\t}\n\n\tif (!found) {\n\t printf("未找到该用户!\n");\n\t}\n}\n\nvoid searchDeviceByUser(DeviceManagementSystem dms, char *username) {\n\tint found = 0;\n\tfor (int i = 0; i < dms.deviceCount; i++) {\n\t if (strcmp(dms.devices[i].borrower, username) == 0) {\n\t printDevice(dms.devices[i]);\n\t found = 1;\n\t }\n\t}\n\tif (!found) {\n\t printf("未找到该用户借用的设备!\n");\n\t}\n}\n\nvoid borrowDevice(DeviceManagementSystem *dms, char *username, char *deviceName) {\n\tint found = 0;\n\tfor (int i = 0; i < dms->deviceCount; i++) {\n\t if (strcmp(dms->devices[i].name, deviceName) == 0) {\n\t if (strcmp(dms->devices[i].borrower, "") == 0) {\n\t strcpy(dms->devices[i].borrower, username);\n\t printf("设备借用成功!\n");\n\t found = 1;\n\t break;\n\t } else {\n\t printf("该设备已被借用!\n");\n\t found = 1;\n\t break;\n\t }\n\t }\n\t}\n\tif (!found) {\n\t printf("未找到该设备!\n");\n\t}\n}\n\nvoid showMenu() {\n\tprintf("设备管理系统菜单\n");\n\tprintf("1. 添加设备\n");\n\tprintf("2. 查询设备\n");\n\tprintf("3. 显示设备\n");\n\tprintf("4. 修改设备\n");\n\tprintf("5. 删除设备\n");\n\tprintf("6. 添加用户\n");\n\tprintf("7. 删除用户\n");\n\tprintf("8. 查询用户借用设备\n");\n\tprintf("9. 借用设备\n");\n\tprintf("0. 退出系统\n");\n\tprintf("请选择操作:");\n}\n\nint main() {\n\tDeviceManagementSystem dms;\n\tinitDeviceManagementSystem(&dms);\n\n\t// 从文件中读取设备信息和用户信息\n\t// ...\n\n\twhile (1) {\n\t showMenu();\n\n\t int choice;\n\t scanf("%d", &choice);\n\n\t if (choice == 0) {\n\t break;\n\t }\n\n\t switch (choice) {\n\t case 1: {\n\t if (dms.currentUserType == 0) {\n\t addDevice(&dms);\n\t } else {\n\t printf("权限不足,无法添加设备!\n");\n\t }\n\t break;\n\t }\n\t case 2: {\n\t char name[MAX_NAME_LENGTH];\n\t printf("请输入设备名称:");\n\t scanf("%s", name);\n\n\t searchDevice(dms, name);\n\t break;\n\t }\n\t case 3: {\n\t displayDevices(dms);\n\t break;\n\t }\n\t case 4: {\n\t if (dms.currentUserType == 0) {\n\t char name[MAX_NAME_LENGTH];\n\t printf("请输入设备名称:");\n\t scanf("%s", name);\n\n\t updateDevice(&dms, name);\n\t } else {\n\t printf("权限不足,无法修改设备!\n");\n\t }\n\t break;\n\t }\n\t case 5: {\n\t if (dms.currentUserType == 0) {\n\t char name[MAX_NAME_LENGTH];\n\t printf("请输入设备名称:");\n\t scanf("%s", name);\n\n\t deleteDevice(&dms, name);\n\t } else {\n\t printf("权限不足,无法删除设备!\n");\n\t }\n\t break;\n\t }\n\t case 6: {\n\t if (dms.currentUserType == 0) {\n\t char username[MAX_USERNAME_LENGTH];\n\t char password[MAX_PASSWORD_LENGTH];\n\t int userType;\n\n\t printf("请输入用户名:");\n\t scanf("%s", username);\n\t printf("请输入密码:");\n\t scanf("%s", password);\n\t printf("请输入用户类型(0: 管理员, 1: 用户):");\n\t scanf("%d", &userType);\n\n\t addUser(&dms, username, password, userType);\n\t } else {\n\t printf("权限不足,无法添加用户!\n");\n\t }\n\t break;\n\t }\n\t case 7: {\n\t if (dms.currentUserType == 0) {\n\t char username[MAX_USERNAME_LENGTH];\n\t int userType;\n\n\t printf("请输入用户名:");\n\t scanf("%s", username);\n\t printf("请输入用户类型(0: 管理员, 1: 用户):");\n\t scanf("%d", &userType);\n\n\t deleteUser(&dms, username, userType);\n\t } else {\n\t printf("权限不足,无法删除用户!\n");\n\t }\n\t break;\n\t }\n\t case 8: {\n\t char username[MAX_USERNAME_LENGTH];\n\t printf("请输入用户名:");\n\t scanf("%s", username);\n\n\t searchDeviceByUser(dms, username);\n\t break;\n\t }\n\t case 9: {\n\t if (dms.currentUserType == 1) {\n\t char deviceName[MAX_NAME_LENGTH];\n\t printf("请输入设备名称:");\n\t scanf("%s", deviceName);\n\n\t borrowDevice(&dms, dms.users[dms.currentUserId].username, deviceName);\n\t } else {\n\t printf("权限不足,无法借用设备!\n");\n\t }\n\t break;\n\t }\n\t default:\n\t printf("无效的选项!\n");\n\t break;\n\t }\n\t}\n\n\t// 将设备信息和用户信息写入文件\n\t// ...\n\n\treturn 0;\n}\n\n\n备注:以上代码只是提供了一个简单的设备管理系统的实现框架,具体实现还需要根据实际需求进行完善和创新。还需添加文件读写的相关代码来实现数据的持久化存储。


原文地址: https://www.cveoy.top/t/topic/pqJt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录